Christofides algorithm

You are encouraged to solve this task according to the task description, using any language you may know.
The Christofides algorithm is an approximation algorithm for solving the metric traveling salesman problem (TSP), a classic optimization problem in graph theory and computer science. Given a complete undirected graph with non-negative edge weights satisfying the triangle inequality, the algorithm produces a Hamiltonian circuit (a tour visiting each vertex exactly once) with a total weight at most times the weight of the optimal tour.
- Problem Description
The metric TSP is defined as follows: given a set of vertices and a distance function for each pair of vertices and , find a Hamiltonian circuit with the minimum total distance. The distance function must satisfy:
- (non-negativity),
- (symmetry),
- (triangle inequality).
The TSP is NP-hard, meaning no known polynomial-time algorithm can solve it exactly for all cases unless . The Christofides algorithm provides a polynomial-time approximation with a guaranteed approximation ratio of for metric TSP instances.
- Performance Guarantee
The algorithm guarantees that the weight of the resulting tour is at most times the weight of the optimal TSP tour. This bound is derived as follows:
- The MST weight is at most the weight of the optimal tour (since removing one edge from the optimal tour yields a spanning tree).
- The minimum-weight perfect matching for the odd-degree vertices has a weight at most half the optimal tour weight (since the optimal tour induces a matching on these vertices).
- The Eulerian circuit’s weight is the sum of the MST and matching weights, and shortcutting does not increase the weight due to the triangle inequality.
Thus, the total weight is at most , where is the weight of the optimal tour.
- Complexity
The algorithm runs in polynomial time:
- MST computation: using Kruskal’s or Prim’s algorithm, where is the number of edges and is the number of vertices.
- Odd-degree vertex identification: .
- Minimum-weight perfect matching: using algorithms like the blossom algorithm.
- Eulerian circuit construction: .
- Shortcut to Hamiltonian circuit: .
The overall time complexity is dominated by the matching step, resulting in for a complete graph where .
- Limitations
While the Christofides algorithm provides a -approximation for metric TSP, it does not apply to non-metric instances (where the triangle inequality does not hold). Additionally, the bound is not always tight; in some cases, the algorithm may produce a tour closer to the optimal. However, no polynomial-time algorithm is known to achieve a better approximation ratio for metric TSP unless .
- Applications
The Christofides algorithm is used in logistics, circuit design, and network optimization, where finding near-optimal tours is critical. It serves as a practical heuristic for problems like vehicle routing and scheduling, balancing computational efficiency with solution quality.
- Algorithm Overview
The Christofides algorithm, proposed by Nicos Christofides in 1976, proceeds as follows:
- Construct a minimum spanning tree (MST) of the graph using an algorithm like Kruskal's algorithm or Prim's algorithm.
- Identify the vertices with odd degree in the MST. Since a spanning tree has edges, the number of odd-degree vertices is even.
- Compute a minimum-weight perfect matching for these odd-degree vertices, forming a subgraph where each vertex has degree .
- Combine the MST and the matching to form a multigraph that is connected and has even degrees for all vertices.
- Find an Eulerian circuit in this multigraph (a circuit visiting each edge exactly once).
- Convert the Eulerian circuit into a Hamiltonian circuit by "shortcutting" repeated vertices, leveraging the triangle inequality to ensure the total weight does not increase.
using System;
using System.Collections.Generic;
using System.Linq;
namespace ChristofidesAlgorithm
{
public class Program
{
public static void Main(string[] args)
{
var data = new List<Pair>
{
new Pair(1380, 939), new Pair(2848, 96), new Pair(3510, 1671), new Pair(457, 334), new Pair(3888, 666),
new Pair(984, 965), new Pair(2721, 1482), new Pair(1286, 525), new Pair(2716, 1432), new Pair(738, 1325),
new Pair(1251, 1832), new Pair(2728, 1698), new Pair(3815, 169), new Pair(3683, 1533), new Pair(1247, 1945),
new Pair(123, 862), new Pair(1234, 1946), new Pair(252, 1240), new Pair(611, 673), new Pair(2576, 1676),
new Pair(928, 1700), new Pair(53, 857), new Pair(1807, 1711), new Pair(274, 1420), new Pair(2574, 946),
new Pair(178, 24), new Pair(2678, 1825), new Pair(1795, 962), new Pair(3384, 1498), new Pair(3520, 1079),
new Pair(1256, 61), new Pair(1424, 1728), new Pair(3913, 192), new Pair(3085, 1528), new Pair(2573, 1969),
new Pair(463, 1670), new Pair(3875, 598), new Pair(298, 1513), new Pair(3479, 821), new Pair(2542, 236),
new Pair(3955, 1743), new Pair(1323, 280), new Pair(3447, 1830), new Pair(2936, 337), new Pair(1621, 1830),
new Pair(3373, 1646), new Pair(1393, 1368), new Pair(3874, 1318), new Pair(938, 955), new Pair(3022, 474),
new Pair(2482, 1183), new Pair(3854, 923), new Pair(376, 825), new Pair(2519, 135), new Pair(2945, 1622),
new Pair(953, 268), new Pair(2628, 1479), new Pair(2097, 981), new Pair(890, 1846), new Pair(2139, 1806),
new Pair(2421, 1007), new Pair(2290, 1810), new Pair(1115, 1052), new Pair(2588, 302), new Pair(327, 265),
new Pair(241, 341), new Pair(1917, 687), new Pair(2991, 792), new Pair(2573, 599), new Pair(19, 674),
new Pair(3911, 1673), new Pair(872, 1559), new Pair(2863, 558), new Pair(929, 1766), new Pair(839, 620),
new Pair(3893, 102), new Pair(2178, 1619), new Pair(3822, 899), new Pair(378, 1048), new Pair(1178, 100),
new Pair(2599, 901), new Pair(3416, 143), new Pair(2961, 1605), new Pair(611, 1384), new Pair(3113, 885),
new Pair(2597, 1830), new Pair(2586, 1286), new Pair(161, 906), new Pair(1429, 134), new Pair(742, 1025),
new Pair(1625, 1651), new Pair(1187, 706), new Pair(1787, 1009), new Pair(22, 987), new Pair(3640, 43),
new Pair(3756, 882), new Pair(776, 392), new Pair(1724, 1642), new Pair(198, 1810), new Pair(3950, 1558)
};
var points = data.Select((pair, index) => new Point(pair, index)).ToList();
ChristofidesPath(points);
}
// Display and return an approximation to the optimum travelling salesman path using the Christofides algorithm
private static Result ChristofidesPath(List<Point> points)
{
if (!points.Any())
{
return new Result(new List<int>(), 0.0);
}
if (points.Count == 1)
{
return new Result(new List<int> { points.First().Id }, 0.0);
}
var graph = new Graph(points);
graph.Display();
var minimumSpanningTree = graph.MinimumSpanningTree();
Console.WriteLine($"Minimum spanning tree: {string.Join(", ", minimumSpanningTree)}\n");
var oddVertices = graph.OddVertices(minimumSpanningTree);
Console.WriteLine($"Odd vertices in minimum spanning tree: [{string.Join(", ", oddVertices)}]\n");
var minimumWeightMatching = graph.MinimumWeightMatching(minimumSpanningTree, oddVertices);
Console.WriteLine($"Minimum weight matching: {string.Join(", ", minimumWeightMatching)}\n");
var eulerianCircuit = graph.EulerianCircuit(minimumWeightMatching);
Console.WriteLine($"Eulerian circuit: [{string.Join(", ", eulerianCircuit)}]\n");
if (!eulerianCircuit.Any())
{
Console.Error.WriteLine("Error: Christofides path could not be found.");
return new Result(new List<int>(), -1.0);
}
var result = graph.HamiltonianCircuit(eulerianCircuit);
Console.WriteLine($"Result path: [{string.Join(", ", result.Path)}]\n");
Console.WriteLine($"Length of the result path: {result.Length:F2}");
return result;
}
}
public record Pair(double X, double Y);
public record Point(Pair Pair, int Id);
public record Edge(int U, int V, double Weight)
{
public override string ToString()
{
return $"({U}, {V}, {Weight:F2})";
}
}
public class Graph
{
private readonly List<List<double>> distanceLists;
private readonly int pointCount;
public Graph(List<Point> points)
{
pointCount = points.Count;
distanceLists = Enumerable.Range(0, pointCount)
.Select(i => Enumerable.Repeat(0.0, pointCount).ToList())
.ToList();
Func<Point, Point, double> distance = (one, two) =>
Math.Sqrt(Math.Pow(one.Pair.X - two.Pair.X, 2) + Math.Pow(one.Pair.Y - two.Pair.Y, 2));
for (int i = 0; i < pointCount; i++)
{
for (int j = i + 1; j < pointCount; j++)
{
double dist = distance(points[i], points[j]);
distanceLists[i][j] = dist;
distanceLists[j][i] = dist;
}
}
}
// Return the minimum spanning tree using Kruskal's algorithm
public List<Edge> MinimumSpanningTree()
{
var edges = new List<Edge>();
if (pointCount == 0)
{
return edges;
}
for (int i = 0; i < pointCount; i++)
{
for (int j = i + 1; j < pointCount; j++) // Avoids duplicates and self-loops
{
edges.Add(new Edge(i, j, distanceLists[i][j]));
}
}
// Sort edges by weight
edges.Sort((e1, e2) => e1.Weight.CompareTo(e2.Weight));
var minimumSpanningTree = new List<Edge>();
var unionFind = new UnionFind(pointCount);
int edgeCount = 0;
foreach (var edge in edges)
{
if (unionFind.Unite(edge.U, edge.V))
{
minimumSpanningTree.Add(edge);
edgeCount++;
if (edgeCount == pointCount - 1)
{
break; // An optimization, since the minimum spanning tree has n - 1 edges
}
}
}
return minimumSpanningTree;
}
// Return a list of vertices with odd degree in the minimum spanning tree
public List<int> OddVertices(List<Edge> minimumSpanningTree)
{
var degrees = Enumerable.Repeat(0, pointCount).ToList();
foreach (var edge in minimumSpanningTree)
{
degrees[edge.U]++;
degrees[edge.V]++;
}
return Enumerable.Range(0, pointCount).Where(i => degrees[i] % 2 == 1).ToList();
}
// Return a minimum weight matching using a greedy heuristic
public List<Edge> MinimumWeightMatching(List<Edge> minimumSpanningTree, List<int> oddVertices)
{
var minimumWeightMatching = new List<Edge>();
if (!oddVertices.Any())
{
return minimumWeightMatching;
}
// All elements of 'minimumSpanningTree' are included
minimumWeightMatching.AddRange(minimumSpanningTree);
// Create a copy to prevent mutation of the argument 'oddVertices'
var currentOdd = new List<int>(oddVertices);
// Shuffle for randomness
var random = new Random();
for (int i = currentOdd.Count - 1; i > 0; i--)
{
int j = random.Next(i + 1);
(currentOdd[i], currentOdd[j]) = (currentOdd[j], currentOdd[i]);
}
// Maintain a record of the visited indices in the shuffled 'currentOdd' list
var visited = new HashSet<int>();
for (int i = 0; i < currentOdd.Count; i++)
{
if (visited.Contains(i)) // Omit a vertex which has already been processed
{
continue;
}
int v = currentOdd[i];
double minimumDistance = double.MaxValue;
int? closestUIndex = null;
// Find the closest unmatched odd vertex occurring after 'v' in the shuffled 'currentOdd' list
for (int j = i + 1; j < currentOdd.Count; j++)
{
if (!visited.Contains(j)) // Check whether a vertex is available
{
int u = currentOdd[j];
if (distanceLists[v][u] < minimumDistance)
{
minimumDistance = distanceLists[v][u];
closestUIndex = j;
}
}
}
if (closestUIndex.HasValue)
{
int j = closestUIndex.Value;
int u = currentOdd[j];
minimumWeightMatching.Add(new Edge(v, u, minimumDistance));
visited.Add(i); // Mark both vertices as processed
visited.Add(j);
}
else
{
// This should not happen in the Christofides algorithm
// as the number of odd vertices is always even.
// If it does, it might indicate an issue with the input data
// or a graph where matching is not possible.
throw new InvalidOperationException($"Could not match an odd vertex in minimum weight matching: {v}");
}
}
return minimumWeightMatching;
}
// Return a list of vertices forming an Eulerian circuit using Hierholzer's algorithm
public List<int> EulerianCircuit(List<Edge> minimumWeightMatching)
{
var circuit = new List<int>();
if (!minimumWeightMatching.Any())
{
return circuit;
}
// Create adjacency lists for the argument 'minimumWeightMatching'
var adjacencyLists = Enumerable.Range(0, pointCount)
.Select(i => new List<Twin>())
.ToList();
for (int index = 0; index < minimumWeightMatching.Count; index++)
{
var edge = minimumWeightMatching[index];
adjacencyLists[edge.U].Add(new Twin(edge.V, index));
adjacencyLists[edge.V].Add(new Twin(edge.U, index));
}
var edgesUsed = new HashSet<int>();
var stack = new Stack<int>();
// Start from any vertex having edges.
// A suitable vertex is guaranteed to exist if 'minimumSpanningTree' is not empty
int currentVertex = minimumWeightMatching.First().U;
stack.Push(currentVertex);
while (stack.Any())
{
currentVertex = stack.Peek();
bool foundEdge = false;
// Attempt to find an unused edge from the current vertex
while (adjacencyLists[currentVertex].Any())
{
var twin = adjacencyLists[currentVertex].Last();
adjacencyLists[currentVertex].RemoveAt(adjacencyLists[currentVertex].Count - 1);
if (!edgesUsed.Contains(twin.Index))
{
edgesUsed.Add(twin.Index);
stack.Push(twin.HalfEdge);
foundEdge = true;
break; // Move to the next vertex which is 'twin.HalfEdge'
}
}
// If no unused edge was found from 'currentVertex',
// either the adjacency list was empty or all its edges have been used
if (!foundEdge)
{
circuit.Add(stack.Pop()); // Backtrack
}
}
circuit.Reverse(); // The circuit has been constructed in reverse order
return circuit;
}
public Result HamiltonianCircuit(List<int> eulerianCircuit)
{
// Create a Hamiltonian circuit by removing any repeated visits to the same vertex
var christofidesPath = new List<int>();
double length = 0.0;
var visited = new HashSet<int>();
int current = eulerianCircuit.First();
christofidesPath.Add(current);
visited.Add(current);
foreach (int vertex in eulerianCircuit)
{
if (!visited.Contains(vertex))
{
christofidesPath.Add(vertex);
visited.Add(vertex);
length += distanceLists[current][vertex]; // Add distance from previous vertex in path
current = vertex; // Update current vertex in path
}
}
// Add the edge returning to the start vertex
length += distanceLists[current][christofidesPath.First()];
christofidesPath.Add(christofidesPath.First()); // Complete the cycle
return new Result(christofidesPath, length);
}
public void Display()
{
Console.WriteLine("Graph: {");
for (int u = 0; u < pointCount; u++)
{
Console.Write($"{u,3}: {{");
bool first = true;
for (int v = 0; v < pointCount; v++)
{
if (u != v)
{
if (!first)
{
Console.Write(", ");
}
Console.Write($"{v}: {distanceLists[u][v]:F2}");
first = false;
}
}
Console.WriteLine("}" + (u == pointCount - 1 ? "" : ","));
}
Console.WriteLine("}\n");
}
private record Twin(int HalfEdge, int Index);
private class UnionFind
{
private readonly List<int> parents;
private readonly List<int> ranks;
public UnionFind(int number)
{
parents = Enumerable.Range(0, number).ToList();
ranks = Enumerable.Repeat(0, number).ToList();
}
public int Find(int n)
{
if (parents[n] == n)
{
return n;
}
// Path compression
parents[n] = Find(parents[n]);
return parents[n];
}
public bool Unite(int i, int j)
{
int rootI = Find(i);
int rootJ = Find(j);
if (rootI != rootJ)
{
int comparison = ranks[rootI].CompareTo(ranks[rootJ]);
switch (comparison)
{
case -1:
parents[rootI] = rootJ;
break;
case 1:
parents[rootJ] = rootI;
break;
case 0:
parents[rootJ] = rootI;
ranks[rootI]++;
break;
}
return true;
}
return false;
}
}
}
public record Result(List<int> Path, double Length);
}
- Output:
Graph: {
0: {1: 1692.83, 2: 2252.27, 3: 1103.61, 4: 2522.81, 5: 396.85, 6: 1446.77, 7: 424.54, 8: 1424.06, 9: 749.11, 10: 902.27, 11: 1546.99, 12: 2553.85, 13: 2378.37, 14: 1014.75, 15: 1259.36, 16: 1017.53, 17: 1167.47, 18: 813.71, 19: 1404.84, 20: 885.11, 21: 1329.53, 22: 882.22, 23: 1206.07, 24: 1194.02, 25: 1510.64, 26: 1571.56, 27: 415.64, 28: 2080.50, 29: 2144.57, 30: 886.71, 31: 790.23, 32: 2640.85, 33: 1803.87, 34: 1576.12, 35: 1172.71, 36: 2518.19, 37: 1224.83, 38: 2102.31, 39: 1358.11, 40: 2697.60, 41: 661.46, 42: 2250.86, 43: 1668.39, 44: 923.02, 45: 2114.69, 46: 429.20, 47: 2522.63, 48: 442.29, 49: 1706.57, 50: 1128.69, 51: 2474.05, 52: 1010.45, 53: 1394.18, 54: 1707.55, 55: 795.34, 56: 1359.82, 57: 718.23, 58: 1030.90, 59: 1152.29, 60: 1043.22, 61: 1259.66, 62: 288.09, 63: 1365.66, 64: 1250.23, 65: 1286.44, 66: 593.19, 67: 1617.69, 68: 1240.50, 69: 1386.56, 70: 2635.28, 71: 801.54, 72: 1531.16, 73: 941.98, 74: 628.05, 75: 2648.72, 76: 1048.43, 77: 2442.33, 78: 1007.91, 79: 862.97, 80: 1219.59, 81: 2186.07, 82: 1715.55, 83: 888.47, 84: 1733.84, 85: 1508.30, 86: 1254.93, 87: 1219.45, 88: 806.49, 89: 643.77, 90: 752.97, 91: 302.55, 92: 412.98, 93: 1358.85, 94: 2431.13, 95: 2376.68, 96: 814.88, 97: 782.65, 98: 1468.25, 99: 2643.49},
1: {0: 1692.83, 2: 1708.47, 3: 2402.82, 4: 1185.96, 5: 2056.61, 6: 1391.81, 7: 1619.84, 8: 1342.51, 9: 2441.83, 10: 2358.84, 11: 1606.49, 12: 969.75, 13: 1661.98, 14: 2445.81, 15: 2830.61, 16: 2455.10, 17: 2836.89, 18: 2310.22, 19: 1603.24, 20: 2501.84, 21: 2896.75, 22: 1921.43, 23: 2894.56, 24: 893.07, 25: 2670.97, 26: 1737.34, 27: 1363.37, 28: 1500.97, 29: 1190.74, 30: 1592.38, 31: 2165.92, 32: 1069.32, 33: 1451.48, 34: 1893.08, 35: 2857.57, 36: 1143.12, 37: 2917.26, 38: 961.14, 39: 336.51, 40: 1984.45, 41: 1536.06, 42: 1834.55, 43: 256.56, 44: 2124.21, 45: 1636.50, 46: 1932.62, 47: 1595.61, 48: 2094.27, 49: 416.12, 50: 1146.96, 51: 1302.29, 52: 2577.25, 53: 331.30, 54: 1529.08, 55: 1902.79, 56: 1400.39, 57: 1160.70, 58: 2626.07, 59: 1851.16, 60: 1006.11, 61: 1802.54, 62: 1979.20, 63: 331.72, 64: 2526.66, 65: 2618.49, 66: 1102.74, 67: 710.54, 68: 573.27, 69: 2887.44, 70: 1901.81, 71: 2458.65, 72: 462.24, 73: 2543.91, 74: 2076.21, 75: 1045.02, 76: 1663.86, 77: 1262.33, 78: 2647.11, 79: 1670.00, 80: 842.63, 81: 569.94, 82: 1513.23, 83: 2581.30, 84: 832.31, 85: 1752.07, 86: 1218.50, 87: 2806.43, 88: 1419.51, 89: 2301.80, 90: 1978.32, 91: 1769.47, 92: 1399.75, 93: 2963.13, 94: 793.77, 95: 1200.94, 96: 2093.04, 97: 1911.41, 98: 3155.99, 99: 1830.81},
2: {0: 2252.27, 1: 1708.47, 3: 3332.92, 4: 1073.74, 5: 2622.81, 6: 811.32, 7: 2501.90, 8: 829.19, 9: 2793.51, 10: 2264.73, 11: 782.47, 12: 1532.65, 13: 221.30, 14: 2279.53, 15: 3482.28, 16: 2292.55, 17: 3286.38, 18: 3065.98, 19: 934.01, 20: 2582.16, 21: 3551.54, 22: 1703.47, 23: 3245.72, 24: 1183.94, 25: 3716.83, 26: 846.13, 27: 1855.78, 28: 214.02, 29: 592.08, 30: 2769.95, 31: 2086.78, 32: 1532.92, 33: 448.41, 34: 983.25, 35: 3047.00, 36: 1133.38, 37: 3215.88, 38: 850.57, 39: 1730.97, 40: 450.79, 41: 2591.88, 42: 171.03, 43: 1452.25, 44: 1895.68, 45: 139.26, 46: 2138.57, 47: 507.06, 48: 2669.80, 49: 1292.65, 50: 1137.95, 51: 823.31, 52: 3246.18, 53: 1827.94, 54: 567.12, 55: 2916.62, 56: 902.66, 57: 1572.47, 58: 2625.84, 59: 1377.63, 60: 1275.47, 61: 1227.89, 62: 2473.70, 63: 1650.53, 64: 3479.70, 65: 3529.20, 66: 1872.41, 67: 1020.78, 68: 1423.78, 69: 3630.58, 70: 401.00, 71: 2640.38, 72: 1287.39, 73: 2582.75, 74: 2870.34, 75: 1615.07, 76: 1333.01, 77: 832.66, 78: 3193.36, 79: 2811.81, 80: 1192.82, 81: 1530.89, 82: 552.95, 83: 2913.17, 84: 880.57, 85: 926.74, 86: 1001.00, 87: 3435.26, 88: 2587.07, 89: 2842.38, 90: 1885.11, 91: 2515.46, 92: 1845.80, 93: 3554.43, 94: 1633.18, 95: 826.46, 96: 3018.38, 97: 1786.24, 98: 3314.92, 99: 454.28},
3: {0: 1103.61, 1: 2402.82, 2: 3332.92, 4: 3447.03, 5: 822.13, 6: 2538.42, 7: 850.72, 8: 2511.71, 9: 1030.07, 10: 1695.42, 11: 2649.14, 12: 3362.05, 13: 3441.61, 14: 1794.27, 15: 624.77, 16: 1789.49, 17: 928.90, 18: 372.34, 19: 2508.21, 20: 1444.92, 21: 660.87, 22: 1928.37, 23: 1101.31, 24: 2203.69, 25: 417.06, 26: 2675.06, 27: 1478.05, 28: 3149.96, 29: 3152.30, 30: 844.35, 31: 1696.56, 32: 3458.92, 33: 2886.52, 34: 2674.08, 35: 1336.01, 36: 3428.18, 37: 1189.67, 38: 3060.99, 39: 2087.30, 40: 3771.11, 41: 867.68, 42: 3343.37, 43: 2479.00, 44: 1895.50, 45: 3197.56, 46: 1394.72, 47: 3555.86, 48: 785.49, 49: 2568.82, 50: 2195.77, 51: 3447.68, 52: 497.64, 53: 2071.58, 54: 2801.62, 55: 500.37, 56: 2454.44, 57: 1763.01, 58: 1572.78, 59: 2235.15, 60: 2076.11, 61: 2353.39, 62: 973.90, 63: 2131.24, 64: 147.18, 65: 216.11, 66: 1502.07, 67: 2575.06, 68: 2132.53, 69: 554.48, 70: 3704.46, 71: 1293.39, 72: 2416.40, 73: 1507.78, 74: 477.20, 75: 3443.82, 76: 2147.80, 77: 3412.10, 78: 718.36, 79: 758.02, 80: 2215.77, 81: 2965.16, 82: 2808.11, 83: 1061.23, 84: 2712.55, 85: 2611.06, 86: 2332.15, 87: 644.05, 88: 992.36, 89: 747.47, 90: 1760.32, 91: 819.32, 92: 1491.48, 93: 784.62, 94: 3196.27, 95: 3344.20, 96: 324.23, 97: 1821.03, 98: 1498.55, 99: 3701.25},
4: {0: 2522.81, 1: 1185.96, 2: 1073.74, 3: 3447.03, 5: 2919.35, 6: 1423.99, 7: 2605.82, 8: 1400.12, 9: 3218.20, 10: 2883.28, 11: 1552.62, 12: 502.33, 13: 890.91, 14: 2934.40, 15: 3770.10, 16: 2946.54, 17: 3681.03, 18: 3277.01, 19: 1655.73, 20: 3135.40, 21: 3839.75, 22: 2328.64, 23: 3691.82, 24: 1343.50, 25: 3765.14, 26: 1675.52, 27: 2113.83, 28: 972.75, 29: 553.17, 30: 2700.64, 31: 2683.12, 32: 474.66, 33: 1178.07, 34: 1851.22, 35: 3569.12, 36: 69.23, 37: 3688.56, 38: 437.39, 39: 1413.02, 40: 1079.08, 41: 2593.88, 42: 1244.74, 43: 1007.25, 44: 2548.37, 45: 1107.08, 46: 2591.88, 47: 652.15, 48: 2964.12, 49: 887.03, 50: 1498.04, 51: 259.24, 52: 3515.60, 53: 1468.37, 54: 1342.83, 55: 2961.86, 56: 1499.52, 57: 1818.49, 58: 3221.86, 59: 2087.73, 60: 1506.11, 61: 1965.28, 62: 2799.74, 63: 1350.00, 64: 3583.51, 65: 3661.45, 66: 1971.11, 67: 905.81, 68: 1316.71, 69: 3869.01, 70: 1007.26, 71: 3145.43, 72: 1030.67, 73: 3156.85, 74: 3049.35, 75: 564.02, 76: 1957.63, 77: 242.17, 78: 3530.73, 79: 2768.48, 80: 1310.25, 81: 704.49, 82: 1319.49, 83: 3354.74, 84: 805.35, 85: 1738.27, 86: 1442.08, 87: 3734.72, 88: 2515.89, 89: 3166.42, 90: 2468.07, 91: 2701.30, 92: 2128.81, 93: 3879.30, 94: 670.55, 95: 253.14, 96: 3124.04, 97: 2373.91, 98: 3863.27, 99: 894.15},
5: {0: 396.85, 1: 2056.61, 2: 2622.81, 3: 822.13, 4: 2919.35, 6: 1812.31, 7: 533.67, 8: 1793.85, 9: 436.02, 10: 907.18, 11: 1891.78, 12: 2940.78, 13: 2758.12, 14: 1014.68, 15: 867.14, 16: 1012.35, 17: 781.95, 18: 473.70, 19: 1743.56, 20: 737.13, 21: 937.24, 22: 1110.79, 23: 843.28, 24: 1590.11, 25: 1239.00, 26: 1899.80, 27: 811.01, 28: 2458.47, 29: 2538.56, 30: 944.03, 31: 880.78, 32: 3029.29, 33: 2175.13, 34: 1879.61, 35: 876.62, 36: 2914.20, 37: 878.01, 38: 2499.15, 39: 1720.12, 40: 3071.18, 41: 764.29, 42: 2610.48, 43: 2050.53, 44: 1074.24, 45: 2484.17, 46: 574.19, 47: 2911.48, 48: 47.07, 49: 2096.31, 50: 1513.78, 51: 2870.31, 52: 623.91, 53: 1745.03, 54: 2068.13, 55: 697.69, 56: 1722.48, 57: 1113.11, 58: 886.00, 59: 1428.74, 60: 1437.61, 61: 1555.53, 62: 157.26, 63: 1735.62, 64: 960.03, 65: 970.27, 66: 973.54, 67: 2014.44, 68: 1630.61, 69: 1007.92, 70: 3011.41, 71: 604.47, 72: 1922.57, 73: 802.89, 74: 374.23, 75: 3034.31, 76: 1361.38, 77: 2838.77, 78: 611.66, 79: 886.49, 80: 1616.27, 81: 2567.16, 82: 2078.01, 83: 560.97, 84: 2130.50, 85: 1830.30, 86: 1633.84, 87: 825.11, 88: 942.65, 89: 249.33, 90: 938.87, 91: 329.07, 92: 804.20, 93: 962.25, 94: 2811.48, 95: 2773.24, 96: 609.58, 97: 1002.96, 98: 1154.05, 99: 3024.70},
6: {0: 1446.77, 1: 1391.81, 2: 811.32, 3: 2538.42, 4: 1423.99, 5: 1812.31, 7: 1724.84, 8: 50.25, 9: 1989.21, 10: 1511.09, 11: 216.11, 12: 1709.04, 13: 963.35, 14: 1545.01, 15: 2670.96, 16: 1557.71, 17: 2480.83, 18: 2259.77, 19: 242.20, 20: 1806.20, 21: 2740.23, 22: 942.25, 23: 2447.79, 24: 555.79, 25: 2931.32, 26: 345.68, 27: 1062.02, 28: 663.19, 29: 894.88, 30: 2040.95, 31: 1320.12, 32: 1756.41, 33: 366.90, 34: 508.99, 35: 2265.81, 36: 1453.68, 37: 2423.20, 38: 1005.73, 39: 1258.79, 40: 1261.30, 41: 1843.69, 42: 805.10, 43: 1165.01, 44: 1153.73, 45: 672.31, 46: 1332.88, 47: 1164.61, 48: 1859.25, 49: 1051.98, 50: 382.78, 51: 1263.40, 52: 2435.30, 53: 1362.06, 54: 264.15, 55: 2144.67, 56: 93.05, 57: 800.24, 58: 1866.83, 59: 666.11, 60: 561.81, 61: 541.61, 62: 1662.57, 63: 1187.47, 64: 2685.58, 65: 2729.89, 66: 1130.68, 67: 740.95, 68: 895.32, 69: 2820.22, 70: 1205.23, 71: 1850.60, 72: 934.85, 73: 1814.36, 74: 2070.02, 75: 1810.52, 76: 560.02, 77: 1245.83, 78: 2382.86, 79: 2071.42, 80: 593.67, 81: 1508.62, 82: 269.68, 83: 2112.27, 84: 714.19, 85: 369.43, 86: 237.99, 87: 2624.00, 88: 1867.18, 89: 2031.08, 90: 1108.95, 91: 1719.11, 92: 1046.94, 93: 2744.02, 94: 1707.42, 95: 1196.34, 96: 2229.60, 97: 1009.76, 98: 2544.23, 99: 1231.35},
7: {0: 424.54, 1: 1619.84, 2: 2501.90, 3: 850.72, 4: 2605.82, 5: 533.67, 6: 1724.84, 8: 1693.38, 9: 969.69, 10: 1307.47, 11: 1858.84, 12: 2553.93, 13: 2600.32, 14: 1420.54, 15: 1210.84, 16: 1421.95, 17: 1257.13, 18: 691.03, 19: 1728.84, 20: 1228.33, 21: 1276.92, 22: 1295.39, 23: 1350.99, 24: 1355.06, 25: 1216.00, 26: 1904.64, 27: 670.86, 28: 2312.65, 29: 2301.67, 30: 464.97, 31: 1210.89, 32: 2648.02, 33: 2059.71, 34: 1934.30, 35: 1410.09, 36: 2590.03, 37: 1397.24, 38: 2212.89, 39: 1288.82, 40: 2933.78, 41: 247.78, 42: 2524.47, 43: 1660.68, 44: 1347.31, 45: 2369.01, 46: 849.76, 47: 2706.77, 48: 553.18, 49: 1736.75, 50: 1365.06, 51: 2598.66, 52: 958.18, 53: 1293.21, 54: 1988.89, 55: 420.64, 56: 1646.54, 57: 930.41, 58: 1379.08, 59: 1539.02, 60: 1233.11, 61: 1630.72, 62: 554.05, 63: 1320.96, 64: 993.62, 65: 1061.08, 66: 651.46, 67: 1725.78, 68: 1289.13, 69: 1275.73, 70: 2865.05, 71: 1113.80, 72: 1577.35, 73: 1291.33, 74: 456.98, 75: 2641.09, 76: 1411.56, 77: 2563.43, 78: 1047.85, 79: 438.51, 80: 1365.78, 81: 2163.98, 82: 1992.99, 83: 1092.48, 84: 1862.13, 85: 1849.80, 86: 1506.36, 87: 1187.77, 88: 416.33, 89: 738.87, 90: 1175.92, 91: 206.31, 92: 696.60, 93: 1345.79, 94: 2402.84, 95: 2495.67, 96: 527.06, 97: 1199.81, 98: 1683.74, 99: 2857.27},
8: {0: 1424.06, 1: 1342.51, 2: 829.19, 3: 2511.71, 4: 1400.12, 5: 1793.85, 6: 50.25, 7: 1693.38, 9: 1980.89, 10: 1518.63, 11: 266.27, 12: 1674.21, 13: 972.26, 14: 1556.00, 15: 2654.91, 16: 1568.60, 17: 2471.47, 18: 2237.66, 19: 281.31, 20: 1807.97, 21: 2724.37, 22: 950.85, 23: 2442.03, 24: 506.32, 25: 2902.40, 26: 394.83, 27: 1033.99, 28: 671.25, 29: 878.08, 30: 2002.81, 31: 1325.47, 32: 1723.49, 33: 381.28, 34: 555.71, 35: 2265.54, 36: 1427.88, 37: 2419.36, 38: 977.49, 39: 1208.59, 40: 1277.44, 41: 1807.64, 42: 832.33, 43: 1116.88, 44: 1165.09, 45: 690.97, 46: 1324.55, 47: 1163.60, 48: 1840.87, 49: 1005.68, 50: 341.70, 51: 1246.65, 52: 2417.45, 53: 1311.88, 54: 297.56, 55: 2112.60, 56: 99.76, 57: 765.87, 58: 1872.34, 59: 687.61, 60: 517.35, 61: 569.53, 62: 1645.48, 63: 1137.23, 64: 2658.80, 65: 2704.79, 66: 1092.44, 67: 696.58, 68: 845.19, 69: 2801.49, 70: 1219.06, 71: 1848.37, 72: 886.28, 73: 1817.95, 74: 2045.11, 75: 1776.01, 76: 569.57, 77: 1227.73, 78: 2369.32, 79: 2034.62, 80: 543.74, 81: 1466.81, 82: 299.92, 83: 2105.55, 84: 675.88, 85: 415.41, 86: 195.49, 87: 2608.58, 88: 1827.89, 89: 2015.52, 90: 1112.76, 91: 1692.61, 92: 1020.77, 93: 2730.51, 94: 1668.26, 95: 1176.48, 96: 2201.18, 97: 1013.98, 98: 2546.21, 99: 1240.42},
9: {0: 749.11, 1: 2441.83, 2: 2793.51, 3: 1030.07, 4: 3218.20, 5: 436.02, 6: 1989.21, 7: 969.69, 8: 1980.89, 10: 721.26, 11: 2024.66, 12: 3286.98, 13: 2952.34, 14: 802.17, 15: 769.80, 16: 794.77, 17: 493.38, 18: 664.25, 19: 1871.21, 20: 420.39, 21: 829.61, 22: 1136.55, 23: 473.63, 24: 1874.71, 25: 1416.40, 26: 2003.40, 27: 1117.59, 28: 2651.65, 29: 2792.86, 30: 1366.02, 31: 795.62, 32: 3371.10, 33: 2355.76, 34: 1944.73, 35: 441.19, 36: 3220.14, 37: 478.48, 38: 2786.95, 39: 2107.21, 40: 3244.04, 41: 1197.60, 42: 2755.67, 43: 2409.84, 44: 1017.21, 45: 2654.48, 46: 656.41, 47: 3136.01, 48: 420.59, 49: 2437.39, 50: 1749.77, 51: 3141.82, 52: 617.29, 53: 2141.98, 54: 2226.89, 55: 1078.64, 56: 1896.26, 57: 1401.86, 58: 542.72, 59: 1481.27, 60: 1712.78, 61: 1626.02, 62: 465.47, 63: 2114.01, 64: 1136.89, 65: 1102.39, 66: 1340.55, 67: 2315.19, 68: 1973.40, 69: 969.93, 70: 3192.03, 71: 269.65, 72: 2259.18, 73: 480.59, 74: 712.20, 75: 3383.75, 76: 1469.71, 77: 3113.28, 78: 454.23, 79: 1301.62, 80: 1908.69, 81: 2927.25, 82: 2240.56, 83: 140.04, 84: 2415.41, 85: 1926.37, 86: 1848.41, 87: 713.08, 88: 1376.94, 89: 300.03, 90: 945.01, 91: 764.70, 92: 1095.56, 93: 791.77, 94: 3172.56, 95: 3050.34, 96: 933.77, 97: 1035.71, 98: 725.83, 99: 3220.44},
10: {0: 902.27, 1: 2358.84, 2: 2264.73, 3: 1695.42, 4: 2883.28, 5: 907.18, 6: 1511.09, 7: 1307.47, 8: 1518.63, 9: 721.26, 11: 1483.07, 12: 3056.09, 13: 2450.31, 14: 113.07, 15: 1487.71, 16: 115.26, 17: 1161.23, 18: 1323.96, 19: 1334.15, 20: 348.93, 21: 1544.61, 22: 569.01, 23: 1060.32, 24: 1592.27, 25: 2102.43, 26: 1427.02, 27: 1026.08, 28: 2158.99, 29: 2390.68, 30: 1771.01, 31: 201.85, 32: 3126.63, 33: 1859.02, 34: 1329.08, 35: 804.48, 36: 2899.68, 37: 1004.97, 38: 2446.65, 39: 2052.78, 40: 2705.46, 41: 1553.67, 42: 2196.00, 43: 2252.61, 44: 370.01, 45: 2130.14, 46: 485.24, 47: 2672.89, 48: 931.18, 49: 2231.73, 50: 1391.60, 51: 2757.15, 52: 1334.04, 53: 2118.40, 54: 1706.97, 55: 1592.14, 56: 1421.53, 57: 1199.97, 58: 361.27, 59: 888.38, 60: 1431.62, 61: 1039.23, 62: 791.77, 63: 2031.86, 64: 1819.14, 65: 1800.88, 66: 1324.61, 67: 2027.12, 68: 1807.75, 69: 1690.80, 70: 2664.75, 71: 467.09, 72: 2054.66, 73: 328.69, 74: 1280.11, 75: 3158.02, 76: 951.16, 77: 2735.06, 78: 1173.36, 79: 1733.54, 80: 1638.25, 81: 2745.90, 82: 1725.00, 83: 781.22, 84: 2088.98, 85: 1346.00, 86: 1442.34, 87: 1430.24, 88: 1707.30, 89: 954.11, 90: 415.50, 91: 1127.82, 92: 982.15, 93: 1491.46, 94: 2984.60, 95: 2679.09, 96: 1516.32, 97: 509.73, 98: 1053.23, 99: 2712.87},
11: {0: 1546.99, 1: 1606.49, 2: 782.47, 3: 2649.14, 4: 1552.62, 5: 1891.78, 6: 216.11, 7: 1858.84, 8: 266.27, 9: 2024.66, 10: 1483.07, 12: 1876.01, 13: 969.15, 14: 1501.46, 15: 2735.86, 16: 1514.44, 17: 2518.00, 18: 2352.09, 19: 153.58, 20: 1800.00, 21: 2804.09, 22: 921.09, 23: 2469.70, 24: 767.61, 25: 3050.37, 26: 136.49, 27: 1188.35, 28: 685.81, 29: 1005.20, 30: 2201.49, 31: 1304.35, 32: 1916.31, 33: 395.41, 34: 312.20, 35: 2265.17, 36: 1589.22, 37: 2437.03, 38: 1154.61, 39: 1473.78, 40: 1227.82, 41: 1996.18, 42: 731.02, 43: 1376.80, 44: 1114.84, 45: 647.09, 46: 1375.18, 47: 1207.36, 48: 1938.08, 49: 1258.81, 50: 570.74, 51: 1366.93, 52: 2508.79, 53: 1576.91, 54: 229.92, 55: 2279.37, 56: 240.75, 57: 955.12, 58: 1843.95, 59: 598.82, 60: 756.13, 61: 452.09, 62: 1737.55, 63: 1403.00, 64: 2796.12, 65: 2833.13, 66: 1296.09, 67: 943.40, 68: 1109.88, 69: 2896.08, 70: 1183.26, 71: 1861.20, 72: 1147.97, 73: 1800.28, 74: 2174.95, 75: 1975.97, 76: 555.64, 77: 1354.71, 78: 2438.24, 79: 2226.23, 80: 807.37, 81: 1700.40, 82: 250.87, 83: 2140.16, 84: 899.55, 85: 185.97, 86: 435.78, 87: 2686.40, 88: 2033.10, 89: 2096.93, 90: 1104.00, 91: 1832.69, 92: 1166.28, 93: 2797.85, 94: 1889.65, 95: 1312.49, 96: 2348.60, 97: 1005.56, 98: 2532.48, 99: 1229.99},
12: {0: 2553.85, 1: 969.75, 2: 1532.65, 3: 3362.05, 4: 502.33, 5: 2940.78, 6: 1709.04, 7: 2553.93, 8: 1674.21, 9: 3286.98, 10: 3056.09, 11: 1876.01, 13: 1370.37, 14: 3122.31, 15: 3756.48, 16: 3133.57, 17: 3720.49, 18: 3243.40, 19: 1950.94, 20: 3267.83, 21: 3824.39, 22: 2531.76, 23: 3755.49, 24: 1464.18, 25: 3639.89, 26: 2008.76, 27: 2170.08, 28: 1397.14, 29: 956.62, 30: 2561.28, 31: 2854.36, 32: 100.66, 33: 1542.65, 34: 2186.91, 35: 3672.72, 36: 433.18, 37: 3765.05, 38: 733.48, 39: 1274.76, 40: 1580.21, 41: 2494.47, 42: 1701.28, 43: 894.91, 44: 2751.83, 45: 1541.72, 46: 2702.53, 47: 1150.51, 48: 2982.44, 49: 849.63, 50: 1674.84, 51: 755.01, 52: 3501.01, 53: 1296.45, 54: 1693.55, 55: 2863.71, 56: 1767.79, 57: 1900.23, 58: 3371.64, 59: 2342.81, 60: 1626.49, 61: 2240.20, 62: 2840.72, 63: 1234.19, 64: 3489.32, 65: 3578.14, 66: 1967.42, 67: 1033.01, 68: 1314.33, 69: 3829.44, 70: 1507.06, 71: 3254.74, 72: 1028.41, 73: 3298.39, 74: 3009.98, 75: 102.83, 76: 2186.84, 77: 730.03, 78: 3547.62, 79: 2637.90, 80: 1419.32, 81: 399.85, 82: 1670.75, 83: 3426.64, 84: 1002.73, 85: 2059.72, 86: 1660.76, 87: 3727.58, 88: 2386.26, 89: 3189.99, 90: 2644.32, 91: 2682.30, 92: 2195.08, 93: 3880.20, 94: 215.64, 95: 715.44, 96: 3047.17, 97: 2557.74, 98: 3971.85, 99: 1395.55},
13: {0: 2378.37, 1: 1661.98, 2: 221.30, 3: 3441.61, 4: 890.91, 5: 2758.12, 6: 963.35, 7: 2600.32, 8: 972.26, 9: 2952.34, 10: 2450.31, 11: 969.15, 12: 1370.37, 14: 2470.60, 15: 3622.68, 16: 2483.58, 17: 3443.49, 18: 3190.11, 19: 1116.20, 20: 2760.06, 21: 3692.41, 22: 1884.43, 23: 3410.87, 24: 1254.77, 25: 3816.03, 26: 1046.56, 27: 1972.46, 28: 301.04, 29: 482.37, 30: 2838.51, 31: 2267.40, 32: 1360.58, 33: 598.02, 34: 1192.56, 35: 3222.91, 36: 954.51, 37: 3385.06, 38: 740.65, 39: 1727.45, 40: 343.63, 41: 2672.00, 42: 379.35, 43: 1410.12, 44: 2083.28, 45: 329.95, 46: 2295.94, 47: 287.59, 48: 2805.19, 49: 1248.36, 50: 1250.96, 51: 633.51, 52: 3381.94, 53: 1819.15, 54: 743.35, 55: 3008.84, 56: 1056.38, 57: 1679.32, 58: 2810.48, 59: 1567.95, 60: 1367.23, 61: 1420.27, 62: 2612.66, 63: 1647.54, 64: 3587.56, 65: 3642.56, 66: 1958.18, 67: 1013.88, 68: 1450.67, 69: 3763.35, 70: 267.55, 71: 2811.12, 72: 1273.98, 73: 2763.84, 74: 2986.96, 75: 1446.33, 76: 1507.46, 77: 649.06, 78: 3340.40, 79: 2885.92, 80: 1254.78, 81: 1415.41, 82: 725.58, 83: 3075.61, 84: 863.02, 85: 1125.88, 86: 1124.46, 87: 3577.38, 88: 2652.87, 89: 2984.55, 90: 2061.38, 91: 2629.44, 92: 1967.08, 93: 3701.49, 94: 1490.62, 95: 655.08, 96: 3122.90, 97: 1962.03, 98: 3495.99, 99: 268.17},
14: {0: 1014.75, 1: 2445.81, 2: 2279.53, 3: 1794.27, 4: 2934.40, 5: 1014.68, 6: 1545.01, 7: 1420.54, 8: 1556.00, 9: 802.17, 10: 113.07, 11: 1501.46, 12: 3122.31, 13: 2470.60, 15: 1560.85, 16: 13.04, 17: 1219.45, 18: 1422.14, 19: 1355.95, 20: 402.23, 21: 1615.36, 22: 606.92, 23: 1105.60, 24: 1661.00, 25: 2198.41, 26: 1436.02, 27: 1125.43, 28: 2183.25, 29: 2432.38, 30: 1884.02, 31: 280.03, 32: 3190.70, 33: 1884.71, 34: 1326.22, 35: 830.83, 36: 2953.10, 37: 1042.70, 38: 2499.04, 39: 2144.23, 40: 2715.52, 41: 1666.73, 42: 2203.00, 43: 2332.03, 44: 391.28, 45: 2146.92, 46: 595.18, 47: 2700.79, 48: 1037.10, 49: 2305.31, 50: 1451.16, 51: 2800.17, 52: 1418.82, 53: 2212.26, 54: 1728.45, 55: 1702.58, 56: 1457.50, 57: 1285.22, 58: 370.47, 59: 902.77, 60: 1502.70, 61: 1051.70, 62: 902.70, 63: 2120.79, 64: 1915.41, 65: 1893.37, 66: 1425.29, 67: 2090.68, 68: 1889.44, 69: 1767.32, 70: 2677.85, 71: 538.16, 72: 2129.61, 73: 364.92, 74: 1386.39, 75: 3224.59, 76: 986.43, 77: 2779.34, 78: 1248.91, 79: 1846.29, 80: 1708.17, 81: 2819.89, 82: 1747.40, 83: 848.07, 84: 2146.06, 85: 1354.89, 86: 1492.38, 87: 1502.97, 88: 1820.12, 89: 1049.49, 90: 478.87, 91: 1240.45, 92: 1080.60, 93: 1555.12, 94: 3056.80, 95: 2724.89, 96: 1622.85, 97: 565.10, 98: 1057.65, 99: 2730.56},
15: {0: 1259.36, 1: 2830.61, 2: 3482.28, 3: 624.77, 4: 3770.10, 5: 867.14, 6: 2670.96, 7: 1210.84, 8: 2654.91, 9: 769.80, 10: 1487.71, 11: 2735.86, 12: 3756.48, 13: 3622.68, 14: 1560.85, 16: 1552.22, 17: 399.41, 18: 523.32, 19: 2584.53, 20: 1162.01, 21: 70.18, 22: 1885.91, 23: 578.07, 24: 2452.44, 25: 839.80, 26: 2730.46, 27: 1674.99, 28: 3322.44, 29: 3403.92, 30: 1387.55, 31: 1562.87, 32: 3848.77, 33: 3035.95, 34: 2688.48, 35: 876.62, 36: 3761.28, 37: 674.11, 38: 3356.25, 39: 2498.69, 40: 3931.97, 41: 1333.69, 42: 3462.08, 43: 2861.57, 44: 1783.54, 45: 3343.23, 46: 1367.09, 47: 3778.62, 48: 820.29, 49: 2924.85, 50: 2380.74, 51: 3731.50, 52: 255.69, 53: 2503.87, 54: 2922.55, 55: 1020.65, 56: 2579.87, 57: 1977.58, 58: 1247.62, 59: 2226.07, 60: 2302.57, 61: 2365.29, 62: 1010.03, 63: 2527.81, 64: 630.89, 65: 534.20, 66: 1802.52, 67: 2868.85, 68: 2464.08, 69: 214.85, 70: 3873.84, 71: 1023.14, 72: 2756.81, 73: 1211.14, 74: 755.79, 75: 3845.84, 76: 2189.99, 77: 3699.19, 78: 315.63, 79: 1301.41, 80: 2476.31, 81: 3370.58, 82: 2933.65, 83: 714.58, 84: 2990.09, 85: 2656.63, 86: 2499.23, 87: 58.14, 88: 1495.20, 89: 640.10, 90: 1696.62, 91: 1075.38, 92: 1670.48, 93: 160.70, 94: 3611.10, 95: 3633.06, 96: 804.56, 97: 1780.90, 98: 950.96, 99: 3889.77},
16: {0: 1017.53, 1: 2455.10, 2: 2292.55, 3: 1789.49, 4: 2946.54, 5: 1012.35, 6: 1557.71, 7: 1421.95, 8: 1568.60, 9: 794.77, 10: 115.26, 11: 1514.44, 12: 3133.57, 13: 2483.58, 14: 13.04, 15: 1552.22, 17: 1209.45, 18: 1417.27, 19: 1368.89, 20: 392.62, 21: 1606.45, 22: 619.32, 23: 1094.66, 24: 1672.00, 25: 2192.99, 26: 1449.06, 27: 1132.69, 28: 2196.18, 29: 2444.89, 30: 1885.13, 31: 289.18, 32: 3202.12, 33: 1897.61, 34: 1339.20, 35: 818.91, 36: 2965.13, 37: 1031.30, 38: 2511.11, 39: 2152.90, 40: 2728.56, 41: 1668.38, 42: 2216.04, 43: 2342.15, 44: 404.01, 45: 2159.94, 46: 599.47, 47: 2713.67, 48: 1034.26, 49: 2315.97, 50: 1462.76, 51: 2812.64, 52: 1411.67, 53: 2220.57, 54: 1741.41, 55: 1701.37, 56: 1470.14, 57: 1294.60, 58: 358.24, 59: 915.76, 60: 1513.50, 61: 1064.72, 62: 901.89, 63: 2129.80, 64: 1910.08, 65: 1887.35, 66: 1432.33, 67: 2102.09, 68: 1899.30, 69: 1759.04, 70: 2690.88, 71: 529.92, 72: 2140.14, 73: 354.15, 74: 1383.58, 75: 3235.83, 76: 999.03, 77: 2791.77, 78: 1240.62, 79: 1846.85, 80: 1719.08, 81: 2830.54, 82: 1760.34, 83: 839.03, 84: 2157.86, 85: 1367.93, 86: 1504.49, 87: 1494.30, 88: 1822.46, 89: 1044.18, 90: 489.80, 91: 1240.89, 92: 1088.02, 93: 1545.52, 94: 3067.61, 95: 2737.26, 96: 1620.09, 97: 576.64, 98: 1044.89, 99: 2743.57},
17: {0: 1167.47, 1: 2836.89, 2: 3286.38, 3: 928.90, 4: 3681.03, 5: 781.95, 6: 2480.83, 7: 1257.13, 8: 2471.47, 9: 493.38, 10: 1161.23, 11: 2518.00, 12: 3720.49, 13: 3443.49, 14: 1219.45, 15: 399.41, 16: 1209.45, 18: 671.10, 19: 2364.54, 20: 817.66, 21: 431.61, 22: 1624.77, 23: 181.34, 24: 2340.54, 25: 1218.25, 26: 2495.54, 27: 1567.84, 28: 3142.61, 29: 3271.96, 30: 1548.57, 31: 1269.54, 32: 3808.05, 33: 2847.60, 34: 2432.79, 35: 478.98, 36: 3679.44, 37: 276.85, 38: 3254.09, 39: 2500.42, 40: 3737.01, 41: 1438.28, 42: 3249.02, 43: 2831.83, 44: 1490.72, 45: 3147.30, 46: 1148.16, 47: 3622.84, 48: 742.85, 49: 2873.96, 50: 2230.73, 51: 3615.92, 52: 433.13, 53: 2521.97, 54: 2719.96, 55: 1198.41, 56: 2387.99, 57: 1863.09, 58: 879.93, 59: 1970.06, 60: 2181.48, 61: 2116.21, 62: 883.24, 63: 2517.29, 64: 977.88, 65: 899.07, 66: 1754.43, 67: 2775.40, 68: 2407.89, 69: 612.08, 70: 3684.53, 71: 697.25, 72: 2698.60, 73: 857.32, 74: 853.80, 75: 3814.70, 76: 1962.94, 77: 3586.25, 78: 229.65, 79: 1468.70, 80: 2371.36, 81: 3348.78, 82: 2733.48, 83: 386.80, 84: 2882.94, 85: 2418.08, 86: 2334.45, 87: 346.17, 88: 1615.11, 89: 535.09, 90: 1433.20, 91: 1076.75, 92: 1552.28, 93: 341.92, 94: 3593.24, 95: 3522.24, 96: 996.83, 97: 1525.91, 98: 572.55, 99: 3711.65},
18: {0: 813.71, 1: 2310.22, 2: 3065.98, 3: 372.34, 4: 3277.01, 5: 473.70, 6: 2259.77, 7: 691.03, 8: 2237.66, 9: 664.25, 10: 1323.96, 11: 2352.09, 12: 3243.40, 13: 3190.11, 14: 1422.14, 15: 523.32, 16: 1417.27, 17: 671.10, 19: 2206.18, 20: 1074.81, 21: 587.55, 22: 1583.62, 23: 819.50, 24: 1981.89, 25: 780.19, 26: 2366.35, 27: 1218.76, 28: 2893.12, 29: 2937.20, 30: 889.14, 31: 1331.91, 32: 3336.85, 33: 2617.58, 34: 2351.40, 35: 1007.93, 36: 3264.86, 37: 896.42, 38: 2871.82, 39: 1979.83, 40: 3511.02, 41: 813.26, 42: 3062.93, 43: 2349.15, 44: 1535.82, 45: 2928.37, 46: 1046.21, 47: 3326.14, 48: 431.80, 49: 2419.20, 50: 1939.26, 51: 3252.62, 52: 279.87, 53: 1982.40, 54: 2519.55, 55: 530.08, 56: 2172.08, 57: 1517.58, 58: 1205.72, 59: 1902.23, 60: 1840.56, 61: 2027.76, 62: 630.60, 63: 2011.51, 64: 497.11, 65: 497.12, 66: 1306.08, 67: 2382.97, 68: 1963.40, 69: 592.00, 70: 3448.19, 71: 923.64, 72: 2254.93, 73: 1138.32, 74: 234.08, 75: 3331.30, 76: 1830.41, 77: 3218.94, 78: 441.49, 79: 806.11, 80: 2001.03, 81: 2854.63, 82: 2528.07, 83: 711.00, 84: 2510.97, 85: 2298.44, 86: 2067.94, 87: 506.74, 88: 979.61, 89: 375.59, 90: 1408.79, 91: 576.94, 92: 1223.06, 93: 667.47, 94: 3093.82, 95: 3151.94, 96: 325.86, 97: 1475.71, 98: 1209.69, 99: 3454.29},
19: {0: 1404.84, 1: 1603.24, 2: 934.01, 3: 2508.21, 4: 1655.73, 5: 1743.56, 6: 242.20, 7: 1728.84, 8: 281.31, 9: 1871.21, 10: 1334.15, 11: 153.58, 12: 1950.94, 13: 1116.20, 14: 1355.95, 15: 2584.53, 16: 1368.89, 17: 2364.54, 18: 2206.18, 20: 1648.17, 21: 2652.60, 22: 769.80, 23: 2316.19, 24: 730.00, 25: 2911.96, 26: 180.57, 27: 1058.19, 28: 827.37, 29: 1116.94, 30: 2085.82, 31: 1153.17, 32: 1997.45, 33: 530.08, 34: 293.02, 35: 2113.01, 36: 1688.04, 37: 2283.82, 38: 1243.56, 39: 1440.40, 40: 1380.63, 41: 1875.85, 42: 884.51, 43: 1386.55, 44: 967.34, 45: 797.56, 46: 1222.44, 47: 1346.47, 48: 1789.66, 49: 1282.08, 50: 501.88, 51: 1483.34, 52: 2358.86, 53: 1542.05, 54: 372.93, 55: 2148.63, 56: 203.75, 57: 844.08, 58: 1694.55, 59: 455.93, 60: 686.72, 61: 315.84, 62: 1588.68, 63: 1374.05, 64: 2654.98, 65: 2689.69, 66: 1188.45, 67: 976.57, 68: 1077.00, 69: 2746.32, 70: 1335.00, 71: 1708.01, 72: 1154.25, 73: 1649.46, 74: 2032.81, 75: 2052.31, 76: 402.06, 77: 1468.42, 78: 2285.95, 79: 2106.70, 80: 775.34, 81: 1748.05, 82: 391.49, 83: 1986.58, 84: 956.06, 85: 155.43, 86: 390.13, 87: 2534.78, 88: 1921.82, 89: 1946.11, 90: 951.33, 91: 1694.17, 92: 1033.16, 93: 2645.30, 94: 1949.05, 95: 1422.26, 96: 2211.03, 97: 852.68, 98: 2381.77, 99: 1379.06},
20: {0: 885.11, 1: 2501.84, 2: 2582.16, 3: 1444.92, 4: 3135.40, 5: 737.13, 6: 1806.20, 7: 1228.33, 8: 1807.97, 9: 420.39, 10: 348.93, 11: 1800.00, 12: 3267.83, 13: 2760.06, 14: 402.23, 15: 1162.01, 16: 392.62, 17: 817.66, 18: 1074.81, 19: 1648.17, 21: 1215.02, 22: 879.07, 23: 711.42, 24: 1810.48, 25: 1836.16, 26: 1754.46, 27: 1138.57, 28: 2464.29, 29: 2665.35, 30: 1671.50, 31: 496.79, 32: 3344.29, 33: 2163.85, 34: 1666.85, 35: 465.97, 36: 3146.30, 37: 657.17, 38: 2698.19, 39: 2179.06, 40: 3027.31, 41: 1473.91, 42: 2522.35, 43: 2426.90, 44: 705.09, 45: 2445.60, 46: 571.36, 47: 2970.66, 48: 745.07, 49: 2426.50, 50: 1637.74, 51: 3027.41, 52: 1034.57, 53: 2231.70, 54: 2018.51, 55: 1432.22, 56: 1714.30, 57: 1372.41, 58: 150.86, 59: 1215.63, 60: 1645.99, 61: 1366.43, 62: 674.44, 63: 2170.25, 64: 1555.77, 65: 1522.78, 66: 1415.73, 67: 2253.98, 68: 1979.45, 69: 1370.75, 70: 2983.12, 71: 151.71, 72: 2246.86, 73: 66.01, 74: 1083.66, 75: 3368.21, 76: 1252.62, 77: 3002.80, 78: 853.00, 79: 1619.41, 80: 1852.20, 81: 2935.03, 82: 2035.22, 83: 447.60, 84: 2332.05, 85: 1674.06, 86: 1708.91, 87: 1103.96, 88: 1644.19, 89: 700.16, 90: 698.72, 91: 1027.19, 92: 1102.43, 93: 1152.91, 94: 3178.14, 95: 2943.93, 96: 1316.80, 97: 798.11, 98: 738.24, 99: 3025.33},
21: {0: 1329.53, 1: 2896.75, 2: 3551.54, 3: 660.87, 4: 3839.75, 5: 937.24, 6: 2740.23, 7: 1276.92, 8: 2724.37, 9: 829.61, 10: 1544.61, 11: 2804.09, 12: 3824.39, 13: 3692.41, 14: 1615.36, 15: 70.18, 16: 1606.45, 17: 431.61, 18: 587.55, 19: 2652.60, 20: 1215.02, 22: 1950.85, 23: 604.82, 24: 2522.57, 25: 842.33, 26: 2797.79, 27: 1745.16, 28: 3392.11, 29: 3474.10, 30: 1442.51, 31: 1624.28, 32: 3916.86, 33: 3105.36, 34: 2754.44, 35: 910.53, 36: 3830.77, 37: 700.26, 38: 3426.19, 39: 2565.30, 40: 4001.32, 41: 1394.93, 42: 3530.72, 43: 2929.52, 44: 1845.36, 45: 3412.47, 46: 1434.13, 47: 3848.71, 48: 890.41, 49: 2993.60, 50: 2450.78, 51: 3801.57, 52: 324.58, 53: 2569.52, 54: 2991.47, 55: 1075.60, 56: 2649.06, 57: 2047.76, 58: 1295.64, 59: 2291.72, 60: 2372.75, 61: 2431.54, 62: 1079.75, 63: 2595.04, 64: 652.33, 65: 549.18, 66: 1871.74, 67: 2938.72, 68: 2533.17, 69: 186.13, 70: 3943.35, 71: 1078.69, 72: 2825.86, 73: 1262.40, 74: 820.95, 75: 3913.52, 76: 2257.49, 77: 3769.23, 78: 376.97, 79: 1355.98, 80: 2546.38, 81: 3437.96, 82: 3002.66, 83: 767.52, 84: 3060.13, 85: 2723.72, 86: 2569.07, 87: 118.60, 88: 1554.38, 89: 709.19, 90: 1761.14, 91: 1144.01, 92: 1740.65, 93: 133.65, 94: 3678.20, 95: 3703.08, 96: 859.62, 97: 1846.20, 98: 963.97, 99: 3959.55},
22: {0: 882.22, 1: 1921.43, 2: 1703.47, 3: 1928.37, 4: 2328.64, 5: 1110.79, 6: 942.25, 7: 1295.39, 8: 950.85, 9: 1136.55, 10: 569.01, 11: 921.09, 12: 2531.76, 13: 1884.43, 14: 606.92, 15: 1885.91, 16: 619.32, 17: 1624.77, 18: 1583.62, 19: 769.80, 20: 879.07, 21: 1950.85, 23: 1560.37, 24: 1083.29, 25: 2345.12, 26: 878.43, 27: 749.10, 28: 1591.32, 29: 1825.87, 30: 1739.57, 31: 383.38, 32: 2596.65, 33: 1291.04, 34: 808.28, 35: 1344.63, 36: 2348.49, 37: 1521.93, 38: 1894.12, 39: 1647.98, 40: 2148.24, 41: 1510.63, 42: 1644.31, 43: 1778.35, 44: 220.81, 45: 1567.35, 46: 537.63, 47: 2104.03, 48: 1151.82, 49: 1733.90, 50: 856.98, 51: 2193.43, 52: 1683.08, 53: 1729.37, 54: 1141.47, 55: 1676.77, 56: 853.15, 57: 785.49, 58: 926.88, 59: 345.32, 60: 934.14, 61: 493.04, 62: 955.59, 63: 1610.98, 64: 2069.13, 65: 2080.69, 66: 1029.89, 67: 1498.81, 68: 1350.30, 69: 2066.96, 70: 2104.34, 71: 947.27, 72: 1563.50, 73: 879.72, 74: 1458.53, 75: 2634.44, 76: 382.24, 77: 2172.46, 78: 1575.31, 79: 1729.44, 80: 1132.86, 81: 2246.67, 82: 1158.86, 83: 1239.90, 84: 1545.29, 85: 798.91, 86: 887.39, 87: 1832.30, 88: 1621.67, 89: 1266.82, 90: 191.64, 91: 1180.86, 92: 702.28, 93: 1926.24, 94: 2478.33, 95: 2117.98, 96: 1674.13, 97: 107.94, 98: 1612.04, 99: 2148.45},
23: {0: 1206.07, 1: 2894.56, 2: 3245.72, 3: 1101.31, 4: 3691.82, 5: 843.28, 6: 2447.79, 7: 1350.99, 8: 2442.03, 9: 473.63, 10: 1060.32, 11: 2469.70, 12: 3755.49, 13: 3410.87, 14: 1105.60, 15: 578.07, 16: 1094.66, 17: 181.34, 18: 819.50, 19: 2316.19, 20: 711.42, 21: 604.82, 22: 1560.37, 24: 2348.33, 25: 1399.30, 26: 2437.88, 27: 1588.46, 28: 3110.98, 29: 3263.86, 30: 1676.66, 31: 1190.53, 32: 3840.61, 33: 2813.07, 34: 2363.64, 35: 313.40, 36: 3693.63, 37: 96.05, 38: 3260.49, 39: 2558.45, 40: 3695.14, 41: 1549.19, 42: 3199.38, 43: 2873.87, 44: 1408.02, 45: 3107.23, 46: 1120.21, 47: 3601.44, 48: 810.63, 49: 2906.27, 50: 2220.68, 51: 3614.33, 52: 603.68, 53: 2586.75, 54: 2678.63, 55: 1337.22, 56: 2354.74, 57: 1875.11, 58: 748.95, 59: 1904.53, 60: 2186.36, 61: 2053.38, 62: 917.99, 63: 2569.93, 64: 1156.22, 65: 1079.50, 66: 1799.09, 67: 2788.63, 68: 2441.20, 69: 788.38, 70: 3645.79, 71: 613.94, 72: 2728.73, 73: 740.77, 74: 979.40, 75: 3851.53, 76: 1914.37, 77: 3586.05, 78: 386.26, 79: 1599.88, 80: 2382.22, 81: 3391.59, 82: 2693.36, 83: 338.92, 84: 2888.97, 85: 2358.90, 86: 2315.88, 87: 526.27, 88: 1728.53, 89: 612.41, 90: 1370.61, 91: 1159.04, 92: 1567.83, 93: 500.99, 94: 3636.77, 95: 3523.32, 96: 1144.02, 97: 1466.90, 98: 397.34, 99: 3678.59},
24: {0: 1194.02, 1: 893.07, 2: 1183.94, 3: 2203.69, 4: 1343.50, 5: 1590.11, 6: 555.79, 7: 1355.06, 8: 506.32, 9: 1874.71, 10: 1592.27, 11: 767.61, 12: 1464.18, 13: 1254.77, 14: 1661.00, 15: 2452.44, 16: 1672.00, 17: 2340.54, 18: 1981.89, 19: 730.00, 20: 1810.48, 21: 2522.57, 22: 1083.29, 23: 2348.33, 25: 2567.27, 26: 885.13, 27: 779.16, 28: 980.21, 29: 955.30, 30: 1587.56, 31: 1390.69, 32: 1536.70, 33: 774.50, 34: 1023.00, 35: 2231.70, 36: 1346.74, 37: 2345.56, 38: 913.59, 39: 710.72, 40: 1594.48, 41: 1417.24, 42: 1242.41, 43: 708.47, 44: 1299.87, 45: 1062.26, 46: 1254.13, 47: 1352.18, 48: 1636.02, 49: 650.76, 50: 254.23, 51: 1280.21, 52: 2201.33, 53: 812.86, 54: 771.11, 55: 1757.08, 56: 535.73, 57: 478.28, 58: 1909.41, 59: 963.76, 60: 164.71, 61: 909.48, 62: 1462.85, 63: 644.15, 64: 2347.93, 65: 2410.17, 66: 706.21, 67: 444.53, 68: 347.00, 69: 2569.44, 70: 1521.87, 71: 1809.03, 72: 483.80, 73: 1838.05, 74: 1765.36, 75: 1565.92, 76: 780.86, 77: 1248.88, 78: 2198.37, 79: 1632.34, 80: 51.48, 81: 1163.52, 82: 764.23, 83: 2011.27, 84: 542.44, 85: 884.30, 86: 340.21, 87: 2413.33, 88: 1403.70, 89: 1833.70, 90: 1182.21, 91: 1407.61, 92: 789.52, 93: 2552.33, 94: 1397.06, 95: 1183.73, 96: 1881.41, 97: 1098.60, 98: 2528.22, 99: 1505.96},
25: {0: 1510.64, 1: 2670.97, 2: 3716.83, 3: 417.06, 4: 3765.14, 5: 1239.00, 6: 2931.32, 7: 1216.00, 8: 2902.40, 9: 1416.40, 10: 2102.43, 11: 3050.37, 12: 3639.89, 13: 3816.03, 14: 2198.41, 15: 839.80, 16: 2192.99, 17: 1218.25, 18: 780.19, 19: 2911.96, 20: 1836.16, 21: 842.33, 22: 2345.12, 23: 1399.30, 24: 2567.27, 26: 3081.17, 27: 1869.37, 28: 3528.61, 29: 3504.57, 30: 1078.63, 31: 2110.96, 32: 3738.78, 33: 3273.02, 34: 3085.30, 35: 1670.49, 36: 3741.29, 37: 1493.83, 38: 3395.85, 39: 2373.49, 40: 4149.78, 41: 1173.27, 42: 3734.70, 43: 2775.70, 44: 2311.68, 45: 3583.14, 46: 1811.78, 47: 3915.97, 48: 1201.82, 49: 2879.38, 50: 2579.09, 51: 3784.33, 52: 825.11, 53: 2343.63, 54: 3195.29, 55: 812.50, 56: 2849.48, 57: 2144.39, 58: 1956.18, 59: 2649.73, 60: 2448.95, 61: 2765.92, 62: 1390.95, 63: 2425.98, 64: 283.34, 65: 323.20, 66: 1861.10, 67: 2915.95, 68: 2463.06, 69: 669.16, 70: 4080.99, 71: 1684.60, 72: 2737.59, 73: 1896.99, 74: 890.02, 75: 3715.82, 76: 2558.13, 77: 3747.58, 78: 1043.35, 79: 1002.88, 80: 2574.95, 81: 3240.19, 82: 3200.73, 83: 1427.27, 84: 3058.68, 85: 3018.81, 86: 2718.66, 87: 882.16, 88: 1255.83, 89: 1148.95, 90: 2177.37, 91: 1217.87, 92: 1886.56, 93: 975.55, 94: 3462.05, 95: 3679.44, 96: 702.16, 97: 2237.87, 98: 1786.11, 99: 4071.99},
26: {0: 1571.56, 1: 1737.34, 2: 846.13, 3: 2675.06, 4: 1675.52, 5: 1899.80, 6: 345.68, 7: 1904.64, 8: 394.83, 9: 2003.40, 10: 1427.02, 11: 136.49, 12: 2008.76, 13: 1046.56, 14: 1436.02, 15: 2730.46, 16: 1449.06, 17: 2495.54, 18: 2366.35, 19: 180.57, 20: 1754.46, 21: 2797.79, 22: 878.43, 23: 2437.88, 24: 885.13, 25: 3081.17, 27: 1234.69, 28: 778.05, 29: 1124.94, 30: 2265.78, 31: 1257.75, 32: 2047.42, 33: 503.84, 34: 178.22, 35: 2220.42, 36: 1714.16, 37: 2400.36, 38: 1284.37, 39: 1594.81, 40: 1279.63, 41: 2055.01, 42: 769.02, 43: 1510.20, 44: 1057.01, 45: 717.68, 46: 1363.85, 47: 1299.02, 48: 1945.38, 49: 1394.11, 50: 671.25, 51: 1482.09, 52: 2509.82, 53: 1697.46, 54: 335.41, 55: 2323.76, 56: 349.59, 57: 1024.64, 58: 1788.12, 59: 539.33, 60: 857.42, 61: 388.29, 62: 1743.70, 63: 1525.66, 64: 2821.49, 65: 2853.28, 66: 1369.00, 67: 1079.38, 68: 1230.49, 69: 2897.43, 70: 1242.33, 71: 1825.48, 72: 1280.44, 73: 1749.99, 74: 2198.62, 75: 2108.31, 76: 540.77, 77: 1471.81, 78: 2427.70, 79: 2285.96, 80: 927.37, 81: 1836.78, 82: 358.45, 83: 2113.52, 84: 1035.77, 85: 81.15, 86: 546.80, 87: 2679.52, 88: 2102.26, 89: 2094.78, 90: 1067.28, 91: 1864.20, 92: 1208.20, 93: 2785.06, 94: 2025.08, 95: 1432.25, 96: 2381.41, 97: 971.39, 98: 2480.05, 99: 1299.72},
27: {0: 415.64, 1: 1363.37, 2: 1855.78, 3: 1478.05, 4: 2113.83, 5: 811.01, 6: 1062.02, 7: 670.86, 8: 1033.99, 9: 1117.59, 10: 1026.08, 11: 1188.35, 12: 2170.08, 13: 1972.46, 14: 1125.43, 15: 1674.99, 16: 1132.69, 17: 1567.84, 18: 1218.76, 19: 1058.19, 20: 1138.57, 21: 1745.16, 22: 749.10, 23: 1588.46, 24: 779.16, 25: 1869.37, 26: 1234.69, 28: 1676.97, 29: 1728.96, 30: 1049.92, 31: 851.12, 32: 2253.62, 33: 1408.71, 34: 1272.53, 35: 1508.47, 36: 2111.61, 37: 1595.18, 38: 1689.89, 39: 1041.67, 40: 2296.86, 41: 829.40, 42: 1866.15, 43: 1300.96, 44: 885.27, 45: 1719.87, 46: 571.35, 47: 2109.26, 48: 857.03, 49: 1320.48, 50: 721.67, 51: 2059.37, 52: 1425.60, 53: 1099.14, 54: 1325.93, 55: 1091.15, 56: 980.40, 57: 302.60, 58: 1265.10, 59: 911.41, 60: 627.62, 61: 981.90, 62: 685.93, 63: 1031.72, 64: 1625.06, 65: 1673.49, 66: 300.85, 67: 1208.02, 68: 858.52, 69: 1799.20, 70: 2232.26, 71: 1099.24, 72: 1141.86, 73: 1181.68, 74: 1015.33, 75: 2267.42, 76: 760.49, 77: 2027.98, 78: 1419.61, 79: 1060.06, 80: 806.31, 81: 1816.15, 82: 1331.54, 83: 1256.96, 84: 1320.25, 85: 1181.79, 86: 854.78, 87: 1634.96, 88: 905.28, 89: 1054.88, 90: 709.66, 91: 659.70, 92: 47.68, 93: 1773.18, 94: 2061.21, 95: 1962.63, 96: 1167.59, 97: 683.70, 98: 1808.18, 99: 2235.90},
28: {0: 2080.50, 1: 1500.97, 2: 214.02, 3: 3149.96, 4: 972.75, 5: 2458.47, 6: 663.19, 7: 2312.65, 8: 671.25, 9: 2651.65, 10: 2158.99, 11: 685.81, 12: 1397.14, 13: 301.04, 14: 2183.25, 15: 3322.44, 16: 2196.18, 17: 3142.61, 18: 2893.12, 19: 827.37, 20: 2464.29, 21: 3392.11, 22: 1591.32, 23: 3110.98, 24: 980.21, 25: 3528.61, 26: 778.05, 27: 1676.97, 29: 440.52, 30: 2567.75, 31: 1973.45, 32: 1409.07, 33: 300.50, 34: 937.85, 35: 2926.06, 36: 1025.22, 37: 3086.04, 38: 683.63, 39: 1517.11, 40: 621.34, 41: 2394.00, 42: 337.92, 43: 1244.44, 44: 1793.99, 45: 148.41, 46: 1995.24, 47: 522.02, 48: 2505.55, 49: 1086.10, 50: 955.42, 51: 742.65, 52: 3082.37, 53: 1614.31, 54: 456.18, 55: 2724.46, 56: 756.24, 57: 1386.96, 58: 2518.16, 59: 1282.53, 60: 1080.95, 61: 1137.62, 62: 2312.42, 63: 1436.67, 64: 3296.29, 65: 3349.19, 66: 1676.25, 67: 808.01, 68: 1210.75, 69: 3464.42, 70: 555.30, 71: 2512.74, 72: 1074.73, 73: 2469.58, 74: 2692.19, 75: 1485.90, 76: 1212.05, 77: 742.05, 78: 3039.50, 79: 2611.67, 80: 986.22, 81: 1355.38, 82: 436.32, 83: 2775.34, 84: 670.23, 85: 854.16, 86: 825.68, 87: 3276.92, 88: 2383.80, 89: 2684.01, 90: 1765.64, 91: 2335.40, 92: 1670.19, 93: 3400.61, 94: 1477.35, 95: 719.61, 96: 2832.83, 97: 1666.23, 98: 3201.24, 99: 569.17},
29: {0: 2144.57, 1: 1190.74, 2: 592.08, 3: 3152.30, 4: 553.17, 5: 2538.56, 6: 894.88, 7: 2301.67, 8: 878.08, 9: 2792.86, 10: 2390.68, 11: 1005.20, 12: 956.62, 13: 482.37, 14: 2432.38, 15: 3403.92, 16: 2444.89, 17: 3271.96, 18: 2937.20, 19: 1116.94, 20: 2665.35, 21: 3474.10, 22: 1825.87, 23: 3263.86, 24: 955.30, 25: 3504.57, 26: 1124.94, 27: 1728.96, 28: 440.52, 30: 2482.34, 31: 2194.18, 32: 970.16, 33: 625.16, 34: 1299.58, 35: 3113.60, 36: 597.82, 37: 3251.10, 38: 261.24, 39: 1291.18, 40: 793.80, 41: 2337.78, 42: 754.54, 43: 944.26, 44: 2042.11, 45: 585.75, 46: 2146.54, 47: 427.13, 48: 2584.98, 49: 783.60, 50: 1043.20, 51: 368.64, 52: 3154.24, 53: 1375.91, 54: 790.87, 55: 2692.06, 56: 977.58, 57: 1426.37, 58: 2739.56, 59: 1560.67, 60: 1101.36, 61: 1430.83, 62: 2405.15, 63: 1213.41, 64: 3295.12, 65: 3361.02, 66: 1650.23, 67: 601.84, 68: 1061.70, 69: 3524.35, 70: 711.14, 71: 2691.15, 72: 838.50, 73: 2680.53, 74: 2720.01, 75: 1045.78, 76: 1446.57, 77: 351.57, 78: 3142.15, 79: 2538.39, 80: 938.04, 81: 941.76, 82: 767.57, 83: 2924.95, 84: 450.87, 85: 1189.93, 86: 956.66, 87: 3363.45, 88: 2294.63, 89: 2778.52, 90: 1979.45, 91: 2362.63, 92: 1734.41, 93: 3499.21, 94: 1042.93, 95: 307.42, 96: 2828.69, 97: 1882.18, 98: 3401.48, 99: 643.69},
30: {0: 886.71, 1: 1592.38, 2: 2769.95, 3: 844.35, 4: 2700.64, 5: 944.03, 6: 2040.95, 7: 464.97, 8: 2002.81, 9: 1366.02, 10: 1771.01, 11: 2201.49, 12: 2561.28, 13: 2838.51, 14: 1884.02, 15: 1387.55, 16: 1885.13, 17: 1548.57, 18: 889.14, 19: 2085.82, 20: 1671.50, 21: 1442.51, 22: 1739.57, 23: 1676.66, 24: 1587.56, 25: 1078.63, 26: 2265.78, 27: 1049.92, 28: 2567.75, 29: 2482.34, 31: 1675.44, 32: 2660.23, 33: 2344.64, 34: 2318.39, 35: 1793.80, 36: 2673.49, 37: 1739.56, 38: 2349.33, 39: 1297.85, 40: 3180.21, 41: 229.02, 42: 2816.00, 43: 1702.52, 44: 1806.26, 45: 2644.60, 46: 1314.16, 47: 2904.13, 48: 948.87, 49: 1813.65, 50: 1661.91, 51: 2737.27, 52: 1165.37, 53: 1265.17, 54: 2299.88, 55: 366.96, 56: 1973.10, 57: 1246.47, 58: 1822.14, 59: 1955.69, 60: 1500.71, 61: 2031.79, 62: 1000.98, 63: 1353.63, 64: 951.13, 65: 1052.91, 66: 910.38, 67: 1882.71, 68: 1422.65, 69: 1380.56, 70: 3106.05, 71: 1546.43, 72: 1682.10, 73: 1736.07, 74: 697.40, 75: 2637.32, 76: 1810.37, 77: 2699.37, 78: 1321.00, 79: 87.21, 80: 1584.06, 81: 2161.56, 82: 2300.21, 83: 1471.85, 84: 2031.61, 85: 2219.83, 86: 1808.18, 87: 1383.13, 88: 187.77, 89: 1092.47, 90: 1632.26, 91: 648.68, 92: 1086.58, 93: 1542.80, 94: 2384.07, 95: 2631.36, 96: 583.06, 97: 1648.81, 98: 2044.10, 99: 3081.99},
31: {0: 790.23, 1: 2165.92, 2: 2086.78, 3: 1696.56, 4: 2683.12, 5: 880.78, 6: 1320.12, 7: 1210.89, 8: 1325.47, 9: 795.62, 10: 201.85, 11: 1304.35, 12: 2854.36, 13: 2267.40, 14: 280.03, 15: 1562.87, 16: 289.18, 17: 1269.54, 18: 1331.91, 19: 1153.17, 20: 496.79, 21: 1624.28, 22: 383.38, 23: 1190.53, 24: 1390.69, 25: 2110.96, 26: 1257.75, 27: 851.12, 28: 1973.45, 29: 2194.18, 30: 1675.44, 32: 2924.79, 33: 1673.00, 34: 1174.00, 35: 962.75, 36: 2698.94, 37: 1146.34, 38: 2246.26, 39: 1864.40, 40: 2531.04, 41: 1451.52, 42: 2025.57, 43: 2054.51, 44: 221.84, 45: 1950.72, 46: 361.33, 47: 2484.07, 48: 913.09, 49: 2031.29, 50: 1190.12, 51: 2559.87, 52: 1383.37, 53: 1933.05, 54: 1524.69, 55: 1534.09, 56: 1229.48, 57: 1005.45, 58: 546.88, 59: 719.24, 60: 1230.39, 61: 869.87, 62: 743.27, 63: 1840.75, 64: 1828.60, 65: 1822.98, 66: 1151.84, 67: 1825.26, 68: 1610.85, 69: 1756.40, 70: 2487.61, 71: 577.29, 72: 1854.62, 73: 496.46, 74: 1252.95, 75: 2956.32, 76: 761.84, 77: 2537.25, 78: 1247.60, 79: 1646.48, 80: 1436.86, 81: 2545.64, 82: 1541.91, 83: 882.78, 84: 1887.69, 85: 1177.43, 86: 1243.22, 87: 1506.93, 88: 1594.01, 89: 979.46, 90: 215.24, 91: 1049.12, 92: 805.44, 93: 1585.78, 94: 2783.86, 95: 2480.71, 96: 1484.86, 97: 312.08, 98: 1228.74, 99: 2531.71},
32: {0: 2640.85, 1: 1069.32, 2: 1532.92, 3: 3458.92, 4: 474.66, 5: 3029.29, 6: 1756.41, 7: 2648.02, 8: 1723.49, 9: 3371.10, 10: 3126.63, 11: 1916.31, 12: 100.66, 13: 1360.58, 14: 3190.70, 15: 3848.77, 16: 3202.12, 17: 3808.05, 18: 3336.85, 19: 1997.45, 20: 3344.29, 21: 3916.86, 22: 2596.65, 23: 3840.61, 24: 1536.70, 25: 3738.78, 26: 2047.42, 27: 2253.62, 28: 1409.07, 29: 970.16, 30: 2660.23, 31: 2924.79, 33: 1571.78, 34: 2225.61, 35: 3753.26, 36: 407.77, 37: 3848.80, 38: 764.20, 39: 1371.71, 40: 1551.57, 41: 2591.49, 42: 1703.00, 43: 987.70, 44: 2817.15, 45: 1551.04, 46: 2780.89, 47: 1126.68, 48: 3071.29, 49: 934.56, 50: 1740.64, 51: 733.38, 52: 3593.20, 53: 1395.16, 54: 1726.82, 55: 2960.98, 56: 1818.68, 57: 1979.99, 58: 3445.90, 59: 2398.35, 60: 1700.08, 61: 2291.74, 62: 2927.18, 63: 1329.56, 64: 3586.74, 65: 3675.02, 66: 2056.46, 67: 1100.04, 68: 1400.45, 69: 3923.72, 70: 1481.00, 71: 3334.12, 72: 1111.96, 73: 3373.68, 74: 3103.65, 75: 92.20, 76: 2246.45, 77: 712.83, 78: 3637.16, 79: 2736.55, 80: 1493.08, 81: 499.41, 82: 1703.78, 83: 3510.57, 84: 1058.42, 85: 2101.17, 86: 1719.82, 87: 3819.33, 88: 2484.68, 89: 3278.59, 90: 2713.60, 91: 2774.04, 92: 2277.58, 93: 3971.39, 94: 311.01, 95: 707.64, 96: 3143.37, 97: 2625.68, 98: 4052.05, 99: 1366.50},
33: {0: 1803.87, 1: 1451.48, 2: 448.41, 3: 2886.52, 4: 1178.07, 5: 2175.13, 6: 366.90, 7: 2059.71, 8: 381.28, 9: 2355.76, 10: 1859.02, 11: 395.41, 12: 1542.65, 13: 598.02, 14: 1884.71, 15: 3035.95, 16: 1897.61, 17: 2847.60, 18: 2617.58, 19: 530.08, 20: 2163.85, 21: 3105.36, 22: 1291.04, 23: 2813.07, 24: 774.50, 25: 3273.02, 26: 503.84, 27: 1408.71, 28: 300.50, 29: 625.16, 30: 2344.64, 31: 1673.00, 32: 1571.78, 34: 675.74, 35: 2625.84, 36: 1220.25, 37: 2787.04, 38: 809.37, 39: 1401.47, 40: 896.17, 41: 2159.20, 42: 471.43, 43: 1200.28, 44: 1494.82, 45: 311.24, 46: 1699.55, 47: 816.47, 48: 2222.15, 49: 1055.88, 50: 694.72, 51: 978.46, 52: 2798.73, 53: 1503.60, 54: 168.63, 55: 2476.49, 56: 459.62, 57: 1129.32, 58: 2217.92, 59: 986.00, 60: 844.00, 61: 843.53, 62: 2026.69, 63: 1322.91, 64: 3033.44, 65: 3081.77, 66: 1439.27, 67: 741.98, 68: 1060.75, 69: 3182.71, 70: 838.63, 71: 2213.22, 72: 995.08, 73: 2169.10, 74: 2422.60, 75: 1639.01, 76: 911.55, 77: 968.92, 78: 2749.23, 79: 2382.40, 80: 793.30, 81: 1424.00, 82: 145.96, 83: 2478.19, 84: 643.61, 85: 573.89, 86: 554.59, 87: 2989.42, 88: 2164.62, 89: 2396.38, 90: 1465.17, 91: 2068.35, 92: 1397.91, 93: 3110.41, 94: 1585.32, 95: 931.43, 96: 2573.32, 97: 1365.77, 98: 2900.74, 99: 865.52},
34: {0: 1576.12, 1: 1893.08, 2: 983.25, 3: 2674.08, 4: 1851.22, 5: 1879.61, 6: 508.99, 7: 1934.30, 8: 555.71, 9: 1944.73, 10: 1329.08, 11: 312.20, 12: 2186.91, 13: 1192.56, 14: 1326.22, 15: 2688.48, 16: 1339.20, 17: 2432.79, 18: 2351.40, 19: 293.02, 20: 1666.85, 21: 2754.44, 22: 808.28, 23: 2363.64, 24: 1023.00, 25: 3085.30, 26: 178.22, 27: 1272.53, 28: 937.85, 29: 1299.58, 30: 2318.39, 31: 1174.00, 32: 2225.61, 33: 675.74, 35: 2131.08, 36: 1890.73, 37: 2320.25, 38: 1462.44, 39: 1733.28, 40: 1400.36, 41: 2101.24, 42: 884.98, 43: 1671.88, 44: 962.09, 45: 862.75, 46: 1324.24, 47: 1454.79, 48: 1923.91, 49: 1560.97, 50: 791.25, 51: 1653.81, 52: 2477.00, 53: 1834.79, 54: 508.72, 55: 2349.00, 56: 493.08, 57: 1096.69, 58: 1687.49, 59: 463.60, 60: 973.93, 61: 324.61, 62: 1722.40, 63: 1667.07, 64: 2819.24, 65: 2844.05, 66: 1440.09, 67: 1249.02, 68: 1370.00, 69: 2863.55, 70: 1370.35, 71: 1749.71, 72: 1440.49, 73: 1656.49, 74: 2196.94, 75: 2286.50, 76: 527.75, 77: 1644.66, 78: 2380.39, 79: 2332.21, 80: 1068.32, 81: 2011.20, 82: 532.02, 83: 2047.36, 84: 1211.06, 85: 141.06, 86: 683.12, 87: 2635.85, 88: 2162.40, 89: 2060.02, 90: 999.91, 91: 1875.14, 92: 1240.72, 93: 2733.48, 94: 2201.81, 95: 1606.57, 96: 2390.84, 97: 909.80, 98: 2380.32, 99: 1437.03},
35: {0: 1172.71, 1: 2857.57, 2: 3047.00, 3: 1336.01, 4: 3569.12, 5: 876.62, 6: 2265.81, 7: 1410.09, 8: 2265.54, 9: 441.19, 10: 804.48, 11: 2265.17, 12: 3672.72, 13: 3222.91, 14: 830.83, 15: 876.62, 16: 818.91, 17: 478.98, 18: 1007.93, 19: 2113.01, 20: 465.97, 21: 910.53, 22: 1344.63, 23: 313.40, 24: 2231.70, 25: 1670.49, 26: 2220.42, 27: 1508.47, 28: 2926.06, 29: 3113.60, 30: 1793.80, 31: 962.75, 32: 3753.26, 33: 2625.84, 34: 2131.08, 36: 3576.44, 37: 227.76, 38: 3133.22, 39: 2525.59, 40: 3492.76, 41: 1634.53, 42: 2988.29, 43: 2809.38, 44: 1169.00, 45: 2910.10, 46: 977.81, 47: 3429.11, 48: 858.40, 49: 2824.69, 50: 2076.90, 51: 3472.30, 52: 849.47, 53: 2565.81, 54: 2482.46, 55: 1485.16, 56: 2173.41, 57: 1773.32, 58: 461.85, 59: 1681.51, 60: 2067.20, 61: 1832.36, 62: 898.35, 63: 2527.26, 64: 1411.57, 65: 1347.41, 66: 1755.11, 67: 2676.13, 68: 2366.25, 69: 1090.48, 70: 3448.00, 71: 423.79, 72: 2645.10, 73: 475.79, 74: 1115.29, 75: 3771.41, 76: 1715.76, 77: 3446.35, 78: 627.78, 79: 1725.14, 80: 2270.21, 81: 3324.45, 82: 2498.85, 83: 322.02, 84: 2763.82, 85: 2139.99, 86: 2157.45, 87: 821.52, 88: 1814.51, 89: 702.76, 90: 1162.16, 91: 1205.60, 92: 1479.83, 93: 813.00, 94: 3569.38, 95: 3385.97, 96: 1315.77, 97: 1261.31, 98: 299.71, 99: 3488.80},
36: {0: 2518.19, 1: 1143.12, 2: 1133.38, 3: 3428.18, 4: 69.23, 5: 2914.20, 6: 1453.68, 7: 2590.03, 8: 1427.88, 9: 3220.14, 10: 2899.68, 11: 1589.22, 12: 433.18, 13: 954.51, 14: 2953.10, 15: 3761.28, 16: 2965.13, 17: 3679.44, 18: 3264.86, 19: 1688.04, 20: 3146.30, 21: 3830.77, 22: 2348.49, 23: 3693.63, 24: 1346.74, 25: 3741.29, 26: 1714.16, 27: 2111.61, 28: 1025.22, 29: 597.82, 30: 2673.49, 31: 2698.94, 32: 407.77, 33: 1220.25, 34: 1890.73, 35: 3576.44, 37: 3692.17, 38: 454.47, 39: 1381.28, 40: 1147.79, 41: 2571.74, 42: 1304.23, 43: 974.60, 44: 2568.72, 45: 1162.03, 46: 2598.70, 47: 720.00, 48: 2958.62, 49: 861.97, 50: 1510.85, 51: 325.68, 52: 3506.36, 53: 1432.87, 54: 1383.28, 55: 2940.58, 56: 1526.82, 57: 1818.78, 58: 3235.39, 59: 2114.94, 60: 1510.43, 61: 1995.29, 62: 2797.09, 63: 1320.60, 64: 3563.59, 65: 3643.08, 66: 1960.02, 67: 905.04, 68: 1302.00, 69: 3856.75, 70: 1075.60, 71: 3153.02, 72: 1012.79, 73: 3169.09, 74: 3036.08, 75: 496.33, 76: 1980.47, 77: 305.63, 78: 3525.83, 79: 2742.59, 80: 1311.48, 81: 646.30, 82: 1359.94, 83: 3357.30, 84: 814.26, 85: 1775.14, 86: 1461.12, 87: 3726.75, 88: 2489.62, 89: 3161.96, 90: 2484.21, 91: 2690.17, 92: 2128.07, 93: 3872.59, 94: 602.70, 95: 307.92, 96: 3105.84, 97: 2390.97, 98: 3871.60, 99: 962.93},
37: {0: 1224.83, 1: 2917.26, 2: 3215.88, 3: 1189.67, 4: 3688.56, 5: 878.01, 6: 2423.20, 7: 1397.24, 8: 2419.36, 9: 478.48, 10: 1004.97, 11: 2437.03, 12: 3765.05, 13: 3385.06, 14: 1042.70, 15: 674.11, 16: 1031.30, 17: 276.85, 18: 896.42, 19: 2283.82, 20: 657.17, 21: 700.26, 22: 1521.93, 23: 96.05, 24: 2345.56, 25: 1493.83, 26: 2400.36, 27: 1595.18, 28: 3086.04, 29: 3251.10, 30: 1739.56, 31: 1146.34, 32: 3848.80, 33: 2787.04, 34: 2320.25, 35: 227.76, 36: 3692.17, 38: 3255.40, 39: 2581.91, 40: 3664.23, 41: 1603.41, 42: 3164.92, 43: 2888.26, 44: 1360.45, 45: 3077.87, 46: 1104.56, 47: 3581.31, 48: 849.10, 49: 2915.42, 50: 2208.79, 51: 3604.61, 52: 692.41, 53: 2613.76, 54: 2649.24, 55: 1406.79, 56: 2330.25, 57: 1876.01, 58: 679.23, 59: 1864.17, 60: 2182.47, 61: 2014.02, 62: 938.09, 63: 2590.49, 64: 1248.34, 65: 1173.39, 66: 1817.54, 67: 2787.85, 68: 2451.74, 69: 884.17, 70: 3616.54, 71: 575.84, 72: 2737.01, 73: 679.83, 74: 1044.09, 75: 3861.99, 76: 1882.99, 77: 3577.09, 78: 471.83, 79: 1664.62, 80: 2381.00, 81: 3405.70, 82: 2664.59, 83: 338.54, 84: 2884.20, 85: 2320.75, 86: 2299.23, 87: 622.27, 88: 1783.48, 89: 659.76, 90: 1334.16, 91: 1200.65, 92: 1571.99, 93: 594.01, 94: 3651.01, 95: 3515.10, 96: 1218.66, 97: 1431.82, 98: 313.38, 99: 3652.28},
38: {0: 2102.31, 1: 961.14, 2: 850.57, 3: 3060.99, 4: 437.39, 5: 2499.15, 6: 1005.73, 7: 2212.89, 8: 977.49, 9: 2786.95, 10: 2446.65, 11: 1154.61, 12: 733.48, 13: 740.65, 14: 2499.04, 15: 3356.25, 16: 2511.11, 17: 3254.09, 18: 2871.82, 19: 1243.56, 20: 2698.19, 21: 3426.19, 22: 1894.12, 23: 3260.49, 24: 913.59, 25: 3395.85, 26: 1284.37, 27: 1689.89, 28: 683.63, 29: 261.24, 30: 2349.33, 31: 2246.26, 32: 764.20, 33: 809.37, 34: 1462.44, 35: 3133.22, 36: 454.47, 37: 3255.40, 39: 1104.62, 40: 1037.62, 41: 2222.84, 42: 1009.51, 43: 727.40, 44: 2114.30, 45: 831.78, 46: 2156.53, 47: 634.85, 48: 2544.53, 49: 573.81, 50: 1060.69, 51: 388.62, 52: 3103.00, 53: 1179.91, 54: 962.68, 55: 2585.82, 56: 1075.72, 57: 1391.23, 58: 2784.52, 59: 1663.08, 60: 1074.23, 61: 1546.56, 62: 2375.26, 63: 1031.14, 64: 3200.66, 65: 3273.38, 66: 1567.74, 67: 488.86, 68: 932.80, 69: 3463.12, 70: 955.26, 71: 2709.45, 72: 669.79, 73: 2719.47, 74: 2647.64, 75: 829.67, 76: 1526.24, 77: 351.76, 78: 3109.30, 79: 2411.32, 80: 883.63, 81: 680.92, 82: 939.67, 83: 2922.74, 84: 371.55, 85: 1340.15, 86: 1006.81, 87: 3319.09, 88: 2162.05, 89: 2744.59, 90: 2031.31, 91: 2294.88, 92: 1702.41, 93: 3460.98, 94: 794.48, 95: 283.64, 96: 2736.83, 97: 1937.54, 98: 3426.82, 99: 874.65},
39: {0: 1358.11, 1: 336.51, 2: 1730.97, 3: 2087.30, 4: 1413.02, 5: 1720.12, 6: 1258.79, 7: 1288.82, 8: 1208.59, 9: 2107.21, 10: 2052.78, 11: 1473.78, 12: 1274.76, 13: 1727.45, 14: 2144.23, 15: 2498.69, 16: 2152.90, 17: 2500.42, 18: 1979.83, 19: 1440.40, 20: 2179.06, 21: 2565.30, 22: 1647.98, 23: 2558.45, 24: 710.72, 25: 2373.49, 26: 1594.81, 27: 1041.67, 28: 1517.11, 29: 1291.18, 30: 1297.85, 31: 1864.40, 32: 1371.71, 33: 1401.47, 34: 1733.28, 35: 2525.59, 36: 1381.28, 37: 2581.91, 38: 1104.62, 40: 2065.82, 41: 1219.79, 42: 1832.99, 43: 406.74, 44: 1840.94, 45: 1636.66, 46: 1612.96, 47: 1716.09, 48: 1757.78, 49: 535.76, 50: 948.90, 51: 1480.98, 52: 2244.66, 53: 103.59, 54: 1443.40, 55: 1589.32, 56: 1245.97, 57: 867.78, 58: 2306.77, 59: 1620.90, 60: 780.44, 61: 1594.05, 62: 1643.83, 63: 80.45, 64: 2215.19, 65: 2303.39, 66: 770.73, 67: 714.66, 68: 364.32, 69: 2560.74, 70: 1984.72, 71: 2130.55, 72: 454.67, 73: 2223.21, 74: 1745.76, 75: 1357.63, 76: 1430.10, 77: 1441.52, 78: 2311.33, 79: 1370.76, 80: 667.44, 81: 878.93, 82: 1431.69, 83: 2246.48, 84: 864.43, 85: 1594.95, 86: 1050.92, 87: 2473.47, 88: 1117.66, 89: 1965.33, 90: 1686.15, 91: 1434.20, 92: 1080.53, 93: 2629.52, 94: 1114.83, 95: 1375.18, 96: 1772.88, 97: 1626.64, 98: 2823.44, 99: 1931.36},
40: {0: 2697.60, 1: 1984.45, 2: 450.79, 3: 3771.11, 4: 1079.08, 5: 3071.18, 6: 1261.30, 7: 2933.78, 8: 1277.44, 9: 3244.04, 10: 2705.46, 11: 1227.82, 12: 1580.21, 13: 343.63, 14: 2715.52, 15: 3931.97, 16: 2728.56, 17: 3737.01, 18: 3511.02, 19: 1380.63, 20: 3027.31, 21: 4001.32, 22: 2148.24, 23: 3695.14, 24: 1594.48, 25: 4149.78, 26: 1279.63, 27: 2296.86, 28: 621.34, 29: 793.80, 30: 3180.21, 31: 2531.04, 32: 1551.57, 33: 896.17, 34: 1400.36, 35: 3492.76, 36: 1147.79, 37: 3664.23, 38: 1037.62, 39: 2065.82, 41: 3011.28, 42: 515.40, 43: 1736.43, 44: 2335.62, 45: 590.03, 46: 2589.30, 47: 432.65, 48: 3118.21, 49: 1575.07, 50: 1575.86, 51: 826.20, 52: 3694.86, 53: 2155.87, 54: 1017.22, 55: 3344.79, 56: 1353.01, 57: 2008.19, 58: 3066.73, 59: 1817.09, 60: 1701.43, 61: 1666.35, 62: 2922.85, 63: 1986.25, 64: 3917.51, 65: 3969.81, 66: 2295.34, 67: 1354.14, 68: 1794.06, 69: 4078.59, 70: 82.68, 71: 3088.49, 72: 1611.42, 73: 3026.09, 74: 3312.19, 75: 1642.17, 76: 1781.32, 77: 854.42, 78: 3643.89, 79: 3226.64, 80: 1596.15, 81: 1688.35, 82: 1003.53, 83: 3363.22, 84: 1202.13, 85: 1360.78, 86: 1443.26, 87: 3885.23, 88: 2994.92, 89: 3292.25, 90: 2331.82, 91: 2955.87, 92: 2288.88, 93: 4005.00, 94: 1728.94, 95: 883.70, 96: 3454.16, 97: 2233.29, 98: 3757.60, 99: 185.07},
41: {0: 661.46, 1: 1536.06, 2: 2591.88, 3: 867.68, 4: 2593.88, 5: 764.29, 6: 1843.69, 7: 247.78, 8: 1807.64, 9: 1197.60, 10: 1553.67, 11: 1996.18, 12: 2494.47, 13: 2672.00, 14: 1666.73, 15: 1333.69, 16: 1668.38, 17: 1438.28, 18: 813.26, 19: 1875.85, 20: 1473.91, 21: 1394.93, 22: 1510.63, 23: 1549.19, 24: 1417.24, 25: 1173.27, 26: 2055.01, 27: 829.40, 28: 2394.00, 29: 2337.78, 30: 229.02, 31: 1451.52, 32: 2591.49, 33: 2159.20, 34: 2101.24, 35: 1634.53, 36: 2571.74, 37: 1603.41, 38: 2222.84, 39: 1219.79, 40: 3011.28, 42: 2629.43, 43: 1614.01, 44: 1578.39, 45: 2463.42, 46: 1090.25, 47: 2754.10, 48: 777.08, 49: 1710.04, 50: 1469.25, 51: 2611.40, 52: 1092.63, 53: 1204.76, 54: 2105.20, 55: 370.19, 56: 1772.18, 57: 1044.26, 58: 1624.76, 59: 1730.47, 60: 1316.86, 61: 1809.97, 62: 799.53, 63: 1265.19, 64: 996.11, 65: 1083.72, 66: 720.06, 67: 1744.81, 68: 1290.06, 69: 1362.22, 70: 2939.08, 71: 1356.19, 72: 1564.89, 73: 1537.35, 74: 591.49, 75: 2576.16, 76: 1588.69, 77: 2574.52, 78: 1217.72, 79: 231.14, 80: 1419.09, 81: 2097.48, 82: 2106.81, 83: 1313.68, 84: 1889.48, 85: 2006.38, 86: 1614.68, 87: 1319.89, 88: 180.42, 89: 944.77, 90: 1403.87, 91: 447.18, 92: 864.14, 93: 1480.69, 94: 2329.09, 95: 2506.37, 96: 558.35, 97: 1419.80, 98: 1899.09, 99: 2921.37},
42: {0: 2250.86, 1: 1834.55, 2: 171.03, 3: 3343.37, 4: 1244.74, 5: 2610.48, 6: 805.10, 7: 2524.47, 8: 832.33, 9: 2755.67, 10: 2196.00, 11: 731.02, 12: 1701.28, 13: 379.35, 14: 2203.00, 15: 3462.08, 16: 2216.04, 17: 3249.02, 18: 3062.93, 19: 884.51, 20: 2522.35, 21: 3530.72, 22: 1644.31, 23: 3199.38, 24: 1242.41, 25: 3734.70, 26: 769.02, 27: 1866.15, 28: 337.92, 29: 754.54, 30: 2816.00, 31: 2025.57, 32: 1703.00, 33: 471.43, 34: 884.98, 35: 2988.29, 36: 1304.23, 37: 3164.92, 38: 1009.51, 39: 1832.99, 40: 515.40, 41: 2629.43, 43: 1578.03, 44: 1826.00, 45: 198.32, 46: 2105.32, 47: 666.69, 48: 2657.20, 49: 1421.04, 50: 1161.82, 51: 994.13, 52: 3231.26, 53: 1932.41, 54: 543.39, 55: 2942.77, 56: 891.05, 57: 1594.77, 58: 2557.05, 59: 1308.22, 60: 1315.30, 61: 1157.17, 62: 2458.35, 63: 1752.90, 64: 3490.50, 65: 3534.91, 66: 1909.80, 67: 1133.75, 68: 1509.71, 69: 3617.67, 70: 489.84, 71: 2589.22, 72: 1399.66, 73: 2518.81, 74: 2875.02, 75: 1784.63, 76: 1286.42, 77: 1003.69, 78: 3167.06, 79: 2853.29, 80: 1257.83, 81: 1687.28, 82: 535.56, 83: 2870.86, 84: 1002.29, 85: 850.00, 86: 1018.46, 87: 3413.44, 88: 2636.05, 89: 2822.24, 90: 1830.77, 91: 2524.08, 92: 1851.93, 93: 3527.22, 94: 1797.39, 95: 997.09, 96: 3033.49, 97: 1733.23, 98: 3249.06, 99: 571.83},
43: {0: 1668.39, 1: 256.56, 2: 1452.25, 3: 2479.00, 4: 1007.25, 5: 2050.53, 6: 1165.01, 7: 1660.68, 8: 1116.88, 9: 2409.84, 10: 2252.61, 11: 1376.80, 12: 894.91, 13: 1410.12, 14: 2332.03, 15: 2861.57, 16: 2342.15, 17: 2831.83, 18: 2349.15, 19: 1386.55, 20: 2426.90, 21: 2929.52, 22: 1778.35, 23: 2873.87, 24: 708.47, 25: 2775.70, 26: 1510.20, 27: 1300.96, 28: 1244.44, 29: 944.26, 30: 1702.52, 31: 2054.51, 32: 987.70, 33: 1200.28, 34: 1671.88, 35: 2809.38, 36: 974.60, 37: 2888.26, 38: 727.40, 39: 406.74, 40: 1736.43, 41: 1614.01, 42: 1578.03, 44: 1989.54, 45: 1380.02, 46: 1855.75, 47: 1357.28, 48: 2091.39, 49: 161.76, 50: 960.12, 51: 1089.09, 52: 2606.10, 53: 463.35, 54: 1285.03, 55: 1984.20, 56: 1182.81, 57: 1057.67, 58: 2542.28, 59: 1671.28, 60: 845.06, 61: 1608.43, 62: 1956.34, 63: 349.76, 64: 2609.99, 65: 2695.00, 66: 1077.43, 67: 458.31, 68: 447.68, 69: 2936.40, 70: 1653.94, 71: 2398.62, 72: 232.74, 73: 2463.76, 74: 2116.01, 75: 985.43, 76: 1489.32, 77: 1049.21, 78: 2654.97, 79: 1773.90, 80: 657.01, 81: 517.72, 82: 1268.25, 83: 2549.87, 84: 575.88, 85: 1531.00, 86: 1011.48, 87: 2832.73, 88: 1520.61, 89: 2299.34, 90: 1856.16, 91: 1787.50, 92: 1331.08, 93: 2985.61, 94: 762.92, 95: 984.59, 96: 2160.70, 97: 1781.00, 98: 3109.08, 99: 1587.15},
44: {0: 923.02, 1: 2124.21, 2: 1895.68, 3: 1895.50, 4: 2548.37, 5: 1074.24, 6: 1153.73, 7: 1347.31, 8: 1165.09, 9: 1017.21, 10: 370.01, 11: 1114.84, 12: 2751.83, 13: 2083.28, 14: 391.28, 15: 1783.54, 16: 404.01, 17: 1490.72, 18: 1535.82, 19: 967.34, 20: 705.09, 21: 1845.36, 22: 220.81, 23: 1408.02, 24: 1299.87, 25: 2311.68, 26: 1057.01, 27: 885.27, 28: 1793.99, 29: 2042.11, 30: 1806.26, 31: 221.84, 32: 2817.15, 33: 1494.82, 34: 962.09, 35: 1169.00, 36: 2568.72, 37: 1360.45, 38: 2114.30, 39: 1840.94, 40: 2335.62, 41: 1578.39, 42: 1826.00, 43: 1989.54, 45: 1761.64, 46: 515.20, 47: 2310.44, 48: 1110.01, 49: 1949.75, 50: 1077.00, 51: 2410.17, 52: 1600.02, 53: 1918.18, 54: 1340.24, 55: 1698.84, 56: 1066.42, 57: 973.33, 58: 731.18, 59: 518.56, 60: 1147.75, 61: 669.30, 62: 928.07, 63: 1808.28, 64: 2030.68, 65: 2030.15, 66: 1180.71, 67: 1718.82, 68: 1556.17, 69: 1975.54, 70: 2295.38, 71: 796.52, 72: 1777.79, 73: 694.95, 74: 1440.70, 75: 2854.46, 76: 595.63, 77: 2389.80, 78: 1468.53, 79: 1785.82, 80: 1348.90, 81: 2463.33, 82: 1358.76, 83: 1104.09, 84: 1766.09, 85: 976.00, 86: 1107.77, 87: 1727.82, 88: 1706.83, 89: 1191.92, 90: 179.04, 91: 1204.88, 92: 837.61, 93: 1807.61, 94: 2696.24, 95: 2336.01, 96: 1667.89, 97: 214.37, 98: 1423.14, 99: 2344.83},
45: {0: 2114.69, 1: 1636.50, 2: 139.26, 3: 3197.56, 4: 1107.08, 5: 2484.17, 6: 672.31, 7: 2369.01, 8: 690.97, 9: 2654.48, 10: 2130.14, 11: 647.09, 12: 1541.72, 13: 329.95, 14: 2146.92, 15: 3343.23, 16: 2159.94, 17: 3147.30, 18: 2928.37, 19: 797.56, 20: 2445.60, 21: 3412.47, 22: 1567.35, 23: 3107.23, 24: 1062.26, 25: 3583.14, 26: 717.68, 27: 1719.87, 28: 148.41, 29: 585.75, 30: 2644.60, 31: 1950.72, 32: 1551.04, 33: 311.24, 34: 862.75, 35: 2910.10, 36: 1162.03, 37: 3077.87, 38: 831.78, 39: 1636.66, 40: 590.03, 41: 2463.42, 42: 198.32, 43: 1380.02, 44: 1761.64, 46: 1999.42, 47: 598.82, 48: 2531.15, 49: 1223.43, 50: 1004.12, 51: 868.38, 52: 3107.42, 53: 1735.64, 54: 428.67, 55: 2784.83, 56: 763.49, 57: 1438.89, 58: 2491.04, 59: 1244.33, 60: 1146.57, 61: 1095.35, 62: 2334.82, 63: 1556.46, 64: 3344.44, 65: 3393.00, 66: 1743.45, 67: 935.54, 68: 1317.65, 69: 3492.01, 70: 538.68, 71: 2502.51, 72: 1201.60, 73: 2446.94, 74: 2733.83, 75: 1629.21, 76: 1195.30, 77: 871.56, 78: 3054.12, 79: 2684.80, 80: 1074.29, 81: 1503.61, 82: 414.04, 83: 2774.40, 84: 804.19, 85: 797.52, 86: 865.43, 87: 3296.14, 88: 2462.78, 89: 2703.29, 90: 1748.01, 91: 2379.54, 92: 1709.14, 93: 3415.18, 94: 1625.08, 95: 854.63, 96: 2883.91, 97: 1649.00, 98: 3179.23, 99: 583.67},
46: {0: 429.20, 1: 1932.62, 2: 2138.57, 3: 1394.72, 4: 2591.88, 5: 574.19, 6: 1332.88, 7: 849.76, 8: 1324.55, 9: 656.41, 10: 485.24, 11: 1375.18, 12: 2702.53, 13: 2295.94, 14: 595.18, 15: 1367.09, 16: 599.47, 17: 1148.16, 18: 1046.21, 19: 1222.44, 20: 571.36, 21: 1434.13, 22: 537.63, 23: 1120.21, 24: 1254.13, 25: 1811.78, 26: 1363.85, 27: 571.35, 28: 1995.24, 29: 2146.54, 30: 1314.16, 31: 361.33, 32: 2780.89, 33: 1699.55, 34: 1324.24, 35: 977.81, 36: 2598.70, 37: 1104.56, 38: 2156.53, 39: 1612.96, 40: 2589.30, 41: 1090.25, 42: 2105.32, 43: 1855.75, 44: 515.20, 45: 1999.42, 47: 2481.50, 48: 614.49, 49: 1858.19, 50: 1104.60, 51: 2500.91, 52: 1152.88, 53: 1669.78, 54: 1572.65, 55: 1184.74, 56: 1239.98, 57: 803.36, 58: 693.90, 59: 865.08, 60: 1089.54, 61: 999.99, 62: 420.88, 63: 1601.37, 64: 1533.94, 65: 1543.32, 66: 859.27, 67: 1698.64, 68: 1408.46, 69: 1539.32, 70: 2536.40, 71: 554.91, 72: 1678.39, 73: 611.31, 74: 930.82, 75: 2802.28, 76: 824.15, 77: 2473.86, 78: 1064.25, 79: 1286.10, 80: 1293.26, 81: 2364.98, 82: 1585.81, 83: 782.16, 84: 1786.53, 85: 1289.60, 86: 1195.81, 87: 1315.78, 88: 1234.53, 89: 735.83, 90: 365.94, 91: 693.31, 92: 533.03, 93: 1422.96, 94: 2608.57, 95: 2412.46, 96: 1154.67, 97: 429.69, 98: 1274.12, 99: 2564.05},
47: {0: 2522.63, 1: 1595.61, 2: 507.06, 3: 3555.86, 4: 652.15, 5: 2911.48, 6: 1164.61, 7: 2706.77, 8: 1163.60, 9: 3136.01, 10: 2672.89, 11: 1207.36, 12: 1150.51, 13: 287.59, 14: 2700.79, 15: 3778.62, 16: 2713.67, 17: 3622.84, 18: 3326.14, 19: 1346.47, 20: 2970.66, 21: 3848.71, 22: 2104.03, 23: 3601.44, 24: 1352.18, 25: 3915.97, 26: 1299.02, 27: 2109.26, 28: 522.02, 29: 427.13, 30: 2904.13, 31: 2484.07, 32: 1126.68, 33: 816.47, 34: 1454.79, 35: 3429.11, 36: 720.00, 37: 3581.31, 38: 634.85, 39: 1716.09, 40: 432.65, 41: 2754.10, 42: 666.69, 43: 1357.28, 44: 2310.44, 45: 598.82, 46: 2481.50, 48: 2958.36, 49: 1199.27, 50: 1398.53, 51: 395.51, 52: 3532.57, 53: 1798.75, 54: 977.47, 55: 3103.99, 56: 1256.36, 57: 1808.67, 58: 3030.35, 59: 1802.32, 60: 1485.91, 61: 1658.65, 62: 2771.79, 63: 1638.92, 64: 3700.00, 65: 3762.08, 66: 2056.21, 67: 1027.80, 68: 1486.46, 69: 3908.42, 70: 356.92, 71: 3011.66, 72: 1264.80, 73: 2978.88, 74: 3114.23, 75: 1216.15, 76: 1722.50, 77: 422.21, 78: 3506.41, 79: 2958.37, 80: 1341.46, 81: 1261.11, 82: 957.05, 83: 3263.67, 84: 875.56, 85: 1375.82, 86: 1288.40, 87: 3735.79, 88: 2716.59, 89: 3145.68, 90: 2273.52, 91: 2755.81, 92: 2109.75, 93: 3866.20, 94: 1296.30, 95: 451.69, 96: 3233.43, 97: 2174.28, 98: 3708.78, 99: 251.75},
48: {0: 442.29, 1: 2094.27, 2: 2669.80, 3: 785.49, 4: 2964.12, 5: 47.07, 6: 1859.25, 7: 553.18, 8: 1840.87, 9: 420.59, 10: 931.18, 11: 1938.08, 12: 2982.44, 13: 2805.19, 14: 1037.10, 15: 820.29, 16: 1034.26, 17: 742.85, 18: 431.80, 19: 1789.66, 20: 745.07, 21: 890.41, 22: 1151.82, 23: 810.63, 24: 1636.02, 25: 1201.82, 26: 1945.38, 27: 857.03, 28: 2505.55, 29: 2584.98, 30: 948.87, 31: 913.09, 32: 3071.29, 33: 2222.15, 34: 1923.91, 35: 858.40, 36: 2958.62, 37: 849.10, 38: 2544.53, 39: 1757.78, 40: 3118.21, 41: 777.08, 42: 2657.20, 43: 2091.39, 44: 1110.01, 45: 2531.15, 46: 614.49, 47: 2958.36, 49: 2138.79, 50: 1560.74, 51: 2916.18, 52: 576.84, 53: 1781.00, 54: 2114.93, 55: 687.16, 56: 1769.37, 57: 1159.29, 58: 892.29, 59: 1471.94, 60: 1483.91, 61: 1599.67, 62: 201.84, 63: 1774.52, 64: 921.64, 65: 928.87, 66: 1015.02, 67: 2059.46, 68: 1673.31, 69: 961.00, 70: 3058.47, 71: 607.60, 72: 1965.51, 73: 811.05, 74: 349.32, 75: 3075.65, 76: 1406.59, 77: 2884.54, 78: 567.67, 79: 888.05, 80: 1661.88, 81: 2607.65, 82: 2124.86, 83: 539.42, 84: 2176.13, 85: 1875.61, 86: 1680.91, 87: 778.54, 88: 956.62, 89: 208.12, 90: 977.95, 91: 352.14, 92: 850.72, 93: 916.56, 94: 2851.76, 95: 2818.95, 96: 585.84, 97: 1043.92, 98: 1130.76, 99: 3071.77},
49: {0: 1706.57, 1: 416.12, 2: 1292.65, 3: 2568.82, 4: 887.03, 5: 2096.31, 6: 1051.98, 7: 1736.75, 8: 1005.68, 9: 2437.39, 10: 2231.73, 11: 1258.81, 12: 849.63, 13: 1248.36, 14: 2305.31, 15: 2924.85, 16: 2315.97, 17: 2873.96, 18: 2419.20, 19: 1282.08, 20: 2426.50, 21: 2993.60, 22: 1733.90, 23: 2906.27, 24: 650.76, 25: 2879.38, 26: 1394.11, 27: 1320.48, 28: 1086.10, 29: 783.60, 30: 1813.65, 31: 2031.29, 32: 934.56, 33: 1055.88, 34: 1560.97, 35: 2824.69, 36: 861.97, 37: 2915.42, 38: 573.81, 39: 535.76, 40: 1575.07, 41: 1710.04, 42: 1421.04, 43: 161.76, 44: 1949.75, 45: 1223.43, 46: 1858.19, 47: 1199.27, 48: 2138.79, 50: 891.22, 51: 945.42, 52: 2669.18, 53: 606.57, 54: 1150.58, 55: 2079.23, 56: 1079.47, 57: 1054.83, 58: 2535.31, 59: 1598.10, 60: 803.30, 61: 1523.39, 62: 1992.67, 63: 466.84, 64: 2703.09, 65: 2784.18, 66: 1125.34, 67: 319.51, 68: 466.08, 69: 3009.65, 70: 1492.62, 71: 2408.26, 72: 179.82, 73: 2459.66, 74: 2187.88, 75: 947.11, 76: 1422.45, 77: 905.88, 78: 2705.59, 79: 1881.55, 80: 601.05, 81: 514.58, 82: 1132.64, 83: 2577.02, 84: 420.95, 85: 1421.04, 86: 921.65, 87: 2893.43, 88: 1628.88, 89: 2345.63, 90: 1826.73, 91: 1849.61, 92: 1345.90, 93: 3043.55, 94: 753.45, 95: 839.77, 96: 2247.50, 97: 1746.15, 98: 3124.08, 99: 1426.97},
50: {0: 1128.69, 1: 1146.96, 2: 1137.95, 3: 2195.77, 4: 1498.04, 5: 1513.78, 6: 382.78, 7: 1365.06, 8: 341.70, 9: 1749.77, 10: 1391.60, 11: 570.74, 12: 1674.84, 13: 1250.96, 14: 1451.16, 15: 2380.74, 16: 1462.76, 17: 2230.73, 18: 1939.26, 19: 501.88, 20: 1637.74, 21: 2450.78, 22: 856.98, 23: 2220.68, 24: 254.23, 25: 2579.09, 26: 671.25, 27: 721.67, 28: 955.42, 29: 1043.20, 30: 1661.91, 31: 1190.12, 32: 1740.64, 33: 694.72, 34: 791.25, 35: 2076.90, 36: 1510.85, 37: 2208.79, 38: 1060.69, 39: 948.90, 40: 1575.86, 41: 1469.25, 42: 1161.82, 43: 960.12, 44: 1077.00, 45: 1004.12, 46: 1104.60, 47: 1398.53, 48: 1560.74, 49: 891.22, 51: 1396.42, 52: 2136.21, 53: 1048.65, 54: 638.04, 55: 1781.87, 56: 330.05, 57: 434.77, 58: 1724.54, 59: 711.18, 60: 186.27, 61: 655.74, 62: 1373.26, 63: 887.35, 64: 2342.38, 65: 2393.96, 66: 751.83, 67: 641.84, 68: 591.05, 69: 2515.04, 70: 1510.68, 71: 1653.32, 72: 731.97, 73: 1658.82, 74: 1736.78, 75: 1777.49, 76: 531.52, 77: 1369.76, 78: 2108.33, 79: 1695.08, 80: 305.31, 81: 1397.84, 82: 638.38, 83: 1881.77, 84: 697.83, 85: 657.14, 86: 146.37, 87: 2337.47, 88: 1486.34, 89: 1747.16, 90: 976.46, 91: 1380.06, 92: 716.45, 93: 2467.80, 94: 1624.98, 95: 1309.07, 96: 1880.46, 97: 886.14, 98: 2368.50, 99: 1515.14},
51: {0: 2474.05, 1: 1302.29, 2: 823.31, 3: 3447.68, 4: 259.24, 5: 2870.31, 6: 1263.40, 7: 2598.66, 8: 1246.65, 9: 3141.82, 10: 2757.15, 11: 1366.93, 12: 755.01, 13: 633.51, 14: 2800.17, 15: 3731.50, 16: 2812.64, 17: 3615.92, 18: 3252.62, 19: 1483.34, 20: 3027.41, 21: 3801.57, 22: 2193.43, 23: 3614.33, 24: 1280.21, 25: 3784.33, 26: 1482.09, 27: 2059.37, 28: 742.65, 29: 368.64, 30: 2737.27, 31: 2559.87, 32: 733.38, 33: 978.46, 34: 1653.81, 35: 3472.30, 36: 325.68, 37: 3604.61, 38: 388.62, 39: 1480.98, 40: 826.20, 41: 2611.40, 42: 994.13, 43: 1089.09, 44: 2410.17, 45: 868.38, 46: 2500.91, 47: 395.51, 48: 2916.18, 49: 945.42, 50: 1396.42, 52: 3479.38, 53: 1550.22, 54: 1146.68, 55: 2974.03, 56: 1346.18, 57: 1757.96, 58: 3104.39, 59: 1928.97, 60: 1435.46, 61: 1798.02, 62: 2742.04, 63: 1410.11, 64: 3587.85, 65: 3659.58, 66: 1951.32, 67: 872.89, 68: 1321.34, 69: 3843.08, 70: 752.16, 71: 3049.07, 72: 1056.08, 73: 3044.06, 74: 3030.19, 75: 821.93, 76: 1814.77, 77: 40.00, 78: 3478.25, 79: 2799.70, 80: 1255.19, 81: 894.56, 82: 1123.64, 83: 3275.60, 84: 741.97, 85: 1550.06, 86: 1318.94, 87: 3693.04, 88: 2550.13, 89: 3113.67, 90: 2344.87, 91: 2675.81, 92: 2068.79, 93: 3832.53, 94: 905.65, 95: 106.23, 96: 3123.47, 97: 2248.08, 98: 3762.06, 99: 642.22},
52: {0: 1010.45, 1: 2577.25, 2: 3246.18, 3: 497.64, 4: 3515.60, 5: 623.91, 6: 2435.30, 7: 958.18, 8: 2417.45, 9: 617.29, 10: 1334.04, 11: 2508.79, 12: 3501.01, 13: 3381.94, 14: 1418.82, 15: 255.69, 16: 1411.67, 17: 433.13, 18: 279.87, 19: 2358.86, 20: 1034.57, 21: 324.58, 22: 1683.08, 23: 603.68, 24: 2201.33, 25: 825.11, 26: 2509.82, 27: 1425.60, 28: 3082.37, 29: 3154.24, 30: 1165.37, 31: 1383.37, 32: 3593.20, 33: 2798.73, 34: 2477.00, 35: 849.47, 36: 3506.36, 37: 692.41, 38: 3103.00, 39: 2244.66, 40: 3694.86, 41: 1092.63, 42: 3231.26, 43: 2606.10, 44: 1600.02, 45: 3107.42, 46: 1152.88, 47: 3532.57, 48: 576.84, 49: 2669.18, 50: 2136.21, 51: 3479.38, 53: 2251.34, 54: 2689.79, 55: 801.98, 56: 2345.04, 57: 1728.06, 58: 1143.08, 59: 2017.56, 60: 2053.08, 61: 2152.58, 62: 773.08, 63: 2272.99, 64: 562.14, 65: 502.47, 66: 1547.17, 67: 2615.21, 68: 2208.59, 69: 387.62, 70: 3635.29, 71: 885.87, 72: 2501.29, 73: 1091.46, 74: 506.35, 75: 3590.55, 76: 1969.17, 77: 3446.79, 78: 223.01, 79: 1081.12, 80: 2224.30, 81: 3115.56, 82: 2700.12, 83: 606.39, 84: 2737.66, 85: 2437.80, 86: 2257.57, 87: 229.75, 88: 1259.48, 89: 417.08, 90: 1497.42, 91: 819.68, 92: 1422.95, 93: 389.31, 94: 3356.37, 95: 3380.48, 96: 589.48, 97: 1576.26, 98: 1000.95, 99: 3648.39},
53: {0: 1394.18, 1: 331.30, 2: 1827.94, 3: 2071.58, 4: 1468.37, 5: 1745.03, 6: 1362.06, 7: 1293.21, 8: 1311.88, 9: 2141.98, 10: 2118.40, 11: 1576.91, 12: 1296.45, 13: 1819.15, 14: 2212.26, 15: 2503.87, 16: 2220.57, 17: 2521.97, 18: 1982.40, 19: 1542.05, 20: 2231.70, 21: 2569.52, 22: 1729.37, 23: 2586.75, 24: 812.86, 25: 2343.63, 26: 1697.46, 27: 1099.14, 28: 1614.31, 29: 1375.91, 30: 1265.17, 31: 1933.05, 32: 1395.16, 33: 1503.60, 34: 1834.79, 35: 2565.81, 36: 1432.87, 37: 2613.76, 38: 1179.91, 39: 103.59, 40: 2155.87, 41: 1204.76, 42: 1932.41, 43: 463.35, 44: 1918.18, 45: 1735.64, 46: 1669.78, 47: 1798.75, 48: 1781.00, 49: 606.57, 50: 1048.65, 51: 1550.22, 52: 2251.34, 54: 1546.82, 55: 1571.64, 56: 1348.41, 57: 945.41, 58: 2362.45, 59: 1713.66, 60: 877.49, 61: 1690.58, 62: 1676.93, 63: 180.69, 64: 2195.85, 65: 2287.30, 66: 816.77, 67: 808.97, 68: 467.13, 69: 2557.44, 70: 2074.39, 71: 2177.24, 72: 545.22, 73: 2277.78, 74: 1748.61, 75: 1374.40, 76: 1522.67, 77: 1510.47, 78: 2327.54, 79: 1341.46, 80: 770.17, 81: 897.04, 82: 1535.01, 83: 2280.45, 84: 956.73, 85: 1696.79, 86: 1152.95, 87: 2480.85, 88: 1090.00, 89: 1987.42, 90: 1759.97, 91: 1449.23, 92: 1140.04, 93: 2638.35, 94: 1124.77, 95: 1445.05, 96: 1761.85, 97: 1703.84, 98: 2862.28, 99: 2018.09},
54: {0: 1707.55, 1: 1529.08, 2: 567.12, 3: 2801.62, 4: 1342.83, 5: 2068.13, 6: 264.15, 7: 1988.89, 8: 297.56, 9: 2226.89, 10: 1706.97, 11: 229.92, 12: 1693.55, 13: 743.35, 14: 1728.45, 15: 2922.55, 16: 1741.41, 17: 2719.96, 18: 2519.55, 19: 372.93, 20: 2018.51, 21: 2991.47, 22: 1141.47, 23: 2678.63, 24: 771.11, 25: 3195.29, 26: 335.41, 27: 1325.93, 28: 456.18, 29: 790.87, 30: 2299.88, 31: 1524.69, 32: 1726.82, 33: 168.63, 34: 508.72, 35: 2482.46, 36: 1383.28, 37: 2649.24, 38: 962.68, 39: 1443.40, 40: 1017.22, 41: 2105.20, 42: 543.39, 43: 1285.03, 44: 1340.24, 45: 428.67, 46: 1572.65, 47: 977.47, 48: 2114.93, 49: 1150.58, 50: 638.04, 51: 1146.68, 52: 2689.79, 53: 1546.82, 55: 2408.61, 56: 347.76, 57: 1063.01, 58: 2067.17, 59: 826.74, 60: 807.96, 61: 681.45, 62: 1916.72, 63: 1367.42, 64: 2948.79, 65: 2992.09, 66: 1389.61, 67: 831.27, 68: 1088.54, 69: 3075.74, 70: 967.35, 71: 2073.96, 72: 1067.16, 73: 2021.14, 74: 2332.22, 75: 1791.40, 76: 767.01, 77: 1136.60, 78: 2630.39, 79: 2332.12, 80: 799.72, 81: 1552.19, 82: 23.35, 83: 2346.10, 84: 755.91, 85: 405.42, 86: 491.71, 87: 2874.60, 88: 2124.24, 89: 2282.46, 90: 1320.32, 91: 1982.33, 92: 1310.24, 93: 2991.18, 94: 1725.19, 95: 1097.87, 96: 2493.48, 97: 1221.16, 98: 2753.43, 99: 1007.04},
55: {0: 795.34, 1: 1902.79, 2: 2916.62, 3: 500.37, 4: 2961.86, 5: 697.69, 6: 2144.67, 7: 420.64, 8: 2112.60, 9: 1078.64, 10: 1592.14, 11: 2279.37, 12: 2863.71, 13: 3008.84, 14: 1702.58, 15: 1020.65, 16: 1701.37, 17: 1198.41, 18: 530.08, 19: 2148.63, 20: 1432.22, 21: 1075.60, 22: 1676.77, 23: 1337.22, 24: 1757.08, 25: 812.50, 26: 2323.76, 27: 1091.15, 28: 2724.46, 29: 2692.06, 30: 366.96, 31: 1534.09, 32: 2960.98, 33: 2476.49, 34: 2349.00, 35: 1485.16, 36: 2940.58, 37: 1406.79, 38: 2585.82, 39: 1589.32, 40: 3344.79, 41: 370.19, 42: 2942.77, 43: 1984.20, 44: 1698.84, 45: 2784.83, 46: 1184.74, 47: 3103.99, 48: 687.16, 49: 2079.23, 50: 1781.87, 51: 2974.03, 52: 801.98, 53: 1571.64, 54: 2408.61, 56: 2066.92, 57: 1348.00, 58: 1579.26, 59: 1942.17, 60: 1643.52, 61: 2040.91, 62: 800.56, 63: 1635.35, 64: 626.01, 65: 715.73, 66: 1051.12, 67: 2104.29, 68: 1653.47, 69: 1018.43, 70: 3274.72, 71: 1293.54, 72: 1931.89, 73: 1498.19, 74: 370.00, 75: 2944.68, 76: 1823.68, 77: 2937.57, 78: 969.03, 79: 280.80, 80: 1763.52, 81: 2466.17, 82: 2412.39, 83: 1167.23, 84: 2246.39, 85: 2267.73, 86: 1924.32, 87: 1017.01, 88: 494.50, 89: 785.86, 90: 1537.62, 91: 496.59, 92: 1115.63, 93: 1176.32, 94: 2696.40, 95: 2869.46, 96: 216.11, 97: 1575.54, 98: 1716.91, 99: 3262.84},
56: {0: 1359.82, 1: 1400.39, 2: 902.66, 3: 2454.44, 4: 1499.52, 5: 1722.48, 6: 93.05, 7: 1646.54, 8: 99.76, 9: 1896.26, 10: 1421.53, 11: 240.75, 12: 1767.79, 13: 1056.38, 14: 1457.50, 15: 2579.87, 16: 1470.14, 17: 2387.99, 18: 2172.08, 19: 203.75, 20: 1714.30, 21: 2649.06, 22: 853.15, 23: 2354.74, 24: 535.73, 25: 2849.48, 26: 349.59, 27: 980.40, 28: 756.24, 29: 977.58, 30: 1973.10, 31: 1229.48, 32: 1818.68, 33: 459.62, 34: 493.08, 35: 2173.41, 36: 1526.82, 37: 2330.25, 38: 1075.72, 39: 1245.97, 40: 1353.01, 41: 1772.18, 42: 891.05, 43: 1182.81, 44: 1066.42, 45: 763.49, 46: 1239.98, 47: 1256.36, 48: 1769.37, 49: 1079.47, 50: 330.05, 51: 1346.18, 52: 2345.04, 53: 1348.41, 54: 347.76, 55: 2066.92, 57: 727.99, 58: 1776.33, 59: 588.26, 60: 515.40, 61: 473.08, 62: 1572.10, 63: 1177.68, 64: 2601.61, 65: 2644.39, 66: 1064.32, 67: 777.01, 68: 881.72, 69: 2730.37, 70: 1297.58, 71: 1757.82, 72: 950.51, 73: 1723.07, 74: 1984.54, 75: 1869.85, 76: 471.27, 77: 1327.42, 78: 2290.91, 79: 2001.03, 80: 578.73, 81: 1551.08, 82: 356.04, 83: 2019.24, 84: 766.85, 85: 352.37, 86: 197.52, 87: 2532.67, 88: 1801.84, 89: 1939.87, 90: 1017.64, 91: 1635.24, 92: 963.42, 93: 2652.04, 94: 1756.77, 95: 1276.24, 96: 2147.43, 97: 918.58, 98: 2452.44, 99: 1324.36},
57: {0: 718.23, 1: 1160.70, 2: 1572.47, 3: 1763.01, 4: 1818.49, 5: 1113.11, 6: 800.24, 7: 930.41, 8: 765.87, 9: 1401.86, 10: 1199.97, 11: 955.12, 12: 1900.23, 13: 1679.32, 14: 1285.22, 15: 1977.58, 16: 1294.60, 17: 1863.09, 18: 1517.58, 19: 844.08, 20: 1372.41, 21: 2047.76, 22: 785.49, 23: 1875.11, 24: 478.28, 25: 2144.39, 26: 1024.64, 27: 302.60, 28: 1386.96, 29: 1426.37, 30: 1246.47, 31: 1005.45, 32: 1979.99, 33: 1129.32, 34: 1096.69, 35: 1773.32, 36: 1818.78, 37: 1876.01, 38: 1391.23, 39: 867.78, 40: 2008.19, 41: 1044.26, 42: 1594.77, 43: 1057.67, 44: 973.33, 45: 1438.89, 46: 803.36, 47: 1808.67, 48: 1159.29, 49: 1054.83, 50: 434.77, 51: 1757.96, 52: 1728.06, 53: 945.41, 54: 1063.01, 55: 1348.00, 56: 727.99, 58: 1484.95, 59: 826.07, 60: 325.04, 61: 851.17, 62: 984.56, 63: 837.93, 64: 1909.33, 65: 1963.25, 66: 344.73, 67: 913.76, 68: 610.33, 69: 2100.56, 70: 1941.51, 71: 1354.51, 72: 875.03, 73: 1407.28, 74: 1308.77, 75: 1999.56, 76: 643.12, 77: 1726.95, 78: 1720.31, 79: 1273.08, 80: 508.33, 81: 1562.69, 82: 1065.77, 83: 1539.68, 84: 1020.53, 85: 985.29, 86: 576.32, 87: 1937.45, 88: 1078.72, 89: 1355.71, 90: 819.56, 91: 950.64, 92: 311.26, 93: 2075.01, 94: 1805.74, 95: 1661.95, 96: 1446.36, 97: 758.98, 98: 2072.06, 99: 1940.76},
58: {0: 1030.90, 1: 2626.07, 2: 2625.84, 3: 1572.78, 4: 3221.86, 5: 886.00, 6: 1866.83, 7: 1379.08, 8: 1872.34, 9: 542.72, 10: 361.27, 11: 1843.95, 12: 3371.64, 13: 2810.48, 14: 370.47, 15: 1247.62, 16: 358.24, 17: 879.93, 18: 1205.72, 19: 1694.55, 20: 150.86, 21: 1295.64, 22: 926.88, 23: 748.95, 24: 1909.41, 25: 1956.18, 26: 1788.12, 27: 1265.10, 28: 2518.16, 29: 2739.56, 30: 1822.14, 31: 546.88, 32: 3445.90, 33: 2217.92, 34: 1687.49, 35: 461.85, 36: 3235.39, 37: 679.23, 38: 2784.52, 39: 2306.77, 40: 3066.73, 41: 1624.76, 42: 2557.05, 43: 2542.28, 44: 731.18, 45: 2491.04, 46: 693.90, 47: 3030.35, 48: 892.29, 49: 2535.31, 50: 1724.54, 51: 3104.39, 52: 1143.08, 53: 2362.45, 54: 2067.17, 55: 1579.26, 56: 1776.33, 57: 1484.95, 59: 1249.64, 60: 1745.82, 61: 1400.46, 62: 825.26, 63: 2295.03, 64: 1678.25, 65: 1638.97, 66: 1548.55, 67: 2350.56, 68: 2094.64, 69: 1460.21, 70: 3025.95, 71: 287.56, 72: 2356.20, 73: 89.00, 74: 1227.06, 75: 3472.69, 76: 1307.85, 77: 3081.14, 78: 948.13, 79: 1769.59, 80: 1952.87, 81: 3046.45, 82: 2084.98, 83: 539.71, 84: 2421.83, 85: 1707.07, 86: 1786.06, 87: 1189.55, 88: 1794.84, 89: 834.23, 90: 760.43, 91: 1178.05, 92: 1226.86, 93: 1221.19, 94: 3288.36, 95: 3023.78, 96: 1458.46, 97: 858.59, 98: 692.94, 99: 3073.52},
59: {0: 1152.29, 1: 1851.16, 2: 1377.63, 3: 2235.15, 4: 2087.73, 5: 1428.74, 6: 666.11, 7: 1539.02, 8: 687.61, 9: 1481.27, 10: 888.38, 11: 598.82, 12: 2342.81, 13: 1567.95, 14: 902.77, 15: 2226.07, 16: 915.76, 17: 1970.06, 18: 1902.23, 19: 455.93, 20: 1215.63, 21: 2291.72, 22: 345.32, 23: 1904.53, 24: 963.76, 25: 2649.73, 26: 539.33, 27: 911.41, 28: 1282.53, 29: 1560.67, 30: 1955.69, 31: 719.24, 32: 2398.35, 33: 986.00, 34: 463.60, 35: 1681.51, 36: 2114.94, 37: 1864.17, 38: 1663.08, 39: 1620.90, 40: 1817.09, 41: 1730.47, 42: 1308.22, 43: 1671.28, 44: 518.56, 45: 1244.33, 46: 865.08, 47: 1802.32, 48: 1471.94, 49: 1598.10, 50: 711.18, 51: 1928.97, 52: 2017.56, 53: 1713.66, 54: 826.74, 55: 1942.17, 56: 588.26, 57: 826.07, 58: 1249.64, 60: 847.30, 61: 151.05, 62: 1271.65, 63: 1569.59, 64: 2378.66, 65: 2397.63, 66: 1140.81, 67: 1324.42, 68: 1282.66, 69: 2403.29, 70: 1776.98, 71: 1290.85, 72: 1442.80, 73: 1210.66, 74: 1759.71, 75: 2445.43, 76: 191.02, 77: 1911.84, 78: 1917.21, 79: 1958.05, 80: 1015.20, 81: 2096.74, 82: 846.22, 83: 1585.20, 84: 1340.49, 85: 458.63, 86: 685.72, 87: 2173.13, 88: 1816.50, 89: 1600.49, 90: 536.86, 91: 1454.75, 92: 871.27, 93: 2269.90, 94: 2315.42, 95: 1862.38, 96: 1963.97, 97: 446.23, 98: 1941.00, 99: 1827.90},
60: {0: 1043.22, 1: 1006.11, 2: 1275.47, 3: 2076.11, 4: 1506.11, 5: 1437.61, 6: 561.81, 7: 1233.11, 8: 517.35, 9: 1712.78, 10: 1431.62, 11: 756.13, 12: 1626.49, 13: 1367.23, 14: 1502.70, 15: 2302.57, 16: 1513.50, 17: 2181.48, 18: 1840.56, 19: 686.72, 20: 1645.99, 21: 2372.75, 22: 934.14, 23: 2186.36, 24: 164.71, 25: 2448.95, 26: 857.42, 27: 627.62, 28: 1080.95, 29: 1101.36, 30: 1500.71, 31: 1230.39, 32: 1700.08, 33: 844.00, 34: 973.93, 35: 2067.20, 36: 1510.43, 37: 2182.47, 38: 1074.23, 39: 780.44, 40: 1701.43, 41: 1316.86, 42: 1315.30, 43: 845.06, 44: 1147.75, 45: 1146.57, 46: 1089.54, 47: 1485.91, 48: 1483.91, 49: 803.30, 50: 186.27, 51: 1435.46, 52: 2053.08, 53: 877.49, 54: 807.96, 55: 1643.52, 56: 515.40, 57: 325.04, 58: 1745.82, 59: 847.30, 61: 813.62, 62: 1306.78, 63: 724.51, 64: 2221.58, 65: 2279.46, 66: 597.01, 67: 609.20, 68: 435.39, 69: 2424.97, 70: 1632.07, 71: 1644.42, 72: 630.05, 73: 1673.96, 74: 1628.65, 75: 1727.95, 76: 658.48, 77: 1405.16, 78: 2043.41, 79: 1538.73, 80: 207.17, 81: 1317.77, 82: 805.73, 83: 1848.85, 84: 702.67, 85: 841.61, 86: 324.14, 87: 2262.26, 88: 1321.44, 89: 1679.10, 90: 1023.89, 91: 1270.18, 92: 634.00, 93: 2399.08, 94: 1554.11, 95: 1340.84, 96: 1756.20, 97: 942.89, 98: 2363.59, 99: 1625.25},
61: {0: 1259.66, 1: 1802.54, 2: 1227.89, 3: 2353.39, 4: 1965.28, 5: 1555.53, 6: 541.61, 7: 1630.72, 8: 569.53, 9: 1626.02, 10: 1039.23, 11: 452.09, 12: 2240.20, 13: 1420.27, 14: 1051.70, 15: 2365.29, 16: 1064.72, 17: 2116.21, 18: 2027.76, 19: 315.84, 20: 1366.43, 21: 2431.54, 22: 493.04, 23: 2053.38, 24: 909.48, 25: 2765.92, 26: 388.29, 27: 981.90, 28: 1137.62, 29: 1430.83, 30: 2031.79, 31: 869.87, 32: 2291.74, 33: 843.53, 34: 324.61, 35: 1832.36, 36: 1995.29, 37: 2014.02, 38: 1546.56, 39: 1594.05, 40: 1666.35, 41: 1809.97, 42: 1157.17, 43: 1608.43, 44: 669.30, 45: 1095.35, 46: 999.99, 47: 1658.65, 48: 1599.67, 49: 1523.39, 50: 655.74, 51: 1798.02, 52: 2152.58, 53: 1690.58, 54: 681.45, 55: 2040.91, 56: 473.08, 57: 851.17, 58: 1400.46, 59: 151.05, 60: 813.62, 62: 1398.28, 63: 1537.16, 64: 2498.08, 65: 2521.18, 66: 1183.32, 67: 1236.01, 68: 1243.63, 69: 2539.28, 70: 1626.78, 71: 1440.04, 72: 1376.89, 73: 1361.71, 74: 1876.57, 75: 2342.41, 76: 221.42, 77: 1782.40, 78: 2058.25, 79: 2039.77, 80: 960.08, 81: 2011.66, 82: 701.62, 83: 1732.20, 84: 1238.13, 85: 307.65, 86: 601.82, 87: 2312.98, 88: 1884.22, 89: 1735.66, 90: 683.74, 91: 1560.58, 92: 945.84, 93: 2412.71, 94: 2223.69, 95: 1735.03, 96: 2074.35, 97: 590.41, 98: 2092.00, 99: 1679.02},
62: {0: 288.09, 1: 1979.20, 2: 2473.70, 3: 973.90, 4: 2799.74, 5: 157.26, 6: 1662.57, 7: 554.05, 8: 1645.48, 9: 465.47, 10: 791.77, 11: 1737.55, 12: 2840.72, 13: 2612.66, 14: 902.70, 15: 1010.03, 16: 901.89, 17: 883.24, 18: 630.60, 19: 1588.68, 20: 674.44, 21: 1079.75, 22: 955.59, 23: 917.99, 24: 1462.85, 25: 1390.95, 26: 1743.70, 27: 685.93, 28: 2312.42, 29: 2405.15, 30: 1000.98, 31: 743.27, 32: 2927.18, 33: 2026.69, 34: 1722.40, 35: 898.35, 36: 2797.09, 37: 938.09, 38: 2375.26, 39: 1643.83, 40: 2922.85, 41: 799.53, 42: 2458.35, 43: 1956.34, 44: 928.07, 45: 2334.82, 46: 420.88, 47: 2771.79, 48: 201.84, 49: 1992.67, 50: 1373.26, 51: 2742.04, 52: 773.08, 53: 1676.93, 54: 1916.72, 55: 800.56, 56: 1572.10, 57: 984.56, 58: 825.26, 59: 1271.65, 60: 1306.78, 61: 1398.28, 63: 1652.95, 64: 1113.69, 65: 1126.68, 66: 881.15, 67: 1893.93, 68: 1526.75, 69: 1159.35, 70: 2864.13, 71: 562.23, 72: 1816.46, 73: 737.83, 74: 512.64, 75: 2935.95, 76: 1204.76, 77: 2711.32, 78: 737.01, 79: 954.08, 80: 1491.66, 81: 2474.04, 82: 1927.05, 83: 603.52, 84: 2004.97, 85: 1673.80, 86: 1489.50, 87: 965.11, 88: 970.22, 89: 373.98, 90: 786.70, 91: 353.41, 92: 673.37, 93: 1094.93, 94: 2719.14, 95: 2646.47, 96: 741.97, 97: 847.93, 98: 1189.73, 99: 2879.80},
63: {0: 1365.66, 1: 331.72, 2: 1650.53, 3: 2131.24, 4: 1350.00, 5: 1735.62, 6: 1187.47, 7: 1320.96, 8: 1137.23, 9: 2114.01, 10: 2031.86, 11: 1403.00, 12: 1234.19, 13: 1647.54, 14: 2120.79, 15: 2527.81, 16: 2129.80, 17: 2517.29, 18: 2011.51, 19: 1374.05, 20: 2170.25, 21: 2595.04, 22: 1610.98, 23: 2569.93, 24: 644.15, 25: 2425.98, 26: 1525.66, 27: 1031.72, 28: 1436.67, 29: 1213.41, 30: 1353.63, 31: 1840.75, 32: 1329.56, 33: 1322.91, 34: 1667.07, 35: 2527.26, 36: 1320.60, 37: 2590.49, 38: 1031.14, 39: 80.45, 40: 1986.25, 41: 1265.19, 42: 1752.90, 43: 349.76, 44: 1808.28, 45: 1556.46, 46: 1601.37, 47: 1638.92, 48: 1774.52, 49: 466.84, 50: 887.35, 51: 1410.11, 52: 2272.99, 53: 180.69, 54: 1367.42, 55: 1635.35, 56: 1177.68, 57: 837.93, 58: 2295.03, 59: 1569.59, 60: 724.51, 61: 1537.16, 62: 1652.95, 64: 2261.30, 65: 2347.32, 66: 773.61, 67: 634.44, 68: 297.38, 69: 2595.79, 70: 1905.25, 71: 2127.14, 72: 375.71, 73: 2212.60, 74: 1777.67, 75: 1320.24, 76: 1379.34, 77: 1370.83, 78: 2332.51, 79: 1424.40, 80: 599.10, 81: 843.13, 82: 1355.34, 83: 2253.72, 84: 784.55, 85: 1528.03, 86: 984.00, 87: 2501.03, 88: 1171.11, 89: 1982.53, 90: 1657.46, 91: 1458.09, 92: 1068.39, 93: 2655.86, 94: 1083.41, 95: 1304.08, 96: 1814.23, 97: 1594.40, 98: 2825.98, 99: 1852.72},
64: {0: 1250.23, 1: 2526.66, 2: 3479.70, 3: 147.18, 4: 3583.51, 5: 960.03, 6: 2685.58, 7: 993.62, 8: 2658.80, 9: 1136.89, 10: 1819.14, 11: 2796.12, 12: 3489.32, 13: 3587.56, 14: 1915.41, 15: 630.89, 16: 1910.08, 17: 977.88, 18: 497.11, 19: 2654.98, 20: 1555.77, 21: 652.33, 22: 2069.13, 23: 1156.22, 24: 2347.93, 25: 283.34, 26: 2821.49, 27: 1625.06, 28: 3296.29, 29: 3295.12, 30: 951.13, 31: 1828.60, 32: 3586.74, 33: 3033.44, 34: 2819.24, 35: 1411.57, 36: 3563.59, 37: 1248.34, 38: 3200.66, 39: 2215.19, 40: 3917.51, 41: 996.11, 42: 3490.50, 43: 2609.99, 44: 2030.68, 45: 3344.44, 46: 1533.94, 47: 3700.00, 48: 921.64, 49: 2703.09, 50: 2342.38, 51: 3587.85, 52: 562.14, 53: 2195.85, 54: 2948.79, 55: 626.01, 56: 2601.61, 57: 1909.33, 58: 1678.25, 59: 2378.66, 60: 2221.58, 61: 2498.08, 62: 1113.69, 63: 2261.30, 65: 114.77, 66: 1645.05, 67: 2715.63, 68: 2270.70, 69: 512.00, 70: 3850.65, 71: 1404.09, 72: 2552.87, 73: 1617.22, 74: 623.03, 75: 3569.72, 76: 2293.36, 77: 3552.04, 78: 784.66, 79: 866.85, 80: 2359.34, 81: 3091.41, 82: 2955.26, 83: 1154.48, 84: 2854.15, 85: 2757.20, 86: 2479.02, 87: 662.15, 88: 1109.76, 89: 865.92, 90: 1898.89, 91: 966.48, 92: 1638.64, 93: 783.78, 94: 3320.43, 95: 3484.07, 96: 466.62, 97: 1961.57, 98: 1550.38, 99: 3846.81},
65: {0: 1286.44, 1: 2618.49, 2: 3529.20, 3: 216.11, 4: 3661.45, 5: 970.27, 6: 2729.89, 7: 1061.08, 8: 2704.79, 9: 1102.39, 10: 1800.88, 11: 2833.13, 12: 3578.14, 13: 3642.56, 14: 1893.37, 15: 534.20, 16: 1887.35, 17: 899.07, 18: 497.12, 19: 2689.69, 20: 1522.78, 21: 549.18, 22: 2080.69, 23: 1079.50, 24: 2410.17, 25: 323.20, 26: 2853.28, 27: 1673.49, 28: 3349.19, 29: 3361.02, 30: 1052.91, 31: 1822.98, 32: 3675.02, 33: 3081.77, 34: 2844.05, 35: 1347.41, 36: 3643.08, 37: 1173.39, 38: 3273.38, 39: 2303.39, 40: 3969.81, 41: 1083.72, 42: 3534.91, 43: 2695.00, 44: 2030.15, 45: 3393.00, 46: 1543.32, 47: 3762.08, 48: 928.87, 49: 2784.18, 50: 2393.96, 51: 3659.58, 52: 502.47, 53: 2287.30, 54: 2992.09, 55: 715.73, 56: 2644.39, 57: 1963.25, 58: 1638.97, 59: 2397.63, 60: 2279.46, 61: 2521.18, 62: 1126.68, 63: 2347.32, 64: 114.77, 66: 1711.34, 67: 2786.74, 68: 2346.23, 69: 400.22, 70: 3904.24, 71: 1371.75, 72: 2630.96, 73: 1582.39, 74: 659.88, 75: 3659.81, 76: 2320.61, 77: 3624.21, 78: 720.15, 79: 967.50, 80: 2423.58, 81: 3181.17, 82: 2999.35, 83: 1106.68, 84: 2923.07, 85: 2787.09, 86: 2528.25, 87: 570.64, 88: 1205.90, 89: 847.85, 90: 1905.66, 91: 1013.97, 92: 1684.14, 93: 682.11, 94: 3412.04, 95: 3556.39, 96: 537.43, 97: 1972.79, 98: 1469.63, 99: 3903.56},
66: {0: 593.19, 1: 1102.74, 2: 1872.41, 3: 1502.07, 4: 1971.11, 5: 973.54, 6: 1130.68, 7: 651.46, 8: 1092.44, 9: 1340.55, 10: 1324.61, 11: 1296.09, 12: 1967.42, 13: 1958.18, 14: 1425.29, 15: 1802.52, 16: 1432.33, 17: 1754.43, 18: 1306.08, 19: 1188.45, 20: 1415.73, 21: 1871.74, 22: 1029.89, 23: 1799.09, 24: 706.21, 25: 1861.10, 26: 1369.00, 27: 300.85, 28: 1676.25, 29: 1650.23, 30: 910.38, 31: 1151.84, 32: 2056.46, 33: 1439.27, 34: 1440.09, 35: 1755.11, 36: 1960.02, 37: 1817.54, 38: 1567.74, 39: 770.73, 40: 2295.34, 41: 720.06, 42: 1909.80, 43: 1077.43, 44: 1180.71, 45: 1743.45, 46: 859.27, 47: 2056.21, 48: 1015.02, 49: 1125.34, 50: 751.83, 51: 1951.32, 52: 1547.17, 53: 816.77, 54: 1389.61, 55: 1051.12, 56: 1064.32, 57: 344.73, 58: 1548.55, 59: 1140.81, 60: 597.01, 61: 1183.32, 62: 881.15, 63: 773.61, 64: 1645.05, 65: 1711.34, 67: 1079.12, 68: 661.88, 69: 1898.04, 70: 2224.46, 71: 1361.03, 72: 954.75, 73: 1463.01, 74: 1080.08, 75: 2060.78, 76: 967.86, 77: 1916.76, 78: 1580.77, 79: 943.76, 80: 714.79, 81: 1594.66, 82: 1390.20, 83: 1480.35, 84: 1212.28, 85: 1329.98, 86: 897.98, 87: 1769.60, 88: 737.53, 89: 1222.65, 90: 1007.25, 91: 730.25, 92: 347.25, 93: 1918.60, 94: 1839.42, 95: 1849.31, 96: 1178.52, 97: 974.31, 98: 2053.31, 99: 2211.73},
67: {0: 1617.69, 1: 710.54, 2: 1020.78, 3: 2575.06, 4: 905.81, 5: 2014.44, 6: 740.95, 7: 1725.78, 8: 696.58, 9: 2315.19, 10: 2027.12, 11: 943.40, 12: 1033.01, 13: 1013.88, 14: 2090.68, 15: 2868.85, 16: 2102.09, 17: 2775.40, 18: 2382.97, 19: 976.57, 20: 2253.98, 21: 2938.72, 22: 1498.81, 23: 2788.63, 24: 444.53, 25: 2915.95, 26: 1079.38, 27: 1208.02, 28: 808.01, 29: 601.84, 30: 1882.71, 31: 1825.26, 32: 1100.04, 33: 741.98, 34: 1249.02, 35: 2676.13, 36: 905.04, 37: 2787.85, 38: 488.86, 39: 714.66, 40: 1354.14, 41: 1744.81, 42: 1133.75, 43: 458.31, 44: 1718.82, 45: 935.54, 46: 1698.64, 47: 1027.80, 48: 2059.46, 49: 319.51, 50: 641.84, 51: 872.89, 52: 2615.21, 53: 808.97, 54: 831.27, 55: 2104.29, 56: 777.01, 57: 913.76, 58: 2350.56, 59: 1324.42, 60: 609.20, 61: 1236.01, 62: 1893.93, 63: 634.44, 64: 2715.63, 65: 2786.74, 66: 1079.12, 68: 460.41, 69: 2974.34, 70: 1273.80, 71: 2253.54, 72: 266.72, 73: 2280.46, 74: 2158.86, 75: 1135.65, 76: 1159.70, 77: 837.86, 78: 2625.51, 79: 1940.58, 80: 406.87, 81: 775.77, 82: 813.55, 83: 2452.52, 84: 153.40, 85: 1110.26, 86: 638.80, 87: 2832.30, 88: 1694.94, 89: 2261.04, 90: 1613.64, 91: 1806.05, 92: 1223.40, 93: 2975.40, 94: 991.06, 95: 770.28, 96: 2250.83, 97: 1525.71, 98: 2972.74, 99: 1227.37},
68: {0: 1240.50, 1: 573.27, 2: 1423.78, 3: 2132.53, 4: 1316.71, 5: 1630.61, 6: 895.32, 7: 1289.13, 8: 845.19, 9: 1973.40, 10: 1807.75, 11: 1109.88, 12: 1314.33, 13: 1450.67, 14: 1889.44, 15: 2464.08, 16: 1899.30, 17: 2407.89, 18: 1963.40, 19: 1077.00, 20: 1979.45, 21: 2533.17, 22: 1350.30, 23: 2441.20, 24: 347.00, 25: 2463.06, 26: 1230.49, 27: 858.52, 28: 1210.75, 29: 1061.70, 30: 1422.65, 31: 1610.85, 32: 1400.45, 33: 1060.75, 34: 1370.00, 35: 2366.25, 36: 1302.00, 37: 2451.74, 38: 932.80, 39: 364.32, 40: 1794.06, 41: 1290.06, 42: 1509.71, 43: 447.68, 44: 1556.17, 45: 1317.65, 46: 1408.46, 47: 1486.46, 48: 1673.31, 49: 466.08, 50: 591.05, 51: 1321.34, 52: 2208.59, 53: 467.13, 54: 1088.54, 55: 1653.47, 56: 881.72, 57: 610.33, 58: 2094.64, 59: 1282.66, 60: 435.39, 61: 1243.63, 62: 1526.75, 63: 297.38, 64: 2270.70, 65: 2346.23, 66: 661.88, 67: 460.41, 69: 2555.10, 70: 1715.73, 71: 1953.20, 72: 292.88, 73: 2016.09, 74: 1734.13, 75: 1410.46, 76: 1093.81, 77: 1284.52, 78: 2240.45, 79: 1481.56, 80: 303.12, 81: 958.43, 82: 1078.23, 83: 2113.21, 84: 611.06, 85: 1231.23, 86: 687.12, 87: 2431.46, 88: 1234.89, 89: 1879.90, 90: 1416.12, 91: 1390.12, 92: 886.51, 93: 2580.34, 94: 1203.17, 95: 1216.38, 96: 1808.88, 97: 1344.86, 98: 2665.92, 99: 1678.04},
69: {0: 1386.56, 1: 2887.44, 2: 3630.58, 3: 554.48, 4: 3869.01, 5: 1007.92, 6: 2820.22, 7: 1275.73, 8: 2801.49, 9: 969.93, 10: 1690.80, 11: 2896.08, 12: 3829.44, 13: 3763.35, 14: 1767.32, 15: 214.85, 16: 1759.04, 17: 612.08, 18: 592.00, 19: 2746.32, 20: 1370.75, 21: 186.13, 22: 2066.96, 23: 788.38, 24: 2569.44, 25: 669.16, 26: 2897.43, 27: 1799.20, 28: 3464.42, 29: 3524.35, 30: 1380.56, 31: 1756.40, 32: 3923.72, 33: 3182.71, 34: 2863.55, 35: 1090.48, 36: 3856.75, 37: 884.17, 38: 3463.12, 39: 2560.74, 40: 4078.59, 41: 1362.22, 42: 3617.67, 43: 2936.40, 44: 1975.54, 45: 3492.01, 46: 1539.32, 47: 3908.42, 48: 961.00, 49: 3009.65, 50: 2515.04, 51: 3843.08, 52: 387.62, 53: 2557.44, 54: 3075.74, 55: 1018.43, 56: 2730.37, 57: 2100.56, 58: 1460.21, 59: 2403.29, 60: 2424.97, 61: 2539.28, 62: 1159.35, 63: 2595.79, 64: 512.00, 65: 400.22, 66: 1898.04, 67: 2974.34, 68: 2555.10, 70: 4018.17, 71: 1229.16, 72: 2846.36, 73: 1421.47, 74: 821.78, 75: 3916.00, 76: 2356.76, 77: 3809.65, 78: 518.42, 79: 1293.35, 80: 2589.97, 81: 3438.25, 82: 3085.79, 83: 924.43, 84: 3101.19, 85: 2825.32, 86: 2638.95, 87: 272.01, 88: 1509.87, 89: 803.70, 90: 1879.83, 91: 1168.44, 92: 1799.46, 93: 313.01, 94: 3675.57, 95: 3742.78, 96: 807.82, 97: 1960.62, 98: 1150.02, 99: 4029.17},
70: {0: 2635.28, 1: 1901.81, 2: 401.00, 3: 3704.46, 4: 1007.26, 5: 3011.41, 6: 1205.23, 7: 2865.05, 8: 1219.06, 9: 3192.03, 10: 2664.75, 11: 1183.26, 12: 1507.06, 13: 267.55, 14: 2677.85, 15: 3873.84, 16: 2690.88, 17: 3684.53, 18: 3448.19, 19: 1335.00, 20: 2983.12, 21: 3943.35, 22: 2104.34, 23: 3645.79, 24: 1521.87, 25: 4080.99, 26: 1242.33, 27: 2232.26, 28: 555.30, 29: 711.14, 30: 3106.05, 31: 2487.61, 32: 1481.00, 33: 838.63, 34: 1370.35, 35: 3448.00, 36: 1075.60, 37: 3616.54, 38: 955.26, 39: 1984.72, 40: 82.68, 41: 2939.08, 42: 489.84, 43: 1653.94, 44: 2295.38, 45: 538.68, 46: 2536.40, 47: 356.92, 48: 3058.47, 49: 1492.62, 50: 1510.68, 51: 752.16, 52: 3635.29, 53: 2074.39, 54: 967.35, 55: 3274.72, 56: 1297.58, 57: 1941.51, 58: 3025.95, 59: 1776.98, 60: 1632.07, 61: 1626.78, 62: 2864.13, 63: 1905.25, 64: 3850.65, 65: 3904.24, 66: 2224.46, 67: 1273.80, 68: 1715.73, 69: 4018.17, 71: 3041.14, 72: 1530.21, 73: 2983.45, 74: 3247.46, 75: 1571.10, 76: 1733.84, 77: 779.10, 78: 3587.86, 79: 3153.35, 80: 1522.28, 81: 1608.08, 82: 952.43, 83: 3312.63, 84: 1121.49, 85: 1323.35, 86: 1380.36, 87: 3827.63, 88: 2920.42, 89: 3234.57, 90: 2286.11, 91: 2890.55, 92: 2225.37, 93: 3949.04, 94: 1652.37, 95: 806.04, 96: 3386.62, 97: 2187.22, 98: 3715.53, 99: 121.43},
71: {0: 801.54, 1: 2458.65, 2: 2640.38, 3: 1293.39, 4: 3145.43, 5: 604.47, 6: 1850.60, 7: 1113.80, 8: 1848.37, 9: 269.65, 10: 467.09, 11: 1861.20, 12: 3254.74, 13: 2811.12, 14: 538.16, 15: 1023.14, 16: 529.92, 17: 697.25, 18: 923.64, 19: 1708.01, 20: 151.71, 21: 1078.69, 22: 947.27, 23: 613.94, 24: 1809.03, 25: 1684.60, 26: 1825.48, 27: 1099.24, 28: 2512.74, 29: 2691.15, 30: 1546.43, 31: 577.29, 32: 3334.12, 33: 2213.22, 34: 1749.71, 35: 423.79, 36: 3153.02, 37: 575.84, 38: 2709.45, 39: 2130.55, 40: 3088.49, 41: 1356.19, 42: 2589.22, 43: 2398.62, 44: 796.52, 45: 2502.51, 46: 554.91, 47: 3011.66, 48: 607.60, 49: 2408.26, 50: 1653.32, 51: 3049.07, 52: 885.87, 53: 2177.24, 54: 2073.96, 55: 1293.54, 56: 1757.82, 57: 1354.51, 58: 287.56, 59: 1290.85, 60: 1644.42, 61: 1440.04, 62: 562.23, 63: 2127.14, 64: 1404.09, 65: 1371.75, 66: 1361.03, 67: 2253.54, 68: 1953.20, 69: 1229.16, 70: 3041.14, 72: 2228.47, 73: 214.70, 74: 939.58, 75: 3354.00, 76: 1307.38, 77: 3022.93, 78: 710.74, 79: 1490.74, 80: 1848.11, 81: 2911.53, 82: 2089.51, 83: 314.24, 84: 2340.16, 85: 1746.16, 86: 1735.61, 87: 965.37, 88: 1529.99, 89: 549.60, 90: 758.60, 91: 909.30, 92: 1067.58, 93: 1024.54, 94: 3155.96, 95: 2962.40, 96: 1170.94, 97: 856.03, 98: 719.22, 99: 3078.00},
72: {0: 1531.16, 1: 462.24, 2: 1287.39, 3: 2416.40, 4: 1030.67, 5: 1922.57, 6: 934.85, 7: 1577.35, 8: 886.28, 9: 2259.18, 10: 2054.66, 11: 1147.97, 12: 1028.41, 13: 1273.98, 14: 2129.61, 15: 2756.81, 16: 2140.14, 17: 2698.60, 18: 2254.93, 19: 1154.25, 20: 2246.86, 21: 2825.86, 22: 1563.50, 23: 2728.73, 24: 483.80, 25: 2737.59, 26: 1280.44, 27: 1141.86, 28: 1074.73, 29: 838.50, 30: 1682.10, 31: 1854.62, 32: 1111.96, 33: 995.08, 34: 1440.49, 35: 2645.10, 36: 1012.79, 37: 2737.01, 38: 669.79, 39: 454.67, 40: 1611.42, 41: 1564.89, 42: 1399.66, 43: 232.74, 44: 1777.79, 45: 1201.60, 46: 1678.39, 47: 1264.80, 48: 1965.51, 49: 179.82, 50: 731.97, 51: 1056.08, 52: 2501.29, 53: 545.22, 54: 1067.16, 55: 1931.89, 56: 950.51, 57: 875.03, 58: 2356.20, 59: 1442.80, 60: 630.05, 61: 1376.89, 62: 1816.46, 63: 375.71, 64: 2552.87, 65: 2630.96, 66: 954.75, 67: 266.72, 68: 292.88, 69: 2846.36, 70: 1530.21, 71: 2228.47, 73: 2280.27, 74: 2024.95, 75: 1126.43, 76: 1262.91, 77: 1017.82, 78: 2532.85, 79: 1746.14, 80: 432.83, 81: 691.40, 82: 1051.58, 83: 2398.70, 84: 411.62, 85: 1299.52, 86: 778.92, 87: 2724.32, 88: 1495.37, 89: 2171.80, 90: 1651.45, 91: 1682.52, 92: 1166.69, 93: 2873.21, 94: 932.18, 95: 949.96, 96: 2093.59, 97: 1572.38, 98: 2944.44, 99: 1477.01},
73: {0: 941.98, 1: 2543.91, 2: 2582.75, 3: 1507.78, 4: 3156.85, 5: 802.89, 6: 1814.36, 7: 1291.33, 8: 1817.95, 9: 480.59, 10: 328.69, 11: 1800.28, 12: 3298.39, 13: 2763.84, 14: 364.92, 15: 1211.14, 16: 354.15, 17: 857.32, 18: 1138.32, 19: 1649.46, 20: 66.01, 21: 1262.40, 22: 879.72, 23: 740.77, 24: 1838.05, 25: 1896.99, 26: 1749.99, 27: 1181.68, 28: 2469.58, 29: 2680.53, 30: 1736.07, 31: 496.46, 32: 3373.68, 33: 2169.10, 34: 1656.49, 35: 475.79, 36: 3169.09, 37: 679.83, 38: 2719.47, 39: 2223.21, 40: 3026.09, 41: 1537.35, 42: 2518.81, 43: 2463.76, 44: 694.95, 45: 2446.94, 46: 611.31, 47: 2978.88, 48: 811.05, 49: 2459.66, 50: 1658.82, 51: 3044.06, 52: 1091.46, 53: 2277.78, 54: 2021.14, 55: 1498.19, 56: 1723.07, 57: 1407.28, 58: 89.00, 59: 1210.66, 60: 1673.96, 61: 1361.71, 62: 737.83, 63: 2212.60, 64: 1617.22, 65: 1582.39, 66: 1463.01, 67: 2280.46, 68: 2016.09, 69: 1421.47, 70: 2983.45, 71: 214.70, 72: 2280.27, 74: 1149.53, 75: 3399.15, 76: 1257.62, 77: 3020.12, 78: 905.06, 79: 1684.50, 80: 1880.72, 81: 2969.73, 82: 2038.37, 83: 497.04, 84: 2355.00, 85: 1669.23, 86: 1725.12, 87: 1153.01, 88: 1706.88, 89: 764.23, 90: 705.44, 91: 1090.95, 92: 1144.21, 93: 1195.61, 94: 3212.20, 95: 2961.99, 96: 1382.49, 97: 804.61, 98: 732.32, 99: 3028.15},
74: {0: 628.05, 1: 2076.21, 2: 2870.34, 3: 477.20, 4: 3049.35, 5: 374.23, 6: 2070.02, 7: 456.98, 8: 2045.11, 9: 712.20, 10: 1280.11, 11: 2174.95, 12: 3009.98, 13: 2986.96, 14: 1386.39, 15: 755.79, 16: 1383.58, 17: 853.80, 18: 234.08, 19: 2032.81, 20: 1083.66, 21: 820.95, 22: 1458.53, 23: 979.40, 24: 1765.36, 25: 890.02, 26: 2198.62, 27: 1015.33, 28: 2692.19, 29: 2720.01, 30: 697.40, 31: 1252.95, 32: 3103.65, 33: 2422.60, 34: 2196.94, 35: 1115.29, 36: 3036.08, 37: 1044.09, 38: 2647.64, 39: 1745.76, 40: 3312.19, 41: 591.49, 42: 2875.02, 43: 2116.01, 44: 1440.70, 45: 2733.83, 46: 930.82, 47: 3114.23, 48: 349.32, 49: 2187.88, 50: 1736.78, 51: 3030.19, 52: 506.35, 53: 1748.61, 54: 2332.22, 55: 370.00, 56: 1984.54, 57: 1308.77, 58: 1227.06, 59: 1759.71, 60: 1628.65, 61: 1876.57, 62: 512.64, 63: 1777.67, 64: 623.03, 65: 659.88, 66: 1080.08, 67: 2158.86, 68: 1734.13, 69: 821.78, 70: 3247.46, 71: 939.58, 72: 2024.95, 73: 1149.53, 75: 3097.62, 76: 1670.61, 77: 2996.02, 78: 629.05, 79: 620.74, 80: 1782.29, 81: 2620.77, 82: 2339.47, 83: 797.30, 84: 2289.39, 85: 2134.17, 86: 1869.64, 87: 735.85, 88: 764.39, 89: 416.45, 90: 1296.44, 91: 358.47, 92: 1024.71, 93: 895.64, 94: 2859.81, 95: 2928.74, 96: 236.54, 97: 1351.93, 98: 1351.66, 99: 3249.33},
75: {0: 2648.72, 1: 1045.02, 2: 1615.07, 3: 3443.82, 4: 564.02, 5: 3034.31, 6: 1810.52, 7: 2641.09, 8: 1776.01, 9: 3383.75, 10: 3158.02, 11: 1975.97, 12: 102.83, 13: 1446.33, 14: 3224.59, 15: 3845.84, 16: 3235.83, 17: 3814.70, 18: 3331.30, 19: 2052.31, 20: 3368.21, 21: 3913.52, 22: 2634.44, 23: 3851.53, 24: 1565.92, 25: 3715.82, 26: 2108.31, 27: 2267.42, 28: 1485.90, 29: 1045.78, 30: 2637.32, 31: 2956.32, 32: 92.20, 33: 1639.01, 34: 2286.50, 35: 3771.41, 36: 496.33, 37: 3861.99, 38: 829.67, 39: 1357.63, 40: 1642.17, 41: 2576.16, 42: 1784.63, 43: 985.43, 44: 2854.46, 45: 1629.21, 46: 2802.28, 47: 1216.15, 48: 3075.65, 49: 947.11, 50: 1777.49, 51: 821.93, 52: 3590.55, 53: 1374.40, 54: 1791.40, 55: 2944.68, 56: 1869.85, 57: 1999.56, 58: 3472.69, 59: 2445.43, 60: 1727.95, 61: 2342.41, 62: 2935.95, 63: 1320.24, 64: 3569.72, 65: 3659.81, 66: 2060.78, 67: 1135.65, 68: 1410.46, 69: 3916.00, 70: 1571.10, 71: 3354.00, 72: 1126.43, 73: 3399.15, 74: 3097.62, 76: 2289.65, 77: 800.16, 78: 3640.07, 79: 2715.00, 80: 1520.80, 81: 478.76, 82: 1768.51, 83: 3523.50, 84: 1105.21, 85: 2160.00, 86: 1763.55, 87: 3817.62, 88: 2464.21, 89: 3283.40, 90: 2746.49, 91: 2772.59, 92: 2293.01, 93: 3970.88, 94: 259.79, 95: 791.94, 96: 3130.46, 97: 2660.11, 98: 4070.66, 99: 1457.12},
76: {0: 1048.43, 1: 1663.86, 2: 1333.01, 3: 2147.80, 4: 1957.63, 5: 1361.38, 6: 560.02, 7: 1411.56, 8: 569.57, 9: 1469.71, 10: 951.16, 11: 555.64, 12: 2186.84, 13: 1507.46, 14: 986.43, 15: 2189.99, 16: 999.03, 17: 1962.94, 18: 1830.41, 19: 402.06, 20: 1252.62, 21: 2257.49, 22: 382.24, 23: 1914.37, 24: 780.86, 25: 2558.13, 26: 540.77, 27: 760.49, 28: 1212.05, 29: 1446.57, 30: 1810.37, 31: 761.84, 32: 2246.45, 33: 911.55, 34: 527.75, 35: 1715.76, 36: 1980.47, 37: 1882.99, 38: 1526.24, 39: 1430.10, 40: 1781.32, 41: 1588.69, 42: 1286.42, 43: 1489.32, 44: 595.63, 45: 1195.30, 46: 824.15, 47: 1722.50, 48: 1406.59, 49: 1422.45, 50: 531.52, 51: 1814.77, 52: 1969.17, 53: 1522.67, 54: 767.01, 55: 1823.68, 56: 471.27, 57: 643.12, 58: 1307.85, 59: 191.02, 60: 658.48, 61: 221.42, 62: 1204.76, 63: 1379.34, 64: 2293.36, 65: 2320.61, 66: 967.86, 67: 1159.70, 68: 1093.81, 69: 2356.76, 70: 1733.84, 71: 1307.38, 72: 1262.91, 73: 1257.62, 74: 1670.61, 75: 2289.65, 77: 1794.75, 78: 1888.40, 79: 1818.62, 80: 832.33, 81: 1926.45, 82: 783.13, 83: 1584.52, 84: 1188.69, 85: 469.13, 86: 526.64, 87: 2139.31, 88: 1663.20, 89: 1554.01, 90: 553.93, 91: 1347.46, 92: 724.56, 93: 2246.72, 94: 2149.70, 95: 1741.62, 96: 1863.10, 97: 454.58, 98: 1989.19, 99: 1773.05},
77: {0: 2442.33, 1: 1262.33, 2: 832.66, 3: 3412.10, 4: 242.17, 5: 2838.77, 6: 1245.83, 7: 2563.43, 8: 1227.73, 9: 3113.28, 10: 2735.06, 11: 1354.71, 12: 730.03, 13: 649.06, 14: 2779.34, 15: 3699.19, 16: 2791.77, 17: 3586.25, 18: 3218.94, 19: 1468.42, 20: 3002.80, 21: 3769.23, 22: 2172.46, 23: 3586.05, 24: 1248.88, 25: 3747.58, 26: 1471.81, 27: 2027.98, 28: 742.05, 29: 351.57, 30: 2699.37, 31: 2537.25, 32: 712.83, 33: 968.92, 34: 1644.66, 35: 3446.35, 36: 305.63, 37: 3577.09, 38: 351.76, 39: 1441.52, 40: 854.42, 41: 2574.52, 42: 1003.69, 43: 1049.21, 44: 2389.80, 45: 871.56, 46: 2473.86, 47: 422.21, 48: 2884.54, 49: 905.88, 50: 1369.76, 51: 40.00, 52: 3446.79, 53: 1510.47, 54: 1136.60, 55: 2937.57, 56: 1327.42, 57: 1726.95, 58: 3081.14, 59: 1911.84, 60: 1405.16, 61: 1782.40, 62: 2711.32, 63: 1370.83, 64: 3552.04, 65: 3624.21, 66: 1916.76, 67: 837.86, 68: 1284.52, 69: 3809.65, 70: 779.10, 71: 3022.93, 72: 1017.82, 73: 3020.12, 74: 2996.02, 75: 800.16, 76: 1794.75, 78: 3447.22, 79: 2762.09, 80: 1223.00, 81: 858.12, 82: 1113.44, 83: 3247.42, 84: 709.14, 85: 1538.63, 86: 1295.17, 87: 3661.01, 88: 2512.30, 89: 3082.58, 90: 2322.14, 91: 2642.06, 92: 2037.97, 93: 3801.02, 94: 875.13, 95: 68.15, 96: 3087.91, 97: 2225.68, 98: 3736.75, 99: 671.32},
78: {0: 1007.91, 1: 2647.11, 2: 3193.36, 3: 718.36, 4: 3530.73, 5: 611.66, 6: 2382.86, 7: 1047.85, 8: 2369.32, 9: 454.23, 10: 1173.36, 11: 2438.24, 12: 3547.62, 13: 3340.40, 14: 1248.91, 15: 315.63, 16: 1240.62, 17: 229.65, 18: 441.49, 19: 2285.95, 20: 853.00, 21: 376.97, 22: 1575.31, 23: 386.26, 24: 2198.37, 25: 1043.35, 26: 2427.70, 27: 1419.61, 28: 3039.50, 29: 3142.15, 30: 1321.00, 31: 1247.60, 32: 3637.16, 33: 2749.23, 34: 2380.39, 35: 627.78, 36: 3525.83, 37: 471.83, 38: 3109.30, 39: 2311.33, 40: 3643.89, 41: 1217.72, 42: 3167.06, 43: 2654.97, 44: 1468.53, 45: 3054.12, 46: 1064.25, 47: 3506.41, 48: 567.67, 49: 2705.59, 50: 2108.33, 51: 3478.25, 52: 223.01, 53: 2327.54, 54: 2630.39, 55: 969.03, 56: 2290.91, 57: 1720.31, 58: 948.13, 59: 1917.21, 60: 2043.41, 61: 2058.25, 62: 737.01, 63: 2332.51, 64: 784.66, 65: 720.15, 66: 1580.77, 67: 2625.51, 68: 2240.45, 69: 518.42, 70: 3587.86, 71: 710.74, 72: 2532.85, 73: 905.06, 74: 629.05, 75: 3640.07, 76: 1888.40, 77: 3447.22, 79: 1240.45, 80: 2225.86, 81: 3169.93, 82: 2642.37, 83: 408.88, 84: 2739.85, 85: 2352.76, 86: 2220.79, 87: 259.33, 88: 1392.84, 89: 364.73, 90: 1385.14, 91: 878.32, 92: 1409.54, 93: 361.19, 94: 3413.31, 95: 3382.08, 96: 767.29, 97: 1471.24, 98: 782.97, 99: 3608.22},
79: {0: 862.97, 1: 1670.00, 2: 2811.81, 3: 758.02, 4: 2768.48, 5: 886.49, 6: 2071.42, 7: 438.51, 8: 2034.62, 9: 1301.62, 10: 1733.54, 11: 2226.23, 12: 2637.90, 13: 2885.92, 14: 1846.29, 15: 1301.41, 16: 1846.85, 17: 1468.70, 18: 806.11, 19: 2106.70, 20: 1619.41, 21: 1355.98, 22: 1729.44, 23: 1599.88, 24: 1632.34, 25: 1002.88, 26: 2285.96, 27: 1060.06, 28: 2611.67, 29: 2538.39, 30: 87.21, 31: 1646.48, 32: 2736.55, 33: 2382.40, 34: 2332.21, 35: 1725.14, 36: 2742.59, 37: 1664.62, 38: 2411.32, 39: 1370.76, 40: 3226.64, 41: 231.14, 42: 2853.29, 43: 1773.90, 44: 1785.82, 45: 2684.80, 46: 1286.10, 47: 2958.37, 48: 888.05, 49: 1881.55, 50: 1695.08, 51: 2799.70, 52: 1081.12, 53: 1341.46, 54: 2332.12, 55: 280.80, 56: 2001.03, 57: 1273.08, 58: 1769.59, 59: 1958.05, 60: 1538.73, 61: 2039.77, 62: 954.08, 63: 1424.40, 64: 866.85, 65: 967.50, 66: 943.76, 67: 1940.58, 68: 1481.56, 69: 1293.35, 70: 3153.35, 71: 1490.74, 72: 1746.14, 73: 1684.50, 74: 620.74, 75: 2715.00, 76: 1818.62, 77: 2762.09, 78: 1240.45, 80: 1631.21, 81: 2238.41, 82: 2333.26, 83: 1403.62, 84: 2088.17, 85: 2237.51, 86: 1840.94, 87: 1297.66, 88: 253.29, 89: 1022.61, 90: 1614.13, 91: 606.07, 92: 1094.15, 93: 1457.09, 94: 2462.66, 95: 2693.99, 96: 496.86, 97: 1635.81, 98: 1970.91, 99: 3132.05},
80: {0: 1219.59, 1: 842.63, 2: 1192.82, 3: 2215.77, 4: 1310.25, 5: 1616.27, 6: 593.67, 7: 1365.78, 8: 543.74, 9: 1908.69, 10: 1638.25, 11: 807.37, 12: 1419.32, 13: 1254.78, 14: 1708.17, 15: 2476.31, 16: 1719.08, 17: 2371.36, 18: 2001.03, 19: 775.34, 20: 1852.20, 21: 2546.38, 22: 1132.86, 23: 2382.22, 24: 51.48, 25: 2574.95, 26: 927.37, 27: 806.31, 28: 986.22, 29: 938.04, 30: 1584.06, 31: 1436.86, 32: 1493.08, 33: 793.30, 34: 1068.32, 35: 2270.21, 36: 1311.48, 37: 2381.00, 38: 883.63, 39: 667.44, 40: 1596.15, 41: 1419.09, 42: 1257.83, 43: 657.01, 44: 1348.90, 45: 1074.29, 46: 1293.26, 47: 1341.46, 48: 1661.88, 49: 601.05, 50: 305.31, 51: 1255.19, 52: 2224.30, 53: 770.17, 54: 799.72, 55: 1763.52, 56: 578.73, 57: 508.33, 58: 1952.87, 59: 1015.20, 60: 207.17, 61: 960.08, 62: 1491.66, 63: 599.10, 64: 2359.34, 65: 2423.58, 66: 714.79, 67: 406.87, 68: 303.12, 69: 2589.97, 70: 1522.28, 71: 1848.11, 72: 432.83, 73: 1880.72, 74: 1782.29, 75: 1520.80, 76: 832.33, 77: 1223.00, 78: 2225.86, 79: 1631.21, 81: 1114.47, 82: 791.62, 83: 2045.83, 84: 514.25, 85: 929.00, 86: 385.22, 87: 2438.01, 88: 1399.00, 89: 1861.14, 90: 1229.30, 91: 1425.40, 92: 819.15, 93: 2578.43, 94: 1349.02, 95: 1157.16, 96: 1892.73, 97: 1146.61, 98: 2567.31, 99: 1502.28},
81: {0: 2186.07, 1: 569.94, 2: 1530.89, 3: 2965.16, 4: 704.49, 5: 2567.16, 6: 1508.62, 7: 2163.98, 8: 1466.81, 9: 2927.25, 10: 2745.90, 11: 1700.40, 12: 399.85, 13: 1415.41, 14: 2819.89, 15: 3370.58, 16: 2830.54, 17: 3348.78, 18: 2854.63, 19: 1748.05, 20: 2935.03, 21: 3437.96, 22: 2246.67, 23: 3391.59, 24: 1163.52, 25: 3240.19, 26: 1836.78, 27: 1816.15, 28: 1355.38, 29: 941.76, 30: 2161.56, 31: 2545.64, 32: 499.41, 33: 1424.00, 34: 2011.20, 35: 3324.45, 36: 646.30, 37: 3405.70, 38: 680.92, 39: 878.93, 40: 1688.35, 41: 2097.48, 42: 1687.28, 43: 517.72, 44: 2463.33, 45: 1503.61, 46: 2364.98, 47: 1261.11, 48: 2607.65, 49: 514.58, 50: 1397.84, 51: 894.56, 52: 3115.56, 53: 897.04, 54: 1552.19, 55: 2466.17, 56: 1551.08, 57: 1562.69, 58: 3046.45, 59: 2096.74, 60: 1317.77, 61: 2011.66, 62: 2474.04, 63: 843.13, 64: 3091.41, 65: 3181.17, 66: 1594.66, 67: 775.77, 68: 958.43, 69: 3438.25, 70: 1608.08, 71: 2911.53, 72: 691.40, 73: 2969.73, 74: 2620.77, 75: 478.76, 76: 1926.45, 77: 858.12, 78: 3169.93, 79: 2238.41, 80: 1114.47, 82: 1531.17, 83: 3067.26, 84: 801.48, 85: 1875.29, 86: 1412.57, 87: 3343.23, 88: 1987.02, 89: 2815.71, 90: 2341.31, 91: 2299.00, 92: 1844.88, 93: 3497.37, 94: 245.31, 95: 813.46, 96: 2651.72, 97: 2260.50, 98: 3624.14, 99: 1512.41},
82: {0: 1715.55, 1: 1513.23, 2: 552.95, 3: 2808.11, 4: 1319.49, 5: 2078.01, 6: 269.68, 7: 1992.99, 8: 299.92, 9: 2240.56, 10: 1725.00, 11: 250.87, 12: 1670.75, 13: 725.58, 14: 1747.40, 15: 2933.65, 16: 1760.34, 17: 2733.48, 18: 2528.07, 19: 391.49, 20: 2035.22, 21: 3002.66, 22: 1158.86, 23: 2693.36, 24: 764.23, 25: 3200.73, 26: 358.45, 27: 1331.54, 28: 436.32, 29: 767.57, 30: 2300.21, 31: 1541.91, 32: 1703.78, 33: 145.96, 34: 532.02, 35: 2498.85, 36: 1359.94, 37: 2664.59, 38: 939.67, 39: 1431.69, 40: 1003.53, 41: 2106.81, 42: 535.56, 43: 1268.25, 44: 1358.76, 45: 414.04, 46: 1585.81, 47: 957.05, 48: 2124.86, 49: 1132.64, 50: 638.38, 51: 1123.64, 52: 2700.12, 53: 1535.01, 54: 23.35, 55: 2412.39, 56: 356.04, 57: 1065.77, 58: 2084.98, 59: 846.22, 60: 805.73, 61: 701.62, 62: 1927.05, 63: 1355.34, 64: 2955.26, 65: 2999.35, 66: 1390.20, 67: 813.55, 68: 1078.23, 69: 3085.79, 70: 952.43, 71: 2089.51, 72: 1051.58, 73: 2038.37, 74: 2339.47, 75: 1768.51, 76: 783.13, 77: 1113.44, 78: 2642.37, 79: 2333.26, 80: 791.62, 81: 1531.17, 83: 2360.37, 84: 735.87, 85: 427.93, 86: 492.33, 87: 2885.93, 88: 2123.88, 89: 2293.55, 90: 1336.79, 91: 1988.79, 92: 1316.62, 93: 3003.27, 94: 1703.20, 95: 1074.59, 96: 2499.12, 97: 1237.55, 98: 2770.59, 99: 990.12},
83: {0: 888.47, 1: 2581.30, 2: 2913.17, 3: 1061.23, 4: 3354.74, 5: 560.97, 6: 2112.27, 7: 1092.48, 8: 2105.55, 9: 140.04, 10: 781.22, 11: 2140.16, 12: 3426.64, 13: 3075.61, 14: 848.07, 15: 714.58, 16: 839.03, 17: 386.80, 18: 711.00, 19: 1986.58, 20: 447.60, 21: 767.52, 22: 1239.90, 23: 338.92, 24: 2011.27, 25: 1427.27, 26: 2113.52, 27: 1256.96, 28: 2775.34, 29: 2924.95, 30: 1471.85, 31: 882.78, 32: 3510.57, 33: 2478.19, 34: 2047.36, 35: 322.02, 36: 3357.30, 37: 338.54, 38: 2922.74, 39: 2246.48, 40: 3363.22, 41: 1313.68, 42: 2870.86, 43: 2549.87, 44: 1104.09, 45: 2774.40, 46: 782.16, 47: 3263.67, 48: 539.42, 49: 2577.02, 50: 1881.77, 51: 3275.60, 52: 606.39, 53: 2280.45, 54: 2346.10, 55: 1167.23, 56: 2019.24, 57: 1539.68, 58: 539.71, 59: 1585.20, 60: 1848.85, 61: 1732.20, 62: 603.52, 63: 2253.72, 64: 1154.48, 65: 1106.68, 66: 1480.35, 67: 2452.52, 68: 2113.21, 69: 924.43, 70: 3312.63, 71: 314.24, 72: 2398.70, 73: 497.04, 74: 797.30, 75: 3523.50, 76: 1584.52, 77: 3247.42, 78: 408.88, 79: 1403.62, 80: 2045.83, 81: 3067.26, 82: 2360.37, 84: 2551.28, 85: 2035.46, 86: 1977.43, 87: 656.49, 88: 1493.86, 89: 382.15, 90: 1048.56, 91: 889.64, 92: 1234.34, 93: 710.30, 94: 3312.57, 95: 3184.81, 96: 1005.63, 97: 1142.51, 98: 593.33, 99: 3343.53},
84: {0: 1733.84, 1: 832.31, 2: 880.57, 3: 2712.55, 4: 805.35, 5: 2130.50, 6: 714.19, 7: 1862.13, 8: 675.88, 9: 2415.41, 10: 2088.98, 11: 899.55, 12: 1002.73, 13: 863.02, 14: 2146.06, 15: 2990.09, 16: 2157.86, 17: 2882.94, 18: 2510.97, 19: 956.06, 20: 2332.05, 21: 3060.13, 22: 1545.29, 23: 2888.97, 24: 542.44, 25: 3058.68, 26: 1035.77, 27: 1320.25, 28: 670.23, 29: 450.87, 30: 2031.61, 31: 1887.69, 32: 1058.42, 33: 643.61, 34: 1211.06, 35: 2763.82, 36: 814.26, 37: 2884.20, 38: 371.55, 39: 864.43, 40: 1202.13, 41: 1889.48, 42: 1002.29, 43: 575.88, 44: 1766.09, 45: 804.19, 46: 1786.53, 47: 875.56, 48: 2176.13, 49: 420.95, 50: 697.83, 51: 741.97, 52: 2737.66, 53: 956.73, 54: 755.91, 55: 2246.39, 56: 766.85, 57: 1020.53, 58: 2421.83, 59: 1340.49, 60: 702.67, 61: 1238.13, 62: 2004.97, 63: 784.55, 64: 2854.15, 65: 2923.07, 66: 1212.28, 67: 153.40, 68: 611.06, 69: 3101.19, 70: 1121.49, 71: 2340.16, 72: 411.62, 73: 2355.00, 74: 2289.39, 75: 1105.21, 76: 1188.69, 77: 709.14, 78: 2739.85, 79: 2088.17, 80: 514.25, 81: 801.48, 82: 735.87, 83: 2551.28, 85: 1076.70, 86: 662.22, 87: 2952.07, 88: 1843.87, 89: 2375.13, 90: 1673.59, 91: 1934.30, 92: 1331.79, 93: 3092.68, 94: 993.32, 95: 643.01, 96: 2388.43, 97: 1581.89, 98: 3058.24, 99: 1074.01},
85: {0: 1508.30, 1: 1752.07, 2: 926.74, 3: 2611.06, 4: 1738.27, 5: 1830.30, 6: 369.43, 7: 1849.80, 8: 415.41, 9: 1926.37, 10: 1346.00, 11: 185.97, 12: 2059.72, 13: 1125.88, 14: 1354.89, 15: 2656.63, 16: 1367.93, 17: 2418.08, 18: 2298.44, 19: 155.43, 20: 1674.06, 21: 2723.72, 22: 798.91, 23: 2358.90, 24: 884.30, 25: 3018.81, 26: 81.15, 27: 1181.79, 28: 854.16, 29: 1189.93, 30: 2219.83, 31: 1177.43, 32: 2101.17, 33: 573.89, 34: 141.06, 35: 2139.99, 36: 1775.14, 37: 2320.75, 38: 1340.15, 39: 1594.95, 40: 1360.78, 41: 2006.38, 42: 850.00, 43: 1531.00, 44: 976.00, 45: 797.52, 46: 1289.60, 47: 1375.82, 48: 1875.61, 49: 1421.04, 50: 657.14, 51: 1550.06, 52: 2437.80, 53: 1696.79, 54: 405.42, 55: 2267.73, 56: 352.37, 57: 985.29, 58: 1707.07, 59: 458.63, 60: 841.61, 61: 307.65, 62: 1673.80, 63: 1528.03, 64: 2757.20, 65: 2787.09, 66: 1329.98, 67: 1110.26, 68: 1231.23, 69: 2825.32, 70: 1323.35, 71: 1746.16, 72: 1299.52, 73: 1669.23, 74: 2134.17, 75: 2160.00, 76: 469.13, 77: 1538.63, 78: 2352.76, 79: 2237.51, 80: 929.00, 81: 1875.29, 82: 427.93, 83: 2035.46, 84: 1076.70, 86: 544.11, 87: 2605.35, 88: 2059.28, 89: 2022.14, 90: 988.34, 91: 1803.18, 92: 1153.32, 93: 2709.48, 94: 2069.11, 95: 1497.33, 96: 2320.32, 97: 893.01, 98: 2399.08, 99: 1380.07},
86: {0: 1254.93, 1: 1218.50, 2: 1001.00, 3: 2332.15, 4: 1442.08, 5: 1633.84, 6: 237.99, 7: 1506.36, 8: 195.49, 9: 1848.41, 10: 1442.34, 11: 435.78, 12: 1660.76, 13: 1124.46, 14: 1492.38, 15: 2499.23, 16: 1504.49, 17: 2334.45, 18: 2067.94, 19: 390.13, 20: 1708.91, 21: 2569.07, 22: 887.39, 23: 2315.88, 24: 340.21, 25: 2718.66, 26: 546.80, 27: 854.78, 28: 825.68, 29: 956.66, 30: 1808.18, 31: 1243.22, 32: 1719.82, 33: 554.59, 34: 683.12, 35: 2157.45, 36: 1461.12, 37: 2299.23, 38: 1006.81, 39: 1050.92, 40: 1443.26, 41: 1614.68, 42: 1018.46, 43: 1011.48, 44: 1107.77, 45: 865.43, 46: 1195.81, 47: 1288.40, 48: 1680.91, 49: 921.65, 50: 146.37, 51: 1318.94, 52: 2257.57, 53: 1152.95, 54: 491.71, 55: 1924.32, 56: 197.52, 57: 576.32, 58: 1786.06, 59: 685.72, 60: 324.14, 61: 601.82, 62: 1489.50, 63: 984.00, 64: 2479.02, 65: 2528.25, 66: 897.98, 67: 638.80, 68: 687.12, 69: 2638.95, 70: 1380.36, 71: 1735.61, 72: 778.92, 73: 1725.12, 74: 1869.64, 75: 1763.55, 76: 526.64, 77: 1295.17, 78: 2220.79, 79: 1840.94, 80: 385.22, 81: 1412.57, 82: 492.33, 83: 1977.43, 84: 662.22, 85: 544.11, 87: 2454.59, 88: 1632.71, 89: 1862.38, 90: 1027.98, 91: 1514.46, 92: 845.65, 93: 2581.38, 94: 1629.71, 95: 1237.79, 96: 2018.75, 97: 932.62, 98: 2444.81, 99: 1390.86},
87: {0: 1219.45, 1: 2806.43, 2: 3435.26, 3: 644.05, 4: 3734.72, 5: 825.11, 6: 2624.00, 7: 1187.77, 8: 2608.58, 9: 713.08, 10: 1430.24, 11: 2686.40, 12: 3727.58, 13: 3577.38, 14: 1502.97, 15: 58.14, 16: 1494.30, 17: 346.17, 18: 506.74, 19: 2534.78, 20: 1103.96, 21: 118.60, 22: 1832.30, 23: 526.27, 24: 2413.33, 25: 882.16, 26: 2679.52, 27: 1634.96, 28: 3276.92, 29: 3363.45, 30: 1383.13, 31: 1506.93, 32: 3819.33, 33: 2989.42, 34: 2635.85, 35: 821.52, 36: 3726.75, 37: 622.27, 38: 3319.09, 39: 2473.47, 40: 3885.23, 41: 1319.89, 42: 3413.44, 43: 2832.73, 44: 1727.82, 45: 3296.14, 46: 1315.78, 47: 3735.79, 48: 778.54, 49: 2893.43, 50: 2337.47, 51: 3693.04, 52: 229.75, 53: 2480.85, 54: 2874.60, 55: 1017.01, 56: 2532.67, 57: 1937.45, 58: 1189.55, 59: 2173.13, 60: 2262.26, 61: 2312.98, 62: 965.11, 63: 2501.03, 64: 662.15, 65: 570.64, 66: 1769.60, 67: 2832.30, 68: 2431.46, 69: 272.01, 70: 3827.63, 71: 965.37, 72: 2724.32, 73: 1153.01, 74: 735.85, 75: 3817.62, 76: 2139.31, 77: 3661.01, 78: 259.33, 79: 1297.66, 80: 2438.01, 81: 3343.23, 82: 2885.93, 83: 656.49, 84: 2952.07, 85: 2605.35, 86: 2454.59, 88: 1484.52, 89: 593.06, 90: 1642.66, 91: 1045.31, 92: 1629.26, 93: 160.88, 94: 3584.44, 95: 3595.08, 96: 801.51, 97: 1727.62, 98: 904.76, 99: 3844.69},
88: {0: 806.49, 1: 1419.51, 2: 2587.07, 3: 992.36, 4: 2515.89, 5: 942.65, 6: 1867.18, 7: 416.33, 8: 1827.89, 9: 1376.94, 10: 1707.30, 11: 2033.10, 12: 2386.26, 13: 2652.87, 14: 1820.12, 15: 1495.20, 16: 1822.46, 17: 1615.11, 18: 979.61, 19: 1921.82, 20: 1644.19, 21: 1554.38, 22: 1621.67, 23: 1728.53, 24: 1403.70, 25: 1255.83, 26: 2102.26, 27: 905.28, 28: 2383.80, 29: 2294.63, 30: 187.77, 31: 1594.01, 32: 2484.68, 33: 2164.62, 34: 2162.40, 35: 1814.51, 36: 2489.62, 37: 1783.48, 38: 2162.05, 39: 1117.66, 40: 2994.92, 41: 180.42, 42: 2636.05, 43: 1520.61, 44: 1706.83, 45: 2462.78, 46: 1234.53, 47: 2716.59, 48: 956.62, 49: 1628.88, 50: 1486.34, 51: 2550.13, 52: 1259.48, 53: 1090.00, 54: 2124.24, 55: 494.50, 56: 1801.84, 57: 1078.72, 58: 1794.84, 59: 1816.50, 60: 1321.44, 61: 1884.22, 62: 970.22, 63: 1171.11, 64: 1109.76, 65: 1205.90, 66: 737.53, 67: 1694.94, 68: 1234.89, 69: 1509.87, 70: 2920.42, 71: 1529.99, 72: 1495.37, 73: 1706.88, 74: 764.39, 75: 2464.21, 76: 1663.20, 77: 2512.30, 78: 1392.84, 79: 253.29, 80: 1399.00, 81: 1987.02, 82: 2123.88, 83: 1493.86, 84: 1843.87, 85: 2059.28, 86: 1632.71, 87: 1484.52, 89: 1125.10, 90: 1529.61, 91: 621.09, 92: 945.40, 93: 1645.37, 94: 2212.87, 95: 2444.27, 96: 702.12, 97: 1536.58, 98: 2079.50, 99: 2895.38},
89: {0: 643.77, 1: 2301.80, 2: 2842.38, 3: 747.47, 4: 3166.42, 5: 249.33, 6: 2031.08, 7: 738.87, 8: 2015.52, 9: 300.03, 10: 954.11, 11: 2096.93, 12: 3189.99, 13: 2984.55, 14: 1049.49, 15: 640.10, 16: 1044.18, 17: 535.09, 18: 375.59, 19: 1946.11, 20: 700.16, 21: 709.19, 22: 1266.82, 23: 612.41, 24: 1833.70, 25: 1148.95, 26: 2094.78, 27: 1054.88, 28: 2684.01, 29: 2778.52, 30: 1092.47, 31: 979.46, 32: 3278.59, 33: 2396.38, 34: 2060.02, 35: 702.76, 36: 3161.96, 37: 659.76, 38: 2744.59, 39: 1965.33, 40: 3292.25, 41: 944.77, 42: 2822.24, 43: 2299.34, 44: 1191.92, 45: 2703.29, 46: 735.83, 47: 3145.68, 48: 208.12, 49: 2345.63, 50: 1747.16, 51: 3113.67, 52: 417.08, 53: 1987.42, 54: 2282.46, 55: 785.86, 56: 1939.87, 57: 1355.71, 58: 834.23, 59: 1600.49, 60: 1679.10, 61: 1735.66, 62: 373.98, 63: 1982.53, 64: 865.92, 65: 847.85, 66: 1222.65, 67: 2261.04, 68: 1879.90, 69: 803.70, 70: 3234.57, 71: 549.60, 72: 2171.80, 73: 764.23, 74: 416.45, 75: 3283.40, 76: 1554.01, 77: 3082.58, 78: 364.73, 79: 1022.61, 80: 1861.14, 81: 2815.71, 82: 2293.55, 83: 382.15, 84: 2375.13, 85: 2022.14, 86: 1862.38, 87: 593.06, 88: 1125.10, 90: 1082.39, 91: 547.53, 92: 1045.12, 93: 721.00, 94: 3059.86, 95: 3017.39, 96: 633.91, 97: 1159.75, 98: 955.07, 99: 3251.98},
90: {0: 752.97, 1: 1978.32, 2: 1885.11, 3: 1760.32, 4: 2468.07, 5: 938.87, 6: 1108.95, 7: 1175.92, 8: 1112.76, 9: 945.01, 10: 415.50, 11: 1104.00, 12: 2644.32, 13: 2061.38, 14: 478.87, 15: 1696.62, 16: 489.80, 17: 1433.20, 18: 1408.79, 19: 951.33, 20: 698.72, 21: 1761.14, 22: 191.64, 23: 1370.61, 24: 1182.21, 25: 2177.37, 26: 1067.28, 27: 709.66, 28: 1765.64, 29: 1979.45, 30: 1632.26, 31: 215.24, 32: 2713.60, 33: 1465.17, 34: 999.91, 35: 1162.16, 36: 2484.21, 37: 1334.16, 38: 2031.31, 39: 1686.15, 40: 2331.82, 41: 1403.87, 42: 1830.77, 43: 1856.16, 44: 179.04, 45: 1748.01, 46: 365.94, 47: 2273.52, 48: 977.95, 49: 1826.73, 50: 976.46, 51: 2344.87, 52: 1497.42, 53: 1759.97, 54: 1320.32, 55: 1537.62, 56: 1017.64, 57: 819.56, 58: 760.43, 59: 536.86, 60: 1023.89, 61: 683.74, 62: 786.70, 63: 1657.46, 64: 1898.89, 65: 1905.66, 66: 1007.25, 67: 1613.64, 68: 1416.12, 69: 1879.83, 70: 2286.11, 71: 758.60, 72: 1651.45, 73: 705.44, 74: 1296.44, 75: 2746.49, 76: 553.93, 77: 2322.14, 78: 1385.14, 79: 1614.13, 80: 1229.30, 81: 2341.31, 82: 1336.79, 83: 1048.56, 84: 1673.59, 85: 988.34, 86: 1027.98, 87: 1642.66, 88: 1529.61, 89: 1082.39, 91: 1041.57, 92: 662.12, 93: 1735.08, 94: 2577.96, 95: 2265.51, 96: 1518.51, 97: 99.41, 98: 1435.83, 99: 2326.86},
91: {0: 302.55, 1: 1769.47, 2: 2515.46, 3: 819.32, 4: 2701.30, 5: 329.07, 6: 1719.11, 7: 206.31, 8: 1692.61, 9: 764.70, 10: 1127.82, 11: 1832.69, 12: 2682.30, 13: 2629.44, 14: 1240.45, 15: 1075.38, 16: 1240.89, 17: 1076.75, 18: 576.94, 19: 1694.17, 20: 1027.19, 21: 1144.01, 22: 1180.86, 23: 1159.04, 24: 1407.61, 25: 1217.87, 26: 1864.20, 27: 659.70, 28: 2335.40, 29: 2362.63, 30: 648.68, 31: 1049.12, 32: 2774.04, 33: 2068.35, 34: 1875.14, 35: 1205.60, 36: 2690.17, 37: 1200.65, 38: 2294.88, 39: 1434.20, 40: 2955.87, 41: 447.18, 42: 2524.08, 43: 1787.50, 44: 1204.88, 45: 2379.54, 46: 693.31, 47: 2755.81, 48: 352.14, 49: 1849.61, 50: 1380.06, 51: 2675.81, 52: 819.68, 53: 1449.23, 54: 1982.33, 55: 496.59, 56: 1635.24, 57: 950.64, 58: 1178.05, 59: 1454.75, 60: 1270.18, 61: 1560.58, 62: 353.41, 63: 1458.09, 64: 966.48, 65: 1013.97, 66: 730.25, 67: 1806.05, 68: 1390.12, 69: 1168.44, 70: 2890.55, 71: 909.30, 72: 1682.52, 73: 1090.95, 74: 358.47, 75: 2772.59, 76: 1347.46, 77: 2642.06, 78: 878.32, 79: 606.07, 80: 1425.40, 81: 2299.00, 82: 1988.79, 83: 889.64, 84: 1934.30, 85: 1803.18, 86: 1514.46, 87: 1045.31, 88: 621.09, 89: 547.53, 90: 1041.57, 92: 672.17, 93: 1198.41, 94: 2541.02, 95: 2575.02, 96: 517.22, 97: 1079.10, 98: 1482.21, 99: 2891.38},
92: {0: 412.98, 1: 1399.75, 2: 1845.80, 3: 1491.48, 4: 2128.81, 5: 804.20, 6: 1046.94, 7: 696.60, 8: 1020.77, 9: 1095.56, 10: 982.15, 11: 1166.28, 12: 2195.08, 13: 1967.08, 14: 1080.60, 15: 1670.48, 16: 1088.02, 17: 1552.28, 18: 1223.06, 19: 1033.16, 20: 1102.43, 21: 1740.65, 22: 702.28, 23: 1567.83, 24: 789.52, 25: 1886.56, 26: 1208.20, 27: 47.68, 28: 1670.19, 29: 1734.41, 30: 1086.58, 31: 805.44, 32: 2277.58, 33: 1397.91, 34: 1240.72, 35: 1479.83, 36: 2128.07, 37: 1571.99, 38: 1702.41, 39: 1080.53, 40: 2288.88, 41: 864.14, 42: 1851.93, 43: 1331.08, 44: 837.61, 45: 1709.14, 46: 533.03, 47: 2109.75, 48: 850.72, 49: 1345.90, 50: 716.45, 51: 2068.79, 52: 1422.95, 53: 1140.04, 54: 1310.24, 55: 1115.63, 56: 963.42, 57: 311.26, 58: 1226.86, 59: 871.27, 60: 634.00, 61: 945.84, 62: 673.37, 63: 1068.39, 64: 1638.64, 65: 1684.14, 66: 347.25, 67: 1223.40, 68: 886.51, 69: 1799.46, 70: 2225.37, 71: 1067.58, 72: 1166.69, 73: 1144.21, 74: 1024.71, 75: 2293.01, 76: 724.56, 77: 2037.97, 78: 1409.54, 79: 1094.15, 80: 819.15, 81: 1844.88, 82: 1316.62, 83: 1234.34, 84: 1331.79, 85: 1153.32, 86: 845.65, 87: 1629.26, 88: 945.40, 89: 1045.12, 90: 662.12, 91: 672.17, 93: 1765.14, 94: 2089.68, 95: 1973.09, 96: 1184.40, 97: 636.13, 98: 1779.47, 99: 2231.58},
93: {0: 1358.85, 1: 2963.13, 2: 3554.43, 3: 784.62, 4: 3879.30, 5: 962.25, 6: 2744.02, 7: 1345.79, 8: 2730.51, 9: 791.77, 10: 1491.46, 11: 2797.85, 12: 3880.20, 13: 3701.49, 14: 1555.12, 15: 160.70, 16: 1545.52, 17: 341.92, 18: 667.47, 19: 2645.30, 20: 1152.91, 21: 133.65, 22: 1926.24, 23: 500.99, 24: 2552.33, 25: 975.55, 26: 2785.06, 27: 1773.18, 28: 3400.61, 29: 3499.21, 30: 1542.80, 31: 1585.78, 32: 3971.39, 33: 3110.41, 34: 2733.48, 35: 813.00, 36: 3872.59, 37: 594.01, 38: 3460.98, 39: 2629.52, 40: 4005.00, 41: 1480.69, 42: 3527.22, 43: 2985.61, 44: 1807.61, 45: 3415.18, 46: 1422.96, 47: 3866.20, 48: 916.56, 49: 3043.55, 50: 2467.80, 51: 3832.53, 52: 389.31, 53: 2638.35, 54: 2991.18, 55: 1176.32, 56: 2652.04, 57: 2075.01, 58: 1221.19, 59: 2269.90, 60: 2399.08, 61: 2412.71, 62: 1094.93, 63: 2655.86, 64: 783.78, 65: 682.11, 66: 1918.60, 67: 2975.40, 68: 2580.34, 69: 313.01, 70: 3949.04, 71: 1024.54, 72: 2873.21, 73: 1195.61, 74: 895.64, 75: 3970.88, 76: 2246.72, 77: 3801.02, 78: 361.19, 79: 1457.09, 80: 2578.43, 81: 3497.37, 82: 3003.27, 83: 710.30, 84: 3092.68, 85: 2709.48, 86: 2581.38, 87: 160.88, 88: 1645.37, 89: 721.00, 90: 1735.08, 91: 1198.41, 92: 1765.14, 94: 3739.13, 95: 3735.48, 96: 960.49, 97: 1823.69, 98: 841.61, 99: 3969.29},
94: {0: 2431.13, 1: 793.77, 2: 1633.18, 3: 3196.27, 4: 670.55, 5: 2811.48, 6: 1707.42, 7: 2402.84, 8: 1668.26, 9: 3172.56, 10: 2984.60, 11: 1889.65, 12: 215.64, 13: 1490.62, 14: 3056.80, 15: 3611.10, 16: 3067.61, 17: 3593.24, 18: 3093.82, 19: 1949.05, 20: 3178.14, 21: 3678.20, 22: 2478.33, 23: 3636.77, 24: 1397.06, 25: 3462.05, 26: 2025.08, 27: 2061.21, 28: 1477.35, 29: 1042.93, 30: 2384.07, 31: 2783.86, 32: 311.01, 33: 1585.32, 34: 2201.81, 35: 3569.38, 36: 602.70, 37: 3651.01, 38: 794.48, 39: 1114.83, 40: 1728.94, 41: 2329.09, 42: 1797.39, 43: 762.92, 44: 2696.24, 45: 1625.08, 46: 2608.57, 47: 1296.30, 48: 2851.76, 49: 753.45, 50: 1624.98, 51: 905.65, 52: 3356.37, 53: 1124.77, 54: 1725.19, 55: 2696.40, 56: 1756.77, 57: 1805.74, 58: 3288.36, 59: 2315.42, 60: 1554.11, 61: 2223.69, 62: 2719.14, 63: 1083.41, 64: 3320.43, 65: 3412.04, 66: 1839.42, 67: 991.06, 68: 1203.17, 69: 3675.57, 70: 1652.37, 71: 3155.96, 72: 932.18, 73: 3212.20, 74: 2859.81, 75: 259.79, 76: 2149.70, 77: 875.13, 78: 3413.31, 79: 2462.66, 80: 1349.02, 81: 245.31, 82: 1703.20, 83: 3312.57, 84: 993.32, 85: 2069.11, 86: 1629.71, 87: 3584.44, 88: 2212.87, 89: 3059.86, 90: 2577.96, 91: 2541.02, 92: 2089.68, 93: 3739.13, 95: 846.98, 96: 2885.19, 97: 2495.57, 98: 3869.06, 99: 1546.39},
95: {0: 2376.68, 1: 1200.94, 2: 826.46, 3: 3344.20, 4: 253.14, 5: 2773.24, 6: 1196.34, 7: 2495.67, 8: 1176.48, 9: 3050.34, 10: 2679.09, 11: 1312.49, 12: 715.44, 13: 655.08, 14: 2724.89, 15: 3633.06, 16: 2737.26, 17: 3522.24, 18: 3151.94, 19: 1422.26, 20: 2943.93, 21: 3703.08, 22: 2117.98, 23: 3523.32, 24: 1183.73, 25: 3679.44, 26: 1432.25, 27: 1962.63, 28: 719.61, 29: 307.42, 30: 2631.36, 31: 2480.71, 32: 707.64, 33: 931.43, 34: 1606.57, 35: 3385.97, 36: 307.92, 37: 3515.10, 38: 283.64, 39: 1375.18, 40: 883.70, 41: 2506.37, 42: 997.09, 43: 984.59, 44: 2336.01, 45: 854.63, 46: 2412.46, 47: 451.69, 48: 2818.95, 49: 839.77, 50: 1309.07, 51: 106.23, 52: 3380.48, 53: 1445.05, 54: 1097.87, 55: 2869.46, 56: 1276.24, 57: 1661.95, 58: 3023.78, 59: 1862.38, 60: 1340.84, 61: 1735.03, 62: 2646.47, 63: 1304.08, 64: 3484.07, 65: 3556.39, 66: 1849.31, 67: 770.28, 68: 1216.38, 69: 3742.78, 70: 806.04, 71: 2962.40, 72: 949.96, 73: 2961.99, 74: 2928.74, 75: 791.94, 76: 1741.62, 77: 68.15, 78: 3382.08, 79: 2693.99, 80: 1157.16, 81: 813.46, 82: 1074.59, 83: 3184.81, 84: 643.01, 85: 1497.33, 86: 1237.79, 87: 3595.08, 88: 2444.27, 89: 3017.39, 90: 2265.51, 91: 2575.02, 92: 1973.09, 93: 3735.48, 94: 846.98, 96: 3020.02, 97: 2169.48, 98: 3677.03, 99: 703.29},
96: {0: 814.88, 1: 2093.04, 2: 3018.38, 3: 324.23, 4: 3124.04, 5: 609.58, 6: 2229.60, 7: 527.06, 8: 2201.18, 9: 933.77, 10: 1516.32, 11: 2348.60, 12: 3047.17, 13: 3122.90, 14: 1622.85, 15: 804.56, 16: 1620.09, 17: 996.83, 18: 325.86, 19: 2211.03, 20: 1316.80, 21: 859.62, 22: 1674.13, 23: 1144.02, 24: 1881.41, 25: 702.16, 26: 2381.41, 27: 1167.59, 28: 2832.83, 29: 2828.69, 30: 583.06, 31: 1484.86, 32: 3143.37, 33: 2573.32, 34: 2390.84, 35: 1315.77, 36: 3105.84, 37: 1218.66, 38: 2736.83, 39: 1772.88, 40: 3454.16, 41: 558.35, 42: 3033.49, 43: 2160.70, 44: 1667.89, 45: 2883.91, 46: 1154.67, 47: 3233.43, 48: 585.84, 49: 2247.50, 50: 1880.46, 51: 3123.47, 52: 589.48, 53: 1761.85, 54: 2493.48, 55: 216.11, 56: 2147.43, 57: 1446.36, 58: 1458.46, 59: 1963.97, 60: 1756.20, 61: 2074.35, 62: 741.97, 63: 1814.23, 64: 466.62, 65: 537.43, 66: 1178.52, 67: 2250.83, 68: 1808.88, 69: 807.82, 70: 3386.62, 71: 1170.94, 72: 2093.59, 73: 1382.49, 74: 236.54, 75: 3130.46, 76: 1863.10, 77: 3087.91, 78: 767.29, 79: 496.86, 80: 1892.73, 81: 2651.72, 82: 2499.12, 83: 1005.63, 84: 2388.43, 85: 2320.32, 86: 2018.75, 87: 801.51, 88: 702.12, 89: 633.91, 90: 1518.51, 91: 517.22, 92: 1184.40, 93: 960.49, 94: 2885.19, 95: 3020.02, 97: 1568.82, 98: 1531.28, 99: 3381.39},
97: {0: 782.65, 1: 1911.41, 2: 1786.24, 3: 1821.03, 4: 2373.91, 5: 1002.96, 6: 1009.76, 7: 1199.81, 8: 1013.98, 9: 1035.71, 10: 509.73, 11: 1005.56, 12: 2557.74, 13: 1962.03, 14: 565.10, 15: 1780.90, 16: 576.64, 17: 1525.91, 18: 1475.71, 19: 852.68, 20: 798.11, 21: 1846.20, 22: 107.94, 23: 1466.90, 24: 1098.60, 25: 2237.87, 26: 971.39, 27: 683.70, 28: 1666.23, 29: 1882.18, 30: 1648.81, 31: 312.08, 32: 2625.68, 33: 1365.77, 34: 909.80, 35: 1261.31, 36: 2390.97, 37: 1431.82, 38: 1937.54, 39: 1626.64, 40: 2233.29, 41: 1419.80, 42: 1733.23, 43: 1781.00, 44: 214.37, 45: 1649.00, 46: 429.69, 47: 2174.28, 48: 1043.92, 49: 1746.15, 50: 886.14, 51: 2248.08, 52: 1576.26, 53: 1703.84, 54: 1221.16, 55: 1575.54, 56: 918.58, 57: 758.98, 58: 858.59, 59: 446.23, 60: 942.89, 61: 590.41, 62: 847.93, 63: 1594.40, 64: 1961.57, 65: 1972.79, 66: 974.31, 67: 1525.71, 68: 1344.86, 69: 1960.62, 70: 2187.22, 71: 856.03, 72: 1572.38, 73: 804.61, 74: 1351.93, 75: 2660.11, 76: 454.58, 77: 2225.68, 78: 1471.24, 79: 1635.81, 80: 1146.61, 81: 2260.50, 82: 1237.55, 83: 1142.51, 84: 1581.89, 85: 893.01, 86: 932.62, 87: 1727.62, 88: 1536.58, 89: 1159.75, 90: 99.41, 91: 1079.10, 92: 636.13, 93: 1823.69, 94: 2495.57, 95: 2169.48, 96: 1568.82, 98: 1535.22, 99: 2227.58},
98: {0: 1468.25, 1: 3155.99, 2: 3314.92, 3: 1498.55, 4: 3863.27, 5: 1154.05, 6: 2544.23, 7: 1683.74, 8: 2546.21, 9: 725.83, 10: 1053.23, 11: 2532.48, 12: 3971.85, 13: 3495.99, 14: 1057.65, 15: 950.96, 16: 1044.89, 17: 572.55, 18: 1209.69, 19: 2381.77, 20: 738.24, 21: 963.97, 22: 1612.04, 23: 397.34, 24: 2528.22, 25: 1786.11, 26: 2480.05, 27: 1808.18, 28: 3201.24, 29: 3401.48, 30: 2044.10, 31: 1228.74, 32: 4052.05, 33: 2900.74, 34: 2380.32, 35: 299.71, 36: 3871.60, 37: 313.38, 38: 3426.82, 39: 2823.44, 40: 3757.60, 41: 1899.09, 42: 3249.06, 43: 3109.08, 44: 1423.14, 45: 3179.23, 46: 1274.12, 47: 3708.78, 48: 1130.76, 49: 3124.08, 50: 2368.50, 51: 3762.06, 52: 1000.95, 53: 2862.28, 54: 2753.43, 55: 1716.91, 56: 2452.44, 57: 2072.06, 58: 692.94, 59: 1941.00, 60: 2363.59, 61: 2092.00, 62: 1189.73, 63: 2825.98, 64: 1550.38, 65: 1469.63, 66: 2053.31, 67: 2972.74, 68: 2665.92, 69: 1150.02, 70: 3715.53, 71: 719.22, 72: 2944.44, 73: 732.32, 74: 1351.66, 75: 4070.66, 76: 1989.19, 77: 3736.75, 78: 782.97, 79: 1970.91, 80: 2567.31, 81: 3624.14, 82: 2770.59, 83: 593.33, 84: 3058.24, 85: 2399.08, 86: 2444.81, 87: 904.76, 88: 2079.50, 89: 955.07, 90: 1435.83, 91: 1482.21, 92: 1779.47, 93: 841.61, 94: 3869.06, 95: 3677.03, 96: 1531.28, 97: 1535.22, 99: 3760.45},
99: {0: 2643.49, 1: 1830.81, 2: 454.28, 3: 3701.25, 4: 894.15, 5: 3024.70, 6: 1231.35, 7: 2857.27, 8: 1240.42, 9: 3220.44, 10: 2712.87, 11: 1229.99, 12: 1395.55, 13: 268.17, 14: 2730.56, 15: 3889.77, 16: 2743.57, 17: 3711.65, 18: 3454.29, 19: 1379.06, 20: 3025.33, 21: 3959.55, 22: 2148.45, 23: 3678.59, 24: 1505.96, 25: 4071.99, 26: 1299.72, 27: 2235.90, 28: 569.17, 29: 643.69, 30: 3081.99, 31: 2531.71, 32: 1366.50, 33: 865.52, 34: 1437.03, 35: 3488.80, 36: 962.93, 37: 3652.28, 38: 874.65, 39: 1931.36, 40: 185.07, 41: 2921.37, 42: 571.83, 43: 1587.15, 44: 2344.83, 45: 583.67, 46: 2564.05, 47: 251.75, 48: 3071.77, 49: 1426.97, 50: 1515.14, 51: 642.22, 52: 3648.39, 53: 2018.09, 54: 1007.04, 55: 3262.84, 56: 1324.36, 57: 1940.76, 58: 3073.52, 59: 1827.90, 60: 1625.25, 61: 1679.02, 62: 2879.80, 63: 1852.72, 64: 3846.81, 65: 3903.56, 66: 2211.73, 67: 1227.37, 68: 1678.04, 69: 4029.17, 70: 121.43, 71: 3078.00, 72: 1477.01, 73: 3028.15, 74: 3249.33, 75: 1457.12, 76: 1773.05, 77: 671.32, 78: 3608.22, 79: 3132.05, 80: 1502.28, 81: 1512.41, 82: 990.12, 83: 3343.53, 84: 1074.01, 85: 1380.07, 86: 1390.86, 87: 3844.69, 88: 2895.38, 89: 3251.98, 90: 2326.86, 91: 2891.38, 92: 2231.58, 93: 3969.29, 94: 1546.39, 95: 703.29, 96: 3381.39, 97: 2227.58, 98: 3760.45}
}
Minimum spanning tree: (14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)
Odd vertices in minimum spanning tree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98]
Minimum weight matching: (14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (9, 83, 140.04), (69, 21, 186.13), (60, 68, 435.39), (75, 32, 92.20), (51, 77, 40.00), (66, 27, 300.85), (90, 44, 179.04), (46, 31, 361.33), (58, 73, 89.00), (59, 76, 191.02), (2, 42, 171.03), (96, 64, 466.62), (10, 16, 115.26), (65, 25, 323.20), (47, 70, 356.92), (72, 1, 462.24), (93, 52, 389.31), (38, 29, 261.24), (98, 92, 1779.47), (53, 81, 897.04), (40, 11, 1227.82), (34, 85, 141.06)
Eulerian circuit: [14, 10, 73, 58, 73, 20, 71, 9, 83, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 64, 25, 65, 64, 3, 96, 74, 18, 52, 93, 21, 69, 21, 15, 87, 52, 78, 17, 23, 37, 35, 98, 92, 27, 66, 27, 57, 60, 68, 63, 39, 53, 81, 94, 12, 32, 75, 32, 36, 4, 77, 51, 77, 95, 38, 29, 38, 84, 67, 72, 1, 43, 49, 72, 68, 80, 24, 60, 50, 86, 8, 6, 56, 19, 11, 40, 70, 47, 99, 70, 13, 2, 42, 2, 45, 28, 33, 82, 54, 11, 26, 85, 34, 85, 61, 59, 76, 59, 22, 97, 90, 44, 90, 31, 46, 31, 10, 16, 14]
Result path: [14, 10, 73, 58, 20, 71, 9, 83, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 64, 25, 65, 3, 74, 18, 52, 93, 21, 69, 15, 87, 78, 17, 23, 37, 35, 98, 92, 27, 66, 57, 60, 68, 63, 39, 53, 81, 94, 12, 32, 75, 36, 4, 77, 51, 95, 38, 29, 84, 67, 72, 1, 43, 49, 80, 24, 50, 86, 8, 6, 56, 19, 11, 40, 70, 47, 99, 13, 2, 42, 45, 28, 33, 82, 54, 26, 85, 34, 61, 59, 76, 22, 97, 90, 44, 31, 46, 16, 14]
Length of the result path: 25440.87
This is a translation of Python code
#include <iostream>
#include <vector>
#include <cmath>
#include <numeric>
#include <algorithm>
#include <map>
#include <list>
#include <stack>
#include <limits>
#include <random>
#include <utility> // For std::pair
#include <iomanip> // For std::fixed and std::setprecision
// --- Helper Structs ---
struct Point {
double x, y;
int id; // Original index
};
struct Edge {
int u, v;
double weight;
// For sorting edges by weight
bool operator<(const Edge& other) const {
return weight < other.weight;
}
};
// --- Helper Function to print vectors/lists ---
template <typename T>
void print_container(const T& container, const std::string& name) {
std::cout << name << ": [";
bool first = true;
for (const auto& item : container) {
if (!first) {
std::cout << ", ";
}
std::cout << item;
first = false;
}
std::cout << "]" << std::endl;
}
void print_edges(const std::vector<Edge>& edges, const std::string& name) {
std::cout << name << ": [";
bool first = true;
for (const auto& edge : edges) {
if (!first) {
std::cout << ", ";
}
std::cout << "(" << edge.u << ", " << edge.v << ", " << std::fixed << std::setprecision(2) << edge.weight << ")";
first = false;
}
std::cout << "]" << std::endl;
}
void print_graph(const std::vector<std::vector<double>>& graph, const std::string& name) {
std::cout << name << ": {" << std::endl;
int n = graph.size();
for (int i = 0; i < n; ++i) {
std::cout << " " << i << ": {";
bool first = true;
for (int j = 0; j < n; ++j) {
if (i != j) {
if (!first) {
std::cout << ", ";
}
std::cout << j << ": " << std::fixed << std::setprecision(2) << graph[i][j];
first = false;
}
}
std::cout << "}" << (i == n-1 ? "" : ",") << std::endl;
}
std::cout << "}" << std::endl;
}
// --- Euclidean Distance ---
double get_length(const Point& p1, const Point& p2) {
double dx = p1.x - p2.x;
double dy = p1.y - p2.y;
return std::sqrt(dx * dx + dy * dy);
}
// --- Build Complete Graph (Adjacency Matrix) ---
std::vector<std::vector<double>> build_graph(const std::vector<Point>& data) {
int n = data.size();
std::vector<std::vector<double>> graph(n, std::vector<double>(n, 0.0));
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) { // Only calculate upper triangle + diagonal is 0
double dist = get_length(data[i], data[j]);
graph[i][j] = dist;
graph[j][i] = dist; // Symmetric graph
}
}
return graph;
}
// --- Union-Find Data Structure ---
class UnionFind {
std::vector<int> parent;
std::vector<int> rank; // Or size
public:
UnionFind(int n) {
parent.resize(n);
std::iota(parent.begin(), parent.end(), 0); // Fill with 0, 1, 2, ...
rank.assign(n, 0);
}
int find(int i) {
if (parent[i] == i)
return i;
// Path compression
return parent[i] = find(parent[i]);
}
void unite(int i, int j) {
int root_i = find(i);
int root_j = find(j);
if (root_i != root_j) {
// Union by rank
if (rank[root_i] < rank[root_j]) {
parent[root_i] = root_j;
} else if (rank[root_i] > rank[root_j]) {
parent[root_j] = root_i;
} else {
parent[root_j] = root_i;
rank[root_i]++;
}
}
}
};
// --- Minimum Spanning Tree (Kruskal's Algorithm) ---
std::vector<Edge> minimum_spanning_tree(const std::vector<std::vector<double>>& graph) {
int n = graph.size();
if (n == 0) return {};
std::vector<Edge> edges;
for (int i = 0; i < n; ++i) {
for (int j = i + 1; j < n; ++j) { // Avoid duplicates and self-loops
edges.push_back({i, j, graph[i][j]});
}
}
// Sort edges by weight
std::sort(edges.begin(), edges.end());
std::vector<Edge> mst;
UnionFind uf(n);
int edges_count = 0;
for (const auto& edge : edges) {
if (uf.find(edge.u) != uf.find(edge.v)) {
mst.push_back(edge);
uf.unite(edge.u, edge.v);
edges_count++;
if (edges_count == n - 1) { // Optimization: MST has n-1 edges
break;
}
}
}
return mst;
}
// --- Find Vertices with Odd Degree in MST ---
std::vector<int> find_odd_vertexes(const std::vector<Edge>& mst, int n) {
std::vector<int> degree(n, 0);
for (const auto& edge : mst) {
degree[edge.u]++;
degree[edge.v]++;
}
std::vector<int> odd_vertices;
for (int i = 0; i < n; ++i) {
if (degree[i] % 2 != 0) {
odd_vertices.push_back(i);
}
}
return odd_vertices;
}
// --- Minimum Weight Matching (Greedy Heuristic) ---
// Note: This is a simplified greedy approach, not a true min-weight perfect matching.
// It modifies the mst vector by adding matching edges.
void minimum_weight_matching(std::vector<Edge>& mst, const std::vector<std::vector<double>>& graph, std::vector<int>& odd_vertices) {
// Use a copy to allow modification while iterating
std::vector<int> current_odd = odd_vertices;
// Shuffle for randomness (like the Python version)
// This makes the output non-deterministic unless seeded
std::random_device rd;
std::mt19937 g(rd()); // Mersenne Twister random number generator
std::shuffle(current_odd.begin(), current_odd.end(), g);
// Keep track of vertices already matched in this phase
std::vector<bool> matched(graph.size(), false);
for (int i = 0; i < current_odd.size(); ++i) {
int v = current_odd[i];
if (matched[v]) continue; // Skip if already matched
double min_length = std::numeric_limits<double>::infinity();
int closest_u = -1;
// Find the closest unmatched odd vertex
for (int j = i + 1; j < current_odd.size(); ++j) {
int u = current_odd[j];
if (!matched[u]) { // Check if 'u' is available
if (graph[v][u] < min_length) {
min_length = graph[v][u];
closest_u = u;
}
}
}
if (closest_u != -1) {
// Add the matching edge to the MST list (now a multigraph)
mst.push_back({v, closest_u, min_length});
matched[v] = true;
matched[closest_u] = true; // Mark both as matched
}
// Note: In a perfect matching on an even number of vertices,
// every vertex should find a match. If closest_u remains -1,
// something is wrong (e.g., odd number of odd_vertices input?)
// Christofides guarantees an even number of odd-degree vertices.
}
}
// --- Find Eulerian Tour (Hierholzer's Algorithm) ---
std::vector<int> find_eulerian_tour(const std::vector<Edge>& matched_mst, int n) {
if (matched_mst.empty()) return {};
// Build adjacency list representation of the multigraph (MST + matching)
// Use std::list for efficient removal of edges during tour construction
std::vector<std::list<std::pair<int, const Edge*>>> adj(n); // Store neighbor and pointer to original edge
std::map<const Edge*, bool> edge_used; // Track used edges (since multigraph)
for (const auto& edge : matched_mst) {
adj[edge.u].push_back({edge.v, &edge});
adj[edge.v].push_back({edge.u, &edge});
edge_used[&edge] = false;
}
std::vector<int> tour;
std::stack<int> current_path;
// Start at any vertex with edges (e.g., the first vertex of the first edge)
int start_node = matched_mst[0].u;
current_path.push(start_node);
int current_node = start_node;
while (!current_path.empty()) {
current_node = current_path.top();
bool found_edge = false;
// Find an unused edge from the current node
for (auto it = adj[current_node].begin(); it != adj[current_node].end(); ) {
int neighbor = it->first;
const Edge* edge_ptr = it->second;
if (!edge_used[edge_ptr]) {
edge_used[edge_ptr] = true; // Mark edge as used
// Push neighbor onto stack and move to it
current_path.push(neighbor);
// Remove the edge from the neighbor's list as well
// This part is tricky with pointers; let's simplify
// by just relying on the edge_used map. A more robust
// Hierholzer implementation might store iterators.
// We don't strictly need to remove from adj list if using edge_used map
found_edge = true;
break; // Move to the neighbor
} else {
++it; // Check next edge
}
}
// If no unused edge was found from current_node, backtrack
if (!found_edge) {
tour.push_back(current_path.top());
current_path.pop();
}
}
// The tour is constructed in reverse order
std::reverse(tour.begin(), tour.end());
return tour;
}
// --- Main TSP Function (Christofides Approximation) ---
std::pair<double, std::vector<int>> tsp(const std::vector<Point>& data) {
int n = data.size();
if (n == 0) {
return {0.0, {}};
}
if (n == 1) {
return {0.0, {data[0].id}}; // Or just {0} if using 0-based indexing internally
}
// Build a graph
std::vector<std::vector<double>> G = build_graph(data);
print_graph(G, "Graph");
// Build a minimum spanning tree
std::vector<Edge> MSTree = minimum_spanning_tree(G);
print_edges(MSTree, "MSTree");
// Find odd degree vertices
std::vector<int> odd_vertexes = find_odd_vertexes(MSTree, n);
print_container(odd_vertexes, "Odd vertexes in MSTree");
// Add minimum weight matching edges (using greedy heuristic)
// Note: This modifies MSTree, turning it into a multigraph representation
minimum_weight_matching(MSTree, G, odd_vertexes);
print_edges(MSTree, "Minimum weight matching (MST + Matching Edges)"); // Now contains MST + Matching
// Find an Eulerian tour in the combined graph
std::vector<int> eulerian_tour = find_eulerian_tour(MSTree, n);
print_container(eulerian_tour, "Eulerian tour");
// --- Create Hamiltonian Circuit by Skipping Visited Nodes ---
if (eulerian_tour.empty()) {
std::cerr << "Error: Eulerian tour could not be found." << std::endl;
return {-1.0, {}}; // Indicate error
}
std::vector<int> path;
double length = 0.0;
std::vector<bool> visited(n, false);
int current = eulerian_tour[0];
path.push_back(current);
visited[current] = true;
for (size_t i = 1; i < eulerian_tour.size(); ++i) {
int v = eulerian_tour[i];
if (!visited[v]) {
path.push_back(v);
visited[v] = true;
length += G[current][v]; // Add distance from previous node in path
current = v; // Update current node in path
}
}
// Add the edge back to the start
length += G[current][path[0]];
path.push_back(path[0]); // Complete the cycle
// Convert path indices back to original IDs if needed (assuming Point.id holds them)
// If the input 'data' vector's order corresponds to IDs 0..N-1, no conversion is needed.
// If Point.id was used differently, you'd map back here.
print_container(path, "Result path");
std::cout << "Result length of the path: " << std::fixed << std::setprecision(2) << length << std::endl;
return {length, path};
}
int main() {
// Input data matching the Python example
// Store as Point structs, retaining original order implicitly as ID 0..N-1
std::vector<std::pair<double, double>> raw_data = {
{1380, 939}, {2848, 96}, {3510, 1671}, {457, 334}, {3888, 666}, {984, 965}, {2721, 1482}, {1286, 525},
{2716, 1432}, {738, 1325}, {1251, 1832}, {2728, 1698}, {3815, 169}, {3683, 1533}, {1247, 1945}, {123, 862},
{1234, 1946}, {252, 1240}, {611, 673}, {2576, 1676}, {928, 1700}, {53, 857}, {1807, 1711}, {274, 1420},
{2574, 946}, {178, 24}, {2678, 1825}, {1795, 962}, {3384, 1498}, {3520, 1079}, {1256, 61}, {1424, 1728},
{3913, 192}, {3085, 1528}, {2573, 1969}, {463, 1670}, {3875, 598}, {298, 1513}, {3479, 821}, {2542, 236},
{3955, 1743}, {1323, 280}, {3447, 1830}, {2936, 337}, {1621, 1830}, {3373, 1646}, {1393, 1368},
{3874, 1318}, {938, 955}, {3022, 474}, {2482, 1183}, {3854, 923}, {376, 825}, {2519, 135}, {2945, 1622},
{953, 268}, {2628, 1479}, {2097, 981}, {890, 1846}, {2139, 1806}, {2421, 1007}, {2290, 1810}, {1115, 1052},
{2588, 302}, {327, 265}, {241, 341}, {1917, 687}, {2991, 792}, {2573, 599}, {19, 674}, {3911, 1673},
{872, 1559}, {2863, 558}, {929, 1766}, {839, 620}, {3893, 102}, {2178, 1619}, {3822, 899}, {378, 1048},
{1178, 100}, {2599, 901}, {3416, 143}, {2961, 1605}, {611, 1384}, {3113, 885}, {2597, 1830}, {2586, 1286},
{161, 906}, {1429, 134}, {742, 1025}, {1625, 1651}, {1187, 706}, {1787, 1009}, {22, 987}, {3640, 43},
{3756, 882}, {776, 392}, {1724, 1642}, {198, 1810}, {3950, 1558}
};
std::vector<Point> data_points;
data_points.reserve(raw_data.size());
for(int i = 0; i < raw_data.size(); ++i) {
data_points.push_back({raw_data[i].first, raw_data[i].second, i});
}
tsp(data_points);
return 0;
}
- Output:
Graph: ...... Eulerian tour: [14, 16, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 69, 21, 93, 52, 18, 74, 96, 3, 64, 65, 64, 25, 96, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 9, 83, 9, 71, 20, 73, 58, 73, 10, 31, 90, 97, 22, 59, 76, 59, 61, 85, 26, 11, 54, 82, 33, 28, 45, 2, 13, 70, 40, 70, 99, 47, 2, 42, 34, 85, 11, 19, 56, 6, 8, 86, 50, 60, 57, 27, 66, 27, 92, 60, 24, 80, 68, 72, 49, 43, 1, 53, 39, 63, 68, 72, 67, 84, 38, 29, 38, 95, 77, 4, 36, 32, 75, 81, 94, 12, 32, 77, 51, 44, 90, 46, 31, 10, 14] Result path: [14, 16, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 69, 93, 18, 74, 96, 3, 64, 65, 25, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 9, 83, 71, 20, 73, 58, 10, 31, 90, 97, 22, 59, 76, 61, 85, 26, 11, 54, 82, 33, 28, 45, 2, 13, 70, 40, 99, 47, 42, 34, 19, 56, 6, 8, 86, 50, 60, 57, 27, 66, 92, 24, 80, 68, 72, 49, 43, 1, 53, 39, 63, 67, 84, 38, 29, 95, 77, 4, 36, 32, 75, 81, 94, 12, 51, 44, 46, 14] Result length of the path: 27920.47
import 'dart:math';
import 'dart:collection';
// Helper Classes
class Point {
final double x, y;
final int id; // Original index
Point(this.x, this.y, this.id);
}
class Edge implements Comparable<Edge> {
final int u, v;
final double weight;
Edge(this.u, this.v, this.weight);
@override
int compareTo(Edge other) => weight.compareTo(other.weight);
}
// Helper Functions to Print Containers
void printContainer(List<dynamic> container, String name) {
print('$name: [${container.join(', ')}]');
}
void printEdges(List<Edge> edges, String name) {
final buffer = StringBuffer('$name: [');
for (var i = 0; i < edges.length; i++) {
if (i != 0) buffer.write(', ');
buffer.write('(${edges[i].u}, ${edges[i].v}, ${edges[i].weight.toStringAsFixed(2)})');
}
buffer.write(']');
print(buffer.toString());
}
void printGraph(List<List<double>> graph, String name) {
print('$name: {');
for (var i = 0; i < graph.length; i++) {
final buffer = StringBuffer(' $i: {');
for (var j = 0; j < graph[i].length; j++) {
if (i != j) {
if (buffer.length > 6) buffer.write(', ');
buffer.write('$j: ${graph[i][j].toStringAsFixed(2)}');
}
}
buffer.write('}${i == graph.length - 1 ? '' : ','}');
print(buffer.toString());
}
print('}');
}
// Euclidean Distance
double getLength(Point p1, Point p2) {
final dx = p1.x - p2.x;
final dy = p1.y - p2.y;
return sqrt(dx * dx + dy * dy);
}
// Build Complete Graph (Adjacency Matrix)
List<List<double>> buildGraph(List<Point> data) {
final n = data.length;
final graph = List.generate(n, (_) => List.filled(n, 0.0));
for (var i = 0; i < n; i++) {
for (var j = i + 1; j < n; j++) {
final dist = getLength(data[i], data[j]);
graph[i][j] = dist;
graph[j][i] = dist;
}
}
return graph;
}
// Union-Find Data Structure
class UnionFind {
final List<int> parent;
final List<int> rank;
UnionFind(int n)
: parent = List.generate(n, (i) => i),
rank = List.filled(n, 0);
int find(int i) {
if (parent[i] == i) return i;
parent[i] = find(parent[i]); // Path compression
return parent[i];
}
void unite(int i, int j) {
final rootI = find(i);
final rootJ = find(j);
if (rootI != rootJ) {
if (rank[rootI] < rank[rootJ]) {
parent[rootI] = rootJ;
} else if (rank[rootI] > rank[rootJ]) {
parent[rootJ] = rootI;
} else {
parent[rootJ] = rootI;
rank[rootI]++;
}
}
}
}
// Minimum Spanning Tree (Kruskal's Algorithm)
List<Edge> minimumSpanningTree(List<List<double>> graph) {
final n = graph.length;
if (n == 0) return [];
final edges = <Edge>[];
for (var i = 0; i < n; i++) {
for (var j = i + 1; j < n; j++) {
edges.add(Edge(i, j, graph[i][j]));
}
}
edges.sort();
final mst = <Edge>[];
final uf = UnionFind(n);
var edgesCount = 0;
for (final edge in edges) {
if (uf.find(edge.u) != uf.find(edge.v)) {
mst.add(edge);
uf.unite(edge.u, edge.v);
edgesCount++;
if (edgesCount == n - 1) break; // Optimization: MST has n-1 edges
}
}
return mst;
}
// Find Vertices with Odd Degree in MST
List<int> findOddVertices(List<Edge> mst, int n) {
final degree = List.filled(n, 0);
for (final edge in mst) {
degree[edge.u]++;
degree[edge.v]++;
}
final oddVertices = <int>[];
for (var i = 0; i < n; i++) {
if (degree[i] % 2 != 0) {
oddVertices.add(i);
}
}
return oddVertices;
}
// Minimum Weight Matching (Greedy Heuristic)
void minimumWeightMatching(List<Edge> mst, List<List<double>> graph, List<int> oddVertices) {
final currentOdd = List.from(oddVertices);
currentOdd.shuffle(); // Shuffle for randomness
final matched = List.filled(graph.length, false);
for (var i = 0; i < currentOdd.length; i++) {
final v = currentOdd[i];
if (matched[v]) continue;
var minLength = double.infinity;
var closestU = -1;
for (var j = i + 1; j < currentOdd.length; j++) {
final u = currentOdd[j];
if (!matched[u] && graph[v][u] < minLength) {
minLength = graph[v][u];
closestU = u;
}
}
if (closestU != -1) {
mst.add(Edge(v, closestU, minLength));
matched[v] = true;
matched[closestU] = true;
}
}
}
// Find Eulerian Tour (Hierholzer's Algorithm)
List<int> findEulerianTour(List<Edge> matchedMst, int n) {
if (matchedMst.isEmpty) return [];
final adj = List.generate(n, (_) => <_EdgeNode>[]);
final edgeUsed = <Edge, bool>{};
for (final edge in matchedMst) {
adj[edge.u].add(_EdgeNode(edge.v, edge));
adj[edge.v].add(_EdgeNode(edge.u, edge));
edgeUsed[edge] = false;
}
final tour = <int>[];
final currentPath = Queue<int>();
final startNode = matchedMst.first.u;
currentPath.addLast(startNode);
while (currentPath.isNotEmpty) {
final currentNode = currentPath.last;
var foundEdge = false;
for (final node in adj[currentNode]) {
if (!edgeUsed[node.edge]!) {
edgeUsed[node.edge] = true;
currentPath.addLast(node.neighbor);
foundEdge = true;
break;
}
}
if (!foundEdge) {
tour.add(currentPath.removeLast());
}
}
return tour.reversed.toList();
}
// Main TSP Function (Christofides Approximation)
Map<String, dynamic> tsp(List<Point> data) {
final n = data.length;
if (n == 0) return {'length': 0.0, 'path': <int>[]};
if (n == 1) return {'length': 0.0, 'path': [data.first.id]};
final G = buildGraph(data);
printGraph(G, 'Graph');
final MSTree = minimumSpanningTree(G);
printEdges(MSTree, 'MSTree');
final oddVertices = findOddVertices(MSTree, n);
printContainer(oddVertices, 'Odd vertexes in MSTree');
minimumWeightMatching(MSTree, G, oddVertices);
printEdges(MSTree, 'Minimum weight matching (MST + Matching Edges)');
final eulerianTour = findEulerianTour(MSTree, n);
printContainer(eulerianTour, 'Eulerian tour');
if (eulerianTour.isEmpty) {
print('Error: Eulerian tour could not be found.');
return {'length': -1.0, 'path': <int>[]};
}
final path = <int>[];
var length = 0.0;
final visited = List.filled(n, false);
var current = eulerianTour.first;
path.add(current);
visited[current] = true;
for (var i = 1; i < eulerianTour.length; i++) {
final v = eulerianTour[i];
if (!visited[v]) {
path.add(v);
visited[v] = true;
length += G[current][v];
current = v;
}
}
length += G[current][path.first];
path.add(path.first);
printContainer(path, 'Result path');
print('Result length of the path: ${length.toStringAsFixed(2)}');
return {'length': length, 'path': path};
}
class _EdgeNode {
final int neighbor;
final Edge edge;
_EdgeNode(this.neighbor, this.edge);
}
void main() {
final rawData = <List<double>>[
[1380, 939], [2848, 96], [3510, 1671], [457, 334], [3888, 666], [984, 965], [2721, 1482], [1286, 525],
[2716, 1432], [738, 1325], [1251, 1832], [2728, 1698], [3815, 169], [3683, 1533], [1247, 1945], [123, 862],
[1234, 1946], [252, 1240], [611, 673], [2576, 1676], [928, 1700], [53, 857], [1807, 1711], [274, 1420],
[2574, 946], [178, 24], [2678, 1825], [1795, 962], [3384, 1498], [3520, 1079], [1256, 61], [1424, 1728],
[3913, 192], [3085, 1528], [2573, 1969], [463, 1670], [3875, 598], [298, 1513], [3479, 821], [2542, 236],
[3955, 1743], [1323, 280], [3447, 1830], [2936, 337], [1621, 1830], [3373, 1646], [1393, 1368],
[3874, 1318], [938, 955], [3022, 474], [2482, 1183], [3854, 923], [376, 825], [2519, 135], [2945, 1622],
[953, 268], [2628, 1479], [2097, 981], [890, 1846], [2139, 1806], [2421, 1007], [2290, 1810], [1115, 1052],
[2588, 302], [327, 265], [241, 341], [1917, 687], [2991, 792], [2573, 599], [19, 674], [3911, 1673],
[872, 1559], [2863, 558], [929, 1766], [839, 620], [3893, 102], [2178, 1619], [3822, 899], [378, 1048],
[1178, 100], [2599, 901], [3416, 143], [2961, 1605], [611, 1384], [3113, 885], [2597, 1830], [2586, 1286],
[161, 906], [1429, 134], [742, 1025], [1625, 1651], [1187, 706], [1787, 1009], [22, 987], [3640, 43],
[3756, 882], [776, 392], [1724, 1642], [198, 1810], [3950, 1558]
];
final dataPoints = <Point>[];
for (var i = 0; i < rawData.length; i++) {
dataPoints.add(Point(rawData[i][0], rawData[i][1], i));
}
tsp(dataPoints);
}
- Output:
Graph: {
0: {1: 1692.83, 2: 2252.27, 3: 1103.61, 4: 2522.81, 5: 396.85, 6: 1446.77, 7: 424.54, 8: 1424.06, 9: 749.11, 10: 902.27, 11: 1546.99, 12: 2553.85, 13: 2378.37, 14: 1014.75, 15: 1259.36, 16: 1017.53, 17: 1167.47, 18: 813.71, 19: 1404.84, 20: 885.11, 21: 1329.53, 22: 882.22, 23: 1206.07, 24: 1194.02, 25: 1510.64, 26: 1571.56, 27: 415.64, 28: 2080.50, 29: 2144.57, 30: 886.71, 31: 790.23, 32: 2640.85, 33: 1803.87, 34: 1576.12, 35: 1172.71, 36: 2518.19, 37: 1224.83, 38: 2102.31, 39: 1358.11, 40: 2697.60, 41: 661.46, 42: 2250.86, 43: 1668.39, 44: 923.02, 45: 2114.69, 46: 429.20, 47: 2522.63, 48: 442.29, 49: 1706.57, 50: 1128.69, 51: 2474.05, 52: 1010.45, 53: 1394.18, 54: 1707.55, 55: 795.34, 56: 1359.82, 57: 718.23, 58: 1030.90, 59: 1152.29, 60: 1043.22, 61: 1259.66, 62: 288.09, 63: 1365.66, 64: 1250.23, 65: 1286.44, 66: 593.19, 67: 1617.69, 68: 1240.50, 69: 1386.56, 70: 2635.28, 71: 801.54, 72: 1531.16, 73: 941.98, 74: 628.05, 75: 2648.72, 76: 1048.43, 77: 2442.33, 78: 1007.91, 79: 862.97, 80: 1219.59, 81: 2186.07, 82: 1715.55, 83: 888.47, 84: 1733.84, 85: 1508.30, 86: 1254.93, 87: 1219.45, 88: 806.49, 89: 643.77, 90: 752.97, 91: 302.55, 92: 412.98, 93: 1358.85, 94: 2431.13, 95: 2376.68, 96: 814.88, 97: 782.65, 98: 1468.25, 99: 2643.49},
1: {0: 1692.83, 2: 1708.47, 3: 2402.82, 4: 1185.96, 5: 2056.61, 6: 1391.81, 7: 1619.84, 8: 1342.51, 9: 2441.83, 10: 2358.84, 11: 1606.49, 12: 969.75, 13: 1661.98, 14: 2445.81, 15: 2830.61, 16: 2455.10, 17: 2836.89, 18: 2310.22, 19: 1603.24, 20: 2501.84, 21: 2896.75, 22: 1921.43, 23: 2894.56, 24: 893.07, 25: 2670.97, 26: 1737.34, 27: 1363.37, 28: 1500.97, 29: 1190.74, 30: 1592.38, 31: 2165.92, 32: 1069.32, 33: 1451.48, 34: 1893.08, 35: 2857.57, 36: 1143.12, 37: 2917.26, 38: 961.14, 39: 336.51, 40: 1984.45, 41: 1536.06, 42: 1834.55, 43: 256.56, 44: 2124.21, 45: 1636.50, 46: 1932.62, 47: 1595.61, 48: 2094.27, 49: 416.12, 50: 1146.96, 51: 1302.29, 52: 2577.25, 53: 331.30, 54: 1529.08, 55: 1902.79, 56: 1400.39, 57: 1160.70, 58: 2626.07, 59: 1851.16, 60: 1006.11, 61: 1802.54, 62: 1979.20, 63: 331.72, 64: 2526.66, 65: 2618.49, 66: 1102.74, 67: 710.54, 68: 573.27, 69: 2887.44, 70: 1901.81, 71: 2458.65, 72: 462.24, 73: 2543.91, 74: 2076.21, 75: 1045.02, 76: 1663.86, 77: 1262.33, 78: 2647.11, 79: 1670.00, 80: 842.63, 81: 569.94, 82: 1513.23, 83: 2581.30, 84: 832.31, 85: 1752.07, 86: 1218.50, 87: 2806.43, 88: 1419.51, 89: 2301.80, 90: 1978.32, 91: 1769.47, 92: 1399.75, 93: 2963.13, 94: 793.77, 95: 1200.94, 96: 2093.04, 97: 1911.41, 98: 3155.99, 99: 1830.81},
2: {0: 2252.27, 1: 1708.47, 3: 3332.92, 4: 1073.74, 5: 2622.81, 6: 811.32, 7: 2501.90, 8: 829.19, 9: 2793.51, 10: 2264.73, 11: 782.47, 12: 1532.65, 13: 221.30, 14: 2279.53, 15: 3482.28, 16: 2292.55, 17: 3286.38, 18: 3065.98, 19: 934.01, 20: 2582.16, 21: 3551.54, 22: 1703.47, 23: 3245.72, 24: 1183.94, 25: 3716.83, 26: 846.13, 27: 1855.78, 28: 214.02, 29: 592.08, 30: 2769.95, 31: 2086.78, 32: 1532.92, 33: 448.41, 34: 983.25, 35: 3047.00, 36: 1133.38, 37: 3215.88, 38: 850.57, 39: 1730.97, 40: 450.79, 41: 2591.88, 42: 171.03, 43: 1452.25, 44: 1895.68, 45: 139.26, 46: 2138.57, 47: 507.06, 48: 2669.80, 49: 1292.65, 50: 1137.95, 51: 823.31, 52: 3246.18, 53: 1827.94, 54: 567.12, 55: 2916.62, 56: 902.66, 57: 1572.47, 58: 2625.84, 59: 1377.63, 60: 1275.47, 61: 1227.89, 62: 2473.70, 63: 1650.53, 64: 3479.70, 65: 3529.20, 66: 1872.41, 67: 1020.78, 68: 1423.78, 69: 3630.58, 70: 401.00, 71: 2640.38, 72: 1287.39, 73: 2582.75, 74: 2870.34, 75: 1615.07, 76: 1333.01, 77: 832.66, 78: 3193.36, 79: 2811.81, 80: 1192.82, 81: 1530.89, 82: 552.95, 83: 2913.17, 84: 880.57, 85: 926.74, 86: 1001.00, 87: 3435.26, 88: 2587.07, 89: 2842.38, 90: 1885.11, 91: 2515.46, 92: 1845.80, 93: 3554.43, 94: 1633.18, 95: 826.46, 96: 3018.38, 97: 1786.24, 98: 3314.92, 99: 454.28},
3: {0: 1103.61, 1: 2402.82, 2: 3332.92, 4: 3447.03, 5: 822.13, 6: 2538.42, 7: 850.72, 8: 2511.71, 9: 1030.07, 10: 1695.42, 11: 2649.14, 12: 3362.05, 13: 3441.61, 14: 1794.27, 15: 624.77, 16: 1789.49, 17: 928.90, 18: 372.34, 19: 2508.21, 20: 1444.92, 21: 660.87, 22: 1928.37, 23: 1101.31, 24: 2203.69, 25: 417.06, 26: 2675.06, 27: 1478.05, 28: 3149.96, 29: 3152.30, 30: 844.35, 31: 1696.56, 32: 3458.92, 33: 2886.52, 34: 2674.08, 35: 1336.01, 36: 3428.18, 37: 1189.67, 38: 3060.99, 39: 2087.30, 40: 3771.11, 41: 867.68, 42: 3343.37, 43: 2479.00, 44: 1895.50, 45: 3197.56, 46: 1394.72, 47: 3555.86, 48: 785.49, 49: 2568.82, 50: 2195.77, 51: 3447.68, 52: 497.64, 53: 2071.58, 54: 2801.62, 55: 500.37, 56: 2454.44, 57: 1763.01, 58: 1572.78, 59: 2235.15, 60: 2076.11, 61: 2353.39, 62: 973.90, 63: 2131.24, 64: 147.18, 65: 216.11, 66: 1502.07, 67: 2575.06, 68: 2132.53, 69: 554.48, 70: 3704.46, 71: 1293.39, 72: 2416.40, 73: 1507.78, 74: 477.20, 75: 3443.82, 76: 2147.80, 77: 3412.10, 78: 718.36, 79: 758.02, 80: 2215.77, 81: 2965.16, 82: 2808.11, 83: 1061.23, 84: 2712.55, 85: 2611.06, 86: 2332.15, 87: 644.05, 88: 992.36, 89: 747.47, 90: 1760.32, 91: 819.32, 92: 1491.48, 93: 784.62, 94: 3196.27, 95: 3344.20, 96: 324.23, 97: 1821.03, 98: 1498.55, 99: 3701.25},
4: {0: 2522.81, 1: 1185.96, 2: 1073.74, 3: 3447.03, 5: 2919.35, 6: 1423.99, 7: 2605.82, 8: 1400.12, 9: 3218.20, 10: 2883.28, 11: 1552.62, 12: 502.33, 13: 890.91, 14: 2934.40, 15: 3770.10, 16: 2946.54, 17: 3681.03, 18: 3277.01, 19: 1655.73, 20: 3135.40, 21: 3839.75, 22: 2328.64, 23: 3691.82, 24: 1343.50, 25: 3765.14, 26: 1675.52, 27: 2113.83, 28: 972.75, 29: 553.17, 30: 2700.64, 31: 2683.12, 32: 474.66, 33: 1178.07, 34: 1851.22, 35: 3569.12, 36: 69.23, 37: 3688.56, 38: 437.39, 39: 1413.02, 40: 1079.08, 41: 2593.88, 42: 1244.74, 43: 1007.25, 44: 2548.37, 45: 1107.08, 46: 2591.88, 47: 652.15, 48: 2964.12, 49: 887.03, 50: 1498.04, 51: 259.24, 52: 3515.60, 53: 1468.37, 54: 1342.83, 55: 2961.86, 56: 1499.52, 57: 1818.49, 58: 3221.86, 59: 2087.73, 60: 1506.11, 61: 1965.28, 62: 2799.74, 63: 1350.00, 64: 3583.51, 65: 3661.45, 66: 1971.11, 67: 905.81, 68: 1316.71, 69: 3869.01, 70: 1007.26, 71: 3145.43, 72: 1030.67, 73: 3156.85, 74: 3049.35, 75: 564.02, 76: 1957.63, 77: 242.17, 78: 3530.73, 79: 2768.48, 80: 1310.25, 81: 704.49, 82: 1319.49, 83: 3354.74, 84: 805.35, 85: 1738.27, 86: 1442.08, 87: 3734.72, 88: 2515.89, 89: 3166.42, 90: 2468.07, 91: 2701.30, 92: 2128.81, 93: 3879.30, 94: 670.55, 95: 253.14, 96: 3124.04, 97: 2373.91, 98: 3863.27, 99: 894.15},
5: {0: 396.85, 1: 2056.61, 2: 2622.81, 3: 822.13, 4: 2919.35, 6: 1812.31, 7: 533.67, 8: 1793.85, 9: 436.02, 10: 907.18, 11: 1891.78, 12: 2940.78, 13: 2758.12, 14: 1014.68, 15: 867.14, 16: 1012.35, 17: 781.95, 18: 473.70, 19: 1743.56, 20: 737.13, 21: 937.24, 22: 1110.79, 23: 843.28, 24: 1590.11, 25: 1239.00, 26: 1899.80, 27: 811.01, 28: 2458.47, 29: 2538.56, 30: 944.03, 31: 880.78, 32: 3029.29, 33: 2175.13, 34: 1879.61, 35: 876.62, 36: 2914.20, 37: 878.01, 38: 2499.15, 39: 1720.12, 40: 3071.18, 41: 764.29, 42: 2610.48, 43: 2050.53, 44: 1074.24, 45: 2484.17, 46: 574.19, 47: 2911.48, 48: 47.07, 49: 2096.31, 50: 1513.78, 51: 2870.31, 52: 623.91, 53: 1745.03, 54: 2068.13, 55: 697.69, 56: 1722.48, 57: 1113.11, 58: 886.00, 59: 1428.74, 60: 1437.61, 61: 1555.53, 62: 157.26, 63: 1735.62, 64: 960.03, 65: 970.27, 66: 973.54, 67: 2014.44, 68: 1630.61, 69: 1007.92, 70: 3011.41, 71: 604.47, 72: 1922.57, 73: 802.89, 74: 374.23, 75: 3034.31, 76: 1361.38, 77: 2838.77, 78: 611.66, 79: 886.49, 80: 1616.27, 81: 2567.16, 82: 2078.01, 83: 560.97, 84: 2130.50, 85: 1830.30, 86: 1633.84, 87: 825.11, 88: 942.65, 89: 249.33, 90: 938.87, 91: 329.07, 92: 804.20, 93: 962.25, 94: 2811.48, 95: 2773.24, 96: 609.58, 97: 1002.96, 98: 1154.05, 99: 3024.70},
6: {0: 1446.77, 1: 1391.81, 2: 811.32, 3: 2538.42, 4: 1423.99, 5: 1812.31, 7: 1724.84, 8: 50.25, 9: 1989.21, 10: 1511.09, 11: 216.11, 12: 1709.04, 13: 963.35, 14: 1545.01, 15: 2670.96, 16: 1557.71, 17: 2480.83, 18: 2259.77, 19: 242.20, 20: 1806.20, 21: 2740.23, 22: 942.25, 23: 2447.79, 24: 555.79, 25: 2931.32, 26: 345.68, 27: 1062.02, 28: 663.19, 29: 894.88, 30: 2040.95, 31: 1320.12, 32: 1756.41, 33: 366.90, 34: 508.99, 35: 2265.81, 36: 1453.68, 37: 2423.20, 38: 1005.73, 39: 1258.79, 40: 1261.30, 41: 1843.69, 42: 805.10, 43: 1165.01, 44: 1153.73, 45: 672.31, 46: 1332.88, 47: 1164.61, 48: 1859.25, 49: 1051.98, 50: 382.78, 51: 1263.40, 52: 2435.30, 53: 1362.06, 54: 264.15, 55: 2144.67, 56: 93.05, 57: 800.24, 58: 1866.83, 59: 666.11, 60: 561.81, 61: 541.61, 62: 1662.57, 63: 1187.47, 64: 2685.58, 65: 2729.89, 66: 1130.68, 67: 740.95, 68: 895.32, 69: 2820.22, 70: 1205.23, 71: 1850.60, 72: 934.85, 73: 1814.36, 74: 2070.02, 75: 1810.52, 76: 560.02, 77: 1245.83, 78: 2382.86, 79: 2071.42, 80: 593.67, 81: 1508.62, 82: 269.68, 83: 2112.27, 84: 714.19, 85: 369.43, 86: 237.99, 87: 2624.00, 88: 1867.18, 89: 2031.08, 90: 1108.95, 91: 1719.11, 92: 1046.94, 93: 2744.02, 94: 1707.42, 95: 1196.34, 96: 2229.60, 97: 1009.76, 98: 2544.23, 99: 1231.35},
7: {0: 424.54, 1: 1619.84, 2: 2501.90, 3: 850.72, 4: 2605.82, 5: 533.67, 6: 1724.84, 8: 1693.38, 9: 969.69, 10: 1307.47, 11: 1858.84, 12: 2553.93, 13: 2600.32, 14: 1420.54, 15: 1210.84, 16: 1421.95, 17: 1257.13, 18: 691.03, 19: 1728.84, 20: 1228.33, 21: 1276.92, 22: 1295.39, 23: 1350.99, 24: 1355.06, 25: 1216.00, 26: 1904.64, 27: 670.86, 28: 2312.65, 29: 2301.67, 30: 464.97, 31: 1210.89, 32: 2648.02, 33: 2059.71, 34: 1934.30, 35: 1410.09, 36: 2590.03, 37: 1397.24, 38: 2212.89, 39: 1288.82, 40: 2933.78, 41: 247.78, 42: 2524.47, 43: 1660.68, 44: 1347.31, 45: 2369.01, 46: 849.76, 47: 2706.77, 48: 553.18, 49: 1736.75, 50: 1365.06, 51: 2598.66, 52: 958.18, 53: 1293.21, 54: 1988.89, 55: 420.64, 56: 1646.54, 57: 930.41, 58: 1379.08, 59: 1539.02, 60: 1233.11, 61: 1630.72, 62: 554.05, 63: 1320.96, 64: 993.62, 65: 1061.08, 66: 651.46, 67: 1725.78, 68: 1289.13, 69: 1275.73, 70: 2865.05, 71: 1113.80, 72: 1577.35, 73: 1291.33, 74: 456.98, 75: 2641.09, 76: 1411.56, 77: 2563.43, 78: 1047.85, 79: 438.51, 80: 1365.78, 81: 2163.98, 82: 1992.99, 83: 1092.48, 84: 1862.13, 85: 1849.80, 86: 1506.36, 87: 1187.77, 88: 416.33, 89: 738.87, 90: 1175.92, 91: 206.31, 92: 696.60, 93: 1345.79, 94: 2402.84, 95: 2495.67, 96: 527.06, 97: 1199.81, 98: 1683.74, 99: 2857.27},
8: {0: 1424.06, 1: 1342.51, 2: 829.19, 3: 2511.71, 4: 1400.12, 5: 1793.85, 6: 50.25, 7: 1693.38, 9: 1980.89, 10: 1518.63, 11: 266.27, 12: 1674.21, 13: 972.26, 14: 1556.00, 15: 2654.91, 16: 1568.60, 17: 2471.47, 18: 2237.66, 19: 281.31, 20: 1807.97, 21: 2724.37, 22: 950.85, 23: 2442.03, 24: 506.32, 25: 2902.40, 26: 394.83, 27: 1033.99, 28: 671.25, 29: 878.08, 30: 2002.81, 31: 1325.47, 32: 1723.49, 33: 381.28, 34: 555.71, 35: 2265.54, 36: 1427.88, 37: 2419.36, 38: 977.49, 39: 1208.59, 40: 1277.44, 41: 1807.64, 42: 832.33, 43: 1116.88, 44: 1165.09, 45: 690.97, 46: 1324.55, 47: 1163.60, 48: 1840.87, 49: 1005.68, 50: 341.70, 51: 1246.65, 52: 2417.45, 53: 1311.88, 54: 297.56, 55: 2112.60, 56: 99.76, 57: 765.87, 58: 1872.34, 59: 687.61, 60: 517.35, 61: 569.53, 62: 1645.48, 63: 1137.23, 64: 2658.80, 65: 2704.79, 66: 1092.44, 67: 696.58, 68: 845.19, 69: 2801.49, 70: 1219.06, 71: 1848.37, 72: 886.28, 73: 1817.95, 74: 2045.11, 75: 1776.01, 76: 569.57, 77: 1227.73, 78: 2369.32, 79: 2034.62, 80: 543.74, 81: 1466.81, 82: 299.92, 83: 2105.55, 84: 675.88, 85: 415.41, 86: 195.49, 87: 2608.58, 88: 1827.89, 89: 2015.52, 90: 1112.76, 91: 1692.61, 92: 1020.77, 93: 2730.51, 94: 1668.26, 95: 1176.48, 96: 2201.18, 97: 1013.98, 98: 2546.21, 99: 1240.42},
9: {0: 749.11, 1: 2441.83, 2: 2793.51, 3: 1030.07, 4: 3218.20, 5: 436.02, 6: 1989.21, 7: 969.69, 8: 1980.89, 10: 721.26, 11: 2024.66, 12: 3286.98, 13: 2952.34, 14: 802.17, 15: 769.80, 16: 794.77, 17: 493.38, 18: 664.25, 19: 1871.21, 20: 420.39, 21: 829.61, 22: 1136.55, 23: 473.63, 24: 1874.71, 25: 1416.40, 26: 2003.40, 27: 1117.59, 28: 2651.65, 29: 2792.86, 30: 1366.02, 31: 795.62, 32: 3371.10, 33: 2355.76, 34: 1944.73, 35: 441.19, 36: 3220.14, 37: 478.48, 38: 2786.95, 39: 2107.21, 40: 3244.04, 41: 1197.60, 42: 2755.67, 43: 2409.84, 44: 1017.21, 45: 2654.48, 46: 656.41, 47: 3136.01, 48: 420.59, 49: 2437.39, 50: 1749.77, 51: 3141.82, 52: 617.29, 53: 2141.98, 54: 2226.89, 55: 1078.64, 56: 1896.26, 57: 1401.86, 58: 542.72, 59: 1481.27, 60: 1712.78, 61: 1626.02, 62: 465.47, 63: 2114.01, 64: 1136.89, 65: 1102.39, 66: 1340.55, 67: 2315.19, 68: 1973.40, 69: 969.93, 70: 3192.03, 71: 269.65, 72: 2259.18, 73: 480.59, 74: 712.20, 75: 3383.75, 76: 1469.71, 77: 3113.28, 78: 454.23, 79: 1301.62, 80: 1908.69, 81: 2927.25, 82: 2240.56, 83: 140.04, 84: 2415.41, 85: 1926.37, 86: 1848.41, 87: 713.08, 88: 1376.94, 89: 300.03, 90: 945.01, 91: 764.70, 92: 1095.56, 93: 791.77, 94: 3172.56, 95: 3050.34, 96: 933.77, 97: 1035.71, 98: 725.83, 99: 3220.44},
10: {, 0: 902.27, 1: 2358.84, 2: 2264.73, 3: 1695.42, 4: 2883.28, 5: 907.18, 6: 1511.09, 7: 1307.47, 8: 1518.63, 9: 721.26, 11: 1483.07, 12: 3056.09, 13: 2450.31, 14: 113.07, 15: 1487.71, 16: 115.26, 17: 1161.23, 18: 1323.96, 19: 1334.15, 20: 348.93, 21: 1544.61, 22: 569.01, 23: 1060.32, 24: 1592.27, 25: 2102.43, 26: 1427.02, 27: 1026.08, 28: 2158.99, 29: 2390.68, 30: 1771.01, 31: 201.85, 32: 3126.63, 33: 1859.02, 34: 1329.08, 35: 804.48, 36: 2899.68, 37: 1004.97, 38: 2446.65, 39: 2052.78, 40: 2705.46, 41: 1553.67, 42: 2196.00, 43: 2252.61, 44: 370.01, 45: 2130.14, 46: 485.24, 47: 2672.89, 48: 931.18, 49: 2231.73, 50: 1391.60, 51: 2757.15, 52: 1334.04, 53: 2118.40, 54: 1706.97, 55: 1592.14, 56: 1421.53, 57: 1199.97, 58: 361.27, 59: 888.38, 60: 1431.62, 61: 1039.23, 62: 791.77, 63: 2031.86, 64: 1819.14, 65: 1800.88, 66: 1324.61, 67: 2027.12, 68: 1807.75, 69: 1690.80, 70: 2664.75, 71: 467.09, 72: 2054.66, 73: 328.69, 74: 1280.11, 75: 3158.02, 76: 951.16, 77: 2735.06, 78: 1173.36, 79: 1733.54, 80: 1638.25, 81: 2745.90, 82: 1725.00, 83: 781.22, 84: 2088.98, 85: 1346.00, 86: 1442.34, 87: 1430.24, 88: 1707.30, 89: 954.11, 90: 415.50, 91: 1127.82, 92: 982.15, 93: 1491.46, 94: 2984.60, 95: 2679.09, 96: 1516.32, 97: 509.73, 98: 1053.23, 99: 2712.87},
11: {, 0: 1546.99, 1: 1606.49, 2: 782.47, 3: 2649.14, 4: 1552.62, 5: 1891.78, 6: 216.11, 7: 1858.84, 8: 266.27, 9: 2024.66, 10: 1483.07, 12: 1876.01, 13: 969.15, 14: 1501.46, 15: 2735.86, 16: 1514.44, 17: 2518.00, 18: 2352.09, 19: 153.58, 20: 1800.00, 21: 2804.09, 22: 921.09, 23: 2469.70, 24: 767.61, 25: 3050.37, 26: 136.49, 27: 1188.35, 28: 685.81, 29: 1005.20, 30: 2201.49, 31: 1304.35, 32: 1916.31, 33: 395.41, 34: 312.20, 35: 2265.17, 36: 1589.22, 37: 2437.03, 38: 1154.61, 39: 1473.78, 40: 1227.82, 41: 1996.18, 42: 731.02, 43: 1376.80, 44: 1114.84, 45: 647.09, 46: 1375.18, 47: 1207.36, 48: 1938.08, 49: 1258.81, 50: 570.74, 51: 1366.93, 52: 2508.79, 53: 1576.91, 54: 229.92, 55: 2279.37, 56: 240.75, 57: 955.12, 58: 1843.95, 59: 598.82, 60: 756.13, 61: 452.09, 62: 1737.55, 63: 1403.00, 64: 2796.12, 65: 2833.13, 66: 1296.09, 67: 943.40, 68: 1109.88, 69: 2896.08, 70: 1183.26, 71: 1861.20, 72: 1147.97, 73: 1800.28, 74: 2174.95, 75: 1975.97, 76: 555.64, 77: 1354.71, 78: 2438.24, 79: 2226.23, 80: 807.37, 81: 1700.40, 82: 250.87, 83: 2140.16, 84: 899.55, 85: 185.97, 86: 435.78, 87: 2686.40, 88: 2033.10, 89: 2096.93, 90: 1104.00, 91: 1832.69, 92: 1166.28, 93: 2797.85, 94: 1889.65, 95: 1312.49, 96: 2348.60, 97: 1005.56, 98: 2532.48, 99: 1229.99},
12: {, 0: 2553.85, 1: 969.75, 2: 1532.65, 3: 3362.05, 4: 502.33, 5: 2940.78, 6: 1709.04, 7: 2553.93, 8: 1674.21, 9: 3286.98, 10: 3056.09, 11: 1876.01, 13: 1370.37, 14: 3122.31, 15: 3756.48, 16: 3133.57, 17: 3720.49, 18: 3243.40, 19: 1950.94, 20: 3267.83, 21: 3824.39, 22: 2531.76, 23: 3755.49, 24: 1464.18, 25: 3639.89, 26: 2008.76, 27: 2170.08, 28: 1397.14, 29: 956.62, 30: 2561.28, 31: 2854.36, 32: 100.66, 33: 1542.65, 34: 2186.91, 35: 3672.72, 36: 433.18, 37: 3765.05, 38: 733.48, 39: 1274.76, 40: 1580.21, 41: 2494.47, 42: 1701.28, 43: 894.91, 44: 2751.83, 45: 1541.72, 46: 2702.53, 47: 1150.51, 48: 2982.44, 49: 849.63, 50: 1674.84, 51: 755.01, 52: 3501.01, 53: 1296.45, 54: 1693.55, 55: 2863.71, 56: 1767.79, 57: 1900.23, 58: 3371.64, 59: 2342.81, 60: 1626.49, 61: 2240.20, 62: 2840.72, 63: 1234.19, 64: 3489.32, 65: 3578.14, 66: 1967.42, 67: 1033.01, 68: 1314.33, 69: 3829.44, 70: 1507.06, 71: 3254.74, 72: 1028.41, 73: 3298.39, 74: 3009.98, 75: 102.83, 76: 2186.84, 77: 730.03, 78: 3547.62, 79: 2637.90, 80: 1419.32, 81: 399.85, 82: 1670.75, 83: 3426.64, 84: 1002.73, 85: 2059.72, 86: 1660.76, 87: 3727.58, 88: 2386.26, 89: 3189.99, 90: 2644.32, 91: 2682.30, 92: 2195.08, 93: 3880.20, 94: 215.64, 95: 715.44, 96: 3047.17, 97: 2557.74, 98: 3971.85, 99: 1395.55},
13: {, 0: 2378.37, 1: 1661.98, 2: 221.30, 3: 3441.61, 4: 890.91, 5: 2758.12, 6: 963.35, 7: 2600.32, 8: 972.26, 9: 2952.34, 10: 2450.31, 11: 969.15, 12: 1370.37, 14: 2470.60, 15: 3622.68, 16: 2483.58, 17: 3443.49, 18: 3190.11, 19: 1116.20, 20: 2760.06, 21: 3692.41, 22: 1884.43, 23: 3410.87, 24: 1254.77, 25: 3816.03, 26: 1046.56, 27: 1972.46, 28: 301.04, 29: 482.37, 30: 2838.51, 31: 2267.40, 32: 1360.58, 33: 598.02, 34: 1192.56, 35: 3222.91, 36: 954.51, 37: 3385.06, 38: 740.65, 39: 1727.45, 40: 343.63, 41: 2672.00, 42: 379.35, 43: 1410.12, 44: 2083.28, 45: 329.95, 46: 2295.94, 47: 287.59, 48: 2805.19, 49: 1248.36, 50: 1250.96, 51: 633.51, 52: 3381.94, 53: 1819.15, 54: 743.35, 55: 3008.84, 56: 1056.38, 57: 1679.32, 58: 2810.48, 59: 1567.95, 60: 1367.23, 61: 1420.27, 62: 2612.66, 63: 1647.54, 64: 3587.56, 65: 3642.56, 66: 1958.18, 67: 1013.88, 68: 1450.67, 69: 3763.35, 70: 267.55, 71: 2811.12, 72: 1273.98, 73: 2763.84, 74: 2986.96, 75: 1446.33, 76: 1507.46, 77: 649.06, 78: 3340.40, 79: 2885.92, 80: 1254.78, 81: 1415.41, 82: 725.58, 83: 3075.61, 84: 863.02, 85: 1125.88, 86: 1124.46, 87: 3577.38, 88: 2652.87, 89: 2984.55, 90: 2061.38, 91: 2629.44, 92: 1967.08, 93: 3701.49, 94: 1490.62, 95: 655.08, 96: 3122.90, 97: 1962.03, 98: 3495.99, 99: 268.17},
14: {, 0: 1014.75, 1: 2445.81, 2: 2279.53, 3: 1794.27, 4: 2934.40, 5: 1014.68, 6: 1545.01, 7: 1420.54, 8: 1556.00, 9: 802.17, 10: 113.07, 11: 1501.46, 12: 3122.31, 13: 2470.60, 15: 1560.85, 16: 13.04, 17: 1219.45, 18: 1422.14, 19: 1355.95, 20: 402.23, 21: 1615.36, 22: 606.92, 23: 1105.60, 24: 1661.00, 25: 2198.41, 26: 1436.02, 27: 1125.43, 28: 2183.25, 29: 2432.38, 30: 1884.02, 31: 280.03, 32: 3190.70, 33: 1884.71, 34: 1326.22, 35: 830.83, 36: 2953.10, 37: 1042.70, 38: 2499.04, 39: 2144.23, 40: 2715.52, 41: 1666.73, 42: 2203.00, 43: 2332.03, 44: 391.28, 45: 2146.92, 46: 595.18, 47: 2700.79, 48: 1037.10, 49: 2305.31, 50: 1451.16, 51: 2800.17, 52: 1418.82, 53: 2212.26, 54: 1728.45, 55: 1702.58, 56: 1457.50, 57: 1285.22, 58: 370.47, 59: 902.77, 60: 1502.70, 61: 1051.70, 62: 902.70, 63: 2120.79, 64: 1915.41, 65: 1893.37, 66: 1425.29, 67: 2090.68, 68: 1889.44, 69: 1767.32, 70: 2677.85, 71: 538.16, 72: 2129.61, 73: 364.92, 74: 1386.39, 75: 3224.59, 76: 986.43, 77: 2779.34, 78: 1248.91, 79: 1846.29, 80: 1708.17, 81: 2819.89, 82: 1747.40, 83: 848.07, 84: 2146.06, 85: 1354.89, 86: 1492.38, 87: 1502.97, 88: 1820.12, 89: 1049.49, 90: 478.87, 91: 1240.45, 92: 1080.60, 93: 1555.12, 94: 3056.80, 95: 2724.89, 96: 1622.85, 97: 565.10, 98: 1057.65, 99: 2730.56},
15: {, 0: 1259.36, 1: 2830.61, 2: 3482.28, 3: 624.77, 4: 3770.10, 5: 867.14, 6: 2670.96, 7: 1210.84, 8: 2654.91, 9: 769.80, 10: 1487.71, 11: 2735.86, 12: 3756.48, 13: 3622.68, 14: 1560.85, 16: 1552.22, 17: 399.41, 18: 523.32, 19: 2584.53, 20: 1162.01, 21: 70.18, 22: 1885.91, 23: 578.07, 24: 2452.44, 25: 839.80, 26: 2730.46, 27: 1674.99, 28: 3322.44, 29: 3403.92, 30: 1387.55, 31: 1562.87, 32: 3848.77, 33: 3035.95, 34: 2688.48, 35: 876.62, 36: 3761.28, 37: 674.11, 38: 3356.25, 39: 2498.69, 40: 3931.97, 41: 1333.69, 42: 3462.08, 43: 2861.57, 44: 1783.54, 45: 3343.23, 46: 1367.09, 47: 3778.62, 48: 820.29, 49: 2924.85, 50: 2380.74, 51: 3731.50, 52: 255.69, 53: 2503.87, 54: 2922.55, 55: 1020.65, 56: 2579.87, 57: 1977.58, 58: 1247.62, 59: 2226.07, 60: 2302.57, 61: 2365.29, 62: 1010.03, 63: 2527.81, 64: 630.89, 65: 534.20, 66: 1802.52, 67: 2868.85, 68: 2464.08, 69: 214.85, 70: 3873.84, 71: 1023.14, 72: 2756.81, 73: 1211.14, 74: 755.79, 75: 3845.84, 76: 2189.99, 77: 3699.19, 78: 315.63, 79: 1301.41, 80: 2476.31, 81: 3370.58, 82: 2933.65, 83: 714.58, 84: 2990.09, 85: 2656.63, 86: 2499.23, 87: 58.14, 88: 1495.20, 89: 640.10, 90: 1696.62, 91: 1075.38, 92: 1670.48, 93: 160.70, 94: 3611.10, 95: 3633.06, 96: 804.56, 97: 1780.90, 98: 950.96, 99: 3889.77},
16: {, 0: 1017.53, 1: 2455.10, 2: 2292.55, 3: 1789.49, 4: 2946.54, 5: 1012.35, 6: 1557.71, 7: 1421.95, 8: 1568.60, 9: 794.77, 10: 115.26, 11: 1514.44, 12: 3133.57, 13: 2483.58, 14: 13.04, 15: 1552.22, 17: 1209.45, 18: 1417.27, 19: 1368.89, 20: 392.62, 21: 1606.45, 22: 619.32, 23: 1094.66, 24: 1672.00, 25: 2192.99, 26: 1449.06, 27: 1132.69, 28: 2196.18, 29: 2444.89, 30: 1885.13, 31: 289.18, 32: 3202.12, 33: 1897.61, 34: 1339.20, 35: 818.91, 36: 2965.13, 37: 1031.30, 38: 2511.11, 39: 2152.90, 40: 2728.56, 41: 1668.38, 42: 2216.04, 43: 2342.15, 44: 404.01, 45: 2159.94, 46: 599.47, 47: 2713.67, 48: 1034.26, 49: 2315.97, 50: 1462.76, 51: 2812.64, 52: 1411.67, 53: 2220.57, 54: 1741.41, 55: 1701.37, 56: 1470.14, 57: 1294.60, 58: 358.24, 59: 915.76, 60: 1513.50, 61: 1064.72, 62: 901.89, 63: 2129.80, 64: 1910.08, 65: 1887.35, 66: 1432.33, 67: 2102.09, 68: 1899.30, 69: 1759.04, 70: 2690.88, 71: 529.92, 72: 2140.14, 73: 354.15, 74: 1383.58, 75: 3235.83, 76: 999.03, 77: 2791.77, 78: 1240.62, 79: 1846.85, 80: 1719.08, 81: 2830.54, 82: 1760.34, 83: 839.03, 84: 2157.86, 85: 1367.93, 86: 1504.49, 87: 1494.30, 88: 1822.46, 89: 1044.18, 90: 489.80, 91: 1240.89, 92: 1088.02, 93: 1545.52, 94: 3067.61, 95: 2737.26, 96: 1620.09, 97: 576.64, 98: 1044.89, 99: 2743.57},
17: {, 0: 1167.47, 1: 2836.89, 2: 3286.38, 3: 928.90, 4: 3681.03, 5: 781.95, 6: 2480.83, 7: 1257.13, 8: 2471.47, 9: 493.38, 10: 1161.23, 11: 2518.00, 12: 3720.49, 13: 3443.49, 14: 1219.45, 15: 399.41, 16: 1209.45, 18: 671.10, 19: 2364.54, 20: 817.66, 21: 431.61, 22: 1624.77, 23: 181.34, 24: 2340.54, 25: 1218.25, 26: 2495.54, 27: 1567.84, 28: 3142.61, 29: 3271.96, 30: 1548.57, 31: 1269.54, 32: 3808.05, 33: 2847.60, 34: 2432.79, 35: 478.98, 36: 3679.44, 37: 276.85, 38: 3254.09, 39: 2500.42, 40: 3737.01, 41: 1438.28, 42: 3249.02, 43: 2831.83, 44: 1490.72, 45: 3147.30, 46: 1148.16, 47: 3622.84, 48: 742.85, 49: 2873.96, 50: 2230.73, 51: 3615.92, 52: 433.13, 53: 2521.97, 54: 2719.96, 55: 1198.41, 56: 2387.99, 57: 1863.09, 58: 879.93, 59: 1970.06, 60: 2181.48, 61: 2116.21, 62: 883.24, 63: 2517.29, 64: 977.88, 65: 899.07, 66: 1754.43, 67: 2775.40, 68: 2407.89, 69: 612.08, 70: 3684.53, 71: 697.25, 72: 2698.60, 73: 857.32, 74: 853.80, 75: 3814.70, 76: 1962.94, 77: 3586.25, 78: 229.65, 79: 1468.70, 80: 2371.36, 81: 3348.78, 82: 2733.48, 83: 386.80, 84: 2882.94, 85: 2418.08, 86: 2334.45, 87: 346.17, 88: 1615.11, 89: 535.09, 90: 1433.20, 91: 1076.75, 92: 1552.28, 93: 341.92, 94: 3593.24, 95: 3522.24, 96: 996.83, 97: 1525.91, 98: 572.55, 99: 3711.65},
18: {, 0: 813.71, 1: 2310.22, 2: 3065.98, 3: 372.34, 4: 3277.01, 5: 473.70, 6: 2259.77, 7: 691.03, 8: 2237.66, 9: 664.25, 10: 1323.96, 11: 2352.09, 12: 3243.40, 13: 3190.11, 14: 1422.14, 15: 523.32, 16: 1417.27, 17: 671.10, 19: 2206.18, 20: 1074.81, 21: 587.55, 22: 1583.62, 23: 819.50, 24: 1981.89, 25: 780.19, 26: 2366.35, 27: 1218.76, 28: 2893.12, 29: 2937.20, 30: 889.14, 31: 1331.91, 32: 3336.85, 33: 2617.58, 34: 2351.40, 35: 1007.93, 36: 3264.86, 37: 896.42, 38: 2871.82, 39: 1979.83, 40: 3511.02, 41: 813.26, 42: 3062.93, 43: 2349.15, 44: 1535.82, 45: 2928.37, 46: 1046.21, 47: 3326.14, 48: 431.80, 49: 2419.20, 50: 1939.26, 51: 3252.62, 52: 279.87, 53: 1982.40, 54: 2519.55, 55: 530.08, 56: 2172.08, 57: 1517.58, 58: 1205.72, 59: 1902.23, 60: 1840.56, 61: 2027.76, 62: 630.60, 63: 2011.51, 64: 497.11, 65: 497.12, 66: 1306.08, 67: 2382.97, 68: 1963.40, 69: 592.00, 70: 3448.19, 71: 923.64, 72: 2254.93, 73: 1138.32, 74: 234.08, 75: 3331.30, 76: 1830.41, 77: 3218.94, 78: 441.49, 79: 806.11, 80: 2001.03, 81: 2854.63, 82: 2528.07, 83: 711.00, 84: 2510.97, 85: 2298.44, 86: 2067.94, 87: 506.74, 88: 979.61, 89: 375.59, 90: 1408.79, 91: 576.94, 92: 1223.06, 93: 667.47, 94: 3093.82, 95: 3151.94, 96: 325.86, 97: 1475.71, 98: 1209.69, 99: 3454.29},
19: {, 0: 1404.84, 1: 1603.24, 2: 934.01, 3: 2508.21, 4: 1655.73, 5: 1743.56, 6: 242.20, 7: 1728.84, 8: 281.31, 9: 1871.21, 10: 1334.15, 11: 153.58, 12: 1950.94, 13: 1116.20, 14: 1355.95, 15: 2584.53, 16: 1368.89, 17: 2364.54, 18: 2206.18, 20: 1648.17, 21: 2652.60, 22: 769.80, 23: 2316.19, 24: 730.00, 25: 2911.96, 26: 180.57, 27: 1058.19, 28: 827.37, 29: 1116.94, 30: 2085.82, 31: 1153.17, 32: 1997.45, 33: 530.08, 34: 293.02, 35: 2113.01, 36: 1688.04, 37: 2283.82, 38: 1243.56, 39: 1440.40, 40: 1380.63, 41: 1875.85, 42: 884.51, 43: 1386.55, 44: 967.34, 45: 797.56, 46: 1222.44, 47: 1346.47, 48: 1789.66, 49: 1282.08, 50: 501.88, 51: 1483.34, 52: 2358.86, 53: 1542.05, 54: 372.93, 55: 2148.63, 56: 203.75, 57: 844.08, 58: 1694.55, 59: 455.93, 60: 686.72, 61: 315.84, 62: 1588.68, 63: 1374.05, 64: 2654.98, 65: 2689.69, 66: 1188.45, 67: 976.57, 68: 1077.00, 69: 2746.32, 70: 1335.00, 71: 1708.01, 72: 1154.25, 73: 1649.46, 74: 2032.81, 75: 2052.31, 76: 402.06, 77: 1468.42, 78: 2285.95, 79: 2106.70, 80: 775.34, 81: 1748.05, 82: 391.49, 83: 1986.58, 84: 956.06, 85: 155.43, 86: 390.13, 87: 2534.78, 88: 1921.82, 89: 1946.11, 90: 951.33, 91: 1694.17, 92: 1033.16, 93: 2645.30, 94: 1949.05, 95: 1422.26, 96: 2211.03, 97: 852.68, 98: 2381.77, 99: 1379.06},
20: {, 0: 885.11, 1: 2501.84, 2: 2582.16, 3: 1444.92, 4: 3135.40, 5: 737.13, 6: 1806.20, 7: 1228.33, 8: 1807.97, 9: 420.39, 10: 348.93, 11: 1800.00, 12: 3267.83, 13: 2760.06, 14: 402.23, 15: 1162.01, 16: 392.62, 17: 817.66, 18: 1074.81, 19: 1648.17, 21: 1215.02, 22: 879.07, 23: 711.42, 24: 1810.48, 25: 1836.16, 26: 1754.46, 27: 1138.57, 28: 2464.29, 29: 2665.35, 30: 1671.50, 31: 496.79, 32: 3344.29, 33: 2163.85, 34: 1666.85, 35: 465.97, 36: 3146.30, 37: 657.17, 38: 2698.19, 39: 2179.06, 40: 3027.31, 41: 1473.91, 42: 2522.35, 43: 2426.90, 44: 705.09, 45: 2445.60, 46: 571.36, 47: 2970.66, 48: 745.07, 49: 2426.50, 50: 1637.74, 51: 3027.41, 52: 1034.57, 53: 2231.70, 54: 2018.51, 55: 1432.22, 56: 1714.30, 57: 1372.41, 58: 150.86, 59: 1215.63, 60: 1645.99, 61: 1366.43, 62: 674.44, 63: 2170.25, 64: 1555.77, 65: 1522.78, 66: 1415.73, 67: 2253.98, 68: 1979.45, 69: 1370.75, 70: 2983.12, 71: 151.71, 72: 2246.86, 73: 66.01, 74: 1083.66, 75: 3368.21, 76: 1252.62, 77: 3002.80, 78: 853.00, 79: 1619.41, 80: 1852.20, 81: 2935.03, 82: 2035.22, 83: 447.60, 84: 2332.05, 85: 1674.06, 86: 1708.91, 87: 1103.96, 88: 1644.19, 89: 700.16, 90: 698.72, 91: 1027.19, 92: 1102.43, 93: 1152.91, 94: 3178.14, 95: 2943.93, 96: 1316.80, 97: 798.11, 98: 738.24, 99: 3025.33},
21: {, 0: 1329.53, 1: 2896.75, 2: 3551.54, 3: 660.87, 4: 3839.75, 5: 937.24, 6: 2740.23, 7: 1276.92, 8: 2724.37, 9: 829.61, 10: 1544.61, 11: 2804.09, 12: 3824.39, 13: 3692.41, 14: 1615.36, 15: 70.18, 16: 1606.45, 17: 431.61, 18: 587.55, 19: 2652.60, 20: 1215.02, 22: 1950.85, 23: 604.82, 24: 2522.57, 25: 842.33, 26: 2797.79, 27: 1745.16, 28: 3392.11, 29: 3474.10, 30: 1442.51, 31: 1624.28, 32: 3916.86, 33: 3105.36, 34: 2754.44, 35: 910.53, 36: 3830.77, 37: 700.26, 38: 3426.19, 39: 2565.30, 40: 4001.32, 41: 1394.93, 42: 3530.72, 43: 2929.52, 44: 1845.36, 45: 3412.47, 46: 1434.13, 47: 3848.71, 48: 890.41, 49: 2993.60, 50: 2450.78, 51: 3801.57, 52: 324.58, 53: 2569.52, 54: 2991.47, 55: 1075.60, 56: 2649.06, 57: 2047.76, 58: 1295.64, 59: 2291.72, 60: 2372.75, 61: 2431.54, 62: 1079.75, 63: 2595.04, 64: 652.33, 65: 549.18, 66: 1871.74, 67: 2938.72, 68: 2533.17, 69: 186.13, 70: 3943.35, 71: 1078.69, 72: 2825.86, 73: 1262.40, 74: 820.95, 75: 3913.52, 76: 2257.49, 77: 3769.23, 78: 376.97, 79: 1355.98, 80: 2546.38, 81: 3437.96, 82: 3002.66, 83: 767.52, 84: 3060.13, 85: 2723.72, 86: 2569.07, 87: 118.60, 88: 1554.38, 89: 709.19, 90: 1761.14, 91: 1144.01, 92: 1740.65, 93: 133.65, 94: 3678.20, 95: 3703.08, 96: 859.62, 97: 1846.20, 98: 963.97, 99: 3959.55},
22: {, 0: 882.22, 1: 1921.43, 2: 1703.47, 3: 1928.37, 4: 2328.64, 5: 1110.79, 6: 942.25, 7: 1295.39, 8: 950.85, 9: 1136.55, 10: 569.01, 11: 921.09, 12: 2531.76, 13: 1884.43, 14: 606.92, 15: 1885.91, 16: 619.32, 17: 1624.77, 18: 1583.62, 19: 769.80, 20: 879.07, 21: 1950.85, 23: 1560.37, 24: 1083.29, 25: 2345.12, 26: 878.43, 27: 749.10, 28: 1591.32, 29: 1825.87, 30: 1739.57, 31: 383.38, 32: 2596.65, 33: 1291.04, 34: 808.28, 35: 1344.63, 36: 2348.49, 37: 1521.93, 38: 1894.12, 39: 1647.98, 40: 2148.24, 41: 1510.63, 42: 1644.31, 43: 1778.35, 44: 220.81, 45: 1567.35, 46: 537.63, 47: 2104.03, 48: 1151.82, 49: 1733.90, 50: 856.98, 51: 2193.43, 52: 1683.08, 53: 1729.37, 54: 1141.47, 55: 1676.77, 56: 853.15, 57: 785.49, 58: 926.88, 59: 345.32, 60: 934.14, 61: 493.04, 62: 955.59, 63: 1610.98, 64: 2069.13, 65: 2080.69, 66: 1029.89, 67: 1498.81, 68: 1350.30, 69: 2066.96, 70: 2104.34, 71: 947.27, 72: 1563.50, 73: 879.72, 74: 1458.53, 75: 2634.44, 76: 382.24, 77: 2172.46, 78: 1575.31, 79: 1729.44, 80: 1132.86, 81: 2246.67, 82: 1158.86, 83: 1239.90, 84: 1545.29, 85: 798.91, 86: 887.39, 87: 1832.30, 88: 1621.67, 89: 1266.82, 90: 191.64, 91: 1180.86, 92: 702.28, 93: 1926.24, 94: 2478.33, 95: 2117.98, 96: 1674.13, 97: 107.94, 98: 1612.04, 99: 2148.45},
23: {, 0: 1206.07, 1: 2894.56, 2: 3245.72, 3: 1101.31, 4: 3691.82, 5: 843.28, 6: 2447.79, 7: 1350.99, 8: 2442.03, 9: 473.63, 10: 1060.32, 11: 2469.70, 12: 3755.49, 13: 3410.87, 14: 1105.60, 15: 578.07, 16: 1094.66, 17: 181.34, 18: 819.50, 19: 2316.19, 20: 711.42, 21: 604.82, 22: 1560.37, 24: 2348.33, 25: 1399.30, 26: 2437.88, 27: 1588.46, 28: 3110.98, 29: 3263.86, 30: 1676.66, 31: 1190.53, 32: 3840.61, 33: 2813.07, 34: 2363.64, 35: 313.40, 36: 3693.63, 37: 96.05, 38: 3260.49, 39: 2558.45, 40: 3695.14, 41: 1549.19, 42: 3199.38, 43: 2873.87, 44: 1408.02, 45: 3107.23, 46: 1120.21, 47: 3601.44, 48: 810.63, 49: 2906.27, 50: 2220.68, 51: 3614.33, 52: 603.68, 53: 2586.75, 54: 2678.63, 55: 1337.22, 56: 2354.74, 57: 1875.11, 58: 748.95, 59: 1904.53, 60: 2186.36, 61: 2053.38, 62: 917.99, 63: 2569.93, 64: 1156.22, 65: 1079.50, 66: 1799.09, 67: 2788.63, 68: 2441.20, 69: 788.38, 70: 3645.79, 71: 613.94, 72: 2728.73, 73: 740.77, 74: 979.40, 75: 3851.53, 76: 1914.37, 77: 3586.05, 78: 386.26, 79: 1599.88, 80: 2382.22, 81: 3391.59, 82: 2693.36, 83: 338.92, 84: 2888.97, 85: 2358.90, 86: 2315.88, 87: 526.27, 88: 1728.53, 89: 612.41, 90: 1370.61, 91: 1159.04, 92: 1567.83, 93: 500.99, 94: 3636.77, 95: 3523.32, 96: 1144.02, 97: 1466.90, 98: 397.34, 99: 3678.59},
24: {, 0: 1194.02, 1: 893.07, 2: 1183.94, 3: 2203.69, 4: 1343.50, 5: 1590.11, 6: 555.79, 7: 1355.06, 8: 506.32, 9: 1874.71, 10: 1592.27, 11: 767.61, 12: 1464.18, 13: 1254.77, 14: 1661.00, 15: 2452.44, 16: 1672.00, 17: 2340.54, 18: 1981.89, 19: 730.00, 20: 1810.48, 21: 2522.57, 22: 1083.29, 23: 2348.33, 25: 2567.27, 26: 885.13, 27: 779.16, 28: 980.21, 29: 955.30, 30: 1587.56, 31: 1390.69, 32: 1536.70, 33: 774.50, 34: 1023.00, 35: 2231.70, 36: 1346.74, 37: 2345.56, 38: 913.59, 39: 710.72, 40: 1594.48, 41: 1417.24, 42: 1242.41, 43: 708.47, 44: 1299.87, 45: 1062.26, 46: 1254.13, 47: 1352.18, 48: 1636.02, 49: 650.76, 50: 254.23, 51: 1280.21, 52: 2201.33, 53: 812.86, 54: 771.11, 55: 1757.08, 56: 535.73, 57: 478.28, 58: 1909.41, 59: 963.76, 60: 164.71, 61: 909.48, 62: 1462.85, 63: 644.15, 64: 2347.93, 65: 2410.17, 66: 706.21, 67: 444.53, 68: 347.00, 69: 2569.44, 70: 1521.87, 71: 1809.03, 72: 483.80, 73: 1838.05, 74: 1765.36, 75: 1565.92, 76: 780.86, 77: 1248.88, 78: 2198.37, 79: 1632.34, 80: 51.48, 81: 1163.52, 82: 764.23, 83: 2011.27, 84: 542.44, 85: 884.30, 86: 340.21, 87: 2413.33, 88: 1403.70, 89: 1833.70, 90: 1182.21, 91: 1407.61, 92: 789.52, 93: 2552.33, 94: 1397.06, 95: 1183.73, 96: 1881.41, 97: 1098.60, 98: 2528.22, 99: 1505.96},
25: {, 0: 1510.64, 1: 2670.97, 2: 3716.83, 3: 417.06, 4: 3765.14, 5: 1239.00, 6: 2931.32, 7: 1216.00, 8: 2902.40, 9: 1416.40, 10: 2102.43, 11: 3050.37, 12: 3639.89, 13: 3816.03, 14: 2198.41, 15: 839.80, 16: 2192.99, 17: 1218.25, 18: 780.19, 19: 2911.96, 20: 1836.16, 21: 842.33, 22: 2345.12, 23: 1399.30, 24: 2567.27, 26: 3081.17, 27: 1869.37, 28: 3528.61, 29: 3504.57, 30: 1078.63, 31: 2110.96, 32: 3738.78, 33: 3273.02, 34: 3085.30, 35: 1670.49, 36: 3741.29, 37: 1493.83, 38: 3395.85, 39: 2373.49, 40: 4149.78, 41: 1173.27, 42: 3734.70, 43: 2775.70, 44: 2311.68, 45: 3583.14, 46: 1811.78, 47: 3915.97, 48: 1201.82, 49: 2879.38, 50: 2579.09, 51: 3784.33, 52: 825.11, 53: 2343.63, 54: 3195.29, 55: 812.50, 56: 2849.48, 57: 2144.39, 58: 1956.18, 59: 2649.73, 60: 2448.95, 61: 2765.92, 62: 1390.95, 63: 2425.98, 64: 283.34, 65: 323.20, 66: 1861.10, 67: 2915.95, 68: 2463.06, 69: 669.16, 70: 4080.99, 71: 1684.60, 72: 2737.59, 73: 1896.99, 74: 890.02, 75: 3715.82, 76: 2558.13, 77: 3747.58, 78: 1043.35, 79: 1002.88, 80: 2574.95, 81: 3240.19, 82: 3200.73, 83: 1427.27, 84: 3058.68, 85: 3018.81, 86: 2718.66, 87: 882.16, 88: 1255.83, 89: 1148.95, 90: 2177.37, 91: 1217.87, 92: 1886.56, 93: 975.55, 94: 3462.05, 95: 3679.44, 96: 702.16, 97: 2237.87, 98: 1786.11, 99: 4071.99},
26: {, 0: 1571.56, 1: 1737.34, 2: 846.13, 3: 2675.06, 4: 1675.52, 5: 1899.80, 6: 345.68, 7: 1904.64, 8: 394.83, 9: 2003.40, 10: 1427.02, 11: 136.49, 12: 2008.76, 13: 1046.56, 14: 1436.02, 15: 2730.46, 16: 1449.06, 17: 2495.54, 18: 2366.35, 19: 180.57, 20: 1754.46, 21: 2797.79, 22: 878.43, 23: 2437.88, 24: 885.13, 25: 3081.17, 27: 1234.69, 28: 778.05, 29: 1124.94, 30: 2265.78, 31: 1257.75, 32: 2047.42, 33: 503.84, 34: 178.22, 35: 2220.42, 36: 1714.16, 37: 2400.36, 38: 1284.37, 39: 1594.81, 40: 1279.63, 41: 2055.01, 42: 769.02, 43: 1510.20, 44: 1057.01, 45: 717.68, 46: 1363.85, 47: 1299.02, 48: 1945.38, 49: 1394.11, 50: 671.25, 51: 1482.09, 52: 2509.82, 53: 1697.46, 54: 335.41, 55: 2323.76, 56: 349.59, 57: 1024.64, 58: 1788.12, 59: 539.33, 60: 857.42, 61: 388.29, 62: 1743.70, 63: 1525.66, 64: 2821.49, 65: 2853.28, 66: 1369.00, 67: 1079.38, 68: 1230.49, 69: 2897.43, 70: 1242.33, 71: 1825.48, 72: 1280.44, 73: 1749.99, 74: 2198.62, 75: 2108.31, 76: 540.77, 77: 1471.81, 78: 2427.70, 79: 2285.96, 80: 927.37, 81: 1836.78, 82: 358.45, 83: 2113.52, 84: 1035.77, 85: 81.15, 86: 546.80, 87: 2679.52, 88: 2102.26, 89: 2094.78, 90: 1067.28, 91: 1864.20, 92: 1208.20, 93: 2785.06, 94: 2025.08, 95: 1432.25, 96: 2381.41, 97: 971.39, 98: 2480.05, 99: 1299.72},
27: {, 0: 415.64, 1: 1363.37, 2: 1855.78, 3: 1478.05, 4: 2113.83, 5: 811.01, 6: 1062.02, 7: 670.86, 8: 1033.99, 9: 1117.59, 10: 1026.08, 11: 1188.35, 12: 2170.08, 13: 1972.46, 14: 1125.43, 15: 1674.99, 16: 1132.69, 17: 1567.84, 18: 1218.76, 19: 1058.19, 20: 1138.57, 21: 1745.16, 22: 749.10, 23: 1588.46, 24: 779.16, 25: 1869.37, 26: 1234.69, 28: 1676.97, 29: 1728.96, 30: 1049.92, 31: 851.12, 32: 2253.62, 33: 1408.71, 34: 1272.53, 35: 1508.47, 36: 2111.61, 37: 1595.18, 38: 1689.89, 39: 1041.67, 40: 2296.86, 41: 829.40, 42: 1866.15, 43: 1300.96, 44: 885.27, 45: 1719.87, 46: 571.35, 47: 2109.26, 48: 857.03, 49: 1320.48, 50: 721.67, 51: 2059.37, 52: 1425.60, 53: 1099.14, 54: 1325.93, 55: 1091.15, 56: 980.40, 57: 302.60, 58: 1265.10, 59: 911.41, 60: 627.62, 61: 981.90, 62: 685.93, 63: 1031.72, 64: 1625.06, 65: 1673.49, 66: 300.85, 67: 1208.02, 68: 858.52, 69: 1799.20, 70: 2232.26, 71: 1099.24, 72: 1141.86, 73: 1181.68, 74: 1015.33, 75: 2267.42, 76: 760.49, 77: 2027.98, 78: 1419.61, 79: 1060.06, 80: 806.31, 81: 1816.15, 82: 1331.54, 83: 1256.96, 84: 1320.25, 85: 1181.79, 86: 854.78, 87: 1634.96, 88: 905.28, 89: 1054.88, 90: 709.66, 91: 659.70, 92: 47.68, 93: 1773.18, 94: 2061.21, 95: 1962.63, 96: 1167.59, 97: 683.70, 98: 1808.18, 99: 2235.90},
28: {, 0: 2080.50, 1: 1500.97, 2: 214.02, 3: 3149.96, 4: 972.75, 5: 2458.47, 6: 663.19, 7: 2312.65, 8: 671.25, 9: 2651.65, 10: 2158.99, 11: 685.81, 12: 1397.14, 13: 301.04, 14: 2183.25, 15: 3322.44, 16: 2196.18, 17: 3142.61, 18: 2893.12, 19: 827.37, 20: 2464.29, 21: 3392.11, 22: 1591.32, 23: 3110.98, 24: 980.21, 25: 3528.61, 26: 778.05, 27: 1676.97, 29: 440.52, 30: 2567.75, 31: 1973.45, 32: 1409.07, 33: 300.50, 34: 937.85, 35: 2926.06, 36: 1025.22, 37: 3086.04, 38: 683.63, 39: 1517.11, 40: 621.34, 41: 2394.00, 42: 337.92, 43: 1244.44, 44: 1793.99, 45: 148.41, 46: 1995.24, 47: 522.02, 48: 2505.55, 49: 1086.10, 50: 955.42, 51: 742.65, 52: 3082.37, 53: 1614.31, 54: 456.18, 55: 2724.46, 56: 756.24, 57: 1386.96, 58: 2518.16, 59: 1282.53, 60: 1080.95, 61: 1137.62, 62: 2312.42, 63: 1436.67, 64: 3296.29, 65: 3349.19, 66: 1676.25, 67: 808.01, 68: 1210.75, 69: 3464.42, 70: 555.30, 71: 2512.74, 72: 1074.73, 73: 2469.58, 74: 2692.19, 75: 1485.90, 76: 1212.05, 77: 742.05, 78: 3039.50, 79: 2611.67, 80: 986.22, 81: 1355.38, 82: 436.32, 83: 2775.34, 84: 670.23, 85: 854.16, 86: 825.68, 87: 3276.92, 88: 2383.80, 89: 2684.01, 90: 1765.64, 91: 2335.40, 92: 1670.19, 93: 3400.61, 94: 1477.35, 95: 719.61, 96: 2832.83, 97: 1666.23, 98: 3201.24, 99: 569.17},
29: {, 0: 2144.57, 1: 1190.74, 2: 592.08, 3: 3152.30, 4: 553.17, 5: 2538.56, 6: 894.88, 7: 2301.67, 8: 878.08, 9: 2792.86, 10: 2390.68, 11: 1005.20, 12: 956.62, 13: 482.37, 14: 2432.38, 15: 3403.92, 16: 2444.89, 17: 3271.96, 18: 2937.20, 19: 1116.94, 20: 2665.35, 21: 3474.10, 22: 1825.87, 23: 3263.86, 24: 955.30, 25: 3504.57, 26: 1124.94, 27: 1728.96, 28: 440.52, 30: 2482.34, 31: 2194.18, 32: 970.16, 33: 625.16, 34: 1299.58, 35: 3113.60, 36: 597.82, 37: 3251.10, 38: 261.24, 39: 1291.18, 40: 793.80, 41: 2337.78, 42: 754.54, 43: 944.26, 44: 2042.11, 45: 585.75, 46: 2146.54, 47: 427.13, 48: 2584.98, 49: 783.60, 50: 1043.20, 51: 368.64, 52: 3154.24, 53: 1375.91, 54: 790.87, 55: 2692.06, 56: 977.58, 57: 1426.37, 58: 2739.56, 59: 1560.67, 60: 1101.36, 61: 1430.83, 62: 2405.15, 63: 1213.41, 64: 3295.12, 65: 3361.02, 66: 1650.23, 67: 601.84, 68: 1061.70, 69: 3524.35, 70: 711.14, 71: 2691.15, 72: 838.50, 73: 2680.53, 74: 2720.01, 75: 1045.78, 76: 1446.57, 77: 351.57, 78: 3142.15, 79: 2538.39, 80: 938.04, 81: 941.76, 82: 767.57, 83: 2924.95, 84: 450.87, 85: 1189.93, 86: 956.66, 87: 3363.45, 88: 2294.63, 89: 2778.52, 90: 1979.45, 91: 2362.63, 92: 1734.41, 93: 3499.21, 94: 1042.93, 95: 307.42, 96: 2828.69, 97: 1882.18, 98: 3401.48, 99: 643.69},
30: {, 0: 886.71, 1: 1592.38, 2: 2769.95, 3: 844.35, 4: 2700.64, 5: 944.03, 6: 2040.95, 7: 464.97, 8: 2002.81, 9: 1366.02, 10: 1771.01, 11: 2201.49, 12: 2561.28, 13: 2838.51, 14: 1884.02, 15: 1387.55, 16: 1885.13, 17: 1548.57, 18: 889.14, 19: 2085.82, 20: 1671.50, 21: 1442.51, 22: 1739.57, 23: 1676.66, 24: 1587.56, 25: 1078.63, 26: 2265.78, 27: 1049.92, 28: 2567.75, 29: 2482.34, 31: 1675.44, 32: 2660.23, 33: 2344.64, 34: 2318.39, 35: 1793.80, 36: 2673.49, 37: 1739.56, 38: 2349.33, 39: 1297.85, 40: 3180.21, 41: 229.02, 42: 2816.00, 43: 1702.52, 44: 1806.26, 45: 2644.60, 46: 1314.16, 47: 2904.13, 48: 948.87, 49: 1813.65, 50: 1661.91, 51: 2737.27, 52: 1165.37, 53: 1265.17, 54: 2299.88, 55: 366.96, 56: 1973.10, 57: 1246.47, 58: 1822.14, 59: 1955.69, 60: 1500.71, 61: 2031.79, 62: 1000.98, 63: 1353.63, 64: 951.13, 65: 1052.91, 66: 910.38, 67: 1882.71, 68: 1422.65, 69: 1380.56, 70: 3106.05, 71: 1546.43, 72: 1682.10, 73: 1736.07, 74: 697.40, 75: 2637.32, 76: 1810.37, 77: 2699.37, 78: 1321.00, 79: 87.21, 80: 1584.06, 81: 2161.56, 82: 2300.21, 83: 1471.85, 84: 2031.61, 85: 2219.83, 86: 1808.18, 87: 1383.13, 88: 187.77, 89: 1092.47, 90: 1632.26, 91: 648.68, 92: 1086.58, 93: 1542.80, 94: 2384.07, 95: 2631.36, 96: 583.06, 97: 1648.81, 98: 2044.10, 99: 3081.99},
31: {, 0: 790.23, 1: 2165.92, 2: 2086.78, 3: 1696.56, 4: 2683.12, 5: 880.78, 6: 1320.12, 7: 1210.89, 8: 1325.47, 9: 795.62, 10: 201.85, 11: 1304.35, 12: 2854.36, 13: 2267.40, 14: 280.03, 15: 1562.87, 16: 289.18, 17: 1269.54, 18: 1331.91, 19: 1153.17, 20: 496.79, 21: 1624.28, 22: 383.38, 23: 1190.53, 24: 1390.69, 25: 2110.96, 26: 1257.75, 27: 851.12, 28: 1973.45, 29: 2194.18, 30: 1675.44, 32: 2924.79, 33: 1673.00, 34: 1174.00, 35: 962.75, 36: 2698.94, 37: 1146.34, 38: 2246.26, 39: 1864.40, 40: 2531.04, 41: 1451.52, 42: 2025.57, 43: 2054.51, 44: 221.84, 45: 1950.72, 46: 361.33, 47: 2484.07, 48: 913.09, 49: 2031.29, 50: 1190.12, 51: 2559.87, 52: 1383.37, 53: 1933.05, 54: 1524.69, 55: 1534.09, 56: 1229.48, 57: 1005.45, 58: 546.88, 59: 719.24, 60: 1230.39, 61: 869.87, 62: 743.27, 63: 1840.75, 64: 1828.60, 65: 1822.98, 66: 1151.84, 67: 1825.26, 68: 1610.85, 69: 1756.40, 70: 2487.61, 71: 577.29, 72: 1854.62, 73: 496.46, 74: 1252.95, 75: 2956.32, 76: 761.84, 77: 2537.25, 78: 1247.60, 79: 1646.48, 80: 1436.86, 81: 2545.64, 82: 1541.91, 83: 882.78, 84: 1887.69, 85: 1177.43, 86: 1243.22, 87: 1506.93, 88: 1594.01, 89: 979.46, 90: 215.24, 91: 1049.12, 92: 805.44, 93: 1585.78, 94: 2783.86, 95: 2480.71, 96: 1484.86, 97: 312.08, 98: 1228.74, 99: 2531.71},
32: {, 0: 2640.85, 1: 1069.32, 2: 1532.92, 3: 3458.92, 4: 474.66, 5: 3029.29, 6: 1756.41, 7: 2648.02, 8: 1723.49, 9: 3371.10, 10: 3126.63, 11: 1916.31, 12: 100.66, 13: 1360.58, 14: 3190.70, 15: 3848.77, 16: 3202.12, 17: 3808.05, 18: 3336.85, 19: 1997.45, 20: 3344.29, 21: 3916.86, 22: 2596.65, 23: 3840.61, 24: 1536.70, 25: 3738.78, 26: 2047.42, 27: 2253.62, 28: 1409.07, 29: 970.16, 30: 2660.23, 31: 2924.79, 33: 1571.78, 34: 2225.61, 35: 3753.26, 36: 407.77, 37: 3848.80, 38: 764.20, 39: 1371.71, 40: 1551.57, 41: 2591.49, 42: 1703.00, 43: 987.70, 44: 2817.15, 45: 1551.04, 46: 2780.89, 47: 1126.68, 48: 3071.29, 49: 934.56, 50: 1740.64, 51: 733.38, 52: 3593.20, 53: 1395.16, 54: 1726.82, 55: 2960.98, 56: 1818.68, 57: 1979.99, 58: 3445.90, 59: 2398.35, 60: 1700.08, 61: 2291.74, 62: 2927.18, 63: 1329.56, 64: 3586.74, 65: 3675.02, 66: 2056.46, 67: 1100.04, 68: 1400.45, 69: 3923.72, 70: 1481.00, 71: 3334.12, 72: 1111.96, 73: 3373.68, 74: 3103.65, 75: 92.20, 76: 2246.45, 77: 712.83, 78: 3637.16, 79: 2736.55, 80: 1493.08, 81: 499.41, 82: 1703.78, 83: 3510.57, 84: 1058.42, 85: 2101.17, 86: 1719.82, 87: 3819.33, 88: 2484.68, 89: 3278.59, 90: 2713.60, 91: 2774.04, 92: 2277.58, 93: 3971.39, 94: 311.01, 95: 707.64, 96: 3143.37, 97: 2625.68, 98: 4052.05, 99: 1366.50},
33: {, 0: 1803.87, 1: 1451.48, 2: 448.41, 3: 2886.52, 4: 1178.07, 5: 2175.13, 6: 366.90, 7: 2059.71, 8: 381.28, 9: 2355.76, 10: 1859.02, 11: 395.41, 12: 1542.65, 13: 598.02, 14: 1884.71, 15: 3035.95, 16: 1897.61, 17: 2847.60, 18: 2617.58, 19: 530.08, 20: 2163.85, 21: 3105.36, 22: 1291.04, 23: 2813.07, 24: 774.50, 25: 3273.02, 26: 503.84, 27: 1408.71, 28: 300.50, 29: 625.16, 30: 2344.64, 31: 1673.00, 32: 1571.78, 34: 675.74, 35: 2625.84, 36: 1220.25, 37: 2787.04, 38: 809.37, 39: 1401.47, 40: 896.17, 41: 2159.20, 42: 471.43, 43: 1200.28, 44: 1494.82, 45: 311.24, 46: 1699.55, 47: 816.47, 48: 2222.15, 49: 1055.88, 50: 694.72, 51: 978.46, 52: 2798.73, 53: 1503.60, 54: 168.63, 55: 2476.49, 56: 459.62, 57: 1129.32, 58: 2217.92, 59: 986.00, 60: 844.00, 61: 843.53, 62: 2026.69, 63: 1322.91, 64: 3033.44, 65: 3081.77, 66: 1439.27, 67: 741.98, 68: 1060.75, 69: 3182.71, 70: 838.63, 71: 2213.22, 72: 995.08, 73: 2169.10, 74: 2422.60, 75: 1639.01, 76: 911.55, 77: 968.92, 78: 2749.23, 79: 2382.40, 80: 793.30, 81: 1424.00, 82: 145.96, 83: 2478.19, 84: 643.61, 85: 573.89, 86: 554.59, 87: 2989.42, 88: 2164.62, 89: 2396.38, 90: 1465.17, 91: 2068.35, 92: 1397.91, 93: 3110.41, 94: 1585.32, 95: 931.43, 96: 2573.32, 97: 1365.77, 98: 2900.74, 99: 865.52},
34: {, 0: 1576.12, 1: 1893.08, 2: 983.25, 3: 2674.08, 4: 1851.22, 5: 1879.61, 6: 508.99, 7: 1934.30, 8: 555.71, 9: 1944.73, 10: 1329.08, 11: 312.20, 12: 2186.91, 13: 1192.56, 14: 1326.22, 15: 2688.48, 16: 1339.20, 17: 2432.79, 18: 2351.40, 19: 293.02, 20: 1666.85, 21: 2754.44, 22: 808.28, 23: 2363.64, 24: 1023.00, 25: 3085.30, 26: 178.22, 27: 1272.53, 28: 937.85, 29: 1299.58, 30: 2318.39, 31: 1174.00, 32: 2225.61, 33: 675.74, 35: 2131.08, 36: 1890.73, 37: 2320.25, 38: 1462.44, 39: 1733.28, 40: 1400.36, 41: 2101.24, 42: 884.98, 43: 1671.88, 44: 962.09, 45: 862.75, 46: 1324.24, 47: 1454.79, 48: 1923.91, 49: 1560.97, 50: 791.25, 51: 1653.81, 52: 2477.00, 53: 1834.79, 54: 508.72, 55: 2349.00, 56: 493.08, 57: 1096.69, 58: 1687.49, 59: 463.60, 60: 973.93, 61: 324.61, 62: 1722.40, 63: 1667.07, 64: 2819.24, 65: 2844.05, 66: 1440.09, 67: 1249.02, 68: 1370.00, 69: 2863.55, 70: 1370.35, 71: 1749.71, 72: 1440.49, 73: 1656.49, 74: 2196.94, 75: 2286.50, 76: 527.75, 77: 1644.66, 78: 2380.39, 79: 2332.21, 80: 1068.32, 81: 2011.20, 82: 532.02, 83: 2047.36, 84: 1211.06, 85: 141.06, 86: 683.12, 87: 2635.85, 88: 2162.40, 89: 2060.02, 90: 999.91, 91: 1875.14, 92: 1240.72, 93: 2733.48, 94: 2201.81, 95: 1606.57, 96: 2390.84, 97: 909.80, 98: 2380.32, 99: 1437.03},
35: {, 0: 1172.71, 1: 2857.57, 2: 3047.00, 3: 1336.01, 4: 3569.12, 5: 876.62, 6: 2265.81, 7: 1410.09, 8: 2265.54, 9: 441.19, 10: 804.48, 11: 2265.17, 12: 3672.72, 13: 3222.91, 14: 830.83, 15: 876.62, 16: 818.91, 17: 478.98, 18: 1007.93, 19: 2113.01, 20: 465.97, 21: 910.53, 22: 1344.63, 23: 313.40, 24: 2231.70, 25: 1670.49, 26: 2220.42, 27: 1508.47, 28: 2926.06, 29: 3113.60, 30: 1793.80, 31: 962.75, 32: 3753.26, 33: 2625.84, 34: 2131.08, 36: 3576.44, 37: 227.76, 38: 3133.22, 39: 2525.59, 40: 3492.76, 41: 1634.53, 42: 2988.29, 43: 2809.38, 44: 1169.00, 45: 2910.10, 46: 977.81, 47: 3429.11, 48: 858.40, 49: 2824.69, 50: 2076.90, 51: 3472.30, 52: 849.47, 53: 2565.81, 54: 2482.46, 55: 1485.16, 56: 2173.41, 57: 1773.32, 58: 461.85, 59: 1681.51, 60: 2067.20, 61: 1832.36, 62: 898.35, 63: 2527.26, 64: 1411.57, 65: 1347.41, 66: 1755.11, 67: 2676.13, 68: 2366.25, 69: 1090.48, 70: 3448.00, 71: 423.79, 72: 2645.10, 73: 475.79, 74: 1115.29, 75: 3771.41, 76: 1715.76, 77: 3446.35, 78: 627.78, 79: 1725.14, 80: 2270.21, 81: 3324.45, 82: 2498.85, 83: 322.02, 84: 2763.82, 85: 2139.99, 86: 2157.45, 87: 821.52, 88: 1814.51, 89: 702.76, 90: 1162.16, 91: 1205.60, 92: 1479.83, 93: 813.00, 94: 3569.38, 95: 3385.97, 96: 1315.77, 97: 1261.31, 98: 299.71, 99: 3488.80},
36: {, 0: 2518.19, 1: 1143.12, 2: 1133.38, 3: 3428.18, 4: 69.23, 5: 2914.20, 6: 1453.68, 7: 2590.03, 8: 1427.88, 9: 3220.14, 10: 2899.68, 11: 1589.22, 12: 433.18, 13: 954.51, 14: 2953.10, 15: 3761.28, 16: 2965.13, 17: 3679.44, 18: 3264.86, 19: 1688.04, 20: 3146.30, 21: 3830.77, 22: 2348.49, 23: 3693.63, 24: 1346.74, 25: 3741.29, 26: 1714.16, 27: 2111.61, 28: 1025.22, 29: 597.82, 30: 2673.49, 31: 2698.94, 32: 407.77, 33: 1220.25, 34: 1890.73, 35: 3576.44, 37: 3692.17, 38: 454.47, 39: 1381.28, 40: 1147.79, 41: 2571.74, 42: 1304.23, 43: 974.60, 44: 2568.72, 45: 1162.03, 46: 2598.70, 47: 720.00, 48: 2958.62, 49: 861.97, 50: 1510.85, 51: 325.68, 52: 3506.36, 53: 1432.87, 54: 1383.28, 55: 2940.58, 56: 1526.82, 57: 1818.78, 58: 3235.39, 59: 2114.94, 60: 1510.43, 61: 1995.29, 62: 2797.09, 63: 1320.60, 64: 3563.59, 65: 3643.08, 66: 1960.02, 67: 905.04, 68: 1302.00, 69: 3856.75, 70: 1075.60, 71: 3153.02, 72: 1012.79, 73: 3169.09, 74: 3036.08, 75: 496.33, 76: 1980.47, 77: 305.63, 78: 3525.83, 79: 2742.59, 80: 1311.48, 81: 646.30, 82: 1359.94, 83: 3357.30, 84: 814.26, 85: 1775.14, 86: 1461.12, 87: 3726.75, 88: 2489.62, 89: 3161.96, 90: 2484.21, 91: 2690.17, 92: 2128.07, 93: 3872.59, 94: 602.70, 95: 307.92, 96: 3105.84, 97: 2390.97, 98: 3871.60, 99: 962.93},
37: {, 0: 1224.83, 1: 2917.26, 2: 3215.88, 3: 1189.67, 4: 3688.56, 5: 878.01, 6: 2423.20, 7: 1397.24, 8: 2419.36, 9: 478.48, 10: 1004.97, 11: 2437.03, 12: 3765.05, 13: 3385.06, 14: 1042.70, 15: 674.11, 16: 1031.30, 17: 276.85, 18: 896.42, 19: 2283.82, 20: 657.17, 21: 700.26, 22: 1521.93, 23: 96.05, 24: 2345.56, 25: 1493.83, 26: 2400.36, 27: 1595.18, 28: 3086.04, 29: 3251.10, 30: 1739.56, 31: 1146.34, 32: 3848.80, 33: 2787.04, 34: 2320.25, 35: 227.76, 36: 3692.17, 38: 3255.40, 39: 2581.91, 40: 3664.23, 41: 1603.41, 42: 3164.92, 43: 2888.26, 44: 1360.45, 45: 3077.87, 46: 1104.56, 47: 3581.31, 48: 849.10, 49: 2915.42, 50: 2208.79, 51: 3604.61, 52: 692.41, 53: 2613.76, 54: 2649.24, 55: 1406.79, 56: 2330.25, 57: 1876.01, 58: 679.23, 59: 1864.17, 60: 2182.47, 61: 2014.02, 62: 938.09, 63: 2590.49, 64: 1248.34, 65: 1173.39, 66: 1817.54, 67: 2787.85, 68: 2451.74, 69: 884.17, 70: 3616.54, 71: 575.84, 72: 2737.01, 73: 679.83, 74: 1044.09, 75: 3861.99, 76: 1882.99, 77: 3577.09, 78: 471.83, 79: 1664.62, 80: 2381.00, 81: 3405.70, 82: 2664.59, 83: 338.54, 84: 2884.20, 85: 2320.75, 86: 2299.23, 87: 622.27, 88: 1783.48, 89: 659.76, 90: 1334.16, 91: 1200.65, 92: 1571.99, 93: 594.01, 94: 3651.01, 95: 3515.10, 96: 1218.66, 97: 1431.82, 98: 313.38, 99: 3652.28},
38: {, 0: 2102.31, 1: 961.14, 2: 850.57, 3: 3060.99, 4: 437.39, 5: 2499.15, 6: 1005.73, 7: 2212.89, 8: 977.49, 9: 2786.95, 10: 2446.65, 11: 1154.61, 12: 733.48, 13: 740.65, 14: 2499.04, 15: 3356.25, 16: 2511.11, 17: 3254.09, 18: 2871.82, 19: 1243.56, 20: 2698.19, 21: 3426.19, 22: 1894.12, 23: 3260.49, 24: 913.59, 25: 3395.85, 26: 1284.37, 27: 1689.89, 28: 683.63, 29: 261.24, 30: 2349.33, 31: 2246.26, 32: 764.20, 33: 809.37, 34: 1462.44, 35: 3133.22, 36: 454.47, 37: 3255.40, 39: 1104.62, 40: 1037.62, 41: 2222.84, 42: 1009.51, 43: 727.40, 44: 2114.30, 45: 831.78, 46: 2156.53, 47: 634.85, 48: 2544.53, 49: 573.81, 50: 1060.69, 51: 388.62, 52: 3103.00, 53: 1179.91, 54: 962.68, 55: 2585.82, 56: 1075.72, 57: 1391.23, 58: 2784.52, 59: 1663.08, 60: 1074.23, 61: 1546.56, 62: 2375.26, 63: 1031.14, 64: 3200.66, 65: 3273.38, 66: 1567.74, 67: 488.86, 68: 932.80, 69: 3463.12, 70: 955.26, 71: 2709.45, 72: 669.79, 73: 2719.47, 74: 2647.64, 75: 829.67, 76: 1526.24, 77: 351.76, 78: 3109.30, 79: 2411.32, 80: 883.63, 81: 680.92, 82: 939.67, 83: 2922.74, 84: 371.55, 85: 1340.15, 86: 1006.81, 87: 3319.09, 88: 2162.05, 89: 2744.59, 90: 2031.31, 91: 2294.88, 92: 1702.41, 93: 3460.98, 94: 794.48, 95: 283.64, 96: 2736.83, 97: 1937.54, 98: 3426.82, 99: 874.65},
39: {, 0: 1358.11, 1: 336.51, 2: 1730.97, 3: 2087.30, 4: 1413.02, 5: 1720.12, 6: 1258.79, 7: 1288.82, 8: 1208.59, 9: 2107.21, 10: 2052.78, 11: 1473.78, 12: 1274.76, 13: 1727.45, 14: 2144.23, 15: 2498.69, 16: 2152.90, 17: 2500.42, 18: 1979.83, 19: 1440.40, 20: 2179.06, 21: 2565.30, 22: 1647.98, 23: 2558.45, 24: 710.72, 25: 2373.49, 26: 1594.81, 27: 1041.67, 28: 1517.11, 29: 1291.18, 30: 1297.85, 31: 1864.40, 32: 1371.71, 33: 1401.47, 34: 1733.28, 35: 2525.59, 36: 1381.28, 37: 2581.91, 38: 1104.62, 40: 2065.82, 41: 1219.79, 42: 1832.99, 43: 406.74, 44: 1840.94, 45: 1636.66, 46: 1612.96, 47: 1716.09, 48: 1757.78, 49: 535.76, 50: 948.90, 51: 1480.98, 52: 2244.66, 53: 103.59, 54: 1443.40, 55: 1589.32, 56: 1245.97, 57: 867.78, 58: 2306.77, 59: 1620.90, 60: 780.44, 61: 1594.05, 62: 1643.83, 63: 80.45, 64: 2215.19, 65: 2303.39, 66: 770.73, 67: 714.66, 68: 364.32, 69: 2560.74, 70: 1984.72, 71: 2130.55, 72: 454.67, 73: 2223.21, 74: 1745.76, 75: 1357.63, 76: 1430.10, 77: 1441.52, 78: 2311.33, 79: 1370.76, 80: 667.44, 81: 878.93, 82: 1431.69, 83: 2246.48, 84: 864.43, 85: 1594.95, 86: 1050.92, 87: 2473.47, 88: 1117.66, 89: 1965.33, 90: 1686.15, 91: 1434.20, 92: 1080.53, 93: 2629.52, 94: 1114.83, 95: 1375.18, 96: 1772.88, 97: 1626.64, 98: 2823.44, 99: 1931.36},
40: {, 0: 2697.60, 1: 1984.45, 2: 450.79, 3: 3771.11, 4: 1079.08, 5: 3071.18, 6: 1261.30, 7: 2933.78, 8: 1277.44, 9: 3244.04, 10: 2705.46, 11: 1227.82, 12: 1580.21, 13: 343.63, 14: 2715.52, 15: 3931.97, 16: 2728.56, 17: 3737.01, 18: 3511.02, 19: 1380.63, 20: 3027.31, 21: 4001.32, 22: 2148.24, 23: 3695.14, 24: 1594.48, 25: 4149.78, 26: 1279.63, 27: 2296.86, 28: 621.34, 29: 793.80, 30: 3180.21, 31: 2531.04, 32: 1551.57, 33: 896.17, 34: 1400.36, 35: 3492.76, 36: 1147.79, 37: 3664.23, 38: 1037.62, 39: 2065.82, 41: 3011.28, 42: 515.40, 43: 1736.43, 44: 2335.62, 45: 590.03, 46: 2589.30, 47: 432.65, 48: 3118.21, 49: 1575.07, 50: 1575.86, 51: 826.20, 52: 3694.86, 53: 2155.87, 54: 1017.22, 55: 3344.79, 56: 1353.01, 57: 2008.19, 58: 3066.73, 59: 1817.09, 60: 1701.43, 61: 1666.35, 62: 2922.85, 63: 1986.25, 64: 3917.51, 65: 3969.81, 66: 2295.34, 67: 1354.14, 68: 1794.06, 69: 4078.59, 70: 82.68, 71: 3088.49, 72: 1611.42, 73: 3026.09, 74: 3312.19, 75: 1642.17, 76: 1781.32, 77: 854.42, 78: 3643.89, 79: 3226.64, 80: 1596.15, 81: 1688.35, 82: 1003.53, 83: 3363.22, 84: 1202.13, 85: 1360.78, 86: 1443.26, 87: 3885.23, 88: 2994.92, 89: 3292.25, 90: 2331.82, 91: 2955.87, 92: 2288.88, 93: 4005.00, 94: 1728.94, 95: 883.70, 96: 3454.16, 97: 2233.29, 98: 3757.60, 99: 185.07},
41: {, 0: 661.46, 1: 1536.06, 2: 2591.88, 3: 867.68, 4: 2593.88, 5: 764.29, 6: 1843.69, 7: 247.78, 8: 1807.64, 9: 1197.60, 10: 1553.67, 11: 1996.18, 12: 2494.47, 13: 2672.00, 14: 1666.73, 15: 1333.69, 16: 1668.38, 17: 1438.28, 18: 813.26, 19: 1875.85, 20: 1473.91, 21: 1394.93, 22: 1510.63, 23: 1549.19, 24: 1417.24, 25: 1173.27, 26: 2055.01, 27: 829.40, 28: 2394.00, 29: 2337.78, 30: 229.02, 31: 1451.52, 32: 2591.49, 33: 2159.20, 34: 2101.24, 35: 1634.53, 36: 2571.74, 37: 1603.41, 38: 2222.84, 39: 1219.79, 40: 3011.28, 42: 2629.43, 43: 1614.01, 44: 1578.39, 45: 2463.42, 46: 1090.25, 47: 2754.10, 48: 777.08, 49: 1710.04, 50: 1469.25, 51: 2611.40, 52: 1092.63, 53: 1204.76, 54: 2105.20, 55: 370.19, 56: 1772.18, 57: 1044.26, 58: 1624.76, 59: 1730.47, 60: 1316.86, 61: 1809.97, 62: 799.53, 63: 1265.19, 64: 996.11, 65: 1083.72, 66: 720.06, 67: 1744.81, 68: 1290.06, 69: 1362.22, 70: 2939.08, 71: 1356.19, 72: 1564.89, 73: 1537.35, 74: 591.49, 75: 2576.16, 76: 1588.69, 77: 2574.52, 78: 1217.72, 79: 231.14, 80: 1419.09, 81: 2097.48, 82: 2106.81, 83: 1313.68, 84: 1889.48, 85: 2006.38, 86: 1614.68, 87: 1319.89, 88: 180.42, 89: 944.77, 90: 1403.87, 91: 447.18, 92: 864.14, 93: 1480.69, 94: 2329.09, 95: 2506.37, 96: 558.35, 97: 1419.80, 98: 1899.09, 99: 2921.37},
42: {, 0: 2250.86, 1: 1834.55, 2: 171.03, 3: 3343.37, 4: 1244.74, 5: 2610.48, 6: 805.10, 7: 2524.47, 8: 832.33, 9: 2755.67, 10: 2196.00, 11: 731.02, 12: 1701.28, 13: 379.35, 14: 2203.00, 15: 3462.08, 16: 2216.04, 17: 3249.02, 18: 3062.93, 19: 884.51, 20: 2522.35, 21: 3530.72, 22: 1644.31, 23: 3199.38, 24: 1242.41, 25: 3734.70, 26: 769.02, 27: 1866.15, 28: 337.92, 29: 754.54, 30: 2816.00, 31: 2025.57, 32: 1703.00, 33: 471.43, 34: 884.98, 35: 2988.29, 36: 1304.23, 37: 3164.92, 38: 1009.51, 39: 1832.99, 40: 515.40, 41: 2629.43, 43: 1578.03, 44: 1826.00, 45: 198.32, 46: 2105.32, 47: 666.69, 48: 2657.20, 49: 1421.04, 50: 1161.82, 51: 994.13, 52: 3231.26, 53: 1932.41, 54: 543.39, 55: 2942.77, 56: 891.05, 57: 1594.77, 58: 2557.05, 59: 1308.22, 60: 1315.30, 61: 1157.17, 62: 2458.35, 63: 1752.90, 64: 3490.50, 65: 3534.91, 66: 1909.80, 67: 1133.75, 68: 1509.71, 69: 3617.67, 70: 489.84, 71: 2589.22, 72: 1399.66, 73: 2518.81, 74: 2875.02, 75: 1784.63, 76: 1286.42, 77: 1003.69, 78: 3167.06, 79: 2853.29, 80: 1257.83, 81: 1687.28, 82: 535.56, 83: 2870.86, 84: 1002.29, 85: 850.00, 86: 1018.46, 87: 3413.44, 88: 2636.05, 89: 2822.24, 90: 1830.77, 91: 2524.08, 92: 1851.93, 93: 3527.22, 94: 1797.39, 95: 997.09, 96: 3033.49, 97: 1733.23, 98: 3249.06, 99: 571.83},
43: {, 0: 1668.39, 1: 256.56, 2: 1452.25, 3: 2479.00, 4: 1007.25, 5: 2050.53, 6: 1165.01, 7: 1660.68, 8: 1116.88, 9: 2409.84, 10: 2252.61, 11: 1376.80, 12: 894.91, 13: 1410.12, 14: 2332.03, 15: 2861.57, 16: 2342.15, 17: 2831.83, 18: 2349.15, 19: 1386.55, 20: 2426.90, 21: 2929.52, 22: 1778.35, 23: 2873.87, 24: 708.47, 25: 2775.70, 26: 1510.20, 27: 1300.96, 28: 1244.44, 29: 944.26, 30: 1702.52, 31: 2054.51, 32: 987.70, 33: 1200.28, 34: 1671.88, 35: 2809.38, 36: 974.60, 37: 2888.26, 38: 727.40, 39: 406.74, 40: 1736.43, 41: 1614.01, 42: 1578.03, 44: 1989.54, 45: 1380.02, 46: 1855.75, 47: 1357.28, 48: 2091.39, 49: 161.76, 50: 960.12, 51: 1089.09, 52: 2606.10, 53: 463.35, 54: 1285.03, 55: 1984.20, 56: 1182.81, 57: 1057.67, 58: 2542.28, 59: 1671.28, 60: 845.06, 61: 1608.43, 62: 1956.34, 63: 349.76, 64: 2609.99, 65: 2695.00, 66: 1077.43, 67: 458.31, 68: 447.68, 69: 2936.40, 70: 1653.94, 71: 2398.62, 72: 232.74, 73: 2463.76, 74: 2116.01, 75: 985.43, 76: 1489.32, 77: 1049.21, 78: 2654.97, 79: 1773.90, 80: 657.01, 81: 517.72, 82: 1268.25, 83: 2549.87, 84: 575.88, 85: 1531.00, 86: 1011.48, 87: 2832.73, 88: 1520.61, 89: 2299.34, 90: 1856.16, 91: 1787.50, 92: 1331.08, 93: 2985.61, 94: 762.92, 95: 984.59, 96: 2160.70, 97: 1781.00, 98: 3109.08, 99: 1587.15},
44: {, 0: 923.02, 1: 2124.21, 2: 1895.68, 3: 1895.50, 4: 2548.37, 5: 1074.24, 6: 1153.73, 7: 1347.31, 8: 1165.09, 9: 1017.21, 10: 370.01, 11: 1114.84, 12: 2751.83, 13: 2083.28, 14: 391.28, 15: 1783.54, 16: 404.01, 17: 1490.72, 18: 1535.82, 19: 967.34, 20: 705.09, 21: 1845.36, 22: 220.81, 23: 1408.02, 24: 1299.87, 25: 2311.68, 26: 1057.01, 27: 885.27, 28: 1793.99, 29: 2042.11, 30: 1806.26, 31: 221.84, 32: 2817.15, 33: 1494.82, 34: 962.09, 35: 1169.00, 36: 2568.72, 37: 1360.45, 38: 2114.30, 39: 1840.94, 40: 2335.62, 41: 1578.39, 42: 1826.00, 43: 1989.54, 45: 1761.64, 46: 515.20, 47: 2310.44, 48: 1110.01, 49: 1949.75, 50: 1077.00, 51: 2410.17, 52: 1600.02, 53: 1918.18, 54: 1340.24, 55: 1698.84, 56: 1066.42, 57: 973.33, 58: 731.18, 59: 518.56, 60: 1147.75, 61: 669.30, 62: 928.07, 63: 1808.28, 64: 2030.68, 65: 2030.15, 66: 1180.71, 67: 1718.82, 68: 1556.17, 69: 1975.54, 70: 2295.38, 71: 796.52, 72: 1777.79, 73: 694.95, 74: 1440.70, 75: 2854.46, 76: 595.63, 77: 2389.80, 78: 1468.53, 79: 1785.82, 80: 1348.90, 81: 2463.33, 82: 1358.76, 83: 1104.09, 84: 1766.09, 85: 976.00, 86: 1107.77, 87: 1727.82, 88: 1706.83, 89: 1191.92, 90: 179.04, 91: 1204.88, 92: 837.61, 93: 1807.61, 94: 2696.24, 95: 2336.01, 96: 1667.89, 97: 214.37, 98: 1423.14, 99: 2344.83},
45: {, 0: 2114.69, 1: 1636.50, 2: 139.26, 3: 3197.56, 4: 1107.08, 5: 2484.17, 6: 672.31, 7: 2369.01, 8: 690.97, 9: 2654.48, 10: 2130.14, 11: 647.09, 12: 1541.72, 13: 329.95, 14: 2146.92, 15: 3343.23, 16: 2159.94, 17: 3147.30, 18: 2928.37, 19: 797.56, 20: 2445.60, 21: 3412.47, 22: 1567.35, 23: 3107.23, 24: 1062.26, 25: 3583.14, 26: 717.68, 27: 1719.87, 28: 148.41, 29: 585.75, 30: 2644.60, 31: 1950.72, 32: 1551.04, 33: 311.24, 34: 862.75, 35: 2910.10, 36: 1162.03, 37: 3077.87, 38: 831.78, 39: 1636.66, 40: 590.03, 41: 2463.42, 42: 198.32, 43: 1380.02, 44: 1761.64, 46: 1999.42, 47: 598.82, 48: 2531.15, 49: 1223.43, 50: 1004.12, 51: 868.38, 52: 3107.42, 53: 1735.64, 54: 428.67, 55: 2784.83, 56: 763.49, 57: 1438.89, 58: 2491.04, 59: 1244.33, 60: 1146.57, 61: 1095.35, 62: 2334.82, 63: 1556.46, 64: 3344.44, 65: 3393.00, 66: 1743.45, 67: 935.54, 68: 1317.65, 69: 3492.01, 70: 538.68, 71: 2502.51, 72: 1201.60, 73: 2446.94, 74: 2733.83, 75: 1629.21, 76: 1195.30, 77: 871.56, 78: 3054.12, 79: 2684.80, 80: 1074.29, 81: 1503.61, 82: 414.04, 83: 2774.40, 84: 804.19, 85: 797.52, 86: 865.43, 87: 3296.14, 88: 2462.78, 89: 2703.29, 90: 1748.01, 91: 2379.54, 92: 1709.14, 93: 3415.18, 94: 1625.08, 95: 854.63, 96: 2883.91, 97: 1649.00, 98: 3179.23, 99: 583.67},
46: {, 0: 429.20, 1: 1932.62, 2: 2138.57, 3: 1394.72, 4: 2591.88, 5: 574.19, 6: 1332.88, 7: 849.76, 8: 1324.55, 9: 656.41, 10: 485.24, 11: 1375.18, 12: 2702.53, 13: 2295.94, 14: 595.18, 15: 1367.09, 16: 599.47, 17: 1148.16, 18: 1046.21, 19: 1222.44, 20: 571.36, 21: 1434.13, 22: 537.63, 23: 1120.21, 24: 1254.13, 25: 1811.78, 26: 1363.85, 27: 571.35, 28: 1995.24, 29: 2146.54, 30: 1314.16, 31: 361.33, 32: 2780.89, 33: 1699.55, 34: 1324.24, 35: 977.81, 36: 2598.70, 37: 1104.56, 38: 2156.53, 39: 1612.96, 40: 2589.30, 41: 1090.25, 42: 2105.32, 43: 1855.75, 44: 515.20, 45: 1999.42, 47: 2481.50, 48: 614.49, 49: 1858.19, 50: 1104.60, 51: 2500.91, 52: 1152.88, 53: 1669.78, 54: 1572.65, 55: 1184.74, 56: 1239.98, 57: 803.36, 58: 693.90, 59: 865.08, 60: 1089.54, 61: 999.99, 62: 420.88, 63: 1601.37, 64: 1533.94, 65: 1543.32, 66: 859.27, 67: 1698.64, 68: 1408.46, 69: 1539.32, 70: 2536.40, 71: 554.91, 72: 1678.39, 73: 611.31, 74: 930.82, 75: 2802.28, 76: 824.15, 77: 2473.86, 78: 1064.25, 79: 1286.10, 80: 1293.26, 81: 2364.98, 82: 1585.81, 83: 782.16, 84: 1786.53, 85: 1289.60, 86: 1195.81, 87: 1315.78, 88: 1234.53, 89: 735.83, 90: 365.94, 91: 693.31, 92: 533.03, 93: 1422.96, 94: 2608.57, 95: 2412.46, 96: 1154.67, 97: 429.69, 98: 1274.12, 99: 2564.05},
47: {, 0: 2522.63, 1: 1595.61, 2: 507.06, 3: 3555.86, 4: 652.15, 5: 2911.48, 6: 1164.61, 7: 2706.77, 8: 1163.60, 9: 3136.01, 10: 2672.89, 11: 1207.36, 12: 1150.51, 13: 287.59, 14: 2700.79, 15: 3778.62, 16: 2713.67, 17: 3622.84, 18: 3326.14, 19: 1346.47, 20: 2970.66, 21: 3848.71, 22: 2104.03, 23: 3601.44, 24: 1352.18, 25: 3915.97, 26: 1299.02, 27: 2109.26, 28: 522.02, 29: 427.13, 30: 2904.13, 31: 2484.07, 32: 1126.68, 33: 816.47, 34: 1454.79, 35: 3429.11, 36: 720.00, 37: 3581.31, 38: 634.85, 39: 1716.09, 40: 432.65, 41: 2754.10, 42: 666.69, 43: 1357.28, 44: 2310.44, 45: 598.82, 46: 2481.50, 48: 2958.36, 49: 1199.27, 50: 1398.53, 51: 395.51, 52: 3532.57, 53: 1798.75, 54: 977.47, 55: 3103.99, 56: 1256.36, 57: 1808.67, 58: 3030.35, 59: 1802.32, 60: 1485.91, 61: 1658.65, 62: 2771.79, 63: 1638.92, 64: 3700.00, 65: 3762.08, 66: 2056.21, 67: 1027.80, 68: 1486.46, 69: 3908.42, 70: 356.92, 71: 3011.66, 72: 1264.80, 73: 2978.88, 74: 3114.23, 75: 1216.15, 76: 1722.50, 77: 422.21, 78: 3506.41, 79: 2958.37, 80: 1341.46, 81: 1261.11, 82: 957.05, 83: 3263.67, 84: 875.56, 85: 1375.82, 86: 1288.40, 87: 3735.79, 88: 2716.59, 89: 3145.68, 90: 2273.52, 91: 2755.81, 92: 2109.75, 93: 3866.20, 94: 1296.30, 95: 451.69, 96: 3233.43, 97: 2174.28, 98: 3708.78, 99: 251.75},
48: {, 0: 442.29, 1: 2094.27, 2: 2669.80, 3: 785.49, 4: 2964.12, 5: 47.07, 6: 1859.25, 7: 553.18, 8: 1840.87, 9: 420.59, 10: 931.18, 11: 1938.08, 12: 2982.44, 13: 2805.19, 14: 1037.10, 15: 820.29, 16: 1034.26, 17: 742.85, 18: 431.80, 19: 1789.66, 20: 745.07, 21: 890.41, 22: 1151.82, 23: 810.63, 24: 1636.02, 25: 1201.82, 26: 1945.38, 27: 857.03, 28: 2505.55, 29: 2584.98, 30: 948.87, 31: 913.09, 32: 3071.29, 33: 2222.15, 34: 1923.91, 35: 858.40, 36: 2958.62, 37: 849.10, 38: 2544.53, 39: 1757.78, 40: 3118.21, 41: 777.08, 42: 2657.20, 43: 2091.39, 44: 1110.01, 45: 2531.15, 46: 614.49, 47: 2958.36, 49: 2138.79, 50: 1560.74, 51: 2916.18, 52: 576.84, 53: 1781.00, 54: 2114.93, 55: 687.16, 56: 1769.37, 57: 1159.29, 58: 892.29, 59: 1471.94, 60: 1483.91, 61: 1599.67, 62: 201.84, 63: 1774.52, 64: 921.64, 65: 928.87, 66: 1015.02, 67: 2059.46, 68: 1673.31, 69: 961.00, 70: 3058.47, 71: 607.60, 72: 1965.51, 73: 811.05, 74: 349.32, 75: 3075.65, 76: 1406.59, 77: 2884.54, 78: 567.67, 79: 888.05, 80: 1661.88, 81: 2607.65, 82: 2124.86, 83: 539.42, 84: 2176.13, 85: 1875.61, 86: 1680.91, 87: 778.54, 88: 956.62, 89: 208.12, 90: 977.95, 91: 352.14, 92: 850.72, 93: 916.56, 94: 2851.76, 95: 2818.95, 96: 585.84, 97: 1043.92, 98: 1130.76, 99: 3071.77},
49: {, 0: 1706.57, 1: 416.12, 2: 1292.65, 3: 2568.82, 4: 887.03, 5: 2096.31, 6: 1051.98, 7: 1736.75, 8: 1005.68, 9: 2437.39, 10: 2231.73, 11: 1258.81, 12: 849.63, 13: 1248.36, 14: 2305.31, 15: 2924.85, 16: 2315.97, 17: 2873.96, 18: 2419.20, 19: 1282.08, 20: 2426.50, 21: 2993.60, 22: 1733.90, 23: 2906.27, 24: 650.76, 25: 2879.38, 26: 1394.11, 27: 1320.48, 28: 1086.10, 29: 783.60, 30: 1813.65, 31: 2031.29, 32: 934.56, 33: 1055.88, 34: 1560.97, 35: 2824.69, 36: 861.97, 37: 2915.42, 38: 573.81, 39: 535.76, 40: 1575.07, 41: 1710.04, 42: 1421.04, 43: 161.76, 44: 1949.75, 45: 1223.43, 46: 1858.19, 47: 1199.27, 48: 2138.79, 50: 891.22, 51: 945.42, 52: 2669.18, 53: 606.57, 54: 1150.58, 55: 2079.23, 56: 1079.47, 57: 1054.83, 58: 2535.31, 59: 1598.10, 60: 803.30, 61: 1523.39, 62: 1992.67, 63: 466.84, 64: 2703.09, 65: 2784.18, 66: 1125.34, 67: 319.51, 68: 466.08, 69: 3009.65, 70: 1492.62, 71: 2408.26, 72: 179.82, 73: 2459.66, 74: 2187.88, 75: 947.11, 76: 1422.45, 77: 905.88, 78: 2705.59, 79: 1881.55, 80: 601.05, 81: 514.58, 82: 1132.64, 83: 2577.02, 84: 420.95, 85: 1421.04, 86: 921.65, 87: 2893.43, 88: 1628.88, 89: 2345.63, 90: 1826.73, 91: 1849.61, 92: 1345.90, 93: 3043.55, 94: 753.45, 95: 839.77, 96: 2247.50, 97: 1746.15, 98: 3124.08, 99: 1426.97},
50: {, 0: 1128.69, 1: 1146.96, 2: 1137.95, 3: 2195.77, 4: 1498.04, 5: 1513.78, 6: 382.78, 7: 1365.06, 8: 341.70, 9: 1749.77, 10: 1391.60, 11: 570.74, 12: 1674.84, 13: 1250.96, 14: 1451.16, 15: 2380.74, 16: 1462.76, 17: 2230.73, 18: 1939.26, 19: 501.88, 20: 1637.74, 21: 2450.78, 22: 856.98, 23: 2220.68, 24: 254.23, 25: 2579.09, 26: 671.25, 27: 721.67, 28: 955.42, 29: 1043.20, 30: 1661.91, 31: 1190.12, 32: 1740.64, 33: 694.72, 34: 791.25, 35: 2076.90, 36: 1510.85, 37: 2208.79, 38: 1060.69, 39: 948.90, 40: 1575.86, 41: 1469.25, 42: 1161.82, 43: 960.12, 44: 1077.00, 45: 1004.12, 46: 1104.60, 47: 1398.53, 48: 1560.74, 49: 891.22, 51: 1396.42, 52: 2136.21, 53: 1048.65, 54: 638.04, 55: 1781.87, 56: 330.05, 57: 434.77, 58: 1724.54, 59: 711.18, 60: 186.27, 61: 655.74, 62: 1373.26, 63: 887.35, 64: 2342.38, 65: 2393.96, 66: 751.83, 67: 641.84, 68: 591.05, 69: 2515.04, 70: 1510.68, 71: 1653.32, 72: 731.97, 73: 1658.82, 74: 1736.78, 75: 1777.49, 76: 531.52, 77: 1369.76, 78: 2108.33, 79: 1695.08, 80: 305.31, 81: 1397.84, 82: 638.38, 83: 1881.77, 84: 697.83, 85: 657.14, 86: 146.37, 87: 2337.47, 88: 1486.34, 89: 1747.16, 90: 976.46, 91: 1380.06, 92: 716.45, 93: 2467.80, 94: 1624.98, 95: 1309.07, 96: 1880.46, 97: 886.14, 98: 2368.50, 99: 1515.14},
51: {, 0: 2474.05, 1: 1302.29, 2: 823.31, 3: 3447.68, 4: 259.24, 5: 2870.31, 6: 1263.40, 7: 2598.66, 8: 1246.65, 9: 3141.82, 10: 2757.15, 11: 1366.93, 12: 755.01, 13: 633.51, 14: 2800.17, 15: 3731.50, 16: 2812.64, 17: 3615.92, 18: 3252.62, 19: 1483.34, 20: 3027.41, 21: 3801.57, 22: 2193.43, 23: 3614.33, 24: 1280.21, 25: 3784.33, 26: 1482.09, 27: 2059.37, 28: 742.65, 29: 368.64, 30: 2737.27, 31: 2559.87, 32: 733.38, 33: 978.46, 34: 1653.81, 35: 3472.30, 36: 325.68, 37: 3604.61, 38: 388.62, 39: 1480.98, 40: 826.20, 41: 2611.40, 42: 994.13, 43: 1089.09, 44: 2410.17, 45: 868.38, 46: 2500.91, 47: 395.51, 48: 2916.18, 49: 945.42, 50: 1396.42, 52: 3479.38, 53: 1550.22, 54: 1146.68, 55: 2974.03, 56: 1346.18, 57: 1757.96, 58: 3104.39, 59: 1928.97, 60: 1435.46, 61: 1798.02, 62: 2742.04, 63: 1410.11, 64: 3587.85, 65: 3659.58, 66: 1951.32, 67: 872.89, 68: 1321.34, 69: 3843.08, 70: 752.16, 71: 3049.07, 72: 1056.08, 73: 3044.06, 74: 3030.19, 75: 821.93, 76: 1814.77, 77: 40.00, 78: 3478.25, 79: 2799.70, 80: 1255.19, 81: 894.56, 82: 1123.64, 83: 3275.60, 84: 741.97, 85: 1550.06, 86: 1318.94, 87: 3693.04, 88: 2550.13, 89: 3113.67, 90: 2344.87, 91: 2675.81, 92: 2068.79, 93: 3832.53, 94: 905.65, 95: 106.23, 96: 3123.47, 97: 2248.08, 98: 3762.06, 99: 642.22},
52: {, 0: 1010.45, 1: 2577.25, 2: 3246.18, 3: 497.64, 4: 3515.60, 5: 623.91, 6: 2435.30, 7: 958.18, 8: 2417.45, 9: 617.29, 10: 1334.04, 11: 2508.79, 12: 3501.01, 13: 3381.94, 14: 1418.82, 15: 255.69, 16: 1411.67, 17: 433.13, 18: 279.87, 19: 2358.86, 20: 1034.57, 21: 324.58, 22: 1683.08, 23: 603.68, 24: 2201.33, 25: 825.11, 26: 2509.82, 27: 1425.60, 28: 3082.37, 29: 3154.24, 30: 1165.37, 31: 1383.37, 32: 3593.20, 33: 2798.73, 34: 2477.00, 35: 849.47, 36: 3506.36, 37: 692.41, 38: 3103.00, 39: 2244.66, 40: 3694.86, 41: 1092.63, 42: 3231.26, 43: 2606.10, 44: 1600.02, 45: 3107.42, 46: 1152.88, 47: 3532.57, 48: 576.84, 49: 2669.18, 50: 2136.21, 51: 3479.38, 53: 2251.34, 54: 2689.79, 55: 801.98, 56: 2345.04, 57: 1728.06, 58: 1143.08, 59: 2017.56, 60: 2053.08, 61: 2152.58, 62: 773.08, 63: 2272.99, 64: 562.14, 65: 502.47, 66: 1547.17, 67: 2615.21, 68: 2208.59, 69: 387.62, 70: 3635.29, 71: 885.87, 72: 2501.29, 73: 1091.46, 74: 506.35, 75: 3590.55, 76: 1969.17, 77: 3446.79, 78: 223.01, 79: 1081.12, 80: 2224.30, 81: 3115.56, 82: 2700.12, 83: 606.39, 84: 2737.66, 85: 2437.80, 86: 2257.57, 87: 229.75, 88: 1259.48, 89: 417.08, 90: 1497.42, 91: 819.68, 92: 1422.95, 93: 389.31, 94: 3356.37, 95: 3380.48, 96: 589.48, 97: 1576.26, 98: 1000.95, 99: 3648.39},
53: {, 0: 1394.18, 1: 331.30, 2: 1827.94, 3: 2071.58, 4: 1468.37, 5: 1745.03, 6: 1362.06, 7: 1293.21, 8: 1311.88, 9: 2141.98, 10: 2118.40, 11: 1576.91, 12: 1296.45, 13: 1819.15, 14: 2212.26, 15: 2503.87, 16: 2220.57, 17: 2521.97, 18: 1982.40, 19: 1542.05, 20: 2231.70, 21: 2569.52, 22: 1729.37, 23: 2586.75, 24: 812.86, 25: 2343.63, 26: 1697.46, 27: 1099.14, 28: 1614.31, 29: 1375.91, 30: 1265.17, 31: 1933.05, 32: 1395.16, 33: 1503.60, 34: 1834.79, 35: 2565.81, 36: 1432.87, 37: 2613.76, 38: 1179.91, 39: 103.59, 40: 2155.87, 41: 1204.76, 42: 1932.41, 43: 463.35, 44: 1918.18, 45: 1735.64, 46: 1669.78, 47: 1798.75, 48: 1781.00, 49: 606.57, 50: 1048.65, 51: 1550.22, 52: 2251.34, 54: 1546.82, 55: 1571.64, 56: 1348.41, 57: 945.41, 58: 2362.45, 59: 1713.66, 60: 877.49, 61: 1690.58, 62: 1676.93, 63: 180.69, 64: 2195.85, 65: 2287.30, 66: 816.77, 67: 808.97, 68: 467.13, 69: 2557.44, 70: 2074.39, 71: 2177.24, 72: 545.22, 73: 2277.78, 74: 1748.61, 75: 1374.40, 76: 1522.67, 77: 1510.47, 78: 2327.54, 79: 1341.46, 80: 770.17, 81: 897.04, 82: 1535.01, 83: 2280.45, 84: 956.73, 85: 1696.79, 86: 1152.95, 87: 2480.85, 88: 1090.00, 89: 1987.42, 90: 1759.97, 91: 1449.23, 92: 1140.04, 93: 2638.35, 94: 1124.77, 95: 1445.05, 96: 1761.85, 97: 1703.84, 98: 2862.28, 99: 2018.09},
54: {, 0: 1707.55, 1: 1529.08, 2: 567.12, 3: 2801.62, 4: 1342.83, 5: 2068.13, 6: 264.15, 7: 1988.89, 8: 297.56, 9: 2226.89, 10: 1706.97, 11: 229.92, 12: 1693.55, 13: 743.35, 14: 1728.45, 15: 2922.55, 16: 1741.41, 17: 2719.96, 18: 2519.55, 19: 372.93, 20: 2018.51, 21: 2991.47, 22: 1141.47, 23: 2678.63, 24: 771.11, 25: 3195.29, 26: 335.41, 27: 1325.93, 28: 456.18, 29: 790.87, 30: 2299.88, 31: 1524.69, 32: 1726.82, 33: 168.63, 34: 508.72, 35: 2482.46, 36: 1383.28, 37: 2649.24, 38: 962.68, 39: 1443.40, 40: 1017.22, 41: 2105.20, 42: 543.39, 43: 1285.03, 44: 1340.24, 45: 428.67, 46: 1572.65, 47: 977.47, 48: 2114.93, 49: 1150.58, 50: 638.04, 51: 1146.68, 52: 2689.79, 53: 1546.82, 55: 2408.61, 56: 347.76, 57: 1063.01, 58: 2067.17, 59: 826.74, 60: 807.96, 61: 681.45, 62: 1916.72, 63: 1367.42, 64: 2948.79, 65: 2992.09, 66: 1389.61, 67: 831.27, 68: 1088.54, 69: 3075.74, 70: 967.35, 71: 2073.96, 72: 1067.16, 73: 2021.14, 74: 2332.22, 75: 1791.40, 76: 767.01, 77: 1136.60, 78: 2630.39, 79: 2332.12, 80: 799.72, 81: 1552.19, 82: 23.35, 83: 2346.10, 84: 755.91, 85: 405.42, 86: 491.71, 87: 2874.60, 88: 2124.24, 89: 2282.46, 90: 1320.32, 91: 1982.33, 92: 1310.24, 93: 2991.18, 94: 1725.19, 95: 1097.87, 96: 2493.48, 97: 1221.16, 98: 2753.43, 99: 1007.04},
55: {, 0: 795.34, 1: 1902.79, 2: 2916.62, 3: 500.37, 4: 2961.86, 5: 697.69, 6: 2144.67, 7: 420.64, 8: 2112.60, 9: 1078.64, 10: 1592.14, 11: 2279.37, 12: 2863.71, 13: 3008.84, 14: 1702.58, 15: 1020.65, 16: 1701.37, 17: 1198.41, 18: 530.08, 19: 2148.63, 20: 1432.22, 21: 1075.60, 22: 1676.77, 23: 1337.22, 24: 1757.08, 25: 812.50, 26: 2323.76, 27: 1091.15, 28: 2724.46, 29: 2692.06, 30: 366.96, 31: 1534.09, 32: 2960.98, 33: 2476.49, 34: 2349.00, 35: 1485.16, 36: 2940.58, 37: 1406.79, 38: 2585.82, 39: 1589.32, 40: 3344.79, 41: 370.19, 42: 2942.77, 43: 1984.20, 44: 1698.84, 45: 2784.83, 46: 1184.74, 47: 3103.99, 48: 687.16, 49: 2079.23, 50: 1781.87, 51: 2974.03, 52: 801.98, 53: 1571.64, 54: 2408.61, 56: 2066.92, 57: 1348.00, 58: 1579.26, 59: 1942.17, 60: 1643.52, 61: 2040.91, 62: 800.56, 63: 1635.35, 64: 626.01, 65: 715.73, 66: 1051.12, 67: 2104.29, 68: 1653.47, 69: 1018.43, 70: 3274.72, 71: 1293.54, 72: 1931.89, 73: 1498.19, 74: 370.00, 75: 2944.68, 76: 1823.68, 77: 2937.57, 78: 969.03, 79: 280.80, 80: 1763.52, 81: 2466.17, 82: 2412.39, 83: 1167.23, 84: 2246.39, 85: 2267.73, 86: 1924.32, 87: 1017.01, 88: 494.50, 89: 785.86, 90: 1537.62, 91: 496.59, 92: 1115.63, 93: 1176.32, 94: 2696.40, 95: 2869.46, 96: 216.11, 97: 1575.54, 98: 1716.91, 99: 3262.84},
56: {, 0: 1359.82, 1: 1400.39, 2: 902.66, 3: 2454.44, 4: 1499.52, 5: 1722.48, 6: 93.05, 7: 1646.54, 8: 99.76, 9: 1896.26, 10: 1421.53, 11: 240.75, 12: 1767.79, 13: 1056.38, 14: 1457.50, 15: 2579.87, 16: 1470.14, 17: 2387.99, 18: 2172.08, 19: 203.75, 20: 1714.30, 21: 2649.06, 22: 853.15, 23: 2354.74, 24: 535.73, 25: 2849.48, 26: 349.59, 27: 980.40, 28: 756.24, 29: 977.58, 30: 1973.10, 31: 1229.48, 32: 1818.68, 33: 459.62, 34: 493.08, 35: 2173.41, 36: 1526.82, 37: 2330.25, 38: 1075.72, 39: 1245.97, 40: 1353.01, 41: 1772.18, 42: 891.05, 43: 1182.81, 44: 1066.42, 45: 763.49, 46: 1239.98, 47: 1256.36, 48: 1769.37, 49: 1079.47, 50: 330.05, 51: 1346.18, 52: 2345.04, 53: 1348.41, 54: 347.76, 55: 2066.92, 57: 727.99, 58: 1776.33, 59: 588.26, 60: 515.40, 61: 473.08, 62: 1572.10, 63: 1177.68, 64: 2601.61, 65: 2644.39, 66: 1064.32, 67: 777.01, 68: 881.72, 69: 2730.37, 70: 1297.58, 71: 1757.82, 72: 950.51, 73: 1723.07, 74: 1984.54, 75: 1869.85, 76: 471.27, 77: 1327.42, 78: 2290.91, 79: 2001.03, 80: 578.73, 81: 1551.08, 82: 356.04, 83: 2019.24, 84: 766.85, 85: 352.37, 86: 197.52, 87: 2532.67, 88: 1801.84, 89: 1939.87, 90: 1017.64, 91: 1635.24, 92: 963.42, 93: 2652.04, 94: 1756.77, 95: 1276.24, 96: 2147.43, 97: 918.58, 98: 2452.44, 99: 1324.36},
57: {, 0: 718.23, 1: 1160.70, 2: 1572.47, 3: 1763.01, 4: 1818.49, 5: 1113.11, 6: 800.24, 7: 930.41, 8: 765.87, 9: 1401.86, 10: 1199.97, 11: 955.12, 12: 1900.23, 13: 1679.32, 14: 1285.22, 15: 1977.58, 16: 1294.60, 17: 1863.09, 18: 1517.58, 19: 844.08, 20: 1372.41, 21: 2047.76, 22: 785.49, 23: 1875.11, 24: 478.28, 25: 2144.39, 26: 1024.64, 27: 302.60, 28: 1386.96, 29: 1426.37, 30: 1246.47, 31: 1005.45, 32: 1979.99, 33: 1129.32, 34: 1096.69, 35: 1773.32, 36: 1818.78, 37: 1876.01, 38: 1391.23, 39: 867.78, 40: 2008.19, 41: 1044.26, 42: 1594.77, 43: 1057.67, 44: 973.33, 45: 1438.89, 46: 803.36, 47: 1808.67, 48: 1159.29, 49: 1054.83, 50: 434.77, 51: 1757.96, 52: 1728.06, 53: 945.41, 54: 1063.01, 55: 1348.00, 56: 727.99, 58: 1484.95, 59: 826.07, 60: 325.04, 61: 851.17, 62: 984.56, 63: 837.93, 64: 1909.33, 65: 1963.25, 66: 344.73, 67: 913.76, 68: 610.33, 69: 2100.56, 70: 1941.51, 71: 1354.51, 72: 875.03, 73: 1407.28, 74: 1308.77, 75: 1999.56, 76: 643.12, 77: 1726.95, 78: 1720.31, 79: 1273.08, 80: 508.33, 81: 1562.69, 82: 1065.77, 83: 1539.68, 84: 1020.53, 85: 985.29, 86: 576.32, 87: 1937.45, 88: 1078.72, 89: 1355.71, 90: 819.56, 91: 950.64, 92: 311.26, 93: 2075.01, 94: 1805.74, 95: 1661.95, 96: 1446.36, 97: 758.98, 98: 2072.06, 99: 1940.76},
58: {, 0: 1030.90, 1: 2626.07, 2: 2625.84, 3: 1572.78, 4: 3221.86, 5: 886.00, 6: 1866.83, 7: 1379.08, 8: 1872.34, 9: 542.72, 10: 361.27, 11: 1843.95, 12: 3371.64, 13: 2810.48, 14: 370.47, 15: 1247.62, 16: 358.24, 17: 879.93, 18: 1205.72, 19: 1694.55, 20: 150.86, 21: 1295.64, 22: 926.88, 23: 748.95, 24: 1909.41, 25: 1956.18, 26: 1788.12, 27: 1265.10, 28: 2518.16, 29: 2739.56, 30: 1822.14, 31: 546.88, 32: 3445.90, 33: 2217.92, 34: 1687.49, 35: 461.85, 36: 3235.39, 37: 679.23, 38: 2784.52, 39: 2306.77, 40: 3066.73, 41: 1624.76, 42: 2557.05, 43: 2542.28, 44: 731.18, 45: 2491.04, 46: 693.90, 47: 3030.35, 48: 892.29, 49: 2535.31, 50: 1724.54, 51: 3104.39, 52: 1143.08, 53: 2362.45, 54: 2067.17, 55: 1579.26, 56: 1776.33, 57: 1484.95, 59: 1249.64, 60: 1745.82, 61: 1400.46, 62: 825.26, 63: 2295.03, 64: 1678.25, 65: 1638.97, 66: 1548.55, 67: 2350.56, 68: 2094.64, 69: 1460.21, 70: 3025.95, 71: 287.56, 72: 2356.20, 73: 89.00, 74: 1227.06, 75: 3472.69, 76: 1307.85, 77: 3081.14, 78: 948.13, 79: 1769.59, 80: 1952.87, 81: 3046.45, 82: 2084.98, 83: 539.71, 84: 2421.83, 85: 1707.07, 86: 1786.06, 87: 1189.55, 88: 1794.84, 89: 834.23, 90: 760.43, 91: 1178.05, 92: 1226.86, 93: 1221.19, 94: 3288.36, 95: 3023.78, 96: 1458.46, 97: 858.59, 98: 692.94, 99: 3073.52},
59: {, 0: 1152.29, 1: 1851.16, 2: 1377.63, 3: 2235.15, 4: 2087.73, 5: 1428.74, 6: 666.11, 7: 1539.02, 8: 687.61, 9: 1481.27, 10: 888.38, 11: 598.82, 12: 2342.81, 13: 1567.95, 14: 902.77, 15: 2226.07, 16: 915.76, 17: 1970.06, 18: 1902.23, 19: 455.93, 20: 1215.63, 21: 2291.72, 22: 345.32, 23: 1904.53, 24: 963.76, 25: 2649.73, 26: 539.33, 27: 911.41, 28: 1282.53, 29: 1560.67, 30: 1955.69, 31: 719.24, 32: 2398.35, 33: 986.00, 34: 463.60, 35: 1681.51, 36: 2114.94, 37: 1864.17, 38: 1663.08, 39: 1620.90, 40: 1817.09, 41: 1730.47, 42: 1308.22, 43: 1671.28, 44: 518.56, 45: 1244.33, 46: 865.08, 47: 1802.32, 48: 1471.94, 49: 1598.10, 50: 711.18, 51: 1928.97, 52: 2017.56, 53: 1713.66, 54: 826.74, 55: 1942.17, 56: 588.26, 57: 826.07, 58: 1249.64, 60: 847.30, 61: 151.05, 62: 1271.65, 63: 1569.59, 64: 2378.66, 65: 2397.63, 66: 1140.81, 67: 1324.42, 68: 1282.66, 69: 2403.29, 70: 1776.98, 71: 1290.85, 72: 1442.80, 73: 1210.66, 74: 1759.71, 75: 2445.43, 76: 191.02, 77: 1911.84, 78: 1917.21, 79: 1958.05, 80: 1015.20, 81: 2096.74, 82: 846.22, 83: 1585.20, 84: 1340.49, 85: 458.63, 86: 685.72, 87: 2173.13, 88: 1816.50, 89: 1600.49, 90: 536.86, 91: 1454.75, 92: 871.27, 93: 2269.90, 94: 2315.42, 95: 1862.38, 96: 1963.97, 97: 446.23, 98: 1941.00, 99: 1827.90},
60: {, 0: 1043.22, 1: 1006.11, 2: 1275.47, 3: 2076.11, 4: 1506.11, 5: 1437.61, 6: 561.81, 7: 1233.11, 8: 517.35, 9: 1712.78, 10: 1431.62, 11: 756.13, 12: 1626.49, 13: 1367.23, 14: 1502.70, 15: 2302.57, 16: 1513.50, 17: 2181.48, 18: 1840.56, 19: 686.72, 20: 1645.99, 21: 2372.75, 22: 934.14, 23: 2186.36, 24: 164.71, 25: 2448.95, 26: 857.42, 27: 627.62, 28: 1080.95, 29: 1101.36, 30: 1500.71, 31: 1230.39, 32: 1700.08, 33: 844.00, 34: 973.93, 35: 2067.20, 36: 1510.43, 37: 2182.47, 38: 1074.23, 39: 780.44, 40: 1701.43, 41: 1316.86, 42: 1315.30, 43: 845.06, 44: 1147.75, 45: 1146.57, 46: 1089.54, 47: 1485.91, 48: 1483.91, 49: 803.30, 50: 186.27, 51: 1435.46, 52: 2053.08, 53: 877.49, 54: 807.96, 55: 1643.52, 56: 515.40, 57: 325.04, 58: 1745.82, 59: 847.30, 61: 813.62, 62: 1306.78, 63: 724.51, 64: 2221.58, 65: 2279.46, 66: 597.01, 67: 609.20, 68: 435.39, 69: 2424.97, 70: 1632.07, 71: 1644.42, 72: 630.05, 73: 1673.96, 74: 1628.65, 75: 1727.95, 76: 658.48, 77: 1405.16, 78: 2043.41, 79: 1538.73, 80: 207.17, 81: 1317.77, 82: 805.73, 83: 1848.85, 84: 702.67, 85: 841.61, 86: 324.14, 87: 2262.26, 88: 1321.44, 89: 1679.10, 90: 1023.89, 91: 1270.18, 92: 634.00, 93: 2399.08, 94: 1554.11, 95: 1340.84, 96: 1756.20, 97: 942.89, 98: 2363.59, 99: 1625.25},
61: {, 0: 1259.66, 1: 1802.54, 2: 1227.89, 3: 2353.39, 4: 1965.28, 5: 1555.53, 6: 541.61, 7: 1630.72, 8: 569.53, 9: 1626.02, 10: 1039.23, 11: 452.09, 12: 2240.20, 13: 1420.27, 14: 1051.70, 15: 2365.29, 16: 1064.72, 17: 2116.21, 18: 2027.76, 19: 315.84, 20: 1366.43, 21: 2431.54, 22: 493.04, 23: 2053.38, 24: 909.48, 25: 2765.92, 26: 388.29, 27: 981.90, 28: 1137.62, 29: 1430.83, 30: 2031.79, 31: 869.87, 32: 2291.74, 33: 843.53, 34: 324.61, 35: 1832.36, 36: 1995.29, 37: 2014.02, 38: 1546.56, 39: 1594.05, 40: 1666.35, 41: 1809.97, 42: 1157.17, 43: 1608.43, 44: 669.30, 45: 1095.35, 46: 999.99, 47: 1658.65, 48: 1599.67, 49: 1523.39, 50: 655.74, 51: 1798.02, 52: 2152.58, 53: 1690.58, 54: 681.45, 55: 2040.91, 56: 473.08, 57: 851.17, 58: 1400.46, 59: 151.05, 60: 813.62, 62: 1398.28, 63: 1537.16, 64: 2498.08, 65: 2521.18, 66: 1183.32, 67: 1236.01, 68: 1243.63, 69: 2539.28, 70: 1626.78, 71: 1440.04, 72: 1376.89, 73: 1361.71, 74: 1876.57, 75: 2342.41, 76: 221.42, 77: 1782.40, 78: 2058.25, 79: 2039.77, 80: 960.08, 81: 2011.66, 82: 701.62, 83: 1732.20, 84: 1238.13, 85: 307.65, 86: 601.82, 87: 2312.98, 88: 1884.22, 89: 1735.66, 90: 683.74, 91: 1560.58, 92: 945.84, 93: 2412.71, 94: 2223.69, 95: 1735.03, 96: 2074.35, 97: 590.41, 98: 2092.00, 99: 1679.02},
62: {, 0: 288.09, 1: 1979.20, 2: 2473.70, 3: 973.90, 4: 2799.74, 5: 157.26, 6: 1662.57, 7: 554.05, 8: 1645.48, 9: 465.47, 10: 791.77, 11: 1737.55, 12: 2840.72, 13: 2612.66, 14: 902.70, 15: 1010.03, 16: 901.89, 17: 883.24, 18: 630.60, 19: 1588.68, 20: 674.44, 21: 1079.75, 22: 955.59, 23: 917.99, 24: 1462.85, 25: 1390.95, 26: 1743.70, 27: 685.93, 28: 2312.42, 29: 2405.15, 30: 1000.98, 31: 743.27, 32: 2927.18, 33: 2026.69, 34: 1722.40, 35: 898.35, 36: 2797.09, 37: 938.09, 38: 2375.26, 39: 1643.83, 40: 2922.85, 41: 799.53, 42: 2458.35, 43: 1956.34, 44: 928.07, 45: 2334.82, 46: 420.88, 47: 2771.79, 48: 201.84, 49: 1992.67, 50: 1373.26, 51: 2742.04, 52: 773.08, 53: 1676.93, 54: 1916.72, 55: 800.56, 56: 1572.10, 57: 984.56, 58: 825.26, 59: 1271.65, 60: 1306.78, 61: 1398.28, 63: 1652.95, 64: 1113.69, 65: 1126.68, 66: 881.15, 67: 1893.93, 68: 1526.75, 69: 1159.35, 70: 2864.13, 71: 562.23, 72: 1816.46, 73: 737.83, 74: 512.64, 75: 2935.95, 76: 1204.76, 77: 2711.32, 78: 737.01, 79: 954.08, 80: 1491.66, 81: 2474.04, 82: 1927.05, 83: 603.52, 84: 2004.97, 85: 1673.80, 86: 1489.50, 87: 965.11, 88: 970.22, 89: 373.98, 90: 786.70, 91: 353.41, 92: 673.37, 93: 1094.93, 94: 2719.14, 95: 2646.47, 96: 741.97, 97: 847.93, 98: 1189.73, 99: 2879.80},
63: {, 0: 1365.66, 1: 331.72, 2: 1650.53, 3: 2131.24, 4: 1350.00, 5: 1735.62, 6: 1187.47, 7: 1320.96, 8: 1137.23, 9: 2114.01, 10: 2031.86, 11: 1403.00, 12: 1234.19, 13: 1647.54, 14: 2120.79, 15: 2527.81, 16: 2129.80, 17: 2517.29, 18: 2011.51, 19: 1374.05, 20: 2170.25, 21: 2595.04, 22: 1610.98, 23: 2569.93, 24: 644.15, 25: 2425.98, 26: 1525.66, 27: 1031.72, 28: 1436.67, 29: 1213.41, 30: 1353.63, 31: 1840.75, 32: 1329.56, 33: 1322.91, 34: 1667.07, 35: 2527.26, 36: 1320.60, 37: 2590.49, 38: 1031.14, 39: 80.45, 40: 1986.25, 41: 1265.19, 42: 1752.90, 43: 349.76, 44: 1808.28, 45: 1556.46, 46: 1601.37, 47: 1638.92, 48: 1774.52, 49: 466.84, 50: 887.35, 51: 1410.11, 52: 2272.99, 53: 180.69, 54: 1367.42, 55: 1635.35, 56: 1177.68, 57: 837.93, 58: 2295.03, 59: 1569.59, 60: 724.51, 61: 1537.16, 62: 1652.95, 64: 2261.30, 65: 2347.32, 66: 773.61, 67: 634.44, 68: 297.38, 69: 2595.79, 70: 1905.25, 71: 2127.14, 72: 375.71, 73: 2212.60, 74: 1777.67, 75: 1320.24, 76: 1379.34, 77: 1370.83, 78: 2332.51, 79: 1424.40, 80: 599.10, 81: 843.13, 82: 1355.34, 83: 2253.72, 84: 784.55, 85: 1528.03, 86: 984.00, 87: 2501.03, 88: 1171.11, 89: 1982.53, 90: 1657.46, 91: 1458.09, 92: 1068.39, 93: 2655.86, 94: 1083.41, 95: 1304.08, 96: 1814.23, 97: 1594.40, 98: 2825.98, 99: 1852.72},
64: {, 0: 1250.23, 1: 2526.66, 2: 3479.70, 3: 147.18, 4: 3583.51, 5: 960.03, 6: 2685.58, 7: 993.62, 8: 2658.80, 9: 1136.89, 10: 1819.14, 11: 2796.12, 12: 3489.32, 13: 3587.56, 14: 1915.41, 15: 630.89, 16: 1910.08, 17: 977.88, 18: 497.11, 19: 2654.98, 20: 1555.77, 21: 652.33, 22: 2069.13, 23: 1156.22, 24: 2347.93, 25: 283.34, 26: 2821.49, 27: 1625.06, 28: 3296.29, 29: 3295.12, 30: 951.13, 31: 1828.60, 32: 3586.74, 33: 3033.44, 34: 2819.24, 35: 1411.57, 36: 3563.59, 37: 1248.34, 38: 3200.66, 39: 2215.19, 40: 3917.51, 41: 996.11, 42: 3490.50, 43: 2609.99, 44: 2030.68, 45: 3344.44, 46: 1533.94, 47: 3700.00, 48: 921.64, 49: 2703.09, 50: 2342.38, 51: 3587.85, 52: 562.14, 53: 2195.85, 54: 2948.79, 55: 626.01, 56: 2601.61, 57: 1909.33, 58: 1678.25, 59: 2378.66, 60: 2221.58, 61: 2498.08, 62: 1113.69, 63: 2261.30, 65: 114.77, 66: 1645.05, 67: 2715.63, 68: 2270.70, 69: 512.00, 70: 3850.65, 71: 1404.09, 72: 2552.87, 73: 1617.22, 74: 623.03, 75: 3569.72, 76: 2293.36, 77: 3552.04, 78: 784.66, 79: 866.85, 80: 2359.34, 81: 3091.41, 82: 2955.26, 83: 1154.48, 84: 2854.15, 85: 2757.20, 86: 2479.02, 87: 662.15, 88: 1109.76, 89: 865.92, 90: 1898.89, 91: 966.48, 92: 1638.64, 93: 783.78, 94: 3320.43, 95: 3484.07, 96: 466.62, 97: 1961.57, 98: 1550.38, 99: 3846.81},
65: {, 0: 1286.44, 1: 2618.49, 2: 3529.20, 3: 216.11, 4: 3661.45, 5: 970.27, 6: 2729.89, 7: 1061.08, 8: 2704.79, 9: 1102.39, 10: 1800.88, 11: 2833.13, 12: 3578.14, 13: 3642.56, 14: 1893.37, 15: 534.20, 16: 1887.35, 17: 899.07, 18: 497.12, 19: 2689.69, 20: 1522.78, 21: 549.18, 22: 2080.69, 23: 1079.50, 24: 2410.17, 25: 323.20, 26: 2853.28, 27: 1673.49, 28: 3349.19, 29: 3361.02, 30: 1052.91, 31: 1822.98, 32: 3675.02, 33: 3081.77, 34: 2844.05, 35: 1347.41, 36: 3643.08, 37: 1173.39, 38: 3273.38, 39: 2303.39, 40: 3969.81, 41: 1083.72, 42: 3534.91, 43: 2695.00, 44: 2030.15, 45: 3393.00, 46: 1543.32, 47: 3762.08, 48: 928.87, 49: 2784.18, 50: 2393.96, 51: 3659.58, 52: 502.47, 53: 2287.30, 54: 2992.09, 55: 715.73, 56: 2644.39, 57: 1963.25, 58: 1638.97, 59: 2397.63, 60: 2279.46, 61: 2521.18, 62: 1126.68, 63: 2347.32, 64: 114.77, 66: 1711.34, 67: 2786.74, 68: 2346.23, 69: 400.22, 70: 3904.24, 71: 1371.75, 72: 2630.96, 73: 1582.39, 74: 659.88, 75: 3659.81, 76: 2320.61, 77: 3624.21, 78: 720.15, 79: 967.50, 80: 2423.58, 81: 3181.17, 82: 2999.35, 83: 1106.68, 84: 2923.07, 85: 2787.09, 86: 2528.25, 87: 570.64, 88: 1205.90, 89: 847.85, 90: 1905.66, 91: 1013.97, 92: 1684.14, 93: 682.11, 94: 3412.04, 95: 3556.39, 96: 537.43, 97: 1972.79, 98: 1469.63, 99: 3903.56},
66: {, 0: 593.19, 1: 1102.74, 2: 1872.41, 3: 1502.07, 4: 1971.11, 5: 973.54, 6: 1130.68, 7: 651.46, 8: 1092.44, 9: 1340.55, 10: 1324.61, 11: 1296.09, 12: 1967.42, 13: 1958.18, 14: 1425.29, 15: 1802.52, 16: 1432.33, 17: 1754.43, 18: 1306.08, 19: 1188.45, 20: 1415.73, 21: 1871.74, 22: 1029.89, 23: 1799.09, 24: 706.21, 25: 1861.10, 26: 1369.00, 27: 300.85, 28: 1676.25, 29: 1650.23, 30: 910.38, 31: 1151.84, 32: 2056.46, 33: 1439.27, 34: 1440.09, 35: 1755.11, 36: 1960.02, 37: 1817.54, 38: 1567.74, 39: 770.73, 40: 2295.34, 41: 720.06, 42: 1909.80, 43: 1077.43, 44: 1180.71, 45: 1743.45, 46: 859.27, 47: 2056.21, 48: 1015.02, 49: 1125.34, 50: 751.83, 51: 1951.32, 52: 1547.17, 53: 816.77, 54: 1389.61, 55: 1051.12, 56: 1064.32, 57: 344.73, 58: 1548.55, 59: 1140.81, 60: 597.01, 61: 1183.32, 62: 881.15, 63: 773.61, 64: 1645.05, 65: 1711.34, 67: 1079.12, 68: 661.88, 69: 1898.04, 70: 2224.46, 71: 1361.03, 72: 954.75, 73: 1463.01, 74: 1080.08, 75: 2060.78, 76: 967.86, 77: 1916.76, 78: 1580.77, 79: 943.76, 80: 714.79, 81: 1594.66, 82: 1390.20, 83: 1480.35, 84: 1212.28, 85: 1329.98, 86: 897.98, 87: 1769.60, 88: 737.53, 89: 1222.65, 90: 1007.25, 91: 730.25, 92: 347.25, 93: 1918.60, 94: 1839.42, 95: 1849.31, 96: 1178.52, 97: 974.31, 98: 2053.31, 99: 2211.73},
67: {, 0: 1617.69, 1: 710.54, 2: 1020.78, 3: 2575.06, 4: 905.81, 5: 2014.44, 6: 740.95, 7: 1725.78, 8: 696.58, 9: 2315.19, 10: 2027.12, 11: 943.40, 12: 1033.01, 13: 1013.88, 14: 2090.68, 15: 2868.85, 16: 2102.09, 17: 2775.40, 18: 2382.97, 19: 976.57, 20: 2253.98, 21: 2938.72, 22: 1498.81, 23: 2788.63, 24: 444.53, 25: 2915.95, 26: 1079.38, 27: 1208.02, 28: 808.01, 29: 601.84, 30: 1882.71, 31: 1825.26, 32: 1100.04, 33: 741.98, 34: 1249.02, 35: 2676.13, 36: 905.04, 37: 2787.85, 38: 488.86, 39: 714.66, 40: 1354.14, 41: 1744.81, 42: 1133.75, 43: 458.31, 44: 1718.82, 45: 935.54, 46: 1698.64, 47: 1027.80, 48: 2059.46, 49: 319.51, 50: 641.84, 51: 872.89, 52: 2615.21, 53: 808.97, 54: 831.27, 55: 2104.29, 56: 777.01, 57: 913.76, 58: 2350.56, 59: 1324.42, 60: 609.20, 61: 1236.01, 62: 1893.93, 63: 634.44, 64: 2715.63, 65: 2786.74, 66: 1079.12, 68: 460.41, 69: 2974.34, 70: 1273.80, 71: 2253.54, 72: 266.72, 73: 2280.46, 74: 2158.86, 75: 1135.65, 76: 1159.70, 77: 837.86, 78: 2625.51, 79: 1940.58, 80: 406.87, 81: 775.77, 82: 813.55, 83: 2452.52, 84: 153.40, 85: 1110.26, 86: 638.80, 87: 2832.30, 88: 1694.94, 89: 2261.04, 90: 1613.64, 91: 1806.05, 92: 1223.40, 93: 2975.40, 94: 991.06, 95: 770.28, 96: 2250.83, 97: 1525.71, 98: 2972.74, 99: 1227.37},
68: {, 0: 1240.50, 1: 573.27, 2: 1423.78, 3: 2132.53, 4: 1316.71, 5: 1630.61, 6: 895.32, 7: 1289.13, 8: 845.19, 9: 1973.40, 10: 1807.75, 11: 1109.88, 12: 1314.33, 13: 1450.67, 14: 1889.44, 15: 2464.08, 16: 1899.30, 17: 2407.89, 18: 1963.40, 19: 1077.00, 20: 1979.45, 21: 2533.17, 22: 1350.30, 23: 2441.20, 24: 347.00, 25: 2463.06, 26: 1230.49, 27: 858.52, 28: 1210.75, 29: 1061.70, 30: 1422.65, 31: 1610.85, 32: 1400.45, 33: 1060.75, 34: 1370.00, 35: 2366.25, 36: 1302.00, 37: 2451.74, 38: 932.80, 39: 364.32, 40: 1794.06, 41: 1290.06, 42: 1509.71, 43: 447.68, 44: 1556.17, 45: 1317.65, 46: 1408.46, 47: 1486.46, 48: 1673.31, 49: 466.08, 50: 591.05, 51: 1321.34, 52: 2208.59, 53: 467.13, 54: 1088.54, 55: 1653.47, 56: 881.72, 57: 610.33, 58: 2094.64, 59: 1282.66, 60: 435.39, 61: 1243.63, 62: 1526.75, 63: 297.38, 64: 2270.70, 65: 2346.23, 66: 661.88, 67: 460.41, 69: 2555.10, 70: 1715.73, 71: 1953.20, 72: 292.88, 73: 2016.09, 74: 1734.13, 75: 1410.46, 76: 1093.81, 77: 1284.52, 78: 2240.45, 79: 1481.56, 80: 303.12, 81: 958.43, 82: 1078.23, 83: 2113.21, 84: 611.06, 85: 1231.23, 86: 687.12, 87: 2431.46, 88: 1234.89, 89: 1879.90, 90: 1416.12, 91: 1390.12, 92: 886.51, 93: 2580.34, 94: 1203.17, 95: 1216.38, 96: 1808.88, 97: 1344.86, 98: 2665.92, 99: 1678.04},
69: {, 0: 1386.56, 1: 2887.44, 2: 3630.58, 3: 554.48, 4: 3869.01, 5: 1007.92, 6: 2820.22, 7: 1275.73, 8: 2801.49, 9: 969.93, 10: 1690.80, 11: 2896.08, 12: 3829.44, 13: 3763.35, 14: 1767.32, 15: 214.85, 16: 1759.04, 17: 612.08, 18: 592.00, 19: 2746.32, 20: 1370.75, 21: 186.13, 22: 2066.96, 23: 788.38, 24: 2569.44, 25: 669.16, 26: 2897.43, 27: 1799.20, 28: 3464.42, 29: 3524.35, 30: 1380.56, 31: 1756.40, 32: 3923.72, 33: 3182.71, 34: 2863.55, 35: 1090.48, 36: 3856.75, 37: 884.17, 38: 3463.12, 39: 2560.74, 40: 4078.59, 41: 1362.22, 42: 3617.67, 43: 2936.40, 44: 1975.54, 45: 3492.01, 46: 1539.32, 47: 3908.42, 48: 961.00, 49: 3009.65, 50: 2515.04, 51: 3843.08, 52: 387.62, 53: 2557.44, 54: 3075.74, 55: 1018.43, 56: 2730.37, 57: 2100.56, 58: 1460.21, 59: 2403.29, 60: 2424.97, 61: 2539.28, 62: 1159.35, 63: 2595.79, 64: 512.00, 65: 400.22, 66: 1898.04, 67: 2974.34, 68: 2555.10, 70: 4018.17, 71: 1229.16, 72: 2846.36, 73: 1421.47, 74: 821.78, 75: 3916.00, 76: 2356.76, 77: 3809.65, 78: 518.42, 79: 1293.35, 80: 2589.97, 81: 3438.25, 82: 3085.79, 83: 924.43, 84: 3101.19, 85: 2825.32, 86: 2638.95, 87: 272.01, 88: 1509.87, 89: 803.70, 90: 1879.83, 91: 1168.44, 92: 1799.46, 93: 313.01, 94: 3675.57, 95: 3742.78, 96: 807.82, 97: 1960.62, 98: 1150.02, 99: 4029.17},
70: {, 0: 2635.28, 1: 1901.81, 2: 401.00, 3: 3704.46, 4: 1007.26, 5: 3011.41, 6: 1205.23, 7: 2865.05, 8: 1219.06, 9: 3192.03, 10: 2664.75, 11: 1183.26, 12: 1507.06, 13: 267.55, 14: 2677.85, 15: 3873.84, 16: 2690.88, 17: 3684.53, 18: 3448.19, 19: 1335.00, 20: 2983.12, 21: 3943.35, 22: 2104.34, 23: 3645.79, 24: 1521.87, 25: 4080.99, 26: 1242.33, 27: 2232.26, 28: 555.30, 29: 711.14, 30: 3106.05, 31: 2487.61, 32: 1481.00, 33: 838.63, 34: 1370.35, 35: 3448.00, 36: 1075.60, 37: 3616.54, 38: 955.26, 39: 1984.72, 40: 82.68, 41: 2939.08, 42: 489.84, 43: 1653.94, 44: 2295.38, 45: 538.68, 46: 2536.40, 47: 356.92, 48: 3058.47, 49: 1492.62, 50: 1510.68, 51: 752.16, 52: 3635.29, 53: 2074.39, 54: 967.35, 55: 3274.72, 56: 1297.58, 57: 1941.51, 58: 3025.95, 59: 1776.98, 60: 1632.07, 61: 1626.78, 62: 2864.13, 63: 1905.25, 64: 3850.65, 65: 3904.24, 66: 2224.46, 67: 1273.80, 68: 1715.73, 69: 4018.17, 71: 3041.14, 72: 1530.21, 73: 2983.45, 74: 3247.46, 75: 1571.10, 76: 1733.84, 77: 779.10, 78: 3587.86, 79: 3153.35, 80: 1522.28, 81: 1608.08, 82: 952.43, 83: 3312.63, 84: 1121.49, 85: 1323.35, 86: 1380.36, 87: 3827.63, 88: 2920.42, 89: 3234.57, 90: 2286.11, 91: 2890.55, 92: 2225.37, 93: 3949.04, 94: 1652.37, 95: 806.04, 96: 3386.62, 97: 2187.22, 98: 3715.53, 99: 121.43},
71: {, 0: 801.54, 1: 2458.65, 2: 2640.38, 3: 1293.39, 4: 3145.43, 5: 604.47, 6: 1850.60, 7: 1113.80, 8: 1848.37, 9: 269.65, 10: 467.09, 11: 1861.20, 12: 3254.74, 13: 2811.12, 14: 538.16, 15: 1023.14, 16: 529.92, 17: 697.25, 18: 923.64, 19: 1708.01, 20: 151.71, 21: 1078.69, 22: 947.27, 23: 613.94, 24: 1809.03, 25: 1684.60, 26: 1825.48, 27: 1099.24, 28: 2512.74, 29: 2691.15, 30: 1546.43, 31: 577.29, 32: 3334.12, 33: 2213.22, 34: 1749.71, 35: 423.79, 36: 3153.02, 37: 575.84, 38: 2709.45, 39: 2130.55, 40: 3088.49, 41: 1356.19, 42: 2589.22, 43: 2398.62, 44: 796.52, 45: 2502.51, 46: 554.91, 47: 3011.66, 48: 607.60, 49: 2408.26, 50: 1653.32, 51: 3049.07, 52: 885.87, 53: 2177.24, 54: 2073.96, 55: 1293.54, 56: 1757.82, 57: 1354.51, 58: 287.56, 59: 1290.85, 60: 1644.42, 61: 1440.04, 62: 562.23, 63: 2127.14, 64: 1404.09, 65: 1371.75, 66: 1361.03, 67: 2253.54, 68: 1953.20, 69: 1229.16, 70: 3041.14, 72: 2228.47, 73: 214.70, 74: 939.58, 75: 3354.00, 76: 1307.38, 77: 3022.93, 78: 710.74, 79: 1490.74, 80: 1848.11, 81: 2911.53, 82: 2089.51, 83: 314.24, 84: 2340.16, 85: 1746.16, 86: 1735.61, 87: 965.37, 88: 1529.99, 89: 549.60, 90: 758.60, 91: 909.30, 92: 1067.58, 93: 1024.54, 94: 3155.96, 95: 2962.40, 96: 1170.94, 97: 856.03, 98: 719.22, 99: 3078.00},
72: {, 0: 1531.16, 1: 462.24, 2: 1287.39, 3: 2416.40, 4: 1030.67, 5: 1922.57, 6: 934.85, 7: 1577.35, 8: 886.28, 9: 2259.18, 10: 2054.66, 11: 1147.97, 12: 1028.41, 13: 1273.98, 14: 2129.61, 15: 2756.81, 16: 2140.14, 17: 2698.60, 18: 2254.93, 19: 1154.25, 20: 2246.86, 21: 2825.86, 22: 1563.50, 23: 2728.73, 24: 483.80, 25: 2737.59, 26: 1280.44, 27: 1141.86, 28: 1074.73, 29: 838.50, 30: 1682.10, 31: 1854.62, 32: 1111.96, 33: 995.08, 34: 1440.49, 35: 2645.10, 36: 1012.79, 37: 2737.01, 38: 669.79, 39: 454.67, 40: 1611.42, 41: 1564.89, 42: 1399.66, 43: 232.74, 44: 1777.79, 45: 1201.60, 46: 1678.39, 47: 1264.80, 48: 1965.51, 49: 179.82, 50: 731.97, 51: 1056.08, 52: 2501.29, 53: 545.22, 54: 1067.16, 55: 1931.89, 56: 950.51, 57: 875.03, 58: 2356.20, 59: 1442.80, 60: 630.05, 61: 1376.89, 62: 1816.46, 63: 375.71, 64: 2552.87, 65: 2630.96, 66: 954.75, 67: 266.72, 68: 292.88, 69: 2846.36, 70: 1530.21, 71: 2228.47, 73: 2280.27, 74: 2024.95, 75: 1126.43, 76: 1262.91, 77: 1017.82, 78: 2532.85, 79: 1746.14, 80: 432.83, 81: 691.40, 82: 1051.58, 83: 2398.70, 84: 411.62, 85: 1299.52, 86: 778.92, 87: 2724.32, 88: 1495.37, 89: 2171.80, 90: 1651.45, 91: 1682.52, 92: 1166.69, 93: 2873.21, 94: 932.18, 95: 949.96, 96: 2093.59, 97: 1572.38, 98: 2944.44, 99: 1477.01},
73: {, 0: 941.98, 1: 2543.91, 2: 2582.75, 3: 1507.78, 4: 3156.85, 5: 802.89, 6: 1814.36, 7: 1291.33, 8: 1817.95, 9: 480.59, 10: 328.69, 11: 1800.28, 12: 3298.39, 13: 2763.84, 14: 364.92, 15: 1211.14, 16: 354.15, 17: 857.32, 18: 1138.32, 19: 1649.46, 20: 66.01, 21: 1262.40, 22: 879.72, 23: 740.77, 24: 1838.05, 25: 1896.99, 26: 1749.99, 27: 1181.68, 28: 2469.58, 29: 2680.53, 30: 1736.07, 31: 496.46, 32: 3373.68, 33: 2169.10, 34: 1656.49, 35: 475.79, 36: 3169.09, 37: 679.83, 38: 2719.47, 39: 2223.21, 40: 3026.09, 41: 1537.35, 42: 2518.81, 43: 2463.76, 44: 694.95, 45: 2446.94, 46: 611.31, 47: 2978.88, 48: 811.05, 49: 2459.66, 50: 1658.82, 51: 3044.06, 52: 1091.46, 53: 2277.78, 54: 2021.14, 55: 1498.19, 56: 1723.07, 57: 1407.28, 58: 89.00, 59: 1210.66, 60: 1673.96, 61: 1361.71, 62: 737.83, 63: 2212.60, 64: 1617.22, 65: 1582.39, 66: 1463.01, 67: 2280.46, 68: 2016.09, 69: 1421.47, 70: 2983.45, 71: 214.70, 72: 2280.27, 74: 1149.53, 75: 3399.15, 76: 1257.62, 77: 3020.12, 78: 905.06, 79: 1684.50, 80: 1880.72, 81: 2969.73, 82: 2038.37, 83: 497.04, 84: 2355.00, 85: 1669.23, 86: 1725.12, 87: 1153.01, 88: 1706.88, 89: 764.23, 90: 705.44, 91: 1090.95, 92: 1144.21, 93: 1195.61, 94: 3212.20, 95: 2961.99, 96: 1382.49, 97: 804.61, 98: 732.32, 99: 3028.15},
74: {, 0: 628.05, 1: 2076.21, 2: 2870.34, 3: 477.20, 4: 3049.35, 5: 374.23, 6: 2070.02, 7: 456.98, 8: 2045.11, 9: 712.20, 10: 1280.11, 11: 2174.95, 12: 3009.98, 13: 2986.96, 14: 1386.39, 15: 755.79, 16: 1383.58, 17: 853.80, 18: 234.08, 19: 2032.81, 20: 1083.66, 21: 820.95, 22: 1458.53, 23: 979.40, 24: 1765.36, 25: 890.02, 26: 2198.62, 27: 1015.33, 28: 2692.19, 29: 2720.01, 30: 697.40, 31: 1252.95, 32: 3103.65, 33: 2422.60, 34: 2196.94, 35: 1115.29, 36: 3036.08, 37: 1044.09, 38: 2647.64, 39: 1745.76, 40: 3312.19, 41: 591.49, 42: 2875.02, 43: 2116.01, 44: 1440.70, 45: 2733.83, 46: 930.82, 47: 3114.23, 48: 349.32, 49: 2187.88, 50: 1736.78, 51: 3030.19, 52: 506.35, 53: 1748.61, 54: 2332.22, 55: 370.00, 56: 1984.54, 57: 1308.77, 58: 1227.06, 59: 1759.71, 60: 1628.65, 61: 1876.57, 62: 512.64, 63: 1777.67, 64: 623.03, 65: 659.88, 66: 1080.08, 67: 2158.86, 68: 1734.13, 69: 821.78, 70: 3247.46, 71: 939.58, 72: 2024.95, 73: 1149.53, 75: 3097.62, 76: 1670.61, 77: 2996.02, 78: 629.05, 79: 620.74, 80: 1782.29, 81: 2620.77, 82: 2339.47, 83: 797.30, 84: 2289.39, 85: 2134.17, 86: 1869.64, 87: 735.85, 88: 764.39, 89: 416.45, 90: 1296.44, 91: 358.47, 92: 1024.71, 93: 895.64, 94: 2859.81, 95: 2928.74, 96: 236.54, 97: 1351.93, 98: 1351.66, 99: 3249.33},
75: {, 0: 2648.72, 1: 1045.02, 2: 1615.07, 3: 3443.82, 4: 564.02, 5: 3034.31, 6: 1810.52, 7: 2641.09, 8: 1776.01, 9: 3383.75, 10: 3158.02, 11: 1975.97, 12: 102.83, 13: 1446.33, 14: 3224.59, 15: 3845.84, 16: 3235.83, 17: 3814.70, 18: 3331.30, 19: 2052.31, 20: 3368.21, 21: 3913.52, 22: 2634.44, 23: 3851.53, 24: 1565.92, 25: 3715.82, 26: 2108.31, 27: 2267.42, 28: 1485.90, 29: 1045.78, 30: 2637.32, 31: 2956.32, 32: 92.20, 33: 1639.01, 34: 2286.50, 35: 3771.41, 36: 496.33, 37: 3861.99, 38: 829.67, 39: 1357.63, 40: 1642.17, 41: 2576.16, 42: 1784.63, 43: 985.43, 44: 2854.46, 45: 1629.21, 46: 2802.28, 47: 1216.15, 48: 3075.65, 49: 947.11, 50: 1777.49, 51: 821.93, 52: 3590.55, 53: 1374.40, 54: 1791.40, 55: 2944.68, 56: 1869.85, 57: 1999.56, 58: 3472.69, 59: 2445.43, 60: 1727.95, 61: 2342.41, 62: 2935.95, 63: 1320.24, 64: 3569.72, 65: 3659.81, 66: 2060.78, 67: 1135.65, 68: 1410.46, 69: 3916.00, 70: 1571.10, 71: 3354.00, 72: 1126.43, 73: 3399.15, 74: 3097.62, 76: 2289.65, 77: 800.16, 78: 3640.07, 79: 2715.00, 80: 1520.80, 81: 478.76, 82: 1768.51, 83: 3523.50, 84: 1105.21, 85: 2160.00, 86: 1763.55, 87: 3817.62, 88: 2464.21, 89: 3283.40, 90: 2746.49, 91: 2772.59, 92: 2293.01, 93: 3970.88, 94: 259.79, 95: 791.94, 96: 3130.46, 97: 2660.11, 98: 4070.66, 99: 1457.12},
76: {, 0: 1048.43, 1: 1663.86, 2: 1333.01, 3: 2147.80, 4: 1957.63, 5: 1361.38, 6: 560.02, 7: 1411.56, 8: 569.57, 9: 1469.71, 10: 951.16, 11: 555.64, 12: 2186.84, 13: 1507.46, 14: 986.43, 15: 2189.99, 16: 999.03, 17: 1962.94, 18: 1830.41, 19: 402.06, 20: 1252.62, 21: 2257.49, 22: 382.24, 23: 1914.37, 24: 780.86, 25: 2558.13, 26: 540.77, 27: 760.49, 28: 1212.05, 29: 1446.57, 30: 1810.37, 31: 761.84, 32: 2246.45, 33: 911.55, 34: 527.75, 35: 1715.76, 36: 1980.47, 37: 1882.99, 38: 1526.24, 39: 1430.10, 40: 1781.32, 41: 1588.69, 42: 1286.42, 43: 1489.32, 44: 595.63, 45: 1195.30, 46: 824.15, 47: 1722.50, 48: 1406.59, 49: 1422.45, 50: 531.52, 51: 1814.77, 52: 1969.17, 53: 1522.67, 54: 767.01, 55: 1823.68, 56: 471.27, 57: 643.12, 58: 1307.85, 59: 191.02, 60: 658.48, 61: 221.42, 62: 1204.76, 63: 1379.34, 64: 2293.36, 65: 2320.61, 66: 967.86, 67: 1159.70, 68: 1093.81, 69: 2356.76, 70: 1733.84, 71: 1307.38, 72: 1262.91, 73: 1257.62, 74: 1670.61, 75: 2289.65, 77: 1794.75, 78: 1888.40, 79: 1818.62, 80: 832.33, 81: 1926.45, 82: 783.13, 83: 1584.52, 84: 1188.69, 85: 469.13, 86: 526.64, 87: 2139.31, 88: 1663.20, 89: 1554.01, 90: 553.93, 91: 1347.46, 92: 724.56, 93: 2246.72, 94: 2149.70, 95: 1741.62, 96: 1863.10, 97: 454.58, 98: 1989.19, 99: 1773.05},
77: {, 0: 2442.33, 1: 1262.33, 2: 832.66, 3: 3412.10, 4: 242.17, 5: 2838.77, 6: 1245.83, 7: 2563.43, 8: 1227.73, 9: 3113.28, 10: 2735.06, 11: 1354.71, 12: 730.03, 13: 649.06, 14: 2779.34, 15: 3699.19, 16: 2791.77, 17: 3586.25, 18: 3218.94, 19: 1468.42, 20: 3002.80, 21: 3769.23, 22: 2172.46, 23: 3586.05, 24: 1248.88, 25: 3747.58, 26: 1471.81, 27: 2027.98, 28: 742.05, 29: 351.57, 30: 2699.37, 31: 2537.25, 32: 712.83, 33: 968.92, 34: 1644.66, 35: 3446.35, 36: 305.63, 37: 3577.09, 38: 351.76, 39: 1441.52, 40: 854.42, 41: 2574.52, 42: 1003.69, 43: 1049.21, 44: 2389.80, 45: 871.56, 46: 2473.86, 47: 422.21, 48: 2884.54, 49: 905.88, 50: 1369.76, 51: 40.00, 52: 3446.79, 53: 1510.47, 54: 1136.60, 55: 2937.57, 56: 1327.42, 57: 1726.95, 58: 3081.14, 59: 1911.84, 60: 1405.16, 61: 1782.40, 62: 2711.32, 63: 1370.83, 64: 3552.04, 65: 3624.21, 66: 1916.76, 67: 837.86, 68: 1284.52, 69: 3809.65, 70: 779.10, 71: 3022.93, 72: 1017.82, 73: 3020.12, 74: 2996.02, 75: 800.16, 76: 1794.75, 78: 3447.22, 79: 2762.09, 80: 1223.00, 81: 858.12, 82: 1113.44, 83: 3247.42, 84: 709.14, 85: 1538.63, 86: 1295.17, 87: 3661.01, 88: 2512.30, 89: 3082.58, 90: 2322.14, 91: 2642.06, 92: 2037.97, 93: 3801.02, 94: 875.13, 95: 68.15, 96: 3087.91, 97: 2225.68, 98: 3736.75, 99: 671.32},
78: {, 0: 1007.91, 1: 2647.11, 2: 3193.36, 3: 718.36, 4: 3530.73, 5: 611.66, 6: 2382.86, 7: 1047.85, 8: 2369.32, 9: 454.23, 10: 1173.36, 11: 2438.24, 12: 3547.62, 13: 3340.40, 14: 1248.91, 15: 315.63, 16: 1240.62, 17: 229.65, 18: 441.49, 19: 2285.95, 20: 853.00, 21: 376.97, 22: 1575.31, 23: 386.26, 24: 2198.37, 25: 1043.35, 26: 2427.70, 27: 1419.61, 28: 3039.50, 29: 3142.15, 30: 1321.00, 31: 1247.60, 32: 3637.16, 33: 2749.23, 34: 2380.39, 35: 627.78, 36: 3525.83, 37: 471.83, 38: 3109.30, 39: 2311.33, 40: 3643.89, 41: 1217.72, 42: 3167.06, 43: 2654.97, 44: 1468.53, 45: 3054.12, 46: 1064.25, 47: 3506.41, 48: 567.67, 49: 2705.59, 50: 2108.33, 51: 3478.25, 52: 223.01, 53: 2327.54, 54: 2630.39, 55: 969.03, 56: 2290.91, 57: 1720.31, 58: 948.13, 59: 1917.21, 60: 2043.41, 61: 2058.25, 62: 737.01, 63: 2332.51, 64: 784.66, 65: 720.15, 66: 1580.77, 67: 2625.51, 68: 2240.45, 69: 518.42, 70: 3587.86, 71: 710.74, 72: 2532.85, 73: 905.06, 74: 629.05, 75: 3640.07, 76: 1888.40, 77: 3447.22, 79: 1240.45, 80: 2225.86, 81: 3169.93, 82: 2642.37, 83: 408.88, 84: 2739.85, 85: 2352.76, 86: 2220.79, 87: 259.33, 88: 1392.84, 89: 364.73, 90: 1385.14, 91: 878.32, 92: 1409.54, 93: 361.19, 94: 3413.31, 95: 3382.08, 96: 767.29, 97: 1471.24, 98: 782.97, 99: 3608.22},
79: {, 0: 862.97, 1: 1670.00, 2: 2811.81, 3: 758.02, 4: 2768.48, 5: 886.49, 6: 2071.42, 7: 438.51, 8: 2034.62, 9: 1301.62, 10: 1733.54, 11: 2226.23, 12: 2637.90, 13: 2885.92, 14: 1846.29, 15: 1301.41, 16: 1846.85, 17: 1468.70, 18: 806.11, 19: 2106.70, 20: 1619.41, 21: 1355.98, 22: 1729.44, 23: 1599.88, 24: 1632.34, 25: 1002.88, 26: 2285.96, 27: 1060.06, 28: 2611.67, 29: 2538.39, 30: 87.21, 31: 1646.48, 32: 2736.55, 33: 2382.40, 34: 2332.21, 35: 1725.14, 36: 2742.59, 37: 1664.62, 38: 2411.32, 39: 1370.76, 40: 3226.64, 41: 231.14, 42: 2853.29, 43: 1773.90, 44: 1785.82, 45: 2684.80, 46: 1286.10, 47: 2958.37, 48: 888.05, 49: 1881.55, 50: 1695.08, 51: 2799.70, 52: 1081.12, 53: 1341.46, 54: 2332.12, 55: 280.80, 56: 2001.03, 57: 1273.08, 58: 1769.59, 59: 1958.05, 60: 1538.73, 61: 2039.77, 62: 954.08, 63: 1424.40, 64: 866.85, 65: 967.50, 66: 943.76, 67: 1940.58, 68: 1481.56, 69: 1293.35, 70: 3153.35, 71: 1490.74, 72: 1746.14, 73: 1684.50, 74: 620.74, 75: 2715.00, 76: 1818.62, 77: 2762.09, 78: 1240.45, 80: 1631.21, 81: 2238.41, 82: 2333.26, 83: 1403.62, 84: 2088.17, 85: 2237.51, 86: 1840.94, 87: 1297.66, 88: 253.29, 89: 1022.61, 90: 1614.13, 91: 606.07, 92: 1094.15, 93: 1457.09, 94: 2462.66, 95: 2693.99, 96: 496.86, 97: 1635.81, 98: 1970.91, 99: 3132.05},
80: {, 0: 1219.59, 1: 842.63, 2: 1192.82, 3: 2215.77, 4: 1310.25, 5: 1616.27, 6: 593.67, 7: 1365.78, 8: 543.74, 9: 1908.69, 10: 1638.25, 11: 807.37, 12: 1419.32, 13: 1254.78, 14: 1708.17, 15: 2476.31, 16: 1719.08, 17: 2371.36, 18: 2001.03, 19: 775.34, 20: 1852.20, 21: 2546.38, 22: 1132.86, 23: 2382.22, 24: 51.48, 25: 2574.95, 26: 927.37, 27: 806.31, 28: 986.22, 29: 938.04, 30: 1584.06, 31: 1436.86, 32: 1493.08, 33: 793.30, 34: 1068.32, 35: 2270.21, 36: 1311.48, 37: 2381.00, 38: 883.63, 39: 667.44, 40: 1596.15, 41: 1419.09, 42: 1257.83, 43: 657.01, 44: 1348.90, 45: 1074.29, 46: 1293.26, 47: 1341.46, 48: 1661.88, 49: 601.05, 50: 305.31, 51: 1255.19, 52: 2224.30, 53: 770.17, 54: 799.72, 55: 1763.52, 56: 578.73, 57: 508.33, 58: 1952.87, 59: 1015.20, 60: 207.17, 61: 960.08, 62: 1491.66, 63: 599.10, 64: 2359.34, 65: 2423.58, 66: 714.79, 67: 406.87, 68: 303.12, 69: 2589.97, 70: 1522.28, 71: 1848.11, 72: 432.83, 73: 1880.72, 74: 1782.29, 75: 1520.80, 76: 832.33, 77: 1223.00, 78: 2225.86, 79: 1631.21, 81: 1114.47, 82: 791.62, 83: 2045.83, 84: 514.25, 85: 929.00, 86: 385.22, 87: 2438.01, 88: 1399.00, 89: 1861.14, 90: 1229.30, 91: 1425.40, 92: 819.15, 93: 2578.43, 94: 1349.02, 95: 1157.16, 96: 1892.73, 97: 1146.61, 98: 2567.31, 99: 1502.28},
81: {, 0: 2186.07, 1: 569.94, 2: 1530.89, 3: 2965.16, 4: 704.49, 5: 2567.16, 6: 1508.62, 7: 2163.98, 8: 1466.81, 9: 2927.25, 10: 2745.90, 11: 1700.40, 12: 399.85, 13: 1415.41, 14: 2819.89, 15: 3370.58, 16: 2830.54, 17: 3348.78, 18: 2854.63, 19: 1748.05, 20: 2935.03, 21: 3437.96, 22: 2246.67, 23: 3391.59, 24: 1163.52, 25: 3240.19, 26: 1836.78, 27: 1816.15, 28: 1355.38, 29: 941.76, 30: 2161.56, 31: 2545.64, 32: 499.41, 33: 1424.00, 34: 2011.20, 35: 3324.45, 36: 646.30, 37: 3405.70, 38: 680.92, 39: 878.93, 40: 1688.35, 41: 2097.48, 42: 1687.28, 43: 517.72, 44: 2463.33, 45: 1503.61, 46: 2364.98, 47: 1261.11, 48: 2607.65, 49: 514.58, 50: 1397.84, 51: 894.56, 52: 3115.56, 53: 897.04, 54: 1552.19, 55: 2466.17, 56: 1551.08, 57: 1562.69, 58: 3046.45, 59: 2096.74, 60: 1317.77, 61: 2011.66, 62: 2474.04, 63: 843.13, 64: 3091.41, 65: 3181.17, 66: 1594.66, 67: 775.77, 68: 958.43, 69: 3438.25, 70: 1608.08, 71: 2911.53, 72: 691.40, 73: 2969.73, 74: 2620.77, 75: 478.76, 76: 1926.45, 77: 858.12, 78: 3169.93, 79: 2238.41, 80: 1114.47, 82: 1531.17, 83: 3067.26, 84: 801.48, 85: 1875.29, 86: 1412.57, 87: 3343.23, 88: 1987.02, 89: 2815.71, 90: 2341.31, 91: 2299.00, 92: 1844.88, 93: 3497.37, 94: 245.31, 95: 813.46, 96: 2651.72, 97: 2260.50, 98: 3624.14, 99: 1512.41},
82: {, 0: 1715.55, 1: 1513.23, 2: 552.95, 3: 2808.11, 4: 1319.49, 5: 2078.01, 6: 269.68, 7: 1992.99, 8: 299.92, 9: 2240.56, 10: 1725.00, 11: 250.87, 12: 1670.75, 13: 725.58, 14: 1747.40, 15: 2933.65, 16: 1760.34, 17: 2733.48, 18: 2528.07, 19: 391.49, 20: 2035.22, 21: 3002.66, 22: 1158.86, 23: 2693.36, 24: 764.23, 25: 3200.73, 26: 358.45, 27: 1331.54, 28: 436.32, 29: 767.57, 30: 2300.21, 31: 1541.91, 32: 1703.78, 33: 145.96, 34: 532.02, 35: 2498.85, 36: 1359.94, 37: 2664.59, 38: 939.67, 39: 1431.69, 40: 1003.53, 41: 2106.81, 42: 535.56, 43: 1268.25, 44: 1358.76, 45: 414.04, 46: 1585.81, 47: 957.05, 48: 2124.86, 49: 1132.64, 50: 638.38, 51: 1123.64, 52: 2700.12, 53: 1535.01, 54: 23.35, 55: 2412.39, 56: 356.04, 57: 1065.77, 58: 2084.98, 59: 846.22, 60: 805.73, 61: 701.62, 62: 1927.05, 63: 1355.34, 64: 2955.26, 65: 2999.35, 66: 1390.20, 67: 813.55, 68: 1078.23, 69: 3085.79, 70: 952.43, 71: 2089.51, 72: 1051.58, 73: 2038.37, 74: 2339.47, 75: 1768.51, 76: 783.13, 77: 1113.44, 78: 2642.37, 79: 2333.26, 80: 791.62, 81: 1531.17, 83: 2360.37, 84: 735.87, 85: 427.93, 86: 492.33, 87: 2885.93, 88: 2123.88, 89: 2293.55, 90: 1336.79, 91: 1988.79, 92: 1316.62, 93: 3003.27, 94: 1703.20, 95: 1074.59, 96: 2499.12, 97: 1237.55, 98: 2770.59, 99: 990.12},
83: {, 0: 888.47, 1: 2581.30, 2: 2913.17, 3: 1061.23, 4: 3354.74, 5: 560.97, 6: 2112.27, 7: 1092.48, 8: 2105.55, 9: 140.04, 10: 781.22, 11: 2140.16, 12: 3426.64, 13: 3075.61, 14: 848.07, 15: 714.58, 16: 839.03, 17: 386.80, 18: 711.00, 19: 1986.58, 20: 447.60, 21: 767.52, 22: 1239.90, 23: 338.92, 24: 2011.27, 25: 1427.27, 26: 2113.52, 27: 1256.96, 28: 2775.34, 29: 2924.95, 30: 1471.85, 31: 882.78, 32: 3510.57, 33: 2478.19, 34: 2047.36, 35: 322.02, 36: 3357.30, 37: 338.54, 38: 2922.74, 39: 2246.48, 40: 3363.22, 41: 1313.68, 42: 2870.86, 43: 2549.87, 44: 1104.09, 45: 2774.40, 46: 782.16, 47: 3263.67, 48: 539.42, 49: 2577.02, 50: 1881.77, 51: 3275.60, 52: 606.39, 53: 2280.45, 54: 2346.10, 55: 1167.23, 56: 2019.24, 57: 1539.68, 58: 539.71, 59: 1585.20, 60: 1848.85, 61: 1732.20, 62: 603.52, 63: 2253.72, 64: 1154.48, 65: 1106.68, 66: 1480.35, 67: 2452.52, 68: 2113.21, 69: 924.43, 70: 3312.63, 71: 314.24, 72: 2398.70, 73: 497.04, 74: 797.30, 75: 3523.50, 76: 1584.52, 77: 3247.42, 78: 408.88, 79: 1403.62, 80: 2045.83, 81: 3067.26, 82: 2360.37, 84: 2551.28, 85: 2035.46, 86: 1977.43, 87: 656.49, 88: 1493.86, 89: 382.15, 90: 1048.56, 91: 889.64, 92: 1234.34, 93: 710.30, 94: 3312.57, 95: 3184.81, 96: 1005.63, 97: 1142.51, 98: 593.33, 99: 3343.53},
84: {, 0: 1733.84, 1: 832.31, 2: 880.57, 3: 2712.55, 4: 805.35, 5: 2130.50, 6: 714.19, 7: 1862.13, 8: 675.88, 9: 2415.41, 10: 2088.98, 11: 899.55, 12: 1002.73, 13: 863.02, 14: 2146.06, 15: 2990.09, 16: 2157.86, 17: 2882.94, 18: 2510.97, 19: 956.06, 20: 2332.05, 21: 3060.13, 22: 1545.29, 23: 2888.97, 24: 542.44, 25: 3058.68, 26: 1035.77, 27: 1320.25, 28: 670.23, 29: 450.87, 30: 2031.61, 31: 1887.69, 32: 1058.42, 33: 643.61, 34: 1211.06, 35: 2763.82, 36: 814.26, 37: 2884.20, 38: 371.55, 39: 864.43, 40: 1202.13, 41: 1889.48, 42: 1002.29, 43: 575.88, 44: 1766.09, 45: 804.19, 46: 1786.53, 47: 875.56, 48: 2176.13, 49: 420.95, 50: 697.83, 51: 741.97, 52: 2737.66, 53: 956.73, 54: 755.91, 55: 2246.39, 56: 766.85, 57: 1020.53, 58: 2421.83, 59: 1340.49, 60: 702.67, 61: 1238.13, 62: 2004.97, 63: 784.55, 64: 2854.15, 65: 2923.07, 66: 1212.28, 67: 153.40, 68: 611.06, 69: 3101.19, 70: 1121.49, 71: 2340.16, 72: 411.62, 73: 2355.00, 74: 2289.39, 75: 1105.21, 76: 1188.69, 77: 709.14, 78: 2739.85, 79: 2088.17, 80: 514.25, 81: 801.48, 82: 735.87, 83: 2551.28, 85: 1076.70, 86: 662.22, 87: 2952.07, 88: 1843.87, 89: 2375.13, 90: 1673.59, 91: 1934.30, 92: 1331.79, 93: 3092.68, 94: 993.32, 95: 643.01, 96: 2388.43, 97: 1581.89, 98: 3058.24, 99: 1074.01},
85: {, 0: 1508.30, 1: 1752.07, 2: 926.74, 3: 2611.06, 4: 1738.27, 5: 1830.30, 6: 369.43, 7: 1849.80, 8: 415.41, 9: 1926.37, 10: 1346.00, 11: 185.97, 12: 2059.72, 13: 1125.88, 14: 1354.89, 15: 2656.63, 16: 1367.93, 17: 2418.08, 18: 2298.44, 19: 155.43, 20: 1674.06, 21: 2723.72, 22: 798.91, 23: 2358.90, 24: 884.30, 25: 3018.81, 26: 81.15, 27: 1181.79, 28: 854.16, 29: 1189.93, 30: 2219.83, 31: 1177.43, 32: 2101.17, 33: 573.89, 34: 141.06, 35: 2139.99, 36: 1775.14, 37: 2320.75, 38: 1340.15, 39: 1594.95, 40: 1360.78, 41: 2006.38, 42: 850.00, 43: 1531.00, 44: 976.00, 45: 797.52, 46: 1289.60, 47: 1375.82, 48: 1875.61, 49: 1421.04, 50: 657.14, 51: 1550.06, 52: 2437.80, 53: 1696.79, 54: 405.42, 55: 2267.73, 56: 352.37, 57: 985.29, 58: 1707.07, 59: 458.63, 60: 841.61, 61: 307.65, 62: 1673.80, 63: 1528.03, 64: 2757.20, 65: 2787.09, 66: 1329.98, 67: 1110.26, 68: 1231.23, 69: 2825.32, 70: 1323.35, 71: 1746.16, 72: 1299.52, 73: 1669.23, 74: 2134.17, 75: 2160.00, 76: 469.13, 77: 1538.63, 78: 2352.76, 79: 2237.51, 80: 929.00, 81: 1875.29, 82: 427.93, 83: 2035.46, 84: 1076.70, 86: 544.11, 87: 2605.35, 88: 2059.28, 89: 2022.14, 90: 988.34, 91: 1803.18, 92: 1153.32, 93: 2709.48, 94: 2069.11, 95: 1497.33, 96: 2320.32, 97: 893.01, 98: 2399.08, 99: 1380.07},
86: {, 0: 1254.93, 1: 1218.50, 2: 1001.00, 3: 2332.15, 4: 1442.08, 5: 1633.84, 6: 237.99, 7: 1506.36, 8: 195.49, 9: 1848.41, 10: 1442.34, 11: 435.78, 12: 1660.76, 13: 1124.46, 14: 1492.38, 15: 2499.23, 16: 1504.49, 17: 2334.45, 18: 2067.94, 19: 390.13, 20: 1708.91, 21: 2569.07, 22: 887.39, 23: 2315.88, 24: 340.21, 25: 2718.66, 26: 546.80, 27: 854.78, 28: 825.68, 29: 956.66, 30: 1808.18, 31: 1243.22, 32: 1719.82, 33: 554.59, 34: 683.12, 35: 2157.45, 36: 1461.12, 37: 2299.23, 38: 1006.81, 39: 1050.92, 40: 1443.26, 41: 1614.68, 42: 1018.46, 43: 1011.48, 44: 1107.77, 45: 865.43, 46: 1195.81, 47: 1288.40, 48: 1680.91, 49: 921.65, 50: 146.37, 51: 1318.94, 52: 2257.57, 53: 1152.95, 54: 491.71, 55: 1924.32, 56: 197.52, 57: 576.32, 58: 1786.06, 59: 685.72, 60: 324.14, 61: 601.82, 62: 1489.50, 63: 984.00, 64: 2479.02, 65: 2528.25, 66: 897.98, 67: 638.80, 68: 687.12, 69: 2638.95, 70: 1380.36, 71: 1735.61, 72: 778.92, 73: 1725.12, 74: 1869.64, 75: 1763.55, 76: 526.64, 77: 1295.17, 78: 2220.79, 79: 1840.94, 80: 385.22, 81: 1412.57, 82: 492.33, 83: 1977.43, 84: 662.22, 85: 544.11, 87: 2454.59, 88: 1632.71, 89: 1862.38, 90: 1027.98, 91: 1514.46, 92: 845.65, 93: 2581.38, 94: 1629.71, 95: 1237.79, 96: 2018.75, 97: 932.62, 98: 2444.81, 99: 1390.86},
87: {, 0: 1219.45, 1: 2806.43, 2: 3435.26, 3: 644.05, 4: 3734.72, 5: 825.11, 6: 2624.00, 7: 1187.77, 8: 2608.58, 9: 713.08, 10: 1430.24, 11: 2686.40, 12: 3727.58, 13: 3577.38, 14: 1502.97, 15: 58.14, 16: 1494.30, 17: 346.17, 18: 506.74, 19: 2534.78, 20: 1103.96, 21: 118.60, 22: 1832.30, 23: 526.27, 24: 2413.33, 25: 882.16, 26: 2679.52, 27: 1634.96, 28: 3276.92, 29: 3363.45, 30: 1383.13, 31: 1506.93, 32: 3819.33, 33: 2989.42, 34: 2635.85, 35: 821.52, 36: 3726.75, 37: 622.27, 38: 3319.09, 39: 2473.47, 40: 3885.23, 41: 1319.89, 42: 3413.44, 43: 2832.73, 44: 1727.82, 45: 3296.14, 46: 1315.78, 47: 3735.79, 48: 778.54, 49: 2893.43, 50: 2337.47, 51: 3693.04, 52: 229.75, 53: 2480.85, 54: 2874.60, 55: 1017.01, 56: 2532.67, 57: 1937.45, 58: 1189.55, 59: 2173.13, 60: 2262.26, 61: 2312.98, 62: 965.11, 63: 2501.03, 64: 662.15, 65: 570.64, 66: 1769.60, 67: 2832.30, 68: 2431.46, 69: 272.01, 70: 3827.63, 71: 965.37, 72: 2724.32, 73: 1153.01, 74: 735.85, 75: 3817.62, 76: 2139.31, 77: 3661.01, 78: 259.33, 79: 1297.66, 80: 2438.01, 81: 3343.23, 82: 2885.93, 83: 656.49, 84: 2952.07, 85: 2605.35, 86: 2454.59, 88: 1484.52, 89: 593.06, 90: 1642.66, 91: 1045.31, 92: 1629.26, 93: 160.88, 94: 3584.44, 95: 3595.08, 96: 801.51, 97: 1727.62, 98: 904.76, 99: 3844.69},
88: {, 0: 806.49, 1: 1419.51, 2: 2587.07, 3: 992.36, 4: 2515.89, 5: 942.65, 6: 1867.18, 7: 416.33, 8: 1827.89, 9: 1376.94, 10: 1707.30, 11: 2033.10, 12: 2386.26, 13: 2652.87, 14: 1820.12, 15: 1495.20, 16: 1822.46, 17: 1615.11, 18: 979.61, 19: 1921.82, 20: 1644.19, 21: 1554.38, 22: 1621.67, 23: 1728.53, 24: 1403.70, 25: 1255.83, 26: 2102.26, 27: 905.28, 28: 2383.80, 29: 2294.63, 30: 187.77, 31: 1594.01, 32: 2484.68, 33: 2164.62, 34: 2162.40, 35: 1814.51, 36: 2489.62, 37: 1783.48, 38: 2162.05, 39: 1117.66, 40: 2994.92, 41: 180.42, 42: 2636.05, 43: 1520.61, 44: 1706.83, 45: 2462.78, 46: 1234.53, 47: 2716.59, 48: 956.62, 49: 1628.88, 50: 1486.34, 51: 2550.13, 52: 1259.48, 53: 1090.00, 54: 2124.24, 55: 494.50, 56: 1801.84, 57: 1078.72, 58: 1794.84, 59: 1816.50, 60: 1321.44, 61: 1884.22, 62: 970.22, 63: 1171.11, 64: 1109.76, 65: 1205.90, 66: 737.53, 67: 1694.94, 68: 1234.89, 69: 1509.87, 70: 2920.42, 71: 1529.99, 72: 1495.37, 73: 1706.88, 74: 764.39, 75: 2464.21, 76: 1663.20, 77: 2512.30, 78: 1392.84, 79: 253.29, 80: 1399.00, 81: 1987.02, 82: 2123.88, 83: 1493.86, 84: 1843.87, 85: 2059.28, 86: 1632.71, 87: 1484.52, 89: 1125.10, 90: 1529.61, 91: 621.09, 92: 945.40, 93: 1645.37, 94: 2212.87, 95: 2444.27, 96: 702.12, 97: 1536.58, 98: 2079.50, 99: 2895.38},
89: {, 0: 643.77, 1: 2301.80, 2: 2842.38, 3: 747.47, 4: 3166.42, 5: 249.33, 6: 2031.08, 7: 738.87, 8: 2015.52, 9: 300.03, 10: 954.11, 11: 2096.93, 12: 3189.99, 13: 2984.55, 14: 1049.49, 15: 640.10, 16: 1044.18, 17: 535.09, 18: 375.59, 19: 1946.11, 20: 700.16, 21: 709.19, 22: 1266.82, 23: 612.41, 24: 1833.70, 25: 1148.95, 26: 2094.78, 27: 1054.88, 28: 2684.01, 29: 2778.52, 30: 1092.47, 31: 979.46, 32: 3278.59, 33: 2396.38, 34: 2060.02, 35: 702.76, 36: 3161.96, 37: 659.76, 38: 2744.59, 39: 1965.33, 40: 3292.25, 41: 944.77, 42: 2822.24, 43: 2299.34, 44: 1191.92, 45: 2703.29, 46: 735.83, 47: 3145.68, 48: 208.12, 49: 2345.63, 50: 1747.16, 51: 3113.67, 52: 417.08, 53: 1987.42, 54: 2282.46, 55: 785.86, 56: 1939.87, 57: 1355.71, 58: 834.23, 59: 1600.49, 60: 1679.10, 61: 1735.66, 62: 373.98, 63: 1982.53, 64: 865.92, 65: 847.85, 66: 1222.65, 67: 2261.04, 68: 1879.90, 69: 803.70, 70: 3234.57, 71: 549.60, 72: 2171.80, 73: 764.23, 74: 416.45, 75: 3283.40, 76: 1554.01, 77: 3082.58, 78: 364.73, 79: 1022.61, 80: 1861.14, 81: 2815.71, 82: 2293.55, 83: 382.15, 84: 2375.13, 85: 2022.14, 86: 1862.38, 87: 593.06, 88: 1125.10, 90: 1082.39, 91: 547.53, 92: 1045.12, 93: 721.00, 94: 3059.86, 95: 3017.39, 96: 633.91, 97: 1159.75, 98: 955.07, 99: 3251.98},
90: {, 0: 752.97, 1: 1978.32, 2: 1885.11, 3: 1760.32, 4: 2468.07, 5: 938.87, 6: 1108.95, 7: 1175.92, 8: 1112.76, 9: 945.01, 10: 415.50, 11: 1104.00, 12: 2644.32, 13: 2061.38, 14: 478.87, 15: 1696.62, 16: 489.80, 17: 1433.20, 18: 1408.79, 19: 951.33, 20: 698.72, 21: 1761.14, 22: 191.64, 23: 1370.61, 24: 1182.21, 25: 2177.37, 26: 1067.28, 27: 709.66, 28: 1765.64, 29: 1979.45, 30: 1632.26, 31: 215.24, 32: 2713.60, 33: 1465.17, 34: 999.91, 35: 1162.16, 36: 2484.21, 37: 1334.16, 38: 2031.31, 39: 1686.15, 40: 2331.82, 41: 1403.87, 42: 1830.77, 43: 1856.16, 44: 179.04, 45: 1748.01, 46: 365.94, 47: 2273.52, 48: 977.95, 49: 1826.73, 50: 976.46, 51: 2344.87, 52: 1497.42, 53: 1759.97, 54: 1320.32, 55: 1537.62, 56: 1017.64, 57: 819.56, 58: 760.43, 59: 536.86, 60: 1023.89, 61: 683.74, 62: 786.70, 63: 1657.46, 64: 1898.89, 65: 1905.66, 66: 1007.25, 67: 1613.64, 68: 1416.12, 69: 1879.83, 70: 2286.11, 71: 758.60, 72: 1651.45, 73: 705.44, 74: 1296.44, 75: 2746.49, 76: 553.93, 77: 2322.14, 78: 1385.14, 79: 1614.13, 80: 1229.30, 81: 2341.31, 82: 1336.79, 83: 1048.56, 84: 1673.59, 85: 988.34, 86: 1027.98, 87: 1642.66, 88: 1529.61, 89: 1082.39, 91: 1041.57, 92: 662.12, 93: 1735.08, 94: 2577.96, 95: 2265.51, 96: 1518.51, 97: 99.41, 98: 1435.83, 99: 2326.86},
91: {, 0: 302.55, 1: 1769.47, 2: 2515.46, 3: 819.32, 4: 2701.30, 5: 329.07, 6: 1719.11, 7: 206.31, 8: 1692.61, 9: 764.70, 10: 1127.82, 11: 1832.69, 12: 2682.30, 13: 2629.44, 14: 1240.45, 15: 1075.38, 16: 1240.89, 17: 1076.75, 18: 576.94, 19: 1694.17, 20: 1027.19, 21: 1144.01, 22: 1180.86, 23: 1159.04, 24: 1407.61, 25: 1217.87, 26: 1864.20, 27: 659.70, 28: 2335.40, 29: 2362.63, 30: 648.68, 31: 1049.12, 32: 2774.04, 33: 2068.35, 34: 1875.14, 35: 1205.60, 36: 2690.17, 37: 1200.65, 38: 2294.88, 39: 1434.20, 40: 2955.87, 41: 447.18, 42: 2524.08, 43: 1787.50, 44: 1204.88, 45: 2379.54, 46: 693.31, 47: 2755.81, 48: 352.14, 49: 1849.61, 50: 1380.06, 51: 2675.81, 52: 819.68, 53: 1449.23, 54: 1982.33, 55: 496.59, 56: 1635.24, 57: 950.64, 58: 1178.05, 59: 1454.75, 60: 1270.18, 61: 1560.58, 62: 353.41, 63: 1458.09, 64: 966.48, 65: 1013.97, 66: 730.25, 67: 1806.05, 68: 1390.12, 69: 1168.44, 70: 2890.55, 71: 909.30, 72: 1682.52, 73: 1090.95, 74: 358.47, 75: 2772.59, 76: 1347.46, 77: 2642.06, 78: 878.32, 79: 606.07, 80: 1425.40, 81: 2299.00, 82: 1988.79, 83: 889.64, 84: 1934.30, 85: 1803.18, 86: 1514.46, 87: 1045.31, 88: 621.09, 89: 547.53, 90: 1041.57, 92: 672.17, 93: 1198.41, 94: 2541.02, 95: 2575.02, 96: 517.22, 97: 1079.10, 98: 1482.21, 99: 2891.38},
92: {, 0: 412.98, 1: 1399.75, 2: 1845.80, 3: 1491.48, 4: 2128.81, 5: 804.20, 6: 1046.94, 7: 696.60, 8: 1020.77, 9: 1095.56, 10: 982.15, 11: 1166.28, 12: 2195.08, 13: 1967.08, 14: 1080.60, 15: 1670.48, 16: 1088.02, 17: 1552.28, 18: 1223.06, 19: 1033.16, 20: 1102.43, 21: 1740.65, 22: 702.28, 23: 1567.83, 24: 789.52, 25: 1886.56, 26: 1208.20, 27: 47.68, 28: 1670.19, 29: 1734.41, 30: 1086.58, 31: 805.44, 32: 2277.58, 33: 1397.91, 34: 1240.72, 35: 1479.83, 36: 2128.07, 37: 1571.99, 38: 1702.41, 39: 1080.53, 40: 2288.88, 41: 864.14, 42: 1851.93, 43: 1331.08, 44: 837.61, 45: 1709.14, 46: 533.03, 47: 2109.75, 48: 850.72, 49: 1345.90, 50: 716.45, 51: 2068.79, 52: 1422.95, 53: 1140.04, 54: 1310.24, 55: 1115.63, 56: 963.42, 57: 311.26, 58: 1226.86, 59: 871.27, 60: 634.00, 61: 945.84, 62: 673.37, 63: 1068.39, 64: 1638.64, 65: 1684.14, 66: 347.25, 67: 1223.40, 68: 886.51, 69: 1799.46, 70: 2225.37, 71: 1067.58, 72: 1166.69, 73: 1144.21, 74: 1024.71, 75: 2293.01, 76: 724.56, 77: 2037.97, 78: 1409.54, 79: 1094.15, 80: 819.15, 81: 1844.88, 82: 1316.62, 83: 1234.34, 84: 1331.79, 85: 1153.32, 86: 845.65, 87: 1629.26, 88: 945.40, 89: 1045.12, 90: 662.12, 91: 672.17, 93: 1765.14, 94: 2089.68, 95: 1973.09, 96: 1184.40, 97: 636.13, 98: 1779.47, 99: 2231.58},
93: {, 0: 1358.85, 1: 2963.13, 2: 3554.43, 3: 784.62, 4: 3879.30, 5: 962.25, 6: 2744.02, 7: 1345.79, 8: 2730.51, 9: 791.77, 10: 1491.46, 11: 2797.85, 12: 3880.20, 13: 3701.49, 14: 1555.12, 15: 160.70, 16: 1545.52, 17: 341.92, 18: 667.47, 19: 2645.30, 20: 1152.91, 21: 133.65, 22: 1926.24, 23: 500.99, 24: 2552.33, 25: 975.55, 26: 2785.06, 27: 1773.18, 28: 3400.61, 29: 3499.21, 30: 1542.80, 31: 1585.78, 32: 3971.39, 33: 3110.41, 34: 2733.48, 35: 813.00, 36: 3872.59, 37: 594.01, 38: 3460.98, 39: 2629.52, 40: 4005.00, 41: 1480.69, 42: 3527.22, 43: 2985.61, 44: 1807.61, 45: 3415.18, 46: 1422.96, 47: 3866.20, 48: 916.56, 49: 3043.55, 50: 2467.80, 51: 3832.53, 52: 389.31, 53: 2638.35, 54: 2991.18, 55: 1176.32, 56: 2652.04, 57: 2075.01, 58: 1221.19, 59: 2269.90, 60: 2399.08, 61: 2412.71, 62: 1094.93, 63: 2655.86, 64: 783.78, 65: 682.11, 66: 1918.60, 67: 2975.40, 68: 2580.34, 69: 313.01, 70: 3949.04, 71: 1024.54, 72: 2873.21, 73: 1195.61, 74: 895.64, 75: 3970.88, 76: 2246.72, 77: 3801.02, 78: 361.19, 79: 1457.09, 80: 2578.43, 81: 3497.37, 82: 3003.27, 83: 710.30, 84: 3092.68, 85: 2709.48, 86: 2581.38, 87: 160.88, 88: 1645.37, 89: 721.00, 90: 1735.08, 91: 1198.41, 92: 1765.14, 94: 3739.13, 95: 3735.48, 96: 960.49, 97: 1823.69, 98: 841.61, 99: 3969.29},
94: {, 0: 2431.13, 1: 793.77, 2: 1633.18, 3: 3196.27, 4: 670.55, 5: 2811.48, 6: 1707.42, 7: 2402.84, 8: 1668.26, 9: 3172.56, 10: 2984.60, 11: 1889.65, 12: 215.64, 13: 1490.62, 14: 3056.80, 15: 3611.10, 16: 3067.61, 17: 3593.24, 18: 3093.82, 19: 1949.05, 20: 3178.14, 21: 3678.20, 22: 2478.33, 23: 3636.77, 24: 1397.06, 25: 3462.05, 26: 2025.08, 27: 2061.21, 28: 1477.35, 29: 1042.93, 30: 2384.07, 31: 2783.86, 32: 311.01, 33: 1585.32, 34: 2201.81, 35: 3569.38, 36: 602.70, 37: 3651.01, 38: 794.48, 39: 1114.83, 40: 1728.94, 41: 2329.09, 42: 1797.39, 43: 762.92, 44: 2696.24, 45: 1625.08, 46: 2608.57, 47: 1296.30, 48: 2851.76, 49: 753.45, 50: 1624.98, 51: 905.65, 52: 3356.37, 53: 1124.77, 54: 1725.19, 55: 2696.40, 56: 1756.77, 57: 1805.74, 58: 3288.36, 59: 2315.42, 60: 1554.11, 61: 2223.69, 62: 2719.14, 63: 1083.41, 64: 3320.43, 65: 3412.04, 66: 1839.42, 67: 991.06, 68: 1203.17, 69: 3675.57, 70: 1652.37, 71: 3155.96, 72: 932.18, 73: 3212.20, 74: 2859.81, 75: 259.79, 76: 2149.70, 77: 875.13, 78: 3413.31, 79: 2462.66, 80: 1349.02, 81: 245.31, 82: 1703.20, 83: 3312.57, 84: 993.32, 85: 2069.11, 86: 1629.71, 87: 3584.44, 88: 2212.87, 89: 3059.86, 90: 2577.96, 91: 2541.02, 92: 2089.68, 93: 3739.13, 95: 846.98, 96: 2885.19, 97: 2495.57, 98: 3869.06, 99: 1546.39},
95: {, 0: 2376.68, 1: 1200.94, 2: 826.46, 3: 3344.20, 4: 253.14, 5: 2773.24, 6: 1196.34, 7: 2495.67, 8: 1176.48, 9: 3050.34, 10: 2679.09, 11: 1312.49, 12: 715.44, 13: 655.08, 14: 2724.89, 15: 3633.06, 16: 2737.26, 17: 3522.24, 18: 3151.94, 19: 1422.26, 20: 2943.93, 21: 3703.08, 22: 2117.98, 23: 3523.32, 24: 1183.73, 25: 3679.44, 26: 1432.25, 27: 1962.63, 28: 719.61, 29: 307.42, 30: 2631.36, 31: 2480.71, 32: 707.64, 33: 931.43, 34: 1606.57, 35: 3385.97, 36: 307.92, 37: 3515.10, 38: 283.64, 39: 1375.18, 40: 883.70, 41: 2506.37, 42: 997.09, 43: 984.59, 44: 2336.01, 45: 854.63, 46: 2412.46, 47: 451.69, 48: 2818.95, 49: 839.77, 50: 1309.07, 51: 106.23, 52: 3380.48, 53: 1445.05, 54: 1097.87, 55: 2869.46, 56: 1276.24, 57: 1661.95, 58: 3023.78, 59: 1862.38, 60: 1340.84, 61: 1735.03, 62: 2646.47, 63: 1304.08, 64: 3484.07, 65: 3556.39, 66: 1849.31, 67: 770.28, 68: 1216.38, 69: 3742.78, 70: 806.04, 71: 2962.40, 72: 949.96, 73: 2961.99, 74: 2928.74, 75: 791.94, 76: 1741.62, 77: 68.15, 78: 3382.08, 79: 2693.99, 80: 1157.16, 81: 813.46, 82: 1074.59, 83: 3184.81, 84: 643.01, 85: 1497.33, 86: 1237.79, 87: 3595.08, 88: 2444.27, 89: 3017.39, 90: 2265.51, 91: 2575.02, 92: 1973.09, 93: 3735.48, 94: 846.98, 96: 3020.02, 97: 2169.48, 98: 3677.03, 99: 703.29},
96: {, 0: 814.88, 1: 2093.04, 2: 3018.38, 3: 324.23, 4: 3124.04, 5: 609.58, 6: 2229.60, 7: 527.06, 8: 2201.18, 9: 933.77, 10: 1516.32, 11: 2348.60, 12: 3047.17, 13: 3122.90, 14: 1622.85, 15: 804.56, 16: 1620.09, 17: 996.83, 18: 325.86, 19: 2211.03, 20: 1316.80, 21: 859.62, 22: 1674.13, 23: 1144.02, 24: 1881.41, 25: 702.16, 26: 2381.41, 27: 1167.59, 28: 2832.83, 29: 2828.69, 30: 583.06, 31: 1484.86, 32: 3143.37, 33: 2573.32, 34: 2390.84, 35: 1315.77, 36: 3105.84, 37: 1218.66, 38: 2736.83, 39: 1772.88, 40: 3454.16, 41: 558.35, 42: 3033.49, 43: 2160.70, 44: 1667.89, 45: 2883.91, 46: 1154.67, 47: 3233.43, 48: 585.84, 49: 2247.50, 50: 1880.46, 51: 3123.47, 52: 589.48, 53: 1761.85, 54: 2493.48, 55: 216.11, 56: 2147.43, 57: 1446.36, 58: 1458.46, 59: 1963.97, 60: 1756.20, 61: 2074.35, 62: 741.97, 63: 1814.23, 64: 466.62, 65: 537.43, 66: 1178.52, 67: 2250.83, 68: 1808.88, 69: 807.82, 70: 3386.62, 71: 1170.94, 72: 2093.59, 73: 1382.49, 74: 236.54, 75: 3130.46, 76: 1863.10, 77: 3087.91, 78: 767.29, 79: 496.86, 80: 1892.73, 81: 2651.72, 82: 2499.12, 83: 1005.63, 84: 2388.43, 85: 2320.32, 86: 2018.75, 87: 801.51, 88: 702.12, 89: 633.91, 90: 1518.51, 91: 517.22, 92: 1184.40, 93: 960.49, 94: 2885.19, 95: 3020.02, 97: 1568.82, 98: 1531.28, 99: 3381.39},
97: {, 0: 782.65, 1: 1911.41, 2: 1786.24, 3: 1821.03, 4: 2373.91, 5: 1002.96, 6: 1009.76, 7: 1199.81, 8: 1013.98, 9: 1035.71, 10: 509.73, 11: 1005.56, 12: 2557.74, 13: 1962.03, 14: 565.10, 15: 1780.90, 16: 576.64, 17: 1525.91, 18: 1475.71, 19: 852.68, 20: 798.11, 21: 1846.20, 22: 107.94, 23: 1466.90, 24: 1098.60, 25: 2237.87, 26: 971.39, 27: 683.70, 28: 1666.23, 29: 1882.18, 30: 1648.81, 31: 312.08, 32: 2625.68, 33: 1365.77, 34: 909.80, 35: 1261.31, 36: 2390.97, 37: 1431.82, 38: 1937.54, 39: 1626.64, 40: 2233.29, 41: 1419.80, 42: 1733.23, 43: 1781.00, 44: 214.37, 45: 1649.00, 46: 429.69, 47: 2174.28, 48: 1043.92, 49: 1746.15, 50: 886.14, 51: 2248.08, 52: 1576.26, 53: 1703.84, 54: 1221.16, 55: 1575.54, 56: 918.58, 57: 758.98, 58: 858.59, 59: 446.23, 60: 942.89, 61: 590.41, 62: 847.93, 63: 1594.40, 64: 1961.57, 65: 1972.79, 66: 974.31, 67: 1525.71, 68: 1344.86, 69: 1960.62, 70: 2187.22, 71: 856.03, 72: 1572.38, 73: 804.61, 74: 1351.93, 75: 2660.11, 76: 454.58, 77: 2225.68, 78: 1471.24, 79: 1635.81, 80: 1146.61, 81: 2260.50, 82: 1237.55, 83: 1142.51, 84: 1581.89, 85: 893.01, 86: 932.62, 87: 1727.62, 88: 1536.58, 89: 1159.75, 90: 99.41, 91: 1079.10, 92: 636.13, 93: 1823.69, 94: 2495.57, 95: 2169.48, 96: 1568.82, 98: 1535.22, 99: 2227.58},
98: {, 0: 1468.25, 1: 3155.99, 2: 3314.92, 3: 1498.55, 4: 3863.27, 5: 1154.05, 6: 2544.23, 7: 1683.74, 8: 2546.21, 9: 725.83, 10: 1053.23, 11: 2532.48, 12: 3971.85, 13: 3495.99, 14: 1057.65, 15: 950.96, 16: 1044.89, 17: 572.55, 18: 1209.69, 19: 2381.77, 20: 738.24, 21: 963.97, 22: 1612.04, 23: 397.34, 24: 2528.22, 25: 1786.11, 26: 2480.05, 27: 1808.18, 28: 3201.24, 29: 3401.48, 30: 2044.10, 31: 1228.74, 32: 4052.05, 33: 2900.74, 34: 2380.32, 35: 299.71, 36: 3871.60, 37: 313.38, 38: 3426.82, 39: 2823.44, 40: 3757.60, 41: 1899.09, 42: 3249.06, 43: 3109.08, 44: 1423.14, 45: 3179.23, 46: 1274.12, 47: 3708.78, 48: 1130.76, 49: 3124.08, 50: 2368.50, 51: 3762.06, 52: 1000.95, 53: 2862.28, 54: 2753.43, 55: 1716.91, 56: 2452.44, 57: 2072.06, 58: 692.94, 59: 1941.00, 60: 2363.59, 61: 2092.00, 62: 1189.73, 63: 2825.98, 64: 1550.38, 65: 1469.63, 66: 2053.31, 67: 2972.74, 68: 2665.92, 69: 1150.02, 70: 3715.53, 71: 719.22, 72: 2944.44, 73: 732.32, 74: 1351.66, 75: 4070.66, 76: 1989.19, 77: 3736.75, 78: 782.97, 79: 1970.91, 80: 2567.31, 81: 3624.14, 82: 2770.59, 83: 593.33, 84: 3058.24, 85: 2399.08, 86: 2444.81, 87: 904.76, 88: 2079.50, 89: 955.07, 90: 1435.83, 91: 1482.21, 92: 1779.47, 93: 841.61, 94: 3869.06, 95: 3677.03, 96: 1531.28, 97: 1535.22, 99: 3760.45},
99: {, 0: 2643.49, 1: 1830.81, 2: 454.28, 3: 3701.25, 4: 894.15, 5: 3024.70, 6: 1231.35, 7: 2857.27, 8: 1240.42, 9: 3220.44, 10: 2712.87, 11: 1229.99, 12: 1395.55, 13: 268.17, 14: 2730.56, 15: 3889.77, 16: 2743.57, 17: 3711.65, 18: 3454.29, 19: 1379.06, 20: 3025.33, 21: 3959.55, 22: 2148.45, 23: 3678.59, 24: 1505.96, 25: 4071.99, 26: 1299.72, 27: 2235.90, 28: 569.17, 29: 643.69, 30: 3081.99, 31: 2531.71, 32: 1366.50, 33: 865.52, 34: 1437.03, 35: 3488.80, 36: 962.93, 37: 3652.28, 38: 874.65, 39: 1931.36, 40: 185.07, 41: 2921.37, 42: 571.83, 43: 1587.15, 44: 2344.83, 45: 583.67, 46: 2564.05, 47: 251.75, 48: 3071.77, 49: 1426.97, 50: 1515.14, 51: 642.22, 52: 3648.39, 53: 2018.09, 54: 1007.04, 55: 3262.84, 56: 1324.36, 57: 1940.76, 58: 3073.52, 59: 1827.90, 60: 1625.25, 61: 1679.02, 62: 2879.80, 63: 1852.72, 64: 3846.81, 65: 3903.56, 66: 2211.73, 67: 1227.37, 68: 1678.04, 69: 4029.17, 70: 121.43, 71: 3078.00, 72: 1477.01, 73: 3028.15, 74: 3249.33, 75: 1457.12, 76: 1773.05, 77: 671.32, 78: 3608.22, 79: 3132.05, 80: 1502.28, 81: 1512.41, 82: 990.12, 83: 3343.53, 84: 1074.01, 85: 1380.07, 86: 1390.86, 87: 3844.69, 88: 2895.38, 89: 3251.98, 90: 2326.86, 91: 2891.38, 92: 2231.58, 93: 3969.29, 94: 1546.39, 95: 703.29, 96: 3381.39, 97: 2227.58, 98: 3760.45}
}
MSTree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)]
Odd vertexes in MSTree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98]
Minimum weight matching (MST + Matching Edges): [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (64, 65, 114.77), (2, 42, 171.03), (90, 44, 179.04), (25, 69, 669.16), (29, 38, 261.24), (85, 34, 141.06), (60, 68, 435.39), (16, 10, 115.26), (96, 52, 589.48), (51, 77, 40.00), (53, 1, 331.30), (31, 46, 361.33), (21, 93, 133.65), (73, 58, 89.00), (75, 32, 92.20), (76, 59, 191.02), (40, 70, 82.68), (66, 27, 300.85), (98, 83, 593.33), (92, 9, 1095.56), (81, 72, 691.40), (11, 47, 1207.36)]
Eulerian tour: [14, 16, 10, 31, 46, 31, 90, 44, 90, 97, 22, 59, 76, 59, 61, 85, 34, 85, 26, 11, 54, 82, 33, 28, 45, 2, 42, 2, 13, 70, 40, 70, 99, 47, 11, 19, 56, 6, 8, 86, 50, 60, 24, 80, 68, 72, 67, 84, 38, 29, 38, 95, 77, 51, 77, 4, 36, 32, 75, 32, 12, 94, 81, 72, 49, 43, 1, 53, 39, 63, 68, 60, 57, 27, 66, 27, 92, 9, 83, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 93, 21, 69, 25, 64, 65, 64, 3, 96, 74, 18, 52, 96, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 9, 71, 20, 73, 58, 73, 10, 14]
Result path: [14, 16, 10, 31, 46, 90, 44, 97, 22, 59, 76, 61, 85, 34, 26, 11, 54, 82, 33, 28, 45, 2, 42, 13, 70, 40, 99, 47, 19, 56, 6, 8, 86, 50, 60, 24, 80, 68, 72, 67, 84, 38, 29, 95, 77, 51, 4, 36, 32, 75, 12, 94, 81, 49, 43, 1, 53, 39, 63, 57, 27, 66, 92, 9, 83, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 93, 69, 25, 64, 65, 3, 96, 74, 18, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 71, 20, 73, 58, 14]
Result length of the path: 24455.84
package main
import (
"fmt"
"math"
"math/rand"
"sort"
"time"
)
// --- Helper Structs ---
type Point struct {
x, y float64
id int // Original index
}
type Edge struct {
u, v int
weight float64
}
// --- Helper Function to print vectors/lists ---
func printContainer[T any](container []T, name string) {
fmt.Printf("%s: [", name)
for i, item := range container {
if i > 0 {
fmt.Print(", ")
}
fmt.Print(item)
}
fmt.Println("]")
}
func printEdges(edges []Edge, name string) {
fmt.Printf("%s: [", name)
for i, edge := range edges {
if i > 0 {
fmt.Print(", ")
}
fmt.Printf("(%d, %d, %.2f)", edge.u, edge.v, edge.weight)
}
fmt.Println("]")
}
func printGraph(graph [][]float64, name string) {
fmt.Printf("%s: {\n", name)
n := len(graph)
for i := 0; i < n; i++ {
fmt.Printf(" %d: {", i)
first := true
for j := 0; j < n; j++ {
if i != j {
if !first {
fmt.Print(", ")
}
fmt.Printf("%d: %.2f", j, graph[i][j])
first = false
}
}
comma := ""
if i != n-1 {
comma = ","
}
fmt.Printf("}%s\n", comma)
}
fmt.Println("}")
}
// --- Euclidean Distance ---
func getLength(p1, p2 Point) float64 {
dx := p1.x - p2.x
dy := p1.y - p2.y
return math.Sqrt(dx*dx + dy*dy)
}
// --- Build Complete Graph (Adjacency Matrix) ---
func buildGraph(data []Point) [][]float64 {
n := len(data)
graph := make([][]float64, n)
for i := range graph {
graph[i] = make([]float64, n)
}
for i := 0; i < n; i++ {
for j := i + 1; j < n; j++ { // Only calculate upper triangle + diagonal is 0
dist := getLength(data[i], data[j])
graph[i][j] = dist
graph[j][i] = dist // Symmetric graph
}
}
return graph
}
// --- Union-Find Data Structure ---
type UnionFind struct {
parent []int
rank []int
}
func NewUnionFind(n int) *UnionFind {
parent := make([]int, n)
rank := make([]int, n)
for i := range parent {
parent[i] = i
}
return &UnionFind{parent, rank}
}
func (uf *UnionFind) Find(i int) int {
if uf.parent[i] == i {
return i
}
// Path compression
uf.parent[i] = uf.Find(uf.parent[i])
return uf.parent[i]
}
func (uf *UnionFind) Unite(i, j int) {
rootI := uf.Find(i)
rootJ := uf.Find(j)
if rootI != rootJ {
// Union by rank
if uf.rank[rootI] < uf.rank[rootJ] {
uf.parent[rootI] = rootJ
} else if uf.rank[rootI] > uf.rank[rootJ] {
uf.parent[rootJ] = rootI
} else {
uf.parent[rootJ] = rootI
uf.rank[rootI]++
}
}
}
// --- Minimum Spanning Tree (Kruskal's Algorithm) ---
func minimumSpanningTree(graph [][]float64) []Edge {
n := len(graph)
if n == 0 {
return []Edge{}
}
edges := []Edge{}
for i := 0; i < n; i++ {
for j := i + 1; j < n; j++ { // Avoid duplicates and self-loops
edges = append(edges, Edge{i, j, graph[i][j]})
}
}
// Sort edges by weight
sort.Slice(edges, func(i, j int) bool {
return edges[i].weight < edges[j].weight
})
mst := []Edge{}
uf := NewUnionFind(n)
edgesCount := 0
for _, edge := range edges {
if uf.Find(edge.u) != uf.Find(edge.v) {
mst = append(mst, edge)
uf.Unite(edge.u, edge.v)
edgesCount++
if edgesCount == n-1 { // Optimization: MST has n-1 edges
break
}
}
}
return mst
}
// --- Find Vertices with Odd Degree in MST ---
func findOddVertexes(mst []Edge, n int) []int {
degree := make([]int, n)
for _, edge := range mst {
degree[edge.u]++
degree[edge.v]++
}
oddVertices := []int{}
for i := 0; i < n; i++ {
if degree[i]%2 != 0 {
oddVertices = append(oddVertices, i)
}
}
return oddVertices
}
// --- Minimum Weight Matching (Greedy Heuristic) ---
func minimumWeightMatching(mst []Edge, graph [][]float64, oddVertices []int) []Edge {
// Create a copy to allow modification while iterating
currentOdd := make([]int, len(oddVertices))
copy(currentOdd, oddVertices)
// Shuffle for randomness
rand.Seed(time.Now().UnixNano())
rand.Shuffle(len(currentOdd), func(i, j int) {
currentOdd[i], currentOdd[j] = currentOdd[j], currentOdd[i]
})
// Keep track of vertices already matched in this phase
matched := make([]bool, len(graph))
result := make([]Edge, len(mst))
copy(result, mst)
for i := 0; i < len(currentOdd); i++ {
v := currentOdd[i]
if matched[v] {
continue // Skip if already matched
}
minLength := math.Inf(1)
closestU := -1
// Find the closest unmatched odd vertex
for j := i + 1; j < len(currentOdd); j++ {
u := currentOdd[j]
if !matched[u] { // Check if 'u' is available
if graph[v][u] < minLength {
minLength = graph[v][u]
closestU = u
}
}
}
if closestU != -1 {
// Add the matching edge to the MST list (now a multigraph)
result = append(result, Edge{v, closestU, minLength})
matched[v] = true
matched[closestU] = true // Mark both as matched
}
}
return result
}
// --- Find Eulerian Tour (Hierholzer's Algorithm) ---
func findEulerianTour(matchedMst []Edge, n int) []int {
if len(matchedMst) == 0 {
return []int{}
}
// Build adjacency list representation of the multigraph (MST + matching)
type EdgeInfo struct {
neighbor int
edgePtr *Edge
}
adj := make([][]EdgeInfo, n)
edgeUsed := make(map[*Edge]bool)
for i := range matchedMst {
edge := &matchedMst[i]
adj[edge.u] = append(adj[edge.u], EdgeInfo{edge.v, edge})
adj[edge.v] = append(adj[edge.v], EdgeInfo{edge.u, edge})
edgeUsed[edge] = false
}
tour := []int{}
currentPath := []int{}
// Start at any vertex with edges (e.g., the first vertex of the first edge)
startNode := matchedMst[0].u
currentPath = append(currentPath, startNode)
for len(currentPath) > 0 {
currentNode := currentPath[len(currentPath)-1]
foundEdge := false
// Find an unused edge from the current node
for i := 0; i < len(adj[currentNode]); i++ {
neighbor := adj[currentNode][i].neighbor
edgePtr := adj[currentNode][i].edgePtr
if !edgeUsed[edgePtr] {
edgeUsed[edgePtr] = true // Mark edge as used
// Push neighbor onto stack and move to it
currentPath = append(currentPath, neighbor)
foundEdge = true
break // Move to the neighbor
}
}
// If no unused edge was found from currentNode, backtrack
if !foundEdge {
tour = append(tour, currentPath[len(currentPath)-1])
currentPath = currentPath[:len(currentPath)-1]
}
}
// Reverse the tour
for i, j := 0, len(tour)-1; i < j; i, j = i+1, j-1 {
tour[i], tour[j] = tour[j], tour[i]
}
return tour
}
// --- Main TSP Function (Christofides Approximation) ---
func tsp(data []Point) (float64, []int) {
//fmt.Printf("%s\n", "step in `tsp` function")
n := len(data)
if n == 0 {
return 0.0, []int{}
}
if n == 1 {
return 0.0, []int{data[0].id}
}
// Build a graph
G := buildGraph(data)
//printGraph(G, "Graph")
// Build a minimum spanning tree
MSTree := minimumSpanningTree(G)
printEdges(MSTree, "MSTree")
// Find odd degree vertices
oddVertexes := findOddVertexes(MSTree, n)
printContainer(oddVertexes, "Odd vertexes in MSTree")
// Add minimum weight matching edges (using greedy heuristic)
// Note: This returns a new slice containing MST + matching edges
MSTreeWithMatching := minimumWeightMatching(MSTree, G, oddVertexes)
printEdges(MSTreeWithMatching, "Minimum weight matching (MST + Matching Edges)")
// Find an Eulerian tour in the combined graph
eulerianTour := findEulerianTour(MSTreeWithMatching, n)
printContainer(eulerianTour, "Eulerian tour")
// --- Create Hamiltonian Circuit by Skipping Visited Nodes ---
if len(eulerianTour) == 0 {
fmt.Println("Error: Eulerian tour could not be found.")
return -1.0, []int{}
}
path := []int{}
length := 0.0
visited := make([]bool, n)
current := eulerianTour[0]
path = append(path, current)
visited[current] = true
for i := 1; i < len(eulerianTour); i++ {
v := eulerianTour[i]
if !visited[v] {
path = append(path, v)
visited[v] = true
length += G[current][v] // Add distance from previous node in path
current = v // Update current node in path
}
}
// Add the edge back to the start
length += G[current][path[0]]
path = append(path, path[0]) // Complete the cycle
printContainer(path, "Result path")
fmt.Printf("Result length of the path: %.2f\n", length)
return length, path
}
func main() {
// Input data matching the C++ example
rawData := [][]float64{
{1380, 939}, {2848, 96}, {3510, 1671}, {457, 334}, {3888, 666}, {984, 965}, {2721, 1482}, {1286, 525},
{2716, 1432}, {738, 1325}, {1251, 1832}, {2728, 1698}, {3815, 169}, {3683, 1533}, {1247, 1945}, {123, 862},
{1234, 1946}, {252, 1240}, {611, 673}, {2576, 1676}, {928, 1700}, {53, 857}, {1807, 1711}, {274, 1420},
{2574, 946}, {178, 24}, {2678, 1825}, {1795, 962}, {3384, 1498}, {3520, 1079}, {1256, 61}, {1424, 1728},
{3913, 192}, {3085, 1528}, {2573, 1969}, {463, 1670}, {3875, 598}, {298, 1513}, {3479, 821}, {2542, 236},
{3955, 1743}, {1323, 280}, {3447, 1830}, {2936, 337}, {1621, 1830}, {3373, 1646}, {1393, 1368},
{3874, 1318}, {938, 955}, {3022, 474}, {2482, 1183}, {3854, 923}, {376, 825}, {2519, 135}, {2945, 1622},
{953, 268}, {2628, 1479}, {2097, 981}, {890, 1846}, {2139, 1806}, {2421, 1007}, {2290, 1810}, {1115, 1052},
{2588, 302}, {327, 265}, {241, 341}, {1917, 687}, {2991, 792}, {2573, 599}, {19, 674}, {3911, 1673},
{872, 1559}, {2863, 558}, {929, 1766}, {839, 620}, {3893, 102}, {2178, 1619}, {3822, 899}, {378, 1048},
{1178, 100}, {2599, 901}, {3416, 143}, {2961, 1605}, {611, 1384}, {3113, 885}, {2597, 1830}, {2586, 1286},
{161, 906}, {1429, 134}, {742, 1025}, {1625, 1651}, {1187, 706}, {1787, 1009}, {22, 987}, {3640, 43},
{3756, 882}, {776, 392}, {1724, 1642}, {198, 1810}, {3950, 1558},
}
dataPoints := make([]Point, len(rawData))
for i, point := range rawData {
dataPoints[i] = Point{point[0], point[1], i}
}
tsp(dataPoints)
}
- Output:
MSTree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)] Odd vertexes in MSTree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98] Minimum weight matching (MST + Matching Edges): [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (76, 59, 191.02), (73, 58, 89.00), (44, 90, 179.04), (85, 34, 141.06), (51, 77, 40.00), (1, 53, 331.30), (27, 92, 47.68), (31, 10, 201.85), (2, 42, 171.03), (46, 16, 599.47), (69, 21, 186.13), (98, 83, 593.33), (60, 68, 435.39), (93, 52, 389.31), (65, 64, 114.77), (9, 96, 933.77), (40, 70, 82.68), (81, 75, 478.76), (29, 38, 261.24), (11, 72, 1147.97), (47, 32, 1126.68), (66, 25, 1861.10)] Eulerian tour: [14, 16, 46, 31, 10, 73, 58, 73, 20, 71, 9, 83, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 69, 21, 93, 52, 18, 74, 96, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 9, 96, 3, 64, 65, 64, 25, 66, 27, 92, 27, 57, 60, 24, 80, 68, 72, 49, 43, 1, 53, 39, 63, 68, 60, 50, 86, 8, 6, 56, 19, 11, 54, 82, 33, 28, 45, 2, 42, 2, 13, 70, 40, 70, 99, 47, 32, 75, 81, 94, 12, 32, 36, 4, 77, 51, 77, 95, 38, 29, 38, 84, 67, 72, 11, 26, 85, 34, 85, 61, 59, 76, 59, 22, 97, 90, 44, 90, 31, 10, 14] Result path: [14, 16, 46, 31, 10, 73, 58, 20, 71, 9, 83, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 69, 93, 18, 74, 96, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 3, 64, 65, 25, 66, 27, 92, 57, 60, 24, 80, 68, 72, 49, 43, 1, 53, 39, 63, 50, 86, 8, 6, 56, 19, 11, 54, 82, 33, 28, 45, 2, 42, 13, 70, 40, 99, 47, 32, 75, 81, 94, 12, 36, 4, 77, 51, 95, 38, 29, 84, 67, 26, 85, 34, 61, 59, 76, 22, 97, 90, 44, 14] Result length of the path: 26046.90
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.Set;
import java.util.Stack;
import java.util.function.BiFunction;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
public class ChristofidesAlgorithm {
public static void main(String[] args) {
List<Pair> data = List.of(
new Pair(1380, 939), new Pair(2848, 96), new Pair(3510, 1671), new Pair(457, 334), new Pair(3888, 666),
new Pair(984, 965), new Pair(2721, 1482), new Pair(1286, 525), new Pair(2716, 1432), new Pair(738, 1325),
new Pair(1251, 1832), new Pair(2728, 1698), new Pair(3815, 169), new Pair(3683, 1533), new Pair(1247,1945),
new Pair(123, 862), new Pair(1234, 1946), new Pair(252, 1240), new Pair(611, 673), new Pair(2576, 1676),
new Pair(928, 1700), new Pair(53, 857), new Pair(1807, 1711), new Pair(274, 1420), new Pair(2574, 946),
new Pair(178, 24), new Pair(2678, 1825), new Pair(1795, 962), new Pair(3384, 1498), new Pair(3520, 1079),
new Pair(1256, 61), new Pair(1424, 1728), new Pair(3913, 192), new Pair(3085, 1528), new Pair(2573, 1969),
new Pair(463, 1670), new Pair(3875, 598), new Pair(298, 1513), new Pair(3479, 821), new Pair(2542, 236),
new Pair(3955, 1743), new Pair(1323, 280), new Pair(3447, 1830), new Pair(2936, 337), new Pair(1621, 1830),
new Pair(3373, 1646), new Pair(1393, 1368), new Pair(3874, 1318), new Pair(938, 955), new Pair(3022, 474),
new Pair(2482, 1183), new Pair(3854, 923), new Pair(376, 825), new Pair(2519, 135), new Pair(2945, 1622),
new Pair(953, 268), new Pair(2628, 1479), new Pair(2097, 981), new Pair(890, 1846), new Pair(2139, 1806),
new Pair(2421, 1007), new Pair(2290, 1810), new Pair(1115, 1052), new Pair(2588, 302), new Pair(327, 265),
new Pair(241, 341), new Pair(1917, 687), new Pair(2991, 792), new Pair(2573, 599), new Pair(19, 674),
new Pair(3911, 1673), new Pair(872, 1559), new Pair(2863, 558), new Pair(929, 1766), new Pair(839, 620),
new Pair(3893, 102), new Pair(2178, 1619), new Pair(3822, 899), new Pair(378, 1048), new Pair(1178, 100),
new Pair(2599, 901), new Pair(3416, 143), new Pair(2961, 1605), new Pair(611, 1384), new Pair(3113, 885),
new Pair(2597, 1830), new Pair(2586, 1286), new Pair(161, 906), new Pair(1429, 134), new Pair(742, 1025),
new Pair(1625, 1651), new Pair(1187, 706), new Pair(1787, 1009), new Pair(22, 987), new Pair(3640, 43),
new Pair(3756, 882), new Pair(776, 392), new Pair(1724, 1642), new Pair(198, 1810), new Pair(3950, 1558)
);
List<Point> points = IntStream.range(0, data.size()).mapToObj( i -> new Point(data.get(i), i) ).toList();
christofidesPath(points);
}
// Display and return an approximation to the optimum travelling salesman path using the Christofides algorithm
private static Result christofidesPath(List<Point> points) {
if ( points.isEmpty() ) {
return new Result(Collections.emptyList(), 0.0);
}
if ( points.size() == 1 ) {
return new Result(List.of(points.getFirst().id), 0.0);
}
Graph graph = new Graph(points);
graph.display();
List<Edge> minimumSpanningTree = graph.minimumSpanningTree();
System.out.println("Minimum spanning tree: " + minimumSpanningTree + System.lineSeparator());
List<Integer> oddVertices = graph.oddVertices(minimumSpanningTree);
System.out.println("Odd vertices in minimum spanning tree: " + oddVertices + System.lineSeparator());
List<Edge> minimumWeightMatching = graph.minimumWeightMatching(minimumSpanningTree, oddVertices);
System.out.println("Minimum weight matching: " + minimumWeightMatching + System.lineSeparator());
List<Integer> eulerianCircuit = graph.eulerianCircuit(minimumWeightMatching);
System.out.println("Eulerian circuit: " + eulerianCircuit + System.lineSeparator());
if ( eulerianCircuit.isEmpty() ) {
System.err.println("Error: Christofides path could not be found.");
return new Result(Collections.emptyList(), -1.0);
}
Result result = graph.hamiltonianCircuit(eulerianCircuit);
System.out.println("Result path: " + result.path + System.lineSeparator());
System.out.println(String.format("%s%.2f", "Length of the result path: ", result.length));
return result;
}
private record Pair(double x, double y) {}
private record Point(Pair pair, int id) {}
private record Edge(int u, int v, double weight) {
public String toString() {
return String.format("%s%d%s%d%s%.2f%s", "(", u, ", ", v , ", ", weight, ")");
}
}
private static final class Graph {
public Graph(List<Point> points) {
pointCount = points.size();
distanceLists = IntStream.range(0, pointCount).boxed()
.map( i -> new ArrayList<Double>(Collections.nCopies(pointCount, 0.0)) )
.collect(Collectors.toList());
BiFunction<Point, Point, Double> distance = (one, two) ->
Math.hypot(one.pair.x - two.pair.x, one.pair.y - two.pair.y);
IntStream.range(0, pointCount).forEach( i -> {
IntStream.range(i + 1, pointCount).forEach( j -> {
final double dist = distance.apply(points.get(i), points.get(j));
distanceLists.get(i).set(j, dist);
distanceLists.get(j).set(i, dist);
} );
} );
}
// Return the minimum spanning tree using Kruskal's algorithm
public List<Edge> minimumSpanningTree() {
List<Edge> edges = new ArrayList<Edge>();
if ( pointCount == 0 ) {
return edges;
}
IntStream.range(0, pointCount).forEach( i -> {
IntStream.range(i + 1, pointCount).forEach( j -> { // Avoids duplicates and self-loops
edges.addLast( new Edge(i, j, distanceLists.get(i).get(j)) );
} );
} );
// Sort edges by weight
Collections.sort(edges, (e1, e2) -> Double.compare(e1.weight, e2.weight));
List<Edge> minimumSpanningTree = new ArrayList<Edge>();
UnionFind unionFind = new UnionFind(pointCount);
int edgeCount = 0;
for ( Edge edge : edges ) {
if ( unionFind.unite(edge.u, edge.v) ) {
minimumSpanningTree.addLast(edge);
edgeCount += 1;
if ( edgeCount == pointCount - 1 ) {
break; // An optimisation, since the minimum spanning tree has n - 1 edges
}
}
}
return minimumSpanningTree;
}
// Return a list of vertices with odd degree in the minimum spanning tree
public List<Integer> oddVertices(List<Edge> minimumSpanningTree) {
List<Integer> degrees = new ArrayList<Integer>(Collections.nCopies(pointCount, 0));
minimumSpanningTree.forEach( edge -> {
degrees.set(edge.u, degrees.get(edge.u) + 1);
degrees.set(edge.v, degrees.get(edge.v) + 1);
} );
return IntStream.range(0, pointCount).filter( i -> degrees.get(i) % 2 == 1 ).boxed().toList();
}
// Return a minimum weight matching using a greedy heuristic
public List<Edge> minimumWeightMatching(List<Edge> minimumSpanningTree, List<Integer> oddVertices) {
List<Edge> minimumWeightMatching = new ArrayList<Edge>();
if ( oddVertices.isEmpty() ) {
return minimumWeightMatching;
}
// All elements of 'minimumSpanningTree' are included
minimumWeightMatching.addAll(minimumSpanningTree);
// Create a copy to prevent mutation of the argument 'oddVertices'
List<Integer> currentOdd = new ArrayList<Integer>(oddVertices);
Collections.shuffle(currentOdd); // Shuffle for randomness
// Maintain a record of the visited indices in the shuffled 'currentOdd' list
Set<Integer> visited = new HashSet<Integer>();
for ( int i = 0; i < currentOdd.size(); i++ ) {
if ( visited.contains(i) ) { // Omit a vertex which has already been processed
continue;
}
final int v = currentOdd.get(i);
double minimumDistance = Integer.MAX_VALUE;
Optional<Integer> closestUIndex = Optional.empty();
// Find the closest unmatched odd vertex occurring after 'v' in the shuffled 'currentOdd' list
for ( int j = i + 1; j < currentOdd.size(); j++ ) {
if ( ! visited.contains(j) ) { // Check whether a vertex is available
final int u = currentOdd.get(j);
if ( distanceLists.get(v).get(u) < minimumDistance ) {
minimumDistance = distanceLists.get(v).get(u);
closestUIndex = Optional.of(j);
}
}
}
if ( closestUIndex.isPresent() ) {
final int j = closestUIndex.get();
final int u = currentOdd.get(j);
minimumWeightMatching.addLast( new Edge(v, u, minimumDistance) );
visited.add(i); // Mark both vertices as processed
visited.add(j);
} else {
// This should not happen in the Christofides algorithm
// as the number of odd vertices is always even.
// If it does, it might indicate an issue with the input data
// or a graph where matching is not possible.
throw new AssertionError("Could not match an odd vertex in minimum weight matching: " + v);
}
}
return minimumWeightMatching;
}
// Return a list of vertices forming an Eulerian circuit using Hierholzer's algorithm
public List<Integer> eulerianCircuit(List<Edge> minimumWeightMatching) {
List<Integer> circuit = new ArrayList<Integer>();
if ( minimumWeightMatching.isEmpty() ) {
return circuit;
}
record Twin(int halfEdge, int index) {}
// Create adjacency lists for the argument 'minimumWeightMatching'
List<List<Twin>> adjacencyLists = IntStream.range(0, minimumWeightMatching.size())
.boxed().map( i -> new ArrayList<Twin>() ).collect(Collectors.toList());
IntStream.range(0, minimumWeightMatching.size()).forEach( index -> {
Edge edge = minimumWeightMatching.get(index);
adjacencyLists.get(edge.u).addLast( new Twin(edge.v, index) );
adjacencyLists.get(edge.v).addLast( new Twin(edge.u, index) );
} );
Set<Integer> edgesUsed = new HashSet<Integer>();
Stack<Integer> stack = new Stack<Integer>();
// Start from any vertex having edges.
// A suitable vertex is guaranteed to exist if 'minimumSpanningTree' is not empty
int currentVertex = minimumWeightMatching.getFirst().u;
stack.push(currentVertex);
while ( ! stack.isEmpty() ) {
currentVertex = stack.peek();
boolean foundEdge = false;
// Attempt to find an unused edge from the current vertex
while ( ! adjacencyLists.get(currentVertex).isEmpty() ) {
Twin twin = adjacencyLists.get(currentVertex).removeLast();
if ( ! edgesUsed.contains(twin.index) ) {
edgesUsed.add(twin.index);
stack.push(twin.halfEdge);
foundEdge = true;
break; // Move to the next vertex which is 'twin.halfEdge'
}
}
// If no unused edge was found from 'currentVertex',
// either the adjacency list was empty or all its edges have been used
if ( ! foundEdge ) {
circuit.addLast(stack.pop()); // Backtrack
}
}
Collections.reverse(circuit); // The circuit has been constructed in reverse order
return circuit;
}
public Result hamiltonianCircuit(List<Integer> eulerianCircuit) {
// Create a Hamiltonian circuit by removing any repeated visits to the same vertex
List<Integer> christofidesPath = new ArrayList<Integer>();
double length = 0.0;
Set<Integer> visited = new HashSet<Integer>();
int current = eulerianCircuit.getFirst();
christofidesPath.addLast(current);
visited.add(current);
for ( int vertex : eulerianCircuit ) {
if ( ! visited.contains(vertex) ) {
christofidesPath.addLast(vertex);
visited.add(vertex);
length += distanceLists.get(current).get(vertex); // Add distance from previous vertex in path
current = vertex; // Update current vertex in path
}
}
// Add the edge returning to the start vertex
length += distanceLists.get(current).get(christofidesPath.getFirst());
christofidesPath.addLast(christofidesPath.getFirst()); // Complete the cycle
return new Result(christofidesPath, length);
}
public void display() {
System.out.println("Graph: {");
IntStream.range(0, pointCount).forEach( u -> {
System.out.print(String.format("%3d%s", u, ": {"));
IntStream.range(0, pointCount).forEach( v -> {
if ( u != v ) {
if ( ! ( u == 0 && v == 1 ) && v > 0 ) {
System.out.print(", ");
}
System.out.print(String.format("%d%s%.2f", v, ": ", distanceLists.get(u).get(v)));
}
} );
System.out.println("}" + ( u == pointCount - 1 ? "" : "," ));
} );
System.out.println("}" + System.lineSeparator());
}
private static final class UnionFind {
public UnionFind(int number) {
parents = IntStream.range(0, number).boxed().collect(Collectors.toList());
ranks = new ArrayList<Integer>(Collections.nCopies(number, 0));
}
public int find(int n) {
if ( parents.get(n) == n ) {
return n;
}
// Path compression
parents.set(n, find(parents.get(n)));
return parents.get(n);
}
public boolean unite(int i, int j) {
final int rootI = find(i);
final int rootJ = find(j);
if ( rootI != rootJ ) {
switch ( Integer.compare(rootI, rootJ) ) {
case -1 -> parents.set(rootI, rootJ);
case +1 -> parents.set(rootJ, rootI);
case 0 -> { parents.set(rootJ, rootI); ranks.set(rootI, ranks.get(rootI) + 1); }
}
return true;
}
return false;
}
private List<Integer> parents;
private List<Integer> ranks;
}
private List<List<Double>> distanceLists;
private final int pointCount;
}
private record Result(List<Integer> path, double length) {}
}
- Output:
Graph: {
// omitted for brevity
}
Minimum spanning tree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)]
Odd vertices in minimum spanning tree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98]
Minimum weight matching: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (38, 29, 261.24), (77, 51, 40.00), (66, 27, 300.85), (21, 93, 133.65), (92, 46, 533.03), (90, 44, 179.04), (60, 68, 435.39), (10, 16, 115.26), (75, 32, 92.20), (85, 34, 141.06), (69, 52, 387.62), (59, 76, 191.02), (1, 53, 331.30), (96, 64, 466.62), (81, 72, 691.40), (2, 42, 171.03), (58, 73, 89.00), (31, 9, 795.62), (11, 70, 1183.26), (83, 98, 593.33), (47, 40, 432.65), (25, 65, 323.20)]
Eulerian circuit: [14, 10, 73, 58, 73, 20, 71, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 64, 25, 65, 64, 3, 96, 74, 18, 52, 69, 21, 93, 21, 15, 87, 52, 78, 17, 23, 37, 35, 98, 83, 9, 31, 46, 92, 27, 66, 27, 57, 60, 68, 63, 39, 53, 1, 43, 49, 72, 81, 94, 12, 32, 75, 32, 36, 4, 77, 51, 77, 95, 38, 29, 38, 84, 67, 72, 68, 80, 24, 60, 50, 86, 8, 6, 56, 19, 11, 70, 99, 47, 40, 70, 13, 2, 42, 2, 45, 28, 33, 82, 54, 11, 26, 85, 34, 85, 61, 59, 76, 59, 22, 97, 90, 44, 90, 31, 10, 16, 14]
Result path: [14, 10, 73, 58, 20, 71, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 64, 25, 65, 3, 74, 18, 52, 69, 21, 93, 15, 87, 78, 17, 23, 37, 35, 98, 83, 31, 46, 92, 27, 66, 57, 60, 68, 63, 39, 53, 1, 43, 49, 72, 81, 94, 12, 32, 75, 36, 4, 77, 51, 95, 38, 29, 84, 67, 80, 24, 50, 86, 8, 6, 56, 19, 11, 70, 99, 47, 40, 13, 2, 42, 45, 28, 33, 82, 54, 26, 85, 34, 61, 59, 76, 22, 97, 90, 44, 16, 14]
Length of the result path: 24502.99
// --- Helper Structs (using Objects) ---
// Point: { x: number, y: number, id: number }
// Edge: { u: number, v: number, weight: number, id?: number } // id added for Eulerian tour
// --- Helper Functions ---
function printContainer(container, name) {
console.log(`${name}: [${container.join(', ')}]`);
}
function printEdges(edges, name) {
const edgeStrings = edges.map(e => `(${e.u}, ${e.v}, ${e.weight.toFixed(2)})`);
console.log(`${name}: [${edgeStrings.join(', ')}]`);
}
function printGraph(graph, name) {
console.log(`${name}: {`);
const n = graph.length;
for (let i = 0; i < n; i++) {
const entries = [];
for (let j = 0; j < n; j++) {
if (i !== j) {
entries.push(`${j}: ${graph[i][j].toFixed(2)}`);
}
}
console.log(` ${i}: {${entries.join(', ')}}${i === n - 1 ? '' : ','}`);
}
console.log(`}`);
}
// --- Euclidean Distance ---
function getLength(p1, p2) {
const dx = p1.x - p2.x;
const dy = p1.y - p2.y;
return Math.sqrt(dx * dx + dy * dy);
}
// --- Build Complete Graph (Adjacency Matrix) ---
function buildGraph(data) {
const n = data.length;
// Initialize n x n array with 0s
const graph = Array(n).fill(0).map(() => Array(n).fill(0.0));
for (let i = 0; i < n; i++) {
for (let j = i + 1; j < n; j++) { // Only calculate upper triangle
const dist = getLength(data[i], data[j]);
graph[i][j] = dist;
graph[j][i] = dist; // Symmetric graph
}
}
return graph;
}
// --- Union-Find Data Structure ---
class UnionFind {
constructor(n) {
// Initialize parent array: each node is its own parent
this.parent = Array.from({ length: n }, (_, i) => i);
// Initialize rank (or size) array for optimization
this.rank = Array(n).fill(0);
}
find(i) {
if (this.parent[i] === i) {
return i;
}
// Path compression: point directly to the root
this.parent[i] = this.find(this.parent[i]);
return this.parent[i];
}
unite(i, j) {
let rootI = this.find(i);
let rootJ = this.find(j);
if (rootI !== rootJ) {
// Union by rank: attach smaller rank tree under larger rank tree
if (this.rank[rootI] < this.rank[rootJ]) {
this.parent[rootI] = rootJ;
} else if (this.rank[rootI] > this.rank[rootJ]) {
this.parent[rootJ] = rootI;
} else {
// Ranks are equal, choose one as parent and increment its rank
this.parent[rootJ] = rootI;
this.rank[rootI]++;
}
return true; // Successfully united
}
return false; // Already in the same set
}
}
// --- Minimum Spanning Tree (Kruskal's Algorithm) ---
function minimumSpanningTree(graph) {
const n = graph.length;
if (n === 0) return [];
const edges = [];
for (let i = 0; i < n; i++) {
for (let j = i + 1; j < n; j++) { // Avoid duplicates and self-loops
edges.push({ u: i, v: j, weight: graph[i][j] });
}
}
// Sort edges by weight in ascending order
edges.sort((a, b) => a.weight - b.weight);
const mst = [];
const uf = new UnionFind(n);
let edgesCount = 0;
for (const edge of edges) {
if (uf.unite(edge.u, edge.v)) { // If uniting forms a new connection
mst.push(edge);
edgesCount++;
if (edgesCount === n - 1) { // Optimization: MST has n-1 edges
break;
}
}
}
return mst;
}
// --- Find Vertices with Odd Degree in MST ---
function findOddVertexes(mst, n) {
const degree = Array(n).fill(0);
for (const edge of mst) {
degree[edge.u]++;
degree[edge.v]++;
}
const oddVertices = [];
for (let i = 0; i < n; i++) {
if (degree[i] % 2 !== 0) {
oddVertices.push(i);
}
}
return oddVertices;
}
// --- Minimum Weight Matching (Greedy Heuristic) ---
// Fisher-Yates (Knuth) Shuffle algorithm
function shuffleArray(array) {
for (let i = array.length - 1; i > 0; i--) {
const j = Math.floor(Math.random() * (i + 1));
[array[i], array[j]] = [array[j], array[i]]; // ES6 swap
}
}
// Note: This modifies the mst array by adding matching edges.
function minimumWeightMatching(mst, graph, oddVertices) {
// Shuffle for randomness (like the Python version)
shuffleArray(oddVertices);
const matched = new Set(); // Keep track of vertices already matched in this phase
for (let i = 0; i < oddVertices.length; i++) {
const v = oddVertices[i];
if (matched.has(v)) continue; // Skip if already matched
let minLength = Infinity;
let closestU = -1;
// Find the closest *unmatched* odd vertex
for (let j = i + 1; j < oddVertices.length; j++) {
const u = oddVertices[j];
if (!matched.has(u)) { // Check if 'u' is available
if (graph[v][u] < minLength) {
minLength = graph[v][u];
closestU = u;
}
}
}
if (closestU !== -1) {
// Add the matching edge to the MST list (now a multigraph)
mst.push({ u: v, v: closestU, weight: minLength });
matched.add(v);
matched.add(closestU); // Mark both as matched
}
// Christofides guarantees an even number of odd-degree vertices,
// so every vertex *should* find a match in a perfect matching scenario.
// The greedy approach might leave some unmatched if not careful, but this loop structure should work.
}
// No return value needed as mst is modified directly by reference
}
// --- Find Eulerian Tour (Hierholzer's Algorithm) ---
function findEulerianTour(matchedMST, n) {
if (matchedMST.length === 0) return [];
// Assign unique IDs to edges for tracking in the multigraph
// (essential because multiple edges can exist between nodes)
matchedMST.forEach((edge, index) => edge.id = index);
// Build adjacency list: adj[u] = [{ neighbor: v, edgeId: id }, ...]
const adj = Array(n).fill(0).map(() => []);
const edgeUsed = new Set(); // Store used edge IDs
for (const edge of matchedMST) {
adj[edge.u].push({ neighbor: edge.v, edgeId: edge.id });
adj[edge.v].push({ neighbor: edge.u, edgeId: edge.id });
}
const tour = [];
const stack = [];
// Start at any vertex with edges (guaranteed to exist if matchedMST is not empty)
const startNode = matchedMST[0].u;
stack.push(startNode);
let currentNode = startNode;
while (stack.length > 0) {
currentNode = stack[stack.length - 1]; // Peek top of stack
let foundUnusedEdge = false;
// Check outgoing edges from currentNode
while (adj[currentNode].length > 0) {
const edgeInfo = adj[currentNode][adj[currentNode].length - 1]; // Look at last edge (efficient removal)
if (!edgeUsed.has(edgeInfo.edgeId)) {
// Found an unused edge
edgeUsed.add(edgeInfo.edgeId); // Mark edge as used
stack.push(edgeInfo.neighbor); // Push neighbor onto stack
adj[currentNode].pop(); // Remove edge from current node's list
currentNode = edgeInfo.neighbor; // Move to the neighbor
foundUnusedEdge = true;
break; // Break inner loop to process the new currentNode
} else {
// This edge was already used (by traversal from the other side), remove it
adj[currentNode].pop();
}
}
if (!foundUnusedEdge) {
// If no unused edges from currentNode, backtrack
tour.push(stack.pop());
}
}
// The tour is constructed in reverse order by Hierholzer's
return tour.reverse();
}
// --- Main TSP Function (Christofides Approximation) ---
function tsp(data) {
const n = data.length;
if (n === 0) {
return { length: 0, path: [] };
}
if (n === 1) {
// If data points have explicit IDs use them, otherwise use index 0
const startId = data[0].id !== undefined ? data[0].id : 0;
return { length: 0, path: [startId] };
}
// Assign IDs if they don't exist, assuming order corresponds to 0..n-1
data.forEach((p, i) => { if (p.id === undefined) p.id = i; });
console.log("Building graph...");
const G = buildGraph(data);
// printGraph(G, "Graph"); // Often too large to print meaningfully
console.log("Finding Minimum Spanning Tree...");
const MSTree = minimumSpanningTree(G);
printEdges(MSTree, "MSTree");
console.log("Finding odd degree vertices...");
const odd_vertexes = findOddVertexes(MSTree, n);
printContainer(odd_vertexes, "Odd vertexes in MSTree");
console.log("Finding Minimum Weight Matching (greedy)...");
// Create a new array containing MST edges to avoid modifying the original MSTree variable directly
// The matching edges will be added to this new array.
const multigraphEdges = [...MSTree];
// Pass a copy of odd_vertexes as it might be shuffled in place
minimumWeightMatching(multigraphEdges, G, [...odd_vertexes]);
printEdges(multigraphEdges, "Minimum weight matching (MST + Matching Edges)");
console.log("Finding Eulerian Tour...");
const eulerian_tour = findEulerianTour(multigraphEdges, n);
printContainer(eulerian_tour, "Eulerian tour");
// --- Create Hamiltonian Circuit by Skipping Visited Nodes ---
if (eulerian_tour.length === 0 && n > 0) {
console.error("Error: Eulerian tour could not be found.");
return { length: -1, path: [] }; // Indicate error
}
console.log("Creating Hamiltonian path (shortcutting)...");
const path = [];
let length = 0.0;
const visited = new Set(); // Use Set for efficient O(1) average time complexity checks
let currentPathNode = -1; // Track the last node added to the *Hamiltonian* path
for (const node of eulerian_tour) {
if (!visited.has(node)) {
path.push(node);
visited.add(node);
if (currentPathNode !== -1) { // Add edge length from the previous node *in the path*
length += G[currentPathNode][node];
}
currentPathNode = node; // Update the last node added to the path
}
}
// Add the edge back to the start to complete the cycle
if (path.length > 0) {
length += G[currentPathNode][path[0]]; // Edge from last node in path to first node
path.push(path[0]); // Add the starting node again to show the cycle
}
printContainer(path, "Result path");
console.log(`Result length of the path: ${length.toFixed(2)}`);
return { length: length, path: path };
}
// --- Input Data ---
const raw_data = [
[1380, 939], [2848, 96], [3510, 1671], [457, 334], [3888, 666], [984, 965], [2721, 1482], [1286, 525],
[2716, 1432], [738, 1325], [1251, 1832], [2728, 1698], [3815, 169], [3683, 1533], [1247, 1945], [123, 862],
[1234, 1946], [252, 1240], [611, 673], [2576, 1676], [928, 1700], [53, 857], [1807, 1711], [274, 1420],
[2574, 946], [178, 24], [2678, 1825], [1795, 962], [3384, 1498], [3520, 1079], [1256, 61], [1424, 1728],
[3913, 192], [3085, 1528], [2573, 1969], [463, 1670], [3875, 598], [298, 1513], [3479, 821], [2542, 236],
[3955, 1743], [1323, 280], [3447, 1830], [2936, 337], [1621, 1830], [3373, 1646], [1393, 1368],
[3874, 1318], [938, 955], [3022, 474], [2482, 1183], [3854, 923], [376, 825], [2519, 135], [2945, 1622],
[953, 268], [2628, 1479], [2097, 981], [890, 1846], [2139, 1806], [2421, 1007], [2290, 1810], [1115, 1052],
[2588, 302], [327, 265], [241, 341], [1917, 687], [2991, 792], [2573, 599], [19, 674], [3911, 1673],
[872, 1559], [2863, 558], [929, 1766], [839, 620], [3893, 102], [2178, 1619], [3822, 899], [378, 1048],
[1178, 100], [2599, 901], [3416, 143], [2961, 1605], [611, 1384], [3113, 885], [2597, 1830], [2586, 1286],
[161, 906], [1429, 134], [742, 1025], [1625, 1651], [1187, 706], [1787, 1009], [22, 987], [3640, 43],
[3756, 882], [776, 392], [1724, 1642], [198, 1810], [3950, 1558]
];
// Convert raw data to point objects, using index as ID
const data_points = raw_data.map((coords, index) => ({
x: coords[0],
y: coords[1],
id: index // Use 0-based index as the vertex ID
}));
// --- Run TSP ---
tsp(data_points);
- Output:
Building graph... Finding Minimum Spanning Tree... MSTree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)] Finding odd degree vertices... Odd vertexes in MSTree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98] Finding Minimum Weight Matching (greedy)... Minimum weight matching (MST + Matching Edges): [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (72, 68, 292.88), (11, 85, 185.97), (2, 42, 171.03), (70, 40, 82.68), (96, 64, 466.62), (53, 1, 331.30), (21, 93, 133.65), (75, 32, 92.20), (83, 9, 140.04), (77, 51, 40.00), (16, 10, 115.26), (73, 58, 89.00), (25, 65, 323.20), (46, 31, 361.33), (29, 38, 261.24), (92, 27, 47.68), (47, 81, 1261.11), (59, 76, 191.02), (69, 52, 387.62), (66, 60, 597.01), (44, 90, 179.04), (98, 34, 2380.32)] Finding Eulerian Tour... Eulerian tour: [14, 10, 73, 58, 73, 20, 71, 9, 83, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 64, 25, 65, 64, 3, 96, 74, 18, 52, 69, 21, 93, 21, 15, 87, 52, 78, 17, 23, 37, 35, 98, 34, 85, 11, 54, 82, 33, 28, 45, 2, 42, 2, 13, 70, 40, 70, 99, 47, 81, 94, 12, 32, 75, 32, 36, 4, 77, 51, 77, 95, 38, 29, 38, 84, 67, 72, 68, 63, 39, 53, 1, 43, 49, 72, 68, 80, 24, 60, 66, 27, 92, 27, 57, 60, 50, 86, 8, 6, 56, 19, 11, 26, 85, 61, 59, 76, 59, 22, 97, 90, 44, 90, 31, 46, 31, 10, 16, 14] Creating Hamiltonian path (shortcutting)... Result path: [14, 10, 73, 58, 20, 71, 9, 83, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 64, 25, 65, 3, 74, 18, 52, 69, 21, 93, 15, 87, 78, 17, 23, 37, 35, 98, 34, 85, 11, 54, 82, 33, 28, 45, 2, 42, 13, 70, 40, 99, 47, 81, 94, 12, 32, 75, 36, 4, 77, 51, 95, 38, 29, 84, 67, 72, 68, 63, 39, 53, 1, 43, 49, 80, 24, 60, 66, 27, 92, 57, 50, 86, 8, 6, 56, 19, 26, 61, 59, 76, 22, 97, 90, 44, 31, 46, 16, 14] Result length of the path: 25448.96
using Random
""" Helper Structs """
struct Point
x::Float64
y::Float64
id::Int # Original index
end
struct Edge
u::Int
v::Int
weight::Float64
end
""" Helper Function to print vectors/lists """
print_container(container, name, zerobase = true) = println("$name: $(container .- zerobase)")
""" Helper Function to print graph edges """
function print_edges(edges, name, zerobase = true)
print("$name: [")
for (i, edge) in enumerate(edges)
u, v = edge.u - zerobase, edge.v - zerobase
1 < i < lastindex(edges) && print(", ")
print("($u, $v, $(round(edge.weight, digits=2)))")
end
println("]")
end
""" Helper Function to print graph """
function print_graph(graph, name, zerobase = true)
println("$name: {")
n = length(graph)
for i in 1:n
print(" $(i - zerobase): {")
first = true
for j in 1:n
if i != j
!first && print(", ")
print("$(j - zerobase): ", round(graph[i][j], digits = 2))
first = false
end
end
println("]", i == n ? "" : ",")
end
println("}")
end
""" Euclidean Distance """
get_length(p1, p2) = sqrt((p1.x - p2.x)^2 + (p1.y - p2.y)^2)
""" Build Complete Graph (Adjacency Matrix) """
function build_graph(data)
n = length(data)
graph = zeros(n, n)
for i in 1:n
for j in i+1:n # Only calculate upper triangle + diagonal is 0
dist = get_length(data[i], data[j])
graph[i, j] = dist
graph[j, i] = dist # Symmetric graph
end
end
return graph
end
""" Union-Find Data Structure """
struct UnionFind
parent::Vector{Int}
rank::Vector{Int}
end
UnionFind(n) = UnionFind(collect(1:n), zeros(Int, n))
""" find a point in structure """
function find(uf::UnionFind, i)
uf.parent[i] == i && return i
# Path compression
uf.parent[i] = find(uf, uf.parent[i])
return uf.parent[i]
end
function unite(uf::UnionFind, i, j)
rootI = find(uf, i)
rootJ = find(uf, j)
if rootI != rootJ
# Union by rank
if uf.rank[rootI] < uf.rank[rootJ]
uf.parent[rootI] = rootJ
elseif uf.rank[rootI] > uf.rank[rootJ]
uf.parent[rootJ] = rootI
else
uf.parent[rootJ] = rootI
uf.rank[rootI] += 1
end
end
end
""" Minimum Spanning Tree (Kruskal's Algorithm) """
function minimum_spanning_tree(graph)
n = size(graph, 1)
n == 0 && return Edge[]
edges = [Edge(i, j, graph[i, j]) for i in 1:n for j in i+1:n]
# Sort edges by weight
sort!(edges, by = ed -> ed.weight)
mst = Edge[]
uf = UnionFind(n)
edges_count = 0
for edge in edges
if find(uf, edge.u) != find(uf, edge.v)
push!(mst, edge)
unite(uf, edge.u, edge.v)
edges_count += 1
edges_count == n - 1 && break # Optimization: MST has n-1 edges
end
end
return mst
end
""" Find Vertices with Odd Degree in MST """
function find_odd_vertices(mst, n)
degree = zeros(Int, n)
for edge in mst
degree[edge.u] += 1
degree[edge.v] += 1
end
return filter(i -> isodd(degree[i]), 1:n)
end
""" Minimum Weight Matching (Greedy Heuristic) """
function minimum_weight_matching!(mst, graph, odd_vertices)
# Create a copy to allow modification while iterating, shuffle for randomness
current_odd = shuffle(odd_vertices)
# Keep track of vertices already matched in this phase
matched = falses(length(graph))
for (i, v) in enumerate(current_odd)
matched[v] && continue # Skip if already matched
min_length = typemax(Int)
closest_u = -1
# Find the closest unmatched odd vertex
for j in i+1:lastindex(current_odd)
u = current_odd[j]
if !matched[u] # Check if 'u' is available
if graph[v, u] < min_length
min_length = graph[v, u]
closest_u = u
end
end
end
if closest_u != -1
# Add the matching edge to the MST list (now a multigraph)
push!(mst, Edge(v, closest_u, min_length)) # nb: modifies mst
matched[v] = true
matched[closest_u] = true # Mark both as matched
end
end
# Note: In a perfect matching on an even number of vertices,
# every vertex should find a match. If closest_u remains -1,
# something is wrong (e.g., odd number of odd_vertices input?)
# Christofides guarantees an even number of odd-degree vertices.
return mst
end
struct EdgeInfo
neighbor::Int
edge::Edge
EdgeInfo(i = 0, edg = Edge(0, 0, 0.0)) = new(i, edg)
end
""" Find Eulerian Tour (Hierholzer's Algorithm) """
function find_eulerian_tour(matched_mst, n)
isempty(matched_mst) && return Int[]
# Build adjacency list representation of the multigraph (MST + matching)
adj = [EdgeInfo[] for _ in 1:n]
edge_used = Dict{Edge, Bool}()
for edge in matched_mst
push!(adj[edge.u], EdgeInfo(edge.v, edge))
push!(adj[edge.v], EdgeInfo(edge.u, edge))
edge_used[edge] = false
end
tour = Int[]
current_path = Int[]
# Start at any vertex with edges (e.g., the first vertex of the first edge)
start_node = matched_mst[begin].u
push!(current_path, start_node)
while !isempty(current_path)
current_node = current_path[end]
found_edge = false
# Find an unused edge from the current node
for i in eachindex(adj[current_node])
neighbor = adj[current_node][i].neighbor
edge_ptr = adj[current_node][i].edge
if !edge_used[edge_ptr]
edge_used[edge_ptr] = true # Mark edge as used
# Push neighbor onto stack and move to it
push!(current_path, neighbor)
found_edge = true
break # Move to the neighbor
end
end
# If no unused edge was found from currentNode, backtrack
if !found_edge
push!(tour, pop!(current_path))
end
end
# Reverse the tour
return reverse!(tour)
end
""" Main TSP Function (Christofides Approximation) """
function tsp(data)
n = length(data)
n == 0 && return 0.0, Int[]
n == 1 && return 0.0, [data[begin].id]
# Build a graph
g = build_graph(data)
ms_tree = minimum_spanning_tree(g)
print_edges(ms_tree, "MSTree")
# Find odd degree vertices
odd_vertexes = find_odd_vertices(ms_tree, n)
print_container(odd_vertexes, "Odd vertexes in MSTree")
# Add minimum weight matching edges (using greedy heuristic)
# As in the C++ example, this modifies the mst by adding extra edges
minimum_weight_matching!(ms_tree, g, odd_vertexes)
print_edges(ms_tree, "Minimum weight matching (MST + Matching Edges)")
# Find an Eulerian tour in the combined graph
eulerian_tour = find_eulerian_tour(ms_tree, n)
print_container(eulerian_tour, "Eulerian tour")
# --- Create Hamiltonian Circuit by Skipping Visited Nodes ---
if isempty(eulerian_tour)
println("Error: Eulerian tour could not be found.")
return -1.0, Int[]
end
path = Int[]
len = 0.0
visited = falses(n)
current = eulerian_tour[begin]
push!(path, current)
visited[current] = true
for v in eulerian_tour
if !visited[v]
push!(path, v)
visited[v] = true
len += g[current, v] # Add distance from previous node in path
current = v # Update current node in path
end
end
# Add the edge back to the start
len += g[current, path[begin]]
push!(path, path[begin]) # Complete the cycle
print_container(path, "Result path")
println("Result length of the path: ", round(len, digits = 2))
return len, path
end
# Input data matching the C++ example
const RAW_DATA = [
(1380, 939), (2848, 96), (3510, 1671), (457, 334), (3888, 666), (984, 965), (2721, 1482), (1286, 525),
(2716, 1432), (738, 1325), (1251, 1832), (2728, 1698), (3815, 169), (3683, 1533), (1247, 1945), (123, 862),
(1234, 1946), (252, 1240), (611, 673), (2576, 1676), (928, 1700), (53, 857), (1807, 1711), (274, 1420),
(2574, 946), (178, 24), (2678, 1825), (1795, 962), (3384, 1498), (3520, 1079), (1256, 61), (1424, 1728),
(3913, 192), (3085, 1528), (2573, 1969), (463, 1670), (3875, 598), (298, 1513), (3479, 821), (2542, 236),
(3955, 1743), (1323, 280), (3447, 1830), (2936, 337), (1621, 1830), (3373, 1646), (1393, 1368),
(3874, 1318), (938, 955), (3022, 474), (2482, 1183), (3854, 923), (376, 825), (2519, 135), (2945, 1622),
(953, 268), (2628, 1479), (2097, 981), (890, 1846), (2139, 1806), (2421, 1007), (2290, 1810), (1115, 1052),
(2588, 302), (327, 265), (241, 341), (1917, 687), (2991, 792), (2573, 599), (19, 674), (3911, 1673),
(872, 1559), (2863, 558), (929, 1766), (839, 620), (3893, 102), (2178, 1619), (3822, 899), (378, 1048),
(1178, 100), (2599, 901), (3416, 143), (2961, 1605), (611, 1384), (3113, 885), (2597, 1830), (2586, 1286),
(161, 906), (1429, 134), (742, 1025), (1625, 1651), (1187, 706), (1787, 1009), (22, 987), (3640, 43),
(3756, 882), (776, 392), (1724, 1642), (198, 1810), (3950, 1558),
]
const POINTS = [Point(x, y, w) for (w, (x, y)) in enumerate(RAW_DATA)]
tsp(POINTS)
- Output:
MSTree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.0), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.0), (32, 75, 92.2), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.4), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.3), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.8), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.5), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.6), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55)(32, 36, 407.77)] Odd vertexes in MSTree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98] Minimum weight matching (MST + Matching Edges): [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.0), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.0), (32, 75, 92.2), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.4), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.3), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.8), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.5), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.6), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (96, 64, 466.62), (60, 68, 435.39), (75, 32, 92.2), (42, 2, 171.03), (44, 90, 179.04), (92, 27, 47.68), (11, 85, 185.97), (72, 1, 462.24), (46, 31, 361.33), (53, 66, 816.77), (34, 59, 463.6), (69, 21, 186.13), (83, 9, 140.04), (98, 58, 692.94), (47, 70, 356.92), (77, 51, 40.0), (38, 29, 261.24), (25, 65, 323.2), (40, 81, 1688.35), (16, 10, 115.26), (93, 52, 389.31)(73, 76, 1257.62)] Eulerian tour: [14, 16, 10, 31, 46, 31, 90, 44, 97, 22, 59, 61, 85, 26, 11, 19, 56, 6, 8, 86, 50, 60, 24, 80, 68, 63, 39, 53, 66, 27, 92, 27, 57, 60, 68, 72, 49, 43, 1, 72, 67, 84, 38, 29, 38, 95, 77, 51, 77, 4, 36, 32, 75, 32, 12, 94, 81, 40, 70, 99, 47, 70, 13, 2, 42, 2, 45, 28, 33, 82, 54, 11, 85, 34, 59, 76, 73, 20, 71, 9, 83, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 3, 64, 65, 25, 64, 96, 74, 18, 52, 87, 15, 21, 69, 21, 93, 52, 78, 17, 23, 37, 35, 98, 58, 73, 10, 14] Result path: [14, 16, 10, 31, 46, 90, 44, 97, 22, 59, 61, 85, 26, 11, 19, 56, 6, 8, 86, 50, 60, 24, 80, 68, 63, 39, 53, 66, 27, 92, 57, 72, 49, 43, 1, 67, 84, 38, 29, 95, 77, 51, 4, 36, 32, 75, 12, 94, 81, 40, 70, 99, 47, 13, 2, 42, 45, 28, 33, 82, 54, 34, 76, 73, 20, 71, 9, 83, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 3, 64, 65, 25, 74, 18, 52, 87, 15, 21, 69, 93, 78, 17, 23, 37, 35, 98, 58, 14] Result length of the path: 25847.65 (25847.648870119883, [15, 17, 11, 32, 47, 91, 45, 98, 23, 60 … 70, 94, 79, 18, 24, 38, 36, 99, 59, 15])
import kotlin.math.hypot
import kotlin.math.sqrt
import kotlin.random.Random
data class Pair(val x: Double, val y: Double)
data class Point(val pair: Pair, val id: Int)
data class Edge(val u: Int, val v: Int, val weight: Double) {
override fun toString(): String {
return "($u, $v, %.2f)".format(weight)
}
}
data class Result(val path: List<Int>, val length: Double)
class MainKt {
companion object {
@JvmStatic
fun main(args: Array<String>) {
val data = listOf(
Pair(1380.0, 939.0), Pair(2848.0, 96.0), Pair(3510.0, 1671.0), Pair(457.0, 334.0), Pair(3888.0, 666.0),
Pair(984.0, 965.0), Pair(2721.0, 1482.0), Pair(1286.0, 525.0), Pair(2716.0, 1432.0), Pair(738.0, 1325.0),
Pair(1251.0, 1832.0), Pair(2728.0, 1698.0), Pair(3815.0, 169.0), Pair(3683.0, 1533.0), Pair(1247.0, 1945.0),
Pair(123.0, 862.0), Pair(1234.0, 1946.0), Pair(252.0, 1240.0), Pair(611.0, 673.0), Pair(2576.0, 1676.0),
Pair(928.0, 1700.0), Pair(53.0, 857.0), Pair(1807.0, 1711.0), Pair(274.0, 1420.0), Pair(2574.0, 946.0),
Pair(178.0, 24.0), Pair(2678.0, 1825.0), Pair(1795.0, 962.0), Pair(3384.0, 1498.0), Pair(3520.0, 1079.0),
Pair(1256.0, 61.0), Pair(1424.0, 1728.0), Pair(3913.0, 192.0), Pair(3085.0, 1528.0), Pair(2573.0, 1969.0),
Pair(463.0, 1670.0), Pair(3875.0, 598.0), Pair(298.0, 1513.0), Pair(3479.0, 821.0), Pair(2542.0, 236.0),
Pair(3955.0, 1743.0), Pair(1323.0, 280.0), Pair(3447.0, 1830.0), Pair(2936.0, 337.0), Pair(1621.0, 1830.0),
Pair(3373.0, 1646.0), Pair(1393.0, 1368.0), Pair(3874.0, 1318.0), Pair(938.0, 955.0), Pair(3022.0, 474.0),
Pair(2482.0, 1183.0), Pair(3854.0, 923.0), Pair(376.0, 825.0), Pair(2519.0, 135.0), Pair(2945.0, 1622.0),
Pair(953.0, 268.0), Pair(2628.0, 1479.0), Pair(2097.0, 981.0), Pair(890.0, 1846.0), Pair(2139.0, 1806.0),
Pair(2421.0, 1007.0), Pair(2290.0, 1810.0), Pair(1115.0, 1052.0), Pair(2588.0, 302.0), Pair(327.0, 265.0),
Pair(241.0, 341.0), Pair(1917.0, 687.0), Pair(2991.0, 792.0), Pair(2573.0, 599.0), Pair(19.0, 674.0),
Pair(3911.0, 1673.0), Pair(872.0, 1559.0), Pair(2863.0, 558.0), Pair(929.0, 1766.0), Pair(839.0, 620.0),
Pair(3893.0, 102.0), Pair(2178.0, 1619.0), Pair(3822.0, 899.0), Pair(378.0, 1048.0), Pair(1178.0, 100.0),
Pair(2599.0, 901.0), Pair(3416.0, 143.0), Pair(2961.0, 1605.0), Pair(611.0, 1384.0), Pair(3113.0, 885.0),
Pair(2597.0, 1830.0), Pair(2586.0, 1286.0), Pair(161.0, 906.0), Pair(1429.0, 134.0), Pair(742.0, 1025.0),
Pair(1625.0, 1651.0), Pair(1187.0, 706.0), Pair(1787.0, 1009.0), Pair(22.0, 987.0), Pair(3640.0, 43.0),
Pair(3756.0, 882.0), Pair(776.0, 392.0), Pair(1724.0, 1642.0), Pair(198.0, 1810.0), Pair(3950.0, 1558.0)
)
val points = data.mapIndexed { index, pair -> Point(pair, index) }
christofidesPath(points)
}
fun christofidesPath(points: List<Point>): Result {
if (points.isEmpty()) {
return Result(emptyList(), 0.0)
}
if (points.size == 1) {
return Result(listOf(points.first().id), 0.0)
}
val graph = Graph(points)
graph.display()
val minimumSpanningTree = graph.minimumSpanningTree()
println("Minimum spanning tree: $minimumSpanningTree\n")
val oddVertices = graph.oddVertices(minimumSpanningTree)
println("Odd vertices in minimum spanning tree: $oddVertices\n")
val minimumWeightMatching = graph.minimumWeightMatching(minimumSpanningTree, oddVertices)
println("Minimum weight matching: $minimumWeightMatching\n")
val eulerianCircuit = graph.eulerianCircuit(minimumWeightMatching)
println("Eulerian circuit: $eulerianCircuit\n")
if (eulerianCircuit.isEmpty()) {
System.err.println("Error: Christofides path could not be found.")
return Result(emptyList(), -1.0)
}
val result = graph.hamiltonianCircuit(eulerianCircuit)
println("Result path: ${result.path}\n")
println("Length of the result path: %.2f".format(result.length))
return result
}
}
class Graph(private val points: List<Point>) {
private val pointCount: Int = points.size
private val distanceLists: List<MutableList<Double>> = List(pointCount) { MutableList(pointCount) { 0.0 } }
init {
val distance = { one: Point, two: Point -> hypot(one.pair.x - two.pair.x, one.pair.y - two.pair.y) }
for (i in 0 until pointCount) {
for (j in i + 1 until pointCount) {
val dist = distance(points[i], points[j])
distanceLists[i][j] = dist
distanceLists[j][i] = dist
}
}
}
fun minimumSpanningTree(): List<Edge> {
val edges = mutableListOf<Edge>()
if (pointCount == 0) {
return edges
}
for (i in 0 until pointCount) {
for (j in i + 1 until pointCount) {
edges.add(Edge(i, j, distanceLists[i][j]))
}
}
edges.sortBy { it.weight }
val minimumSpanningTree = mutableListOf<Edge>()
val unionFind = UnionFind(pointCount)
var edgeCount = 0
for (edge in edges) {
if (unionFind.unite(edge.u, edge.v)) {
minimumSpanningTree.add(edge)
edgeCount++
if (edgeCount == pointCount - 1) {
break
}
}
}
return minimumSpanningTree
}
fun oddVertices(minimumSpanningTree: List<Edge>): List<Int> {
val degrees = MutableList(pointCount) { 0 }
minimumSpanningTree.forEach { edge ->
degrees[edge.u]++
degrees[edge.v]++
}
return degrees.mapIndexedNotNull { index, degree -> if (degree % 2 == 1) index else null }
}
fun minimumWeightMatching(minimumSpanningTree: List<Edge>, oddVertices: List<Int>): List<Edge> {
val minimumWeightMatching = mutableListOf<Edge>()
if (oddVertices.isEmpty()) {
return minimumWeightMatching
}
minimumWeightMatching.addAll(minimumSpanningTree)
val currentOdd = oddVertices.toMutableList()
currentOdd.shuffle()
val visited = mutableSetOf<Int>()
for (i in currentOdd.indices) {
if (visited.contains(i)) {
continue
}
val v = currentOdd[i]
var minimumDistance = Int.MAX_VALUE.toDouble()
var closestUIndex: Int? = null
for (j in i + 1 until currentOdd.size) {
if (!visited.contains(j)) {
val u = currentOdd[j]
if (distanceLists[v][u] < minimumDistance) {
minimumDistance = distanceLists[v][u]
closestUIndex = j
}
}
}
if (closestUIndex != null) {
val j = closestUIndex
val u = currentOdd[j]
minimumWeightMatching.add(Edge(v, u, minimumDistance))
visited.add(i)
visited.add(j)
} else {
throw AssertionError("Could not match an odd vertex in minimum weight matching: $v")
}
}
return minimumWeightMatching
}
fun eulerianCircuit(minimumWeightMatching: List<Edge>): List<Int> {
val circuit = mutableListOf<Int>()
if (minimumWeightMatching.isEmpty()) {
return circuit
}
data class Twin(val halfEdge: Int, val index: Int)
val adjacencyLists = List(pointCount) { mutableListOf<Twin>() }
minimumWeightMatching.forEachIndexed { index, edge ->
adjacencyLists[edge.u].add(Twin(edge.v, index))
adjacencyLists[edge.v].add(Twin(edge.u, index))
}
val edgesUsed = mutableSetOf<Int>()
val stack = mutableListOf<Int>()
var currentVertex = minimumWeightMatching.first().u
stack.add(currentVertex)
while (stack.isNotEmpty()) {
currentVertex = stack.last()
var foundEdge = false
while (adjacencyLists[currentVertex].isNotEmpty()) {
val twin = adjacencyLists[currentVertex].removeAt(adjacencyLists[currentVertex].size - 1)
if (!edgesUsed.contains(twin.index)) {
edgesUsed.add(twin.index)
stack.add(twin.halfEdge)
foundEdge = true
break
}
}
if (!foundEdge) {
circuit.add(stack.removeAt(stack.size - 1))
}
}
circuit.reverse()
return circuit
}
fun hamiltonianCircuit(eulerianCircuit: List<Int>): Result {
val christofidesPath = mutableListOf<Int>()
var length = 0.0
val visited = mutableSetOf<Int>()
var current = eulerianCircuit.first()
christofidesPath.add(current)
visited.add(current)
for (vertex in eulerianCircuit) {
if (!visited.contains(vertex)) {
christofidesPath.add(vertex)
visited.add(vertex)
length += distanceLists[current][vertex]
current = vertex
}
}
length += distanceLists[current][christofidesPath.first()]
christofidesPath.add(christofidesPath.first())
return Result(christofidesPath, length)
}
fun display() {
println("Graph: {")
for (u in 0 until pointCount) {
print("${u.toString().padStart(3)}: {")
for (v in 0 until pointCount) {
if (u != v) {
if (!(u == 0 && v == 1) && v > 0) {
print(", ")
}
print("${v}: ${"%.2f".format(distanceLists[u][v])}")
}
}
println("}" + if (u == pointCount - 1) "" else ",")
}
println("}\n")
}
private class UnionFind(number: Int) {
private val parents: MutableList<Int> = MutableList(number) { it }
private val ranks: MutableList<Int> = MutableList(number) { 0 }
fun find(n: Int): Int {
if (parents[n] == n) {
return n
}
parents[n] = find(parents[n])
return parents[n]
}
fun unite(i: Int, j: Int): Boolean {
val rootI = find(i)
val rootJ = find(j)
if (rootI != rootJ) {
when {
ranks[rootI] < ranks[rootJ] -> parents[rootI] = rootJ
ranks[rootI] > ranks[rootJ] -> parents[rootJ] = rootI
else -> {
parents[rootJ] = rootI
ranks[rootI]++
}
}
return true
}
return false
}
}
}
}
- Output:
Graph: {
0: {1: 1692.83, 2: 2252.27, 3: 1103.61, 4: 2522.81, 5: 396.85, 6: 1446.77, 7: 424.54, 8: 1424.06, 9: 749.11, 10: 902.27, 11: 1546.99, 12: 2553.85, 13: 2378.37, 14: 1014.75, 15: 1259.36, 16: 1017.53, 17: 1167.47, 18: 813.71, 19: 1404.84, 20: 885.11, 21: 1329.53, 22: 882.22, 23: 1206.07, 24: 1194.02, 25: 1510.64, 26: 1571.56, 27: 415.64, 28: 2080.50, 29: 2144.57, 30: 886.71, 31: 790.23, 32: 2640.85, 33: 1803.87, 34: 1576.12, 35: 1172.71, 36: 2518.19, 37: 1224.83, 38: 2102.31, 39: 1358.11, 40: 2697.60, 41: 661.46, 42: 2250.86, 43: 1668.39, 44: 923.02, 45: 2114.69, 46: 429.20, 47: 2522.63, 48: 442.29, 49: 1706.57, 50: 1128.69, 51: 2474.05, 52: 1010.45, 53: 1394.18, 54: 1707.55, 55: 795.34, 56: 1359.82, 57: 718.23, 58: 1030.90, 59: 1152.29, 60: 1043.22, 61: 1259.66, 62: 288.09, 63: 1365.66, 64: 1250.23, 65: 1286.44, 66: 593.19, 67: 1617.69, 68: 1240.50, 69: 1386.56, 70: 2635.28, 71: 801.54, 72: 1531.16, 73: 941.98, 74: 628.05, 75: 2648.72, 76: 1048.43, 77: 2442.33, 78: 1007.91, 79: 862.97, 80: 1219.59, 81: 2186.07, 82: 1715.55, 83: 888.47, 84: 1733.84, 85: 1508.30, 86: 1254.93, 87: 1219.45, 88: 806.49, 89: 643.77, 90: 752.97, 91: 302.55, 92: 412.98, 93: 1358.85, 94: 2431.13, 95: 2376.68, 96: 814.88, 97: 782.65, 98: 1468.25, 99: 2643.49},
1: {0: 1692.83, 2: 1708.47, 3: 2402.82, 4: 1185.96, 5: 2056.61, 6: 1391.81, 7: 1619.84, 8: 1342.51, 9: 2441.83, 10: 2358.84, 11: 1606.49, 12: 969.75, 13: 1661.98, 14: 2445.81, 15: 2830.61, 16: 2455.10, 17: 2836.89, 18: 2310.22, 19: 1603.24, 20: 2501.84, 21: 2896.75, 22: 1921.43, 23: 2894.56, 24: 893.07, 25: 2670.97, 26: 1737.34, 27: 1363.37, 28: 1500.97, 29: 1190.74, 30: 1592.38, 31: 2165.92, 32: 1069.32, 33: 1451.48, 34: 1893.08, 35: 2857.57, 36: 1143.12, 37: 2917.26, 38: 961.14, 39: 336.51, 40: 1984.45, 41: 1536.06, 42: 1834.55, 43: 256.56, 44: 2124.21, 45: 1636.50, 46: 1932.62, 47: 1595.61, 48: 2094.27, 49: 416.12, 50: 1146.96, 51: 1302.29, 52: 2577.25, 53: 331.30, 54: 1529.08, 55: 1902.79, 56: 1400.39, 57: 1160.70, 58: 2626.07, 59: 1851.16, 60: 1006.11, 61: 1802.54, 62: 1979.20, 63: 331.72, 64: 2526.66, 65: 2618.49, 66: 1102.74, 67: 710.54, 68: 573.27, 69: 2887.44, 70: 1901.81, 71: 2458.65, 72: 462.24, 73: 2543.91, 74: 2076.21, 75: 1045.02, 76: 1663.86, 77: 1262.33, 78: 2647.11, 79: 1670.00, 80: 842.63, 81: 569.94, 82: 1513.23, 83: 2581.30, 84: 832.31, 85: 1752.07, 86: 1218.50, 87: 2806.43, 88: 1419.51, 89: 2301.80, 90: 1978.32, 91: 1769.47, 92: 1399.75, 93: 2963.13, 94: 793.77, 95: 1200.94, 96: 2093.04, 97: 1911.41, 98: 3155.99, 99: 1830.81},
2: {0: 2252.27, 1: 1708.47, 3: 3332.92, 4: 1073.74, 5: 2622.81, 6: 811.32, 7: 2501.90, 8: 829.19, 9: 2793.51, 10: 2264.73, 11: 782.47, 12: 1532.65, 13: 221.30, 14: 2279.53, 15: 3482.28, 16: 2292.55, 17: 3286.38, 18: 3065.98, 19: 934.01, 20: 2582.16, 21: 3551.54, 22: 1703.47, 23: 3245.72, 24: 1183.94, 25: 3716.83, 26: 846.13, 27: 1855.78, 28: 214.02, 29: 592.08, 30: 2769.95, 31: 2086.78, 32: 1532.92, 33: 448.41, 34: 983.25, 35: 3047.00, 36: 1133.38, 37: 3215.88, 38: 850.57, 39: 1730.97, 40: 450.79, 41: 2591.88, 42: 171.03, 43: 1452.25, 44: 1895.68, 45: 139.26, 46: 2138.57, 47: 507.06, 48: 2669.80, 49: 1292.65, 50: 1137.95, 51: 823.31, 52: 3246.18, 53: 1827.94, 54: 567.12, 55: 2916.62, 56: 902.66, 57: 1572.47, 58: 2625.84, 59: 1377.63, 60: 1275.47, 61: 1227.89, 62: 2473.70, 63: 1650.53, 64: 3479.70, 65: 3529.20, 66: 1872.41, 67: 1020.78, 68: 1423.78, 69: 3630.58, 70: 401.00, 71: 2640.38, 72: 1287.39, 73: 2582.75, 74: 2870.34, 75: 1615.07, 76: 1333.01, 77: 832.66, 78: 3193.36, 79: 2811.81, 80: 1192.82, 81: 1530.89, 82: 552.95, 83: 2913.17, 84: 880.57, 85: 926.74, 86: 1001.00, 87: 3435.26, 88: 2587.07, 89: 2842.38, 90: 1885.11, 91: 2515.46, 92: 1845.80, 93: 3554.43, 94: 1633.18, 95: 826.46, 96: 3018.38, 97: 1786.24, 98: 3314.92, 99: 454.28},
3: {0: 1103.61, 1: 2402.82, 2: 3332.92, 4: 3447.03, 5: 822.13, 6: 2538.42, 7: 850.72, 8: 2511.71, 9: 1030.07, 10: 1695.42, 11: 2649.14, 12: 3362.05, 13: 3441.61, 14: 1794.27, 15: 624.77, 16: 1789.49, 17: 928.90, 18: 372.34, 19: 2508.21, 20: 1444.92, 21: 660.87, 22: 1928.37, 23: 1101.31, 24: 2203.69, 25: 417.06, 26: 2675.06, 27: 1478.05, 28: 3149.96, 29: 3152.30, 30: 844.35, 31: 1696.56, 32: 3458.92, 33: 2886.52, 34: 2674.08, 35: 1336.01, 36: 3428.18, 37: 1189.67, 38: 3060.99, 39: 2087.30, 40: 3771.11, 41: 867.68, 42: 3343.37, 43: 2479.00, 44: 1895.50, 45: 3197.56, 46: 1394.72, 47: 3555.86, 48: 785.49, 49: 2568.82, 50: 2195.77, 51: 3447.68, 52: 497.64, 53: 2071.58, 54: 2801.62, 55: 500.37, 56: 2454.44, 57: 1763.01, 58: 1572.78, 59: 2235.15, 60: 2076.11, 61: 2353.39, 62: 973.90, 63: 2131.24, 64: 147.18, 65: 216.11, 66: 1502.07, 67: 2575.06, 68: 2132.53, 69: 554.48, 70: 3704.46, 71: 1293.39, 72: 2416.40, 73: 1507.78, 74: 477.20, 75: 3443.82, 76: 2147.80, 77: 3412.10, 78: 718.36, 79: 758.02, 80: 2215.77, 81: 2965.16, 82: 2808.11, 83: 1061.23, 84: 2712.55, 85: 2611.06, 86: 2332.15, 87: 644.05, 88: 992.36, 89: 747.47, 90: 1760.32, 91: 819.32, 92: 1491.48, 93: 784.62, 94: 3196.27, 95: 3344.20, 96: 324.23, 97: 1821.03, 98: 1498.55, 99: 3701.25},
4: {0: 2522.81, 1: 1185.96, 2: 1073.74, 3: 3447.03, 5: 2919.35, 6: 1423.99, 7: 2605.82, 8: 1400.12, 9: 3218.20, 10: 2883.28, 11: 1552.62, 12: 502.33, 13: 890.91, 14: 2934.40, 15: 3770.10, 16: 2946.54, 17: 3681.03, 18: 3277.01, 19: 1655.73, 20: 3135.40, 21: 3839.75, 22: 2328.64, 23: 3691.82, 24: 1343.50, 25: 3765.14, 26: 1675.52, 27: 2113.83, 28: 972.75, 29: 553.17, 30: 2700.64, 31: 2683.12, 32: 474.66, 33: 1178.07, 34: 1851.22, 35: 3569.12, 36: 69.23, 37: 3688.56, 38: 437.39, 39: 1413.02, 40: 1079.08, 41: 2593.88, 42: 1244.74, 43: 1007.25, 44: 2548.37, 45: 1107.08, 46: 2591.88, 47: 652.15, 48: 2964.12, 49: 887.03, 50: 1498.04, 51: 259.24, 52: 3515.60, 53: 1468.37, 54: 1342.83, 55: 2961.86, 56: 1499.52, 57: 1818.49, 58: 3221.86, 59: 2087.73, 60: 1506.11, 61: 1965.28, 62: 2799.74, 63: 1350.00, 64: 3583.51, 65: 3661.45, 66: 1971.11, 67: 905.81, 68: 1316.71, 69: 3869.01, 70: 1007.26, 71: 3145.43, 72: 1030.67, 73: 3156.85, 74: 3049.35, 75: 564.02, 76: 1957.63, 77: 242.17, 78: 3530.73, 79: 2768.48, 80: 1310.25, 81: 704.49, 82: 1319.49, 83: 3354.74, 84: 805.35, 85: 1738.27, 86: 1442.08, 87: 3734.72, 88: 2515.89, 89: 3166.42, 90: 2468.07, 91: 2701.30, 92: 2128.81, 93: 3879.30, 94: 670.55, 95: 253.14, 96: 3124.04, 97: 2373.91, 98: 3863.27, 99: 894.15},
5: {0: 396.85, 1: 2056.61, 2: 2622.81, 3: 822.13, 4: 2919.35, 6: 1812.31, 7: 533.67, 8: 1793.85, 9: 436.02, 10: 907.18, 11: 1891.78, 12: 2940.78, 13: 2758.12, 14: 1014.68, 15: 867.14, 16: 1012.35, 17: 781.95, 18: 473.70, 19: 1743.56, 20: 737.13, 21: 937.24, 22: 1110.79, 23: 843.28, 24: 1590.11, 25: 1239.00, 26: 1899.80, 27: 811.01, 28: 2458.47, 29: 2538.56, 30: 944.03, 31: 880.78, 32: 3029.29, 33: 2175.13, 34: 1879.61, 35: 876.62, 36: 2914.20, 37: 878.01, 38: 2499.15, 39: 1720.12, 40: 3071.18, 41: 764.29, 42: 2610.48, 43: 2050.53, 44: 1074.24, 45: 2484.17, 46: 574.19, 47: 2911.48, 48: 47.07, 49: 2096.31, 50: 1513.78, 51: 2870.31, 52: 623.91, 53: 1745.03, 54: 2068.13, 55: 697.69, 56: 1722.48, 57: 1113.11, 58: 886.00, 59: 1428.74, 60: 1437.61, 61: 1555.53, 62: 157.26, 63: 1735.62, 64: 960.03, 65: 970.27, 66: 973.54, 67: 2014.44, 68: 1630.61, 69: 1007.92, 70: 3011.41, 71: 604.47, 72: 1922.57, 73: 802.89, 74: 374.23, 75: 3034.31, 76: 1361.38, 77: 2838.77, 78: 611.66, 79: 886.49, 80: 1616.27, 81: 2567.16, 82: 2078.01, 83: 560.97, 84: 2130.50, 85: 1830.30, 86: 1633.84, 87: 825.11, 88: 942.65, 89: 249.33, 90: 938.87, 91: 329.07, 92: 804.20, 93: 962.25, 94: 2811.48, 95: 2773.24, 96: 609.58, 97: 1002.96, 98: 1154.05, 99: 3024.70},
6: {0: 1446.77, 1: 1391.81, 2: 811.32, 3: 2538.42, 4: 1423.99, 5: 1812.31, 7: 1724.84, 8: 50.25, 9: 1989.21, 10: 1511.09, 11: 216.11, 12: 1709.04, 13: 963.35, 14: 1545.01, 15: 2670.96, 16: 1557.71, 17: 2480.83, 18: 2259.77, 19: 242.20, 20: 1806.20, 21: 2740.23, 22: 942.25, 23: 2447.79, 24: 555.79, 25: 2931.32, 26: 345.68, 27: 1062.02, 28: 663.19, 29: 894.88, 30: 2040.95, 31: 1320.12, 32: 1756.41, 33: 366.90, 34: 508.99, 35: 2265.81, 36: 1453.68, 37: 2423.20, 38: 1005.73, 39: 1258.79, 40: 1261.30, 41: 1843.69, 42: 805.10, 43: 1165.01, 44: 1153.73, 45: 672.31, 46: 1332.88, 47: 1164.61, 48: 1859.25, 49: 1051.98, 50: 382.78, 51: 1263.40, 52: 2435.30, 53: 1362.06, 54: 264.15, 55: 2144.67, 56: 93.05, 57: 800.24, 58: 1866.83, 59: 666.11, 60: 561.81, 61: 541.61, 62: 1662.57, 63: 1187.47, 64: 2685.58, 65: 2729.89, 66: 1130.68, 67: 740.95, 68: 895.32, 69: 2820.22, 70: 1205.23, 71: 1850.60, 72: 934.85, 73: 1814.36, 74: 2070.02, 75: 1810.52, 76: 560.02, 77: 1245.83, 78: 2382.86, 79: 2071.42, 80: 593.67, 81: 1508.62, 82: 269.68, 83: 2112.27, 84: 714.19, 85: 369.43, 86: 237.99, 87: 2624.00, 88: 1867.18, 89: 2031.08, 90: 1108.95, 91: 1719.11, 92: 1046.94, 93: 2744.02, 94: 1707.42, 95: 1196.34, 96: 2229.60, 97: 1009.76, 98: 2544.23, 99: 1231.35},
7: {0: 424.54, 1: 1619.84, 2: 2501.90, 3: 850.72, 4: 2605.82, 5: 533.67, 6: 1724.84, 8: 1693.38, 9: 969.69, 10: 1307.47, 11: 1858.84, 12: 2553.93, 13: 2600.32, 14: 1420.54, 15: 1210.84, 16: 1421.95, 17: 1257.13, 18: 691.03, 19: 1728.84, 20: 1228.33, 21: 1276.92, 22: 1295.39, 23: 1350.99, 24: 1355.06, 25: 1216.00, 26: 1904.64, 27: 670.86, 28: 2312.65, 29: 2301.67, 30: 464.97, 31: 1210.89, 32: 2648.02, 33: 2059.71, 34: 1934.30, 35: 1410.09, 36: 2590.03, 37: 1397.24, 38: 2212.89, 39: 1288.82, 40: 2933.78, 41: 247.78, 42: 2524.47, 43: 1660.68, 44: 1347.31, 45: 2369.01, 46: 849.76, 47: 2706.77, 48: 553.18, 49: 1736.75, 50: 1365.06, 51: 2598.66, 52: 958.18, 53: 1293.21, 54: 1988.89, 55: 420.64, 56: 1646.54, 57: 930.41, 58: 1379.08, 59: 1539.02, 60: 1233.11, 61: 1630.72, 62: 554.05, 63: 1320.96, 64: 993.62, 65: 1061.08, 66: 651.46, 67: 1725.78, 68: 1289.13, 69: 1275.73, 70: 2865.05, 71: 1113.80, 72: 1577.35, 73: 1291.33, 74: 456.98, 75: 2641.09, 76: 1411.56, 77: 2563.43, 78: 1047.85, 79: 438.51, 80: 1365.78, 81: 2163.98, 82: 1992.99, 83: 1092.48, 84: 1862.13, 85: 1849.80, 86: 1506.36, 87: 1187.77, 88: 416.33, 89: 738.87, 90: 1175.92, 91: 206.31, 92: 696.60, 93: 1345.79, 94: 2402.84, 95: 2495.67, 96: 527.06, 97: 1199.81, 98: 1683.74, 99: 2857.27},
8: {0: 1424.06, 1: 1342.51, 2: 829.19, 3: 2511.71, 4: 1400.12, 5: 1793.85, 6: 50.25, 7: 1693.38, 9: 1980.89, 10: 1518.63, 11: 266.27, 12: 1674.21, 13: 972.26, 14: 1556.00, 15: 2654.91, 16: 1568.60, 17: 2471.47, 18: 2237.66, 19: 281.31, 20: 1807.97, 21: 2724.37, 22: 950.85, 23: 2442.03, 24: 506.32, 25: 2902.40, 26: 394.83, 27: 1033.99, 28: 671.25, 29: 878.08, 30: 2002.81, 31: 1325.47, 32: 1723.49, 33: 381.28, 34: 555.71, 35: 2265.54, 36: 1427.88, 37: 2419.36, 38: 977.49, 39: 1208.59, 40: 1277.44, 41: 1807.64, 42: 832.33, 43: 1116.88, 44: 1165.09, 45: 690.97, 46: 1324.55, 47: 1163.60, 48: 1840.87, 49: 1005.68, 50: 341.70, 51: 1246.65, 52: 2417.45, 53: 1311.88, 54: 297.56, 55: 2112.60, 56: 99.76, 57: 765.87, 58: 1872.34, 59: 687.61, 60: 517.35, 61: 569.53, 62: 1645.48, 63: 1137.23, 64: 2658.80, 65: 2704.79, 66: 1092.44, 67: 696.58, 68: 845.19, 69: 2801.49, 70: 1219.06, 71: 1848.37, 72: 886.28, 73: 1817.95, 74: 2045.11, 75: 1776.01, 76: 569.57, 77: 1227.73, 78: 2369.32, 79: 2034.62, 80: 543.74, 81: 1466.81, 82: 299.92, 83: 2105.55, 84: 675.88, 85: 415.41, 86: 195.49, 87: 2608.58, 88: 1827.89, 89: 2015.52, 90: 1112.76, 91: 1692.61, 92: 1020.77, 93: 2730.51, 94: 1668.26, 95: 1176.48, 96: 2201.18, 97: 1013.98, 98: 2546.21, 99: 1240.42},
9: {0: 749.11, 1: 2441.83, 2: 2793.51, 3: 1030.07, 4: 3218.20, 5: 436.02, 6: 1989.21, 7: 969.69, 8: 1980.89, 10: 721.26, 11: 2024.66, 12: 3286.98, 13: 2952.34, 14: 802.17, 15: 769.80, 16: 794.77, 17: 493.38, 18: 664.25, 19: 1871.21, 20: 420.39, 21: 829.61, 22: 1136.55, 23: 473.63, 24: 1874.71, 25: 1416.40, 26: 2003.40, 27: 1117.59, 28: 2651.65, 29: 2792.86, 30: 1366.02, 31: 795.62, 32: 3371.10, 33: 2355.76, 34: 1944.73, 35: 441.19, 36: 3220.14, 37: 478.48, 38: 2786.95, 39: 2107.21, 40: 3244.04, 41: 1197.60, 42: 2755.67, 43: 2409.84, 44: 1017.21, 45: 2654.48, 46: 656.41, 47: 3136.01, 48: 420.59, 49: 2437.39, 50: 1749.77, 51: 3141.82, 52: 617.29, 53: 2141.98, 54: 2226.89, 55: 1078.64, 56: 1896.26, 57: 1401.86, 58: 542.72, 59: 1481.27, 60: 1712.78, 61: 1626.02, 62: 465.47, 63: 2114.01, 64: 1136.89, 65: 1102.39, 66: 1340.55, 67: 2315.19, 68: 1973.40, 69: 969.93, 70: 3192.03, 71: 269.65, 72: 2259.18, 73: 480.59, 74: 712.20, 75: 3383.75, 76: 1469.71, 77: 3113.28, 78: 454.23, 79: 1301.62, 80: 1908.69, 81: 2927.25, 82: 2240.56, 83: 140.04, 84: 2415.41, 85: 1926.37, 86: 1848.41, 87: 713.08, 88: 1376.94, 89: 300.03, 90: 945.01, 91: 764.70, 92: 1095.56, 93: 791.77, 94: 3172.56, 95: 3050.34, 96: 933.77, 97: 1035.71, 98: 725.83, 99: 3220.44},
10: {0: 902.27, 1: 2358.84, 2: 2264.73, 3: 1695.42, 4: 2883.28, 5: 907.18, 6: 1511.09, 7: 1307.47, 8: 1518.63, 9: 721.26, 11: 1483.07, 12: 3056.09, 13: 2450.31, 14: 113.07, 15: 1487.71, 16: 115.26, 17: 1161.23, 18: 1323.96, 19: 1334.15, 20: 348.93, 21: 1544.61, 22: 569.01, 23: 1060.32, 24: 1592.27, 25: 2102.43, 26: 1427.02, 27: 1026.08, 28: 2158.99, 29: 2390.68, 30: 1771.01, 31: 201.85, 32: 3126.63, 33: 1859.02, 34: 1329.08, 35: 804.48, 36: 2899.68, 37: 1004.97, 38: 2446.65, 39: 2052.78, 40: 2705.46, 41: 1553.67, 42: 2196.00, 43: 2252.61, 44: 370.01, 45: 2130.14, 46: 485.24, 47: 2672.89, 48: 931.18, 49: 2231.73, 50: 1391.60, 51: 2757.15, 52: 1334.04, 53: 2118.40, 54: 1706.97, 55: 1592.14, 56: 1421.53, 57: 1199.97, 58: 361.27, 59: 888.38, 60: 1431.62, 61: 1039.23, 62: 791.77, 63: 2031.86, 64: 1819.14, 65: 1800.88, 66: 1324.61, 67: 2027.12, 68: 1807.75, 69: 1690.80, 70: 2664.75, 71: 467.09, 72: 2054.66, 73: 328.69, 74: 1280.11, 75: 3158.02, 76: 951.16, 77: 2735.06, 78: 1173.36, 79: 1733.54, 80: 1638.25, 81: 2745.90, 82: 1725.00, 83: 781.22, 84: 2088.98, 85: 1346.00, 86: 1442.34, 87: 1430.24, 88: 1707.30, 89: 954.11, 90: 415.50, 91: 1127.82, 92: 982.15, 93: 1491.46, 94: 2984.60, 95: 2679.09, 96: 1516.32, 97: 509.73, 98: 1053.23, 99: 2712.87},
11: {0: 1546.99, 1: 1606.49, 2: 782.47, 3: 2649.14, 4: 1552.62, 5: 1891.78, 6: 216.11, 7: 1858.84, 8: 266.27, 9: 2024.66, 10: 1483.07, 12: 1876.01, 13: 969.15, 14: 1501.46, 15: 2735.86, 16: 1514.44, 17: 2518.00, 18: 2352.09, 19: 153.58, 20: 1800.00, 21: 2804.09, 22: 921.09, 23: 2469.70, 24: 767.61, 25: 3050.37, 26: 136.49, 27: 1188.35, 28: 685.81, 29: 1005.20, 30: 2201.49, 31: 1304.35, 32: 1916.31, 33: 395.41, 34: 312.20, 35: 2265.17, 36: 1589.22, 37: 2437.03, 38: 1154.61, 39: 1473.78, 40: 1227.82, 41: 1996.18, 42: 731.02, 43: 1376.80, 44: 1114.84, 45: 647.09, 46: 1375.18, 47: 1207.36, 48: 1938.08, 49: 1258.81, 50: 570.74, 51: 1366.93, 52: 2508.79, 53: 1576.91, 54: 229.92, 55: 2279.37, 56: 240.75, 57: 955.12, 58: 1843.95, 59: 598.82, 60: 756.13, 61: 452.09, 62: 1737.55, 63: 1403.00, 64: 2796.12, 65: 2833.13, 66: 1296.09, 67: 943.40, 68: 1109.88, 69: 2896.08, 70: 1183.26, 71: 1861.20, 72: 1147.97, 73: 1800.28, 74: 2174.95, 75: 1975.97, 76: 555.64, 77: 1354.71, 78: 2438.24, 79: 2226.23, 80: 807.37, 81: 1700.40, 82: 250.87, 83: 2140.16, 84: 899.55, 85: 185.97, 86: 435.78, 87: 2686.40, 88: 2033.10, 89: 2096.93, 90: 1104.00, 91: 1832.69, 92: 1166.28, 93: 2797.85, 94: 1889.65, 95: 1312.49, 96: 2348.60, 97: 1005.56, 98: 2532.48, 99: 1229.99},
12: {0: 2553.85, 1: 969.75, 2: 1532.65, 3: 3362.05, 4: 502.33, 5: 2940.78, 6: 1709.04, 7: 2553.93, 8: 1674.21, 9: 3286.98, 10: 3056.09, 11: 1876.01, 13: 1370.37, 14: 3122.31, 15: 3756.48, 16: 3133.57, 17: 3720.49, 18: 3243.40, 19: 1950.94, 20: 3267.83, 21: 3824.39, 22: 2531.76, 23: 3755.49, 24: 1464.18, 25: 3639.89, 26: 2008.76, 27: 2170.08, 28: 1397.14, 29: 956.62, 30: 2561.28, 31: 2854.36, 32: 100.66, 33: 1542.65, 34: 2186.91, 35: 3672.72, 36: 433.18, 37: 3765.05, 38: 733.48, 39: 1274.76, 40: 1580.21, 41: 2494.47, 42: 1701.28, 43: 894.91, 44: 2751.83, 45: 1541.72, 46: 2702.53, 47: 1150.51, 48: 2982.44, 49: 849.63, 50: 1674.84, 51: 755.01, 52: 3501.01, 53: 1296.45, 54: 1693.55, 55: 2863.71, 56: 1767.79, 57: 1900.23, 58: 3371.64, 59: 2342.81, 60: 1626.49, 61: 2240.20, 62: 2840.72, 63: 1234.19, 64: 3489.32, 65: 3578.14, 66: 1967.42, 67: 1033.01, 68: 1314.33, 69: 3829.44, 70: 1507.06, 71: 3254.74, 72: 1028.41, 73: 3298.39, 74: 3009.98, 75: 102.83, 76: 2186.84, 77: 730.03, 78: 3547.62, 79: 2637.90, 80: 1419.32, 81: 399.85, 82: 1670.75, 83: 3426.64, 84: 1002.73, 85: 2059.72, 86: 1660.76, 87: 3727.58, 88: 2386.26, 89: 3189.99, 90: 2644.32, 91: 2682.30, 92: 2195.08, 93: 3880.20, 94: 215.64, 95: 715.44, 96: 3047.17, 97: 2557.74, 98: 3971.85, 99: 1395.55},
13: {0: 2378.37, 1: 1661.98, 2: 221.30, 3: 3441.61, 4: 890.91, 5: 2758.12, 6: 963.35, 7: 2600.32, 8: 972.26, 9: 2952.34, 10: 2450.31, 11: 969.15, 12: 1370.37, 14: 2470.60, 15: 3622.68, 16: 2483.58, 17: 3443.49, 18: 3190.11, 19: 1116.20, 20: 2760.06, 21: 3692.41, 22: 1884.43, 23: 3410.87, 24: 1254.77, 25: 3816.03, 26: 1046.56, 27: 1972.46, 28: 301.04, 29: 482.37, 30: 2838.51, 31: 2267.40, 32: 1360.58, 33: 598.02, 34: 1192.56, 35: 3222.91, 36: 954.51, 37: 3385.06, 38: 740.65, 39: 1727.45, 40: 343.63, 41: 2672.00, 42: 379.35, 43: 1410.12, 44: 2083.28, 45: 329.95, 46: 2295.94, 47: 287.59, 48: 2805.19, 49: 1248.36, 50: 1250.96, 51: 633.51, 52: 3381.94, 53: 1819.15, 54: 743.35, 55: 3008.84, 56: 1056.38, 57: 1679.32, 58: 2810.48, 59: 1567.95, 60: 1367.23, 61: 1420.27, 62: 2612.66, 63: 1647.54, 64: 3587.56, 65: 3642.56, 66: 1958.18, 67: 1013.88, 68: 1450.67, 69: 3763.35, 70: 267.55, 71: 2811.12, 72: 1273.98, 73: 2763.84, 74: 2986.96, 75: 1446.33, 76: 1507.46, 77: 649.06, 78: 3340.40, 79: 2885.92, 80: 1254.78, 81: 1415.41, 82: 725.58, 83: 3075.61, 84: 863.02, 85: 1125.88, 86: 1124.46, 87: 3577.38, 88: 2652.87, 89: 2984.55, 90: 2061.38, 91: 2629.44, 92: 1967.08, 93: 3701.49, 94: 1490.62, 95: 655.08, 96: 3122.90, 97: 1962.03, 98: 3495.99, 99: 268.17},
14: {0: 1014.75, 1: 2445.81, 2: 2279.53, 3: 1794.27, 4: 2934.40, 5: 1014.68, 6: 1545.01, 7: 1420.54, 8: 1556.00, 9: 802.17, 10: 113.07, 11: 1501.46, 12: 3122.31, 13: 2470.60, 15: 1560.85, 16: 13.04, 17: 1219.45, 18: 1422.14, 19: 1355.95, 20: 402.23, 21: 1615.36, 22: 606.92, 23: 1105.60, 24: 1661.00, 25: 2198.41, 26: 1436.02, 27: 1125.43, 28: 2183.25, 29: 2432.38, 30: 1884.02, 31: 280.03, 32: 3190.70, 33: 1884.71, 34: 1326.22, 35: 830.83, 36: 2953.10, 37: 1042.70, 38: 2499.04, 39: 2144.23, 40: 2715.52, 41: 1666.73, 42: 2203.00, 43: 2332.03, 44: 391.28, 45: 2146.92, 46: 595.18, 47: 2700.79, 48: 1037.10, 49: 2305.31, 50: 1451.16, 51: 2800.17, 52: 1418.82, 53: 2212.26, 54: 1728.45, 55: 1702.58, 56: 1457.50, 57: 1285.22, 58: 370.47, 59: 902.77, 60: 1502.70, 61: 1051.70, 62: 902.70, 63: 2120.79, 64: 1915.41, 65: 1893.37, 66: 1425.29, 67: 2090.68, 68: 1889.44, 69: 1767.32, 70: 2677.85, 71: 538.16, 72: 2129.61, 73: 364.92, 74: 1386.39, 75: 3224.59, 76: 986.43, 77: 2779.34, 78: 1248.91, 79: 1846.29, 80: 1708.17, 81: 2819.89, 82: 1747.40, 83: 848.07, 84: 2146.06, 85: 1354.89, 86: 1492.38, 87: 1502.97, 88: 1820.12, 89: 1049.49, 90: 478.87, 91: 1240.45, 92: 1080.60, 93: 1555.12, 94: 3056.80, 95: 2724.89, 96: 1622.85, 97: 565.10, 98: 1057.65, 99: 2730.56},
15: {0: 1259.36, 1: 2830.61, 2: 3482.28, 3: 624.77, 4: 3770.10, 5: 867.14, 6: 2670.96, 7: 1210.84, 8: 2654.91, 9: 769.80, 10: 1487.71, 11: 2735.86, 12: 3756.48, 13: 3622.68, 14: 1560.85, 16: 1552.22, 17: 399.41, 18: 523.32, 19: 2584.53, 20: 1162.01, 21: 70.18, 22: 1885.91, 23: 578.07, 24: 2452.44, 25: 839.80, 26: 2730.46, 27: 1674.99, 28: 3322.44, 29: 3403.92, 30: 1387.55, 31: 1562.87, 32: 3848.77, 33: 3035.95, 34: 2688.48, 35: 876.62, 36: 3761.28, 37: 674.11, 38: 3356.25, 39: 2498.69, 40: 3931.97, 41: 1333.69, 42: 3462.08, 43: 2861.57, 44: 1783.54, 45: 3343.23, 46: 1367.09, 47: 3778.62, 48: 820.29, 49: 2924.85, 50: 2380.74, 51: 3731.50, 52: 255.69, 53: 2503.87, 54: 2922.55, 55: 1020.65, 56: 2579.87, 57: 1977.58, 58: 1247.62, 59: 2226.07, 60: 2302.57, 61: 2365.29, 62: 1010.03, 63: 2527.81, 64: 630.89, 65: 534.20, 66: 1802.52, 67: 2868.85, 68: 2464.08, 69: 214.85, 70: 3873.84, 71: 1023.14, 72: 2756.81, 73: 1211.14, 74: 755.79, 75: 3845.84, 76: 2189.99, 77: 3699.19, 78: 315.63, 79: 1301.41, 80: 2476.31, 81: 3370.58, 82: 2933.65, 83: 714.58, 84: 2990.09, 85: 2656.63, 86: 2499.23, 87: 58.14, 88: 1495.20, 89: 640.10, 90: 1696.62, 91: 1075.38, 92: 1670.48, 93: 160.70, 94: 3611.10, 95: 3633.06, 96: 804.56, 97: 1780.90, 98: 950.96, 99: 3889.77},
16: {0: 1017.53, 1: 2455.10, 2: 2292.55, 3: 1789.49, 4: 2946.54, 5: 1012.35, 6: 1557.71, 7: 1421.95, 8: 1568.60, 9: 794.77, 10: 115.26, 11: 1514.44, 12: 3133.57, 13: 2483.58, 14: 13.04, 15: 1552.22, 17: 1209.45, 18: 1417.27, 19: 1368.89, 20: 392.62, 21: 1606.45, 22: 619.32, 23: 1094.66, 24: 1672.00, 25: 2192.99, 26: 1449.06, 27: 1132.69, 28: 2196.18, 29: 2444.89, 30: 1885.13, 31: 289.18, 32: 3202.12, 33: 1897.61, 34: 1339.20, 35: 818.91, 36: 2965.13, 37: 1031.30, 38: 2511.11, 39: 2152.90, 40: 2728.56, 41: 1668.38, 42: 2216.04, 43: 2342.15, 44: 404.01, 45: 2159.94, 46: 599.47, 47: 2713.67, 48: 1034.26, 49: 2315.97, 50: 1462.76, 51: 2812.64, 52: 1411.67, 53: 2220.57, 54: 1741.41, 55: 1701.37, 56: 1470.14, 57: 1294.60, 58: 358.24, 59: 915.76, 60: 1513.50, 61: 1064.72, 62: 901.89, 63: 2129.80, 64: 1910.08, 65: 1887.35, 66: 1432.33, 67: 2102.09, 68: 1899.30, 69: 1759.04, 70: 2690.88, 71: 529.92, 72: 2140.14, 73: 354.15, 74: 1383.58, 75: 3235.83, 76: 999.03, 77: 2791.77, 78: 1240.62, 79: 1846.85, 80: 1719.08, 81: 2830.54, 82: 1760.34, 83: 839.03, 84: 2157.86, 85: 1367.93, 86: 1504.49, 87: 1494.30, 88: 1822.46, 89: 1044.18, 90: 489.80, 91: 1240.89, 92: 1088.02, 93: 1545.52, 94: 3067.61, 95: 2737.26, 96: 1620.09, 97: 576.64, 98: 1044.89, 99: 2743.57},
17: {0: 1167.47, 1: 2836.89, 2: 3286.38, 3: 928.90, 4: 3681.03, 5: 781.95, 6: 2480.83, 7: 1257.13, 8: 2471.47, 9: 493.38, 10: 1161.23, 11: 2518.00, 12: 3720.49, 13: 3443.49, 14: 1219.45, 15: 399.41, 16: 1209.45, 18: 671.10, 19: 2364.54, 20: 817.66, 21: 431.61, 22: 1624.77, 23: 181.34, 24: 2340.54, 25: 1218.25, 26: 2495.54, 27: 1567.84, 28: 3142.61, 29: 3271.96, 30: 1548.57, 31: 1269.54, 32: 3808.05, 33: 2847.60, 34: 2432.79, 35: 478.98, 36: 3679.44, 37: 276.85, 38: 3254.09, 39: 2500.42, 40: 3737.01, 41: 1438.28, 42: 3249.02, 43: 2831.83, 44: 1490.72, 45: 3147.30, 46: 1148.16, 47: 3622.84, 48: 742.85, 49: 2873.96, 50: 2230.73, 51: 3615.92, 52: 433.13, 53: 2521.97, 54: 2719.96, 55: 1198.41, 56: 2387.99, 57: 1863.09, 58: 879.93, 59: 1970.06, 60: 2181.48, 61: 2116.21, 62: 883.24, 63: 2517.29, 64: 977.88, 65: 899.07, 66: 1754.43, 67: 2775.40, 68: 2407.89, 69: 612.08, 70: 3684.53, 71: 697.25, 72: 2698.60, 73: 857.32, 74: 853.80, 75: 3814.70, 76: 1962.94, 77: 3586.25, 78: 229.65, 79: 1468.70, 80: 2371.36, 81: 3348.78, 82: 2733.48, 83: 386.80, 84: 2882.94, 85: 2418.08, 86: 2334.45, 87: 346.17, 88: 1615.11, 89: 535.09, 90: 1433.20, 91: 1076.75, 92: 1552.28, 93: 341.92, 94: 3593.24, 95: 3522.24, 96: 996.83, 97: 1525.91, 98: 572.55, 99: 3711.65},
18: {0: 813.71, 1: 2310.22, 2: 3065.98, 3: 372.34, 4: 3277.01, 5: 473.70, 6: 2259.77, 7: 691.03, 8: 2237.66, 9: 664.25, 10: 1323.96, 11: 2352.09, 12: 3243.40, 13: 3190.11, 14: 1422.14, 15: 523.32, 16: 1417.27, 17: 671.10, 19: 2206.18, 20: 1074.81, 21: 587.55, 22: 1583.62, 23: 819.50, 24: 1981.89, 25: 780.19, 26: 2366.35, 27: 1218.76, 28: 2893.12, 29: 2937.20, 30: 889.14, 31: 1331.91, 32: 3336.85, 33: 2617.58, 34: 2351.40, 35: 1007.93, 36: 3264.86, 37: 896.42, 38: 2871.82, 39: 1979.83, 40: 3511.02, 41: 813.26, 42: 3062.93, 43: 2349.15, 44: 1535.82, 45: 2928.37, 46: 1046.21, 47: 3326.14, 48: 431.80, 49: 2419.20, 50: 1939.26, 51: 3252.62, 52: 279.87, 53: 1982.40, 54: 2519.55, 55: 530.08, 56: 2172.08, 57: 1517.58, 58: 1205.72, 59: 1902.23, 60: 1840.56, 61: 2027.76, 62: 630.60, 63: 2011.51, 64: 497.11, 65: 497.12, 66: 1306.08, 67: 2382.97, 68: 1963.40, 69: 592.00, 70: 3448.19, 71: 923.64, 72: 2254.93, 73: 1138.32, 74: 234.08, 75: 3331.30, 76: 1830.41, 77: 3218.94, 78: 441.49, 79: 806.11, 80: 2001.03, 81: 2854.63, 82: 2528.07, 83: 711.00, 84: 2510.97, 85: 2298.44, 86: 2067.94, 87: 506.74, 88: 979.61, 89: 375.59, 90: 1408.79, 91: 576.94, 92: 1223.06, 93: 667.47, 94: 3093.82, 95: 3151.94, 96: 325.86, 97: 1475.71, 98: 1209.69, 99: 3454.29},
19: {0: 1404.84, 1: 1603.24, 2: 934.01, 3: 2508.21, 4: 1655.73, 5: 1743.56, 6: 242.20, 7: 1728.84, 8: 281.31, 9: 1871.21, 10: 1334.15, 11: 153.58, 12: 1950.94, 13: 1116.20, 14: 1355.95, 15: 2584.53, 16: 1368.89, 17: 2364.54, 18: 2206.18, 20: 1648.17, 21: 2652.60, 22: 769.80, 23: 2316.19, 24: 730.00, 25: 2911.96, 26: 180.57, 27: 1058.19, 28: 827.37, 29: 1116.94, 30: 2085.82, 31: 1153.17, 32: 1997.45, 33: 530.08, 34: 293.02, 35: 2113.01, 36: 1688.04, 37: 2283.82, 38: 1243.56, 39: 1440.40, 40: 1380.63, 41: 1875.85, 42: 884.51, 43: 1386.55, 44: 967.34, 45: 797.56, 46: 1222.44, 47: 1346.47, 48: 1789.66, 49: 1282.08, 50: 501.88, 51: 1483.34, 52: 2358.86, 53: 1542.05, 54: 372.93, 55: 2148.63, 56: 203.75, 57: 844.08, 58: 1694.55, 59: 455.93, 60: 686.72, 61: 315.84, 62: 1588.68, 63: 1374.05, 64: 2654.98, 65: 2689.69, 66: 1188.45, 67: 976.57, 68: 1077.00, 69: 2746.32, 70: 1335.00, 71: 1708.01, 72: 1154.25, 73: 1649.46, 74: 2032.81, 75: 2052.31, 76: 402.06, 77: 1468.42, 78: 2285.95, 79: 2106.70, 80: 775.34, 81: 1748.05, 82: 391.49, 83: 1986.58, 84: 956.06, 85: 155.43, 86: 390.13, 87: 2534.78, 88: 1921.82, 89: 1946.11, 90: 951.33, 91: 1694.17, 92: 1033.16, 93: 2645.30, 94: 1949.05, 95: 1422.26, 96: 2211.03, 97: 852.68, 98: 2381.77, 99: 1379.06},
20: {0: 885.11, 1: 2501.84, 2: 2582.16, 3: 1444.92, 4: 3135.40, 5: 737.13, 6: 1806.20, 7: 1228.33, 8: 1807.97, 9: 420.39, 10: 348.93, 11: 1800.00, 12: 3267.83, 13: 2760.06, 14: 402.23, 15: 1162.01, 16: 392.62, 17: 817.66, 18: 1074.81, 19: 1648.17, 21: 1215.02, 22: 879.07, 23: 711.42, 24: 1810.48, 25: 1836.16, 26: 1754.46, 27: 1138.57, 28: 2464.29, 29: 2665.35, 30: 1671.50, 31: 496.79, 32: 3344.29, 33: 2163.85, 34: 1666.85, 35: 465.97, 36: 3146.30, 37: 657.17, 38: 2698.19, 39: 2179.06, 40: 3027.31, 41: 1473.91, 42: 2522.35, 43: 2426.90, 44: 705.09, 45: 2445.60, 46: 571.36, 47: 2970.66, 48: 745.07, 49: 2426.50, 50: 1637.74, 51: 3027.41, 52: 1034.57, 53: 2231.70, 54: 2018.51, 55: 1432.22, 56: 1714.30, 57: 1372.41, 58: 150.86, 59: 1215.63, 60: 1645.99, 61: 1366.43, 62: 674.44, 63: 2170.25, 64: 1555.77, 65: 1522.78, 66: 1415.73, 67: 2253.98, 68: 1979.45, 69: 1370.75, 70: 2983.12, 71: 151.71, 72: 2246.86, 73: 66.01, 74: 1083.66, 75: 3368.21, 76: 1252.62, 77: 3002.80, 78: 853.00, 79: 1619.41, 80: 1852.20, 81: 2935.03, 82: 2035.22, 83: 447.60, 84: 2332.05, 85: 1674.06, 86: 1708.91, 87: 1103.96, 88: 1644.19, 89: 700.16, 90: 698.72, 91: 1027.19, 92: 1102.43, 93: 1152.91, 94: 3178.14, 95: 2943.93, 96: 1316.80, 97: 798.11, 98: 738.24, 99: 3025.33},
21: {0: 1329.53, 1: 2896.75, 2: 3551.54, 3: 660.87, 4: 3839.75, 5: 937.24, 6: 2740.23, 7: 1276.92, 8: 2724.37, 9: 829.61, 10: 1544.61, 11: 2804.09, 12: 3824.39, 13: 3692.41, 14: 1615.36, 15: 70.18, 16: 1606.45, 17: 431.61, 18: 587.55, 19: 2652.60, 20: 1215.02, 22: 1950.85, 23: 604.82, 24: 2522.57, 25: 842.33, 26: 2797.79, 27: 1745.16, 28: 3392.11, 29: 3474.10, 30: 1442.51, 31: 1624.28, 32: 3916.86, 33: 3105.36, 34: 2754.44, 35: 910.53, 36: 3830.77, 37: 700.26, 38: 3426.19, 39: 2565.30, 40: 4001.32, 41: 1394.93, 42: 3530.72, 43: 2929.52, 44: 1845.36, 45: 3412.47, 46: 1434.13, 47: 3848.71, 48: 890.41, 49: 2993.60, 50: 2450.78, 51: 3801.57, 52: 324.58, 53: 2569.52, 54: 2991.47, 55: 1075.60, 56: 2649.06, 57: 2047.76, 58: 1295.64, 59: 2291.72, 60: 2372.75, 61: 2431.54, 62: 1079.75, 63: 2595.04, 64: 652.33, 65: 549.18, 66: 1871.74, 67: 2938.72, 68: 2533.17, 69: 186.13, 70: 3943.35, 71: 1078.69, 72: 2825.86, 73: 1262.40, 74: 820.95, 75: 3913.52, 76: 2257.49, 77: 3769.23, 78: 376.97, 79: 1355.98, 80: 2546.38, 81: 3437.96, 82: 3002.66, 83: 767.52, 84: 3060.13, 85: 2723.72, 86: 2569.07, 87: 118.60, 88: 1554.38, 89: 709.19, 90: 1761.14, 91: 1144.01, 92: 1740.65, 93: 133.65, 94: 3678.20, 95: 3703.08, 96: 859.62, 97: 1846.20, 98: 963.97, 99: 3959.55},
22: {0: 882.22, 1: 1921.43, 2: 1703.47, 3: 1928.37, 4: 2328.64, 5: 1110.79, 6: 942.25, 7: 1295.39, 8: 950.85, 9: 1136.55, 10: 569.01, 11: 921.09, 12: 2531.76, 13: 1884.43, 14: 606.92, 15: 1885.91, 16: 619.32, 17: 1624.77, 18: 1583.62, 19: 769.80, 20: 879.07, 21: 1950.85, 23: 1560.37, 24: 1083.29, 25: 2345.12, 26: 878.43, 27: 749.10, 28: 1591.32, 29: 1825.87, 30: 1739.57, 31: 383.38, 32: 2596.65, 33: 1291.04, 34: 808.28, 35: 1344.63, 36: 2348.49, 37: 1521.93, 38: 1894.12, 39: 1647.98, 40: 2148.24, 41: 1510.63, 42: 1644.31, 43: 1778.35, 44: 220.81, 45: 1567.35, 46: 537.63, 47: 2104.03, 48: 1151.82, 49: 1733.90, 50: 856.98, 51: 2193.43, 52: 1683.08, 53: 1729.37, 54: 1141.47, 55: 1676.77, 56: 853.15, 57: 785.49, 58: 926.88, 59: 345.32, 60: 934.14, 61: 493.04, 62: 955.59, 63: 1610.98, 64: 2069.13, 65: 2080.69, 66: 1029.89, 67: 1498.81, 68: 1350.30, 69: 2066.96, 70: 2104.34, 71: 947.27, 72: 1563.50, 73: 879.72, 74: 1458.53, 75: 2634.44, 76: 382.24, 77: 2172.46, 78: 1575.31, 79: 1729.44, 80: 1132.86, 81: 2246.67, 82: 1158.86, 83: 1239.90, 84: 1545.29, 85: 798.91, 86: 887.39, 87: 1832.30, 88: 1621.67, 89: 1266.82, 90: 191.64, 91: 1180.86, 92: 702.28, 93: 1926.24, 94: 2478.33, 95: 2117.98, 96: 1674.13, 97: 107.94, 98: 1612.04, 99: 2148.45},
23: {0: 1206.07, 1: 2894.56, 2: 3245.72, 3: 1101.31, 4: 3691.82, 5: 843.28, 6: 2447.79, 7: 1350.99, 8: 2442.03, 9: 473.63, 10: 1060.32, 11: 2469.70, 12: 3755.49, 13: 3410.87, 14: 1105.60, 15: 578.07, 16: 1094.66, 17: 181.34, 18: 819.50, 19: 2316.19, 20: 711.42, 21: 604.82, 22: 1560.37, 24: 2348.33, 25: 1399.30, 26: 2437.88, 27: 1588.46, 28: 3110.98, 29: 3263.86, 30: 1676.66, 31: 1190.53, 32: 3840.61, 33: 2813.07, 34: 2363.64, 35: 313.40, 36: 3693.63, 37: 96.05, 38: 3260.49, 39: 2558.45, 40: 3695.14, 41: 1549.19, 42: 3199.38, 43: 2873.87, 44: 1408.02, 45: 3107.23, 46: 1120.21, 47: 3601.44, 48: 810.63, 49: 2906.27, 50: 2220.68, 51: 3614.33, 52: 603.68, 53: 2586.75, 54: 2678.63, 55: 1337.22, 56: 2354.74, 57: 1875.11, 58: 748.95, 59: 1904.53, 60: 2186.36, 61: 2053.38, 62: 917.99, 63: 2569.93, 64: 1156.22, 65: 1079.50, 66: 1799.09, 67: 2788.63, 68: 2441.20, 69: 788.38, 70: 3645.79, 71: 613.94, 72: 2728.73, 73: 740.77, 74: 979.40, 75: 3851.53, 76: 1914.37, 77: 3586.05, 78: 386.26, 79: 1599.88, 80: 2382.22, 81: 3391.59, 82: 2693.36, 83: 338.92, 84: 2888.97, 85: 2358.90, 86: 2315.88, 87: 526.27, 88: 1728.53, 89: 612.41, 90: 1370.61, 91: 1159.04, 92: 1567.83, 93: 500.99, 94: 3636.77, 95: 3523.32, 96: 1144.02, 97: 1466.90, 98: 397.34, 99: 3678.59},
24: {0: 1194.02, 1: 893.07, 2: 1183.94, 3: 2203.69, 4: 1343.50, 5: 1590.11, 6: 555.79, 7: 1355.06, 8: 506.32, 9: 1874.71, 10: 1592.27, 11: 767.61, 12: 1464.18, 13: 1254.77, 14: 1661.00, 15: 2452.44, 16: 1672.00, 17: 2340.54, 18: 1981.89, 19: 730.00, 20: 1810.48, 21: 2522.57, 22: 1083.29, 23: 2348.33, 25: 2567.27, 26: 885.13, 27: 779.16, 28: 980.21, 29: 955.30, 30: 1587.56, 31: 1390.69, 32: 1536.70, 33: 774.50, 34: 1023.00, 35: 2231.70, 36: 1346.74, 37: 2345.56, 38: 913.59, 39: 710.72, 40: 1594.48, 41: 1417.24, 42: 1242.41, 43: 708.47, 44: 1299.87, 45: 1062.26, 46: 1254.13, 47: 1352.18, 48: 1636.02, 49: 650.76, 50: 254.23, 51: 1280.21, 52: 2201.33, 53: 812.86, 54: 771.11, 55: 1757.08, 56: 535.73, 57: 478.28, 58: 1909.41, 59: 963.76, 60: 164.71, 61: 909.48, 62: 1462.85, 63: 644.15, 64: 2347.93, 65: 2410.17, 66: 706.21, 67: 444.53, 68: 347.00, 69: 2569.44, 70: 1521.87, 71: 1809.03, 72: 483.80, 73: 1838.05, 74: 1765.36, 75: 1565.92, 76: 780.86, 77: 1248.88, 78: 2198.37, 79: 1632.34, 80: 51.48, 81: 1163.52, 82: 764.23, 83: 2011.27, 84: 542.44, 85: 884.30, 86: 340.21, 87: 2413.33, 88: 1403.70, 89: 1833.70, 90: 1182.21, 91: 1407.61, 92: 789.52, 93: 2552.33, 94: 1397.06, 95: 1183.73, 96: 1881.41, 97: 1098.60, 98: 2528.22, 99: 1505.96},
25: {0: 1510.64, 1: 2670.97, 2: 3716.83, 3: 417.06, 4: 3765.14, 5: 1239.00, 6: 2931.32, 7: 1216.00, 8: 2902.40, 9: 1416.40, 10: 2102.43, 11: 3050.37, 12: 3639.89, 13: 3816.03, 14: 2198.41, 15: 839.80, 16: 2192.99, 17: 1218.25, 18: 780.19, 19: 2911.96, 20: 1836.16, 21: 842.33, 22: 2345.12, 23: 1399.30, 24: 2567.27, 26: 3081.17, 27: 1869.37, 28: 3528.61, 29: 3504.57, 30: 1078.63, 31: 2110.96, 32: 3738.78, 33: 3273.02, 34: 3085.30, 35: 1670.49, 36: 3741.29, 37: 1493.83, 38: 3395.85, 39: 2373.49, 40: 4149.78, 41: 1173.27, 42: 3734.70, 43: 2775.70, 44: 2311.68, 45: 3583.14, 46: 1811.78, 47: 3915.97, 48: 1201.82, 49: 2879.38, 50: 2579.09, 51: 3784.33, 52: 825.11, 53: 2343.63, 54: 3195.29, 55: 812.50, 56: 2849.48, 57: 2144.39, 58: 1956.18, 59: 2649.73, 60: 2448.95, 61: 2765.92, 62: 1390.95, 63: 2425.98, 64: 283.34, 65: 323.20, 66: 1861.10, 67: 2915.95, 68: 2463.06, 69: 669.16, 70: 4080.99, 71: 1684.60, 72: 2737.59, 73: 1896.99, 74: 890.02, 75: 3715.82, 76: 2558.13, 77: 3747.58, 78: 1043.35, 79: 1002.88, 80: 2574.95, 81: 3240.19, 82: 3200.73, 83: 1427.27, 84: 3058.68, 85: 3018.81, 86: 2718.66, 87: 882.16, 88: 1255.83, 89: 1148.95, 90: 2177.37, 91: 1217.87, 92: 1886.56, 93: 975.55, 94: 3462.05, 95: 3679.44, 96: 702.16, 97: 2237.87, 98: 1786.11, 99: 4071.99},
26: {0: 1571.56, 1: 1737.34, 2: 846.13, 3: 2675.06, 4: 1675.52, 5: 1899.80, 6: 345.68, 7: 1904.64, 8: 394.83, 9: 2003.40, 10: 1427.02, 11: 136.49, 12: 2008.76, 13: 1046.56, 14: 1436.02, 15: 2730.46, 16: 1449.06, 17: 2495.54, 18: 2366.35, 19: 180.57, 20: 1754.46, 21: 2797.79, 22: 878.43, 23: 2437.88, 24: 885.13, 25: 3081.17, 27: 1234.69, 28: 778.05, 29: 1124.94, 30: 2265.78, 31: 1257.75, 32: 2047.42, 33: 503.84, 34: 178.22, 35: 2220.42, 36: 1714.16, 37: 2400.36, 38: 1284.37, 39: 1594.81, 40: 1279.63, 41: 2055.01, 42: 769.02, 43: 1510.20, 44: 1057.01, 45: 717.68, 46: 1363.85, 47: 1299.02, 48: 1945.38, 49: 1394.11, 50: 671.25, 51: 1482.09, 52: 2509.82, 53: 1697.46, 54: 335.41, 55: 2323.76, 56: 349.59, 57: 1024.64, 58: 1788.12, 59: 539.33, 60: 857.42, 61: 388.29, 62: 1743.70, 63: 1525.66, 64: 2821.49, 65: 2853.28, 66: 1369.00, 67: 1079.38, 68: 1230.49, 69: 2897.43, 70: 1242.33, 71: 1825.48, 72: 1280.44, 73: 1749.99, 74: 2198.62, 75: 2108.31, 76: 540.77, 77: 1471.81, 78: 2427.70, 79: 2285.96, 80: 927.37, 81: 1836.78, 82: 358.45, 83: 2113.52, 84: 1035.77, 85: 81.15, 86: 546.80, 87: 2679.52, 88: 2102.26, 89: 2094.78, 90: 1067.28, 91: 1864.20, 92: 1208.20, 93: 2785.06, 94: 2025.08, 95: 1432.25, 96: 2381.41, 97: 971.39, 98: 2480.05, 99: 1299.72},
27: {0: 415.64, 1: 1363.37, 2: 1855.78, 3: 1478.05, 4: 2113.83, 5: 811.01, 6: 1062.02, 7: 670.86, 8: 1033.99, 9: 1117.59, 10: 1026.08, 11: 1188.35, 12: 2170.08, 13: 1972.46, 14: 1125.43, 15: 1674.99, 16: 1132.69, 17: 1567.84, 18: 1218.76, 19: 1058.19, 20: 1138.57, 21: 1745.16, 22: 749.10, 23: 1588.46, 24: 779.16, 25: 1869.37, 26: 1234.69, 28: 1676.97, 29: 1728.96, 30: 1049.92, 31: 851.12, 32: 2253.62, 33: 1408.71, 34: 1272.53, 35: 1508.47, 36: 2111.61, 37: 1595.18, 38: 1689.89, 39: 1041.67, 40: 2296.86, 41: 829.40, 42: 1866.15, 43: 1300.96, 44: 885.27, 45: 1719.87, 46: 571.35, 47: 2109.26, 48: 857.03, 49: 1320.48, 50: 721.67, 51: 2059.37, 52: 1425.60, 53: 1099.14, 54: 1325.93, 55: 1091.15, 56: 980.40, 57: 302.60, 58: 1265.10, 59: 911.41, 60: 627.62, 61: 981.90, 62: 685.93, 63: 1031.72, 64: 1625.06, 65: 1673.49, 66: 300.85, 67: 1208.02, 68: 858.52, 69: 1799.20, 70: 2232.26, 71: 1099.24, 72: 1141.86, 73: 1181.68, 74: 1015.33, 75: 2267.42, 76: 760.49, 77: 2027.98, 78: 1419.61, 79: 1060.06, 80: 806.31, 81: 1816.15, 82: 1331.54, 83: 1256.96, 84: 1320.25, 85: 1181.79, 86: 854.78, 87: 1634.96, 88: 905.28, 89: 1054.88, 90: 709.66, 91: 659.70, 92: 47.68, 93: 1773.18, 94: 2061.21, 95: 1962.63, 96: 1167.59, 97: 683.70, 98: 1808.18, 99: 2235.90},
28: {0: 2080.50, 1: 1500.97, 2: 214.02, 3: 3149.96, 4: 972.75, 5: 2458.47, 6: 663.19, 7: 2312.65, 8: 671.25, 9: 2651.65, 10: 2158.99, 11: 685.81, 12: 1397.14, 13: 301.04, 14: 2183.25, 15: 3322.44, 16: 2196.18, 17: 3142.61, 18: 2893.12, 19: 827.37, 20: 2464.29, 21: 3392.11, 22: 1591.32, 23: 3110.98, 24: 980.21, 25: 3528.61, 26: 778.05, 27: 1676.97, 29: 440.52, 30: 2567.75, 31: 1973.45, 32: 1409.07, 33: 300.50, 34: 937.85, 35: 2926.06, 36: 1025.22, 37: 3086.04, 38: 683.63, 39: 1517.11, 40: 621.34, 41: 2394.00, 42: 337.92, 43: 1244.44, 44: 1793.99, 45: 148.41, 46: 1995.24, 47: 522.02, 48: 2505.55, 49: 1086.10, 50: 955.42, 51: 742.65, 52: 3082.37, 53: 1614.31, 54: 456.18, 55: 2724.46, 56: 756.24, 57: 1386.96, 58: 2518.16, 59: 1282.53, 60: 1080.95, 61: 1137.62, 62: 2312.42, 63: 1436.67, 64: 3296.29, 65: 3349.19, 66: 1676.25, 67: 808.01, 68: 1210.75, 69: 3464.42, 70: 555.30, 71: 2512.74, 72: 1074.73, 73: 2469.58, 74: 2692.19, 75: 1485.90, 76: 1212.05, 77: 742.05, 78: 3039.50, 79: 2611.67, 80: 986.22, 81: 1355.38, 82: 436.32, 83: 2775.34, 84: 670.23, 85: 854.16, 86: 825.68, 87: 3276.92, 88: 2383.80, 89: 2684.01, 90: 1765.64, 91: 2335.40, 92: 1670.19, 93: 3400.61, 94: 1477.35, 95: 719.61, 96: 2832.83, 97: 1666.23, 98: 3201.24, 99: 569.17},
29: {0: 2144.57, 1: 1190.74, 2: 592.08, 3: 3152.30, 4: 553.17, 5: 2538.56, 6: 894.88, 7: 2301.67, 8: 878.08, 9: 2792.86, 10: 2390.68, 11: 1005.20, 12: 956.62, 13: 482.37, 14: 2432.38, 15: 3403.92, 16: 2444.89, 17: 3271.96, 18: 2937.20, 19: 1116.94, 20: 2665.35, 21: 3474.10, 22: 1825.87, 23: 3263.86, 24: 955.30, 25: 3504.57, 26: 1124.94, 27: 1728.96, 28: 440.52, 30: 2482.34, 31: 2194.18, 32: 970.16, 33: 625.16, 34: 1299.58, 35: 3113.60, 36: 597.82, 37: 3251.10, 38: 261.24, 39: 1291.18, 40: 793.80, 41: 2337.78, 42: 754.54, 43: 944.26, 44: 2042.11, 45: 585.75, 46: 2146.54, 47: 427.13, 48: 2584.98, 49: 783.60, 50: 1043.20, 51: 368.64, 52: 3154.24, 53: 1375.91, 54: 790.87, 55: 2692.06, 56: 977.58, 57: 1426.37, 58: 2739.56, 59: 1560.67, 60: 1101.36, 61: 1430.83, 62: 2405.15, 63: 1213.41, 64: 3295.12, 65: 3361.02, 66: 1650.23, 67: 601.84, 68: 1061.70, 69: 3524.35, 70: 711.14, 71: 2691.15, 72: 838.50, 73: 2680.53, 74: 2720.01, 75: 1045.78, 76: 1446.57, 77: 351.57, 78: 3142.15, 79: 2538.39, 80: 938.04, 81: 941.76, 82: 767.57, 83: 2924.95, 84: 450.87, 85: 1189.93, 86: 956.66, 87: 3363.45, 88: 2294.63, 89: 2778.52, 90: 1979.45, 91: 2362.63, 92: 1734.41, 93: 3499.21, 94: 1042.93, 95: 307.42, 96: 2828.69, 97: 1882.18, 98: 3401.48, 99: 643.69},
30: {0: 886.71, 1: 1592.38, 2: 2769.95, 3: 844.35, 4: 2700.64, 5: 944.03, 6: 2040.95, 7: 464.97, 8: 2002.81, 9: 1366.02, 10: 1771.01, 11: 2201.49, 12: 2561.28, 13: 2838.51, 14: 1884.02, 15: 1387.55, 16: 1885.13, 17: 1548.57, 18: 889.14, 19: 2085.82, 20: 1671.50, 21: 1442.51, 22: 1739.57, 23: 1676.66, 24: 1587.56, 25: 1078.63, 26: 2265.78, 27: 1049.92, 28: 2567.75, 29: 2482.34, 31: 1675.44, 32: 2660.23, 33: 2344.64, 34: 2318.39, 35: 1793.80, 36: 2673.49, 37: 1739.56, 38: 2349.33, 39: 1297.85, 40: 3180.21, 41: 229.02, 42: 2816.00, 43: 1702.52, 44: 1806.26, 45: 2644.60, 46: 1314.16, 47: 2904.13, 48: 948.87, 49: 1813.65, 50: 1661.91, 51: 2737.27, 52: 1165.37, 53: 1265.17, 54: 2299.88, 55: 366.96, 56: 1973.10, 57: 1246.47, 58: 1822.14, 59: 1955.69, 60: 1500.71, 61: 2031.79, 62: 1000.98, 63: 1353.63, 64: 951.13, 65: 1052.91, 66: 910.38, 67: 1882.71, 68: 1422.65, 69: 1380.56, 70: 3106.05, 71: 1546.43, 72: 1682.10, 73: 1736.07, 74: 697.40, 75: 2637.32, 76: 1810.37, 77: 2699.37, 78: 1321.00, 79: 87.21, 80: 1584.06, 81: 2161.56, 82: 2300.21, 83: 1471.85, 84: 2031.61, 85: 2219.83, 86: 1808.18, 87: 1383.13, 88: 187.77, 89: 1092.47, 90: 1632.26, 91: 648.68, 92: 1086.58, 93: 1542.80, 94: 2384.07, 95: 2631.36, 96: 583.06, 97: 1648.81, 98: 2044.10, 99: 3081.99},
31: {0: 790.23, 1: 2165.92, 2: 2086.78, 3: 1696.56, 4: 2683.12, 5: 880.78, 6: 1320.12, 7: 1210.89, 8: 1325.47, 9: 795.62, 10: 201.85, 11: 1304.35, 12: 2854.36, 13: 2267.40, 14: 280.03, 15: 1562.87, 16: 289.18, 17: 1269.54, 18: 1331.91, 19: 1153.17, 20: 496.79, 21: 1624.28, 22: 383.38, 23: 1190.53, 24: 1390.69, 25: 2110.96, 26: 1257.75, 27: 851.12, 28: 1973.45, 29: 2194.18, 30: 1675.44, 32: 2924.79, 33: 1673.00, 34: 1174.00, 35: 962.75, 36: 2698.94, 37: 1146.34, 38: 2246.26, 39: 1864.40, 40: 2531.04, 41: 1451.52, 42: 2025.57, 43: 2054.51, 44: 221.84, 45: 1950.72, 46: 361.33, 47: 2484.07, 48: 913.09, 49: 2031.29, 50: 1190.12, 51: 2559.87, 52: 1383.37, 53: 1933.05, 54: 1524.69, 55: 1534.09, 56: 1229.48, 57: 1005.45, 58: 546.88, 59: 719.24, 60: 1230.39, 61: 869.87, 62: 743.27, 63: 1840.75, 64: 1828.60, 65: 1822.98, 66: 1151.84, 67: 1825.26, 68: 1610.85, 69: 1756.40, 70: 2487.61, 71: 577.29, 72: 1854.62, 73: 496.46, 74: 1252.95, 75: 2956.32, 76: 761.84, 77: 2537.25, 78: 1247.60, 79: 1646.48, 80: 1436.86, 81: 2545.64, 82: 1541.91, 83: 882.78, 84: 1887.69, 85: 1177.43, 86: 1243.22, 87: 1506.93, 88: 1594.01, 89: 979.46, 90: 215.24, 91: 1049.12, 92: 805.44, 93: 1585.78, 94: 2783.86, 95: 2480.71, 96: 1484.86, 97: 312.08, 98: 1228.74, 99: 2531.71},
32: {0: 2640.85, 1: 1069.32, 2: 1532.92, 3: 3458.92, 4: 474.66, 5: 3029.29, 6: 1756.41, 7: 2648.02, 8: 1723.49, 9: 3371.10, 10: 3126.63, 11: 1916.31, 12: 100.66, 13: 1360.58, 14: 3190.70, 15: 3848.77, 16: 3202.12, 17: 3808.05, 18: 3336.85, 19: 1997.45, 20: 3344.29, 21: 3916.86, 22: 2596.65, 23: 3840.61, 24: 1536.70, 25: 3738.78, 26: 2047.42, 27: 2253.62, 28: 1409.07, 29: 970.16, 30: 2660.23, 31: 2924.79, 33: 1571.78, 34: 2225.61, 35: 3753.26, 36: 407.77, 37: 3848.80, 38: 764.20, 39: 1371.71, 40: 1551.57, 41: 2591.49, 42: 1703.00, 43: 987.70, 44: 2817.15, 45: 1551.04, 46: 2780.89, 47: 1126.68, 48: 3071.29, 49: 934.56, 50: 1740.64, 51: 733.38, 52: 3593.20, 53: 1395.16, 54: 1726.82, 55: 2960.98, 56: 1818.68, 57: 1979.99, 58: 3445.90, 59: 2398.35, 60: 1700.08, 61: 2291.74, 62: 2927.18, 63: 1329.56, 64: 3586.74, 65: 3675.02, 66: 2056.46, 67: 1100.04, 68: 1400.45, 69: 3923.72, 70: 1481.00, 71: 3334.12, 72: 1111.96, 73: 3373.68, 74: 3103.65, 75: 92.20, 76: 2246.45, 77: 712.83, 78: 3637.16, 79: 2736.55, 80: 1493.08, 81: 499.41, 82: 1703.78, 83: 3510.57, 84: 1058.42, 85: 2101.17, 86: 1719.82, 87: 3819.33, 88: 2484.68, 89: 3278.59, 90: 2713.60, 91: 2774.04, 92: 2277.58, 93: 3971.39, 94: 311.01, 95: 707.64, 96: 3143.37, 97: 2625.68, 98: 4052.05, 99: 1366.50},
33: {0: 1803.87, 1: 1451.48, 2: 448.41, 3: 2886.52, 4: 1178.07, 5: 2175.13, 6: 366.90, 7: 2059.71, 8: 381.28, 9: 2355.76, 10: 1859.02, 11: 395.41, 12: 1542.65, 13: 598.02, 14: 1884.71, 15: 3035.95, 16: 1897.61, 17: 2847.60, 18: 2617.58, 19: 530.08, 20: 2163.85, 21: 3105.36, 22: 1291.04, 23: 2813.07, 24: 774.50, 25: 3273.02, 26: 503.84, 27: 1408.71, 28: 300.50, 29: 625.16, 30: 2344.64, 31: 1673.00, 32: 1571.78, 34: 675.74, 35: 2625.84, 36: 1220.25, 37: 2787.04, 38: 809.37, 39: 1401.47, 40: 896.17, 41: 2159.20, 42: 471.43, 43: 1200.28, 44: 1494.82, 45: 311.24, 46: 1699.55, 47: 816.47, 48: 2222.15, 49: 1055.88, 50: 694.72, 51: 978.46, 52: 2798.73, 53: 1503.60, 54: 168.63, 55: 2476.49, 56: 459.62, 57: 1129.32, 58: 2217.92, 59: 986.00, 60: 844.00, 61: 843.53, 62: 2026.69, 63: 1322.91, 64: 3033.44, 65: 3081.77, 66: 1439.27, 67: 741.98, 68: 1060.75, 69: 3182.71, 70: 838.63, 71: 2213.22, 72: 995.08, 73: 2169.10, 74: 2422.60, 75: 1639.01, 76: 911.55, 77: 968.92, 78: 2749.23, 79: 2382.40, 80: 793.30, 81: 1424.00, 82: 145.96, 83: 2478.19, 84: 643.61, 85: 573.89, 86: 554.59, 87: 2989.42, 88: 2164.62, 89: 2396.38, 90: 1465.17, 91: 2068.35, 92: 1397.91, 93: 3110.41, 94: 1585.32, 95: 931.43, 96: 2573.32, 97: 1365.77, 98: 2900.74, 99: 865.52},
34: {0: 1576.12, 1: 1893.08, 2: 983.25, 3: 2674.08, 4: 1851.22, 5: 1879.61, 6: 508.99, 7: 1934.30, 8: 555.71, 9: 1944.73, 10: 1329.08, 11: 312.20, 12: 2186.91, 13: 1192.56, 14: 1326.22, 15: 2688.48, 16: 1339.20, 17: 2432.79, 18: 2351.40, 19: 293.02, 20: 1666.85, 21: 2754.44, 22: 808.28, 23: 2363.64, 24: 1023.00, 25: 3085.30, 26: 178.22, 27: 1272.53, 28: 937.85, 29: 1299.58, 30: 2318.39, 31: 1174.00, 32: 2225.61, 33: 675.74, 35: 2131.08, 36: 1890.73, 37: 2320.25, 38: 1462.44, 39: 1733.28, 40: 1400.36, 41: 2101.24, 42: 884.98, 43: 1671.88, 44: 962.09, 45: 862.75, 46: 1324.24, 47: 1454.79, 48: 1923.91, 49: 1560.97, 50: 791.25, 51: 1653.81, 52: 2477.00, 53: 1834.79, 54: 508.72, 55: 2349.00, 56: 493.08, 57: 1096.69, 58: 1687.49, 59: 463.60, 60: 973.93, 61: 324.61, 62: 1722.40, 63: 1667.07, 64: 2819.24, 65: 2844.05, 66: 1440.09, 67: 1249.02, 68: 1370.00, 69: 2863.55, 70: 1370.35, 71: 1749.71, 72: 1440.49, 73: 1656.49, 74: 2196.94, 75: 2286.50, 76: 527.75, 77: 1644.66, 78: 2380.39, 79: 2332.21, 80: 1068.32, 81: 2011.20, 82: 532.02, 83: 2047.36, 84: 1211.06, 85: 141.06, 86: 683.12, 87: 2635.85, 88: 2162.40, 89: 2060.02, 90: 999.91, 91: 1875.14, 92: 1240.72, 93: 2733.48, 94: 2201.81, 95: 1606.57, 96: 2390.84, 97: 909.80, 98: 2380.32, 99: 1437.03},
35: {0: 1172.71, 1: 2857.57, 2: 3047.00, 3: 1336.01, 4: 3569.12, 5: 876.62, 6: 2265.81, 7: 1410.09, 8: 2265.54, 9: 441.19, 10: 804.48, 11: 2265.17, 12: 3672.72, 13: 3222.91, 14: 830.83, 15: 876.62, 16: 818.91, 17: 478.98, 18: 1007.93, 19: 2113.01, 20: 465.97, 21: 910.53, 22: 1344.63, 23: 313.40, 24: 2231.70, 25: 1670.49, 26: 2220.42, 27: 1508.47, 28: 2926.06, 29: 3113.60, 30: 1793.80, 31: 962.75, 32: 3753.26, 33: 2625.84, 34: 2131.08, 36: 3576.44, 37: 227.76, 38: 3133.22, 39: 2525.59, 40: 3492.76, 41: 1634.53, 42: 2988.29, 43: 2809.38, 44: 1169.00, 45: 2910.10, 46: 977.81, 47: 3429.11, 48: 858.40, 49: 2824.69, 50: 2076.90, 51: 3472.30, 52: 849.47, 53: 2565.81, 54: 2482.46, 55: 1485.16, 56: 2173.41, 57: 1773.32, 58: 461.85, 59: 1681.51, 60: 2067.20, 61: 1832.36, 62: 898.35, 63: 2527.26, 64: 1411.57, 65: 1347.41, 66: 1755.11, 67: 2676.13, 68: 2366.25, 69: 1090.48, 70: 3448.00, 71: 423.79, 72: 2645.10, 73: 475.79, 74: 1115.29, 75: 3771.41, 76: 1715.76, 77: 3446.35, 78: 627.78, 79: 1725.14, 80: 2270.21, 81: 3324.45, 82: 2498.85, 83: 322.02, 84: 2763.82, 85: 2139.99, 86: 2157.45, 87: 821.52, 88: 1814.51, 89: 702.76, 90: 1162.16, 91: 1205.60, 92: 1479.83, 93: 813.00, 94: 3569.38, 95: 3385.97, 96: 1315.77, 97: 1261.31, 98: 299.71, 99: 3488.80},
36: {0: 2518.19, 1: 1143.12, 2: 1133.38, 3: 3428.18, 4: 69.23, 5: 2914.20, 6: 1453.68, 7: 2590.03, 8: 1427.88, 9: 3220.14, 10: 2899.68, 11: 1589.22, 12: 433.18, 13: 954.51, 14: 2953.10, 15: 3761.28, 16: 2965.13, 17: 3679.44, 18: 3264.86, 19: 1688.04, 20: 3146.30, 21: 3830.77, 22: 2348.49, 23: 3693.63, 24: 1346.74, 25: 3741.29, 26: 1714.16, 27: 2111.61, 28: 1025.22, 29: 597.82, 30: 2673.49, 31: 2698.94, 32: 407.77, 33: 1220.25, 34: 1890.73, 35: 3576.44, 37: 3692.17, 38: 454.47, 39: 1381.28, 40: 1147.79, 41: 2571.74, 42: 1304.23, 43: 974.60, 44: 2568.72, 45: 1162.03, 46: 2598.70, 47: 720.00, 48: 2958.62, 49: 861.97, 50: 1510.85, 51: 325.68, 52: 3506.36, 53: 1432.87, 54: 1383.28, 55: 2940.58, 56: 1526.82, 57: 1818.78, 58: 3235.39, 59: 2114.94, 60: 1510.43, 61: 1995.29, 62: 2797.09, 63: 1320.60, 64: 3563.59, 65: 3643.08, 66: 1960.02, 67: 905.04, 68: 1302.00, 69: 3856.75, 70: 1075.60, 71: 3153.02, 72: 1012.79, 73: 3169.09, 74: 3036.08, 75: 496.33, 76: 1980.47, 77: 305.63, 78: 3525.83, 79: 2742.59, 80: 1311.48, 81: 646.30, 82: 1359.94, 83: 3357.30, 84: 814.26, 85: 1775.14, 86: 1461.12, 87: 3726.75, 88: 2489.62, 89: 3161.96, 90: 2484.21, 91: 2690.17, 92: 2128.07, 93: 3872.59, 94: 602.70, 95: 307.92, 96: 3105.84, 97: 2390.97, 98: 3871.60, 99: 962.93},
37: {0: 1224.83, 1: 2917.26, 2: 3215.88, 3: 1189.67, 4: 3688.56, 5: 878.01, 6: 2423.20, 7: 1397.24, 8: 2419.36, 9: 478.48, 10: 1004.97, 11: 2437.03, 12: 3765.05, 13: 3385.06, 14: 1042.70, 15: 674.11, 16: 1031.30, 17: 276.85, 18: 896.42, 19: 2283.82, 20: 657.17, 21: 700.26, 22: 1521.93, 23: 96.05, 24: 2345.56, 25: 1493.83, 26: 2400.36, 27: 1595.18, 28: 3086.04, 29: 3251.10, 30: 1739.56, 31: 1146.34, 32: 3848.80, 33: 2787.04, 34: 2320.25, 35: 227.76, 36: 3692.17, 38: 3255.40, 39: 2581.91, 40: 3664.23, 41: 1603.41, 42: 3164.92, 43: 2888.26, 44: 1360.45, 45: 3077.87, 46: 1104.56, 47: 3581.31, 48: 849.10, 49: 2915.42, 50: 2208.79, 51: 3604.61, 52: 692.41, 53: 2613.76, 54: 2649.24, 55: 1406.79, 56: 2330.25, 57: 1876.01, 58: 679.23, 59: 1864.17, 60: 2182.47, 61: 2014.02, 62: 938.09, 63: 2590.49, 64: 1248.34, 65: 1173.39, 66: 1817.54, 67: 2787.85, 68: 2451.74, 69: 884.17, 70: 3616.54, 71: 575.84, 72: 2737.01, 73: 679.83, 74: 1044.09, 75: 3861.99, 76: 1882.99, 77: 3577.09, 78: 471.83, 79: 1664.62, 80: 2381.00, 81: 3405.70, 82: 2664.59, 83: 338.54, 84: 2884.20, 85: 2320.75, 86: 2299.23, 87: 622.27, 88: 1783.48, 89: 659.76, 90: 1334.16, 91: 1200.65, 92: 1571.99, 93: 594.01, 94: 3651.01, 95: 3515.10, 96: 1218.66, 97: 1431.82, 98: 313.38, 99: 3652.28},
38: {0: 2102.31, 1: 961.14, 2: 850.57, 3: 3060.99, 4: 437.39, 5: 2499.15, 6: 1005.73, 7: 2212.89, 8: 977.49, 9: 2786.95, 10: 2446.65, 11: 1154.61, 12: 733.48, 13: 740.65, 14: 2499.04, 15: 3356.25, 16: 2511.11, 17: 3254.09, 18: 2871.82, 19: 1243.56, 20: 2698.19, 21: 3426.19, 22: 1894.12, 23: 3260.49, 24: 913.59, 25: 3395.85, 26: 1284.37, 27: 1689.89, 28: 683.63, 29: 261.24, 30: 2349.33, 31: 2246.26, 32: 764.20, 33: 809.37, 34: 1462.44, 35: 3133.22, 36: 454.47, 37: 3255.40, 39: 1104.62, 40: 1037.62, 41: 2222.84, 42: 1009.51, 43: 727.40, 44: 2114.30, 45: 831.78, 46: 2156.53, 47: 634.85, 48: 2544.53, 49: 573.81, 50: 1060.69, 51: 388.62, 52: 3103.00, 53: 1179.91, 54: 962.68, 55: 2585.82, 56: 1075.72, 57: 1391.23, 58: 2784.52, 59: 1663.08, 60: 1074.23, 61: 1546.56, 62: 2375.26, 63: 1031.14, 64: 3200.66, 65: 3273.38, 66: 1567.74, 67: 488.86, 68: 932.80, 69: 3463.12, 70: 955.26, 71: 2709.45, 72: 669.79, 73: 2719.47, 74: 2647.64, 75: 829.67, 76: 1526.24, 77: 351.76, 78: 3109.30, 79: 2411.32, 80: 883.63, 81: 680.92, 82: 939.67, 83: 2922.74, 84: 371.55, 85: 1340.15, 86: 1006.81, 87: 3319.09, 88: 2162.05, 89: 2744.59, 90: 2031.31, 91: 2294.88, 92: 1702.41, 93: 3460.98, 94: 794.48, 95: 283.64, 96: 2736.83, 97: 1937.54, 98: 3426.82, 99: 874.65},
39: {0: 1358.11, 1: 336.51, 2: 1730.97, 3: 2087.30, 4: 1413.02, 5: 1720.12, 6: 1258.79, 7: 1288.82, 8: 1208.59, 9: 2107.21, 10: 2052.78, 11: 1473.78, 12: 1274.76, 13: 1727.45, 14: 2144.23, 15: 2498.69, 16: 2152.90, 17: 2500.42, 18: 1979.83, 19: 1440.40, 20: 2179.06, 21: 2565.30, 22: 1647.98, 23: 2558.45, 24: 710.72, 25: 2373.49, 26: 1594.81, 27: 1041.67, 28: 1517.11, 29: 1291.18, 30: 1297.85, 31: 1864.40, 32: 1371.71, 33: 1401.47, 34: 1733.28, 35: 2525.59, 36: 1381.28, 37: 2581.91, 38: 1104.62, 40: 2065.82, 41: 1219.79, 42: 1832.99, 43: 406.74, 44: 1840.94, 45: 1636.66, 46: 1612.96, 47: 1716.09, 48: 1757.78, 49: 535.76, 50: 948.90, 51: 1480.98, 52: 2244.66, 53: 103.59, 54: 1443.40, 55: 1589.32, 56: 1245.97, 57: 867.78, 58: 2306.77, 59: 1620.90, 60: 780.44, 61: 1594.05, 62: 1643.83, 63: 80.45, 64: 2215.19, 65: 2303.39, 66: 770.73, 67: 714.66, 68: 364.32, 69: 2560.74, 70: 1984.72, 71: 2130.55, 72: 454.67, 73: 2223.21, 74: 1745.76, 75: 1357.63, 76: 1430.10, 77: 1441.52, 78: 2311.33, 79: 1370.76, 80: 667.44, 81: 878.93, 82: 1431.69, 83: 2246.48, 84: 864.43, 85: 1594.95, 86: 1050.92, 87: 2473.47, 88: 1117.66, 89: 1965.33, 90: 1686.15, 91: 1434.20, 92: 1080.53, 93: 2629.52, 94: 1114.83, 95: 1375.18, 96: 1772.88, 97: 1626.64, 98: 2823.44, 99: 1931.36},
40: {0: 2697.60, 1: 1984.45, 2: 450.79, 3: 3771.11, 4: 1079.08, 5: 3071.18, 6: 1261.30, 7: 2933.78, 8: 1277.44, 9: 3244.04, 10: 2705.46, 11: 1227.82, 12: 1580.21, 13: 343.63, 14: 2715.52, 15: 3931.97, 16: 2728.56, 17: 3737.01, 18: 3511.02, 19: 1380.63, 20: 3027.31, 21: 4001.32, 22: 2148.24, 23: 3695.14, 24: 1594.48, 25: 4149.78, 26: 1279.63, 27: 2296.86, 28: 621.34, 29: 793.80, 30: 3180.21, 31: 2531.04, 32: 1551.57, 33: 896.17, 34: 1400.36, 35: 3492.76, 36: 1147.79, 37: 3664.23, 38: 1037.62, 39: 2065.82, 41: 3011.28, 42: 515.40, 43: 1736.43, 44: 2335.62, 45: 590.03, 46: 2589.30, 47: 432.65, 48: 3118.21, 49: 1575.07, 50: 1575.86, 51: 826.20, 52: 3694.86, 53: 2155.87, 54: 1017.22, 55: 3344.79, 56: 1353.01, 57: 2008.19, 58: 3066.73, 59: 1817.09, 60: 1701.43, 61: 1666.35, 62: 2922.85, 63: 1986.25, 64: 3917.51, 65: 3969.81, 66: 2295.34, 67: 1354.14, 68: 1794.06, 69: 4078.59, 70: 82.68, 71: 3088.49, 72: 1611.42, 73: 3026.09, 74: 3312.19, 75: 1642.17, 76: 1781.32, 77: 854.42, 78: 3643.89, 79: 3226.64, 80: 1596.15, 81: 1688.35, 82: 1003.53, 83: 3363.22, 84: 1202.13, 85: 1360.78, 86: 1443.26, 87: 3885.23, 88: 2994.92, 89: 3292.25, 90: 2331.82, 91: 2955.87, 92: 2288.88, 93: 4005.00, 94: 1728.94, 95: 883.70, 96: 3454.16, 97: 2233.29, 98: 3757.60, 99: 185.07},
41: {0: 661.46, 1: 1536.06, 2: 2591.88, 3: 867.68, 4: 2593.88, 5: 764.29, 6: 1843.69, 7: 247.78, 8: 1807.64, 9: 1197.60, 10: 1553.67, 11: 1996.18, 12: 2494.47, 13: 2672.00, 14: 1666.73, 15: 1333.69, 16: 1668.38, 17: 1438.28, 18: 813.26, 19: 1875.85, 20: 1473.91, 21: 1394.93, 22: 1510.63, 23: 1549.19, 24: 1417.24, 25: 1173.27, 26: 2055.01, 27: 829.40, 28: 2394.00, 29: 2337.78, 30: 229.02, 31: 1451.52, 32: 2591.49, 33: 2159.20, 34: 2101.24, 35: 1634.53, 36: 2571.74, 37: 1603.41, 38: 2222.84, 39: 1219.79, 40: 3011.28, 42: 2629.43, 43: 1614.01, 44: 1578.39, 45: 2463.42, 46: 1090.25, 47: 2754.10, 48: 777.08, 49: 1710.04, 50: 1469.25, 51: 2611.40, 52: 1092.63, 53: 1204.76, 54: 2105.20, 55: 370.19, 56: 1772.18, 57: 1044.26, 58: 1624.76, 59: 1730.47, 60: 1316.86, 61: 1809.97, 62: 799.53, 63: 1265.19, 64: 996.11, 65: 1083.72, 66: 720.06, 67: 1744.81, 68: 1290.06, 69: 1362.22, 70: 2939.08, 71: 1356.19, 72: 1564.89, 73: 1537.35, 74: 591.49, 75: 2576.16, 76: 1588.69, 77: 2574.52, 78: 1217.72, 79: 231.14, 80: 1419.09, 81: 2097.48, 82: 2106.81, 83: 1313.68, 84: 1889.48, 85: 2006.38, 86: 1614.68, 87: 1319.89, 88: 180.42, 89: 944.77, 90: 1403.87, 91: 447.18, 92: 864.14, 93: 1480.69, 94: 2329.09, 95: 2506.37, 96: 558.35, 97: 1419.80, 98: 1899.09, 99: 2921.37},
42: {0: 2250.86, 1: 1834.55, 2: 171.03, 3: 3343.37, 4: 1244.74, 5: 2610.48, 6: 805.10, 7: 2524.47, 8: 832.33, 9: 2755.67, 10: 2196.00, 11: 731.02, 12: 1701.28, 13: 379.35, 14: 2203.00, 15: 3462.08, 16: 2216.04, 17: 3249.02, 18: 3062.93, 19: 884.51, 20: 2522.35, 21: 3530.72, 22: 1644.31, 23: 3199.38, 24: 1242.41, 25: 3734.70, 26: 769.02, 27: 1866.15, 28: 337.92, 29: 754.54, 30: 2816.00, 31: 2025.57, 32: 1703.00, 33: 471.43, 34: 884.98, 35: 2988.29, 36: 1304.23, 37: 3164.92, 38: 1009.51, 39: 1832.99, 40: 515.40, 41: 2629.43, 43: 1578.03, 44: 1826.00, 45: 198.32, 46: 2105.32, 47: 666.69, 48: 2657.20, 49: 1421.04, 50: 1161.82, 51: 994.13, 52: 3231.26, 53: 1932.41, 54: 543.39, 55: 2942.77, 56: 891.05, 57: 1594.77, 58: 2557.05, 59: 1308.22, 60: 1315.30, 61: 1157.17, 62: 2458.35, 63: 1752.90, 64: 3490.50, 65: 3534.91, 66: 1909.80, 67: 1133.75, 68: 1509.71, 69: 3617.67, 70: 489.84, 71: 2589.22, 72: 1399.66, 73: 2518.81, 74: 2875.02, 75: 1784.63, 76: 1286.42, 77: 1003.69, 78: 3167.06, 79: 2853.29, 80: 1257.83, 81: 1687.28, 82: 535.56, 83: 2870.86, 84: 1002.29, 85: 850.00, 86: 1018.46, 87: 3413.44, 88: 2636.05, 89: 2822.24, 90: 1830.77, 91: 2524.08, 92: 1851.93, 93: 3527.22, 94: 1797.39, 95: 997.09, 96: 3033.49, 97: 1733.23, 98: 3249.06, 99: 571.83},
43: {0: 1668.39, 1: 256.56, 2: 1452.25, 3: 2479.00, 4: 1007.25, 5: 2050.53, 6: 1165.01, 7: 1660.68, 8: 1116.88, 9: 2409.84, 10: 2252.61, 11: 1376.80, 12: 894.91, 13: 1410.12, 14: 2332.03, 15: 2861.57, 16: 2342.15, 17: 2831.83, 18: 2349.15, 19: 1386.55, 20: 2426.90, 21: 2929.52, 22: 1778.35, 23: 2873.87, 24: 708.47, 25: 2775.70, 26: 1510.20, 27: 1300.96, 28: 1244.44, 29: 944.26, 30: 1702.52, 31: 2054.51, 32: 987.70, 33: 1200.28, 34: 1671.88, 35: 2809.38, 36: 974.60, 37: 2888.26, 38: 727.40, 39: 406.74, 40: 1736.43, 41: 1614.01, 42: 1578.03, 44: 1989.54, 45: 1380.02, 46: 1855.75, 47: 1357.28, 48: 2091.39, 49: 161.76, 50: 960.12, 51: 1089.09, 52: 2606.10, 53: 463.35, 54: 1285.03, 55: 1984.20, 56: 1182.81, 57: 1057.67, 58: 2542.28, 59: 1671.28, 60: 845.06, 61: 1608.43, 62: 1956.34, 63: 349.76, 64: 2609.99, 65: 2695.00, 66: 1077.43, 67: 458.31, 68: 447.68, 69: 2936.40, 70: 1653.94, 71: 2398.62, 72: 232.74, 73: 2463.76, 74: 2116.01, 75: 985.43, 76: 1489.32, 77: 1049.21, 78: 2654.97, 79: 1773.90, 80: 657.01, 81: 517.72, 82: 1268.25, 83: 2549.87, 84: 575.88, 85: 1531.00, 86: 1011.48, 87: 2832.73, 88: 1520.61, 89: 2299.34, 90: 1856.16, 91: 1787.50, 92: 1331.08, 93: 2985.61, 94: 762.92, 95: 984.59, 96: 2160.70, 97: 1781.00, 98: 3109.08, 99: 1587.15},
44: {0: 923.02, 1: 2124.21, 2: 1895.68, 3: 1895.50, 4: 2548.37, 5: 1074.24, 6: 1153.73, 7: 1347.31, 8: 1165.09, 9: 1017.21, 10: 370.01, 11: 1114.84, 12: 2751.83, 13: 2083.28, 14: 391.28, 15: 1783.54, 16: 404.01, 17: 1490.72, 18: 1535.82, 19: 967.34, 20: 705.09, 21: 1845.36, 22: 220.81, 23: 1408.02, 24: 1299.87, 25: 2311.68, 26: 1057.01, 27: 885.27, 28: 1793.99, 29: 2042.11, 30: 1806.26, 31: 221.84, 32: 2817.15, 33: 1494.82, 34: 962.09, 35: 1169.00, 36: 2568.72, 37: 1360.45, 38: 2114.30, 39: 1840.94, 40: 2335.62, 41: 1578.39, 42: 1826.00, 43: 1989.54, 45: 1761.64, 46: 515.20, 47: 2310.44, 48: 1110.01, 49: 1949.75, 50: 1077.00, 51: 2410.17, 52: 1600.02, 53: 1918.18, 54: 1340.24, 55: 1698.84, 56: 1066.42, 57: 973.33, 58: 731.18, 59: 518.56, 60: 1147.75, 61: 669.30, 62: 928.07, 63: 1808.28, 64: 2030.68, 65: 2030.15, 66: 1180.71, 67: 1718.82, 68: 1556.17, 69: 1975.54, 70: 2295.38, 71: 796.52, 72: 1777.79, 73: 694.95, 74: 1440.70, 75: 2854.46, 76: 595.63, 77: 2389.80, 78: 1468.53, 79: 1785.82, 80: 1348.90, 81: 2463.33, 82: 1358.76, 83: 1104.09, 84: 1766.09, 85: 976.00, 86: 1107.77, 87: 1727.82, 88: 1706.83, 89: 1191.92, 90: 179.04, 91: 1204.88, 92: 837.61, 93: 1807.61, 94: 2696.24, 95: 2336.01, 96: 1667.89, 97: 214.37, 98: 1423.14, 99: 2344.83},
45: {0: 2114.69, 1: 1636.50, 2: 139.26, 3: 3197.56, 4: 1107.08, 5: 2484.17, 6: 672.31, 7: 2369.01, 8: 690.97, 9: 2654.48, 10: 2130.14, 11: 647.09, 12: 1541.72, 13: 329.95, 14: 2146.92, 15: 3343.23, 16: 2159.94, 17: 3147.30, 18: 2928.37, 19: 797.56, 20: 2445.60, 21: 3412.47, 22: 1567.35, 23: 3107.23, 24: 1062.26, 25: 3583.14, 26: 717.68, 27: 1719.87, 28: 148.41, 29: 585.75, 30: 2644.60, 31: 1950.72, 32: 1551.04, 33: 311.24, 34: 862.75, 35: 2910.10, 36: 1162.03, 37: 3077.87, 38: 831.78, 39: 1636.66, 40: 590.03, 41: 2463.42, 42: 198.32, 43: 1380.02, 44: 1761.64, 46: 1999.42, 47: 598.82, 48: 2531.15, 49: 1223.43, 50: 1004.12, 51: 868.38, 52: 3107.42, 53: 1735.64, 54: 428.67, 55: 2784.83, 56: 763.49, 57: 1438.89, 58: 2491.04, 59: 1244.33, 60: 1146.57, 61: 1095.35, 62: 2334.82, 63: 1556.46, 64: 3344.44, 65: 3393.00, 66: 1743.45, 67: 935.54, 68: 1317.65, 69: 3492.01, 70: 538.68, 71: 2502.51, 72: 1201.60, 73: 2446.94, 74: 2733.83, 75: 1629.21, 76: 1195.30, 77: 871.56, 78: 3054.12, 79: 2684.80, 80: 1074.29, 81: 1503.61, 82: 414.04, 83: 2774.40, 84: 804.19, 85: 797.52, 86: 865.43, 87: 3296.14, 88: 2462.78, 89: 2703.29, 90: 1748.01, 91: 2379.54, 92: 1709.14, 93: 3415.18, 94: 1625.08, 95: 854.63, 96: 2883.91, 97: 1649.00, 98: 3179.23, 99: 583.67},
46: {0: 429.20, 1: 1932.62, 2: 2138.57, 3: 1394.72, 4: 2591.88, 5: 574.19, 6: 1332.88, 7: 849.76, 8: 1324.55, 9: 656.41, 10: 485.24, 11: 1375.18, 12: 2702.53, 13: 2295.94, 14: 595.18, 15: 1367.09, 16: 599.47, 17: 1148.16, 18: 1046.21, 19: 1222.44, 20: 571.36, 21: 1434.13, 22: 537.63, 23: 1120.21, 24: 1254.13, 25: 1811.78, 26: 1363.85, 27: 571.35, 28: 1995.24, 29: 2146.54, 30: 1314.16, 31: 361.33, 32: 2780.89, 33: 1699.55, 34: 1324.24, 35: 977.81, 36: 2598.70, 37: 1104.56, 38: 2156.53, 39: 1612.96, 40: 2589.30, 41: 1090.25, 42: 2105.32, 43: 1855.75, 44: 515.20, 45: 1999.42, 47: 2481.50, 48: 614.49, 49: 1858.19, 50: 1104.60, 51: 2500.91, 52: 1152.88, 53: 1669.78, 54: 1572.65, 55: 1184.74, 56: 1239.98, 57: 803.36, 58: 693.90, 59: 865.08, 60: 1089.54, 61: 999.99, 62: 420.88, 63: 1601.37, 64: 1533.94, 65: 1543.32, 66: 859.27, 67: 1698.64, 68: 1408.46, 69: 1539.32, 70: 2536.40, 71: 554.91, 72: 1678.39, 73: 611.31, 74: 930.82, 75: 2802.28, 76: 824.15, 77: 2473.86, 78: 1064.25, 79: 1286.10, 80: 1293.26, 81: 2364.98, 82: 1585.81, 83: 782.16, 84: 1786.53, 85: 1289.60, 86: 1195.81, 87: 1315.78, 88: 1234.53, 89: 735.83, 90: 365.94, 91: 693.31, 92: 533.03, 93: 1422.96, 94: 2608.57, 95: 2412.46, 96: 1154.67, 97: 429.69, 98: 1274.12, 99: 2564.05},
47: {0: 2522.63, 1: 1595.61, 2: 507.06, 3: 3555.86, 4: 652.15, 5: 2911.48, 6: 1164.61, 7: 2706.77, 8: 1163.60, 9: 3136.01, 10: 2672.89, 11: 1207.36, 12: 1150.51, 13: 287.59, 14: 2700.79, 15: 3778.62, 16: 2713.67, 17: 3622.84, 18: 3326.14, 19: 1346.47, 20: 2970.66, 21: 3848.71, 22: 2104.03, 23: 3601.44, 24: 1352.18, 25: 3915.97, 26: 1299.02, 27: 2109.26, 28: 522.02, 29: 427.13, 30: 2904.13, 31: 2484.07, 32: 1126.68, 33: 816.47, 34: 1454.79, 35: 3429.11, 36: 720.00, 37: 3581.31, 38: 634.85, 39: 1716.09, 40: 432.65, 41: 2754.10, 42: 666.69, 43: 1357.28, 44: 2310.44, 45: 598.82, 46: 2481.50, 48: 2958.36, 49: 1199.27, 50: 1398.53, 51: 395.51, 52: 3532.57, 53: 1798.75, 54: 977.47, 55: 3103.99, 56: 1256.36, 57: 1808.67, 58: 3030.35, 59: 1802.32, 60: 1485.91, 61: 1658.65, 62: 2771.79, 63: 1638.92, 64: 3700.00, 65: 3762.08, 66: 2056.21, 67: 1027.80, 68: 1486.46, 69: 3908.42, 70: 356.92, 71: 3011.66, 72: 1264.80, 73: 2978.88, 74: 3114.23, 75: 1216.15, 76: 1722.50, 77: 422.21, 78: 3506.41, 79: 2958.37, 80: 1341.46, 81: 1261.11, 82: 957.05, 83: 3263.67, 84: 875.56, 85: 1375.82, 86: 1288.40, 87: 3735.79, 88: 2716.59, 89: 3145.68, 90: 2273.52, 91: 2755.81, 92: 2109.75, 93: 3866.20, 94: 1296.30, 95: 451.69, 96: 3233.43, 97: 2174.28, 98: 3708.78, 99: 251.75},
48: {0: 442.29, 1: 2094.27, 2: 2669.80, 3: 785.49, 4: 2964.12, 5: 47.07, 6: 1859.25, 7: 553.18, 8: 1840.87, 9: 420.59, 10: 931.18, 11: 1938.08, 12: 2982.44, 13: 2805.19, 14: 1037.10, 15: 820.29, 16: 1034.26, 17: 742.85, 18: 431.80, 19: 1789.66, 20: 745.07, 21: 890.41, 22: 1151.82, 23: 810.63, 24: 1636.02, 25: 1201.82, 26: 1945.38, 27: 857.03, 28: 2505.55, 29: 2584.98, 30: 948.87, 31: 913.09, 32: 3071.29, 33: 2222.15, 34: 1923.91, 35: 858.40, 36: 2958.62, 37: 849.10, 38: 2544.53, 39: 1757.78, 40: 3118.21, 41: 777.08, 42: 2657.20, 43: 2091.39, 44: 1110.01, 45: 2531.15, 46: 614.49, 47: 2958.36, 49: 2138.79, 50: 1560.74, 51: 2916.18, 52: 576.84, 53: 1781.00, 54: 2114.93, 55: 687.16, 56: 1769.37, 57: 1159.29, 58: 892.29, 59: 1471.94, 60: 1483.91, 61: 1599.67, 62: 201.84, 63: 1774.52, 64: 921.64, 65: 928.87, 66: 1015.02, 67: 2059.46, 68: 1673.31, 69: 961.00, 70: 3058.47, 71: 607.60, 72: 1965.51, 73: 811.05, 74: 349.32, 75: 3075.65, 76: 1406.59, 77: 2884.54, 78: 567.67, 79: 888.05, 80: 1661.88, 81: 2607.65, 82: 2124.86, 83: 539.42, 84: 2176.13, 85: 1875.61, 86: 1680.91, 87: 778.54, 88: 956.62, 89: 208.12, 90: 977.95, 91: 352.14, 92: 850.72, 93: 916.56, 94: 2851.76, 95: 2818.95, 96: 585.84, 97: 1043.92, 98: 1130.76, 99: 3071.77},
49: {0: 1706.57, 1: 416.12, 2: 1292.65, 3: 2568.82, 4: 887.03, 5: 2096.31, 6: 1051.98, 7: 1736.75, 8: 1005.68, 9: 2437.39, 10: 2231.73, 11: 1258.81, 12: 849.63, 13: 1248.36, 14: 2305.31, 15: 2924.85, 16: 2315.97, 17: 2873.96, 18: 2419.20, 19: 1282.08, 20: 2426.50, 21: 2993.60, 22: 1733.90, 23: 2906.27, 24: 650.76, 25: 2879.38, 26: 1394.11, 27: 1320.48, 28: 1086.10, 29: 783.60, 30: 1813.65, 31: 2031.29, 32: 934.56, 33: 1055.88, 34: 1560.97, 35: 2824.69, 36: 861.97, 37: 2915.42, 38: 573.81, 39: 535.76, 40: 1575.07, 41: 1710.04, 42: 1421.04, 43: 161.76, 44: 1949.75, 45: 1223.43, 46: 1858.19, 47: 1199.27, 48: 2138.79, 50: 891.22, 51: 945.42, 52: 2669.18, 53: 606.57, 54: 1150.58, 55: 2079.23, 56: 1079.47, 57: 1054.83, 58: 2535.31, 59: 1598.10, 60: 803.30, 61: 1523.39, 62: 1992.67, 63: 466.84, 64: 2703.09, 65: 2784.18, 66: 1125.34, 67: 319.51, 68: 466.08, 69: 3009.65, 70: 1492.62, 71: 2408.26, 72: 179.82, 73: 2459.66, 74: 2187.88, 75: 947.11, 76: 1422.45, 77: 905.88, 78: 2705.59, 79: 1881.55, 80: 601.05, 81: 514.58, 82: 1132.64, 83: 2577.02, 84: 420.95, 85: 1421.04, 86: 921.65, 87: 2893.43, 88: 1628.88, 89: 2345.63, 90: 1826.73, 91: 1849.61, 92: 1345.90, 93: 3043.55, 94: 753.45, 95: 839.77, 96: 2247.50, 97: 1746.15, 98: 3124.08, 99: 1426.97},
50: {0: 1128.69, 1: 1146.96, 2: 1137.95, 3: 2195.77, 4: 1498.04, 5: 1513.78, 6: 382.78, 7: 1365.06, 8: 341.70, 9: 1749.77, 10: 1391.60, 11: 570.74, 12: 1674.84, 13: 1250.96, 14: 1451.16, 15: 2380.74, 16: 1462.76, 17: 2230.73, 18: 1939.26, 19: 501.88, 20: 1637.74, 21: 2450.78, 22: 856.98, 23: 2220.68, 24: 254.23, 25: 2579.09, 26: 671.25, 27: 721.67, 28: 955.42, 29: 1043.20, 30: 1661.91, 31: 1190.12, 32: 1740.64, 33: 694.72, 34: 791.25, 35: 2076.90, 36: 1510.85, 37: 2208.79, 38: 1060.69, 39: 948.90, 40: 1575.86, 41: 1469.25, 42: 1161.82, 43: 960.12, 44: 1077.00, 45: 1004.12, 46: 1104.60, 47: 1398.53, 48: 1560.74, 49: 891.22, 51: 1396.42, 52: 2136.21, 53: 1048.65, 54: 638.04, 55: 1781.87, 56: 330.05, 57: 434.77, 58: 1724.54, 59: 711.18, 60: 186.27, 61: 655.74, 62: 1373.26, 63: 887.35, 64: 2342.38, 65: 2393.96, 66: 751.83, 67: 641.84, 68: 591.05, 69: 2515.04, 70: 1510.68, 71: 1653.32, 72: 731.97, 73: 1658.82, 74: 1736.78, 75: 1777.49, 76: 531.52, 77: 1369.76, 78: 2108.33, 79: 1695.08, 80: 305.31, 81: 1397.84, 82: 638.38, 83: 1881.77, 84: 697.83, 85: 657.14, 86: 146.37, 87: 2337.47, 88: 1486.34, 89: 1747.16, 90: 976.46, 91: 1380.06, 92: 716.45, 93: 2467.80, 94: 1624.98, 95: 1309.07, 96: 1880.46, 97: 886.14, 98: 2368.50, 99: 1515.14},
51: {0: 2474.05, 1: 1302.29, 2: 823.31, 3: 3447.68, 4: 259.24, 5: 2870.31, 6: 1263.40, 7: 2598.66, 8: 1246.65, 9: 3141.82, 10: 2757.15, 11: 1366.93, 12: 755.01, 13: 633.51, 14: 2800.17, 15: 3731.50, 16: 2812.64, 17: 3615.92, 18: 3252.62, 19: 1483.34, 20: 3027.41, 21: 3801.57, 22: 2193.43, 23: 3614.33, 24: 1280.21, 25: 3784.33, 26: 1482.09, 27: 2059.37, 28: 742.65, 29: 368.64, 30: 2737.27, 31: 2559.87, 32: 733.38, 33: 978.46, 34: 1653.81, 35: 3472.30, 36: 325.68, 37: 3604.61, 38: 388.62, 39: 1480.98, 40: 826.20, 41: 2611.40, 42: 994.13, 43: 1089.09, 44: 2410.17, 45: 868.38, 46: 2500.91, 47: 395.51, 48: 2916.18, 49: 945.42, 50: 1396.42, 52: 3479.38, 53: 1550.22, 54: 1146.68, 55: 2974.03, 56: 1346.18, 57: 1757.96, 58: 3104.39, 59: 1928.97, 60: 1435.46, 61: 1798.02, 62: 2742.04, 63: 1410.11, 64: 3587.85, 65: 3659.58, 66: 1951.32, 67: 872.89, 68: 1321.34, 69: 3843.08, 70: 752.16, 71: 3049.07, 72: 1056.08, 73: 3044.06, 74: 3030.19, 75: 821.93, 76: 1814.77, 77: 40.00, 78: 3478.25, 79: 2799.70, 80: 1255.19, 81: 894.56, 82: 1123.64, 83: 3275.60, 84: 741.97, 85: 1550.06, 86: 1318.94, 87: 3693.04, 88: 2550.13, 89: 3113.67, 90: 2344.87, 91: 2675.81, 92: 2068.79, 93: 3832.53, 94: 905.65, 95: 106.23, 96: 3123.47, 97: 2248.08, 98: 3762.06, 99: 642.22},
52: {0: 1010.45, 1: 2577.25, 2: 3246.18, 3: 497.64, 4: 3515.60, 5: 623.91, 6: 2435.30, 7: 958.18, 8: 2417.45, 9: 617.29, 10: 1334.04, 11: 2508.79, 12: 3501.01, 13: 3381.94, 14: 1418.82, 15: 255.69, 16: 1411.67, 17: 433.13, 18: 279.87, 19: 2358.86, 20: 1034.57, 21: 324.58, 22: 1683.08, 23: 603.68, 24: 2201.33, 25: 825.11, 26: 2509.82, 27: 1425.60, 28: 3082.37, 29: 3154.24, 30: 1165.37, 31: 1383.37, 32: 3593.20, 33: 2798.73, 34: 2477.00, 35: 849.47, 36: 3506.36, 37: 692.41, 38: 3103.00, 39: 2244.66, 40: 3694.86, 41: 1092.63, 42: 3231.26, 43: 2606.10, 44: 1600.02, 45: 3107.42, 46: 1152.88, 47: 3532.57, 48: 576.84, 49: 2669.18, 50: 2136.21, 51: 3479.38, 53: 2251.34, 54: 2689.79, 55: 801.98, 56: 2345.04, 57: 1728.06, 58: 1143.08, 59: 2017.56, 60: 2053.08, 61: 2152.58, 62: 773.08, 63: 2272.99, 64: 562.14, 65: 502.47, 66: 1547.17, 67: 2615.21, 68: 2208.59, 69: 387.62, 70: 3635.29, 71: 885.87, 72: 2501.29, 73: 1091.46, 74: 506.35, 75: 3590.55, 76: 1969.17, 77: 3446.79, 78: 223.01, 79: 1081.12, 80: 2224.30, 81: 3115.56, 82: 2700.12, 83: 606.39, 84: 2737.66, 85: 2437.80, 86: 2257.57, 87: 229.75, 88: 1259.48, 89: 417.08, 90: 1497.42, 91: 819.68, 92: 1422.95, 93: 389.31, 94: 3356.37, 95: 3380.48, 96: 589.48, 97: 1576.26, 98: 1000.95, 99: 3648.39},
53: {0: 1394.18, 1: 331.30, 2: 1827.94, 3: 2071.58, 4: 1468.37, 5: 1745.03, 6: 1362.06, 7: 1293.21, 8: 1311.88, 9: 2141.98, 10: 2118.40, 11: 1576.91, 12: 1296.45, 13: 1819.15, 14: 2212.26, 15: 2503.87, 16: 2220.57, 17: 2521.97, 18: 1982.40, 19: 1542.05, 20: 2231.70, 21: 2569.52, 22: 1729.37, 23: 2586.75, 24: 812.86, 25: 2343.63, 26: 1697.46, 27: 1099.14, 28: 1614.31, 29: 1375.91, 30: 1265.17, 31: 1933.05, 32: 1395.16, 33: 1503.60, 34: 1834.79, 35: 2565.81, 36: 1432.87, 37: 2613.76, 38: 1179.91, 39: 103.59, 40: 2155.87, 41: 1204.76, 42: 1932.41, 43: 463.35, 44: 1918.18, 45: 1735.64, 46: 1669.78, 47: 1798.75, 48: 1781.00, 49: 606.57, 50: 1048.65, 51: 1550.22, 52: 2251.34, 54: 1546.82, 55: 1571.64, 56: 1348.41, 57: 945.41, 58: 2362.45, 59: 1713.66, 60: 877.49, 61: 1690.58, 62: 1676.93, 63: 180.69, 64: 2195.85, 65: 2287.30, 66: 816.77, 67: 808.97, 68: 467.13, 69: 2557.44, 70: 2074.39, 71: 2177.24, 72: 545.22, 73: 2277.78, 74: 1748.61, 75: 1374.40, 76: 1522.67, 77: 1510.47, 78: 2327.54, 79: 1341.46, 80: 770.17, 81: 897.04, 82: 1535.01, 83: 2280.45, 84: 956.73, 85: 1696.79, 86: 1152.95, 87: 2480.85, 88: 1090.00, 89: 1987.42, 90: 1759.97, 91: 1449.23, 92: 1140.04, 93: 2638.35, 94: 1124.77, 95: 1445.05, 96: 1761.85, 97: 1703.84, 98: 2862.28, 99: 2018.09},
54: {0: 1707.55, 1: 1529.08, 2: 567.12, 3: 2801.62, 4: 1342.83, 5: 2068.13, 6: 264.15, 7: 1988.89, 8: 297.56, 9: 2226.89, 10: 1706.97, 11: 229.92, 12: 1693.55, 13: 743.35, 14: 1728.45, 15: 2922.55, 16: 1741.41, 17: 2719.96, 18: 2519.55, 19: 372.93, 20: 2018.51, 21: 2991.47, 22: 1141.47, 23: 2678.63, 24: 771.11, 25: 3195.29, 26: 335.41, 27: 1325.93, 28: 456.18, 29: 790.87, 30: 2299.88, 31: 1524.69, 32: 1726.82, 33: 168.63, 34: 508.72, 35: 2482.46, 36: 1383.28, 37: 2649.24, 38: 962.68, 39: 1443.40, 40: 1017.22, 41: 2105.20, 42: 543.39, 43: 1285.03, 44: 1340.24, 45: 428.67, 46: 1572.65, 47: 977.47, 48: 2114.93, 49: 1150.58, 50: 638.04, 51: 1146.68, 52: 2689.79, 53: 1546.82, 55: 2408.61, 56: 347.76, 57: 1063.01, 58: 2067.17, 59: 826.74, 60: 807.96, 61: 681.45, 62: 1916.72, 63: 1367.42, 64: 2948.79, 65: 2992.09, 66: 1389.61, 67: 831.27, 68: 1088.54, 69: 3075.74, 70: 967.35, 71: 2073.96, 72: 1067.16, 73: 2021.14, 74: 2332.22, 75: 1791.40, 76: 767.01, 77: 1136.60, 78: 2630.39, 79: 2332.12, 80: 799.72, 81: 1552.19, 82: 23.35, 83: 2346.10, 84: 755.91, 85: 405.42, 86: 491.71, 87: 2874.60, 88: 2124.24, 89: 2282.46, 90: 1320.32, 91: 1982.33, 92: 1310.24, 93: 2991.18, 94: 1725.19, 95: 1097.87, 96: 2493.48, 97: 1221.16, 98: 2753.43, 99: 1007.04},
55: {0: 795.34, 1: 1902.79, 2: 2916.62, 3: 500.37, 4: 2961.86, 5: 697.69, 6: 2144.67, 7: 420.64, 8: 2112.60, 9: 1078.64, 10: 1592.14, 11: 2279.37, 12: 2863.71, 13: 3008.84, 14: 1702.58, 15: 1020.65, 16: 1701.37, 17: 1198.41, 18: 530.08, 19: 2148.63, 20: 1432.22, 21: 1075.60, 22: 1676.77, 23: 1337.22, 24: 1757.08, 25: 812.50, 26: 2323.76, 27: 1091.15, 28: 2724.46, 29: 2692.06, 30: 366.96, 31: 1534.09, 32: 2960.98, 33: 2476.49, 34: 2349.00, 35: 1485.16, 36: 2940.58, 37: 1406.79, 38: 2585.82, 39: 1589.32, 40: 3344.79, 41: 370.19, 42: 2942.77, 43: 1984.20, 44: 1698.84, 45: 2784.83, 46: 1184.74, 47: 3103.99, 48: 687.16, 49: 2079.23, 50: 1781.87, 51: 2974.03, 52: 801.98, 53: 1571.64, 54: 2408.61, 56: 2066.92, 57: 1348.00, 58: 1579.26, 59: 1942.17, 60: 1643.52, 61: 2040.91, 62: 800.56, 63: 1635.35, 64: 626.01, 65: 715.73, 66: 1051.12, 67: 2104.29, 68: 1653.47, 69: 1018.43, 70: 3274.72, 71: 1293.54, 72: 1931.89, 73: 1498.19, 74: 370.00, 75: 2944.68, 76: 1823.68, 77: 2937.57, 78: 969.03, 79: 280.80, 80: 1763.52, 81: 2466.17, 82: 2412.39, 83: 1167.23, 84: 2246.39, 85: 2267.73, 86: 1924.32, 87: 1017.01, 88: 494.50, 89: 785.86, 90: 1537.62, 91: 496.59, 92: 1115.63, 93: 1176.32, 94: 2696.40, 95: 2869.46, 96: 216.11, 97: 1575.54, 98: 1716.91, 99: 3262.84},
56: {0: 1359.82, 1: 1400.39, 2: 902.66, 3: 2454.44, 4: 1499.52, 5: 1722.48, 6: 93.05, 7: 1646.54, 8: 99.76, 9: 1896.26, 10: 1421.53, 11: 240.75, 12: 1767.79, 13: 1056.38, 14: 1457.50, 15: 2579.87, 16: 1470.14, 17: 2387.99, 18: 2172.08, 19: 203.75, 20: 1714.30, 21: 2649.06, 22: 853.15, 23: 2354.74, 24: 535.73, 25: 2849.48, 26: 349.59, 27: 980.40, 28: 756.24, 29: 977.58, 30: 1973.10, 31: 1229.48, 32: 1818.68, 33: 459.62, 34: 493.08, 35: 2173.41, 36: 1526.82, 37: 2330.25, 38: 1075.72, 39: 1245.97, 40: 1353.01, 41: 1772.18, 42: 891.05, 43: 1182.81, 44: 1066.42, 45: 763.49, 46: 1239.98, 47: 1256.36, 48: 1769.37, 49: 1079.47, 50: 330.05, 51: 1346.18, 52: 2345.04, 53: 1348.41, 54: 347.76, 55: 2066.92, 57: 727.99, 58: 1776.33, 59: 588.26, 60: 515.40, 61: 473.08, 62: 1572.10, 63: 1177.68, 64: 2601.61, 65: 2644.39, 66: 1064.32, 67: 777.01, 68: 881.72, 69: 2730.37, 70: 1297.58, 71: 1757.82, 72: 950.51, 73: 1723.07, 74: 1984.54, 75: 1869.85, 76: 471.27, 77: 1327.42, 78: 2290.91, 79: 2001.03, 80: 578.73, 81: 1551.08, 82: 356.04, 83: 2019.24, 84: 766.85, 85: 352.37, 86: 197.52, 87: 2532.67, 88: 1801.84, 89: 1939.87, 90: 1017.64, 91: 1635.24, 92: 963.42, 93: 2652.04, 94: 1756.77, 95: 1276.24, 96: 2147.43, 97: 918.58, 98: 2452.44, 99: 1324.36},
57: {0: 718.23, 1: 1160.70, 2: 1572.47, 3: 1763.01, 4: 1818.49, 5: 1113.11, 6: 800.24, 7: 930.41, 8: 765.87, 9: 1401.86, 10: 1199.97, 11: 955.12, 12: 1900.23, 13: 1679.32, 14: 1285.22, 15: 1977.58, 16: 1294.60, 17: 1863.09, 18: 1517.58, 19: 844.08, 20: 1372.41, 21: 2047.76, 22: 785.49, 23: 1875.11, 24: 478.28, 25: 2144.39, 26: 1024.64, 27: 302.60, 28: 1386.96, 29: 1426.37, 30: 1246.47, 31: 1005.45, 32: 1979.99, 33: 1129.32, 34: 1096.69, 35: 1773.32, 36: 1818.78, 37: 1876.01, 38: 1391.23, 39: 867.78, 40: 2008.19, 41: 1044.26, 42: 1594.77, 43: 1057.67, 44: 973.33, 45: 1438.89, 46: 803.36, 47: 1808.67, 48: 1159.29, 49: 1054.83, 50: 434.77, 51: 1757.96, 52: 1728.06, 53: 945.41, 54: 1063.01, 55: 1348.00, 56: 727.99, 58: 1484.95, 59: 826.07, 60: 325.04, 61: 851.17, 62: 984.56, 63: 837.93, 64: 1909.33, 65: 1963.25, 66: 344.73, 67: 913.76, 68: 610.33, 69: 2100.56, 70: 1941.51, 71: 1354.51, 72: 875.03, 73: 1407.28, 74: 1308.77, 75: 1999.56, 76: 643.12, 77: 1726.95, 78: 1720.31, 79: 1273.08, 80: 508.33, 81: 1562.69, 82: 1065.77, 83: 1539.68, 84: 1020.53, 85: 985.29, 86: 576.32, 87: 1937.45, 88: 1078.72, 89: 1355.71, 90: 819.56, 91: 950.64, 92: 311.26, 93: 2075.01, 94: 1805.74, 95: 1661.95, 96: 1446.36, 97: 758.98, 98: 2072.06, 99: 1940.76},
58: {0: 1030.90, 1: 2626.07, 2: 2625.84, 3: 1572.78, 4: 3221.86, 5: 886.00, 6: 1866.83, 7: 1379.08, 8: 1872.34, 9: 542.72, 10: 361.27, 11: 1843.95, 12: 3371.64, 13: 2810.48, 14: 370.47, 15: 1247.62, 16: 358.24, 17: 879.93, 18: 1205.72, 19: 1694.55, 20: 150.86, 21: 1295.64, 22: 926.88, 23: 748.95, 24: 1909.41, 25: 1956.18, 26: 1788.12, 27: 1265.10, 28: 2518.16, 29: 2739.56, 30: 1822.14, 31: 546.88, 32: 3445.90, 33: 2217.92, 34: 1687.49, 35: 461.85, 36: 3235.39, 37: 679.23, 38: 2784.52, 39: 2306.77, 40: 3066.73, 41: 1624.76, 42: 2557.05, 43: 2542.28, 44: 731.18, 45: 2491.04, 46: 693.90, 47: 3030.35, 48: 892.29, 49: 2535.31, 50: 1724.54, 51: 3104.39, 52: 1143.08, 53: 2362.45, 54: 2067.17, 55: 1579.26, 56: 1776.33, 57: 1484.95, 59: 1249.64, 60: 1745.82, 61: 1400.46, 62: 825.26, 63: 2295.03, 64: 1678.25, 65: 1638.97, 66: 1548.55, 67: 2350.56, 68: 2094.64, 69: 1460.21, 70: 3025.95, 71: 287.56, 72: 2356.20, 73: 89.00, 74: 1227.06, 75: 3472.69, 76: 1307.85, 77: 3081.14, 78: 948.13, 79: 1769.59, 80: 1952.87, 81: 3046.45, 82: 2084.98, 83: 539.71, 84: 2421.83, 85: 1707.07, 86: 1786.06, 87: 1189.55, 88: 1794.84, 89: 834.23, 90: 760.43, 91: 1178.05, 92: 1226.86, 93: 1221.19, 94: 3288.36, 95: 3023.78, 96: 1458.46, 97: 858.59, 98: 692.94, 99: 3073.52},
59: {0: 1152.29, 1: 1851.16, 2: 1377.63, 3: 2235.15, 4: 2087.73, 5: 1428.74, 6: 666.11, 7: 1539.02, 8: 687.61, 9: 1481.27, 10: 888.38, 11: 598.82, 12: 2342.81, 13: 1567.95, 14: 902.77, 15: 2226.07, 16: 915.76, 17: 1970.06, 18: 1902.23, 19: 455.93, 20: 1215.63, 21: 2291.72, 22: 345.32, 23: 1904.53, 24: 963.76, 25: 2649.73, 26: 539.33, 27: 911.41, 28: 1282.53, 29: 1560.67, 30: 1955.69, 31: 719.24, 32: 2398.35, 33: 986.00, 34: 463.60, 35: 1681.51, 36: 2114.94, 37: 1864.17, 38: 1663.08, 39: 1620.90, 40: 1817.09, 41: 1730.47, 42: 1308.22, 43: 1671.28, 44: 518.56, 45: 1244.33, 46: 865.08, 47: 1802.32, 48: 1471.94, 49: 1598.10, 50: 711.18, 51: 1928.97, 52: 2017.56, 53: 1713.66, 54: 826.74, 55: 1942.17, 56: 588.26, 57: 826.07, 58: 1249.64, 60: 847.30, 61: 151.05, 62: 1271.65, 63: 1569.59, 64: 2378.66, 65: 2397.63, 66: 1140.81, 67: 1324.42, 68: 1282.66, 69: 2403.29, 70: 1776.98, 71: 1290.85, 72: 1442.80, 73: 1210.66, 74: 1759.71, 75: 2445.43, 76: 191.02, 77: 1911.84, 78: 1917.21, 79: 1958.05, 80: 1015.20, 81: 2096.74, 82: 846.22, 83: 1585.20, 84: 1340.49, 85: 458.63, 86: 685.72, 87: 2173.13, 88: 1816.50, 89: 1600.49, 90: 536.86, 91: 1454.75, 92: 871.27, 93: 2269.90, 94: 2315.42, 95: 1862.38, 96: 1963.97, 97: 446.23, 98: 1941.00, 99: 1827.90},
60: {0: 1043.22, 1: 1006.11, 2: 1275.47, 3: 2076.11, 4: 1506.11, 5: 1437.61, 6: 561.81, 7: 1233.11, 8: 517.35, 9: 1712.78, 10: 1431.62, 11: 756.13, 12: 1626.49, 13: 1367.23, 14: 1502.70, 15: 2302.57, 16: 1513.50, 17: 2181.48, 18: 1840.56, 19: 686.72, 20: 1645.99, 21: 2372.75, 22: 934.14, 23: 2186.36, 24: 164.71, 25: 2448.95, 26: 857.42, 27: 627.62, 28: 1080.95, 29: 1101.36, 30: 1500.71, 31: 1230.39, 32: 1700.08, 33: 844.00, 34: 973.93, 35: 2067.20, 36: 1510.43, 37: 2182.47, 38: 1074.23, 39: 780.44, 40: 1701.43, 41: 1316.86, 42: 1315.30, 43: 845.06, 44: 1147.75, 45: 1146.57, 46: 1089.54, 47: 1485.91, 48: 1483.91, 49: 803.30, 50: 186.27, 51: 1435.46, 52: 2053.08, 53: 877.49, 54: 807.96, 55: 1643.52, 56: 515.40, 57: 325.04, 58: 1745.82, 59: 847.30, 61: 813.62, 62: 1306.78, 63: 724.51, 64: 2221.58, 65: 2279.46, 66: 597.01, 67: 609.20, 68: 435.39, 69: 2424.97, 70: 1632.07, 71: 1644.42, 72: 630.05, 73: 1673.96, 74: 1628.65, 75: 1727.95, 76: 658.48, 77: 1405.16, 78: 2043.41, 79: 1538.73, 80: 207.17, 81: 1317.77, 82: 805.73, 83: 1848.85, 84: 702.67, 85: 841.61, 86: 324.14, 87: 2262.26, 88: 1321.44, 89: 1679.10, 90: 1023.89, 91: 1270.18, 92: 634.00, 93: 2399.08, 94: 1554.11, 95: 1340.84, 96: 1756.20, 97: 942.89, 98: 2363.59, 99: 1625.25},
61: {0: 1259.66, 1: 1802.54, 2: 1227.89, 3: 2353.39, 4: 1965.28, 5: 1555.53, 6: 541.61, 7: 1630.72, 8: 569.53, 9: 1626.02, 10: 1039.23, 11: 452.09, 12: 2240.20, 13: 1420.27, 14: 1051.70, 15: 2365.29, 16: 1064.72, 17: 2116.21, 18: 2027.76, 19: 315.84, 20: 1366.43, 21: 2431.54, 22: 493.04, 23: 2053.38, 24: 909.48, 25: 2765.92, 26: 388.29, 27: 981.90, 28: 1137.62, 29: 1430.83, 30: 2031.79, 31: 869.87, 32: 2291.74, 33: 843.53, 34: 324.61, 35: 1832.36, 36: 1995.29, 37: 2014.02, 38: 1546.56, 39: 1594.05, 40: 1666.35, 41: 1809.97, 42: 1157.17, 43: 1608.43, 44: 669.30, 45: 1095.35, 46: 999.99, 47: 1658.65, 48: 1599.67, 49: 1523.39, 50: 655.74, 51: 1798.02, 52: 2152.58, 53: 1690.58, 54: 681.45, 55: 2040.91, 56: 473.08, 57: 851.17, 58: 1400.46, 59: 151.05, 60: 813.62, 62: 1398.28, 63: 1537.16, 64: 2498.08, 65: 2521.18, 66: 1183.32, 67: 1236.01, 68: 1243.63, 69: 2539.28, 70: 1626.78, 71: 1440.04, 72: 1376.89, 73: 1361.71, 74: 1876.57, 75: 2342.41, 76: 221.42, 77: 1782.40, 78: 2058.25, 79: 2039.77, 80: 960.08, 81: 2011.66, 82: 701.62, 83: 1732.20, 84: 1238.13, 85: 307.65, 86: 601.82, 87: 2312.98, 88: 1884.22, 89: 1735.66, 90: 683.74, 91: 1560.58, 92: 945.84, 93: 2412.71, 94: 2223.69, 95: 1735.03, 96: 2074.35, 97: 590.41, 98: 2092.00, 99: 1679.02},
62: {0: 288.09, 1: 1979.20, 2: 2473.70, 3: 973.90, 4: 2799.74, 5: 157.26, 6: 1662.57, 7: 554.05, 8: 1645.48, 9: 465.47, 10: 791.77, 11: 1737.55, 12: 2840.72, 13: 2612.66, 14: 902.70, 15: 1010.03, 16: 901.89, 17: 883.24, 18: 630.60, 19: 1588.68, 20: 674.44, 21: 1079.75, 22: 955.59, 23: 917.99, 24: 1462.85, 25: 1390.95, 26: 1743.70, 27: 685.93, 28: 2312.42, 29: 2405.15, 30: 1000.98, 31: 743.27, 32: 2927.18, 33: 2026.69, 34: 1722.40, 35: 898.35, 36: 2797.09, 37: 938.09, 38: 2375.26, 39: 1643.83, 40: 2922.85, 41: 799.53, 42: 2458.35, 43: 1956.34, 44: 928.07, 45: 2334.82, 46: 420.88, 47: 2771.79, 48: 201.84, 49: 1992.67, 50: 1373.26, 51: 2742.04, 52: 773.08, 53: 1676.93, 54: 1916.72, 55: 800.56, 56: 1572.10, 57: 984.56, 58: 825.26, 59: 1271.65, 60: 1306.78, 61: 1398.28, 63: 1652.95, 64: 1113.69, 65: 1126.68, 66: 881.15, 67: 1893.93, 68: 1526.75, 69: 1159.35, 70: 2864.13, 71: 562.23, 72: 1816.46, 73: 737.83, 74: 512.64, 75: 2935.95, 76: 1204.76, 77: 2711.32, 78: 737.01, 79: 954.08, 80: 1491.66, 81: 2474.04, 82: 1927.05, 83: 603.52, 84: 2004.97, 85: 1673.80, 86: 1489.50, 87: 965.11, 88: 970.22, 89: 373.98, 90: 786.70, 91: 353.41, 92: 673.37, 93: 1094.93, 94: 2719.14, 95: 2646.47, 96: 741.97, 97: 847.93, 98: 1189.73, 99: 2879.80},
63: {0: 1365.66, 1: 331.72, 2: 1650.53, 3: 2131.24, 4: 1350.00, 5: 1735.62, 6: 1187.47, 7: 1320.96, 8: 1137.23, 9: 2114.01, 10: 2031.86, 11: 1403.00, 12: 1234.19, 13: 1647.54, 14: 2120.79, 15: 2527.81, 16: 2129.80, 17: 2517.29, 18: 2011.51, 19: 1374.05, 20: 2170.25, 21: 2595.04, 22: 1610.98, 23: 2569.93, 24: 644.15, 25: 2425.98, 26: 1525.66, 27: 1031.72, 28: 1436.67, 29: 1213.41, 30: 1353.63, 31: 1840.75, 32: 1329.56, 33: 1322.91, 34: 1667.07, 35: 2527.26, 36: 1320.60, 37: 2590.49, 38: 1031.14, 39: 80.45, 40: 1986.25, 41: 1265.19, 42: 1752.90, 43: 349.76, 44: 1808.28, 45: 1556.46, 46: 1601.37, 47: 1638.92, 48: 1774.52, 49: 466.84, 50: 887.35, 51: 1410.11, 52: 2272.99, 53: 180.69, 54: 1367.42, 55: 1635.35, 56: 1177.68, 57: 837.93, 58: 2295.03, 59: 1569.59, 60: 724.51, 61: 1537.16, 62: 1652.95, 64: 2261.30, 65: 2347.32, 66: 773.61, 67: 634.44, 68: 297.38, 69: 2595.79, 70: 1905.25, 71: 2127.14, 72: 375.71, 73: 2212.60, 74: 1777.67, 75: 1320.24, 76: 1379.34, 77: 1370.83, 78: 2332.51, 79: 1424.40, 80: 599.10, 81: 843.13, 82: 1355.34, 83: 2253.72, 84: 784.55, 85: 1528.03, 86: 984.00, 87: 2501.03, 88: 1171.11, 89: 1982.53, 90: 1657.46, 91: 1458.09, 92: 1068.39, 93: 2655.86, 94: 1083.41, 95: 1304.08, 96: 1814.23, 97: 1594.40, 98: 2825.98, 99: 1852.72},
64: {0: 1250.23, 1: 2526.66, 2: 3479.70, 3: 147.18, 4: 3583.51, 5: 960.03, 6: 2685.58, 7: 993.62, 8: 2658.80, 9: 1136.89, 10: 1819.14, 11: 2796.12, 12: 3489.32, 13: 3587.56, 14: 1915.41, 15: 630.89, 16: 1910.08, 17: 977.88, 18: 497.11, 19: 2654.98, 20: 1555.77, 21: 652.33, 22: 2069.13, 23: 1156.22, 24: 2347.93, 25: 283.34, 26: 2821.49, 27: 1625.06, 28: 3296.29, 29: 3295.12, 30: 951.13, 31: 1828.60, 32: 3586.74, 33: 3033.44, 34: 2819.24, 35: 1411.57, 36: 3563.59, 37: 1248.34, 38: 3200.66, 39: 2215.19, 40: 3917.51, 41: 996.11, 42: 3490.50, 43: 2609.99, 44: 2030.68, 45: 3344.44, 46: 1533.94, 47: 3700.00, 48: 921.64, 49: 2703.09, 50: 2342.38, 51: 3587.85, 52: 562.14, 53: 2195.85, 54: 2948.79, 55: 626.01, 56: 2601.61, 57: 1909.33, 58: 1678.25, 59: 2378.66, 60: 2221.58, 61: 2498.08, 62: 1113.69, 63: 2261.30, 65: 114.77, 66: 1645.05, 67: 2715.63, 68: 2270.70, 69: 512.00, 70: 3850.65, 71: 1404.09, 72: 2552.87, 73: 1617.22, 74: 623.03, 75: 3569.72, 76: 2293.36, 77: 3552.04, 78: 784.66, 79: 866.85, 80: 2359.34, 81: 3091.41, 82: 2955.26, 83: 1154.48, 84: 2854.15, 85: 2757.20, 86: 2479.02, 87: 662.15, 88: 1109.76, 89: 865.92, 90: 1898.89, 91: 966.48, 92: 1638.64, 93: 783.78, 94: 3320.43, 95: 3484.07, 96: 466.62, 97: 1961.57, 98: 1550.38, 99: 3846.81},
65: {0: 1286.44, 1: 2618.49, 2: 3529.20, 3: 216.11, 4: 3661.45, 5: 970.27, 6: 2729.89, 7: 1061.08, 8: 2704.79, 9: 1102.39, 10: 1800.88, 11: 2833.13, 12: 3578.14, 13: 3642.56, 14: 1893.37, 15: 534.20, 16: 1887.35, 17: 899.07, 18: 497.12, 19: 2689.69, 20: 1522.78, 21: 549.18, 22: 2080.69, 23: 1079.50, 24: 2410.17, 25: 323.20, 26: 2853.28, 27: 1673.49, 28: 3349.19, 29: 3361.02, 30: 1052.91, 31: 1822.98, 32: 3675.02, 33: 3081.77, 34: 2844.05, 35: 1347.41, 36: 3643.08, 37: 1173.39, 38: 3273.38, 39: 2303.39, 40: 3969.81, 41: 1083.72, 42: 3534.91, 43: 2695.00, 44: 2030.15, 45: 3393.00, 46: 1543.32, 47: 3762.08, 48: 928.87, 49: 2784.18, 50: 2393.96, 51: 3659.58, 52: 502.47, 53: 2287.30, 54: 2992.09, 55: 715.73, 56: 2644.39, 57: 1963.25, 58: 1638.97, 59: 2397.63, 60: 2279.46, 61: 2521.18, 62: 1126.68, 63: 2347.32, 64: 114.77, 66: 1711.34, 67: 2786.74, 68: 2346.23, 69: 400.22, 70: 3904.24, 71: 1371.75, 72: 2630.96, 73: 1582.39, 74: 659.88, 75: 3659.81, 76: 2320.61, 77: 3624.21, 78: 720.15, 79: 967.50, 80: 2423.58, 81: 3181.17, 82: 2999.35, 83: 1106.68, 84: 2923.07, 85: 2787.09, 86: 2528.25, 87: 570.64, 88: 1205.90, 89: 847.85, 90: 1905.66, 91: 1013.97, 92: 1684.14, 93: 682.11, 94: 3412.04, 95: 3556.39, 96: 537.43, 97: 1972.79, 98: 1469.63, 99: 3903.56},
66: {0: 593.19, 1: 1102.74, 2: 1872.41, 3: 1502.07, 4: 1971.11, 5: 973.54, 6: 1130.68, 7: 651.46, 8: 1092.44, 9: 1340.55, 10: 1324.61, 11: 1296.09, 12: 1967.42, 13: 1958.18, 14: 1425.29, 15: 1802.52, 16: 1432.33, 17: 1754.43, 18: 1306.08, 19: 1188.45, 20: 1415.73, 21: 1871.74, 22: 1029.89, 23: 1799.09, 24: 706.21, 25: 1861.10, 26: 1369.00, 27: 300.85, 28: 1676.25, 29: 1650.23, 30: 910.38, 31: 1151.84, 32: 2056.46, 33: 1439.27, 34: 1440.09, 35: 1755.11, 36: 1960.02, 37: 1817.54, 38: 1567.74, 39: 770.73, 40: 2295.34, 41: 720.06, 42: 1909.80, 43: 1077.43, 44: 1180.71, 45: 1743.45, 46: 859.27, 47: 2056.21, 48: 1015.02, 49: 1125.34, 50: 751.83, 51: 1951.32, 52: 1547.17, 53: 816.77, 54: 1389.61, 55: 1051.12, 56: 1064.32, 57: 344.73, 58: 1548.55, 59: 1140.81, 60: 597.01, 61: 1183.32, 62: 881.15, 63: 773.61, 64: 1645.05, 65: 1711.34, 67: 1079.12, 68: 661.88, 69: 1898.04, 70: 2224.46, 71: 1361.03, 72: 954.75, 73: 1463.01, 74: 1080.08, 75: 2060.78, 76: 967.86, 77: 1916.76, 78: 1580.77, 79: 943.76, 80: 714.79, 81: 1594.66, 82: 1390.20, 83: 1480.35, 84: 1212.28, 85: 1329.98, 86: 897.98, 87: 1769.60, 88: 737.53, 89: 1222.65, 90: 1007.25, 91: 730.25, 92: 347.25, 93: 1918.60, 94: 1839.42, 95: 1849.31, 96: 1178.52, 97: 974.31, 98: 2053.31, 99: 2211.73},
67: {0: 1617.69, 1: 710.54, 2: 1020.78, 3: 2575.06, 4: 905.81, 5: 2014.44, 6: 740.95, 7: 1725.78, 8: 696.58, 9: 2315.19, 10: 2027.12, 11: 943.40, 12: 1033.01, 13: 1013.88, 14: 2090.68, 15: 2868.85, 16: 2102.09, 17: 2775.40, 18: 2382.97, 19: 976.57, 20: 2253.98, 21: 2938.72, 22: 1498.81, 23: 2788.63, 24: 444.53, 25: 2915.95, 26: 1079.38, 27: 1208.02, 28: 808.01, 29: 601.84, 30: 1882.71, 31: 1825.26, 32: 1100.04, 33: 741.98, 34: 1249.02, 35: 2676.13, 36: 905.04, 37: 2787.85, 38: 488.86, 39: 714.66, 40: 1354.14, 41: 1744.81, 42: 1133.75, 43: 458.31, 44: 1718.82, 45: 935.54, 46: 1698.64, 47: 1027.80, 48: 2059.46, 49: 319.51, 50: 641.84, 51: 872.89, 52: 2615.21, 53: 808.97, 54: 831.27, 55: 2104.29, 56: 777.01, 57: 913.76, 58: 2350.56, 59: 1324.42, 60: 609.20, 61: 1236.01, 62: 1893.93, 63: 634.44, 64: 2715.63, 65: 2786.74, 66: 1079.12, 68: 460.41, 69: 2974.34, 70: 1273.80, 71: 2253.54, 72: 266.72, 73: 2280.46, 74: 2158.86, 75: 1135.65, 76: 1159.70, 77: 837.86, 78: 2625.51, 79: 1940.58, 80: 406.87, 81: 775.77, 82: 813.55, 83: 2452.52, 84: 153.40, 85: 1110.26, 86: 638.80, 87: 2832.30, 88: 1694.94, 89: 2261.04, 90: 1613.64, 91: 1806.05, 92: 1223.40, 93: 2975.40, 94: 991.06, 95: 770.28, 96: 2250.83, 97: 1525.71, 98: 2972.74, 99: 1227.37},
68: {0: 1240.50, 1: 573.27, 2: 1423.78, 3: 2132.53, 4: 1316.71, 5: 1630.61, 6: 895.32, 7: 1289.13, 8: 845.19, 9: 1973.40, 10: 1807.75, 11: 1109.88, 12: 1314.33, 13: 1450.67, 14: 1889.44, 15: 2464.08, 16: 1899.30, 17: 2407.89, 18: 1963.40, 19: 1077.00, 20: 1979.45, 21: 2533.17, 22: 1350.30, 23: 2441.20, 24: 347.00, 25: 2463.06, 26: 1230.49, 27: 858.52, 28: 1210.75, 29: 1061.70, 30: 1422.65, 31: 1610.85, 32: 1400.45, 33: 1060.75, 34: 1370.00, 35: 2366.25, 36: 1302.00, 37: 2451.74, 38: 932.80, 39: 364.32, 40: 1794.06, 41: 1290.06, 42: 1509.71, 43: 447.68, 44: 1556.17, 45: 1317.65, 46: 1408.46, 47: 1486.46, 48: 1673.31, 49: 466.08, 50: 591.05, 51: 1321.34, 52: 2208.59, 53: 467.13, 54: 1088.54, 55: 1653.47, 56: 881.72, 57: 610.33, 58: 2094.64, 59: 1282.66, 60: 435.39, 61: 1243.63, 62: 1526.75, 63: 297.38, 64: 2270.70, 65: 2346.23, 66: 661.88, 67: 460.41, 69: 2555.10, 70: 1715.73, 71: 1953.20, 72: 292.88, 73: 2016.09, 74: 1734.13, 75: 1410.46, 76: 1093.81, 77: 1284.52, 78: 2240.45, 79: 1481.56, 80: 303.12, 81: 958.43, 82: 1078.23, 83: 2113.21, 84: 611.06, 85: 1231.23, 86: 687.12, 87: 2431.46, 88: 1234.89, 89: 1879.90, 90: 1416.12, 91: 1390.12, 92: 886.51, 93: 2580.34, 94: 1203.17, 95: 1216.38, 96: 1808.88, 97: 1344.86, 98: 2665.92, 99: 1678.04},
69: {0: 1386.56, 1: 2887.44, 2: 3630.58, 3: 554.48, 4: 3869.01, 5: 1007.92, 6: 2820.22, 7: 1275.73, 8: 2801.49, 9: 969.93, 10: 1690.80, 11: 2896.08, 12: 3829.44, 13: 3763.35, 14: 1767.32, 15: 214.85, 16: 1759.04, 17: 612.08, 18: 592.00, 19: 2746.32, 20: 1370.75, 21: 186.13, 22: 2066.96, 23: 788.38, 24: 2569.44, 25: 669.16, 26: 2897.43, 27: 1799.20, 28: 3464.42, 29: 3524.35, 30: 1380.56, 31: 1756.40, 32: 3923.72, 33: 3182.71, 34: 2863.55, 35: 1090.48, 36: 3856.75, 37: 884.17, 38: 3463.12, 39: 2560.74, 40: 4078.59, 41: 1362.22, 42: 3617.67, 43: 2936.40, 44: 1975.54, 45: 3492.01, 46: 1539.32, 47: 3908.42, 48: 961.00, 49: 3009.65, 50: 2515.04, 51: 3843.08, 52: 387.62, 53: 2557.44, 54: 3075.74, 55: 1018.43, 56: 2730.37, 57: 2100.56, 58: 1460.21, 59: 2403.29, 60: 2424.97, 61: 2539.28, 62: 1159.35, 63: 2595.79, 64: 512.00, 65: 400.22, 66: 1898.04, 67: 2974.34, 68: 2555.10, 70: 4018.17, 71: 1229.16, 72: 2846.36, 73: 1421.47, 74: 821.78, 75: 3916.00, 76: 2356.76, 77: 3809.65, 78: 518.42, 79: 1293.35, 80: 2589.97, 81: 3438.25, 82: 3085.79, 83: 924.43, 84: 3101.19, 85: 2825.32, 86: 2638.95, 87: 272.01, 88: 1509.87, 89: 803.70, 90: 1879.83, 91: 1168.44, 92: 1799.46, 93: 313.01, 94: 3675.57, 95: 3742.78, 96: 807.82, 97: 1960.62, 98: 1150.02, 99: 4029.17},
70: {0: 2635.28, 1: 1901.81, 2: 401.00, 3: 3704.46, 4: 1007.26, 5: 3011.41, 6: 1205.23, 7: 2865.05, 8: 1219.06, 9: 3192.03, 10: 2664.75, 11: 1183.26, 12: 1507.06, 13: 267.55, 14: 2677.85, 15: 3873.84, 16: 2690.88, 17: 3684.53, 18: 3448.19, 19: 1335.00, 20: 2983.12, 21: 3943.35, 22: 2104.34, 23: 3645.79, 24: 1521.87, 25: 4080.99, 26: 1242.33, 27: 2232.26, 28: 555.30, 29: 711.14, 30: 3106.05, 31: 2487.61, 32: 1481.00, 33: 838.63, 34: 1370.35, 35: 3448.00, 36: 1075.60, 37: 3616.54, 38: 955.26, 39: 1984.72, 40: 82.68, 41: 2939.08, 42: 489.84, 43: 1653.94, 44: 2295.38, 45: 538.68, 46: 2536.40, 47: 356.92, 48: 3058.47, 49: 1492.62, 50: 1510.68, 51: 752.16, 52: 3635.29, 53: 2074.39, 54: 967.35, 55: 3274.72, 56: 1297.58, 57: 1941.51, 58: 3025.95, 59: 1776.98, 60: 1632.07, 61: 1626.78, 62: 2864.13, 63: 1905.25, 64: 3850.65, 65: 3904.24, 66: 2224.46, 67: 1273.80, 68: 1715.73, 69: 4018.17, 71: 3041.14, 72: 1530.21, 73: 2983.45, 74: 3247.46, 75: 1571.10, 76: 1733.84, 77: 779.10, 78: 3587.86, 79: 3153.35, 80: 1522.28, 81: 1608.08, 82: 952.43, 83: 3312.63, 84: 1121.49, 85: 1323.35, 86: 1380.36, 87: 3827.63, 88: 2920.42, 89: 3234.57, 90: 2286.11, 91: 2890.55, 92: 2225.37, 93: 3949.04, 94: 1652.37, 95: 806.04, 96: 3386.62, 97: 2187.22, 98: 3715.53, 99: 121.43},
71: {0: 801.54, 1: 2458.65, 2: 2640.38, 3: 1293.39, 4: 3145.43, 5: 604.47, 6: 1850.60, 7: 1113.80, 8: 1848.37, 9: 269.65, 10: 467.09, 11: 1861.20, 12: 3254.74, 13: 2811.12, 14: 538.16, 15: 1023.14, 16: 529.92, 17: 697.25, 18: 923.64, 19: 1708.01, 20: 151.71, 21: 1078.69, 22: 947.27, 23: 613.94, 24: 1809.03, 25: 1684.60, 26: 1825.48, 27: 1099.24, 28: 2512.74, 29: 2691.15, 30: 1546.43, 31: 577.29, 32: 3334.12, 33: 2213.22, 34: 1749.71, 35: 423.79, 36: 3153.02, 37: 575.84, 38: 2709.45, 39: 2130.55, 40: 3088.49, 41: 1356.19, 42: 2589.22, 43: 2398.62, 44: 796.52, 45: 2502.51, 46: 554.91, 47: 3011.66, 48: 607.60, 49: 2408.26, 50: 1653.32, 51: 3049.07, 52: 885.87, 53: 2177.24, 54: 2073.96, 55: 1293.54, 56: 1757.82, 57: 1354.51, 58: 287.56, 59: 1290.85, 60: 1644.42, 61: 1440.04, 62: 562.23, 63: 2127.14, 64: 1404.09, 65: 1371.75, 66: 1361.03, 67: 2253.54, 68: 1953.20, 69: 1229.16, 70: 3041.14, 72: 2228.47, 73: 214.70, 74: 939.58, 75: 3354.00, 76: 1307.38, 77: 3022.93, 78: 710.74, 79: 1490.74, 80: 1848.11, 81: 2911.53, 82: 2089.51, 83: 314.24, 84: 2340.16, 85: 1746.16, 86: 1735.61, 87: 965.37, 88: 1529.99, 89: 549.60, 90: 758.60, 91: 909.30, 92: 1067.58, 93: 1024.54, 94: 3155.96, 95: 2962.40, 96: 1170.94, 97: 856.03, 98: 719.22, 99: 3078.00},
72: {0: 1531.16, 1: 462.24, 2: 1287.39, 3: 2416.40, 4: 1030.67, 5: 1922.57, 6: 934.85, 7: 1577.35, 8: 886.28, 9: 2259.18, 10: 2054.66, 11: 1147.97, 12: 1028.41, 13: 1273.98, 14: 2129.61, 15: 2756.81, 16: 2140.14, 17: 2698.60, 18: 2254.93, 19: 1154.25, 20: 2246.86, 21: 2825.86, 22: 1563.50, 23: 2728.73, 24: 483.80, 25: 2737.59, 26: 1280.44, 27: 1141.86, 28: 1074.73, 29: 838.50, 30: 1682.10, 31: 1854.62, 32: 1111.96, 33: 995.08, 34: 1440.49, 35: 2645.10, 36: 1012.79, 37: 2737.01, 38: 669.79, 39: 454.67, 40: 1611.42, 41: 1564.89, 42: 1399.66, 43: 232.74, 44: 1777.79, 45: 1201.60, 46: 1678.39, 47: 1264.80, 48: 1965.51, 49: 179.82, 50: 731.97, 51: 1056.08, 52: 2501.29, 53: 545.22, 54: 1067.16, 55: 1931.89, 56: 950.51, 57: 875.03, 58: 2356.20, 59: 1442.80, 60: 630.05, 61: 1376.89, 62: 1816.46, 63: 375.71, 64: 2552.87, 65: 2630.96, 66: 954.75, 67: 266.72, 68: 292.88, 69: 2846.36, 70: 1530.21, 71: 2228.47, 73: 2280.27, 74: 2024.95, 75: 1126.43, 76: 1262.91, 77: 1017.82, 78: 2532.85, 79: 1746.14, 80: 432.83, 81: 691.40, 82: 1051.58, 83: 2398.70, 84: 411.62, 85: 1299.52, 86: 778.92, 87: 2724.32, 88: 1495.37, 89: 2171.80, 90: 1651.45, 91: 1682.52, 92: 1166.69, 93: 2873.21, 94: 932.18, 95: 949.96, 96: 2093.59, 97: 1572.38, 98: 2944.44, 99: 1477.01},
73: {0: 941.98, 1: 2543.91, 2: 2582.75, 3: 1507.78, 4: 3156.85, 5: 802.89, 6: 1814.36, 7: 1291.33, 8: 1817.95, 9: 480.59, 10: 328.69, 11: 1800.28, 12: 3298.39, 13: 2763.84, 14: 364.92, 15: 1211.14, 16: 354.15, 17: 857.32, 18: 1138.32, 19: 1649.46, 20: 66.01, 21: 1262.40, 22: 879.72, 23: 740.77, 24: 1838.05, 25: 1896.99, 26: 1749.99, 27: 1181.68, 28: 2469.58, 29: 2680.53, 30: 1736.07, 31: 496.46, 32: 3373.68, 33: 2169.10, 34: 1656.49, 35: 475.79, 36: 3169.09, 37: 679.83, 38: 2719.47, 39: 2223.21, 40: 3026.09, 41: 1537.35, 42: 2518.81, 43: 2463.76, 44: 694.95, 45: 2446.94, 46: 611.31, 47: 2978.88, 48: 811.05, 49: 2459.66, 50: 1658.82, 51: 3044.06, 52: 1091.46, 53: 2277.78, 54: 2021.14, 55: 1498.19, 56: 1723.07, 57: 1407.28, 58: 89.00, 59: 1210.66, 60: 1673.96, 61: 1361.71, 62: 737.83, 63: 2212.60, 64: 1617.22, 65: 1582.39, 66: 1463.01, 67: 2280.46, 68: 2016.09, 69: 1421.47, 70: 2983.45, 71: 214.70, 72: 2280.27, 74: 1149.53, 75: 3399.15, 76: 1257.62, 77: 3020.12, 78: 905.06, 79: 1684.50, 80: 1880.72, 81: 2969.73, 82: 2038.37, 83: 497.04, 84: 2355.00, 85: 1669.23, 86: 1725.12, 87: 1153.01, 88: 1706.88, 89: 764.23, 90: 705.44, 91: 1090.95, 92: 1144.21, 93: 1195.61, 94: 3212.20, 95: 2961.99, 96: 1382.49, 97: 804.61, 98: 732.32, 99: 3028.15},
74: {0: 628.05, 1: 2076.21, 2: 2870.34, 3: 477.20, 4: 3049.35, 5: 374.23, 6: 2070.02, 7: 456.98, 8: 2045.11, 9: 712.20, 10: 1280.11, 11: 2174.95, 12: 3009.98, 13: 2986.96, 14: 1386.39, 15: 755.79, 16: 1383.58, 17: 853.80, 18: 234.08, 19: 2032.81, 20: 1083.66, 21: 820.95, 22: 1458.53, 23: 979.40, 24: 1765.36, 25: 890.02, 26: 2198.62, 27: 1015.33, 28: 2692.19, 29: 2720.01, 30: 697.40, 31: 1252.95, 32: 3103.65, 33: 2422.60, 34: 2196.94, 35: 1115.29, 36: 3036.08, 37: 1044.09, 38: 2647.64, 39: 1745.76, 40: 3312.19, 41: 591.49, 42: 2875.02, 43: 2116.01, 44: 1440.70, 45: 2733.83, 46: 930.82, 47: 3114.23, 48: 349.32, 49: 2187.88, 50: 1736.78, 51: 3030.19, 52: 506.35, 53: 1748.61, 54: 2332.22, 55: 370.00, 56: 1984.54, 57: 1308.77, 58: 1227.06, 59: 1759.71, 60: 1628.65, 61: 1876.57, 62: 512.64, 63: 1777.67, 64: 623.03, 65: 659.88, 66: 1080.08, 67: 2158.86, 68: 1734.13, 69: 821.78, 70: 3247.46, 71: 939.58, 72: 2024.95, 73: 1149.53, 75: 3097.62, 76: 1670.61, 77: 2996.02, 78: 629.05, 79: 620.74, 80: 1782.29, 81: 2620.77, 82: 2339.47, 83: 797.30, 84: 2289.39, 85: 2134.17, 86: 1869.64, 87: 735.85, 88: 764.39, 89: 416.45, 90: 1296.44, 91: 358.47, 92: 1024.71, 93: 895.64, 94: 2859.81, 95: 2928.74, 96: 236.54, 97: 1351.93, 98: 1351.66, 99: 3249.33},
75: {0: 2648.72, 1: 1045.02, 2: 1615.07, 3: 3443.82, 4: 564.02, 5: 3034.31, 6: 1810.52, 7: 2641.09, 8: 1776.01, 9: 3383.75, 10: 3158.02, 11: 1975.97, 12: 102.83, 13: 1446.33, 14: 3224.59, 15: 3845.84, 16: 3235.83, 17: 3814.70, 18: 3331.30, 19: 2052.31, 20: 3368.21, 21: 3913.52, 22: 2634.44, 23: 3851.53, 24: 1565.92, 25: 3715.82, 26: 2108.31, 27: 2267.42, 28: 1485.90, 29: 1045.78, 30: 2637.32, 31: 2956.32, 32: 92.20, 33: 1639.01, 34: 2286.50, 35: 3771.41, 36: 496.33, 37: 3861.99, 38: 829.67, 39: 1357.63, 40: 1642.17, 41: 2576.16, 42: 1784.63, 43: 985.43, 44: 2854.46, 45: 1629.21, 46: 2802.28, 47: 1216.15, 48: 3075.65, 49: 947.11, 50: 1777.49, 51: 821.93, 52: 3590.55, 53: 1374.40, 54: 1791.40, 55: 2944.68, 56: 1869.85, 57: 1999.56, 58: 3472.69, 59: 2445.43, 60: 1727.95, 61: 2342.41, 62: 2935.95, 63: 1320.24, 64: 3569.72, 65: 3659.81, 66: 2060.78, 67: 1135.65, 68: 1410.46, 69: 3916.00, 70: 1571.10, 71: 3354.00, 72: 1126.43, 73: 3399.15, 74: 3097.62, 76: 2289.65, 77: 800.16, 78: 3640.07, 79: 2715.00, 80: 1520.80, 81: 478.76, 82: 1768.51, 83: 3523.50, 84: 1105.21, 85: 2160.00, 86: 1763.55, 87: 3817.62, 88: 2464.21, 89: 3283.40, 90: 2746.49, 91: 2772.59, 92: 2293.01, 93: 3970.88, 94: 259.79, 95: 791.94, 96: 3130.46, 97: 2660.11, 98: 4070.66, 99: 1457.12},
76: {0: 1048.43, 1: 1663.86, 2: 1333.01, 3: 2147.80, 4: 1957.63, 5: 1361.38, 6: 560.02, 7: 1411.56, 8: 569.57, 9: 1469.71, 10: 951.16, 11: 555.64, 12: 2186.84, 13: 1507.46, 14: 986.43, 15: 2189.99, 16: 999.03, 17: 1962.94, 18: 1830.41, 19: 402.06, 20: 1252.62, 21: 2257.49, 22: 382.24, 23: 1914.37, 24: 780.86, 25: 2558.13, 26: 540.77, 27: 760.49, 28: 1212.05, 29: 1446.57, 30: 1810.37, 31: 761.84, 32: 2246.45, 33: 911.55, 34: 527.75, 35: 1715.76, 36: 1980.47, 37: 1882.99, 38: 1526.24, 39: 1430.10, 40: 1781.32, 41: 1588.69, 42: 1286.42, 43: 1489.32, 44: 595.63, 45: 1195.30, 46: 824.15, 47: 1722.50, 48: 1406.59, 49: 1422.45, 50: 531.52, 51: 1814.77, 52: 1969.17, 53: 1522.67, 54: 767.01, 55: 1823.68, 56: 471.27, 57: 643.12, 58: 1307.85, 59: 191.02, 60: 658.48, 61: 221.42, 62: 1204.76, 63: 1379.34, 64: 2293.36, 65: 2320.61, 66: 967.86, 67: 1159.70, 68: 1093.81, 69: 2356.76, 70: 1733.84, 71: 1307.38, 72: 1262.91, 73: 1257.62, 74: 1670.61, 75: 2289.65, 77: 1794.75, 78: 1888.40, 79: 1818.62, 80: 832.33, 81: 1926.45, 82: 783.13, 83: 1584.52, 84: 1188.69, 85: 469.13, 86: 526.64, 87: 2139.31, 88: 1663.20, 89: 1554.01, 90: 553.93, 91: 1347.46, 92: 724.56, 93: 2246.72, 94: 2149.70, 95: 1741.62, 96: 1863.10, 97: 454.58, 98: 1989.19, 99: 1773.05},
77: {0: 2442.33, 1: 1262.33, 2: 832.66, 3: 3412.10, 4: 242.17, 5: 2838.77, 6: 1245.83, 7: 2563.43, 8: 1227.73, 9: 3113.28, 10: 2735.06, 11: 1354.71, 12: 730.03, 13: 649.06, 14: 2779.34, 15: 3699.19, 16: 2791.77, 17: 3586.25, 18: 3218.94, 19: 1468.42, 20: 3002.80, 21: 3769.23, 22: 2172.46, 23: 3586.05, 24: 1248.88, 25: 3747.58, 26: 1471.81, 27: 2027.98, 28: 742.05, 29: 351.57, 30: 2699.37, 31: 2537.25, 32: 712.83, 33: 968.92, 34: 1644.66, 35: 3446.35, 36: 305.63, 37: 3577.09, 38: 351.76, 39: 1441.52, 40: 854.42, 41: 2574.52, 42: 1003.69, 43: 1049.21, 44: 2389.80, 45: 871.56, 46: 2473.86, 47: 422.21, 48: 2884.54, 49: 905.88, 50: 1369.76, 51: 40.00, 52: 3446.79, 53: 1510.47, 54: 1136.60, 55: 2937.57, 56: 1327.42, 57: 1726.95, 58: 3081.14, 59: 1911.84, 60: 1405.16, 61: 1782.40, 62: 2711.32, 63: 1370.83, 64: 3552.04, 65: 3624.21, 66: 1916.76, 67: 837.86, 68: 1284.52, 69: 3809.65, 70: 779.10, 71: 3022.93, 72: 1017.82, 73: 3020.12, 74: 2996.02, 75: 800.16, 76: 1794.75, 78: 3447.22, 79: 2762.09, 80: 1223.00, 81: 858.12, 82: 1113.44, 83: 3247.42, 84: 709.14, 85: 1538.63, 86: 1295.17, 87: 3661.01, 88: 2512.30, 89: 3082.58, 90: 2322.14, 91: 2642.06, 92: 2037.97, 93: 3801.02, 94: 875.13, 95: 68.15, 96: 3087.91, 97: 2225.68, 98: 3736.75, 99: 671.32},
78: {0: 1007.91, 1: 2647.11, 2: 3193.36, 3: 718.36, 4: 3530.73, 5: 611.66, 6: 2382.86, 7: 1047.85, 8: 2369.32, 9: 454.23, 10: 1173.36, 11: 2438.24, 12: 3547.62, 13: 3340.40, 14: 1248.91, 15: 315.63, 16: 1240.62, 17: 229.65, 18: 441.49, 19: 2285.95, 20: 853.00, 21: 376.97, 22: 1575.31, 23: 386.26, 24: 2198.37, 25: 1043.35, 26: 2427.70, 27: 1419.61, 28: 3039.50, 29: 3142.15, 30: 1321.00, 31: 1247.60, 32: 3637.16, 33: 2749.23, 34: 2380.39, 35: 627.78, 36: 3525.83, 37: 471.83, 38: 3109.30, 39: 2311.33, 40: 3643.89, 41: 1217.72, 42: 3167.06, 43: 2654.97, 44: 1468.53, 45: 3054.12, 46: 1064.25, 47: 3506.41, 48: 567.67, 49: 2705.59, 50: 2108.33, 51: 3478.25, 52: 223.01, 53: 2327.54, 54: 2630.39, 55: 969.03, 56: 2290.91, 57: 1720.31, 58: 948.13, 59: 1917.21, 60: 2043.41, 61: 2058.25, 62: 737.01, 63: 2332.51, 64: 784.66, 65: 720.15, 66: 1580.77, 67: 2625.51, 68: 2240.45, 69: 518.42, 70: 3587.86, 71: 710.74, 72: 2532.85, 73: 905.06, 74: 629.05, 75: 3640.07, 76: 1888.40, 77: 3447.22, 79: 1240.45, 80: 2225.86, 81: 3169.93, 82: 2642.37, 83: 408.88, 84: 2739.85, 85: 2352.76, 86: 2220.79, 87: 259.33, 88: 1392.84, 89: 364.73, 90: 1385.14, 91: 878.32, 92: 1409.54, 93: 361.19, 94: 3413.31, 95: 3382.08, 96: 767.29, 97: 1471.24, 98: 782.97, 99: 3608.22},
79: {0: 862.97, 1: 1670.00, 2: 2811.81, 3: 758.02, 4: 2768.48, 5: 886.49, 6: 2071.42, 7: 438.51, 8: 2034.62, 9: 1301.62, 10: 1733.54, 11: 2226.23, 12: 2637.90, 13: 2885.92, 14: 1846.29, 15: 1301.41, 16: 1846.85, 17: 1468.70, 18: 806.11, 19: 2106.70, 20: 1619.41, 21: 1355.98, 22: 1729.44, 23: 1599.88, 24: 1632.34, 25: 1002.88, 26: 2285.96, 27: 1060.06, 28: 2611.67, 29: 2538.39, 30: 87.21, 31: 1646.48, 32: 2736.55, 33: 2382.40, 34: 2332.21, 35: 1725.14, 36: 2742.59, 37: 1664.62, 38: 2411.32, 39: 1370.76, 40: 3226.64, 41: 231.14, 42: 2853.29, 43: 1773.90, 44: 1785.82, 45: 2684.80, 46: 1286.10, 47: 2958.37, 48: 888.05, 49: 1881.55, 50: 1695.08, 51: 2799.70, 52: 1081.12, 53: 1341.46, 54: 2332.12, 55: 280.80, 56: 2001.03, 57: 1273.08, 58: 1769.59, 59: 1958.05, 60: 1538.73, 61: 2039.77, 62: 954.08, 63: 1424.40, 64: 866.85, 65: 967.50, 66: 943.76, 67: 1940.58, 68: 1481.56, 69: 1293.35, 70: 3153.35, 71: 1490.74, 72: 1746.14, 73: 1684.50, 74: 620.74, 75: 2715.00, 76: 1818.62, 77: 2762.09, 78: 1240.45, 80: 1631.21, 81: 2238.41, 82: 2333.26, 83: 1403.62, 84: 2088.17, 85: 2237.51, 86: 1840.94, 87: 1297.66, 88: 253.29, 89: 1022.61, 90: 1614.13, 91: 606.07, 92: 1094.15, 93: 1457.09, 94: 2462.66, 95: 2693.99, 96: 496.86, 97: 1635.81, 98: 1970.91, 99: 3132.05},
80: {0: 1219.59, 1: 842.63, 2: 1192.82, 3: 2215.77, 4: 1310.25, 5: 1616.27, 6: 593.67, 7: 1365.78, 8: 543.74, 9: 1908.69, 10: 1638.25, 11: 807.37, 12: 1419.32, 13: 1254.78, 14: 1708.17, 15: 2476.31, 16: 1719.08, 17: 2371.36, 18: 2001.03, 19: 775.34, 20: 1852.20, 21: 2546.38, 22: 1132.86, 23: 2382.22, 24: 51.48, 25: 2574.95, 26: 927.37, 27: 806.31, 28: 986.22, 29: 938.04, 30: 1584.06, 31: 1436.86, 32: 1493.08, 33: 793.30, 34: 1068.32, 35: 2270.21, 36: 1311.48, 37: 2381.00, 38: 883.63, 39: 667.44, 40: 1596.15, 41: 1419.09, 42: 1257.83, 43: 657.01, 44: 1348.90, 45: 1074.29, 46: 1293.26, 47: 1341.46, 48: 1661.88, 49: 601.05, 50: 305.31, 51: 1255.19, 52: 2224.30, 53: 770.17, 54: 799.72, 55: 1763.52, 56: 578.73, 57: 508.33, 58: 1952.87, 59: 1015.20, 60: 207.17, 61: 960.08, 62: 1491.66, 63: 599.10, 64: 2359.34, 65: 2423.58, 66: 714.79, 67: 406.87, 68: 303.12, 69: 2589.97, 70: 1522.28, 71: 1848.11, 72: 432.83, 73: 1880.72, 74: 1782.29, 75: 1520.80, 76: 832.33, 77: 1223.00, 78: 2225.86, 79: 1631.21, 81: 1114.47, 82: 791.62, 83: 2045.83, 84: 514.25, 85: 929.00, 86: 385.22, 87: 2438.01, 88: 1399.00, 89: 1861.14, 90: 1229.30, 91: 1425.40, 92: 819.15, 93: 2578.43, 94: 1349.02, 95: 1157.16, 96: 1892.73, 97: 1146.61, 98: 2567.31, 99: 1502.28},
81: {0: 2186.07, 1: 569.94, 2: 1530.89, 3: 2965.16, 4: 704.49, 5: 2567.16, 6: 1508.62, 7: 2163.98, 8: 1466.81, 9: 2927.25, 10: 2745.90, 11: 1700.40, 12: 399.85, 13: 1415.41, 14: 2819.89, 15: 3370.58, 16: 2830.54, 17: 3348.78, 18: 2854.63, 19: 1748.05, 20: 2935.03, 21: 3437.96, 22: 2246.67, 23: 3391.59, 24: 1163.52, 25: 3240.19, 26: 1836.78, 27: 1816.15, 28: 1355.38, 29: 941.76, 30: 2161.56, 31: 2545.64, 32: 499.41, 33: 1424.00, 34: 2011.20, 35: 3324.45, 36: 646.30, 37: 3405.70, 38: 680.92, 39: 878.93, 40: 1688.35, 41: 2097.48, 42: 1687.28, 43: 517.72, 44: 2463.33, 45: 1503.61, 46: 2364.98, 47: 1261.11, 48: 2607.65, 49: 514.58, 50: 1397.84, 51: 894.56, 52: 3115.56, 53: 897.04, 54: 1552.19, 55: 2466.17, 56: 1551.08, 57: 1562.69, 58: 3046.45, 59: 2096.74, 60: 1317.77, 61: 2011.66, 62: 2474.04, 63: 843.13, 64: 3091.41, 65: 3181.17, 66: 1594.66, 67: 775.77, 68: 958.43, 69: 3438.25, 70: 1608.08, 71: 2911.53, 72: 691.40, 73: 2969.73, 74: 2620.77, 75: 478.76, 76: 1926.45, 77: 858.12, 78: 3169.93, 79: 2238.41, 80: 1114.47, 82: 1531.17, 83: 3067.26, 84: 801.48, 85: 1875.29, 86: 1412.57, 87: 3343.23, 88: 1987.02, 89: 2815.71, 90: 2341.31, 91: 2299.00, 92: 1844.88, 93: 3497.37, 94: 245.31, 95: 813.46, 96: 2651.72, 97: 2260.50, 98: 3624.14, 99: 1512.41},
82: {0: 1715.55, 1: 1513.23, 2: 552.95, 3: 2808.11, 4: 1319.49, 5: 2078.01, 6: 269.68, 7: 1992.99, 8: 299.92, 9: 2240.56, 10: 1725.00, 11: 250.87, 12: 1670.75, 13: 725.58, 14: 1747.40, 15: 2933.65, 16: 1760.34, 17: 2733.48, 18: 2528.07, 19: 391.49, 20: 2035.22, 21: 3002.66, 22: 1158.86, 23: 2693.36, 24: 764.23, 25: 3200.73, 26: 358.45, 27: 1331.54, 28: 436.32, 29: 767.57, 30: 2300.21, 31: 1541.91, 32: 1703.78, 33: 145.96, 34: 532.02, 35: 2498.85, 36: 1359.94, 37: 2664.59, 38: 939.67, 39: 1431.69, 40: 1003.53, 41: 2106.81, 42: 535.56, 43: 1268.25, 44: 1358.76, 45: 414.04, 46: 1585.81, 47: 957.05, 48: 2124.86, 49: 1132.64, 50: 638.38, 51: 1123.64, 52: 2700.12, 53: 1535.01, 54: 23.35, 55: 2412.39, 56: 356.04, 57: 1065.77, 58: 2084.98, 59: 846.22, 60: 805.73, 61: 701.62, 62: 1927.05, 63: 1355.34, 64: 2955.26, 65: 2999.35, 66: 1390.20, 67: 813.55, 68: 1078.23, 69: 3085.79, 70: 952.43, 71: 2089.51, 72: 1051.58, 73: 2038.37, 74: 2339.47, 75: 1768.51, 76: 783.13, 77: 1113.44, 78: 2642.37, 79: 2333.26, 80: 791.62, 81: 1531.17, 83: 2360.37, 84: 735.87, 85: 427.93, 86: 492.33, 87: 2885.93, 88: 2123.88, 89: 2293.55, 90: 1336.79, 91: 1988.79, 92: 1316.62, 93: 3003.27, 94: 1703.20, 95: 1074.59, 96: 2499.12, 97: 1237.55, 98: 2770.59, 99: 990.12},
83: {0: 888.47, 1: 2581.30, 2: 2913.17, 3: 1061.23, 4: 3354.74, 5: 560.97, 6: 2112.27, 7: 1092.48, 8: 2105.55, 9: 140.04, 10: 781.22, 11: 2140.16, 12: 3426.64, 13: 3075.61, 14: 848.07, 15: 714.58, 16: 839.03, 17: 386.80, 18: 711.00, 19: 1986.58, 20: 447.60, 21: 767.52, 22: 1239.90, 23: 338.92, 24: 2011.27, 25: 1427.27, 26: 2113.52, 27: 1256.96, 28: 2775.34, 29: 2924.95, 30: 1471.85, 31: 882.78, 32: 3510.57, 33: 2478.19, 34: 2047.36, 35: 322.02, 36: 3357.30, 37: 338.54, 38: 2922.74, 39: 2246.48, 40: 3363.22, 41: 1313.68, 42: 2870.86, 43: 2549.87, 44: 1104.09, 45: 2774.40, 46: 782.16, 47: 3263.67, 48: 539.42, 49: 2577.02, 50: 1881.77, 51: 3275.60, 52: 606.39, 53: 2280.45, 54: 2346.10, 55: 1167.23, 56: 2019.24, 57: 1539.68, 58: 539.71, 59: 1585.20, 60: 1848.85, 61: 1732.20, 62: 603.52, 63: 2253.72, 64: 1154.48, 65: 1106.68, 66: 1480.35, 67: 2452.52, 68: 2113.21, 69: 924.43, 70: 3312.63, 71: 314.24, 72: 2398.70, 73: 497.04, 74: 797.30, 75: 3523.50, 76: 1584.52, 77: 3247.42, 78: 408.88, 79: 1403.62, 80: 2045.83, 81: 3067.26, 82: 2360.37, 84: 2551.28, 85: 2035.46, 86: 1977.43, 87: 656.49, 88: 1493.86, 89: 382.15, 90: 1048.56, 91: 889.64, 92: 1234.34, 93: 710.30, 94: 3312.57, 95: 3184.81, 96: 1005.63, 97: 1142.51, 98: 593.33, 99: 3343.53},
84: {0: 1733.84, 1: 832.31, 2: 880.57, 3: 2712.55, 4: 805.35, 5: 2130.50, 6: 714.19, 7: 1862.13, 8: 675.88, 9: 2415.41, 10: 2088.98, 11: 899.55, 12: 1002.73, 13: 863.02, 14: 2146.06, 15: 2990.09, 16: 2157.86, 17: 2882.94, 18: 2510.97, 19: 956.06, 20: 2332.05, 21: 3060.13, 22: 1545.29, 23: 2888.97, 24: 542.44, 25: 3058.68, 26: 1035.77, 27: 1320.25, 28: 670.23, 29: 450.87, 30: 2031.61, 31: 1887.69, 32: 1058.42, 33: 643.61, 34: 1211.06, 35: 2763.82, 36: 814.26, 37: 2884.20, 38: 371.55, 39: 864.43, 40: 1202.13, 41: 1889.48, 42: 1002.29, 43: 575.88, 44: 1766.09, 45: 804.19, 46: 1786.53, 47: 875.56, 48: 2176.13, 49: 420.95, 50: 697.83, 51: 741.97, 52: 2737.66, 53: 956.73, 54: 755.91, 55: 2246.39, 56: 766.85, 57: 1020.53, 58: 2421.83, 59: 1340.49, 60: 702.67, 61: 1238.13, 62: 2004.97, 63: 784.55, 64: 2854.15, 65: 2923.07, 66: 1212.28, 67: 153.40, 68: 611.06, 69: 3101.19, 70: 1121.49, 71: 2340.16, 72: 411.62, 73: 2355.00, 74: 2289.39, 75: 1105.21, 76: 1188.69, 77: 709.14, 78: 2739.85, 79: 2088.17, 80: 514.25, 81: 801.48, 82: 735.87, 83: 2551.28, 85: 1076.70, 86: 662.22, 87: 2952.07, 88: 1843.87, 89: 2375.13, 90: 1673.59, 91: 1934.30, 92: 1331.79, 93: 3092.68, 94: 993.32, 95: 643.01, 96: 2388.43, 97: 1581.89, 98: 3058.24, 99: 1074.01},
85: {0: 1508.30, 1: 1752.07, 2: 926.74, 3: 2611.06, 4: 1738.27, 5: 1830.30, 6: 369.43, 7: 1849.80, 8: 415.41, 9: 1926.37, 10: 1346.00, 11: 185.97, 12: 2059.72, 13: 1125.88, 14: 1354.89, 15: 2656.63, 16: 1367.93, 17: 2418.08, 18: 2298.44, 19: 155.43, 20: 1674.06, 21: 2723.72, 22: 798.91, 23: 2358.90, 24: 884.30, 25: 3018.81, 26: 81.15, 27: 1181.79, 28: 854.16, 29: 1189.93, 30: 2219.83, 31: 1177.43, 32: 2101.17, 33: 573.89, 34: 141.06, 35: 2139.99, 36: 1775.14, 37: 2320.75, 38: 1340.15, 39: 1594.95, 40: 1360.78, 41: 2006.38, 42: 850.00, 43: 1531.00, 44: 976.00, 45: 797.52, 46: 1289.60, 47: 1375.82, 48: 1875.61, 49: 1421.04, 50: 657.14, 51: 1550.06, 52: 2437.80, 53: 1696.79, 54: 405.42, 55: 2267.73, 56: 352.37, 57: 985.29, 58: 1707.07, 59: 458.63, 60: 841.61, 61: 307.65, 62: 1673.80, 63: 1528.03, 64: 2757.20, 65: 2787.09, 66: 1329.98, 67: 1110.26, 68: 1231.23, 69: 2825.32, 70: 1323.35, 71: 1746.16, 72: 1299.52, 73: 1669.23, 74: 2134.17, 75: 2160.00, 76: 469.13, 77: 1538.63, 78: 2352.76, 79: 2237.51, 80: 929.00, 81: 1875.29, 82: 427.93, 83: 2035.46, 84: 1076.70, 86: 544.11, 87: 2605.35, 88: 2059.28, 89: 2022.14, 90: 988.34, 91: 1803.18, 92: 1153.32, 93: 2709.48, 94: 2069.11, 95: 1497.33, 96: 2320.32, 97: 893.01, 98: 2399.08, 99: 1380.07},
86: {0: 1254.93, 1: 1218.50, 2: 1001.00, 3: 2332.15, 4: 1442.08, 5: 1633.84, 6: 237.99, 7: 1506.36, 8: 195.49, 9: 1848.41, 10: 1442.34, 11: 435.78, 12: 1660.76, 13: 1124.46, 14: 1492.38, 15: 2499.23, 16: 1504.49, 17: 2334.45, 18: 2067.94, 19: 390.13, 20: 1708.91, 21: 2569.07, 22: 887.39, 23: 2315.88, 24: 340.21, 25: 2718.66, 26: 546.80, 27: 854.78, 28: 825.68, 29: 956.66, 30: 1808.18, 31: 1243.22, 32: 1719.82, 33: 554.59, 34: 683.12, 35: 2157.45, 36: 1461.12, 37: 2299.23, 38: 1006.81, 39: 1050.92, 40: 1443.26, 41: 1614.68, 42: 1018.46, 43: 1011.48, 44: 1107.77, 45: 865.43, 46: 1195.81, 47: 1288.40, 48: 1680.91, 49: 921.65, 50: 146.37, 51: 1318.94, 52: 2257.57, 53: 1152.95, 54: 491.71, 55: 1924.32, 56: 197.52, 57: 576.32, 58: 1786.06, 59: 685.72, 60: 324.14, 61: 601.82, 62: 1489.50, 63: 984.00, 64: 2479.02, 65: 2528.25, 66: 897.98, 67: 638.80, 68: 687.12, 69: 2638.95, 70: 1380.36, 71: 1735.61, 72: 778.92, 73: 1725.12, 74: 1869.64, 75: 1763.55, 76: 526.64, 77: 1295.17, 78: 2220.79, 79: 1840.94, 80: 385.22, 81: 1412.57, 82: 492.33, 83: 1977.43, 84: 662.22, 85: 544.11, 87: 2454.59, 88: 1632.71, 89: 1862.38, 90: 1027.98, 91: 1514.46, 92: 845.65, 93: 2581.38, 94: 1629.71, 95: 1237.79, 96: 2018.75, 97: 932.62, 98: 2444.81, 99: 1390.86},
87: {0: 1219.45, 1: 2806.43, 2: 3435.26, 3: 644.05, 4: 3734.72, 5: 825.11, 6: 2624.00, 7: 1187.77, 8: 2608.58, 9: 713.08, 10: 1430.24, 11: 2686.40, 12: 3727.58, 13: 3577.38, 14: 1502.97, 15: 58.14, 16: 1494.30, 17: 346.17, 18: 506.74, 19: 2534.78, 20: 1103.96, 21: 118.60, 22: 1832.30, 23: 526.27, 24: 2413.33, 25: 882.16, 26: 2679.52, 27: 1634.96, 28: 3276.92, 29: 3363.45, 30: 1383.13, 31: 1506.93, 32: 3819.33, 33: 2989.42, 34: 2635.85, 35: 821.52, 36: 3726.75, 37: 622.27, 38: 3319.09, 39: 2473.47, 40: 3885.23, 41: 1319.89, 42: 3413.44, 43: 2832.73, 44: 1727.82, 45: 3296.14, 46: 1315.78, 47: 3735.79, 48: 778.54, 49: 2893.43, 50: 2337.47, 51: 3693.04, 52: 229.75, 53: 2480.85, 54: 2874.60, 55: 1017.01, 56: 2532.67, 57: 1937.45, 58: 1189.55, 59: 2173.13, 60: 2262.26, 61: 2312.98, 62: 965.11, 63: 2501.03, 64: 662.15, 65: 570.64, 66: 1769.60, 67: 2832.30, 68: 2431.46, 69: 272.01, 70: 3827.63, 71: 965.37, 72: 2724.32, 73: 1153.01, 74: 735.85, 75: 3817.62, 76: 2139.31, 77: 3661.01, 78: 259.33, 79: 1297.66, 80: 2438.01, 81: 3343.23, 82: 2885.93, 83: 656.49, 84: 2952.07, 85: 2605.35, 86: 2454.59, 88: 1484.52, 89: 593.06, 90: 1642.66, 91: 1045.31, 92: 1629.26, 93: 160.88, 94: 3584.44, 95: 3595.08, 96: 801.51, 97: 1727.62, 98: 904.76, 99: 3844.69},
88: {0: 806.49, 1: 1419.51, 2: 2587.07, 3: 992.36, 4: 2515.89, 5: 942.65, 6: 1867.18, 7: 416.33, 8: 1827.89, 9: 1376.94, 10: 1707.30, 11: 2033.10, 12: 2386.26, 13: 2652.87, 14: 1820.12, 15: 1495.20, 16: 1822.46, 17: 1615.11, 18: 979.61, 19: 1921.82, 20: 1644.19, 21: 1554.38, 22: 1621.67, 23: 1728.53, 24: 1403.70, 25: 1255.83, 26: 2102.26, 27: 905.28, 28: 2383.80, 29: 2294.63, 30: 187.77, 31: 1594.01, 32: 2484.68, 33: 2164.62, 34: 2162.40, 35: 1814.51, 36: 2489.62, 37: 1783.48, 38: 2162.05, 39: 1117.66, 40: 2994.92, 41: 180.42, 42: 2636.05, 43: 1520.61, 44: 1706.83, 45: 2462.78, 46: 1234.53, 47: 2716.59, 48: 956.62, 49: 1628.88, 50: 1486.34, 51: 2550.13, 52: 1259.48, 53: 1090.00, 54: 2124.24, 55: 494.50, 56: 1801.84, 57: 1078.72, 58: 1794.84, 59: 1816.50, 60: 1321.44, 61: 1884.22, 62: 970.22, 63: 1171.11, 64: 1109.76, 65: 1205.90, 66: 737.53, 67: 1694.94, 68: 1234.89, 69: 1509.87, 70: 2920.42, 71: 1529.99, 72: 1495.37, 73: 1706.88, 74: 764.39, 75: 2464.21, 76: 1663.20, 77: 2512.30, 78: 1392.84, 79: 253.29, 80: 1399.00, 81: 1987.02, 82: 2123.88, 83: 1493.86, 84: 1843.87, 85: 2059.28, 86: 1632.71, 87: 1484.52, 89: 1125.10, 90: 1529.61, 91: 621.09, 92: 945.40, 93: 1645.37, 94: 2212.87, 95: 2444.27, 96: 702.12, 97: 1536.58, 98: 2079.50, 99: 2895.38},
89: {0: 643.77, 1: 2301.80, 2: 2842.38, 3: 747.47, 4: 3166.42, 5: 249.33, 6: 2031.08, 7: 738.87, 8: 2015.52, 9: 300.03, 10: 954.11, 11: 2096.93, 12: 3189.99, 13: 2984.55, 14: 1049.49, 15: 640.10, 16: 1044.18, 17: 535.09, 18: 375.59, 19: 1946.11, 20: 700.16, 21: 709.19, 22: 1266.82, 23: 612.41, 24: 1833.70, 25: 1148.95, 26: 2094.78, 27: 1054.88, 28: 2684.01, 29: 2778.52, 30: 1092.47, 31: 979.46, 32: 3278.59, 33: 2396.38, 34: 2060.02, 35: 702.76, 36: 3161.96, 37: 659.76, 38: 2744.59, 39: 1965.33, 40: 3292.25, 41: 944.77, 42: 2822.24, 43: 2299.34, 44: 1191.92, 45: 2703.29, 46: 735.83, 47: 3145.68, 48: 208.12, 49: 2345.63, 50: 1747.16, 51: 3113.67, 52: 417.08, 53: 1987.42, 54: 2282.46, 55: 785.86, 56: 1939.87, 57: 1355.71, 58: 834.23, 59: 1600.49, 60: 1679.10, 61: 1735.66, 62: 373.98, 63: 1982.53, 64: 865.92, 65: 847.85, 66: 1222.65, 67: 2261.04, 68: 1879.90, 69: 803.70, 70: 3234.57, 71: 549.60, 72: 2171.80, 73: 764.23, 74: 416.45, 75: 3283.40, 76: 1554.01, 77: 3082.58, 78: 364.73, 79: 1022.61, 80: 1861.14, 81: 2815.71, 82: 2293.55, 83: 382.15, 84: 2375.13, 85: 2022.14, 86: 1862.38, 87: 593.06, 88: 1125.10, 90: 1082.39, 91: 547.53, 92: 1045.12, 93: 721.00, 94: 3059.86, 95: 3017.39, 96: 633.91, 97: 1159.75, 98: 955.07, 99: 3251.98},
90: {0: 752.97, 1: 1978.32, 2: 1885.11, 3: 1760.32, 4: 2468.07, 5: 938.87, 6: 1108.95, 7: 1175.92, 8: 1112.76, 9: 945.01, 10: 415.50, 11: 1104.00, 12: 2644.32, 13: 2061.38, 14: 478.87, 15: 1696.62, 16: 489.80, 17: 1433.20, 18: 1408.79, 19: 951.33, 20: 698.72, 21: 1761.14, 22: 191.64, 23: 1370.61, 24: 1182.21, 25: 2177.37, 26: 1067.28, 27: 709.66, 28: 1765.64, 29: 1979.45, 30: 1632.26, 31: 215.24, 32: 2713.60, 33: 1465.17, 34: 999.91, 35: 1162.16, 36: 2484.21, 37: 1334.16, 38: 2031.31, 39: 1686.15, 40: 2331.82, 41: 1403.87, 42: 1830.77, 43: 1856.16, 44: 179.04, 45: 1748.01, 46: 365.94, 47: 2273.52, 48: 977.95, 49: 1826.73, 50: 976.46, 51: 2344.87, 52: 1497.42, 53: 1759.97, 54: 1320.32, 55: 1537.62, 56: 1017.64, 57: 819.56, 58: 760.43, 59: 536.86, 60: 1023.89, 61: 683.74, 62: 786.70, 63: 1657.46, 64: 1898.89, 65: 1905.66, 66: 1007.25, 67: 1613.64, 68: 1416.12, 69: 1879.83, 70: 2286.11, 71: 758.60, 72: 1651.45, 73: 705.44, 74: 1296.44, 75: 2746.49, 76: 553.93, 77: 2322.14, 78: 1385.14, 79: 1614.13, 80: 1229.30, 81: 2341.31, 82: 1336.79, 83: 1048.56, 84: 1673.59, 85: 988.34, 86: 1027.98, 87: 1642.66, 88: 1529.61, 89: 1082.39, 91: 1041.57, 92: 662.12, 93: 1735.08, 94: 2577.96, 95: 2265.51, 96: 1518.51, 97: 99.41, 98: 1435.83, 99: 2326.86},
91: {0: 302.55, 1: 1769.47, 2: 2515.46, 3: 819.32, 4: 2701.30, 5: 329.07, 6: 1719.11, 7: 206.31, 8: 1692.61, 9: 764.70, 10: 1127.82, 11: 1832.69, 12: 2682.30, 13: 2629.44, 14: 1240.45, 15: 1075.38, 16: 1240.89, 17: 1076.75, 18: 576.94, 19: 1694.17, 20: 1027.19, 21: 1144.01, 22: 1180.86, 23: 1159.04, 24: 1407.61, 25: 1217.87, 26: 1864.20, 27: 659.70, 28: 2335.40, 29: 2362.63, 30: 648.68, 31: 1049.12, 32: 2774.04, 33: 2068.35, 34: 1875.14, 35: 1205.60, 36: 2690.17, 37: 1200.65, 38: 2294.88, 39: 1434.20, 40: 2955.87, 41: 447.18, 42: 2524.08, 43: 1787.50, 44: 1204.88, 45: 2379.54, 46: 693.31, 47: 2755.81, 48: 352.14, 49: 1849.61, 50: 1380.06, 51: 2675.81, 52: 819.68, 53: 1449.23, 54: 1982.33, 55: 496.59, 56: 1635.24, 57: 950.64, 58: 1178.05, 59: 1454.75, 60: 1270.18, 61: 1560.58, 62: 353.41, 63: 1458.09, 64: 966.48, 65: 1013.97, 66: 730.25, 67: 1806.05, 68: 1390.12, 69: 1168.44, 70: 2890.55, 71: 909.30, 72: 1682.52, 73: 1090.95, 74: 358.47, 75: 2772.59, 76: 1347.46, 77: 2642.06, 78: 878.32, 79: 606.07, 80: 1425.40, 81: 2299.00, 82: 1988.79, 83: 889.64, 84: 1934.30, 85: 1803.18, 86: 1514.46, 87: 1045.31, 88: 621.09, 89: 547.53, 90: 1041.57, 92: 672.17, 93: 1198.41, 94: 2541.02, 95: 2575.02, 96: 517.22, 97: 1079.10, 98: 1482.21, 99: 2891.38},
92: {0: 412.98, 1: 1399.75, 2: 1845.80, 3: 1491.48, 4: 2128.81, 5: 804.20, 6: 1046.94, 7: 696.60, 8: 1020.77, 9: 1095.56, 10: 982.15, 11: 1166.28, 12: 2195.08, 13: 1967.08, 14: 1080.60, 15: 1670.48, 16: 1088.02, 17: 1552.28, 18: 1223.06, 19: 1033.16, 20: 1102.43, 21: 1740.65, 22: 702.28, 23: 1567.83, 24: 789.52, 25: 1886.56, 26: 1208.20, 27: 47.68, 28: 1670.19, 29: 1734.41, 30: 1086.58, 31: 805.44, 32: 2277.58, 33: 1397.91, 34: 1240.72, 35: 1479.83, 36: 2128.07, 37: 1571.99, 38: 1702.41, 39: 1080.53, 40: 2288.88, 41: 864.14, 42: 1851.93, 43: 1331.08, 44: 837.61, 45: 1709.14, 46: 533.03, 47: 2109.75, 48: 850.72, 49: 1345.90, 50: 716.45, 51: 2068.79, 52: 1422.95, 53: 1140.04, 54: 1310.24, 55: 1115.63, 56: 963.42, 57: 311.26, 58: 1226.86, 59: 871.27, 60: 634.00, 61: 945.84, 62: 673.37, 63: 1068.39, 64: 1638.64, 65: 1684.14, 66: 347.25, 67: 1223.40, 68: 886.51, 69: 1799.46, 70: 2225.37, 71: 1067.58, 72: 1166.69, 73: 1144.21, 74: 1024.71, 75: 2293.01, 76: 724.56, 77: 2037.97, 78: 1409.54, 79: 1094.15, 80: 819.15, 81: 1844.88, 82: 1316.62, 83: 1234.34, 84: 1331.79, 85: 1153.32, 86: 845.65, 87: 1629.26, 88: 945.40, 89: 1045.12, 90: 662.12, 91: 672.17, 93: 1765.14, 94: 2089.68, 95: 1973.09, 96: 1184.40, 97: 636.13, 98: 1779.47, 99: 2231.58},
93: {0: 1358.85, 1: 2963.13, 2: 3554.43, 3: 784.62, 4: 3879.30, 5: 962.25, 6: 2744.02, 7: 1345.79, 8: 2730.51, 9: 791.77, 10: 1491.46, 11: 2797.85, 12: 3880.20, 13: 3701.49, 14: 1555.12, 15: 160.70, 16: 1545.52, 17: 341.92, 18: 667.47, 19: 2645.30, 20: 1152.91, 21: 133.65, 22: 1926.24, 23: 500.99, 24: 2552.33, 25: 975.55, 26: 2785.06, 27: 1773.18, 28: 3400.61, 29: 3499.21, 30: 1542.80, 31: 1585.78, 32: 3971.39, 33: 3110.41, 34: 2733.48, 35: 813.00, 36: 3872.59, 37: 594.01, 38: 3460.98, 39: 2629.52, 40: 4005.00, 41: 1480.69, 42: 3527.22, 43: 2985.61, 44: 1807.61, 45: 3415.18, 46: 1422.96, 47: 3866.20, 48: 916.56, 49: 3043.55, 50: 2467.80, 51: 3832.53, 52: 389.31, 53: 2638.35, 54: 2991.18, 55: 1176.32, 56: 2652.04, 57: 2075.01, 58: 1221.19, 59: 2269.90, 60: 2399.08, 61: 2412.71, 62: 1094.93, 63: 2655.86, 64: 783.78, 65: 682.11, 66: 1918.60, 67: 2975.40, 68: 2580.34, 69: 313.01, 70: 3949.04, 71: 1024.54, 72: 2873.21, 73: 1195.61, 74: 895.64, 75: 3970.88, 76: 2246.72, 77: 3801.02, 78: 361.19, 79: 1457.09, 80: 2578.43, 81: 3497.37, 82: 3003.27, 83: 710.30, 84: 3092.68, 85: 2709.48, 86: 2581.38, 87: 160.88, 88: 1645.37, 89: 721.00, 90: 1735.08, 91: 1198.41, 92: 1765.14, 94: 3739.13, 95: 3735.48, 96: 960.49, 97: 1823.69, 98: 841.61, 99: 3969.29},
94: {0: 2431.13, 1: 793.77, 2: 1633.18, 3: 3196.27, 4: 670.55, 5: 2811.48, 6: 1707.42, 7: 2402.84, 8: 1668.26, 9: 3172.56, 10: 2984.60, 11: 1889.65, 12: 215.64, 13: 1490.62, 14: 3056.80, 15: 3611.10, 16: 3067.61, 17: 3593.24, 18: 3093.82, 19: 1949.05, 20: 3178.14, 21: 3678.20, 22: 2478.33, 23: 3636.77, 24: 1397.06, 25: 3462.05, 26: 2025.08, 27: 2061.21, 28: 1477.35, 29: 1042.93, 30: 2384.07, 31: 2783.86, 32: 311.01, 33: 1585.32, 34: 2201.81, 35: 3569.38, 36: 602.70, 37: 3651.01, 38: 794.48, 39: 1114.83, 40: 1728.94, 41: 2329.09, 42: 1797.39, 43: 762.92, 44: 2696.24, 45: 1625.08, 46: 2608.57, 47: 1296.30, 48: 2851.76, 49: 753.45, 50: 1624.98, 51: 905.65, 52: 3356.37, 53: 1124.77, 54: 1725.19, 55: 2696.40, 56: 1756.77, 57: 1805.74, 58: 3288.36, 59: 2315.42, 60: 1554.11, 61: 2223.69, 62: 2719.14, 63: 1083.41, 64: 3320.43, 65: 3412.04, 66: 1839.42, 67: 991.06, 68: 1203.17, 69: 3675.57, 70: 1652.37, 71: 3155.96, 72: 932.18, 73: 3212.20, 74: 2859.81, 75: 259.79, 76: 2149.70, 77: 875.13, 78: 3413.31, 79: 2462.66, 80: 1349.02, 81: 245.31, 82: 1703.20, 83: 3312.57, 84: 993.32, 85: 2069.11, 86: 1629.71, 87: 3584.44, 88: 2212.87, 89: 3059.86, 90: 2577.96, 91: 2541.02, 92: 2089.68, 93: 3739.13, 95: 846.98, 96: 2885.19, 97: 2495.57, 98: 3869.06, 99: 1546.39},
95: {0: 2376.68, 1: 1200.94, 2: 826.46, 3: 3344.20, 4: 253.14, 5: 2773.24, 6: 1196.34, 7: 2495.67, 8: 1176.48, 9: 3050.34, 10: 2679.09, 11: 1312.49, 12: 715.44, 13: 655.08, 14: 2724.89, 15: 3633.06, 16: 2737.26, 17: 3522.24, 18: 3151.94, 19: 1422.26, 20: 2943.93, 21: 3703.08, 22: 2117.98, 23: 3523.32, 24: 1183.73, 25: 3679.44, 26: 1432.25, 27: 1962.63, 28: 719.61, 29: 307.42, 30: 2631.36, 31: 2480.71, 32: 707.64, 33: 931.43, 34: 1606.57, 35: 3385.97, 36: 307.92, 37: 3515.10, 38: 283.64, 39: 1375.18, 40: 883.70, 41: 2506.37, 42: 997.09, 43: 984.59, 44: 2336.01, 45: 854.63, 46: 2412.46, 47: 451.69, 48: 2818.95, 49: 839.77, 50: 1309.07, 51: 106.23, 52: 3380.48, 53: 1445.05, 54: 1097.87, 55: 2869.46, 56: 1276.24, 57: 1661.95, 58: 3023.78, 59: 1862.38, 60: 1340.84, 61: 1735.03, 62: 2646.47, 63: 1304.08, 64: 3484.07, 65: 3556.39, 66: 1849.31, 67: 770.28, 68: 1216.38, 69: 3742.78, 70: 806.04, 71: 2962.40, 72: 949.96, 73: 2961.99, 74: 2928.74, 75: 791.94, 76: 1741.62, 77: 68.15, 78: 3382.08, 79: 2693.99, 80: 1157.16, 81: 813.46, 82: 1074.59, 83: 3184.81, 84: 643.01, 85: 1497.33, 86: 1237.79, 87: 3595.08, 88: 2444.27, 89: 3017.39, 90: 2265.51, 91: 2575.02, 92: 1973.09, 93: 3735.48, 94: 846.98, 96: 3020.02, 97: 2169.48, 98: 3677.03, 99: 703.29},
96: {0: 814.88, 1: 2093.04, 2: 3018.38, 3: 324.23, 4: 3124.04, 5: 609.58, 6: 2229.60, 7: 527.06, 8: 2201.18, 9: 933.77, 10: 1516.32, 11: 2348.60, 12: 3047.17, 13: 3122.90, 14: 1622.85, 15: 804.56, 16: 1620.09, 17: 996.83, 18: 325.86, 19: 2211.03, 20: 1316.80, 21: 859.62, 22: 1674.13, 23: 1144.02, 24: 1881.41, 25: 702.16, 26: 2381.41, 27: 1167.59, 28: 2832.83, 29: 2828.69, 30: 583.06, 31: 1484.86, 32: 3143.37, 33: 2573.32, 34: 2390.84, 35: 1315.77, 36: 3105.84, 37: 1218.66, 38: 2736.83, 39: 1772.88, 40: 3454.16, 41: 558.35, 42: 3033.49, 43: 2160.70, 44: 1667.89, 45: 2883.91, 46: 1154.67, 47: 3233.43, 48: 585.84, 49: 2247.50, 50: 1880.46, 51: 3123.47, 52: 589.48, 53: 1761.85, 54: 2493.48, 55: 216.11, 56: 2147.43, 57: 1446.36, 58: 1458.46, 59: 1963.97, 60: 1756.20, 61: 2074.35, 62: 741.97, 63: 1814.23, 64: 466.62, 65: 537.43, 66: 1178.52, 67: 2250.83, 68: 1808.88, 69: 807.82, 70: 3386.62, 71: 1170.94, 72: 2093.59, 73: 1382.49, 74: 236.54, 75: 3130.46, 76: 1863.10, 77: 3087.91, 78: 767.29, 79: 496.86, 80: 1892.73, 81: 2651.72, 82: 2499.12, 83: 1005.63, 84: 2388.43, 85: 2320.32, 86: 2018.75, 87: 801.51, 88: 702.12, 89: 633.91, 90: 1518.51, 91: 517.22, 92: 1184.40, 93: 960.49, 94: 2885.19, 95: 3020.02, 97: 1568.82, 98: 1531.28, 99: 3381.39},
97: {0: 782.65, 1: 1911.41, 2: 1786.24, 3: 1821.03, 4: 2373.91, 5: 1002.96, 6: 1009.76, 7: 1199.81, 8: 1013.98, 9: 1035.71, 10: 509.73, 11: 1005.56, 12: 2557.74, 13: 1962.03, 14: 565.10, 15: 1780.90, 16: 576.64, 17: 1525.91, 18: 1475.71, 19: 852.68, 20: 798.11, 21: 1846.20, 22: 107.94, 23: 1466.90, 24: 1098.60, 25: 2237.87, 26: 971.39, 27: 683.70, 28: 1666.23, 29: 1882.18, 30: 1648.81, 31: 312.08, 32: 2625.68, 33: 1365.77, 34: 909.80, 35: 1261.31, 36: 2390.97, 37: 1431.82, 38: 1937.54, 39: 1626.64, 40: 2233.29, 41: 1419.80, 42: 1733.23, 43: 1781.00, 44: 214.37, 45: 1649.00, 46: 429.69, 47: 2174.28, 48: 1043.92, 49: 1746.15, 50: 886.14, 51: 2248.08, 52: 1576.26, 53: 1703.84, 54: 1221.16, 55: 1575.54, 56: 918.58, 57: 758.98, 58: 858.59, 59: 446.23, 60: 942.89, 61: 590.41, 62: 847.93, 63: 1594.40, 64: 1961.57, 65: 1972.79, 66: 974.31, 67: 1525.71, 68: 1344.86, 69: 1960.62, 70: 2187.22, 71: 856.03, 72: 1572.38, 73: 804.61, 74: 1351.93, 75: 2660.11, 76: 454.58, 77: 2225.68, 78: 1471.24, 79: 1635.81, 80: 1146.61, 81: 2260.50, 82: 1237.55, 83: 1142.51, 84: 1581.89, 85: 893.01, 86: 932.62, 87: 1727.62, 88: 1536.58, 89: 1159.75, 90: 99.41, 91: 1079.10, 92: 636.13, 93: 1823.69, 94: 2495.57, 95: 2169.48, 96: 1568.82, 98: 1535.22, 99: 2227.58},
98: {0: 1468.25, 1: 3155.99, 2: 3314.92, 3: 1498.55, 4: 3863.27, 5: 1154.05, 6: 2544.23, 7: 1683.74, 8: 2546.21, 9: 725.83, 10: 1053.23, 11: 2532.48, 12: 3971.85, 13: 3495.99, 14: 1057.65, 15: 950.96, 16: 1044.89, 17: 572.55, 18: 1209.69, 19: 2381.77, 20: 738.24, 21: 963.97, 22: 1612.04, 23: 397.34, 24: 2528.22, 25: 1786.11, 26: 2480.05, 27: 1808.18, 28: 3201.24, 29: 3401.48, 30: 2044.10, 31: 1228.74, 32: 4052.05, 33: 2900.74, 34: 2380.32, 35: 299.71, 36: 3871.60, 37: 313.38, 38: 3426.82, 39: 2823.44, 40: 3757.60, 41: 1899.09, 42: 3249.06, 43: 3109.08, 44: 1423.14, 45: 3179.23, 46: 1274.12, 47: 3708.78, 48: 1130.76, 49: 3124.08, 50: 2368.50, 51: 3762.06, 52: 1000.95, 53: 2862.28, 54: 2753.43, 55: 1716.91, 56: 2452.44, 57: 2072.06, 58: 692.94, 59: 1941.00, 60: 2363.59, 61: 2092.00, 62: 1189.73, 63: 2825.98, 64: 1550.38, 65: 1469.63, 66: 2053.31, 67: 2972.74, 68: 2665.92, 69: 1150.02, 70: 3715.53, 71: 719.22, 72: 2944.44, 73: 732.32, 74: 1351.66, 75: 4070.66, 76: 1989.19, 77: 3736.75, 78: 782.97, 79: 1970.91, 80: 2567.31, 81: 3624.14, 82: 2770.59, 83: 593.33, 84: 3058.24, 85: 2399.08, 86: 2444.81, 87: 904.76, 88: 2079.50, 89: 955.07, 90: 1435.83, 91: 1482.21, 92: 1779.47, 93: 841.61, 94: 3869.06, 95: 3677.03, 96: 1531.28, 97: 1535.22, 99: 3760.45},
99: {0: 2643.49, 1: 1830.81, 2: 454.28, 3: 3701.25, 4: 894.15, 5: 3024.70, 6: 1231.35, 7: 2857.27, 8: 1240.42, 9: 3220.44, 10: 2712.87, 11: 1229.99, 12: 1395.55, 13: 268.17, 14: 2730.56, 15: 3889.77, 16: 2743.57, 17: 3711.65, 18: 3454.29, 19: 1379.06, 20: 3025.33, 21: 3959.55, 22: 2148.45, 23: 3678.59, 24: 1505.96, 25: 4071.99, 26: 1299.72, 27: 2235.90, 28: 569.17, 29: 643.69, 30: 3081.99, 31: 2531.71, 32: 1366.50, 33: 865.52, 34: 1437.03, 35: 3488.80, 36: 962.93, 37: 3652.28, 38: 874.65, 39: 1931.36, 40: 185.07, 41: 2921.37, 42: 571.83, 43: 1587.15, 44: 2344.83, 45: 583.67, 46: 2564.05, 47: 251.75, 48: 3071.77, 49: 1426.97, 50: 1515.14, 51: 642.22, 52: 3648.39, 53: 2018.09, 54: 1007.04, 55: 3262.84, 56: 1324.36, 57: 1940.76, 58: 3073.52, 59: 1827.90, 60: 1625.25, 61: 1679.02, 62: 2879.80, 63: 1852.72, 64: 3846.81, 65: 3903.56, 66: 2211.73, 67: 1227.37, 68: 1678.04, 69: 4029.17, 70: 121.43, 71: 3078.00, 72: 1477.01, 73: 3028.15, 74: 3249.33, 75: 1457.12, 76: 1773.05, 77: 671.32, 78: 3608.22, 79: 3132.05, 80: 1502.28, 81: 1512.41, 82: 990.12, 83: 3343.53, 84: 1074.01, 85: 1380.07, 86: 1390.86, 87: 3844.69, 88: 2895.38, 89: 3251.98, 90: 2326.86, 91: 2891.38, 92: 2231.58, 93: 3969.29, 94: 1546.39, 95: 703.29, 96: 3381.39, 97: 2227.58, 98: 3760.45}
}
Minimum spanning tree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)]
Odd vertices in minimum spanning tree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98]
Minimum weight matching: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (76, 59, 191.02), (27, 92, 47.68), (98, 83, 593.33), (42, 2, 171.03), (53, 1, 331.30), (96, 64, 466.62), (93, 21, 133.65), (60, 68, 435.39), (66, 46, 859.27), (51, 77, 40.00), (10, 16, 115.26), (47, 70, 356.92), (9, 73, 480.59), (85, 34, 141.06), (38, 29, 261.24), (81, 75, 478.76), (90, 44, 179.04), (58, 31, 546.88), (65, 25, 323.20), (72, 32, 1111.96), (69, 52, 387.62), (40, 11, 1227.82)]
Eulerian circuit: [14, 10, 73, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 64, 25, 65, 64, 3, 96, 74, 18, 52, 69, 21, 93, 21, 15, 87, 52, 78, 17, 23, 37, 35, 98, 83, 9, 71, 20, 73, 58, 31, 46, 66, 27, 92, 27, 57, 60, 68, 63, 39, 53, 1, 43, 49, 72, 32, 12, 94, 81, 75, 32, 36, 4, 77, 51, 77, 95, 38, 29, 38, 84, 67, 72, 68, 80, 24, 60, 50, 86, 8, 6, 56, 19, 11, 40, 70, 47, 99, 70, 13, 2, 42, 2, 45, 28, 33, 82, 54, 11, 26, 85, 34, 85, 61, 59, 76, 59, 22, 97, 90, 44, 90, 31, 10, 16, 14]
Result path: [14, 10, 73, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 64, 25, 65, 3, 74, 18, 52, 69, 21, 93, 15, 87, 78, 17, 23, 37, 35, 98, 83, 71, 20, 58, 31, 46, 66, 27, 92, 57, 60, 68, 63, 39, 53, 1, 43, 49, 72, 32, 12, 94, 81, 75, 36, 4, 77, 51, 95, 38, 29, 84, 67, 80, 24, 50, 86, 8, 6, 56, 19, 11, 40, 70, 47, 99, 13, 2, 42, 45, 28, 33, 82, 54, 26, 85, 34, 61, 59, 76, 22, 97, 90, 44, 16, 14]
Length of the result path: 25557.77
-- Helper Classes
local Point = {}
Point.__index = Point
function Point.new(x, y, id)
local self = setmetatable({}, Point)
self.x = x
self.y = y
self.id = id
return self
end
local Edge = {}
Edge.__index = Edge
function Edge.new(u, v, weight)
local self = setmetatable({}, Edge)
self.u = u
self.v = v
self.weight = weight
return self
end
local UnionFind = {}
UnionFind.__index = UnionFind
function UnionFind.new(n)
local self = setmetatable({}, UnionFind)
self.parent = {}
self.rank = {}
for i = 1, n do
self.parent[i] = i
self.rank[i] = 0
end
return self
end
function UnionFind:find(i)
if self.parent[i] ~= i then
self.parent[i] = self:find(self.parent[i]) -- Path compression
end
return self.parent[i]
end
function UnionFind:unite(i, j)
local root_i = self:find(i)
local root_j = self:find(j)
if root_i ~= root_j then
-- Union by rank
if self.rank[root_i] < self.rank[root_j] then
self.parent[root_i] = root_j
elseif self.rank[root_i] > self.rank[root_j] then
self.parent[root_j] = root_i
else
self.parent[root_j] = root_i
self.rank[root_i] = self.rank[root_i] + 1
end
end
end
-- Helper Functions
local function print_container(container, name)
io.write(name .. ": [")
for i, v in ipairs(container) do
if i > 1 then io.write(", ") end
io.write(v)
end
io.write("]\n")
end
local function print_edges(edges, name)
io.write(name .. ": [")
for i, edge in ipairs(edges) do
if i > 1 then io.write(", ") end
io.write(string.format("(%d, %d, %.2f)", edge.u, edge.v, edge.weight))
end
io.write("]\n")
end
local function print_graph(graph, name)
io.write(name .. ": {\n")
for i = 1, #graph do
io.write(" " .. i .. ": {")
for j = 1, #graph[i] do
if i ~= j then
io.write(string.format("%d: %.2f", j, graph[i][j]))
if j < #graph[i] then io.write(", ") end
end
end
io.write("}" .. (i == #graph and "" or ",") .. "\n")
end
io.write("}\n")
end
-- Euclidean Distance
local function get_length(p1, p2)
local dx = p1.x - p2.x
local dy = p1.y - p2.y
return math.sqrt(dx * dx + dy * dy)
end
-- Build Complete Graph (Adjacency Matrix)
local function build_graph(data)
local n = #data
local graph = {}
for i = 1, n do
graph[i] = {}
for j = 1, n do
graph[i][j] = 0.0
end
end
for i = 1, n do
for j = i + 1, n do
local dist = get_length(data[i], data[j])
graph[i][j] = dist
graph[j][i] = dist -- Symmetric graph
end
end
return graph
end
-- Minimum Spanning Tree (Kruskal's Algorithm)
local function minimum_spanning_tree(graph)
local n = #graph
if n == 0 then return {} end
local edges = {}
for i = 1, n do
for j = i + 1, n do
table.insert(edges, Edge.new(i, j, graph[i][j]))
end
end
-- Sort edges by weight
table.sort(edges, function(a, b) return a.weight < b.weight end)
local mst = {}
local uf = UnionFind.new(n)
local edges_count = 0
for _, edge in ipairs(edges) do
if uf:find(edge.u) ~= uf:find(edge.v) then
table.insert(mst, edge)
uf:unite(edge.u, edge.v)
edges_count = edges_count + 1
if edges_count == n - 1 then break end -- MST has n-1 edges
end
end
return mst
end
-- Find Vertices with Odd Degree in MST
local function find_odd_vertexes(mst, n)
local degree = {}
for i = 1, n do degree[i] = 0 end
for _, edge in ipairs(mst) do
degree[edge.u] = degree[edge.u] + 1
degree[edge.v] = degree[edge.v] + 1
end
local odd_vertices = {}
for i = 1, n do
if degree[i] % 2 ~= 0 then
table.insert(odd_vertices, i)
end
end
return odd_vertices
end
-- Minimum Weight Matching (Greedy Heuristic)
local function minimum_weight_matching(mst, graph, odd_vertices)
local current_odd = {}
for _, v in ipairs(odd_vertices) do table.insert(current_odd, v) end
-- Shuffle the current_odd table
for i = #current_odd, 2, -1 do
local j = math.random(i)
current_odd[i], current_odd[j] = current_odd[j], current_odd[i]
end
local matched = {}
for i = 1, #graph do matched[i] = false end
for i = 1, #current_odd do
local v = current_odd[i]
if matched[v] then goto continue end
local min_length = math.huge
local closest_u = -1
for j = i + 1, #current_odd do
local u = current_odd[j]
if not matched[u] then
if graph[v][u] < min_length then
min_length = graph[v][u]
closest_u = u
end
end
end
if closest_u ~= -1 then
table.insert(mst, Edge.new(v, closest_u, min_length))
matched[v] = true
matched[closest_u] = true
end
::continue::
end
end
-- Find Eulerian Tour (Hierholzer's Algorithm)
local function find_eulerian_tour(matched_mst, n)
if #matched_mst == 0 then return {} end
local adj = {}
for i = 1, n do adj[i] = {} end
local edge_used = {}
for _, edge in ipairs(matched_mst) do
table.insert(adj[edge.u], {edge.v, edge})
table.insert(adj[edge.v], {edge.u, edge})
edge_used[edge] = false
end
local tour = {}
local current_path = {}
local start_node = matched_mst[1].u
table.insert(current_path, start_node)
while #current_path > 0 do
local current_node = current_path[#current_path]
local found_edge = false
for _, neighbor_info in ipairs(adj[current_node]) do
local neighbor, edge_ptr = neighbor_info[1], neighbor_info[2]
if not edge_used[edge_ptr] then
edge_used[edge_ptr] = true
table.insert(current_path, neighbor)
found_edge = true
break
end
end
if not found_edge then
table.insert(tour, table.remove(current_path))
end
end
-- Reverse the tour to get the correct order
local reversed_tour = {}
for i = #tour, 1, -1 do
table.insert(reversed_tour, tour[i])
end
return reversed_tour
end
-- Main TSP Function (Christofides Approximation)
local function tsp(data)
local n = #data
if n == 0 then return 0.0, {} end
if n == 1 then return 0.0, {data[1].id} end
local G = build_graph(data)
-- print_graph(G, "Graph")
local MSTree = minimum_spanning_tree(G)
print_edges(MSTree, "MSTree")
local odd_vertexes = find_odd_vertexes(MSTree, n)
print_container(odd_vertexes, "Odd vertexes in MSTree")
minimum_weight_matching(MSTree, G, odd_vertexes)
print_edges(MSTree, "Minimum weight matching (MST + Matching Edges)")
local eulerian_tour = find_eulerian_tour(MSTree, n)
print_container(eulerian_tour, "Eulerian tour")
if #eulerian_tour == 0 then
print("Error: Eulerian tour could not be found.")
return -1.0, {}
end
local path = {}
local length = 0.0
local visited = {}
for i = 1, n do visited[i] = false end
local current = eulerian_tour[1]
table.insert(path, current)
visited[current] = true
for i = 2, #eulerian_tour do
local v = eulerian_tour[i]
if not visited[v] then
table.insert(path, v)
visited[v] = true
length = length + G[current][v]
current = v
end
end
length = length + G[current][path[1]]
table.insert(path, path[1])
print_container(path, "Result path")
print(string.format("Result length of the path: %.2f", length))
return length, path
end
-- Main Program
local raw_data = {
{1380, 939}, {2848, 96}, {3510, 1671}, {457, 334}, {3888, 666}, {984, 965}, {2721, 1482}, {1286, 525},
{2716, 1432}, {738, 1325}, {1251, 1832}, {2728, 1698}, {3815, 169}, {3683, 1533}, {1247, 1945}, {123, 862},
{1234, 1946}, {252, 1240}, {611, 673}, {2576, 1676}, {928, 1700}, {53, 857}, {1807, 1711}, {274, 1420},
{2574, 946}, {178, 24}, {2678, 1825}, {1795, 962}, {3384, 1498}, {3520, 1079}, {1256, 61}, {1424, 1728},
{3913, 192}, {3085, 1528}, {2573, 1969}, {463, 1670}, {3875, 598}, {298, 1513}, {3479, 821}, {2542, 236},
{3955, 1743}, {1323, 280}, {3447, 1830}, {2936, 337}, {1621, 1830}, {3373, 1646}, {1393, 1368},
{3874, 1318}, {938, 955}, {3022, 474}, {2482, 1183}, {3854, 923}, {376, 825}, {2519, 135}, {2945, 1622},
{953, 268}, {2628, 1479}, {2097, 981}, {890, 1846}, {2139, 1806}, {2421, 1007}, {2290, 1810}, {1115, 1052},
{2588, 302}, {327, 265}, {241, 341}, {1917, 687}, {2991, 792}, {2573, 599}, {19, 674}, {3911, 1673},
{872, 1559}, {2863, 558}, {929, 1766}, {839, 620}, {3893, 102}, {2178, 1619}, {3822, 899}, {378, 1048},
{1178, 100}, {2599, 901}, {3416, 143}, {2961, 1605}, {611, 1384}, {3113, 885}, {2597, 1830}, {2586, 1286},
{161, 906}, {1429, 134}, {742, 1025}, {1625, 1651}, {1187, 706}, {1787, 1009}, {22, 987}, {3640, 43},
{3756, 882}, {776, 392}, {1724, 1642}, {198, 1810}, {3950, 1558}
}
local data_points = {}
for i, point in ipairs(raw_data) do
table.insert(data_points, Point.new(point[1], point[2], i))
end
tsp(data_points)
- Output:
MSTree: [(15, 17, 13.04), (55, 83, 23.35), (52, 78, 40.00), (6, 49, 47.07), (28, 93, 47.68), (7, 9, 50.25), (25, 81, 51.48), (16, 88, 58.14), (21, 74, 66.01), (78, 96, 68.15), (5, 37, 69.23), (16, 22, 70.18), (40, 64, 80.45), (27, 86, 81.15), (41, 71, 82.68), (31, 80, 87.21), (59, 74, 89.00), (33, 76, 92.20), (7, 57, 93.05), (24, 38, 96.05), (91, 98, 99.41), (13, 33, 100.66), (40, 54, 103.59), (23, 98, 107.94), (11, 15, 113.07), (65, 66, 114.77), (71, 100, 121.43), (22, 94, 133.65), (12, 27, 136.49), (3, 46, 139.26), (10, 84, 140.04), (35, 86, 141.06), (34, 83, 145.96), (51, 87, 146.37), (4, 65, 147.18), (29, 46, 148.41), (60, 62, 151.05), (21, 72, 151.71), (68, 85, 153.40), (12, 20, 153.58), (6, 63, 157.26), (44, 50, 161.76), (25, 61, 164.71), (3, 43, 171.03), (45, 91, 179.04), (50, 73, 179.82), (42, 89, 180.42), (18, 24, 181.34), (22, 70, 186.13), (51, 61, 186.27), (31, 89, 187.77), (60, 77, 191.02), (9, 87, 195.49), (11, 32, 201.85), (20, 57, 203.75), (8, 92, 206.31), (49, 90, 208.12), (32, 91, 215.24), (13, 95, 215.64), (56, 97, 216.11), (3, 14, 221.30), (53, 79, 223.01), (36, 38, 227.76), (18, 79, 229.65), (53, 88, 229.75), (12, 55, 229.92), (19, 75, 234.08), (75, 97, 236.54), (5, 78, 242.17), (82, 95, 245.31), (8, 42, 247.78), (48, 100, 251.75), (2, 44, 256.56), (30, 39, 261.24), (68, 73, 266.72), (14, 71, 267.55), (10, 72, 269.65), (19, 53, 279.87), (56, 80, 280.80), (26, 65, 283.34), (39, 96, 283.64), (1, 63, 288.09), (69, 73, 292.88), (64, 69, 297.38), (36, 99, 299.71), (10, 90, 300.03), (29, 34, 300.50), (28, 67, 300.85), (1, 92, 302.55), (28, 58, 302.60), (69, 81, 303.12), (62, 86, 307.65), (4, 97, 324.23), (58, 61, 325.04), (11, 74, 328.69), (23, 60, 345.32), (32, 47, 361.33), (39, 85, 371.55), (33, 37, 407.77)] Odd vertexes in MSTree: [2, 3, 10, 11, 12, 17, 22, 26, 28, 30, 32, 33, 35, 39, 41, 43, 45, 47, 48, 52, 53, 54, 59, 60, 61, 65, 66, 67, 69, 70, 71, 73, 74, 76, 77, 78, 82, 84, 86, 91, 93, 94, 97, 99] Minimum weight matching (MST + Matching Edges): [(15, 17, 13.04), (55, 83, 23.35), (52, 78, 40.00), (6, 49, 47.07), (28, 93, 47.68), (7, 9, 50.25), (25, 81, 51.48), (16, 88, 58.14), (21, 74, 66.01), (78, 96, 68.15), (5, 37, 69.23), (16, 22, 70.18), (40, 64, 80.45), (27, 86, 81.15), (41, 71, 82.68), (31, 80, 87.21), (59, 74, 89.00), (33, 76, 92.20), (7, 57, 93.05), (24, 38, 96.05), (91, 98, 99.41), (13, 33, 100.66), (40, 54, 103.59), (23, 98, 107.94), (11, 15, 113.07), (65, 66, 114.77), (71, 100, 121.43), (22, 94, 133.65), (12, 27, 136.49), (3, 46, 139.26), (10, 84, 140.04), (35, 86, 141.06), (34, 83, 145.96), (51, 87, 146.37), (4, 65, 147.18), (29, 46, 148.41), (60, 62, 151.05), (21, 72, 151.71), (68, 85, 153.40), (12, 20, 153.58), (6, 63, 157.26), (44, 50, 161.76), (25, 61, 164.71), (3, 43, 171.03), (45, 91, 179.04), (50, 73, 179.82), (42, 89, 180.42), (18, 24, 181.34), (22, 70, 186.13), (51, 61, 186.27), (31, 89, 187.77), (60, 77, 191.02), (9, 87, 195.49), (11, 32, 201.85), (20, 57, 203.75), (8, 92, 206.31), (49, 90, 208.12), (32, 91, 215.24), (13, 95, 215.64), (56, 97, 216.11), (3, 14, 221.30), (53, 79, 223.01), (36, 38, 227.76), (18, 79, 229.65), (53, 88, 229.75), (12, 55, 229.92), (19, 75, 234.08), (75, 97, 236.54), (5, 78, 242.17), (82, 95, 245.31), (8, 42, 247.78), (48, 100, 251.75), (2, 44, 256.56), (30, 39, 261.24), (68, 73, 266.72), (14, 71, 267.55), (10, 72, 269.65), (19, 53, 279.87), (56, 80, 280.80), (26, 65, 283.34), (39, 96, 283.64), (1, 63, 288.09), (69, 73, 292.88), (64, 69, 297.38), (36, 99, 299.71), (10, 90, 300.03), (29, 34, 300.50), (28, 67, 300.85), (1, 92, 302.55), (28, 58, 302.60), (69, 81, 303.12), (62, 86, 307.65), (4, 97, 324.23), (58, 61, 325.04), (11, 74, 328.69), (23, 60, 345.32), (32, 47, 361.33), (39, 85, 371.55), (33, 37, 407.77), (65, 66, 114.77), (11, 17, 115.26), (82, 76, 478.76), (99, 84, 593.33), (91, 45, 179.04), (2, 54, 331.30), (10, 74, 480.59), (28, 93, 47.68), (12, 86, 185.97), (71, 41, 82.68), (32, 47, 361.33), (61, 69, 435.39), (48, 52, 395.51), (43, 3, 171.03), (77, 60, 191.02), (22, 94, 133.65), (39, 30, 261.24), (67, 73, 954.75), (33, 78, 712.83), (70, 53, 387.62), (26, 97, 702.16), (35, 59, 1687.49)] Eulerian tour: [15, 17, 11, 32, 47, 32, 91, 45, 91, 98, 23, 60, 77, 60, 62, 86, 27, 12, 20, 57, 7, 9, 87, 51, 61, 25, 81, 69, 73, 50, 44, 2, 54, 40, 64, 69, 61, 58, 28, 93, 28, 67, 73, 68, 85, 39, 30, 39, 96, 78, 5, 37, 33, 76, 82, 95, 13, 33, 78, 52, 48, 100, 71, 41, 71, 14, 3, 43, 3, 46, 29, 34, 83, 55, 12, 86, 35, 59, 74, 21, 72, 10, 84, 99, 36, 38, 24, 18, 79, 53, 88, 16, 22, 94, 22, 70, 53, 19, 75, 97, 4, 65, 66, 65, 26, 97, 56, 80, 31, 89, 42, 8, 92, 1, 63, 6, 49, 90, 10, 74, 11, 15] Result path: [15, 17, 11, 32, 47, 91, 45, 98, 23, 60, 77, 62, 86, 27, 12, 20, 57, 7, 9, 87, 51, 61, 25, 81, 69, 73, 50, 44, 2, 54, 40, 64, 58, 28, 93, 67, 68, 85, 39, 30, 96, 78, 5, 37, 33, 76, 82, 95, 13, 52, 48, 100, 71, 41, 14, 3, 43, 46, 29, 34, 83, 55, 35, 59, 74, 21, 72, 10, 84, 99, 36, 38, 24, 18, 79, 53, 88, 16, 22, 94, 70, 19, 75, 97, 4, 65, 66, 26, 56, 80, 31, 89, 42, 8, 92, 1, 63, 6, 49, 90, 15] Result length of the path: 26078.11
(* Helper Functions *)
printContainer[container_, name_, zerobase_: True] :=
Print[name <> ": " <> ToString[container - Boole[zerobase]]]
printEdges[edges_, name_, zerobase_: True] :=
Module[{output},
output = name <> ": [";
Do[
output =
output <> "(" <> ToString[edges[[i, 1]] - Boole[zerobase]] <>
", " <> ToString[edges[[i, 2]] - Boole[zerobase]] <> ", " <>
ToString[Round[edges[[i, 3]], 0.01]] <> ")";
If[i < Length[edges], output = output <> ", "];
, {i, Length[edges]}];
output = output <> "]";
Print[output];
]
printGraph[graph_, name_, zerobase_: True] :=
Module[{n = Length[graph], output},
Print[name <> ": {"];
Do[
output =
" " <> ToString[i - Boole[zerobase]] <> ": {";
Do[
If[i != j,
output =
output <> ToString[j - Boole[zerobase]] <> ": " <>
ToString[Round[graph[[i, j]], 0.01]];
If[j < n, output = output <> ", "];
];
, {j, n}];
output = output <> "}";
If[i < n, output = output <> ","];
Print[output];
, {i, n}];
Print["}"];
]
(* Euclidean Distance *)
getLength[p1_, p2_] := Sqrt[(p1[[1]] - p2[[1]])^2 + (p1[[2]] - p2[[2]])^2]
(* Build Complete Graph (Adjacency Matrix) *)
buildGraph[data_] := Module[{n = Length[data], graph},
graph = ConstantArray[0., {n, n}];
Do[
Do[
If[i != j,
graph[[i, j]] = getLength[data[[i]], data[[j]]];
];
, {j, n}];
, {i, n}];
graph
]
(* Union-Find Data Structure *)
initUnionFind[n_] := Module[{parent, rank},
parent = Range[n];
rank = ConstantArray[0, n];
{parent, rank}
]
findUF[{parent_, rank_}, i_] := Module[{root = i},
While[parent[[root]] != root,
root = parent[[root]];
];
(* Path compression *)
parent[[i]] = root;
root
]
uniteUF[uf : {parent_, rank_}, i_, j_] := Module[{rootI, rootJ},
rootI = findUF[uf, i];
rootJ = findUF[uf, j];
If[rootI != rootJ,
If[rank[[rootI]] < rank[[rootJ]],
parent[[rootI]] = rootJ;
,
If[rank[[rootI]] > rank[[rootJ]],
parent[[rootJ]] = rootI;
,
parent[[rootJ]] = rootI;
rank[[rootI]]++;
];
];
];
]
(* Minimum Spanning Tree (Kruskal's Algorithm) *)
minimumSpanningTree[graph_] := Module[{n, edges, mst, uf, edgesCount},
n = Length[graph];
If[n == 0, Return[{}]];
(* Create edges list *)
edges = {};
Do[
Do[
If[i < j,
AppendTo[edges, {i, j, graph[[i, j]]}];
];
, {j, n}];
, {i, n}];
(* Sort edges by weight *)
edges = SortBy[edges, Last];
mst = {};
uf = initUnionFind[n];
edgesCount = 0;
Do[
If[findUF[uf, edge[[1]]] != findUF[uf, edge[[2]]],
AppendTo[mst, edge];
uniteUF[uf, edge[[1]], edge[[2]]];
edgesCount++;
If[edgesCount == n - 1, Break[]];
];
, {edge, edges}];
mst
]
(* Find Vertices with Odd Degree in MST *)
findOddVertices[mst_, n_] := Module[{degree},
degree = ConstantArray[0, n];
Do[
degree[[edge[[1]]]]++;
degree[[edge[[2]]]]++;
, {edge, mst}];
Select[Range[n], OddQ[degree[[#]]] &]
]
(* Minimum Weight Matching (Greedy Heuristic) *)
minimumWeightMatching[mst_, graph_, oddVertices_] :=
Module[{currentOdd, matched, newMst, i, j, v, u, minLength,
closestU},
currentOdd = RandomSample[oddVertices];
matched = ConstantArray[False, Length[graph]];
newMst = mst;
For[i = 1, i <= Length[currentOdd], i++,
v = currentOdd[[i]];
If[!matched[[v]],
minLength = Infinity;
closestU = -1;
For[j = i + 1, j <= Length[currentOdd], j++,
u = currentOdd[[j]];
If[!matched[[u]],
If[graph[[v, u]] < minLength,
minLength = graph[[v, u]];
closestU = u;
];
];
];
If[closestU != -1,
AppendTo[newMst, {v, closestU, minLength}];
matched[[v]] = True;
matched[[closestU]] = True;
];
];
];
newMst
]
(* Find Eulerian Tour (Hierholzer's Algorithm) *)
findEulerianTour[matchedMst_, n_] := Module[{adj, edgeUsed, tour,
currentPath, startNode, currentNode, foundEdge, i, neighbor,
edgePtr},
If[Length[matchedMst] == 0, Return[{}]];
(* Build adjacency list *)
adj = ConstantArray[{}, n];
edgeUsed = Association[];
Do[
AppendTo[adj[[edge[[1]]]], {edge[[2]], edge}];
AppendTo[adj[[edge[[2]]]], {edge[[1]], edge}];
edgeUsed[edge] = False;
, {edge, matchedMst}];
tour = {};
currentPath = {};
startNode = matchedMst[[1, 1]];
AppendTo[currentPath, startNode];
While[Length[currentPath] > 0,
currentNode = Last[currentPath];
foundEdge = False;
For[i = 1, i <= Length[adj[[currentNode]]], i++,
neighbor = adj[[currentNode, i, 1]];
edgePtr = adj[[currentNode, i, 2]];
If[!edgeUsed[edgePtr],
edgeUsed[edgePtr] = True;
AppendTo[currentPath, neighbor];
foundEdge = True;
Break[];
];
];
If[!foundEdge,
AppendTo[tour, Last[currentPath]];
currentPath = Most[currentPath];
];
];
Reverse[tour]
]
(* Main TSP Function (Christofides Approximation) *)
tsp[data_] := Module[{n, g, msTree, oddVertices, eulerianTour, path,
len, visited, current, v},
n = Length[data];
If[n == 0, Return[{0., {}}]];
If[n == 1, Return[{0., {data[[1, 3]]}}]];
(* Build graph *)
g = buildGraph[data];
msTree = minimumSpanningTree[g];
printEdges[msTree, "MSTree"];
(* Find odd degree vertices *)
oddVertices = findOddVertices[msTree, n];
printContainer[oddVertices, "Odd vertexes in MSTree"];
(* Add minimum weight matching edges *)
msTree = minimumWeightMatching[msTree, g, oddVertices];
printEdges[msTree, "Minimum weight matching (MST + Matching Edges)"];
(* Find Eulerian tour *)
eulerianTour = findEulerianTour[msTree, n];
printContainer[eulerianTour, "Eulerian tour"];
(* Create Hamiltonian Circuit by skipping visited nodes *)
If[Length[eulerianTour] == 0,
Print["Error: Eulerian tour could not be found."];
Return[{-1., {}}];
];
path = {};
len = 0.;
visited = ConstantArray[False, n];
current = First[eulerianTour];
AppendTo[path, current];
visited[[current]] = True;
Do[
If[!visited[[v]],
AppendTo[path, v];
visited[[v]] = True;
len += g[[current, v]];
current = v;
];
, {v, eulerianTour}];
(* Add edge back to start *)
len += g[[current, First[path]]];
AppendTo[path, First[path]];
printContainer[path, "Result path"];
Print["Result length of the path: " <> ToString[Round[len, 0.01]]];
{len, path}
]
(* Input data matching the original example *)
rawData = {{1380, 939}, {2848, 96}, {3510, 1671}, {457, 334}, {3888,
666}, {984, 965}, {2721, 1482}, {1286, 525}, {2716, 1432}, {738,
1325}, {1251, 1832}, {2728, 1698}, {3815, 169}, {3683,
1533}, {1247, 1945}, {123, 862}, {1234, 1946}, {252,
1240}, {611, 673}, {2576, 1676}, {928, 1700}, {53, 857}, {1807,
1711}, {274, 1420}, {2574, 946}, {178, 24}, {2678, 1825}, {1795,
962}, {3384, 1498}, {3520, 1079}, {1256, 61}, {1424,
1728}, {3913, 192}, {3085, 1528}, {2573, 1969}, {463,
1670}, {3875, 598}, {298, 1513}, {3479, 821}, {2542, 236}, {3955,
1743}, {1323, 280}, {3447, 1830}, {2936, 337}, {1621,
1830}, {3373, 1646}, {1393, 1368}, {3874, 1318}, {938,
955}, {3022, 474}, {2482, 1183}, {3854, 923}, {376, 825}, {2519,
135}, {2945, 1622}, {953, 268}, {2628, 1479}, {2097, 981}, {890,
1846}, {2139, 1806}, {2421, 1007}, {2290, 1810}, {1115,
1052}, {2588, 302}, {327, 265}, {241, 341}, {1917, 687}, {2991,
792}, {2573, 599}, {19, 674}, {3911, 1673}, {872, 1559}, {2863,
558}, {929, 1766}, {839, 620}, {3893, 102}, {2178, 1619}, {3822,
899}, {378, 1048}, {1178, 100}, {2599, 901}, {3416, 143}, {2961,
1605}, {611, 1384}, {3113, 885}, {2597, 1830}, {2586,
1286}, {161, 906}, {1429, 134}, {742, 1025}, {1625, 1651}, {1187,
706}, {1787, 1009}, {22, 987}, {3640, 43}, {3756, 882}, {776,
392}, {1724, 1642}, {198, 1810}, {3950, 1558}};
points = Table[{rawData[[i, 1]], rawData[[i, 2]], i}, {i,
Length[rawData]}];
(* Run the TSP algorithm *)
result = tsp[points]
- Output:
Set::setps: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100} in the part assignment is not a symbol.
Set::setps: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100} in the part assignment is not a symbol.
Set::setps: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100} in the part assignment is not a symbol.
General::stop: Further output of Set::setps will be suppressed during this calculation.
MSTree: [(51, 77, 40.), (58, 73, 89.), (55, 74, 370.), (18, 83, 711.), (42, 85, 850.), (44, 85, 976.), (2, 86, 1001.), (34, 68, 1370.), (48, 53, 1781.), (42, 44, 1826.), (61, 98, 2092.), (75, 85, 2160.), (34, 55, 2349.), (6, 87, 2624.), (45, 65, 3393.), (40, 93, 4005.), (48, 91, 352.14), (33, 56, 459.62), (60, 90, 1023.89), (7, 37, 1397.24), (1, 96, 2093.04), (16, 99, 2743.57), (15, 87, 58.14), (30, 79, 87.21), (3, 96, 324.23), (47, 95, 451.69), (66, 68, 661.88), (15, 74, 755.79), (25, 52, 825.11), (55, 83, 1167.23), (37, 96, 1218.66), (11, 46, 1375.18), (14, 18, 1422.14), (63, 74, 1777.67), (41, 84, 1889.48), (26, 48, 1945.38), (65, 69, 400.22), (59, 60, 847.3), (77, 81, 858.12), (38, 54, 962.68), (27, 91, 659.7), (37, 57, 1876.01), (41, 74, 591.49), (20, 87, 1103.96), (46, 55, 1184.74), (31, 50, 1190.12), (63, 68, 297.38), (43, 75, 985.43), (3, 83, 1061.23), (40, 45, 590.03), (23, 37, 96.05), (19, 81, 1748.05), (18, 92, 1223.06), (19, 78, 2285.95), (42, 56, 891.05), (51, 84, 741.97), (27, 74, 1015.33), (69, 73, 1421.47), (12, 43, 894.91), (59, 95, 1862.38), (62, 74, 512.64), (46, 87, 1315.78), (66, 96, 1178.52), (2, 30, 2769.95), (5, 77, 2838.77), (29, 81, 941.76), (38, 92, 1702.41), (32, 75, 92.2), (21, 71, 1078.69), (6, 54, 264.15), (16, 85, 1367.93), (65, 90, 1905.66), (6, 8, 50.25), (24, 80, 51.48), (28, 47, 522.02), (90, 97, 99.41), (30, 88, 187.77), (38, 80, 883.63), (2, 42, 171.03), (14, 90, 478.87), (11, 13, 969.15), (45, 88, 2462.78), (54, 68, 1088.54), (24, 98, 2528.22), (21, 75, 3913.52), (8, 80, 543.74), (57, 68, 610.33), (10, 83, 781.22), (33, 97, 1365.77), (14, 16, 13.04), (0, 55, 795.34), (17, 64, 977.88), (3, 25, 417.06), (52, 66, 1547.17), (22, 91, 1180.86), (12, 49, 849.63), (15, 21, 70.18), (20, 26, 1754.46), (54, 73, 2021.14)]
Odd vertexes in MSTree: {0, 1, 2, 3, 5, 6, 7, 10, 13, 14, 15, 16, 17, 18, 21, 22, 23, 28, 29, 30, 31, 32, 38, 45, 46, 48, 49, 50, 53, 55, 58, 61, 62, 64, 65, 66, 68, 71, 73, 77, 78, 79, 80, 81, 86, 91, 93, 99}
Minimum weight matching (MST + Matching Edges): [(51, 77, 40.), (58, 73, 89.), (55, 74, 370.), (18, 83, 711.), (42, 85, 850.), (44, 85, 976.), (2, 86, 1001.), (34, 68, 1370.), (48, 53, 1781.), (42, 44, 1826.), (61, 98, 2092.), (75, 85, 2160.), (34, 55, 2349.), (6, 87, 2624.), (45, 65, 3393.), (40, 93, 4005.), (48, 91, 352.14), (33, 56, 459.62), (60, 90, 1023.89), (7, 37, 1397.24), (1, 96, 2093.04), (16, 99, 2743.57), (15, 87, 58.14), (30, 79, 87.21), (3, 96, 324.23), (47, 95, 451.69), (66, 68, 661.88), (15, 74, 755.79), (25, 52, 825.11), (55, 83, 1167.23), (37, 96, 1218.66), (11, 46, 1375.18), (14, 18, 1422.14), (63, 74, 1777.67), (41, 84, 1889.48), (26, 48, 1945.38), (65, 69, 400.22), (59, 60, 847.3), (77, 81, 858.12), (38, 54, 962.68), (27, 91, 659.7), (37, 57, 1876.01), (41, 74, 591.49), (20, 87, 1103.96), (46, 55, 1184.74), (31, 50, 1190.12), (63, 68, 297.38), (43, 75, 985.43), (3, 83, 1061.23), (40, 45, 590.03), (23, 37, 96.05), (19, 81, 1748.05), (18, 92, 1223.06), (19, 78, 2285.95), (42, 56, 891.05), (51, 84, 741.97), (27, 74, 1015.33), (69, 73, 1421.47), (12, 43, 894.91), (59, 95, 1862.38), (62, 74, 512.64), (46, 87, 1315.78), (66, 96, 1178.52), (2, 30, 2769.95), (5, 77, 2838.77), (29, 81, 941.76), (38, 92, 1702.41), (32, 75, 92.2), (21, 71, 1078.69), (6, 54, 264.15), (16, 85, 1367.93), (65, 90, 1905.66), (6, 8, 50.25), (24, 80, 51.48), (28, 47, 522.02), (90, 97, 99.41), (30, 88, 187.77), (38, 80, 883.63), (2, 42, 171.03), (14, 90, 478.87), (11, 13, 969.15), (45, 88, 2462.78), (54, 68, 1088.54), (24, 98, 2528.22), (21, 75, 3913.52), (8, 80, 543.74), (57, 68, 610.33), (10, 83, 781.22), (33, 97, 1365.77), (14, 16, 13.04), (0, 55, 795.34), (17, 64, 977.88), (3, 25, 417.06), (52, 66, 1547.17), (22, 91, 1180.86), (12, 49, 849.63), (15, 21, 70.18), (20, 26, 1754.46), (54, 73, 2021.14), (22, 31, 383.38), (30, 79, 87.21), (50, 86, 146.37), (91, 7, 206.31), (55, 3, 500.37), (1, 53, 331.3), (61, 6, 541.61), (17, 23, 181.34), (21, 15, 70.18), (71, 73, 214.7), (45, 2, 139.26), (68, 80, 303.12), (16, 14, 13.04), (64, 65, 114.77), (78, 93, 361.19), (46, 62, 420.88), (28, 13, 301.04), (48, 5, 47.07), (81, 32, 499.41), (49, 38, 573.81), (0, 66, 593.19), (18, 58, 1205.72), (29, 77, 351.57), (99, 10, 2712.87)]
Eulerian tour: {51, 77, 81, 19, 78, 93, 40, 45, 65, 69, 73, 58, 18, 83, 55, 74, 15, 87, 6, 54, 38, 92, 18, 14, 90, 60, 59, 95, 47, 28, 13, 11, 46, 55, 34, 68, 66, 96, 1, 53, 48, 91, 27, 74, 63, 68, 54, 73, 71, 21, 15, 21, 75, 85, 42, 44, 85, 16, 14, 16, 99, 10, 83, 3, 25, 52, 66, 0, 55, 3, 96, 37, 7, 91, 22, 31, 50, 86, 2, 30, 88, 45, 2, 42, 56, 33, 97, 90, 65, 64, 17, 23, 37, 57, 68, 80, 24, 98, 61, 6, 8, 80, 38, 49, 12, 43, 75, 32, 81, 29, 77, 5, 48, 26, 20, 87, 46, 62, 74, 41, 84, 51, 79}
Result path: {51, 77, 81, 19, 78, 93, 40, 45, 65, 69, 73, 58, 18, 83, 55, 74, 15, 87, 6, 54, 38, 92, 14, 90, 60, 59, 95, 47, 28, 13, 11, 46, 34, 68, 66, 96, 1, 53, 48, 91, 27, 63, 71, 21, 75, 85, 42, 44, 16, 99, 10, 3, 25, 52, 0, 37, 7, 22, 31, 50, 86, 2, 30, 88, 56, 33, 97, 64, 17, 23, 57, 80, 24, 98, 61, 8, 49, 12, 43, 32, 29, 5, 26, 20, 62, 41, 84, 79, 51}
Result length of the path: 109594.
{109593.59772485198, {52, 78, 82, 20, 79, 94, 41, 46, 66, 70, 74, 59, 19, 84, 56, 75, 16, 88, 7, 55, 39, 93, 15, 91, 61, 60, 96, 48, 29, 14, 12, 47, 35, 69, 67, 97, 2, 54, 49, 92, 28, 64, 72, 22, 76, 86, 43, 45, 17, 100, 11, 4, 26, 53, 1, 38, 8, 23, 32, 51, 87, 3, 31, 89, 57, 34, 98, 65, 18, 24, 58, 81, 25, 99, 62, 9, 50, 13, 44, 33, 30, 6, 27, 21, 63, 42, 85, 80, 52}}
#!/usr/bin/perl
use strict;
use warnings;
use List::Util qw(shuffle min);
use Data::Dumper;
# --- Helper Structs/Classes ---
package Point;
sub new {
my ($class, $x, $y, $id) = @_;
return bless {
x => $x,
y => $y,
id => $id
}, $class;
}
package Edge;
sub new {
my ($class, $u, $v, $weight) = @_;
return bless {
u => $u,
v => $v,
weight => $weight
}, $class;
}
package UnionFind;
sub new {
my ($class, $n) = @_;
my $self = {
parent => [0..$n-1],
rank => [(0) x $n]
};
return bless $self, $class;
}
sub find {
my ($self, $i) = @_;
if ($self->{parent}[$i] != $i) {
# Path compression
$self->{parent}[$i] = $self->find($self->{parent}[$i]);
}
return $self->{parent}[$i];
}
sub unite {
my ($self, $i, $j) = @_;
my $root_i = $self->find($i);
my $root_j = $self->find($j);
if ($root_i != $root_j) {
# Union by rank
if ($self->{rank}[$root_i] < $self->{rank}[$root_j]) {
$self->{parent}[$root_i] = $root_j;
} elsif ($self->{rank}[$root_i] > $self->{rank}[$root_j]) {
$self->{parent}[$root_j] = $root_i;
} else {
$self->{parent}[$root_j] = $root_i;
$self->{rank}[$root_i]++;
}
}
}
package main;
# --- Helper Functions ---
sub print_container {
my ($container, $name) = @_;
print "$name: [" . join(", ", @$container) . "]\n";
}
sub print_edges {
my ($edges, $name) = @_;
print "$name: [";
my @edge_strings;
for my $edge (@$edges) {
push @edge_strings, sprintf("(%d, %d, %.2f)", $edge->{u}, $edge->{v}, $edge->{weight});
}
print join(", ", @edge_strings) . "]\n";
}
sub print_graph {
my ($graph, $name) = @_;
print "$name: {\n";
my $n = @$graph;
for my $i (0..$n-1) {
print " $i: {";
my @pairs;
for my $j (0..$n-1) {
if ($i != $j) {
push @pairs, sprintf("%d: %.2f", $j, $graph->[$i][$j]);
}
}
print join(", ", @pairs);
print "}" . ($i == $n-1 ? "" : ",") . "\n";
}
print "}\n";
}
# --- Euclidean Distance ---
sub get_length {
my ($p1, $p2) = @_;
my $dx = $p1->{x} - $p2->{x};
my $dy = $p1->{y} - $p2->{y};
return sqrt($dx * $dx + $dy * $dy);
}
# --- Build Complete Graph (Adjacency Matrix) ---
sub build_graph {
my ($data) = @_;
my $n = @$data;
my @graph;
for my $i (0..$n-1) {
for my $j (0..$n-1) {
$graph[$i][$j] = 0.0;
}
}
for my $i (0..$n-1) {
for my $j ($i+1..$n-1) {
my $dist = get_length($data->[$i], $data->[$j]);
$graph[$i][$j] = $dist;
$graph[$j][$i] = $dist; # Symmetric graph
}
}
return \@graph;
}
# --- Minimum Spanning Tree (Kruskal's Algorithm) ---
sub minimum_spanning_tree {
my ($graph) = @_;
my $n = @$graph;
return [] if $n == 0;
my @edges;
for my $i (0..$n-1) {
for my $j ($i+1..$n-1) {
push @edges, Edge->new($i, $j, $graph->[$i][$j]);
}
}
# Sort edges by weight
@edges = sort { $a->{weight} <=> $b->{weight} } @edges;
my @mst;
my $uf = UnionFind->new($n);
my $edges_count = 0;
for my $edge (@edges) {
if ($uf->find($edge->{u}) != $uf->find($edge->{v})) {
push @mst, $edge;
$uf->unite($edge->{u}, $edge->{v});
$edges_count++;
last if $edges_count == $n - 1; # MST has n-1 edges
}
}
return \@mst;
}
# --- Find Vertices with Odd Degree in MST ---
sub find_odd_vertexes {
my ($mst, $n) = @_;
my @degree = (0) x $n;
for my $edge (@$mst) {
$degree[$edge->{u}]++;
$degree[$edge->{v}]++;
}
my @odd_vertices;
for my $i (0..$n-1) {
if ($degree[$i] % 2 != 0) {
push @odd_vertices, $i;
}
}
return \@odd_vertices;
}
# --- Minimum Weight Matching (Greedy Heuristic) ---
sub minimum_weight_matching {
my ($mst, $graph, $odd_vertices) = @_;
# Use a copy to allow modification while iterating
my @current_odd = shuffle(@$odd_vertices);
# Keep track of vertices already matched in this phase
my @matched = (0) x @$graph;
for my $i (0..$#current_odd) {
my $v = $current_odd[$i];
next if $matched[$v]; # Skip if already matched
my $min_length = 'inf';
my $closest_u = -1;
# Find the closest unmatched odd vertex
for my $j ($i+1..$#current_odd) {
my $u = $current_odd[$j];
if (!$matched[$u]) { # Check if 'u' is available
if ($graph->[$v][$u] < $min_length) {
$min_length = $graph->[$v][$u];
$closest_u = $u;
}
}
}
if ($closest_u != -1) {
# Add the matching edge to the MST list (now a multigraph)
push @$mst, Edge->new($v, $closest_u, $min_length);
$matched[$v] = 1;
$matched[$closest_u] = 1; # Mark both as matched
}
}
}
# --- Find Eulerian Tour (Hierholzer's Algorithm) ---
sub find_eulerian_tour {
my ($matched_mst, $n) = @_;
return [] if @$matched_mst == 0;
# Build adjacency list representation of the multigraph
my @adj;
for my $i (0..$n-1) {
$adj[$i] = [];
}
my %edge_used;
for my $edge (@$matched_mst) {
push @{$adj[$edge->{u}]}, [$edge->{v}, $edge];
push @{$adj[$edge->{v}]}, [$edge->{u}, $edge];
$edge_used{$edge} = 0;
}
my @tour;
my @current_path;
# Start at any vertex with edges
my $start_node = $matched_mst->[0]->{u};
push @current_path, $start_node;
while (@current_path) {
my $current_node = $current_path[-1];
my $found_edge = 0;
# Find an unused edge from the current node
for my $neighbor_info (@{$adj[$current_node]}) {
my ($neighbor, $edge_ptr) = @$neighbor_info;
if (!$edge_used{$edge_ptr}) {
$edge_used{$edge_ptr} = 1; # Mark edge as used
# Push neighbor onto stack and move to it
push @current_path, $neighbor;
$found_edge = 1;
last; # Move to the neighbor
}
}
# If no unused edge was found from current_node, backtrack
if (!$found_edge) {
push @tour, pop @current_path;
}
}
# The tour is constructed in reverse order
return [reverse @tour];
}
# --- Main TSP Function (Christofides Approximation) ---
sub tsp {
my ($data) = @_;
my $n = @$data;
return (0.0, []) if $n == 0;
return (0.0, [$data->[0]->{id}]) if $n == 1;
# Build a graph
my $G = build_graph($data);
# print_graph($G, "Graph");
# Build a minimum spanning tree
my $MSTree = minimum_spanning_tree($G);
print_edges($MSTree, "MSTree");
# Find odd degree vertices
my $odd_vertexes = find_odd_vertexes($MSTree, $n);
print_container($odd_vertexes, "Odd vertexes in MSTree");
# Add minimum weight matching edges
minimum_weight_matching($MSTree, $G, $odd_vertexes);
print_edges($MSTree, "Minimum weight matching (MST + Matching Edges)");
# Find an Eulerian tour in the combined graph
my $eulerian_tour = find_eulerian_tour($MSTree, $n);
print_container($eulerian_tour, "Eulerian tour");
# --- Create Hamiltonian Circuit by Skipping Visited Nodes ---
if (@$eulerian_tour == 0) {
warn "Error: Eulerian tour could not be found.\n";
return (-1.0, []); # Indicate error
}
my @path;
my $length = 0.0;
my @visited = (0) x $n;
my $current = $eulerian_tour->[0];
push @path, $current;
$visited[$current] = 1;
for my $i (1..$#$eulerian_tour) {
my $v = $eulerian_tour->[$i];
if (!$visited[$v]) {
push @path, $v;
$visited[$v] = 1;
$length += $G->[$current][$v]; # Add distance from previous node in path
$current = $v; # Update current node in path
}
}
# Add the edge back to the start
$length += $G->[$current][$path[0]];
push @path, $path[0]; # Complete the cycle
print_container(\@path, "Result path");
printf "Result length of the path: %.2f\n", $length;
return ($length, \@path);
}
# --- Main Program ---
# Input data matching the C++ example
my @raw_data = (
[1380, 939], [2848, 96], [3510, 1671], [457, 334], [3888, 666], [984, 965], [2721, 1482], [1286, 525],
[2716, 1432], [738, 1325], [1251, 1832], [2728, 1698], [3815, 169], [3683, 1533], [1247, 1945], [123, 862],
[1234, 1946], [252, 1240], [611, 673], [2576, 1676], [928, 1700], [53, 857], [1807, 1711], [274, 1420],
[2574, 946], [178, 24], [2678, 1825], [1795, 962], [3384, 1498], [3520, 1079], [1256, 61], [1424, 1728],
[3913, 192], [3085, 1528], [2573, 1969], [463, 1670], [3875, 598], [298, 1513], [3479, 821], [2542, 236],
[3955, 1743], [1323, 280], [3447, 1830], [2936, 337], [1621, 1830], [3373, 1646], [1393, 1368],
[3874, 1318], [938, 955], [3022, 474], [2482, 1183], [3854, 923], [376, 825], [2519, 135], [2945, 1622],
[953, 268], [2628, 1479], [2097, 981], [890, 1846], [2139, 1806], [2421, 1007], [2290, 1810], [1115, 1052],
[2588, 302], [327, 265], [241, 341], [1917, 687], [2991, 792], [2573, 599], [19, 674], [3911, 1673],
[872, 1559], [2863, 558], [929, 1766], [839, 620], [3893, 102], [2178, 1619], [3822, 899], [378, 1048],
[1178, 100], [2599, 901], [3416, 143], [2961, 1605], [611, 1384], [3113, 885], [2597, 1830], [2586, 1286],
[161, 906], [1429, 134], [742, 1025], [1625, 1651], [1187, 706], [1787, 1009], [22, 987], [3640, 43],
[3756, 882], [776, 392], [1724, 1642], [198, 1810], [3950, 1558]
);
my @data_points;
for my $i (0..$#raw_data) {
push @data_points, Point->new($raw_data[$i][0], $raw_data[$i][1], $i);
}
tsp(\@data_points);
- Output:
MSTree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)] Odd vertexes in MSTree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98] Minimum weight matching (MST + Matching Edges): [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (31, 10, 201.85), (85, 34, 141.06), (92, 27, 47.68), (11, 76, 555.64), (83, 9, 140.04), (51, 77, 40.00), (59, 44, 518.56), (64, 65, 114.77), (93, 21, 133.65), (66, 60, 597.01), (96, 52, 589.48), (2, 42, 171.03), (53, 1, 331.30), (32, 75, 92.20), (81, 38, 680.92), (70, 40, 82.68), (72, 68, 292.88), (25, 69, 669.16), (58, 73, 89.00), (98, 16, 1044.89), (47, 29, 427.13), (46, 90, 365.94)] Eulerian tour: [14, 16, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 93, 21, 69, 25, 64, 65, 64, 3, 96, 74, 18, 52, 96, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 9, 83, 9, 71, 20, 73, 58, 73, 10, 31, 90, 97, 22, 59, 61, 85, 34, 85, 26, 11, 19, 56, 6, 8, 86, 50, 60, 57, 27, 92, 27, 66, 60, 24, 80, 68, 72, 49, 43, 1, 53, 39, 63, 68, 72, 67, 84, 38, 95, 77, 51, 77, 4, 36, 32, 75, 32, 12, 94, 81, 38, 29, 47, 99, 70, 40, 70, 13, 2, 42, 2, 45, 28, 33, 82, 54, 11, 76, 59, 44, 90, 46, 31, 10, 14] Result path: [14, 16, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 93, 69, 25, 64, 65, 3, 96, 74, 18, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 9, 83, 71, 20, 73, 58, 10, 31, 90, 97, 22, 59, 61, 85, 34, 26, 11, 19, 56, 6, 8, 86, 50, 60, 57, 27, 92, 66, 24, 80, 68, 72, 49, 43, 1, 53, 39, 63, 67, 84, 38, 95, 77, 51, 4, 36, 32, 75, 12, 94, 81, 29, 47, 99, 70, 40, 13, 2, 42, 45, 28, 33, 82, 54, 76, 44, 46, 14] Result length of the path: 24540.55
constant verbose = false -- different/random every time, like all other entries
enum X, Y, ID -- point
enum U, V, W -- edge
procedure printList(sequence container, string name, fmt)
-- Helper Function to print vectors/lists
if verbose then
printf(1,"%s: [%s]\n",{name,join(container,", ",fmt:=fmt)})
end if
end procedure
procedure printGraph(sequence graph, string name)
if verbose then
integer n := length(graph)
sequence lines = {}
for i=1 to n do
sequence s = {}
for j=1 to n do
if i != j then
s = append(s,sprintf("%d: %.2f", {j, graph[i][j]}))
end if
end for
lines = append(lines,sprintf(" %d: {%s}",{i,join(s,", ")}))
end for
printf(1,"%s: {\n%s\n}\n", {name,join(lines,",\n")})
end if
end procedure
function getLength(sequence p1, p2)
-- Euclidean Distance
atom dx := p1[X] - p2[X],
dy := p1[Y] - p2[Y]
return sqrt(dx*dx + dy*dy)
end function
function buildGraph(sequence data)
-- Build Complete Graph (Adjacency Matrix)
integer n := length(data)
sequence graph = repeat(repeat(0,n),n)
for i,di in data do
for j,dj in data from i+1 do // Only calculate upper triangle + diagonal is 0
atom dist := getLength(di, dj)
graph[i][j] = dist
graph[j][i] = dist // Symmetric graph
end for
end for
return graph
end function
sequence parent, rank
function find_parent(integer i)
-- A utility function to find the set of an element i (uses path compression technique)
if parent[i] == i then return i end if
integer result = find_parent(parent[i])
parent[i] = result -- Path compression
return result
end function
procedure unite(integer i, j)
-- A function that performs union __by rank__ of two sets x and y
integer i_root = find_parent(i),
j_root = find_parent(j)
if i_root!=j_root then
// Union by rank
-- Attach smaller rank tree under root of high rank tree
if rank[i_root] < rank[j_root] then
parent[i_root] = j_root
elsif rank[i_root] > rank[j_root] then
parent[j_root] = i_root
else
-- If ranks are the same, make one as root and increment its rank
parent[j_root] = i_root
rank[i_root] += 1
end if
end if
end procedure
function minimumSpanningTree(sequence graph)
-- Minimum Spanning Tree (Kruskal's Algorithm)
integer n := length(graph)
if n == 0 then return {} end if
sequence edges = {}
for i=1 to n do
for j=i+1 to n do // Avoid duplicates and self-loops
edges = append(edges, {i, j, graph[i][j]})
end for
end for
// Sort edges by weight
edges = sort_columns(edges,{W})
sequence mst := {}
parent = tagset(n)
rank = repeat(0,n)
integer edgesCount := 0
for edge in edges do
integer {u,v} = edge
if find_parent(u) != find_parent(v) then
mst = append(mst, edge)
unite(u, v)
edgesCount += 1
if edgesCount == n-1 then // Optimization: MST has n-1 edges
exit
end if
end if
end for
return mst
end function
function findOddVertexes(sequence mst, integer n)
-- Find Vertices with Odd Degree in MST
sequence degree := repeat(0,n)
for edge in mst do
integer {u,v} = edge
degree[u] += 1
degree[v] += 1
end for
sequence oddVertices := find_all(true,apply(degree,odd))
return oddVertices
end function
function minimumWeightMatching(sequence mst, graph, oddVertices)
-- Minimum Weight Matching (Greedy Heuristic)
// Create a copy to allow modification while iterating
// and Shuffle for randomness
sequence currentOdd := shuffle(oddVertices)
// Keep track of vertices already matched in this phase
sequence matched := repeat(false, length(graph))
sequence result := deep_copy(mst)
for i,v in currentOdd do
if not matched[v] then
atom minLength
integer closestU := -1
// Find the closest unmatched odd vertex
for j,u in currentOdd from i+1 do
if not matched[u] then
if closestU=-1 or graph[v][u] < minLength then
minLength = graph[v][u]
closestU = u
end if
end if
end for
if closestU != -1 then
// Add the matching edge to the MST list (now a multigraph)
result = append(result, {v, closestU, minLength})
matched[v] = true
matched[closestU] = true // Mark both as matched
end if
end if
end for
return result
end function
function findEulerianTour(sequence matchedMst, integer n)
-- Find Eulerian Tour (Hierholzer's Algorithm)
if length(matchedMst) == 0 then return {} end if
// Build adjacency list representation of the multigraph (MST + matching)
sequence adj := repeat({},n)
integer edgeUsed := new_dict()
for edge in matchedMst do
integer {u,v} = edge
adj[u] = append(adj[u], {v, edge})
adj[v] = append(adj[v], {u, edge})
setd(edge,false,edgeUsed)
end for
sequence tour := {},
currentPath := {}
// Start at any vertex with edges (e.g., the first vertex of the first edge)
integer startNode := matchedMst[1][U]
currentPath &= startNode
while length(currentPath) > 0 do
integer currentNode := currentPath[$],
foundEdge := false
// Find an unused edge from the current node
for i=1 to length(adj[currentNode]) do
{integer neighbor, sequence edge} := adj[currentNode][i]
if not getd(edge,edgeUsed) then
setd(edge,true,edgeUsed) // Mark edge as used
// Push neighbor onto stack and move to it
currentPath &= neighbor
foundEdge = true
exit // Move to the neighbor
end if
end for
// If no unused edge was found from currentNode, backtrack
if not foundEdge then
tour &= currentPath[$]
currentPath = currentPath[1..-2]
end if
end while
tour = reverse(tour)
return tour
end function
procedure tsp(sequence data)
-- Main TSP Function (Christofides Approximation)
integer n := length(data)
if n>1 then
// Build a graph
sequence G := buildGraph(data)
//printGraph(G, "Graph")
// Build a minimum spanning tree
sequence MSTree := minimumSpanningTree(G)
printList(MSTree, "MSTree", "(%d, %d, %.2f)")
// Find odd degree vertices
sequence oddVertexes := findOddVertexes(MSTree, n)
printList(oddVertexes, "Odd vertexes in MSTree","%d")
// Add minimum weight matching edges (using greedy heuristic)
// Note: This returns a new slice containing MST + matching edges
sequence MSTreeWithMatching := minimumWeightMatching(MSTree, G, oddVertexes)
printList(MSTreeWithMatching, "Minimum weight matching (MST + Matching Edges)","(%d, %d, %.2f)")
// Find an Eulerian tour in the combined graph
sequence eulerianTour := findEulerianTour(MSTreeWithMatching, n)
printList(eulerianTour, "Eulerian tour","%d")
// Create Hamiltonian Circuit by Skipping Visited Nodes
if length(eulerianTour) == 0 then
printf(1,"Error: Eulerian tour could not be found.\n")
return
end if
atom len := 0
sequence path := {},
visited := repeat(false,n)
integer current := eulerianTour[1]
path &= current
visited[current] = true
for v in eulerianTour from 2 do
if not visited[v] then
path &= v
visited[v] = true
len += G[current][v] // Add distance from previous node in path
current = v // Update current node in path
end if
end for
// Add the edge back to the start
len += G[current][path[1]]
path = append(path, path[1]) // Complete the cycle
printList(path, "Result path","%d")
printf(1,"Result length of the path: %.2f\n", len)
end if
end procedure
sequence raw = {{1380, 939}, {2848, 96}, {3510, 1671}, {457, 334}, {3888, 666}, {984, 965}, {2721, 1482},
{1286, 525}, {2716, 1432}, {738, 1325}, {1251, 1832}, {2728, 1698}, {3815, 169}, {3683, 1533},
{1247, 1945}, {123, 862}, {1234, 1946}, {252, 1240}, {611, 673}, {2576, 1676}, {928, 1700},
{53, 857}, {1807, 1711}, {274, 1420}, {2574, 946}, {178, 24}, {2678, 1825}, {1795, 962},
{3384, 1498}, {3520, 1079}, {1256, 61}, {1424, 1728}, {3913, 192}, {3085, 1528}, {2573, 1969},
{463, 1670}, {3875, 598}, {298, 1513}, {3479, 821}, {2542, 236}, {3955, 1743}, {1323, 280},
{3447, 1830}, {2936, 337}, {1621, 1830}, {3373, 1646}, {1393, 1368}, {3874, 1318}, {938, 955},
{3022, 474}, {2482, 1183}, {3854, 923}, {376, 825}, {2519, 135}, {2945, 1622}, {953, 268},
{2628, 1479}, {2097, 981}, {890, 1846}, {2139, 1806}, {2421, 1007}, {2290, 1810}, {1115, 1052},
{2588, 302}, {327, 265}, {241, 341}, {1917, 687}, {2991, 792}, {2573, 599}, {19, 674},
{3911, 1673}, {872, 1559}, {2863, 558}, {929, 1766}, {839, 620}, {3893, 102}, {2178, 1619},
{3822, 899}, {378, 1048}, {1178, 100}, {2599, 901}, {3416, 143}, {2961, 1605}, {611, 1384},
{3113, 885}, {2597, 1830}, {2586, 1286}, {161, 906}, {1429, 134}, {742, 1025}, {1625, 1651},
{1187, 706}, {1787, 1009}, {22, 987}, {3640, 43}, {3756, 882}, {776, 392}, {1724, 1642},
{198, 1810}, {3950, 1558}}
-- set_rand(-1240037098.0) -- uncomment to replicate result below)
tsp(split_by(flatten(columnize({raw,tagset(length(raw)-1,0)})),3))
- Output:
(best of ~100,000 runs)
Result length of the path: 23943.31
from dataclasses import dataclass
from typing import Callable, List, Optional, Tuple
import math
import random
from functools import cmp_to_key
@dataclass
class Point:
coords: Tuple[float, float]
id_: int
@dataclass
class Edge:
u: int
v: int
weight: float
def __repr__(self) -> str:
return f"({self.u},{self.v},{self.weight:.2f})"
class Graph:
"""
Graph supporting Christofides algorithm for metric TSP approximation.
"""
class UnionFind:
def __init__(self, n: int):
self.parent: List[int] = list(range(n))
self.rank: List[int] = [0] * n
def find(self, x: int) -> int:
# Path compression
if self.parent[x] != x:
self.parent[x] = self.find(self.parent[x])
return self.parent[x]
def union(self, x: int, y: int) -> bool:
# Union by rank
rx, ry = self.find(x), self.find(y)
if rx == ry:
return False # Already connected
if self.rank[rx] < self.rank[ry]:
self.parent[rx] = ry
elif self.rank[rx] > self.rank[ry]:
self.parent[ry] = rx
else:
self.parent[ry] = rx
self.rank[rx] += 1
return True
def __init__(self, points: List[Point]):
self.n = len(points)
# Initialise distance matrix with distinct rows
self.dist: List[List[float]] = [[0.0]*self.n for _ in range(self.n)]
# Compute all pairwise Euclidean distances
for i in range(self.n):
for j in range(i+1, self.n):
d = math.hypot(
points[i].coords[0]-points[j].coords[0],
points[i].coords[1]-points[j].coords[1]
)
self.dist[i][j] = self.dist[j][i] = d
def minimumSpanningTree(self) -> List[Edge]:
# Generate all edges between points
edges = [
Edge(i, j, self.dist[i][j])
for i in range(self.n)
for j in range(i+1, self.n)
]
# Sort edges by weight (greedy approach)
edges.sort(key=lambda e: e.weight)
uf = Graph.UnionFind(self.n)
mst: List[Edge] = []
for e in edges:
if uf.union(e.u, e.v): # Only add edge if it doesn't form a cycle
mst.append(e)
if len(mst) == self.n - 1:
break # MST completed
return mst
def oddVertices(self, mst: List[Edge]) -> List[int]:
# Count degrees of each vertex in MST
degree = [0] * self.n
for e in mst:
degree[e.u] += 1
degree[e.v] += 1
# Return vertices with odd degree
return [i for i, deg in enumerate(degree) if deg % 2 == 1]
def minimumWeightMatching(self, odd: List[int]) -> List[Edge]:
# Greedy minimum weight matching on odd-degree vertices
unmatched = set(odd)
matching: List[Edge] = []
while unmatched:
v = unmatched.pop()
# Find closest unmatched vertex
u = min(unmatched, key=lambda x: self.dist[v][x])
unmatched.remove(u)
matching.append(Edge(v, u, self.dist[v][u]))
return matching
def eulerianTour(self, edges: List[Edge]) -> List[int]:
# Construct adjacency list for multigraph
adj: List[List[Tuple[int, int]]] = [[] for _ in range(self.n)] # (neighbor, edge_id)
for idx, e in enumerate(edges):
adj[e.u].append((e.v, idx))
adj[e.v].append((e.u, idx))
used = [False]*len(edges) # Track used edges
stack = [0] # Start DFS from vertex 0
path: List[int] = []
while stack:
v = stack[-1]
# Remove used edges
while adj[v] and used[adj[v][-1][1]]:
adj[v].pop()
if not adj[v]:
path.append(stack.pop()) # Backtrack
else:
u, eid = adj[v].pop()
used[eid] = True
stack.append(u)
return path[::-1] # Reverse to get correct order
def makeHamiltonian(self, tour: List[int]) -> Tuple[List[int], float]:
visited = set()
circuit: List[int] = []
length = 0.0
for v in tour:
if v not in visited:
if circuit:
length += self.dist[circuit[-1]][v] # Accumulate path length
circuit.append(v)
visited.add(v)
# Close the circuit
length += self.dist[circuit[-1]][circuit[0]]
circuit.append(circuit[0])
return circuit, length
# Christofides algorithm wrapper
def christofides(points: List[Point]) -> Tuple[List[int], float]:
if not points:
return [], 0.0
g = Graph(points)
mst = g.minimumSpanningTree()
odd = g.oddVertices(mst)
matching = g.minimumWeightMatching(odd)
# Combine MST and matching to form multigraph
multiedges = mst + matching
tour = g.eulerianTour(multiedges)
return g.makeHamiltonian(tour)
if __name__ == "__main__":
# Sample test data (TSP instance)
raw_data: list[tuple[int, int]] = [
(1380, 939), (2848, 96), (3510, 1671), (457, 334), (3888, 666),
(984, 965), (2721, 1482), (1286, 525), (2716, 1432), (738, 1325),
(1251, 1832), (2728, 1698), (3815, 169), (3683, 1533), (1247,1945),
(123, 862), (1234, 1946), (252, 1240), (611, 673), (2576, 1676),
(928, 1700), (53, 857), (1807, 1711), (274, 1420), (2574, 946),
(178, 24), (2678, 1825), (1795, 962), (3384, 1498), (3520, 1079),
(1256, 61), (1424, 1728), (3913, 192), (3085, 1528), (2573, 1969),
(463, 1670), (3875, 598), (298, 1513), (3479, 821), (2542, 236),
(3955, 1743), (1323, 280), (3447, 1830), (2936, 337), (1621, 1830),
(3373, 1646), (1393, 1368), (3874, 1318), (938, 955), (3022, 474),
(2482, 1183), (3854, 923), (376, 825), (2519, 135), (2945, 1622),
(953, 268), (2628, 1479), (2097, 981), (890, 1846), (2139, 1806),
(2421, 1007), (2290, 1810), (1115, 1052), (2588, 302), (327, 265),
(241, 341), (1917, 687), (2991, 792), (2573, 599), (19, 674),
(3911, 1673), (872, 1559), (2863, 558), (929, 1766), (839, 620),
(3893, 102), (2178, 1619), (3822, 899), (378, 1048), (1178, 100),
(2599, 901), (3416, 143), (2961, 1605), (611, 1384), (3113, 885),
(2597, 1830), (2586, 1286), (161, 906), (1429, 134), (742, 1025),
(1625, 1651), (1187, 706), (1787, 1009), (22, 987), (3640, 43),
(3756, 882), (776, 392), (1724, 1642), (198, 1810), (3950, 1558)
]
# Create "Point" objects with IDs
points = [Point(coords, i) for i, coords in enumerate(raw_data)]
# Run Christofides algorithm
tour, length = christofides(points)
print("Tour:", tour)
print("Length:", length)
- Output:
Tour: [0, 91, 7, 41, 88, 30, 79, 55, 96, 65, 64, 25, 3, 74, 18, 52, 69, 21, 93, 15, 87, 78, 17, 23, 37, 35, 98, 81, 94, 12, 32, 75, 36, 4, 77, 76, 59, 34, 85, 11, 54, 82, 33, 28, 45, 2, 42, 13, 70, 40, 99, 47, 51, 95, 38, 29, 84, 67, 72, 66, 27, 92, 57, 60, 68, 63, 39, 53, 1, 43, 49, 80, 24, 50, 86, 8, 6, 56, 19, 26, 61, 22, 97, 90, 31, 46, 44, 10, 16, 14, 73, 58, 20, 71, 9, 83, 89, 48, 5, 62, 0] Length: 28687.164177500665
# TSP Christofides Algorithm Implementation in R
# Helper function to print containers
print_container <- function(container, name, zerobase = TRUE) {
cat(sprintf("%s: %s\n", name, paste(container - as.numeric(zerobase), collapse = ", ")))
}
# Helper function to print graph edges
print_edges <- function(edges, name, zerobase = TRUE) {
cat(sprintf("%s: [", name))
for (i in seq_along(edges)) {
edge <- edges[[i]]
u <- edge$u - as.numeric(zerobase)
v <- edge$v - as.numeric(zerobase)
if (i > 1 && i < length(edges)) cat(", ")
cat(sprintf("(%d, %d, %.2f)", u, v, edge$weight))
}
cat("]\n")
}
# Helper function to print graph
print_graph <- function(graph, name, zerobase = TRUE) {
cat(sprintf("%s: {\n", name))
n <- nrow(graph)
for (i in 1:n) {
cat(sprintf(" %d: {", i - as.numeric(zerobase)))
first <- TRUE
for (j in 1:n) {
if (i != j) {
if (!first) cat(", ")
cat(sprintf("%d: %.2f", j - as.numeric(zerobase), graph[i, j]))
first <- FALSE
}
}
cat(sprintf("}%s\n", ifelse(i == n, "", ",")))
}
cat("}\n")
}
# Euclidean distance function
get_length <- function(p1, p2) {
sqrt((p1$x - p2$x)^2 + (p1$y - p2$y)^2)
}
# Build complete graph (adjacency matrix)
build_graph <- function(data) {
n <- length(data)
graph <- matrix(0, n, n)
for (i in 1:n) {
for (j in (i+1):n) {
if (j <= n) {
dist <- get_length(data[[i]], data[[j]])
graph[i, j] <- dist
graph[j, i] <- dist
}
}
}
return(graph)
}
# Union-Find data structure
create_union_find <- function(n) {
list(
parent = 1:n,
rank = rep(0, n)
)
}
# Find function with path compression
find_uf <- function(uf, i) {
if (uf$parent[i] == i) {
return(i)
}
uf$parent[i] <- find_uf(uf, uf$parent[i])
return(uf$parent[i])
}
# Union function by rank
unite_uf <- function(uf, i, j) {
rootI <- find_uf(uf, i)
rootJ <- find_uf(uf, j)
if (rootI != rootJ) {
if (uf$rank[rootI] < uf$rank[rootJ]) {
uf$parent[rootI] <- rootJ
} else if (uf$rank[rootI] > uf$rank[rootJ]) {
uf$parent[rootJ] <- rootI
} else {
uf$parent[rootJ] <- rootI
uf$rank[rootI] <- uf$rank[rootI] + 1
}
}
}
# Create edge list
create_edge <- function(u, v, weight) {
list(u = u, v = v, weight = weight)
}
# Minimum Spanning Tree (Kruskal's Algorithm)
minimum_spanning_tree <- function(graph) {
n <- nrow(graph)
if (n == 0) return(list())
edges <- list()
for (i in 1:n) {
for (j in (i+1):n) {
if (j <= n) {
edges <- append(edges, list(create_edge(i, j, graph[i, j])), after = length(edges))
}
}
}
# Sort edges by weight
edges <- edges[order(sapply(edges, function(e) e$weight))]
mst <- list()
uf <- create_union_find(n)
edges_count <- 0
for (edge in edges) {
if (find_uf(uf, edge$u) != find_uf(uf, edge$v)) {
mst <- append(mst, list(edge), after = length(mst))
unite_uf(uf, edge$u, edge$v)
edges_count <- edges_count + 1
if (edges_count == n - 1) break
}
}
return(mst)
}
# Find vertices with odd degree in MST
find_odd_vertices <- function(mst, n) {
degree <- rep(0, n)
for (edge in mst) {
degree[edge$u] <- degree[edge$u] + 1
degree[edge$v] <- degree[edge$v] + 1
}
return(which(degree %% 2 == 1))
}
# Minimum weight matching (greedy heuristic)
minimum_weight_matching <- function(mst, graph, odd_vertices) {
current_odd <- sample(odd_vertices) # Shuffle for randomness
matched <- rep(FALSE, nrow(graph))
for (i in seq_along(current_odd)) {
v <- current_odd[i]
if (matched[v]) next # Skip if already matched
min_length <- .Machine$double.xmax
closest_u <- -1
# Find the closest unmatched odd vertex
if (i < length(current_odd)) {
for (j in (i+1):length(current_odd)) {
u <- current_odd[j]
if (!matched[u]) {
if (graph[v, u] < min_length) {
min_length <- graph[v, u]
closest_u <- u
}
}
}
}
if (closest_u != -1) {
# Add the matching edge to the MST list
mst <- append(mst, list(create_edge(v, closest_u, min_length)), after = length(mst))
matched[v] <- TRUE
matched[closest_u] <- TRUE
}
}
return(mst)
}
# Find Eulerian tour (Hierholzer's algorithm)
find_eulerian_tour <- function(matched_mst, n) {
if (length(matched_mst) == 0) return(integer(0))
# Build adjacency list representation
adj <- vector("list", n)
for (i in 1:n) {
adj[[i]] <- list()
}
edge_used <- list()
for (i in seq_along(matched_mst)) {
edge <- matched_mst[[i]]
adj[[edge$u]] <- append(adj[[edge$u]], list(list(neighbor = edge$v, edge_idx = i)), after = length(adj[[edge$u]]))
adj[[edge$v]] <- append(adj[[edge$v]], list(list(neighbor = edge$u, edge_idx = i)), after = length(adj[[edge$v]]))
edge_used[[i]] <- FALSE
}
tour <- integer(0)
current_path <- integer(0)
# Start at any vertex with edges
start_node <- matched_mst[[1]]$u
current_path <- c(current_path, start_node)
while (length(current_path) > 0) {
current_node <- current_path[length(current_path)]
found_edge <- FALSE
# Find an unused edge from current node
for (neighbor_info in adj[[current_node]]) {
neighbor <- neighbor_info$neighbor
edge_idx <- neighbor_info$edge_idx
if (!edge_used[[edge_idx]]) {
edge_used[[edge_idx]] <- TRUE
current_path <- c(current_path, neighbor)
found_edge <- TRUE
break
}
}
# If no unused edge found, backtrack
if (!found_edge) {
tour <- c(tour, current_path[length(current_path)])
current_path <- current_path[-length(current_path)]
}
}
return(rev(tour))
}
# Main TSP function (Christofides approximation)
tsp <- function(data) {
n <- length(data)
if (n == 0) return(list(length = 0.0, path = integer(0)))
if (n == 1) return(list(length = 0.0, path = data[[1]]$id))
# Build graph
g <- build_graph(data)
ms_tree <- minimum_spanning_tree(g)
print_edges(ms_tree, "MSTree")
# Find odd degree vertices
odd_vertices <- find_odd_vertices(ms_tree, n)
print_container(odd_vertices, "Odd vertices in MSTree")
# Add minimum weight matching edges
ms_tree <- minimum_weight_matching(ms_tree, g, odd_vertices)
print_edges(ms_tree, "Minimum weight matching (MST + Matching Edges)")
# Find Eulerian tour
eulerian_tour <- find_eulerian_tour(ms_tree, n)
print_container(eulerian_tour, "Eulerian tour")
# Create Hamiltonian circuit by skipping visited nodes
if (length(eulerian_tour) == 0) {
cat("Error: Eulerian tour could not be found.\n")
return(list(length = -1.0, path = integer(0)))
}
path <- integer(0)
len <- 0.0
visited <- rep(FALSE, n)
current <- eulerian_tour[1]
path <- c(path, current)
visited[current] <- TRUE
for (v in eulerian_tour) {
if (!visited[v]) {
path <- c(path, v)
visited[v] <- TRUE
len <- len + g[current, v]
current <- v
}
}
# Add edge back to start
len <- len + g[current, path[1]]
path <- c(path, path[1])
print_container(path, "Result path")
cat(sprintf("Result length of the path: %.2f\n", len))
return(list(length = len, path = path))
}
# Input data matching the original example
raw_data <- list(
c(1380, 939), c(2848, 96), c(3510, 1671), c(457, 334), c(3888, 666), c(984, 965), c(2721, 1482), c(1286, 525),
c(2716, 1432), c(738, 1325), c(1251, 1832), c(2728, 1698), c(3815, 169), c(3683, 1533), c(1247, 1945), c(123, 862),
c(1234, 1946), c(252, 1240), c(611, 673), c(2576, 1676), c(928, 1700), c(53, 857), c(1807, 1711), c(274, 1420),
c(2574, 946), c(178, 24), c(2678, 1825), c(1795, 962), c(3384, 1498), c(3520, 1079), c(1256, 61), c(1424, 1728),
c(3913, 192), c(3085, 1528), c(2573, 1969), c(463, 1670), c(3875, 598), c(298, 1513), c(3479, 821), c(2542, 236),
c(3955, 1743), c(1323, 280), c(3447, 1830), c(2936, 337), c(1621, 1830), c(3373, 1646), c(1393, 1368),
c(3874, 1318), c(938, 955), c(3022, 474), c(2482, 1183), c(3854, 923), c(376, 825), c(2519, 135), c(2945, 1622),
c(953, 268), c(2628, 1479), c(2097, 981), c(890, 1846), c(2139, 1806), c(2421, 1007), c(2290, 1810), c(1115, 1052),
c(2588, 302), c(327, 265), c(241, 341), c(1917, 687), c(2991, 792), c(2573, 599), c(19, 674), c(3911, 1673),
c(872, 1559), c(2863, 558), c(929, 1766), c(839, 620), c(3893, 102), c(2178, 1619), c(3822, 899), c(378, 1048),
c(1178, 100), c(2599, 901), c(3416, 143), c(2961, 1605), c(611, 1384), c(3113, 885), c(2597, 1830), c(2586, 1286),
c(161, 906), c(1429, 134), c(742, 1025), c(1625, 1651), c(1187, 706), c(1787, 1009), c(22, 987), c(3640, 43),
c(3756, 882), c(776, 392), c(1724, 1642), c(198, 1810), c(3950, 1558)
)
# Create points list
points <- list()
for (i in seq_along(raw_data)) {
points[[i]] <- list(x = raw_data[[i]][1], y = raw_data[[i]][2], id = i)
}
# Run TSP algorithm
result <- tsp(points)
- Output:
MSTree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (8, 56, 99.76), (12, 32, 100.66), (12, 75, 102.83), (39, 53, 103.59), (51, 95, 106.23), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (10, 16, 115.26), (21, 87, 118.60), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (20, 58, 150.86), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (19, 85, 155.43), (5, 62, 157.26), (15, 93, 160.70), (87, 93, 160.88), (43, 49, 161.76), (24, 60, 164.71), (33, 54, 168.63), (2, 42, 171.03), (26, 34, 178.22), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (19, 26, 180.57), (53, 63, 180.69), (17, 23, 181.34), (40, 99, 185.07), (11, 85, 185.97), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (22, 90, 191.64), (8, 86, 195.49), (56, 86, 197.52), (42, 45, 198.32), (48, 62, 201.84), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (60, 80, 207.17), (48, 89, 208.12), (2, 28, 214.02), (44, 97, 214.37), (71, 73, 214.70), (15, 69, 214.85), (31, 90, 215.24), (12, 94, 215.64), (3, 65, 216.11), (6, 11, 216.11), (55, 96, 216.11), (22, 44, 220.81), (2, 13, 221.30), (61, 76, 221.42), (31, 44, 221.84), (52, 78, 223.01), (35, 37, 227.76), (30, 41, 229.02), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (41, 79, 231.14), (43, 72, 232.74)(18, 74, 234.08)] Odd vertices in MSTree: 4, 6, 7, 8, 9, 10, 11, 12, 13, 18, 20, 22, 27, 30, 31, 35, 36, 41, 45, 48, 54, 55, 60, 67, 73, 74, 83, 84, 86, 89, 91, 92, 93, 94, 96, 97 Minimum weight matching (MST + Matching Edges): [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (8, 56, 99.76), (12, 32, 100.66), (12, 75, 102.83), (39, 53, 103.59), (51, 95, 106.23), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (10, 16, 115.26), (21, 87, 118.60), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (20, 58, 150.86), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (19, 85, 155.43), (5, 62, 157.26), (15, 93, 160.70), (87, 93, 160.88), (43, 49, 161.76), (24, 60, 164.71), (33, 54, 168.63), (2, 42, 171.03), (26, 34, 178.22), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (19, 26, 180.57), (53, 63, 180.69), (17, 23, 181.34), (40, 99, 185.07), (11, 85, 185.97), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (22, 90, 191.64), (8, 86, 195.49), (56, 86, 197.52), (42, 45, 198.32), (48, 62, 201.84), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (60, 80, 207.17), (48, 89, 208.12), (2, 28, 214.02), (44, 97, 214.37), (71, 73, 214.70), (15, 69, 214.85), (31, 90, 215.24), (12, 94, 215.64), (3, 65, 216.11), (6, 11, 216.11), (55, 96, 216.11), (22, 44, 220.81), (2, 13, 221.30), (61, 76, 221.42), (31, 44, 221.84), (52, 78, 223.01), (35, 37, 227.76), (30, 41, 229.02), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (41, 79, 231.14), (43, 72, 232.74), (18, 74, 234.08), (89, 48, 208.12), (54, 11, 229.92), (20, 73, 66.01), (30, 41, 229.02), (31, 10, 201.85), (94, 12, 215.64), (27, 92, 47.68), (45, 13, 329.95), (83, 9, 140.04), (97, 22, 107.94), (67, 84, 153.40), (60, 86, 324.14), (4, 36, 69.23), (93, 18, 667.47), (6, 8, 50.25), (96, 55, 216.11), (7, 91, 206.31)(74, 35, 1115.29)] Eulerian tour: 14, 16, 10, 31, 90, 97, 22, 90, 44, 97, 22, 44, 31, 10, 14 Result path: 14, 16, 10, 31, 90, 97, 22, 44, 14 Result length of the path: 1364.83
# 20250626 Raku programming solution
# --- Helper Classes ---
class Point { has ($.x, $.y, $.id);
method new($x, $y, $id) { self.bless(:$x, :$y, :$id) }
}
class Edge { has ($.u, $.v, $.weight);
method new($u, $v, $weight) { self.bless(:$u, :$v, :$weight) }
method gist() { "({$.u}, {$.v}, {$.weight.fmt('%.2f')})" }
}
# --- Helper Functions for Printing ---
sub print-container(@container,$name) { say "$name: [{@container.join(', ')}]" }
sub print-edges(@edges,$name) { say "$name: [{@edges.map(*.gist).join(', ')}]" }
# --- Euclidean Distance ---
sub get-length(Point $p1, Point $p2) { sqrt( ($p1.x-$p2.x)² + ($p1.y-$p2.y)² ) }
# --- Build Complete Graph (Adjacency Matrix) ---
sub build-graph(@data) {
my ($n, @graph) = @data.elems;
for ^$n -> $i { # Symmetric graph
for $i ^..^ $n -> $j {
(@graph[$i;$j], @graph[$j;$i]) = get-length(@data[$i], @data[$j]) xx 2
}
}
return @graph
}
# --- Union-Find Data Structure ---
class UnionFind {
has (@.parent, @.rank);
method new($n) { self.bless: parent => ^$n, rank => 0 xx $n }
method find($i) {
return $i if @.parent[$i] == $i;
return @.parent[$i] = self.find(@.parent[$i]) # Path compression
}
method unite($i, $j) {
my ($root-i, $root-j) = self.find($i), self.find($j);
if $root-i != $root-j { # Union by rank
if @.rank[$root-i] < @.rank[$root-j] {
@.parent[$root-i] = $root-j;
} elsif @.rank[$root-i] > @.rank[$root-j] {
@.parent[$root-j] = $root-i;
} else {
@.parent[$root-j] = $root-i;
@.rank[$root-i]++;
}
}
}
}
# --- Minimum Spanning Tree (Kruskal's Algorithm) ---
sub minimum-spanning-tree(@graph) {
my $n = @graph.elems;
return [] if $n == 0;
my @edges = ( gather for ^$n -> $i {
for $i ^..^$n -> $j {
take Edge.new($i, $j, @graph[$i][$j])
}
} ).sort(*.weight);
my ($uf, $edges-count, @mst) = UnionFind.new($n), 0;
for @edges -> $edge {
if $uf.find($edge.u) != $uf.find($edge.v) {
@mst.push($edge);
$uf.unite($edge.u, $edge.v);
last if ++$edges-count == $n - 1; # MST has n-1 edges
}
}
return @mst
}
# --- Find Vertices with Odd Degree in MST ---
sub find-odd-vertices(@mst, $n) {
my @degree;
for @mst -> $edge { (@degree[$edge.u], @degree[$edge.v])>>++ }
return gather for ^$n -> $i { unless @degree[$i] %% 2 { take $i } }
}
# --- Minimum Weight Matching (Greedy Heuristic) ---
sub minimum-weight-matching(@mst is copy, @graph, @odd-vertices is copy) {
@odd-vertices .= pick(*); # Shuffle for randomness
# Keep track of vertices already matched in this phase
my @matched = False xx @graph.elems;
for ^@odd-vertices.elems -> $i {
my $v = @odd-vertices[$i];
next if @matched[$v].Bool; # Skip if already matched
my $min-length = Inf;
my $closest-u = -1;
# Find the closest unmatched odd vertex
for $i ^..^@odd-vertices.elems -> $j {
my $u = @odd-vertices[$j];
unless @matched[$u].Bool { # Check if 'u' is available
if @graph[$v][$u] < $min-length {
($min-length, $closest-u) = @graph[$v][$u], $u;
}
}
}
if $closest-u != -1 {
# Add the matching edge to the MST list (now a multigraph)
@mst.push(Edge.new($v, $closest-u, $min-length));
@matched[$v, $closest-u] = True xx 2; # Mark both as matched
}
}
return @mst;
}
# --- Find Eulerian Tour (Hierholzer's Algorithm) ---
sub find-eulerian-tour(@matched-mst, $n) {
return [] if @matched-mst.elems == 0;
# Build adjacency list representation of the multigraph (MST + matching)
# Each element will be a hash with neighbor and edge-ptr keys
my (@adj, %edge-used) = [] xx $n - 1;
for @matched-mst -> $edge {
@adj[$edge.u].push({ neighbor => $edge.v, edge-ptr => $edge });
@adj[$edge.v].push({ neighbor => $edge.u, edge-ptr => $edge });
%edge-used{$edge} = False;
}
my (@tour, @current-path);
# Start at any vertex with edges (e.g., the first vertex of the first edge)
#my $start-node = @matched-mst[0].u;
@current-path.push(my $start-node = @matched-mst[0].u);
while @current-path.elems > 0 {
my ($current-node, $found-edge) = @current-path[*-1], False;
# Find an unused edge from the current node
for 0..^@adj[$current-node].elems -> $idx {
my $edge-info = @adj[$current-node][$idx];
my ($neighbor, $edge-ptr) = $edge-info<neighbor>, $edge-info<edge-ptr>;
unless %edge-used{$edge-ptr}.Bool {
%edge-used{$edge-ptr} = True; # Mark edge as used
# Push neighbor onto stack and move to it
@current-path.push($neighbor);
$found-edge = True;
last; # Move to the neighbor
}
}
# If no unused edge was found from currentNode, backtrack
unless $found-edge.Bool { @tour.push: @current-path.pop }
}
return @tour.reverse # Reverse the tour
}
# --- Main TSP Function (Christofides Approximation) ---
sub tsp(@data) {
my $n = @data.elems;
return (0.0, []) if $n == 0;
return (0.0, [@data[0].id]) if $n == 1;
my @G = build-graph(@data); # Build a graph
# Build a minimum spanning tree
my @MSTree = minimum-spanning-tree(@G);
print-edges(@MSTree, "MSTree");
# Find odd degree vertices
my @odd-vertices = find-odd-vertices(@MSTree, $n);
print-container(@odd-vertices, "Odd vertexes in MSTree");
# Add minimum weight matching edges (using greedy heuristic)
my @MSTree-with-matching = minimum-weight-matching(@MSTree, @G, @odd-vertices);
print-edges(@MSTree-with-matching, "Minimum weight matching (MST + Matching Edges)");
# Find an Eulerian tour in the combined graph
my @eulerian-tour = find-eulerian-tour(@MSTree-with-matching, $n);
print-container(@eulerian-tour, "Eulerian tour");
# --- Create Hamiltonian Circuit by Skipping Visited Nodes ---
if @eulerian-tour.elems == 0 {
say "Error: Eulerian tour could not be found.";
return (-1.0, []);
}
my ($length, @visited, @path) = 0.0, False xx $n;
@path.push(my $current = @eulerian-tour[0]);
@visited[$current] = True;
for 1..^@eulerian-tour.elems -> $i {
unless @visited[ my $v = @eulerian-tour[$i] ].Bool {
@path.push($v);
@visited[$v] = True;
$length += @G[$current][$v]; # Add distance from previous node in path
$current = $v; # Update current node in path
}
}
# Add the edge back to the start
$length += @G[$current][@path[0]];
@path.push(@path[0]); # Complete the cycle
print-container(@path, "Result path");
say "Result length of the path: {$length.fmt('%.2f')}";
return ($length, @path);
}
my @data = [ # Input data matching the Go example
<1380 939>, <2848 96>, <3510 1671>, <457 334>, <3888 666>, <984 965>,
<2721 1482>, <1286 525>, <2716 1432>, <738 1325>, <1251 1832>, <2728 1698>,
<3815 169>, <3683 1533>, <1247 1945>, <123 862>, <1234 1946>, <252 1240>,
<611 673>, <2576 1676>, <928 1700>, <53 857>, <1807 1711>, <274 1420>,
<2574 946>, <178 24>, <2678 1825>, <1795 962>, <3384 1498>, <3520 1079>,
<1256 61>, <1424 1728>, <3913 192>, <3085 1528>, <2573 1969>, <463 1670>,
<3875 598>, <298 1513>, <3479 821>, <2542 236>, <3955 1743>, <1323 280>,
<3447 1830>, <2936 337>, <1621 1830>, <3373 1646>, <1393 1368>, <3874 1318>,
<938 955>, <3022 474>, <2482 1183>, <3854 923>, <376 825>, <2519 135>,
<2945 1622>, <953 268>, <2628 1479>, <2097 981>, <890 1846>, <2139 1806>,
<2421 1007>, <2290 1810>, <1115 1052>, <2588 302>, <327 265>, <241 341>,
<1917 687>, <2991 792>, <2573 599>, <19 674>, <3911 1673>, <872 1559>,
<2863 558>, <929 1766>, <839 620>, <3893 102>, <2178 1619>, <3822 899>,
<378 1048>, <1178 100>, <2599 901>, <3416 143>, <2961 1605>, <611 1384>,
<3113 885>, <2597 1830>, <2586 1286>, <161 906>, <1429 134>, <742 1025>,
<1625 1651>, <1187 706>, <1787 1009>, <22 987>, <3640 43>, <3756 882>,
<776 392>, <1724 1642>, <198 1810>, <3950 1558>,
];
srand 123456; # deterministic output
tsp( @data.kv.map: -> $i, @point { Point.new: @point[0], @point[1], $i } )
You may Attempt This Online!
use std::collections::HashSet;
use std::f64;
use rand::seq::SliceRandom;
use rand::thread_rng;
// --- Structs ---
#[derive(Debug, Clone, Copy, PartialEq)]
struct Point {
id: usize, // Original index or assigned ID
x: f64,
y: f64,
}
#[derive(Debug, Clone, Copy)]
struct Edge {
u: usize,
v: usize,
weight: f64,
}
// Implement PartialEq, Eq, PartialOrd, Ord for sorting Edges by weight
impl PartialEq for Edge {
fn eq(&self, other: &Self) -> bool {
self.weight == other.weight
}
}
impl Eq for Edge {}
impl PartialOrd for Edge {
fn partial_cmp(&self, other: &Self) -> Option<std::cmp::Ordering> {
self.weight.partial_cmp(&other.weight)
}
}
impl Ord for Edge {
fn cmp(&self, other: &Self) -> std::cmp::Ordering {
self.partial_cmp(other).unwrap_or(std::cmp::Ordering::Equal) // Panic on NaN, ok for this problem
}
}
// --- Helper Functions ---
fn print_usize_vec(vec: &[usize], name: &str) {
let content: Vec<String> = vec.iter().map(|&x| x.to_string()).collect();
println!("{}: [{}]", name, content.join(", "));
}
fn print_edges(edges: &[Edge], name: &str) {
let edge_strings: Vec<String> = edges
.iter()
.map(|e| format!("({}, {}, {:.2})", e.u, e.v, e.weight))
.collect();
println!("{}: [{}]", name, edge_strings.join(", "));
}
fn print_graph(graph: &[Vec<f64>], name: &str) {
println!("{}: {{", name);
let n = graph.len();
for i in 0..n {
let entries: Vec<String> = (0..n)
.filter(|&j| i != j)
.map(|j| format!("{}: {:.2}", j, graph[i][j]))
.collect();
println!(" {}: {{{}}}{}", i, entries.join(", "), if i == n - 1 { "" } else { "," });
}
println!("}}");
}
// --- Euclidean Distance ---
fn get_length(p1: Point, p2: Point) -> f64 {
let dx = p1.x - p2.x;
let dy = p1.y - p2.y;
(dx * dx + dy * dy).sqrt()
}
// --- Build Complete Graph (Adjacency Matrix) ---
fn build_graph(data: &[Point]) -> Vec<Vec<f64>> {
let n = data.len();
let mut graph = vec![vec![0.0; n]; n];
for i in 0..n {
for j in i + 1..n { // Only calculate upper triangle
let dist = get_length(data[i], data[j]);
graph[i][j] = dist;
graph[j][i] = dist; // Symmetric graph
}
}
graph
}
// --- Union-Find Data Structure ---
struct UnionFind {
parent: Vec<usize>,
rank: Vec<usize>,
}
impl UnionFind {
fn new(n: usize) -> Self {
UnionFind {
parent: (0..n).collect(),
rank: vec![0; n],
}
}
fn find(&mut self, i: usize) -> usize {
if self.parent[i] == i {
i
} else {
// Path compression
self.parent[i] = self.find(self.parent[i]);
self.parent[i]
}
}
fn unite(&mut self, i: usize, j: usize) -> bool {
let root_i = self.find(i);
let root_j = self.find(j);
if root_i != root_j {
// Union by rank
if self.rank[root_i] < self.rank[root_j] {
self.parent[root_i] = root_j;
} else if self.rank[root_i] > self.rank[root_j] {
self.parent[root_j] = root_i;
} else {
self.parent[root_j] = root_i;
self.rank[root_i] += 1;
}
true
} else {
false
}
}
}
// --- Minimum Spanning Tree (Kruskal's Algorithm) ---
fn minimum_spanning_tree(graph: &[Vec<f64>]) -> Vec<Edge> {
let n = graph.len();
if n == 0 {
return vec![];
}
let mut edges = Vec::new();
for i in 0..n {
for j in i + 1..n { // Avoid duplicates and self-loops
edges.push(Edge { u: i, v: j, weight: graph[i][j] });
}
}
// Sort edges by weight
edges.sort_unstable(); // Uses the Ord implementation
let mut mst = Vec::new();
let mut uf = UnionFind::new(n);
let mut edges_count = 0;
for &edge in &edges {
if uf.unite(edge.u, edge.v) {
mst.push(edge);
edges_count += 1;
if edges_count == n - 1 { // Optimization: MST has n-1 edges
break;
}
}
}
mst
}
// --- Find Vertices with Odd Degree in MST ---
fn find_odd_vertexes(mst: &[Edge], n: usize) -> Vec<usize> {
let mut degree = vec![0; n];
for edge in mst {
degree[edge.u] += 1;
degree[edge.v] += 1;
}
(0..n).filter(|&i| degree[i] % 2 != 0).collect()
}
// --- Minimum Weight Matching (Greedy Heuristic) ---
// Note: This modifies the multigraph_edges vector by adding matching edges.
fn minimum_weight_matching(
multigraph_edges: &mut Vec<Edge>,
graph: &[Vec<f64>],
odd_vertices: &[usize],
) {
let n = graph.len();
if odd_vertices.is_empty() {
return;
}
let mut current_odd = odd_vertices.to_vec(); // Clone to allow shuffling and tracking
let mut rng = thread_rng();
current_odd.shuffle(&mut rng); // Shuffle for randomness
let mut matched = vec![false; n]; // Keep track of vertices matched in this phase
// We use a marker for visited indices in the shuffled list
let mut processed = vec![false; current_odd.len()];
for i in 0..current_odd.len() {
if processed[i] { continue; } // Skip if already processed (matched)
let v = current_odd[i];
let mut min_length = f64::INFINITY;
let mut closest_u_idx: Option<usize> = None; // Store index in current_odd
// Find the closest *unmatched* odd vertex *later* in the shuffled list
for j in i + 1..current_odd.len() {
if !processed[j] { // Check if 'u' (at current_odd[j]) is available
let u = current_odd[j];
if graph[v][u] < min_length {
min_length = graph[v][u];
closest_u_idx = Some(j);
}
}
}
if let Some(j) = closest_u_idx {
let u = current_odd[j];
// Add the matching edge to the MST list (now a multigraph)
multigraph_edges.push(Edge { u: v, v: u, weight: min_length });
// Mark both as processed in the shuffled list context
processed[i] = true;
processed[j] = true;
// Optionally mark in the global 'matched' array if needed elsewhere
matched[v] = true;
matched[u] = true;
} else {
// This *shouldn't* happen in Christofides as the number of odd vertices is always even.
// If it does, it might indicate an issue earlier or a graph where matching isn't possible?
eprintln!("Warning: Could not find match for odd vertex {} in greedy matching.", v);
}
}
}
// --- Find Eulerian Tour (Hierholzer's Algorithm) ---
fn find_eulerian_tour(multigraph_edges: &[Edge], n: usize) -> Vec<usize> {
if multigraph_edges.is_empty() {
return vec![];
}
// Build adjacency list: adj[u] = Vec<(neighbor, edge_index)>
let mut adj: Vec<Vec<(usize, usize)>> = vec![vec![]; n];
for (edge_idx, edge) in multigraph_edges.iter().enumerate() {
adj[edge.u].push((edge.v, edge_idx));
adj[edge.v].push((edge.u, edge_idx));
}
let mut edge_used = vec![false; multigraph_edges.len()];
let mut tour = Vec::new();
let mut stack = Vec::new();
// Start at any vertex with edges
let start_node = multigraph_edges[0].u;
stack.push(start_node);
while let Some(¤t_node) = stack.last() {
let mut found_edge = false;
// Try to find an unused edge using pop for efficiency
while let Some((neighbor, edge_idx)) = adj[current_node].pop() {
if !edge_used[edge_idx] {
edge_used[edge_idx] = true;
stack.push(neighbor);
found_edge = true;
break; // Move to the neighbor
}
// If edge was used, loop continues popping from adj[current_node]
}
// If no unused edge was found from current_node (adj list is empty or all remaining edges used)
if !found_edge {
tour.push(stack.pop().unwrap()); // Backtrack
}
}
// The tour is constructed in reverse order
tour.reverse();
tour
}
// --- Main TSP Function (Christofides Approximation) ---
fn tsp(data: &[Point]) -> (f64, Vec<usize>) {
let n = data.len();
if n == 0 {
return (0.0, vec![]);
}
if n == 1 {
return (0.0, vec![data[0].id]); // Use the point's ID
}
println!("Building graph...");
let graph = build_graph(data);
// print_graph(&graph, "Graph"); // Can be very large
println!("Finding Minimum Spanning Tree...");
let mst = minimum_spanning_tree(&graph);
print_edges(&mst, "MSTree");
println!("Finding odd degree vertices...");
let odd_vertices = find_odd_vertexes(&mst, n);
print_usize_vec(&odd_vertices, "Odd vertexes in MSTree");
println!("Finding Minimum Weight Matching (greedy)...");
// Clone MST edges to create the initial multigraph
let mut multigraph_edges = mst.clone();
// Add matching edges to the multigraph_edges vector
minimum_weight_matching(&mut multigraph_edges, &graph, &odd_vertices);
print_edges(&multigraph_edges, "Minimum weight matching (MST + Matching Edges)");
println!("Finding Eulerian Tour...");
let eulerian_tour = find_eulerian_tour(&multigraph_edges, n);
print_usize_vec(&eulerian_tour, "Eulerian tour");
// --- Create Hamiltonian Circuit by Skipping Visited Nodes ---
println!("Creating Hamiltonian path (shortcutting)...");
if eulerian_tour.is_empty() && n > 0 {
eprintln!("Error: Eulerian tour could not be found.");
return (-1.0, vec![]); // Indicate error
}
let mut path = Vec::new();
let mut length = 0.0;
let mut visited = HashSet::new(); // Use HashSet for O(1) average lookup
let mut last_node_in_path: Option<usize> = None;
for &node in &eulerian_tour {
// visited.insert returns true if the value was not already present
if visited.insert(node) {
if let Some(last_node) = last_node_in_path {
// Add distance from the *previous node added to the path*
length += graph[last_node][node];
}
path.push(node); // Add node to the Hamiltonian path
last_node_in_path = Some(node); // Update the last node *in the path*
}
}
// Add the edge back to the start to complete the cycle
if let (Some(last), Some(&first)) = (last_node_in_path, path.first()) {
length += graph[last][first];
path.push(first); // Add the starting node ID again to show the cycle
}
print_usize_vec(&path, "Result path");
println!("Result length of the path: {:.2}", length);
(length, path)
}
// --- Main Function ---
fn main() {
// Input data matching the Python/JS example
let raw_data: Vec<(f64, f64)> = vec![
(1380.0, 939.0), (2848.0, 96.0), (3510.0, 1671.0), (457.0, 334.0), (3888.0, 666.0),
(984.0, 965.0), (2721.0, 1482.0), (1286.0, 525.0), (2716.0, 1432.0), (738.0, 1325.0),
(1251.0, 1832.0), (2728.0, 1698.0), (3815.0, 169.0), (3683.0, 1533.0), (1247.0, 1945.0),
(123.0, 862.0), (1234.0, 1946.0), (252.0, 1240.0), (611.0, 673.0), (2576.0, 1676.0),
(928.0, 1700.0), (53.0, 857.0), (1807.0, 1711.0), (274.0, 1420.0), (2574.0, 946.0),
(178.0, 24.0), (2678.0, 1825.0), (1795.0, 962.0), (3384.0, 1498.0), (3520.0, 1079.0),
(1256.0, 61.0), (1424.0, 1728.0), (3913.0, 192.0), (3085.0, 1528.0), (2573.0, 1969.0),
(463.0, 1670.0), (3875.0, 598.0), (298.0, 1513.0), (3479.0, 821.0), (2542.0, 236.0),
(3955.0, 1743.0), (1323.0, 280.0), (3447.0, 1830.0), (2936.0, 337.0), (1621.0, 1830.0),
(3373.0, 1646.0), (1393.0, 1368.0), (3874.0, 1318.0), (938.0, 955.0), (3022.0, 474.0),
(2482.0, 1183.0), (3854.0, 923.0), (376.0, 825.0), (2519.0, 135.0), (2945.0, 1622.0),
(953.0, 268.0), (2628.0, 1479.0), (2097.0, 981.0), (890.0, 1846.0), (2139.0, 1806.0),
(2421.0, 1007.0), (2290.0, 1810.0), (1115.0, 1052.0), (2588.0, 302.0), (327.0, 265.0),
(241.0, 341.0), (1917.0, 687.0), (2991.0, 792.0), (2573.0, 599.0), (19.0, 674.0),
(3911.0, 1673.0), (872.0, 1559.0), (2863.0, 558.0), (929.0, 1766.0), (839.0, 620.0),
(3893.0, 102.0), (2178.0, 1619.0), (3822.0, 899.0), (378.0, 1048.0), (1178.0, 100.0),
(2599.0, 901.0), (3416.0, 143.0), (2961.0, 1605.0), (611.0, 1384.0), (3113.0, 885.0),
(2597.0, 1830.0), (2586.0, 1286.0), (161.0, 906.0), (1429.0, 134.0), (742.0, 1025.0),
(1625.0, 1651.0), (1187.0, 706.0), (1787.0, 1009.0), (22.0, 987.0), (3640.0, 43.0),
(3756.0, 882.0), (776.0, 392.0), (1724.0, 1642.0), (198.0, 1810.0), (3950.0, 1558.0),
];
// Convert raw data to Point structs, using index as ID
let data_points: Vec<Point> = raw_data
.into_iter()
.enumerate() // Get index along with coordinates
.map(|(i, (x, y))| Point { id: i, x, y })
.collect();
// --- Run TSP ---
let (_length, _path) = tsp(&data_points);
// Result is already printed within tsp function
}
- Output:
Building graph... Finding Minimum Spanning Tree... MSTree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)] Finding odd degree vertices... Odd vertexes in MSTree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98] Finding Minimum Weight Matching (greedy)... Minimum weight matching (MST + Matching Edges): [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (81, 75, 478.76), (72, 68, 292.88), (60, 66, 597.01), (31, 10, 201.85), (65, 64, 114.77), (34, 85, 141.06), (77, 51, 40.00), (40, 70, 82.68), (59, 76, 191.02), (47, 29, 427.13), (73, 58, 89.00), (53, 1, 331.30), (42, 2, 171.03), (11, 90, 1104.00), (98, 83, 593.33), (93, 21, 133.65), (96, 52, 589.48), (92, 27, 47.68), (9, 46, 656.41), (44, 16, 404.01), (25, 69, 669.16), (38, 32, 764.20)] Finding Eulerian Tour... Eulerian tour: [14, 10, 31, 46, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 52, 18, 74, 96, 3, 64, 65, 64, 25, 69, 21, 93, 21, 15, 87, 52, 78, 17, 23, 37, 35, 98, 83, 9, 71, 20, 73, 58, 73, 10, 31, 90, 11, 54, 82, 33, 28, 45, 2, 42, 2, 13, 70, 40, 70, 99, 47, 29, 38, 32, 12, 94, 81, 75, 32, 36, 4, 77, 51, 77, 95, 38, 84, 67, 72, 68, 63, 39, 53, 1, 43, 49, 72, 68, 80, 24, 60, 66, 27, 92, 27, 57, 60, 50, 86, 8, 6, 56, 19, 11, 26, 85, 34, 85, 61, 59, 76, 59, 22, 97, 90, 44, 16, 14] Creating Hamiltonian path (shortcutting)... Result path: [14, 10, 31, 46, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 52, 18, 74, 3, 64, 65, 25, 69, 21, 93, 15, 87, 78, 17, 23, 37, 35, 98, 83, 71, 20, 73, 58, 90, 11, 54, 82, 33, 28, 45, 2, 42, 13, 70, 40, 99, 47, 29, 38, 32, 12, 94, 81, 75, 36, 4, 77, 51, 95, 84, 67, 72, 68, 63, 39, 53, 1, 43, 49, 80, 24, 60, 66, 27, 92, 57, 50, 86, 8, 6, 56, 19, 26, 85, 34, 61, 59, 76, 22, 97, 44, 16, 14] Result length of the path: 25535.83
import Foundation
struct Pair {
let x: Double
let y: Double
}
struct Point {
let pair: Pair
let id: Int
}
struct Edge {
let u: Int
let v: Int
let weight: Double
func description() -> String {
return String(format: "(%d, %d, %.2f)", u, v, weight)
}
}
struct Result {
let path: [Int]
let length: Double
}
class UnionFind {
private var parents: [Int]
private var ranks: [Int]
init(number: Int) {
parents = Array(0..<number)
ranks = Array(repeating: 0, count: number)
}
func find(_ n: Int) -> Int {
if parents[n] == n {
return n
}
parents[n] = find(parents[n])
return parents[n]
}
func unite(_ i: Int, _ j: Int) -> Bool {
let rootI = find(i)
let rootJ = find(j)
if rootI != rootJ {
if ranks[rootI] < ranks[rootJ] {
parents[rootI] = rootJ
} else if ranks[rootI] > ranks[rootJ] {
parents[rootJ] = rootI
} else {
parents[rootJ] = rootI
ranks[rootI] += 1
}
return true
}
return false
}
}
class Graph {
private let pointCount: Int
private var distanceLists: [[Double]]
init(points: [Point]) {
self.pointCount = points.count
self.distanceLists = Array(repeating: Array(repeating: 0.0, count: pointCount), count: pointCount)
for i in 0..<pointCount {
for j in i+1..<pointCount {
let dist = hypot(points[i].pair.x - points[j].pair.x, points[i].pair.y - points[j].pair.y)
distanceLists[i][j] = dist
distanceLists[j][i] = dist
}
}
}
func minimumSpanningTree() -> [Edge] {
var edges = [Edge]()
if pointCount == 0 {
return edges
}
for i in 0..<pointCount {
for j in i+1..<pointCount {
edges.append(Edge(u: i, v: j, weight: distanceLists[i][j]))
}
}
edges.sort { $0.weight < $1.weight }
var minimumSpanningTree = [Edge]()
let unionFind = UnionFind(number: pointCount)
var edgeCount = 0
for edge in edges {
if unionFind.unite(edge.u, edge.v) {
minimumSpanningTree.append(edge)
edgeCount += 1
if edgeCount == pointCount - 1 {
break
}
}
}
return minimumSpanningTree
}
func oddVertices(minimumSpanningTree: [Edge]) -> [Int] {
var degrees = Array(repeating: 0, count: pointCount)
for edge in minimumSpanningTree {
degrees[edge.u] += 1
degrees[edge.v] += 1
}
return degrees.enumerated().compactMap { $0.element % 2 == 1 ? $0.offset : nil }
}
func minimumWeightMatching(minimumSpanningTree: [Edge], oddVertices: [Int]) -> [Edge] {
var minimumWeightMatching = minimumSpanningTree
guard !oddVertices.isEmpty else {
return minimumWeightMatching
}
var currentOdd = oddVertices.shuffled()
var visited = Set<Int>()
for i in 0..<currentOdd.count {
guard !visited.contains(i) else { continue }
let v = currentOdd[i]
var minimumDistance = Double.greatestFiniteMagnitude
var closestUIndex: Int?
for j in i+1..<currentOdd.count {
guard !visited.contains(j) else { continue }
let u = currentOdd[j]
if distanceLists[v][u] < minimumDistance {
minimumDistance = distanceLists[v][u]
closestUIndex = j
}
}
if let j = closestUIndex {
let u = currentOdd[j]
minimumWeightMatching.append(Edge(u: v, v: u, weight: minimumDistance))
visited.insert(i)
visited.insert(j)
} else {
fatalError("Could not match an odd vertex in minimum weight matching: \(v)")
}
}
return minimumWeightMatching
}
func eulerianCircuit(minimumWeightMatching: [Edge]) -> [Int] {
var circuit = [Int]()
guard !minimumWeightMatching.isEmpty else {
return circuit
}
struct Twin {
let halfEdge: Int
let index: Int
}
var adjacencyLists = Array(repeating: [Twin](), count: pointCount)
for (index, edge) in minimumWeightMatching.enumerated() {
adjacencyLists[edge.u].append(Twin(halfEdge: edge.v, index: index))
adjacencyLists[edge.v].append(Twin(halfEdge: edge.u, index: index))
}
var edgesUsed = Set<Int>()
var stack = [Int]()
var currentVertex = minimumWeightMatching.first!.u
stack.append(currentVertex)
while !stack.isEmpty {
currentVertex = stack.last!
var foundEdge = false
while !adjacencyLists[currentVertex].isEmpty {
let twin = adjacencyLists[currentVertex].removeLast()
if !edgesUsed.contains(twin.index) {
edgesUsed.insert(twin.index)
stack.append(twin.halfEdge)
foundEdge = true
break
}
}
if !foundEdge {
circuit.append(stack.removeLast())
}
}
circuit.reverse()
return circuit
}
func hamiltonianCircuit(eulerianCircuit: [Int]) -> Result {
var christofidesPath = [Int]()
var length = 0.0
var visited = Set<Int>()
var current = eulerianCircuit.first!
christofidesPath.append(current)
visited.insert(current)
for vertex in eulerianCircuit {
if !visited.contains(vertex) {
christofidesPath.append(vertex)
visited.insert(vertex)
length += distanceLists[current][vertex]
current = vertex
}
}
length += distanceLists[current][christofidesPath.first!]
christofidesPath.append(christofidesPath.first!)
return Result(path: christofidesPath, length: length)
}
func display() {
print("Graph: {")
for u in 0..<pointCount {
print(String(format: "%3d", u) + ": {", terminator: "")
for v in 0..<pointCount {
if u != v {
if !(u == 0 && v == 1) && v > 0 {
print(", ", terminator: "")
}
print(String(format: "%d: %.2f", v, distanceLists[u][v]), terminator: "")
}
}
print("}" + (u == pointCount - 1 ? "" : ","))
}
print("}\n")
}
}
func christofidesPath(points: [Point]) -> Result {
if points.isEmpty {
return Result(path: [], length: 0.0)
}
if points.count == 1 {
return Result(path: [points.first!.id], length: 0.0)
}
let graph = Graph(points: points)
graph.display()
let minimumSpanningTree = graph.minimumSpanningTree()
print("Minimum spanning tree: \(minimumSpanningTree.map { $0.description() }.joined(separator: ", "))\n")
let oddVertices = graph.oddVertices(minimumSpanningTree: minimumSpanningTree)
print("Odd vertices in minimum spanning tree: \(oddVertices)\n")
let minimumWeightMatching = graph.minimumWeightMatching(minimumSpanningTree: minimumSpanningTree, oddVertices: oddVertices)
print("Minimum weight matching: \(minimumWeightMatching.map { $0.description() }.joined(separator: ", "))\n")
let eulerianCircuit = graph.eulerianCircuit(minimumWeightMatching: minimumWeightMatching)
print("Eulerian circuit: \(eulerianCircuit)\n")
guard !eulerianCircuit.isEmpty else {
print("Error: Christofides path could not be found.")
return Result(path: [], length: -1.0)
}
let result = graph.hamiltonianCircuit(eulerianCircuit: eulerianCircuit)
print("Result path: \(result.path)\n")
print(String(format: "Length of the result path: %.2f", result.length))
return result
}
func main() {
let data = [
Pair(x: 1380, y: 939), Pair(x: 2848, y: 96), Pair(x: 3510, y: 1671), Pair(x: 457, y: 334), Pair(x: 3888, y: 666),
Pair(x: 984, y: 965), Pair(x: 2721, y: 1482), Pair(x: 1286, y: 525), Pair(x: 2716, y: 1432), Pair(x: 738, y: 1325),
Pair(x: 1251, y: 1832), Pair(x: 2728, y: 1698), Pair(x: 3815, y: 169), Pair(x: 3683, y: 1533), Pair(x: 1247, y: 1945),
Pair(x: 123, y: 862), Pair(x: 1234, y: 1946), Pair(x: 252, y: 1240), Pair(x: 611, y: 673), Pair(x: 2576, y: 1676),
Pair(x: 928, y: 1700), Pair(x: 53, y: 857), Pair(x: 1807, y: 1711), Pair(x: 274, y: 1420), Pair(x: 2574, y: 946),
Pair(x: 178, y: 24), Pair(x: 2678, y: 1825), Pair(x: 1795, y: 962), Pair(x: 3384, y: 1498), Pair(x: 3520, y: 1079),
Pair(x: 1256, y: 61), Pair(x: 1424, y: 1728), Pair(x: 3913, y: 192), Pair(x: 3085, y: 1528), Pair(x: 2573, y: 1969),
Pair(x: 463, y: 1670), Pair(x: 3875, y: 598), Pair(x: 298, y: 1513), Pair(x: 3479, y: 821), Pair(x: 2542, y: 236),
Pair(x: 3955, y: 1743), Pair(x: 1323, y: 280), Pair(x: 3447, y: 1830), Pair(x: 2936, y: 337), Pair(x: 1621, y: 1830),
Pair(x: 3373, y: 1646), Pair(x: 1393, y: 1368), Pair(x: 3874, y: 1318), Pair(x: 938, y: 955), Pair(x: 3022, y: 474),
Pair(x: 2482, y: 1183), Pair(x: 3854, y: 923), Pair(x: 376, y: 825), Pair(x: 2519, y: 135), Pair(x: 2945, y: 1622),
Pair(x: 953, y: 268), Pair(x: 2628, y: 1479), Pair(x: 2097, y: 981), Pair(x: 890, y: 1846), Pair(x: 2139, y: 1806),
Pair(x: 2421, y: 1007), Pair(x: 2290, y: 1810), Pair(x: 1115, y: 1052), Pair(x: 2588, y: 302), Pair(x: 327, y: 265),
Pair(x: 241, y: 341), Pair(x: 1917, y: 687), Pair(x: 2991, y: 792), Pair(x: 2573, y: 599), Pair(x: 19, y: 674),
Pair(x: 3911, y: 1673), Pair(x: 872, y: 1559), Pair(x: 2863, y: 558), Pair(x: 929, y: 1766), Pair(x: 839, y: 620),
Pair(x: 3893, y: 102), Pair(x: 2178, y: 1619), Pair(x: 3822, y: 899), Pair(x: 378, y: 1048), Pair(x: 1178, y: 100),
Pair(x: 2599, y: 901), Pair(x: 3416, y: 143), Pair(x: 2961, y: 1605), Pair(x: 611, y: 1384), Pair(x: 3113, y: 885),
Pair(x: 2597, y: 1830), Pair(x: 2586, y: 1286), Pair(x: 161, y: 906), Pair(x: 1429, y: 134), Pair(x: 742, y: 1025),
Pair(x: 1625, y: 1651), Pair(x: 1187, y: 706), Pair(x: 1787, y: 1009), Pair(x: 22, y: 987), Pair(x: 3640, y: 43),
Pair(x: 3756, y: 882), Pair(x: 776, y: 392), Pair(x: 1724, y: 1642), Pair(x: 198, y: 1810), Pair(x: 3950, y: 1558)
]
let points = data.enumerated().map { Point(pair: $0.element, id: $0.offset) }
let _ = christofidesPath(points: points)
}
main()
- Output:
Graph: {
0: {1: 1692.83, 2: 2252.27, 3: 1103.61, 4: 2522.81, 5: 396.85, 6: 1446.77, 7: 424.54, 8: 1424.06, 9: 749.11, 10: 902.27, 11: 1546.99, 12: 2553.85, 13: 2378.37, 14: 1014.75, 15: 1259.36, 16: 1017.53, 17: 1167.47, 18: 813.71, 19: 1404.84, 20: 885.11, 21: 1329.53, 22: 882.22, 23: 1206.07, 24: 1194.02, 25: 1510.64, 26: 1571.56, 27: 415.64, 28: 2080.50, 29: 2144.57, 30: 886.71, 31: 790.23, 32: 2640.85, 33: 1803.87, 34: 1576.12, 35: 1172.71, 36: 2518.19, 37: 1224.83, 38: 2102.31, 39: 1358.11, 40: 2697.60, 41: 661.46, 42: 2250.86, 43: 1668.39, 44: 923.02, 45: 2114.69, 46: 429.20, 47: 2522.63, 48: 442.29, 49: 1706.57, 50: 1128.69, 51: 2474.05, 52: 1010.45, 53: 1394.18, 54: 1707.55, 55: 795.34, 56: 1359.82, 57: 718.23, 58: 1030.90, 59: 1152.29, 60: 1043.22, 61: 1259.66, 62: 288.09, 63: 1365.66, 64: 1250.23, 65: 1286.44, 66: 593.19, 67: 1617.69, 68: 1240.50, 69: 1386.56, 70: 2635.28, 71: 801.54, 72: 1531.16, 73: 941.98, 74: 628.05, 75: 2648.72, 76: 1048.43, 77: 2442.33, 78: 1007.91, 79: 862.97, 80: 1219.59, 81: 2186.07, 82: 1715.55, 83: 888.47, 84: 1733.84, 85: 1508.30, 86: 1254.93, 87: 1219.45, 88: 806.49, 89: 643.77, 90: 752.97, 91: 302.55, 92: 412.98, 93: 1358.85, 94: 2431.13, 95: 2376.68, 96: 814.88, 97: 782.65, 98: 1468.25, 99: 2643.49},
1: {0: 1692.83, 2: 1708.47, 3: 2402.82, 4: 1185.96, 5: 2056.61, 6: 1391.81, 7: 1619.84, 8: 1342.51, 9: 2441.83, 10: 2358.84, 11: 1606.49, 12: 969.75, 13: 1661.98, 14: 2445.81, 15: 2830.61, 16: 2455.10, 17: 2836.89, 18: 2310.22, 19: 1603.24, 20: 2501.84, 21: 2896.75, 22: 1921.43, 23: 2894.56, 24: 893.07, 25: 2670.97, 26: 1737.34, 27: 1363.37, 28: 1500.97, 29: 1190.74, 30: 1592.38, 31: 2165.92, 32: 1069.32, 33: 1451.48, 34: 1893.08, 35: 2857.57, 36: 1143.12, 37: 2917.26, 38: 961.14, 39: 336.51, 40: 1984.45, 41: 1536.06, 42: 1834.55, 43: 256.56, 44: 2124.21, 45: 1636.50, 46: 1932.62, 47: 1595.61, 48: 2094.27, 49: 416.12, 50: 1146.96, 51: 1302.29, 52: 2577.25, 53: 331.30, 54: 1529.08, 55: 1902.79, 56: 1400.39, 57: 1160.70, 58: 2626.07, 59: 1851.16, 60: 1006.11, 61: 1802.54, 62: 1979.20, 63: 331.72, 64: 2526.66, 65: 2618.49, 66: 1102.74, 67: 710.54, 68: 573.27, 69: 2887.44, 70: 1901.81, 71: 2458.65, 72: 462.24, 73: 2543.91, 74: 2076.21, 75: 1045.02, 76: 1663.86, 77: 1262.33, 78: 2647.11, 79: 1670.00, 80: 842.63, 81: 569.94, 82: 1513.23, 83: 2581.30, 84: 832.31, 85: 1752.07, 86: 1218.50, 87: 2806.43, 88: 1419.51, 89: 2301.80, 90: 1978.32, 91: 1769.47, 92: 1399.75, 93: 2963.13, 94: 793.77, 95: 1200.94, 96: 2093.04, 97: 1911.41, 98: 3155.99, 99: 1830.81},
2: {0: 2252.27, 1: 1708.47, 3: 3332.92, 4: 1073.74, 5: 2622.81, 6: 811.32, 7: 2501.90, 8: 829.19, 9: 2793.51, 10: 2264.73, 11: 782.47, 12: 1532.65, 13: 221.30, 14: 2279.53, 15: 3482.28, 16: 2292.55, 17: 3286.38, 18: 3065.98, 19: 934.01, 20: 2582.16, 21: 3551.54, 22: 1703.47, 23: 3245.72, 24: 1183.94, 25: 3716.83, 26: 846.13, 27: 1855.78, 28: 214.02, 29: 592.08, 30: 2769.95, 31: 2086.78, 32: 1532.92, 33: 448.41, 34: 983.25, 35: 3047.00, 36: 1133.38, 37: 3215.88, 38: 850.57, 39: 1730.97, 40: 450.79, 41: 2591.88, 42: 171.03, 43: 1452.25, 44: 1895.68, 45: 139.26, 46: 2138.57, 47: 507.06, 48: 2669.80, 49: 1292.65, 50: 1137.95, 51: 823.31, 52: 3246.18, 53: 1827.94, 54: 567.12, 55: 2916.62, 56: 902.66, 57: 1572.47, 58: 2625.84, 59: 1377.63, 60: 1275.47, 61: 1227.89, 62: 2473.70, 63: 1650.53, 64: 3479.70, 65: 3529.20, 66: 1872.41, 67: 1020.78, 68: 1423.78, 69: 3630.58, 70: 401.00, 71: 2640.38, 72: 1287.39, 73: 2582.75, 74: 2870.34, 75: 1615.07, 76: 1333.01, 77: 832.66, 78: 3193.36, 79: 2811.81, 80: 1192.82, 81: 1530.89, 82: 552.95, 83: 2913.17, 84: 880.57, 85: 926.74, 86: 1001.00, 87: 3435.26, 88: 2587.07, 89: 2842.38, 90: 1885.11, 91: 2515.46, 92: 1845.80, 93: 3554.43, 94: 1633.18, 95: 826.46, 96: 3018.38, 97: 1786.24, 98: 3314.92, 99: 454.28},
3: {0: 1103.61, 1: 2402.82, 2: 3332.92, 4: 3447.03, 5: 822.13, 6: 2538.42, 7: 850.72, 8: 2511.71, 9: 1030.07, 10: 1695.42, 11: 2649.14, 12: 3362.05, 13: 3441.61, 14: 1794.27, 15: 624.77, 16: 1789.49, 17: 928.90, 18: 372.34, 19: 2508.21, 20: 1444.92, 21: 660.87, 22: 1928.37, 23: 1101.31, 24: 2203.69, 25: 417.06, 26: 2675.06, 27: 1478.05, 28: 3149.96, 29: 3152.30, 30: 844.35, 31: 1696.56, 32: 3458.92, 33: 2886.52, 34: 2674.08, 35: 1336.01, 36: 3428.18, 37: 1189.67, 38: 3060.99, 39: 2087.30, 40: 3771.11, 41: 867.68, 42: 3343.37, 43: 2479.00, 44: 1895.50, 45: 3197.56, 46: 1394.72, 47: 3555.86, 48: 785.49, 49: 2568.82, 50: 2195.77, 51: 3447.68, 52: 497.64, 53: 2071.58, 54: 2801.62, 55: 500.37, 56: 2454.44, 57: 1763.01, 58: 1572.78, 59: 2235.15, 60: 2076.11, 61: 2353.39, 62: 973.90, 63: 2131.24, 64: 147.18, 65: 216.11, 66: 1502.07, 67: 2575.06, 68: 2132.53, 69: 554.48, 70: 3704.46, 71: 1293.39, 72: 2416.40, 73: 1507.78, 74: 477.20, 75: 3443.82, 76: 2147.80, 77: 3412.10, 78: 718.36, 79: 758.02, 80: 2215.77, 81: 2965.16, 82: 2808.11, 83: 1061.23, 84: 2712.55, 85: 2611.06, 86: 2332.15, 87: 644.05, 88: 992.36, 89: 747.47, 90: 1760.32, 91: 819.32, 92: 1491.48, 93: 784.62, 94: 3196.27, 95: 3344.20, 96: 324.23, 97: 1821.03, 98: 1498.55, 99: 3701.25},
4: {0: 2522.81, 1: 1185.96, 2: 1073.74, 3: 3447.03, 5: 2919.35, 6: 1423.99, 7: 2605.82, 8: 1400.12, 9: 3218.20, 10: 2883.28, 11: 1552.62, 12: 502.33, 13: 890.91, 14: 2934.40, 15: 3770.10, 16: 2946.54, 17: 3681.03, 18: 3277.01, 19: 1655.73, 20: 3135.40, 21: 3839.75, 22: 2328.64, 23: 3691.82, 24: 1343.50, 25: 3765.14, 26: 1675.52, 27: 2113.83, 28: 972.75, 29: 553.17, 30: 2700.64, 31: 2683.12, 32: 474.66, 33: 1178.07, 34: 1851.22, 35: 3569.12, 36: 69.23, 37: 3688.56, 38: 437.39, 39: 1413.02, 40: 1079.08, 41: 2593.88, 42: 1244.74, 43: 1007.25, 44: 2548.37, 45: 1107.08, 46: 2591.88, 47: 652.15, 48: 2964.12, 49: 887.03, 50: 1498.04, 51: 259.24, 52: 3515.60, 53: 1468.37, 54: 1342.83, 55: 2961.86, 56: 1499.52, 57: 1818.49, 58: 3221.86, 59: 2087.73, 60: 1506.11, 61: 1965.28, 62: 2799.74, 63: 1350.00, 64: 3583.51, 65: 3661.45, 66: 1971.11, 67: 905.81, 68: 1316.71, 69: 3869.01, 70: 1007.26, 71: 3145.43, 72: 1030.67, 73: 3156.85, 74: 3049.35, 75: 564.02, 76: 1957.63, 77: 242.17, 78: 3530.73, 79: 2768.48, 80: 1310.25, 81: 704.49, 82: 1319.49, 83: 3354.74, 84: 805.35, 85: 1738.27, 86: 1442.08, 87: 3734.72, 88: 2515.89, 89: 3166.42, 90: 2468.07, 91: 2701.30, 92: 2128.81, 93: 3879.30, 94: 670.55, 95: 253.14, 96: 3124.04, 97: 2373.91, 98: 3863.27, 99: 894.15},
5: {0: 396.85, 1: 2056.61, 2: 2622.81, 3: 822.13, 4: 2919.35, 6: 1812.31, 7: 533.67, 8: 1793.85, 9: 436.02, 10: 907.18, 11: 1891.78, 12: 2940.78, 13: 2758.12, 14: 1014.68, 15: 867.14, 16: 1012.35, 17: 781.95, 18: 473.70, 19: 1743.56, 20: 737.13, 21: 937.24, 22: 1110.79, 23: 843.28, 24: 1590.11, 25: 1239.00, 26: 1899.80, 27: 811.01, 28: 2458.47, 29: 2538.56, 30: 944.03, 31: 880.78, 32: 3029.29, 33: 2175.13, 34: 1879.61, 35: 876.62, 36: 2914.20, 37: 878.01, 38: 2499.15, 39: 1720.12, 40: 3071.18, 41: 764.29, 42: 2610.48, 43: 2050.53, 44: 1074.24, 45: 2484.17, 46: 574.19, 47: 2911.48, 48: 47.07, 49: 2096.31, 50: 1513.78, 51: 2870.31, 52: 623.91, 53: 1745.03, 54: 2068.13, 55: 697.69, 56: 1722.48, 57: 1113.11, 58: 886.00, 59: 1428.74, 60: 1437.61, 61: 1555.53, 62: 157.26, 63: 1735.62, 64: 960.03, 65: 970.27, 66: 973.54, 67: 2014.44, 68: 1630.61, 69: 1007.92, 70: 3011.41, 71: 604.47, 72: 1922.57, 73: 802.89, 74: 374.23, 75: 3034.31, 76: 1361.38, 77: 2838.77, 78: 611.66, 79: 886.49, 80: 1616.27, 81: 2567.16, 82: 2078.01, 83: 560.97, 84: 2130.50, 85: 1830.30, 86: 1633.84, 87: 825.11, 88: 942.65, 89: 249.33, 90: 938.87, 91: 329.07, 92: 804.20, 93: 962.25, 94: 2811.48, 95: 2773.24, 96: 609.58, 97: 1002.96, 98: 1154.05, 99: 3024.70},
6: {0: 1446.77, 1: 1391.81, 2: 811.32, 3: 2538.42, 4: 1423.99, 5: 1812.31, 7: 1724.84, 8: 50.25, 9: 1989.21, 10: 1511.09, 11: 216.11, 12: 1709.04, 13: 963.35, 14: 1545.01, 15: 2670.96, 16: 1557.71, 17: 2480.83, 18: 2259.77, 19: 242.20, 20: 1806.20, 21: 2740.23, 22: 942.25, 23: 2447.79, 24: 555.79, 25: 2931.32, 26: 345.68, 27: 1062.02, 28: 663.19, 29: 894.88, 30: 2040.95, 31: 1320.12, 32: 1756.41, 33: 366.90, 34: 508.99, 35: 2265.81, 36: 1453.68, 37: 2423.20, 38: 1005.73, 39: 1258.79, 40: 1261.30, 41: 1843.69, 42: 805.10, 43: 1165.01, 44: 1153.73, 45: 672.31, 46: 1332.88, 47: 1164.61, 48: 1859.25, 49: 1051.98, 50: 382.78, 51: 1263.40, 52: 2435.30, 53: 1362.06, 54: 264.15, 55: 2144.67, 56: 93.05, 57: 800.24, 58: 1866.83, 59: 666.11, 60: 561.81, 61: 541.61, 62: 1662.57, 63: 1187.47, 64: 2685.58, 65: 2729.89, 66: 1130.68, 67: 740.95, 68: 895.32, 69: 2820.22, 70: 1205.23, 71: 1850.60, 72: 934.85, 73: 1814.36, 74: 2070.02, 75: 1810.52, 76: 560.02, 77: 1245.83, 78: 2382.86, 79: 2071.42, 80: 593.67, 81: 1508.62, 82: 269.68, 83: 2112.27, 84: 714.19, 85: 369.43, 86: 237.99, 87: 2624.00, 88: 1867.18, 89: 2031.08, 90: 1108.95, 91: 1719.11, 92: 1046.94, 93: 2744.02, 94: 1707.42, 95: 1196.34, 96: 2229.60, 97: 1009.76, 98: 2544.23, 99: 1231.35},
7: {0: 424.54, 1: 1619.84, 2: 2501.90, 3: 850.72, 4: 2605.82, 5: 533.67, 6: 1724.84, 8: 1693.38, 9: 969.69, 10: 1307.47, 11: 1858.84, 12: 2553.93, 13: 2600.32, 14: 1420.54, 15: 1210.84, 16: 1421.95, 17: 1257.13, 18: 691.03, 19: 1728.84, 20: 1228.33, 21: 1276.92, 22: 1295.39, 23: 1350.99, 24: 1355.06, 25: 1216.00, 26: 1904.64, 27: 670.86, 28: 2312.65, 29: 2301.67, 30: 464.97, 31: 1210.89, 32: 2648.02, 33: 2059.71, 34: 1934.30, 35: 1410.09, 36: 2590.03, 37: 1397.24, 38: 2212.89, 39: 1288.82, 40: 2933.78, 41: 247.78, 42: 2524.47, 43: 1660.68, 44: 1347.31, 45: 2369.01, 46: 849.76, 47: 2706.77, 48: 553.18, 49: 1736.75, 50: 1365.06, 51: 2598.66, 52: 958.18, 53: 1293.21, 54: 1988.89, 55: 420.64, 56: 1646.54, 57: 930.41, 58: 1379.08, 59: 1539.02, 60: 1233.11, 61: 1630.72, 62: 554.05, 63: 1320.96, 64: 993.62, 65: 1061.08, 66: 651.46, 67: 1725.78, 68: 1289.13, 69: 1275.73, 70: 2865.05, 71: 1113.80, 72: 1577.35, 73: 1291.33, 74: 456.98, 75: 2641.09, 76: 1411.56, 77: 2563.43, 78: 1047.85, 79: 438.51, 80: 1365.78, 81: 2163.98, 82: 1992.99, 83: 1092.48, 84: 1862.13, 85: 1849.80, 86: 1506.36, 87: 1187.77, 88: 416.33, 89: 738.87, 90: 1175.92, 91: 206.31, 92: 696.60, 93: 1345.79, 94: 2402.84, 95: 2495.67, 96: 527.06, 97: 1199.81, 98: 1683.74, 99: 2857.27},
8: {0: 1424.06, 1: 1342.51, 2: 829.19, 3: 2511.71, 4: 1400.12, 5: 1793.85, 6: 50.25, 7: 1693.38, 9: 1980.89, 10: 1518.63, 11: 266.27, 12: 1674.21, 13: 972.26, 14: 1556.00, 15: 2654.91, 16: 1568.60, 17: 2471.47, 18: 2237.66, 19: 281.31, 20: 1807.97, 21: 2724.37, 22: 950.85, 23: 2442.03, 24: 506.32, 25: 2902.40, 26: 394.83, 27: 1033.99, 28: 671.25, 29: 878.08, 30: 2002.81, 31: 1325.47, 32: 1723.49, 33: 381.28, 34: 555.71, 35: 2265.54, 36: 1427.88, 37: 2419.36, 38: 977.49, 39: 1208.59, 40: 1277.44, 41: 1807.64, 42: 832.33, 43: 1116.88, 44: 1165.09, 45: 690.97, 46: 1324.55, 47: 1163.60, 48: 1840.87, 49: 1005.68, 50: 341.70, 51: 1246.65, 52: 2417.45, 53: 1311.88, 54: 297.56, 55: 2112.60, 56: 99.76, 57: 765.87, 58: 1872.34, 59: 687.61, 60: 517.35, 61: 569.53, 62: 1645.48, 63: 1137.23, 64: 2658.80, 65: 2704.79, 66: 1092.44, 67: 696.58, 68: 845.19, 69: 2801.49, 70: 1219.06, 71: 1848.37, 72: 886.28, 73: 1817.95, 74: 2045.11, 75: 1776.01, 76: 569.57, 77: 1227.73, 78: 2369.32, 79: 2034.62, 80: 543.74, 81: 1466.81, 82: 299.92, 83: 2105.55, 84: 675.88, 85: 415.41, 86: 195.49, 87: 2608.58, 88: 1827.89, 89: 2015.52, 90: 1112.76, 91: 1692.61, 92: 1020.77, 93: 2730.51, 94: 1668.26, 95: 1176.48, 96: 2201.18, 97: 1013.98, 98: 2546.21, 99: 1240.42},
9: {0: 749.11, 1: 2441.83, 2: 2793.51, 3: 1030.07, 4: 3218.20, 5: 436.02, 6: 1989.21, 7: 969.69, 8: 1980.89, 10: 721.26, 11: 2024.66, 12: 3286.98, 13: 2952.34, 14: 802.17, 15: 769.80, 16: 794.77, 17: 493.38, 18: 664.25, 19: 1871.21, 20: 420.39, 21: 829.61, 22: 1136.55, 23: 473.63, 24: 1874.71, 25: 1416.40, 26: 2003.40, 27: 1117.59, 28: 2651.65, 29: 2792.86, 30: 1366.02, 31: 795.62, 32: 3371.10, 33: 2355.76, 34: 1944.73, 35: 441.19, 36: 3220.14, 37: 478.48, 38: 2786.95, 39: 2107.21, 40: 3244.04, 41: 1197.60, 42: 2755.67, 43: 2409.84, 44: 1017.21, 45: 2654.48, 46: 656.41, 47: 3136.01, 48: 420.59, 49: 2437.39, 50: 1749.77, 51: 3141.82, 52: 617.29, 53: 2141.98, 54: 2226.89, 55: 1078.64, 56: 1896.26, 57: 1401.86, 58: 542.72, 59: 1481.27, 60: 1712.78, 61: 1626.02, 62: 465.47, 63: 2114.01, 64: 1136.89, 65: 1102.39, 66: 1340.55, 67: 2315.19, 68: 1973.40, 69: 969.93, 70: 3192.03, 71: 269.65, 72: 2259.18, 73: 480.59, 74: 712.20, 75: 3383.75, 76: 1469.71, 77: 3113.28, 78: 454.23, 79: 1301.62, 80: 1908.69, 81: 2927.25, 82: 2240.56, 83: 140.04, 84: 2415.41, 85: 1926.37, 86: 1848.41, 87: 713.08, 88: 1376.94, 89: 300.03, 90: 945.01, 91: 764.70, 92: 1095.56, 93: 791.77, 94: 3172.56, 95: 3050.34, 96: 933.77, 97: 1035.71, 98: 725.83, 99: 3220.44},
10: {0: 902.27, 1: 2358.84, 2: 2264.73, 3: 1695.42, 4: 2883.28, 5: 907.18, 6: 1511.09, 7: 1307.47, 8: 1518.63, 9: 721.26, 11: 1483.07, 12: 3056.09, 13: 2450.31, 14: 113.07, 15: 1487.71, 16: 115.26, 17: 1161.23, 18: 1323.96, 19: 1334.15, 20: 348.93, 21: 1544.61, 22: 569.01, 23: 1060.32, 24: 1592.27, 25: 2102.43, 26: 1427.02, 27: 1026.08, 28: 2158.99, 29: 2390.68, 30: 1771.01, 31: 201.85, 32: 3126.63, 33: 1859.02, 34: 1329.08, 35: 804.48, 36: 2899.68, 37: 1004.97, 38: 2446.65, 39: 2052.78, 40: 2705.46, 41: 1553.67, 42: 2196.00, 43: 2252.61, 44: 370.01, 45: 2130.14, 46: 485.24, 47: 2672.89, 48: 931.18, 49: 2231.73, 50: 1391.60, 51: 2757.15, 52: 1334.04, 53: 2118.40, 54: 1706.97, 55: 1592.14, 56: 1421.53, 57: 1199.97, 58: 361.27, 59: 888.38, 60: 1431.62, 61: 1039.23, 62: 791.77, 63: 2031.86, 64: 1819.14, 65: 1800.88, 66: 1324.61, 67: 2027.12, 68: 1807.75, 69: 1690.80, 70: 2664.75, 71: 467.09, 72: 2054.66, 73: 328.69, 74: 1280.11, 75: 3158.02, 76: 951.16, 77: 2735.06, 78: 1173.36, 79: 1733.54, 80: 1638.25, 81: 2745.90, 82: 1725.00, 83: 781.22, 84: 2088.98, 85: 1346.00, 86: 1442.34, 87: 1430.24, 88: 1707.30, 89: 954.11, 90: 415.50, 91: 1127.82, 92: 982.15, 93: 1491.46, 94: 2984.60, 95: 2679.09, 96: 1516.32, 97: 509.73, 98: 1053.23, 99: 2712.87},
11: {0: 1546.99, 1: 1606.49, 2: 782.47, 3: 2649.14, 4: 1552.62, 5: 1891.78, 6: 216.11, 7: 1858.84, 8: 266.27, 9: 2024.66, 10: 1483.07, 12: 1876.01, 13: 969.15, 14: 1501.46, 15: 2735.86, 16: 1514.44, 17: 2518.00, 18: 2352.09, 19: 153.58, 20: 1800.00, 21: 2804.09, 22: 921.09, 23: 2469.70, 24: 767.61, 25: 3050.37, 26: 136.49, 27: 1188.35, 28: 685.81, 29: 1005.20, 30: 2201.49, 31: 1304.35, 32: 1916.31, 33: 395.41, 34: 312.20, 35: 2265.17, 36: 1589.22, 37: 2437.03, 38: 1154.61, 39: 1473.78, 40: 1227.82, 41: 1996.18, 42: 731.02, 43: 1376.80, 44: 1114.84, 45: 647.09, 46: 1375.18, 47: 1207.36, 48: 1938.08, 49: 1258.81, 50: 570.74, 51: 1366.93, 52: 2508.79, 53: 1576.91, 54: 229.92, 55: 2279.37, 56: 240.75, 57: 955.12, 58: 1843.95, 59: 598.82, 60: 756.13, 61: 452.09, 62: 1737.55, 63: 1403.00, 64: 2796.12, 65: 2833.13, 66: 1296.09, 67: 943.40, 68: 1109.88, 69: 2896.08, 70: 1183.26, 71: 1861.20, 72: 1147.97, 73: 1800.28, 74: 2174.95, 75: 1975.97, 76: 555.64, 77: 1354.71, 78: 2438.24, 79: 2226.23, 80: 807.37, 81: 1700.40, 82: 250.87, 83: 2140.16, 84: 899.55, 85: 185.97, 86: 435.78, 87: 2686.40, 88: 2033.10, 89: 2096.93, 90: 1104.00, 91: 1832.69, 92: 1166.28, 93: 2797.85, 94: 1889.65, 95: 1312.49, 96: 2348.60, 97: 1005.56, 98: 2532.48, 99: 1229.99},
12: {0: 2553.85, 1: 969.75, 2: 1532.65, 3: 3362.05, 4: 502.33, 5: 2940.78, 6: 1709.04, 7: 2553.93, 8: 1674.21, 9: 3286.98, 10: 3056.09, 11: 1876.01, 13: 1370.37, 14: 3122.31, 15: 3756.48, 16: 3133.57, 17: 3720.49, 18: 3243.40, 19: 1950.94, 20: 3267.83, 21: 3824.39, 22: 2531.76, 23: 3755.49, 24: 1464.18, 25: 3639.89, 26: 2008.76, 27: 2170.08, 28: 1397.14, 29: 956.62, 30: 2561.28, 31: 2854.36, 32: 100.66, 33: 1542.65, 34: 2186.91, 35: 3672.72, 36: 433.18, 37: 3765.05, 38: 733.48, 39: 1274.76, 40: 1580.21, 41: 2494.47, 42: 1701.28, 43: 894.91, 44: 2751.83, 45: 1541.72, 46: 2702.53, 47: 1150.51, 48: 2982.44, 49: 849.63, 50: 1674.84, 51: 755.01, 52: 3501.01, 53: 1296.45, 54: 1693.55, 55: 2863.71, 56: 1767.79, 57: 1900.23, 58: 3371.64, 59: 2342.81, 60: 1626.49, 61: 2240.20, 62: 2840.72, 63: 1234.19, 64: 3489.32, 65: 3578.14, 66: 1967.42, 67: 1033.01, 68: 1314.33, 69: 3829.44, 70: 1507.06, 71: 3254.74, 72: 1028.41, 73: 3298.39, 74: 3009.98, 75: 102.83, 76: 2186.84, 77: 730.03, 78: 3547.62, 79: 2637.90, 80: 1419.32, 81: 399.85, 82: 1670.75, 83: 3426.64, 84: 1002.73, 85: 2059.72, 86: 1660.76, 87: 3727.58, 88: 2386.26, 89: 3189.99, 90: 2644.32, 91: 2682.30, 92: 2195.08, 93: 3880.20, 94: 215.64, 95: 715.44, 96: 3047.17, 97: 2557.74, 98: 3971.85, 99: 1395.55},
13: {0: 2378.37, 1: 1661.98, 2: 221.30, 3: 3441.61, 4: 890.91, 5: 2758.12, 6: 963.35, 7: 2600.32, 8: 972.26, 9: 2952.34, 10: 2450.31, 11: 969.15, 12: 1370.37, 14: 2470.60, 15: 3622.68, 16: 2483.58, 17: 3443.49, 18: 3190.11, 19: 1116.20, 20: 2760.06, 21: 3692.41, 22: 1884.43, 23: 3410.87, 24: 1254.77, 25: 3816.03, 26: 1046.56, 27: 1972.46, 28: 301.04, 29: 482.37, 30: 2838.51, 31: 2267.40, 32: 1360.58, 33: 598.02, 34: 1192.56, 35: 3222.91, 36: 954.51, 37: 3385.06, 38: 740.65, 39: 1727.45, 40: 343.63, 41: 2672.00, 42: 379.35, 43: 1410.12, 44: 2083.28, 45: 329.95, 46: 2295.94, 47: 287.59, 48: 2805.19, 49: 1248.36, 50: 1250.96, 51: 633.51, 52: 3381.94, 53: 1819.15, 54: 743.35, 55: 3008.84, 56: 1056.38, 57: 1679.32, 58: 2810.48, 59: 1567.95, 60: 1367.23, 61: 1420.27, 62: 2612.66, 63: 1647.54, 64: 3587.56, 65: 3642.56, 66: 1958.18, 67: 1013.88, 68: 1450.67, 69: 3763.35, 70: 267.55, 71: 2811.12, 72: 1273.98, 73: 2763.84, 74: 2986.96, 75: 1446.33, 76: 1507.46, 77: 649.06, 78: 3340.40, 79: 2885.92, 80: 1254.78, 81: 1415.41, 82: 725.58, 83: 3075.61, 84: 863.02, 85: 1125.88, 86: 1124.46, 87: 3577.38, 88: 2652.87, 89: 2984.55, 90: 2061.38, 91: 2629.44, 92: 1967.08, 93: 3701.49, 94: 1490.62, 95: 655.08, 96: 3122.90, 97: 1962.03, 98: 3495.99, 99: 268.17},
14: {0: 1014.75, 1: 2445.81, 2: 2279.53, 3: 1794.27, 4: 2934.40, 5: 1014.68, 6: 1545.01, 7: 1420.54, 8: 1556.00, 9: 802.17, 10: 113.07, 11: 1501.46, 12: 3122.31, 13: 2470.60, 15: 1560.85, 16: 13.04, 17: 1219.45, 18: 1422.14, 19: 1355.95, 20: 402.23, 21: 1615.36, 22: 606.92, 23: 1105.60, 24: 1661.00, 25: 2198.41, 26: 1436.02, 27: 1125.43, 28: 2183.25, 29: 2432.38, 30: 1884.02, 31: 280.03, 32: 3190.70, 33: 1884.71, 34: 1326.22, 35: 830.83, 36: 2953.10, 37: 1042.70, 38: 2499.04, 39: 2144.23, 40: 2715.52, 41: 1666.73, 42: 2203.00, 43: 2332.03, 44: 391.28, 45: 2146.92, 46: 595.18, 47: 2700.79, 48: 1037.10, 49: 2305.31, 50: 1451.16, 51: 2800.17, 52: 1418.82, 53: 2212.26, 54: 1728.45, 55: 1702.58, 56: 1457.50, 57: 1285.22, 58: 370.47, 59: 902.77, 60: 1502.70, 61: 1051.70, 62: 902.70, 63: 2120.79, 64: 1915.41, 65: 1893.37, 66: 1425.29, 67: 2090.68, 68: 1889.44, 69: 1767.32, 70: 2677.85, 71: 538.16, 72: 2129.61, 73: 364.92, 74: 1386.39, 75: 3224.59, 76: 986.43, 77: 2779.34, 78: 1248.91, 79: 1846.29, 80: 1708.17, 81: 2819.89, 82: 1747.40, 83: 848.07, 84: 2146.06, 85: 1354.89, 86: 1492.38, 87: 1502.97, 88: 1820.12, 89: 1049.49, 90: 478.87, 91: 1240.45, 92: 1080.60, 93: 1555.12, 94: 3056.80, 95: 2724.89, 96: 1622.85, 97: 565.10, 98: 1057.65, 99: 2730.56},
15: {0: 1259.36, 1: 2830.61, 2: 3482.28, 3: 624.77, 4: 3770.10, 5: 867.14, 6: 2670.96, 7: 1210.84, 8: 2654.91, 9: 769.80, 10: 1487.71, 11: 2735.86, 12: 3756.48, 13: 3622.68, 14: 1560.85, 16: 1552.22, 17: 399.41, 18: 523.32, 19: 2584.53, 20: 1162.01, 21: 70.18, 22: 1885.91, 23: 578.07, 24: 2452.44, 25: 839.80, 26: 2730.46, 27: 1674.99, 28: 3322.44, 29: 3403.92, 30: 1387.55, 31: 1562.87, 32: 3848.77, 33: 3035.95, 34: 2688.48, 35: 876.62, 36: 3761.28, 37: 674.11, 38: 3356.25, 39: 2498.69, 40: 3931.97, 41: 1333.69, 42: 3462.08, 43: 2861.57, 44: 1783.54, 45: 3343.23, 46: 1367.09, 47: 3778.62, 48: 820.29, 49: 2924.85, 50: 2380.74, 51: 3731.50, 52: 255.69, 53: 2503.87, 54: 2922.55, 55: 1020.65, 56: 2579.87, 57: 1977.58, 58: 1247.62, 59: 2226.07, 60: 2302.57, 61: 2365.29, 62: 1010.03, 63: 2527.81, 64: 630.89, 65: 534.20, 66: 1802.52, 67: 2868.85, 68: 2464.08, 69: 214.85, 70: 3873.84, 71: 1023.14, 72: 2756.81, 73: 1211.14, 74: 755.79, 75: 3845.84, 76: 2189.99, 77: 3699.19, 78: 315.63, 79: 1301.41, 80: 2476.31, 81: 3370.58, 82: 2933.65, 83: 714.58, 84: 2990.09, 85: 2656.63, 86: 2499.23, 87: 58.14, 88: 1495.20, 89: 640.10, 90: 1696.62, 91: 1075.38, 92: 1670.48, 93: 160.70, 94: 3611.10, 95: 3633.06, 96: 804.56, 97: 1780.90, 98: 950.96, 99: 3889.77},
16: {0: 1017.53, 1: 2455.10, 2: 2292.55, 3: 1789.49, 4: 2946.54, 5: 1012.35, 6: 1557.71, 7: 1421.95, 8: 1568.60, 9: 794.77, 10: 115.26, 11: 1514.44, 12: 3133.57, 13: 2483.58, 14: 13.04, 15: 1552.22, 17: 1209.45, 18: 1417.27, 19: 1368.89, 20: 392.62, 21: 1606.45, 22: 619.32, 23: 1094.66, 24: 1672.00, 25: 2192.99, 26: 1449.06, 27: 1132.69, 28: 2196.18, 29: 2444.89, 30: 1885.13, 31: 289.18, 32: 3202.12, 33: 1897.61, 34: 1339.20, 35: 818.91, 36: 2965.13, 37: 1031.30, 38: 2511.11, 39: 2152.90, 40: 2728.56, 41: 1668.38, 42: 2216.04, 43: 2342.15, 44: 404.01, 45: 2159.94, 46: 599.47, 47: 2713.67, 48: 1034.26, 49: 2315.97, 50: 1462.76, 51: 2812.64, 52: 1411.67, 53: 2220.57, 54: 1741.41, 55: 1701.37, 56: 1470.14, 57: 1294.60, 58: 358.24, 59: 915.76, 60: 1513.50, 61: 1064.72, 62: 901.89, 63: 2129.80, 64: 1910.08, 65: 1887.35, 66: 1432.33, 67: 2102.09, 68: 1899.30, 69: 1759.04, 70: 2690.88, 71: 529.92, 72: 2140.14, 73: 354.15, 74: 1383.58, 75: 3235.83, 76: 999.03, 77: 2791.77, 78: 1240.62, 79: 1846.85, 80: 1719.08, 81: 2830.54, 82: 1760.34, 83: 839.03, 84: 2157.86, 85: 1367.93, 86: 1504.49, 87: 1494.30, 88: 1822.46, 89: 1044.18, 90: 489.80, 91: 1240.89, 92: 1088.02, 93: 1545.52, 94: 3067.61, 95: 2737.26, 96: 1620.09, 97: 576.64, 98: 1044.89, 99: 2743.57},
17: {0: 1167.47, 1: 2836.89, 2: 3286.38, 3: 928.90, 4: 3681.03, 5: 781.95, 6: 2480.83, 7: 1257.13, 8: 2471.47, 9: 493.38, 10: 1161.23, 11: 2518.00, 12: 3720.49, 13: 3443.49, 14: 1219.45, 15: 399.41, 16: 1209.45, 18: 671.10, 19: 2364.54, 20: 817.66, 21: 431.61, 22: 1624.77, 23: 181.34, 24: 2340.54, 25: 1218.25, 26: 2495.54, 27: 1567.84, 28: 3142.61, 29: 3271.96, 30: 1548.57, 31: 1269.54, 32: 3808.05, 33: 2847.60, 34: 2432.79, 35: 478.98, 36: 3679.44, 37: 276.85, 38: 3254.09, 39: 2500.42, 40: 3737.01, 41: 1438.28, 42: 3249.02, 43: 2831.83, 44: 1490.72, 45: 3147.30, 46: 1148.16, 47: 3622.84, 48: 742.85, 49: 2873.96, 50: 2230.73, 51: 3615.92, 52: 433.13, 53: 2521.97, 54: 2719.96, 55: 1198.41, 56: 2387.99, 57: 1863.09, 58: 879.93, 59: 1970.06, 60: 2181.48, 61: 2116.21, 62: 883.24, 63: 2517.29, 64: 977.88, 65: 899.07, 66: 1754.43, 67: 2775.40, 68: 2407.89, 69: 612.08, 70: 3684.53, 71: 697.25, 72: 2698.60, 73: 857.32, 74: 853.80, 75: 3814.70, 76: 1962.94, 77: 3586.25, 78: 229.65, 79: 1468.70, 80: 2371.36, 81: 3348.78, 82: 2733.48, 83: 386.80, 84: 2882.94, 85: 2418.08, 86: 2334.45, 87: 346.17, 88: 1615.11, 89: 535.09, 90: 1433.20, 91: 1076.75, 92: 1552.28, 93: 341.92, 94: 3593.24, 95: 3522.24, 96: 996.83, 97: 1525.91, 98: 572.55, 99: 3711.65},
18: {0: 813.71, 1: 2310.22, 2: 3065.98, 3: 372.34, 4: 3277.01, 5: 473.70, 6: 2259.77, 7: 691.03, 8: 2237.66, 9: 664.25, 10: 1323.96, 11: 2352.09, 12: 3243.40, 13: 3190.11, 14: 1422.14, 15: 523.32, 16: 1417.27, 17: 671.10, 19: 2206.18, 20: 1074.81, 21: 587.55, 22: 1583.62, 23: 819.50, 24: 1981.89, 25: 780.19, 26: 2366.35, 27: 1218.76, 28: 2893.12, 29: 2937.20, 30: 889.14, 31: 1331.91, 32: 3336.85, 33: 2617.58, 34: 2351.40, 35: 1007.93, 36: 3264.86, 37: 896.42, 38: 2871.82, 39: 1979.83, 40: 3511.02, 41: 813.26, 42: 3062.93, 43: 2349.15, 44: 1535.82, 45: 2928.37, 46: 1046.21, 47: 3326.14, 48: 431.80, 49: 2419.20, 50: 1939.26, 51: 3252.62, 52: 279.87, 53: 1982.40, 54: 2519.55, 55: 530.08, 56: 2172.08, 57: 1517.58, 58: 1205.72, 59: 1902.23, 60: 1840.56, 61: 2027.76, 62: 630.60, 63: 2011.51, 64: 497.11, 65: 497.12, 66: 1306.08, 67: 2382.97, 68: 1963.40, 69: 592.00, 70: 3448.19, 71: 923.64, 72: 2254.93, 73: 1138.32, 74: 234.08, 75: 3331.30, 76: 1830.41, 77: 3218.94, 78: 441.49, 79: 806.11, 80: 2001.03, 81: 2854.63, 82: 2528.07, 83: 711.00, 84: 2510.97, 85: 2298.44, 86: 2067.94, 87: 506.74, 88: 979.61, 89: 375.59, 90: 1408.79, 91: 576.94, 92: 1223.06, 93: 667.47, 94: 3093.82, 95: 3151.94, 96: 325.86, 97: 1475.71, 98: 1209.69, 99: 3454.29},
19: {0: 1404.84, 1: 1603.24, 2: 934.01, 3: 2508.21, 4: 1655.73, 5: 1743.56, 6: 242.20, 7: 1728.84, 8: 281.31, 9: 1871.21, 10: 1334.15, 11: 153.58, 12: 1950.94, 13: 1116.20, 14: 1355.95, 15: 2584.53, 16: 1368.89, 17: 2364.54, 18: 2206.18, 20: 1648.17, 21: 2652.60, 22: 769.80, 23: 2316.19, 24: 730.00, 25: 2911.96, 26: 180.57, 27: 1058.19, 28: 827.37, 29: 1116.94, 30: 2085.82, 31: 1153.17, 32: 1997.45, 33: 530.08, 34: 293.02, 35: 2113.01, 36: 1688.04, 37: 2283.82, 38: 1243.56, 39: 1440.40, 40: 1380.63, 41: 1875.85, 42: 884.51, 43: 1386.55, 44: 967.34, 45: 797.56, 46: 1222.44, 47: 1346.47, 48: 1789.66, 49: 1282.08, 50: 501.88, 51: 1483.34, 52: 2358.86, 53: 1542.05, 54: 372.93, 55: 2148.63, 56: 203.75, 57: 844.08, 58: 1694.55, 59: 455.93, 60: 686.72, 61: 315.84, 62: 1588.68, 63: 1374.05, 64: 2654.98, 65: 2689.69, 66: 1188.45, 67: 976.57, 68: 1077.00, 69: 2746.32, 70: 1335.00, 71: 1708.01, 72: 1154.25, 73: 1649.46, 74: 2032.81, 75: 2052.31, 76: 402.06, 77: 1468.42, 78: 2285.95, 79: 2106.70, 80: 775.34, 81: 1748.05, 82: 391.49, 83: 1986.58, 84: 956.06, 85: 155.43, 86: 390.13, 87: 2534.78, 88: 1921.82, 89: 1946.11, 90: 951.33, 91: 1694.17, 92: 1033.16, 93: 2645.30, 94: 1949.05, 95: 1422.26, 96: 2211.03, 97: 852.68, 98: 2381.77, 99: 1379.06},
20: {0: 885.11, 1: 2501.84, 2: 2582.16, 3: 1444.92, 4: 3135.40, 5: 737.13, 6: 1806.20, 7: 1228.33, 8: 1807.97, 9: 420.39, 10: 348.93, 11: 1800.00, 12: 3267.83, 13: 2760.06, 14: 402.23, 15: 1162.01, 16: 392.62, 17: 817.66, 18: 1074.81, 19: 1648.17, 21: 1215.02, 22: 879.07, 23: 711.42, 24: 1810.48, 25: 1836.16, 26: 1754.46, 27: 1138.57, 28: 2464.29, 29: 2665.35, 30: 1671.50, 31: 496.79, 32: 3344.29, 33: 2163.85, 34: 1666.85, 35: 465.97, 36: 3146.30, 37: 657.17, 38: 2698.19, 39: 2179.06, 40: 3027.31, 41: 1473.91, 42: 2522.35, 43: 2426.90, 44: 705.09, 45: 2445.60, 46: 571.36, 47: 2970.66, 48: 745.07, 49: 2426.50, 50: 1637.74, 51: 3027.41, 52: 1034.57, 53: 2231.70, 54: 2018.51, 55: 1432.22, 56: 1714.30, 57: 1372.41, 58: 150.86, 59: 1215.63, 60: 1645.99, 61: 1366.43, 62: 674.44, 63: 2170.25, 64: 1555.77, 65: 1522.78, 66: 1415.73, 67: 2253.98, 68: 1979.45, 69: 1370.75, 70: 2983.12, 71: 151.71, 72: 2246.86, 73: 66.01, 74: 1083.66, 75: 3368.21, 76: 1252.62, 77: 3002.80, 78: 853.00, 79: 1619.41, 80: 1852.20, 81: 2935.03, 82: 2035.22, 83: 447.60, 84: 2332.05, 85: 1674.06, 86: 1708.91, 87: 1103.96, 88: 1644.19, 89: 700.16, 90: 698.72, 91: 1027.19, 92: 1102.43, 93: 1152.91, 94: 3178.14, 95: 2943.93, 96: 1316.80, 97: 798.11, 98: 738.24, 99: 3025.33},
21: {0: 1329.53, 1: 2896.75, 2: 3551.54, 3: 660.87, 4: 3839.75, 5: 937.24, 6: 2740.23, 7: 1276.92, 8: 2724.37, 9: 829.61, 10: 1544.61, 11: 2804.09, 12: 3824.39, 13: 3692.41, 14: 1615.36, 15: 70.18, 16: 1606.45, 17: 431.61, 18: 587.55, 19: 2652.60, 20: 1215.02, 22: 1950.85, 23: 604.82, 24: 2522.57, 25: 842.33, 26: 2797.79, 27: 1745.16, 28: 3392.11, 29: 3474.10, 30: 1442.51, 31: 1624.28, 32: 3916.86, 33: 3105.36, 34: 2754.44, 35: 910.53, 36: 3830.77, 37: 700.26, 38: 3426.19, 39: 2565.30, 40: 4001.32, 41: 1394.93, 42: 3530.72, 43: 2929.52, 44: 1845.36, 45: 3412.47, 46: 1434.13, 47: 3848.71, 48: 890.41, 49: 2993.60, 50: 2450.78, 51: 3801.57, 52: 324.58, 53: 2569.52, 54: 2991.47, 55: 1075.60, 56: 2649.06, 57: 2047.76, 58: 1295.64, 59: 2291.72, 60: 2372.75, 61: 2431.54, 62: 1079.75, 63: 2595.04, 64: 652.33, 65: 549.18, 66: 1871.74, 67: 2938.72, 68: 2533.17, 69: 186.13, 70: 3943.35, 71: 1078.69, 72: 2825.86, 73: 1262.40, 74: 820.95, 75: 3913.52, 76: 2257.49, 77: 3769.23, 78: 376.97, 79: 1355.98, 80: 2546.38, 81: 3437.96, 82: 3002.66, 83: 767.52, 84: 3060.13, 85: 2723.72, 86: 2569.07, 87: 118.60, 88: 1554.38, 89: 709.19, 90: 1761.14, 91: 1144.01, 92: 1740.65, 93: 133.65, 94: 3678.20, 95: 3703.08, 96: 859.62, 97: 1846.20, 98: 963.97, 99: 3959.55},
22: {0: 882.22, 1: 1921.43, 2: 1703.47, 3: 1928.37, 4: 2328.64, 5: 1110.79, 6: 942.25, 7: 1295.39, 8: 950.85, 9: 1136.55, 10: 569.01, 11: 921.09, 12: 2531.76, 13: 1884.43, 14: 606.92, 15: 1885.91, 16: 619.32, 17: 1624.77, 18: 1583.62, 19: 769.80, 20: 879.07, 21: 1950.85, 23: 1560.37, 24: 1083.29, 25: 2345.12, 26: 878.43, 27: 749.10, 28: 1591.32, 29: 1825.87, 30: 1739.57, 31: 383.38, 32: 2596.65, 33: 1291.04, 34: 808.28, 35: 1344.63, 36: 2348.49, 37: 1521.93, 38: 1894.12, 39: 1647.98, 40: 2148.24, 41: 1510.63, 42: 1644.31, 43: 1778.35, 44: 220.81, 45: 1567.35, 46: 537.63, 47: 2104.03, 48: 1151.82, 49: 1733.90, 50: 856.98, 51: 2193.43, 52: 1683.08, 53: 1729.37, 54: 1141.47, 55: 1676.77, 56: 853.15, 57: 785.49, 58: 926.88, 59: 345.32, 60: 934.14, 61: 493.04, 62: 955.59, 63: 1610.98, 64: 2069.13, 65: 2080.69, 66: 1029.89, 67: 1498.81, 68: 1350.30, 69: 2066.96, 70: 2104.34, 71: 947.27, 72: 1563.50, 73: 879.72, 74: 1458.53, 75: 2634.44, 76: 382.24, 77: 2172.46, 78: 1575.31, 79: 1729.44, 80: 1132.86, 81: 2246.67, 82: 1158.86, 83: 1239.90, 84: 1545.29, 85: 798.91, 86: 887.39, 87: 1832.30, 88: 1621.67, 89: 1266.82, 90: 191.64, 91: 1180.86, 92: 702.28, 93: 1926.24, 94: 2478.33, 95: 2117.98, 96: 1674.13, 97: 107.94, 98: 1612.04, 99: 2148.45},
23: {0: 1206.07, 1: 2894.56, 2: 3245.72, 3: 1101.31, 4: 3691.82, 5: 843.28, 6: 2447.79, 7: 1350.99, 8: 2442.03, 9: 473.63, 10: 1060.32, 11: 2469.70, 12: 3755.49, 13: 3410.87, 14: 1105.60, 15: 578.07, 16: 1094.66, 17: 181.34, 18: 819.50, 19: 2316.19, 20: 711.42, 21: 604.82, 22: 1560.37, 24: 2348.33, 25: 1399.30, 26: 2437.88, 27: 1588.46, 28: 3110.98, 29: 3263.86, 30: 1676.66, 31: 1190.53, 32: 3840.61, 33: 2813.07, 34: 2363.64, 35: 313.40, 36: 3693.63, 37: 96.05, 38: 3260.49, 39: 2558.45, 40: 3695.14, 41: 1549.19, 42: 3199.38, 43: 2873.87, 44: 1408.02, 45: 3107.23, 46: 1120.21, 47: 3601.44, 48: 810.63, 49: 2906.27, 50: 2220.68, 51: 3614.33, 52: 603.68, 53: 2586.75, 54: 2678.63, 55: 1337.22, 56: 2354.74, 57: 1875.11, 58: 748.95, 59: 1904.53, 60: 2186.36, 61: 2053.38, 62: 917.99, 63: 2569.93, 64: 1156.22, 65: 1079.50, 66: 1799.09, 67: 2788.63, 68: 2441.20, 69: 788.38, 70: 3645.79, 71: 613.94, 72: 2728.73, 73: 740.77, 74: 979.40, 75: 3851.53, 76: 1914.37, 77: 3586.05, 78: 386.26, 79: 1599.88, 80: 2382.22, 81: 3391.59, 82: 2693.36, 83: 338.92, 84: 2888.97, 85: 2358.90, 86: 2315.88, 87: 526.27, 88: 1728.53, 89: 612.41, 90: 1370.61, 91: 1159.04, 92: 1567.83, 93: 500.99, 94: 3636.77, 95: 3523.32, 96: 1144.02, 97: 1466.90, 98: 397.34, 99: 3678.59},
24: {0: 1194.02, 1: 893.07, 2: 1183.94, 3: 2203.69, 4: 1343.50, 5: 1590.11, 6: 555.79, 7: 1355.06, 8: 506.32, 9: 1874.71, 10: 1592.27, 11: 767.61, 12: 1464.18, 13: 1254.77, 14: 1661.00, 15: 2452.44, 16: 1672.00, 17: 2340.54, 18: 1981.89, 19: 730.00, 20: 1810.48, 21: 2522.57, 22: 1083.29, 23: 2348.33, 25: 2567.27, 26: 885.13, 27: 779.16, 28: 980.21, 29: 955.30, 30: 1587.56, 31: 1390.69, 32: 1536.70, 33: 774.50, 34: 1023.00, 35: 2231.70, 36: 1346.74, 37: 2345.56, 38: 913.59, 39: 710.72, 40: 1594.48, 41: 1417.24, 42: 1242.41, 43: 708.47, 44: 1299.87, 45: 1062.26, 46: 1254.13, 47: 1352.18, 48: 1636.02, 49: 650.76, 50: 254.23, 51: 1280.21, 52: 2201.33, 53: 812.86, 54: 771.11, 55: 1757.08, 56: 535.73, 57: 478.28, 58: 1909.41, 59: 963.76, 60: 164.71, 61: 909.48, 62: 1462.85, 63: 644.15, 64: 2347.93, 65: 2410.17, 66: 706.21, 67: 444.53, 68: 347.00, 69: 2569.44, 70: 1521.87, 71: 1809.03, 72: 483.80, 73: 1838.05, 74: 1765.36, 75: 1565.92, 76: 780.86, 77: 1248.88, 78: 2198.37, 79: 1632.34, 80: 51.48, 81: 1163.52, 82: 764.23, 83: 2011.27, 84: 542.44, 85: 884.30, 86: 340.21, 87: 2413.33, 88: 1403.70, 89: 1833.70, 90: 1182.21, 91: 1407.61, 92: 789.52, 93: 2552.33, 94: 1397.06, 95: 1183.73, 96: 1881.41, 97: 1098.60, 98: 2528.22, 99: 1505.96},
25: {0: 1510.64, 1: 2670.97, 2: 3716.83, 3: 417.06, 4: 3765.14, 5: 1239.00, 6: 2931.32, 7: 1216.00, 8: 2902.40, 9: 1416.40, 10: 2102.43, 11: 3050.37, 12: 3639.89, 13: 3816.03, 14: 2198.41, 15: 839.80, 16: 2192.99, 17: 1218.25, 18: 780.19, 19: 2911.96, 20: 1836.16, 21: 842.33, 22: 2345.12, 23: 1399.30, 24: 2567.27, 26: 3081.17, 27: 1869.37, 28: 3528.61, 29: 3504.57, 30: 1078.63, 31: 2110.96, 32: 3738.78, 33: 3273.02, 34: 3085.30, 35: 1670.49, 36: 3741.29, 37: 1493.83, 38: 3395.85, 39: 2373.49, 40: 4149.78, 41: 1173.27, 42: 3734.70, 43: 2775.70, 44: 2311.68, 45: 3583.14, 46: 1811.78, 47: 3915.97, 48: 1201.82, 49: 2879.38, 50: 2579.09, 51: 3784.33, 52: 825.11, 53: 2343.63, 54: 3195.29, 55: 812.50, 56: 2849.48, 57: 2144.39, 58: 1956.18, 59: 2649.73, 60: 2448.95, 61: 2765.92, 62: 1390.95, 63: 2425.98, 64: 283.34, 65: 323.20, 66: 1861.10, 67: 2915.95, 68: 2463.06, 69: 669.16, 70: 4080.99, 71: 1684.60, 72: 2737.59, 73: 1896.99, 74: 890.02, 75: 3715.82, 76: 2558.13, 77: 3747.58, 78: 1043.35, 79: 1002.88, 80: 2574.95, 81: 3240.19, 82: 3200.73, 83: 1427.27, 84: 3058.68, 85: 3018.81, 86: 2718.66, 87: 882.16, 88: 1255.83, 89: 1148.95, 90: 2177.37, 91: 1217.87, 92: 1886.56, 93: 975.55, 94: 3462.05, 95: 3679.44, 96: 702.16, 97: 2237.87, 98: 1786.11, 99: 4071.99},
26: {0: 1571.56, 1: 1737.34, 2: 846.13, 3: 2675.06, 4: 1675.52, 5: 1899.80, 6: 345.68, 7: 1904.64, 8: 394.83, 9: 2003.40, 10: 1427.02, 11: 136.49, 12: 2008.76, 13: 1046.56, 14: 1436.02, 15: 2730.46, 16: 1449.06, 17: 2495.54, 18: 2366.35, 19: 180.57, 20: 1754.46, 21: 2797.79, 22: 878.43, 23: 2437.88, 24: 885.13, 25: 3081.17, 27: 1234.69, 28: 778.05, 29: 1124.94, 30: 2265.78, 31: 1257.75, 32: 2047.42, 33: 503.84, 34: 178.22, 35: 2220.42, 36: 1714.16, 37: 2400.36, 38: 1284.37, 39: 1594.81, 40: 1279.63, 41: 2055.01, 42: 769.02, 43: 1510.20, 44: 1057.01, 45: 717.68, 46: 1363.85, 47: 1299.02, 48: 1945.38, 49: 1394.11, 50: 671.25, 51: 1482.09, 52: 2509.82, 53: 1697.46, 54: 335.41, 55: 2323.76, 56: 349.59, 57: 1024.64, 58: 1788.12, 59: 539.33, 60: 857.42, 61: 388.29, 62: 1743.70, 63: 1525.66, 64: 2821.49, 65: 2853.28, 66: 1369.00, 67: 1079.38, 68: 1230.49, 69: 2897.43, 70: 1242.33, 71: 1825.48, 72: 1280.44, 73: 1749.99, 74: 2198.62, 75: 2108.31, 76: 540.77, 77: 1471.81, 78: 2427.70, 79: 2285.96, 80: 927.37, 81: 1836.78, 82: 358.45, 83: 2113.52, 84: 1035.77, 85: 81.15, 86: 546.80, 87: 2679.52, 88: 2102.26, 89: 2094.78, 90: 1067.28, 91: 1864.20, 92: 1208.20, 93: 2785.06, 94: 2025.08, 95: 1432.25, 96: 2381.41, 97: 971.39, 98: 2480.05, 99: 1299.72},
27: {0: 415.64, 1: 1363.37, 2: 1855.78, 3: 1478.05, 4: 2113.83, 5: 811.01, 6: 1062.02, 7: 670.86, 8: 1033.99, 9: 1117.59, 10: 1026.08, 11: 1188.35, 12: 2170.08, 13: 1972.46, 14: 1125.43, 15: 1674.99, 16: 1132.69, 17: 1567.84, 18: 1218.76, 19: 1058.19, 20: 1138.57, 21: 1745.16, 22: 749.10, 23: 1588.46, 24: 779.16, 25: 1869.37, 26: 1234.69, 28: 1676.97, 29: 1728.96, 30: 1049.92, 31: 851.12, 32: 2253.62, 33: 1408.71, 34: 1272.53, 35: 1508.47, 36: 2111.61, 37: 1595.18, 38: 1689.89, 39: 1041.67, 40: 2296.86, 41: 829.40, 42: 1866.15, 43: 1300.96, 44: 885.27, 45: 1719.87, 46: 571.35, 47: 2109.26, 48: 857.03, 49: 1320.48, 50: 721.67, 51: 2059.37, 52: 1425.60, 53: 1099.14, 54: 1325.93, 55: 1091.15, 56: 980.40, 57: 302.60, 58: 1265.10, 59: 911.41, 60: 627.62, 61: 981.90, 62: 685.93, 63: 1031.72, 64: 1625.06, 65: 1673.49, 66: 300.85, 67: 1208.02, 68: 858.52, 69: 1799.20, 70: 2232.26, 71: 1099.24, 72: 1141.86, 73: 1181.68, 74: 1015.33, 75: 2267.42, 76: 760.49, 77: 2027.98, 78: 1419.61, 79: 1060.06, 80: 806.31, 81: 1816.15, 82: 1331.54, 83: 1256.96, 84: 1320.25, 85: 1181.79, 86: 854.78, 87: 1634.96, 88: 905.28, 89: 1054.88, 90: 709.66, 91: 659.70, 92: 47.68, 93: 1773.18, 94: 2061.21, 95: 1962.63, 96: 1167.59, 97: 683.70, 98: 1808.18, 99: 2235.90},
28: {0: 2080.50, 1: 1500.97, 2: 214.02, 3: 3149.96, 4: 972.75, 5: 2458.47, 6: 663.19, 7: 2312.65, 8: 671.25, 9: 2651.65, 10: 2158.99, 11: 685.81, 12: 1397.14, 13: 301.04, 14: 2183.25, 15: 3322.44, 16: 2196.18, 17: 3142.61, 18: 2893.12, 19: 827.37, 20: 2464.29, 21: 3392.11, 22: 1591.32, 23: 3110.98, 24: 980.21, 25: 3528.61, 26: 778.05, 27: 1676.97, 29: 440.52, 30: 2567.75, 31: 1973.45, 32: 1409.07, 33: 300.50, 34: 937.85, 35: 2926.06, 36: 1025.22, 37: 3086.04, 38: 683.63, 39: 1517.11, 40: 621.34, 41: 2394.00, 42: 337.92, 43: 1244.44, 44: 1793.99, 45: 148.41, 46: 1995.24, 47: 522.02, 48: 2505.55, 49: 1086.10, 50: 955.42, 51: 742.65, 52: 3082.37, 53: 1614.31, 54: 456.18, 55: 2724.46, 56: 756.24, 57: 1386.96, 58: 2518.16, 59: 1282.53, 60: 1080.95, 61: 1137.62, 62: 2312.42, 63: 1436.67, 64: 3296.29, 65: 3349.19, 66: 1676.25, 67: 808.01, 68: 1210.75, 69: 3464.42, 70: 555.30, 71: 2512.74, 72: 1074.73, 73: 2469.58, 74: 2692.19, 75: 1485.90, 76: 1212.05, 77: 742.05, 78: 3039.50, 79: 2611.67, 80: 986.22, 81: 1355.38, 82: 436.32, 83: 2775.34, 84: 670.23, 85: 854.16, 86: 825.68, 87: 3276.92, 88: 2383.80, 89: 2684.01, 90: 1765.64, 91: 2335.40, 92: 1670.19, 93: 3400.61, 94: 1477.35, 95: 719.61, 96: 2832.83, 97: 1666.23, 98: 3201.24, 99: 569.17},
29: {0: 2144.57, 1: 1190.74, 2: 592.08, 3: 3152.30, 4: 553.17, 5: 2538.56, 6: 894.88, 7: 2301.67, 8: 878.08, 9: 2792.86, 10: 2390.68, 11: 1005.20, 12: 956.62, 13: 482.37, 14: 2432.38, 15: 3403.92, 16: 2444.89, 17: 3271.96, 18: 2937.20, 19: 1116.94, 20: 2665.35, 21: 3474.10, 22: 1825.87, 23: 3263.86, 24: 955.30, 25: 3504.57, 26: 1124.94, 27: 1728.96, 28: 440.52, 30: 2482.34, 31: 2194.18, 32: 970.16, 33: 625.16, 34: 1299.58, 35: 3113.60, 36: 597.82, 37: 3251.10, 38: 261.24, 39: 1291.18, 40: 793.80, 41: 2337.78, 42: 754.54, 43: 944.26, 44: 2042.11, 45: 585.75, 46: 2146.54, 47: 427.13, 48: 2584.98, 49: 783.60, 50: 1043.20, 51: 368.64, 52: 3154.24, 53: 1375.91, 54: 790.87, 55: 2692.06, 56: 977.58, 57: 1426.37, 58: 2739.56, 59: 1560.67, 60: 1101.36, 61: 1430.83, 62: 2405.15, 63: 1213.41, 64: 3295.12, 65: 3361.02, 66: 1650.23, 67: 601.84, 68: 1061.70, 69: 3524.35, 70: 711.14, 71: 2691.15, 72: 838.50, 73: 2680.53, 74: 2720.01, 75: 1045.78, 76: 1446.57, 77: 351.57, 78: 3142.15, 79: 2538.39, 80: 938.04, 81: 941.76, 82: 767.57, 83: 2924.95, 84: 450.87, 85: 1189.93, 86: 956.66, 87: 3363.45, 88: 2294.63, 89: 2778.52, 90: 1979.45, 91: 2362.63, 92: 1734.41, 93: 3499.21, 94: 1042.93, 95: 307.42, 96: 2828.69, 97: 1882.18, 98: 3401.48, 99: 643.69},
30: {0: 886.71, 1: 1592.38, 2: 2769.95, 3: 844.35, 4: 2700.64, 5: 944.03, 6: 2040.95, 7: 464.97, 8: 2002.81, 9: 1366.02, 10: 1771.01, 11: 2201.49, 12: 2561.28, 13: 2838.51, 14: 1884.02, 15: 1387.55, 16: 1885.13, 17: 1548.57, 18: 889.14, 19: 2085.82, 20: 1671.50, 21: 1442.51, 22: 1739.57, 23: 1676.66, 24: 1587.56, 25: 1078.63, 26: 2265.78, 27: 1049.92, 28: 2567.75, 29: 2482.34, 31: 1675.44, 32: 2660.23, 33: 2344.64, 34: 2318.39, 35: 1793.80, 36: 2673.49, 37: 1739.56, 38: 2349.33, 39: 1297.85, 40: 3180.21, 41: 229.02, 42: 2816.00, 43: 1702.52, 44: 1806.26, 45: 2644.60, 46: 1314.16, 47: 2904.13, 48: 948.87, 49: 1813.65, 50: 1661.91, 51: 2737.27, 52: 1165.37, 53: 1265.17, 54: 2299.88, 55: 366.96, 56: 1973.10, 57: 1246.47, 58: 1822.14, 59: 1955.69, 60: 1500.71, 61: 2031.79, 62: 1000.98, 63: 1353.63, 64: 951.13, 65: 1052.91, 66: 910.38, 67: 1882.71, 68: 1422.65, 69: 1380.56, 70: 3106.05, 71: 1546.43, 72: 1682.10, 73: 1736.07, 74: 697.40, 75: 2637.32, 76: 1810.37, 77: 2699.37, 78: 1321.00, 79: 87.21, 80: 1584.06, 81: 2161.56, 82: 2300.21, 83: 1471.85, 84: 2031.61, 85: 2219.83, 86: 1808.18, 87: 1383.13, 88: 187.77, 89: 1092.47, 90: 1632.26, 91: 648.68, 92: 1086.58, 93: 1542.80, 94: 2384.07, 95: 2631.36, 96: 583.06, 97: 1648.81, 98: 2044.10, 99: 3081.99},
31: {0: 790.23, 1: 2165.92, 2: 2086.78, 3: 1696.56, 4: 2683.12, 5: 880.78, 6: 1320.12, 7: 1210.89, 8: 1325.47, 9: 795.62, 10: 201.85, 11: 1304.35, 12: 2854.36, 13: 2267.40, 14: 280.03, 15: 1562.87, 16: 289.18, 17: 1269.54, 18: 1331.91, 19: 1153.17, 20: 496.79, 21: 1624.28, 22: 383.38, 23: 1190.53, 24: 1390.69, 25: 2110.96, 26: 1257.75, 27: 851.12, 28: 1973.45, 29: 2194.18, 30: 1675.44, 32: 2924.79, 33: 1673.00, 34: 1174.00, 35: 962.75, 36: 2698.94, 37: 1146.34, 38: 2246.26, 39: 1864.40, 40: 2531.04, 41: 1451.52, 42: 2025.57, 43: 2054.51, 44: 221.84, 45: 1950.72, 46: 361.33, 47: 2484.07, 48: 913.09, 49: 2031.29, 50: 1190.12, 51: 2559.87, 52: 1383.37, 53: 1933.05, 54: 1524.69, 55: 1534.09, 56: 1229.48, 57: 1005.45, 58: 546.88, 59: 719.24, 60: 1230.39, 61: 869.87, 62: 743.27, 63: 1840.75, 64: 1828.60, 65: 1822.98, 66: 1151.84, 67: 1825.26, 68: 1610.85, 69: 1756.40, 70: 2487.61, 71: 577.29, 72: 1854.62, 73: 496.46, 74: 1252.95, 75: 2956.32, 76: 761.84, 77: 2537.25, 78: 1247.60, 79: 1646.48, 80: 1436.86, 81: 2545.64, 82: 1541.91, 83: 882.78, 84: 1887.69, 85: 1177.43, 86: 1243.22, 87: 1506.93, 88: 1594.01, 89: 979.46, 90: 215.24, 91: 1049.12, 92: 805.44, 93: 1585.78, 94: 2783.86, 95: 2480.71, 96: 1484.86, 97: 312.08, 98: 1228.74, 99: 2531.71},
32: {0: 2640.85, 1: 1069.32, 2: 1532.92, 3: 3458.92, 4: 474.66, 5: 3029.29, 6: 1756.41, 7: 2648.02, 8: 1723.49, 9: 3371.10, 10: 3126.63, 11: 1916.31, 12: 100.66, 13: 1360.58, 14: 3190.70, 15: 3848.77, 16: 3202.12, 17: 3808.05, 18: 3336.85, 19: 1997.45, 20: 3344.29, 21: 3916.86, 22: 2596.65, 23: 3840.61, 24: 1536.70, 25: 3738.78, 26: 2047.42, 27: 2253.62, 28: 1409.07, 29: 970.16, 30: 2660.23, 31: 2924.79, 33: 1571.78, 34: 2225.61, 35: 3753.26, 36: 407.77, 37: 3848.80, 38: 764.20, 39: 1371.71, 40: 1551.57, 41: 2591.49, 42: 1703.00, 43: 987.70, 44: 2817.15, 45: 1551.04, 46: 2780.89, 47: 1126.68, 48: 3071.29, 49: 934.56, 50: 1740.64, 51: 733.38, 52: 3593.20, 53: 1395.16, 54: 1726.82, 55: 2960.98, 56: 1818.68, 57: 1979.99, 58: 3445.90, 59: 2398.35, 60: 1700.08, 61: 2291.74, 62: 2927.18, 63: 1329.56, 64: 3586.74, 65: 3675.02, 66: 2056.46, 67: 1100.04, 68: 1400.45, 69: 3923.72, 70: 1481.00, 71: 3334.12, 72: 1111.96, 73: 3373.68, 74: 3103.65, 75: 92.20, 76: 2246.45, 77: 712.83, 78: 3637.16, 79: 2736.55, 80: 1493.08, 81: 499.41, 82: 1703.78, 83: 3510.57, 84: 1058.42, 85: 2101.17, 86: 1719.82, 87: 3819.33, 88: 2484.68, 89: 3278.59, 90: 2713.60, 91: 2774.04, 92: 2277.58, 93: 3971.39, 94: 311.01, 95: 707.64, 96: 3143.37, 97: 2625.68, 98: 4052.05, 99: 1366.50},
33: {0: 1803.87, 1: 1451.48, 2: 448.41, 3: 2886.52, 4: 1178.07, 5: 2175.13, 6: 366.90, 7: 2059.71, 8: 381.28, 9: 2355.76, 10: 1859.02, 11: 395.41, 12: 1542.65, 13: 598.02, 14: 1884.71, 15: 3035.95, 16: 1897.61, 17: 2847.60, 18: 2617.58, 19: 530.08, 20: 2163.85, 21: 3105.36, 22: 1291.04, 23: 2813.07, 24: 774.50, 25: 3273.02, 26: 503.84, 27: 1408.71, 28: 300.50, 29: 625.16, 30: 2344.64, 31: 1673.00, 32: 1571.78, 34: 675.74, 35: 2625.84, 36: 1220.25, 37: 2787.04, 38: 809.37, 39: 1401.47, 40: 896.17, 41: 2159.20, 42: 471.43, 43: 1200.28, 44: 1494.82, 45: 311.24, 46: 1699.55, 47: 816.47, 48: 2222.15, 49: 1055.88, 50: 694.72, 51: 978.46, 52: 2798.73, 53: 1503.60, 54: 168.63, 55: 2476.49, 56: 459.62, 57: 1129.32, 58: 2217.92, 59: 986.00, 60: 844.00, 61: 843.53, 62: 2026.69, 63: 1322.91, 64: 3033.44, 65: 3081.77, 66: 1439.27, 67: 741.98, 68: 1060.75, 69: 3182.71, 70: 838.63, 71: 2213.22, 72: 995.08, 73: 2169.10, 74: 2422.60, 75: 1639.01, 76: 911.55, 77: 968.92, 78: 2749.23, 79: 2382.40, 80: 793.30, 81: 1424.00, 82: 145.96, 83: 2478.19, 84: 643.61, 85: 573.89, 86: 554.59, 87: 2989.42, 88: 2164.62, 89: 2396.38, 90: 1465.17, 91: 2068.35, 92: 1397.91, 93: 3110.41, 94: 1585.32, 95: 931.43, 96: 2573.32, 97: 1365.77, 98: 2900.74, 99: 865.52},
34: {0: 1576.12, 1: 1893.08, 2: 983.25, 3: 2674.08, 4: 1851.22, 5: 1879.61, 6: 508.99, 7: 1934.30, 8: 555.71, 9: 1944.73, 10: 1329.08, 11: 312.20, 12: 2186.91, 13: 1192.56, 14: 1326.22, 15: 2688.48, 16: 1339.20, 17: 2432.79, 18: 2351.40, 19: 293.02, 20: 1666.85, 21: 2754.44, 22: 808.28, 23: 2363.64, 24: 1023.00, 25: 3085.30, 26: 178.22, 27: 1272.53, 28: 937.85, 29: 1299.58, 30: 2318.39, 31: 1174.00, 32: 2225.61, 33: 675.74, 35: 2131.08, 36: 1890.73, 37: 2320.25, 38: 1462.44, 39: 1733.28, 40: 1400.36, 41: 2101.24, 42: 884.98, 43: 1671.88, 44: 962.09, 45: 862.75, 46: 1324.24, 47: 1454.79, 48: 1923.91, 49: 1560.97, 50: 791.25, 51: 1653.81, 52: 2477.00, 53: 1834.79, 54: 508.72, 55: 2349.00, 56: 493.08, 57: 1096.69, 58: 1687.49, 59: 463.60, 60: 973.93, 61: 324.61, 62: 1722.40, 63: 1667.07, 64: 2819.24, 65: 2844.05, 66: 1440.09, 67: 1249.02, 68: 1370.00, 69: 2863.55, 70: 1370.35, 71: 1749.71, 72: 1440.49, 73: 1656.49, 74: 2196.94, 75: 2286.50, 76: 527.75, 77: 1644.66, 78: 2380.39, 79: 2332.21, 80: 1068.32, 81: 2011.20, 82: 532.02, 83: 2047.36, 84: 1211.06, 85: 141.06, 86: 683.12, 87: 2635.85, 88: 2162.40, 89: 2060.02, 90: 999.91, 91: 1875.14, 92: 1240.72, 93: 2733.48, 94: 2201.81, 95: 1606.57, 96: 2390.84, 97: 909.80, 98: 2380.32, 99: 1437.03},
35: {0: 1172.71, 1: 2857.57, 2: 3047.00, 3: 1336.01, 4: 3569.12, 5: 876.62, 6: 2265.81, 7: 1410.09, 8: 2265.54, 9: 441.19, 10: 804.48, 11: 2265.17, 12: 3672.72, 13: 3222.91, 14: 830.83, 15: 876.62, 16: 818.91, 17: 478.98, 18: 1007.93, 19: 2113.01, 20: 465.97, 21: 910.53, 22: 1344.63, 23: 313.40, 24: 2231.70, 25: 1670.49, 26: 2220.42, 27: 1508.47, 28: 2926.06, 29: 3113.60, 30: 1793.80, 31: 962.75, 32: 3753.26, 33: 2625.84, 34: 2131.08, 36: 3576.44, 37: 227.76, 38: 3133.22, 39: 2525.59, 40: 3492.76, 41: 1634.53, 42: 2988.29, 43: 2809.38, 44: 1169.00, 45: 2910.10, 46: 977.81, 47: 3429.11, 48: 858.40, 49: 2824.69, 50: 2076.90, 51: 3472.30, 52: 849.47, 53: 2565.81, 54: 2482.46, 55: 1485.16, 56: 2173.41, 57: 1773.32, 58: 461.85, 59: 1681.51, 60: 2067.20, 61: 1832.36, 62: 898.35, 63: 2527.26, 64: 1411.57, 65: 1347.41, 66: 1755.11, 67: 2676.13, 68: 2366.25, 69: 1090.48, 70: 3448.00, 71: 423.79, 72: 2645.10, 73: 475.79, 74: 1115.29, 75: 3771.41, 76: 1715.76, 77: 3446.35, 78: 627.78, 79: 1725.14, 80: 2270.21, 81: 3324.45, 82: 2498.85, 83: 322.02, 84: 2763.82, 85: 2139.99, 86: 2157.45, 87: 821.52, 88: 1814.51, 89: 702.76, 90: 1162.16, 91: 1205.60, 92: 1479.83, 93: 813.00, 94: 3569.38, 95: 3385.97, 96: 1315.77, 97: 1261.31, 98: 299.71, 99: 3488.80},
36: {0: 2518.19, 1: 1143.12, 2: 1133.38, 3: 3428.18, 4: 69.23, 5: 2914.20, 6: 1453.68, 7: 2590.03, 8: 1427.88, 9: 3220.14, 10: 2899.68, 11: 1589.22, 12: 433.18, 13: 954.51, 14: 2953.10, 15: 3761.28, 16: 2965.13, 17: 3679.44, 18: 3264.86, 19: 1688.04, 20: 3146.30, 21: 3830.77, 22: 2348.49, 23: 3693.63, 24: 1346.74, 25: 3741.29, 26: 1714.16, 27: 2111.61, 28: 1025.22, 29: 597.82, 30: 2673.49, 31: 2698.94, 32: 407.77, 33: 1220.25, 34: 1890.73, 35: 3576.44, 37: 3692.17, 38: 454.47, 39: 1381.28, 40: 1147.79, 41: 2571.74, 42: 1304.23, 43: 974.60, 44: 2568.72, 45: 1162.03, 46: 2598.70, 47: 720.00, 48: 2958.62, 49: 861.97, 50: 1510.85, 51: 325.68, 52: 3506.36, 53: 1432.87, 54: 1383.28, 55: 2940.58, 56: 1526.82, 57: 1818.78, 58: 3235.39, 59: 2114.94, 60: 1510.43, 61: 1995.29, 62: 2797.09, 63: 1320.60, 64: 3563.59, 65: 3643.08, 66: 1960.02, 67: 905.04, 68: 1302.00, 69: 3856.75, 70: 1075.60, 71: 3153.02, 72: 1012.79, 73: 3169.09, 74: 3036.08, 75: 496.33, 76: 1980.47, 77: 305.63, 78: 3525.83, 79: 2742.59, 80: 1311.48, 81: 646.30, 82: 1359.94, 83: 3357.30, 84: 814.26, 85: 1775.14, 86: 1461.12, 87: 3726.75, 88: 2489.62, 89: 3161.96, 90: 2484.21, 91: 2690.17, 92: 2128.07, 93: 3872.59, 94: 602.70, 95: 307.92, 96: 3105.84, 97: 2390.97, 98: 3871.60, 99: 962.93},
37: {0: 1224.83, 1: 2917.26, 2: 3215.88, 3: 1189.67, 4: 3688.56, 5: 878.01, 6: 2423.20, 7: 1397.24, 8: 2419.36, 9: 478.48, 10: 1004.97, 11: 2437.03, 12: 3765.05, 13: 3385.06, 14: 1042.70, 15: 674.11, 16: 1031.30, 17: 276.85, 18: 896.42, 19: 2283.82, 20: 657.17, 21: 700.26, 22: 1521.93, 23: 96.05, 24: 2345.56, 25: 1493.83, 26: 2400.36, 27: 1595.18, 28: 3086.04, 29: 3251.10, 30: 1739.56, 31: 1146.34, 32: 3848.80, 33: 2787.04, 34: 2320.25, 35: 227.76, 36: 3692.17, 38: 3255.40, 39: 2581.91, 40: 3664.23, 41: 1603.41, 42: 3164.92, 43: 2888.26, 44: 1360.45, 45: 3077.87, 46: 1104.56, 47: 3581.31, 48: 849.10, 49: 2915.42, 50: 2208.79, 51: 3604.61, 52: 692.41, 53: 2613.76, 54: 2649.24, 55: 1406.79, 56: 2330.25, 57: 1876.01, 58: 679.23, 59: 1864.17, 60: 2182.47, 61: 2014.02, 62: 938.09, 63: 2590.49, 64: 1248.34, 65: 1173.39, 66: 1817.54, 67: 2787.85, 68: 2451.74, 69: 884.17, 70: 3616.54, 71: 575.84, 72: 2737.01, 73: 679.83, 74: 1044.09, 75: 3861.99, 76: 1882.99, 77: 3577.09, 78: 471.83, 79: 1664.62, 80: 2381.00, 81: 3405.70, 82: 2664.59, 83: 338.54, 84: 2884.20, 85: 2320.75, 86: 2299.23, 87: 622.27, 88: 1783.48, 89: 659.76, 90: 1334.16, 91: 1200.65, 92: 1571.99, 93: 594.01, 94: 3651.01, 95: 3515.10, 96: 1218.66, 97: 1431.82, 98: 313.38, 99: 3652.28},
38: {0: 2102.31, 1: 961.14, 2: 850.57, 3: 3060.99, 4: 437.39, 5: 2499.15, 6: 1005.73, 7: 2212.89, 8: 977.49, 9: 2786.95, 10: 2446.65, 11: 1154.61, 12: 733.48, 13: 740.65, 14: 2499.04, 15: 3356.25, 16: 2511.11, 17: 3254.09, 18: 2871.82, 19: 1243.56, 20: 2698.19, 21: 3426.19, 22: 1894.12, 23: 3260.49, 24: 913.59, 25: 3395.85, 26: 1284.37, 27: 1689.89, 28: 683.63, 29: 261.24, 30: 2349.33, 31: 2246.26, 32: 764.20, 33: 809.37, 34: 1462.44, 35: 3133.22, 36: 454.47, 37: 3255.40, 39: 1104.62, 40: 1037.62, 41: 2222.84, 42: 1009.51, 43: 727.40, 44: 2114.30, 45: 831.78, 46: 2156.53, 47: 634.85, 48: 2544.53, 49: 573.81, 50: 1060.69, 51: 388.62, 52: 3103.00, 53: 1179.91, 54: 962.68, 55: 2585.82, 56: 1075.72, 57: 1391.23, 58: 2784.52, 59: 1663.08, 60: 1074.23, 61: 1546.56, 62: 2375.26, 63: 1031.14, 64: 3200.66, 65: 3273.38, 66: 1567.74, 67: 488.86, 68: 932.80, 69: 3463.12, 70: 955.26, 71: 2709.45, 72: 669.79, 73: 2719.47, 74: 2647.64, 75: 829.67, 76: 1526.24, 77: 351.76, 78: 3109.30, 79: 2411.32, 80: 883.63, 81: 680.92, 82: 939.67, 83: 2922.74, 84: 371.55, 85: 1340.15, 86: 1006.81, 87: 3319.09, 88: 2162.05, 89: 2744.59, 90: 2031.31, 91: 2294.88, 92: 1702.41, 93: 3460.98, 94: 794.48, 95: 283.64, 96: 2736.83, 97: 1937.54, 98: 3426.82, 99: 874.65},
39: {0: 1358.11, 1: 336.51, 2: 1730.97, 3: 2087.30, 4: 1413.02, 5: 1720.12, 6: 1258.79, 7: 1288.82, 8: 1208.59, 9: 2107.21, 10: 2052.78, 11: 1473.78, 12: 1274.76, 13: 1727.45, 14: 2144.23, 15: 2498.69, 16: 2152.90, 17: 2500.42, 18: 1979.83, 19: 1440.40, 20: 2179.06, 21: 2565.30, 22: 1647.98, 23: 2558.45, 24: 710.72, 25: 2373.49, 26: 1594.81, 27: 1041.67, 28: 1517.11, 29: 1291.18, 30: 1297.85, 31: 1864.40, 32: 1371.71, 33: 1401.47, 34: 1733.28, 35: 2525.59, 36: 1381.28, 37: 2581.91, 38: 1104.62, 40: 2065.82, 41: 1219.79, 42: 1832.99, 43: 406.74, 44: 1840.94, 45: 1636.66, 46: 1612.96, 47: 1716.09, 48: 1757.78, 49: 535.76, 50: 948.90, 51: 1480.98, 52: 2244.66, 53: 103.59, 54: 1443.40, 55: 1589.32, 56: 1245.97, 57: 867.78, 58: 2306.77, 59: 1620.90, 60: 780.44, 61: 1594.05, 62: 1643.83, 63: 80.45, 64: 2215.19, 65: 2303.39, 66: 770.73, 67: 714.66, 68: 364.32, 69: 2560.74, 70: 1984.72, 71: 2130.55, 72: 454.67, 73: 2223.21, 74: 1745.76, 75: 1357.63, 76: 1430.10, 77: 1441.52, 78: 2311.33, 79: 1370.76, 80: 667.44, 81: 878.93, 82: 1431.69, 83: 2246.48, 84: 864.43, 85: 1594.95, 86: 1050.92, 87: 2473.47, 88: 1117.66, 89: 1965.33, 90: 1686.15, 91: 1434.20, 92: 1080.53, 93: 2629.52, 94: 1114.83, 95: 1375.18, 96: 1772.88, 97: 1626.64, 98: 2823.44, 99: 1931.36},
40: {0: 2697.60, 1: 1984.45, 2: 450.79, 3: 3771.11, 4: 1079.08, 5: 3071.18, 6: 1261.30, 7: 2933.78, 8: 1277.44, 9: 3244.04, 10: 2705.46, 11: 1227.82, 12: 1580.21, 13: 343.63, 14: 2715.52, 15: 3931.97, 16: 2728.56, 17: 3737.01, 18: 3511.02, 19: 1380.63, 20: 3027.31, 21: 4001.32, 22: 2148.24, 23: 3695.14, 24: 1594.48, 25: 4149.78, 26: 1279.63, 27: 2296.86, 28: 621.34, 29: 793.80, 30: 3180.21, 31: 2531.04, 32: 1551.57, 33: 896.17, 34: 1400.36, 35: 3492.76, 36: 1147.79, 37: 3664.23, 38: 1037.62, 39: 2065.82, 41: 3011.28, 42: 515.40, 43: 1736.43, 44: 2335.62, 45: 590.03, 46: 2589.30, 47: 432.65, 48: 3118.21, 49: 1575.07, 50: 1575.86, 51: 826.20, 52: 3694.86, 53: 2155.87, 54: 1017.22, 55: 3344.79, 56: 1353.01, 57: 2008.19, 58: 3066.73, 59: 1817.09, 60: 1701.43, 61: 1666.35, 62: 2922.85, 63: 1986.25, 64: 3917.51, 65: 3969.81, 66: 2295.34, 67: 1354.14, 68: 1794.06, 69: 4078.59, 70: 82.68, 71: 3088.49, 72: 1611.42, 73: 3026.09, 74: 3312.19, 75: 1642.17, 76: 1781.32, 77: 854.42, 78: 3643.89, 79: 3226.64, 80: 1596.15, 81: 1688.35, 82: 1003.53, 83: 3363.22, 84: 1202.13, 85: 1360.78, 86: 1443.26, 87: 3885.23, 88: 2994.92, 89: 3292.25, 90: 2331.82, 91: 2955.87, 92: 2288.88, 93: 4005.00, 94: 1728.94, 95: 883.70, 96: 3454.16, 97: 2233.29, 98: 3757.60, 99: 185.07},
41: {0: 661.46, 1: 1536.06, 2: 2591.88, 3: 867.68, 4: 2593.88, 5: 764.29, 6: 1843.69, 7: 247.78, 8: 1807.64, 9: 1197.60, 10: 1553.67, 11: 1996.18, 12: 2494.47, 13: 2672.00, 14: 1666.73, 15: 1333.69, 16: 1668.38, 17: 1438.28, 18: 813.26, 19: 1875.85, 20: 1473.91, 21: 1394.93, 22: 1510.63, 23: 1549.19, 24: 1417.24, 25: 1173.27, 26: 2055.01, 27: 829.40, 28: 2394.00, 29: 2337.78, 30: 229.02, 31: 1451.52, 32: 2591.49, 33: 2159.20, 34: 2101.24, 35: 1634.53, 36: 2571.74, 37: 1603.41, 38: 2222.84, 39: 1219.79, 40: 3011.28, 42: 2629.43, 43: 1614.01, 44: 1578.39, 45: 2463.42, 46: 1090.25, 47: 2754.10, 48: 777.08, 49: 1710.04, 50: 1469.25, 51: 2611.40, 52: 1092.63, 53: 1204.76, 54: 2105.20, 55: 370.19, 56: 1772.18, 57: 1044.26, 58: 1624.76, 59: 1730.47, 60: 1316.86, 61: 1809.97, 62: 799.53, 63: 1265.19, 64: 996.11, 65: 1083.72, 66: 720.06, 67: 1744.81, 68: 1290.06, 69: 1362.22, 70: 2939.08, 71: 1356.19, 72: 1564.89, 73: 1537.35, 74: 591.49, 75: 2576.16, 76: 1588.69, 77: 2574.52, 78: 1217.72, 79: 231.14, 80: 1419.09, 81: 2097.48, 82: 2106.81, 83: 1313.68, 84: 1889.48, 85: 2006.38, 86: 1614.68, 87: 1319.89, 88: 180.42, 89: 944.77, 90: 1403.87, 91: 447.18, 92: 864.14, 93: 1480.69, 94: 2329.09, 95: 2506.37, 96: 558.35, 97: 1419.80, 98: 1899.09, 99: 2921.37},
42: {0: 2250.86, 1: 1834.55, 2: 171.03, 3: 3343.37, 4: 1244.74, 5: 2610.48, 6: 805.10, 7: 2524.47, 8: 832.33, 9: 2755.67, 10: 2196.00, 11: 731.02, 12: 1701.28, 13: 379.35, 14: 2203.00, 15: 3462.08, 16: 2216.04, 17: 3249.02, 18: 3062.93, 19: 884.51, 20: 2522.35, 21: 3530.72, 22: 1644.31, 23: 3199.38, 24: 1242.41, 25: 3734.70, 26: 769.02, 27: 1866.15, 28: 337.92, 29: 754.54, 30: 2816.00, 31: 2025.57, 32: 1703.00, 33: 471.43, 34: 884.98, 35: 2988.29, 36: 1304.23, 37: 3164.92, 38: 1009.51, 39: 1832.99, 40: 515.40, 41: 2629.43, 43: 1578.03, 44: 1826.00, 45: 198.32, 46: 2105.32, 47: 666.69, 48: 2657.20, 49: 1421.04, 50: 1161.82, 51: 994.13, 52: 3231.26, 53: 1932.41, 54: 543.39, 55: 2942.77, 56: 891.05, 57: 1594.77, 58: 2557.05, 59: 1308.22, 60: 1315.30, 61: 1157.17, 62: 2458.35, 63: 1752.90, 64: 3490.50, 65: 3534.91, 66: 1909.80, 67: 1133.75, 68: 1509.71, 69: 3617.67, 70: 489.84, 71: 2589.22, 72: 1399.66, 73: 2518.81, 74: 2875.02, 75: 1784.63, 76: 1286.42, 77: 1003.69, 78: 3167.06, 79: 2853.29, 80: 1257.83, 81: 1687.28, 82: 535.56, 83: 2870.86, 84: 1002.29, 85: 850.00, 86: 1018.46, 87: 3413.44, 88: 2636.05, 89: 2822.24, 90: 1830.77, 91: 2524.08, 92: 1851.93, 93: 3527.22, 94: 1797.39, 95: 997.09, 96: 3033.49, 97: 1733.23, 98: 3249.06, 99: 571.83},
43: {0: 1668.39, 1: 256.56, 2: 1452.25, 3: 2479.00, 4: 1007.25, 5: 2050.53, 6: 1165.01, 7: 1660.68, 8: 1116.88, 9: 2409.84, 10: 2252.61, 11: 1376.80, 12: 894.91, 13: 1410.12, 14: 2332.03, 15: 2861.57, 16: 2342.15, 17: 2831.83, 18: 2349.15, 19: 1386.55, 20: 2426.90, 21: 2929.52, 22: 1778.35, 23: 2873.87, 24: 708.47, 25: 2775.70, 26: 1510.20, 27: 1300.96, 28: 1244.44, 29: 944.26, 30: 1702.52, 31: 2054.51, 32: 987.70, 33: 1200.28, 34: 1671.88, 35: 2809.38, 36: 974.60, 37: 2888.26, 38: 727.40, 39: 406.74, 40: 1736.43, 41: 1614.01, 42: 1578.03, 44: 1989.54, 45: 1380.02, 46: 1855.75, 47: 1357.28, 48: 2091.39, 49: 161.76, 50: 960.12, 51: 1089.09, 52: 2606.10, 53: 463.35, 54: 1285.03, 55: 1984.20, 56: 1182.81, 57: 1057.67, 58: 2542.28, 59: 1671.28, 60: 845.06, 61: 1608.43, 62: 1956.34, 63: 349.76, 64: 2609.99, 65: 2695.00, 66: 1077.43, 67: 458.31, 68: 447.68, 69: 2936.40, 70: 1653.94, 71: 2398.62, 72: 232.74, 73: 2463.76, 74: 2116.01, 75: 985.43, 76: 1489.32, 77: 1049.21, 78: 2654.97, 79: 1773.90, 80: 657.01, 81: 517.72, 82: 1268.25, 83: 2549.87, 84: 575.88, 85: 1531.00, 86: 1011.48, 87: 2832.73, 88: 1520.61, 89: 2299.34, 90: 1856.16, 91: 1787.50, 92: 1331.08, 93: 2985.61, 94: 762.92, 95: 984.59, 96: 2160.70, 97: 1781.00, 98: 3109.08, 99: 1587.15},
44: {0: 923.02, 1: 2124.21, 2: 1895.68, 3: 1895.50, 4: 2548.37, 5: 1074.24, 6: 1153.73, 7: 1347.31, 8: 1165.09, 9: 1017.21, 10: 370.01, 11: 1114.84, 12: 2751.83, 13: 2083.28, 14: 391.28, 15: 1783.54, 16: 404.01, 17: 1490.72, 18: 1535.82, 19: 967.34, 20: 705.09, 21: 1845.36, 22: 220.81, 23: 1408.02, 24: 1299.87, 25: 2311.68, 26: 1057.01, 27: 885.27, 28: 1793.99, 29: 2042.11, 30: 1806.26, 31: 221.84, 32: 2817.15, 33: 1494.82, 34: 962.09, 35: 1169.00, 36: 2568.72, 37: 1360.45, 38: 2114.30, 39: 1840.94, 40: 2335.62, 41: 1578.39, 42: 1826.00, 43: 1989.54, 45: 1761.64, 46: 515.20, 47: 2310.44, 48: 1110.01, 49: 1949.75, 50: 1077.00, 51: 2410.17, 52: 1600.02, 53: 1918.18, 54: 1340.24, 55: 1698.84, 56: 1066.42, 57: 973.33, 58: 731.18, 59: 518.56, 60: 1147.75, 61: 669.30, 62: 928.07, 63: 1808.28, 64: 2030.68, 65: 2030.15, 66: 1180.71, 67: 1718.82, 68: 1556.17, 69: 1975.54, 70: 2295.38, 71: 796.52, 72: 1777.79, 73: 694.95, 74: 1440.70, 75: 2854.46, 76: 595.63, 77: 2389.80, 78: 1468.53, 79: 1785.82, 80: 1348.90, 81: 2463.33, 82: 1358.76, 83: 1104.09, 84: 1766.09, 85: 976.00, 86: 1107.77, 87: 1727.82, 88: 1706.83, 89: 1191.92, 90: 179.04, 91: 1204.88, 92: 837.61, 93: 1807.61, 94: 2696.24, 95: 2336.01, 96: 1667.89, 97: 214.37, 98: 1423.14, 99: 2344.83},
45: {0: 2114.69, 1: 1636.50, 2: 139.26, 3: 3197.56, 4: 1107.08, 5: 2484.17, 6: 672.31, 7: 2369.01, 8: 690.97, 9: 2654.48, 10: 2130.14, 11: 647.09, 12: 1541.72, 13: 329.95, 14: 2146.92, 15: 3343.23, 16: 2159.94, 17: 3147.30, 18: 2928.37, 19: 797.56, 20: 2445.60, 21: 3412.47, 22: 1567.35, 23: 3107.23, 24: 1062.26, 25: 3583.14, 26: 717.68, 27: 1719.87, 28: 148.41, 29: 585.75, 30: 2644.60, 31: 1950.72, 32: 1551.04, 33: 311.24, 34: 862.75, 35: 2910.10, 36: 1162.03, 37: 3077.87, 38: 831.78, 39: 1636.66, 40: 590.03, 41: 2463.42, 42: 198.32, 43: 1380.02, 44: 1761.64, 46: 1999.42, 47: 598.82, 48: 2531.15, 49: 1223.43, 50: 1004.12, 51: 868.38, 52: 3107.42, 53: 1735.64, 54: 428.67, 55: 2784.83, 56: 763.49, 57: 1438.89, 58: 2491.04, 59: 1244.33, 60: 1146.57, 61: 1095.35, 62: 2334.82, 63: 1556.46, 64: 3344.44, 65: 3393.00, 66: 1743.45, 67: 935.54, 68: 1317.65, 69: 3492.01, 70: 538.68, 71: 2502.51, 72: 1201.60, 73: 2446.94, 74: 2733.83, 75: 1629.21, 76: 1195.30, 77: 871.56, 78: 3054.12, 79: 2684.80, 80: 1074.29, 81: 1503.61, 82: 414.04, 83: 2774.40, 84: 804.19, 85: 797.52, 86: 865.43, 87: 3296.14, 88: 2462.78, 89: 2703.29, 90: 1748.01, 91: 2379.54, 92: 1709.14, 93: 3415.18, 94: 1625.08, 95: 854.63, 96: 2883.91, 97: 1649.00, 98: 3179.23, 99: 583.67},
46: {0: 429.20, 1: 1932.62, 2: 2138.57, 3: 1394.72, 4: 2591.88, 5: 574.19, 6: 1332.88, 7: 849.76, 8: 1324.55, 9: 656.41, 10: 485.24, 11: 1375.18, 12: 2702.53, 13: 2295.94, 14: 595.18, 15: 1367.09, 16: 599.47, 17: 1148.16, 18: 1046.21, 19: 1222.44, 20: 571.36, 21: 1434.13, 22: 537.63, 23: 1120.21, 24: 1254.13, 25: 1811.78, 26: 1363.85, 27: 571.35, 28: 1995.24, 29: 2146.54, 30: 1314.16, 31: 361.33, 32: 2780.89, 33: 1699.55, 34: 1324.24, 35: 977.81, 36: 2598.70, 37: 1104.56, 38: 2156.53, 39: 1612.96, 40: 2589.30, 41: 1090.25, 42: 2105.32, 43: 1855.75, 44: 515.20, 45: 1999.42, 47: 2481.50, 48: 614.49, 49: 1858.19, 50: 1104.60, 51: 2500.91, 52: 1152.88, 53: 1669.78, 54: 1572.65, 55: 1184.74, 56: 1239.98, 57: 803.36, 58: 693.90, 59: 865.08, 60: 1089.54, 61: 999.99, 62: 420.88, 63: 1601.37, 64: 1533.94, 65: 1543.32, 66: 859.27, 67: 1698.64, 68: 1408.46, 69: 1539.32, 70: 2536.40, 71: 554.91, 72: 1678.39, 73: 611.31, 74: 930.82, 75: 2802.28, 76: 824.15, 77: 2473.86, 78: 1064.25, 79: 1286.10, 80: 1293.26, 81: 2364.98, 82: 1585.81, 83: 782.16, 84: 1786.53, 85: 1289.60, 86: 1195.81, 87: 1315.78, 88: 1234.53, 89: 735.83, 90: 365.94, 91: 693.31, 92: 533.03, 93: 1422.96, 94: 2608.57, 95: 2412.46, 96: 1154.67, 97: 429.69, 98: 1274.12, 99: 2564.05},
47: {0: 2522.63, 1: 1595.61, 2: 507.06, 3: 3555.86, 4: 652.15, 5: 2911.48, 6: 1164.61, 7: 2706.77, 8: 1163.60, 9: 3136.01, 10: 2672.89, 11: 1207.36, 12: 1150.51, 13: 287.59, 14: 2700.79, 15: 3778.62, 16: 2713.67, 17: 3622.84, 18: 3326.14, 19: 1346.47, 20: 2970.66, 21: 3848.71, 22: 2104.03, 23: 3601.44, 24: 1352.18, 25: 3915.97, 26: 1299.02, 27: 2109.26, 28: 522.02, 29: 427.13, 30: 2904.13, 31: 2484.07, 32: 1126.68, 33: 816.47, 34: 1454.79, 35: 3429.11, 36: 720.00, 37: 3581.31, 38: 634.85, 39: 1716.09, 40: 432.65, 41: 2754.10, 42: 666.69, 43: 1357.28, 44: 2310.44, 45: 598.82, 46: 2481.50, 48: 2958.36, 49: 1199.27, 50: 1398.53, 51: 395.51, 52: 3532.57, 53: 1798.75, 54: 977.47, 55: 3103.99, 56: 1256.36, 57: 1808.67, 58: 3030.35, 59: 1802.32, 60: 1485.91, 61: 1658.65, 62: 2771.79, 63: 1638.92, 64: 3700.00, 65: 3762.08, 66: 2056.21, 67: 1027.80, 68: 1486.46, 69: 3908.42, 70: 356.92, 71: 3011.66, 72: 1264.80, 73: 2978.88, 74: 3114.23, 75: 1216.15, 76: 1722.50, 77: 422.21, 78: 3506.41, 79: 2958.37, 80: 1341.46, 81: 1261.11, 82: 957.05, 83: 3263.67, 84: 875.56, 85: 1375.82, 86: 1288.40, 87: 3735.79, 88: 2716.59, 89: 3145.68, 90: 2273.52, 91: 2755.81, 92: 2109.75, 93: 3866.20, 94: 1296.30, 95: 451.69, 96: 3233.43, 97: 2174.28, 98: 3708.78, 99: 251.75},
48: {0: 442.29, 1: 2094.27, 2: 2669.80, 3: 785.49, 4: 2964.12, 5: 47.07, 6: 1859.25, 7: 553.18, 8: 1840.87, 9: 420.59, 10: 931.18, 11: 1938.08, 12: 2982.44, 13: 2805.19, 14: 1037.10, 15: 820.29, 16: 1034.26, 17: 742.85, 18: 431.80, 19: 1789.66, 20: 745.07, 21: 890.41, 22: 1151.82, 23: 810.63, 24: 1636.02, 25: 1201.82, 26: 1945.38, 27: 857.03, 28: 2505.55, 29: 2584.98, 30: 948.87, 31: 913.09, 32: 3071.29, 33: 2222.15, 34: 1923.91, 35: 858.40, 36: 2958.62, 37: 849.10, 38: 2544.53, 39: 1757.78, 40: 3118.21, 41: 777.08, 42: 2657.20, 43: 2091.39, 44: 1110.01, 45: 2531.15, 46: 614.49, 47: 2958.36, 49: 2138.79, 50: 1560.74, 51: 2916.18, 52: 576.84, 53: 1781.00, 54: 2114.93, 55: 687.16, 56: 1769.37, 57: 1159.29, 58: 892.29, 59: 1471.94, 60: 1483.91, 61: 1599.67, 62: 201.84, 63: 1774.52, 64: 921.64, 65: 928.87, 66: 1015.02, 67: 2059.46, 68: 1673.31, 69: 961.00, 70: 3058.47, 71: 607.60, 72: 1965.51, 73: 811.05, 74: 349.32, 75: 3075.65, 76: 1406.59, 77: 2884.54, 78: 567.67, 79: 888.05, 80: 1661.88, 81: 2607.65, 82: 2124.86, 83: 539.42, 84: 2176.13, 85: 1875.61, 86: 1680.91, 87: 778.54, 88: 956.62, 89: 208.12, 90: 977.95, 91: 352.14, 92: 850.72, 93: 916.56, 94: 2851.76, 95: 2818.95, 96: 585.84, 97: 1043.92, 98: 1130.76, 99: 3071.77},
49: {0: 1706.57, 1: 416.12, 2: 1292.65, 3: 2568.82, 4: 887.03, 5: 2096.31, 6: 1051.98, 7: 1736.75, 8: 1005.68, 9: 2437.39, 10: 2231.73, 11: 1258.81, 12: 849.63, 13: 1248.36, 14: 2305.31, 15: 2924.85, 16: 2315.97, 17: 2873.96, 18: 2419.20, 19: 1282.08, 20: 2426.50, 21: 2993.60, 22: 1733.90, 23: 2906.27, 24: 650.76, 25: 2879.38, 26: 1394.11, 27: 1320.48, 28: 1086.10, 29: 783.60, 30: 1813.65, 31: 2031.29, 32: 934.56, 33: 1055.88, 34: 1560.97, 35: 2824.69, 36: 861.97, 37: 2915.42, 38: 573.81, 39: 535.76, 40: 1575.07, 41: 1710.04, 42: 1421.04, 43: 161.76, 44: 1949.75, 45: 1223.43, 46: 1858.19, 47: 1199.27, 48: 2138.79, 50: 891.22, 51: 945.42, 52: 2669.18, 53: 606.57, 54: 1150.58, 55: 2079.23, 56: 1079.47, 57: 1054.83, 58: 2535.31, 59: 1598.10, 60: 803.30, 61: 1523.39, 62: 1992.67, 63: 466.84, 64: 2703.09, 65: 2784.18, 66: 1125.34, 67: 319.51, 68: 466.08, 69: 3009.65, 70: 1492.62, 71: 2408.26, 72: 179.82, 73: 2459.66, 74: 2187.88, 75: 947.11, 76: 1422.45, 77: 905.88, 78: 2705.59, 79: 1881.55, 80: 601.05, 81: 514.58, 82: 1132.64, 83: 2577.02, 84: 420.95, 85: 1421.04, 86: 921.65, 87: 2893.43, 88: 1628.88, 89: 2345.63, 90: 1826.73, 91: 1849.61, 92: 1345.90, 93: 3043.55, 94: 753.45, 95: 839.77, 96: 2247.50, 97: 1746.15, 98: 3124.08, 99: 1426.97},
50: {0: 1128.69, 1: 1146.96, 2: 1137.95, 3: 2195.77, 4: 1498.04, 5: 1513.78, 6: 382.78, 7: 1365.06, 8: 341.70, 9: 1749.77, 10: 1391.60, 11: 570.74, 12: 1674.84, 13: 1250.96, 14: 1451.16, 15: 2380.74, 16: 1462.76, 17: 2230.73, 18: 1939.26, 19: 501.88, 20: 1637.74, 21: 2450.78, 22: 856.98, 23: 2220.68, 24: 254.23, 25: 2579.09, 26: 671.25, 27: 721.67, 28: 955.42, 29: 1043.20, 30: 1661.91, 31: 1190.12, 32: 1740.64, 33: 694.72, 34: 791.25, 35: 2076.90, 36: 1510.85, 37: 2208.79, 38: 1060.69, 39: 948.90, 40: 1575.86, 41: 1469.25, 42: 1161.82, 43: 960.12, 44: 1077.00, 45: 1004.12, 46: 1104.60, 47: 1398.53, 48: 1560.74, 49: 891.22, 51: 1396.42, 52: 2136.21, 53: 1048.65, 54: 638.04, 55: 1781.87, 56: 330.05, 57: 434.77, 58: 1724.54, 59: 711.18, 60: 186.27, 61: 655.74, 62: 1373.26, 63: 887.35, 64: 2342.38, 65: 2393.96, 66: 751.83, 67: 641.84, 68: 591.05, 69: 2515.04, 70: 1510.68, 71: 1653.32, 72: 731.97, 73: 1658.82, 74: 1736.78, 75: 1777.49, 76: 531.52, 77: 1369.76, 78: 2108.33, 79: 1695.08, 80: 305.31, 81: 1397.84, 82: 638.38, 83: 1881.77, 84: 697.83, 85: 657.14, 86: 146.37, 87: 2337.47, 88: 1486.34, 89: 1747.16, 90: 976.46, 91: 1380.06, 92: 716.45, 93: 2467.80, 94: 1624.98, 95: 1309.07, 96: 1880.46, 97: 886.14, 98: 2368.50, 99: 1515.14},
51: {0: 2474.05, 1: 1302.29, 2: 823.31, 3: 3447.68, 4: 259.24, 5: 2870.31, 6: 1263.40, 7: 2598.66, 8: 1246.65, 9: 3141.82, 10: 2757.15, 11: 1366.93, 12: 755.01, 13: 633.51, 14: 2800.17, 15: 3731.50, 16: 2812.64, 17: 3615.92, 18: 3252.62, 19: 1483.34, 20: 3027.41, 21: 3801.57, 22: 2193.43, 23: 3614.33, 24: 1280.21, 25: 3784.33, 26: 1482.09, 27: 2059.37, 28: 742.65, 29: 368.64, 30: 2737.27, 31: 2559.87, 32: 733.38, 33: 978.46, 34: 1653.81, 35: 3472.30, 36: 325.68, 37: 3604.61, 38: 388.62, 39: 1480.98, 40: 826.20, 41: 2611.40, 42: 994.13, 43: 1089.09, 44: 2410.17, 45: 868.38, 46: 2500.91, 47: 395.51, 48: 2916.18, 49: 945.42, 50: 1396.42, 52: 3479.38, 53: 1550.22, 54: 1146.68, 55: 2974.03, 56: 1346.18, 57: 1757.96, 58: 3104.39, 59: 1928.97, 60: 1435.46, 61: 1798.02, 62: 2742.04, 63: 1410.11, 64: 3587.85, 65: 3659.58, 66: 1951.32, 67: 872.89, 68: 1321.34, 69: 3843.08, 70: 752.16, 71: 3049.07, 72: 1056.08, 73: 3044.06, 74: 3030.19, 75: 821.93, 76: 1814.77, 77: 40.00, 78: 3478.25, 79: 2799.70, 80: 1255.19, 81: 894.56, 82: 1123.64, 83: 3275.60, 84: 741.97, 85: 1550.06, 86: 1318.94, 87: 3693.04, 88: 2550.13, 89: 3113.67, 90: 2344.87, 91: 2675.81, 92: 2068.79, 93: 3832.53, 94: 905.65, 95: 106.23, 96: 3123.47, 97: 2248.08, 98: 3762.06, 99: 642.22},
52: {0: 1010.45, 1: 2577.25, 2: 3246.18, 3: 497.64, 4: 3515.60, 5: 623.91, 6: 2435.30, 7: 958.18, 8: 2417.45, 9: 617.29, 10: 1334.04, 11: 2508.79, 12: 3501.01, 13: 3381.94, 14: 1418.82, 15: 255.69, 16: 1411.67, 17: 433.13, 18: 279.87, 19: 2358.86, 20: 1034.57, 21: 324.58, 22: 1683.08, 23: 603.68, 24: 2201.33, 25: 825.11, 26: 2509.82, 27: 1425.60, 28: 3082.37, 29: 3154.24, 30: 1165.37, 31: 1383.37, 32: 3593.20, 33: 2798.73, 34: 2477.00, 35: 849.47, 36: 3506.36, 37: 692.41, 38: 3103.00, 39: 2244.66, 40: 3694.86, 41: 1092.63, 42: 3231.26, 43: 2606.10, 44: 1600.02, 45: 3107.42, 46: 1152.88, 47: 3532.57, 48: 576.84, 49: 2669.18, 50: 2136.21, 51: 3479.38, 53: 2251.34, 54: 2689.79, 55: 801.98, 56: 2345.04, 57: 1728.06, 58: 1143.08, 59: 2017.56, 60: 2053.08, 61: 2152.58, 62: 773.08, 63: 2272.99, 64: 562.14, 65: 502.47, 66: 1547.17, 67: 2615.21, 68: 2208.59, 69: 387.62, 70: 3635.29, 71: 885.87, 72: 2501.29, 73: 1091.46, 74: 506.35, 75: 3590.55, 76: 1969.17, 77: 3446.79, 78: 223.01, 79: 1081.12, 80: 2224.30, 81: 3115.56, 82: 2700.12, 83: 606.39, 84: 2737.66, 85: 2437.80, 86: 2257.57, 87: 229.75, 88: 1259.48, 89: 417.08, 90: 1497.42, 91: 819.68, 92: 1422.95, 93: 389.31, 94: 3356.37, 95: 3380.48, 96: 589.48, 97: 1576.26, 98: 1000.95, 99: 3648.39},
53: {0: 1394.18, 1: 331.30, 2: 1827.94, 3: 2071.58, 4: 1468.37, 5: 1745.03, 6: 1362.06, 7: 1293.21, 8: 1311.88, 9: 2141.98, 10: 2118.40, 11: 1576.91, 12: 1296.45, 13: 1819.15, 14: 2212.26, 15: 2503.87, 16: 2220.57, 17: 2521.97, 18: 1982.40, 19: 1542.05, 20: 2231.70, 21: 2569.52, 22: 1729.37, 23: 2586.75, 24: 812.86, 25: 2343.63, 26: 1697.46, 27: 1099.14, 28: 1614.31, 29: 1375.91, 30: 1265.17, 31: 1933.05, 32: 1395.16, 33: 1503.60, 34: 1834.79, 35: 2565.81, 36: 1432.87, 37: 2613.76, 38: 1179.91, 39: 103.59, 40: 2155.87, 41: 1204.76, 42: 1932.41, 43: 463.35, 44: 1918.18, 45: 1735.64, 46: 1669.78, 47: 1798.75, 48: 1781.00, 49: 606.57, 50: 1048.65, 51: 1550.22, 52: 2251.34, 54: 1546.82, 55: 1571.64, 56: 1348.41, 57: 945.41, 58: 2362.45, 59: 1713.66, 60: 877.49, 61: 1690.58, 62: 1676.93, 63: 180.69, 64: 2195.85, 65: 2287.30, 66: 816.77, 67: 808.97, 68: 467.13, 69: 2557.44, 70: 2074.39, 71: 2177.24, 72: 545.22, 73: 2277.78, 74: 1748.61, 75: 1374.40, 76: 1522.67, 77: 1510.47, 78: 2327.54, 79: 1341.46, 80: 770.17, 81: 897.04, 82: 1535.01, 83: 2280.45, 84: 956.73, 85: 1696.79, 86: 1152.95, 87: 2480.85, 88: 1090.00, 89: 1987.42, 90: 1759.97, 91: 1449.23, 92: 1140.04, 93: 2638.35, 94: 1124.77, 95: 1445.05, 96: 1761.85, 97: 1703.84, 98: 2862.28, 99: 2018.09},
54: {0: 1707.55, 1: 1529.08, 2: 567.12, 3: 2801.62, 4: 1342.83, 5: 2068.13, 6: 264.15, 7: 1988.89, 8: 297.56, 9: 2226.89, 10: 1706.97, 11: 229.92, 12: 1693.55, 13: 743.35, 14: 1728.45, 15: 2922.55, 16: 1741.41, 17: 2719.96, 18: 2519.55, 19: 372.93, 20: 2018.51, 21: 2991.47, 22: 1141.47, 23: 2678.63, 24: 771.11, 25: 3195.29, 26: 335.41, 27: 1325.93, 28: 456.18, 29: 790.87, 30: 2299.88, 31: 1524.69, 32: 1726.82, 33: 168.63, 34: 508.72, 35: 2482.46, 36: 1383.28, 37: 2649.24, 38: 962.68, 39: 1443.40, 40: 1017.22, 41: 2105.20, 42: 543.39, 43: 1285.03, 44: 1340.24, 45: 428.67, 46: 1572.65, 47: 977.47, 48: 2114.93, 49: 1150.58, 50: 638.04, 51: 1146.68, 52: 2689.79, 53: 1546.82, 55: 2408.61, 56: 347.76, 57: 1063.01, 58: 2067.17, 59: 826.74, 60: 807.96, 61: 681.45, 62: 1916.72, 63: 1367.42, 64: 2948.79, 65: 2992.09, 66: 1389.61, 67: 831.27, 68: 1088.54, 69: 3075.74, 70: 967.35, 71: 2073.96, 72: 1067.16, 73: 2021.14, 74: 2332.22, 75: 1791.40, 76: 767.01, 77: 1136.60, 78: 2630.39, 79: 2332.12, 80: 799.72, 81: 1552.19, 82: 23.35, 83: 2346.10, 84: 755.91, 85: 405.42, 86: 491.71, 87: 2874.60, 88: 2124.24, 89: 2282.46, 90: 1320.32, 91: 1982.33, 92: 1310.24, 93: 2991.18, 94: 1725.19, 95: 1097.87, 96: 2493.48, 97: 1221.16, 98: 2753.43, 99: 1007.04},
55: {0: 795.34, 1: 1902.79, 2: 2916.62, 3: 500.37, 4: 2961.86, 5: 697.69, 6: 2144.67, 7: 420.64, 8: 2112.60, 9: 1078.64, 10: 1592.14, 11: 2279.37, 12: 2863.71, 13: 3008.84, 14: 1702.58, 15: 1020.65, 16: 1701.37, 17: 1198.41, 18: 530.08, 19: 2148.63, 20: 1432.22, 21: 1075.60, 22: 1676.77, 23: 1337.22, 24: 1757.08, 25: 812.50, 26: 2323.76, 27: 1091.15, 28: 2724.46, 29: 2692.06, 30: 366.96, 31: 1534.09, 32: 2960.98, 33: 2476.49, 34: 2349.00, 35: 1485.16, 36: 2940.58, 37: 1406.79, 38: 2585.82, 39: 1589.32, 40: 3344.79, 41: 370.19, 42: 2942.77, 43: 1984.20, 44: 1698.84, 45: 2784.83, 46: 1184.74, 47: 3103.99, 48: 687.16, 49: 2079.23, 50: 1781.87, 51: 2974.03, 52: 801.98, 53: 1571.64, 54: 2408.61, 56: 2066.92, 57: 1348.00, 58: 1579.26, 59: 1942.17, 60: 1643.52, 61: 2040.91, 62: 800.56, 63: 1635.35, 64: 626.01, 65: 715.73, 66: 1051.12, 67: 2104.29, 68: 1653.47, 69: 1018.43, 70: 3274.72, 71: 1293.54, 72: 1931.89, 73: 1498.19, 74: 370.00, 75: 2944.68, 76: 1823.68, 77: 2937.57, 78: 969.03, 79: 280.80, 80: 1763.52, 81: 2466.17, 82: 2412.39, 83: 1167.23, 84: 2246.39, 85: 2267.73, 86: 1924.32, 87: 1017.01, 88: 494.50, 89: 785.86, 90: 1537.62, 91: 496.59, 92: 1115.63, 93: 1176.32, 94: 2696.40, 95: 2869.46, 96: 216.11, 97: 1575.54, 98: 1716.91, 99: 3262.84},
56: {0: 1359.82, 1: 1400.39, 2: 902.66, 3: 2454.44, 4: 1499.52, 5: 1722.48, 6: 93.05, 7: 1646.54, 8: 99.76, 9: 1896.26, 10: 1421.53, 11: 240.75, 12: 1767.79, 13: 1056.38, 14: 1457.50, 15: 2579.87, 16: 1470.14, 17: 2387.99, 18: 2172.08, 19: 203.75, 20: 1714.30, 21: 2649.06, 22: 853.15, 23: 2354.74, 24: 535.73, 25: 2849.48, 26: 349.59, 27: 980.40, 28: 756.24, 29: 977.58, 30: 1973.10, 31: 1229.48, 32: 1818.68, 33: 459.62, 34: 493.08, 35: 2173.41, 36: 1526.82, 37: 2330.25, 38: 1075.72, 39: 1245.97, 40: 1353.01, 41: 1772.18, 42: 891.05, 43: 1182.81, 44: 1066.42, 45: 763.49, 46: 1239.98, 47: 1256.36, 48: 1769.37, 49: 1079.47, 50: 330.05, 51: 1346.18, 52: 2345.04, 53: 1348.41, 54: 347.76, 55: 2066.92, 57: 727.99, 58: 1776.33, 59: 588.26, 60: 515.40, 61: 473.08, 62: 1572.10, 63: 1177.68, 64: 2601.61, 65: 2644.39, 66: 1064.32, 67: 777.01, 68: 881.72, 69: 2730.37, 70: 1297.58, 71: 1757.82, 72: 950.51, 73: 1723.07, 74: 1984.54, 75: 1869.85, 76: 471.27, 77: 1327.42, 78: 2290.91, 79: 2001.03, 80: 578.73, 81: 1551.08, 82: 356.04, 83: 2019.24, 84: 766.85, 85: 352.37, 86: 197.52, 87: 2532.67, 88: 1801.84, 89: 1939.87, 90: 1017.64, 91: 1635.24, 92: 963.42, 93: 2652.04, 94: 1756.77, 95: 1276.24, 96: 2147.43, 97: 918.58, 98: 2452.44, 99: 1324.36},
57: {0: 718.23, 1: 1160.70, 2: 1572.47, 3: 1763.01, 4: 1818.49, 5: 1113.11, 6: 800.24, 7: 930.41, 8: 765.87, 9: 1401.86, 10: 1199.97, 11: 955.12, 12: 1900.23, 13: 1679.32, 14: 1285.22, 15: 1977.58, 16: 1294.60, 17: 1863.09, 18: 1517.58, 19: 844.08, 20: 1372.41, 21: 2047.76, 22: 785.49, 23: 1875.11, 24: 478.28, 25: 2144.39, 26: 1024.64, 27: 302.60, 28: 1386.96, 29: 1426.37, 30: 1246.47, 31: 1005.45, 32: 1979.99, 33: 1129.32, 34: 1096.69, 35: 1773.32, 36: 1818.78, 37: 1876.01, 38: 1391.23, 39: 867.78, 40: 2008.19, 41: 1044.26, 42: 1594.77, 43: 1057.67, 44: 973.33, 45: 1438.89, 46: 803.36, 47: 1808.67, 48: 1159.29, 49: 1054.83, 50: 434.77, 51: 1757.96, 52: 1728.06, 53: 945.41, 54: 1063.01, 55: 1348.00, 56: 727.99, 58: 1484.95, 59: 826.07, 60: 325.04, 61: 851.17, 62: 984.56, 63: 837.93, 64: 1909.33, 65: 1963.25, 66: 344.73, 67: 913.76, 68: 610.33, 69: 2100.56, 70: 1941.51, 71: 1354.51, 72: 875.03, 73: 1407.28, 74: 1308.77, 75: 1999.56, 76: 643.12, 77: 1726.95, 78: 1720.31, 79: 1273.08, 80: 508.33, 81: 1562.69, 82: 1065.77, 83: 1539.68, 84: 1020.53, 85: 985.29, 86: 576.32, 87: 1937.45, 88: 1078.72, 89: 1355.71, 90: 819.56, 91: 950.64, 92: 311.26, 93: 2075.01, 94: 1805.74, 95: 1661.95, 96: 1446.36, 97: 758.98, 98: 2072.06, 99: 1940.76},
58: {0: 1030.90, 1: 2626.07, 2: 2625.84, 3: 1572.78, 4: 3221.86, 5: 886.00, 6: 1866.83, 7: 1379.08, 8: 1872.34, 9: 542.72, 10: 361.27, 11: 1843.95, 12: 3371.64, 13: 2810.48, 14: 370.47, 15: 1247.62, 16: 358.24, 17: 879.93, 18: 1205.72, 19: 1694.55, 20: 150.86, 21: 1295.64, 22: 926.88, 23: 748.95, 24: 1909.41, 25: 1956.18, 26: 1788.12, 27: 1265.10, 28: 2518.16, 29: 2739.56, 30: 1822.14, 31: 546.88, 32: 3445.90, 33: 2217.92, 34: 1687.49, 35: 461.85, 36: 3235.39, 37: 679.23, 38: 2784.52, 39: 2306.77, 40: 3066.73, 41: 1624.76, 42: 2557.05, 43: 2542.28, 44: 731.18, 45: 2491.04, 46: 693.90, 47: 3030.35, 48: 892.29, 49: 2535.31, 50: 1724.54, 51: 3104.39, 52: 1143.08, 53: 2362.45, 54: 2067.17, 55: 1579.26, 56: 1776.33, 57: 1484.95, 59: 1249.64, 60: 1745.82, 61: 1400.46, 62: 825.26, 63: 2295.03, 64: 1678.25, 65: 1638.97, 66: 1548.55, 67: 2350.56, 68: 2094.64, 69: 1460.21, 70: 3025.95, 71: 287.56, 72: 2356.20, 73: 89.00, 74: 1227.06, 75: 3472.69, 76: 1307.85, 77: 3081.14, 78: 948.13, 79: 1769.59, 80: 1952.87, 81: 3046.45, 82: 2084.98, 83: 539.71, 84: 2421.83, 85: 1707.07, 86: 1786.06, 87: 1189.55, 88: 1794.84, 89: 834.23, 90: 760.43, 91: 1178.05, 92: 1226.86, 93: 1221.19, 94: 3288.36, 95: 3023.78, 96: 1458.46, 97: 858.59, 98: 692.94, 99: 3073.52},
59: {0: 1152.29, 1: 1851.16, 2: 1377.63, 3: 2235.15, 4: 2087.73, 5: 1428.74, 6: 666.11, 7: 1539.02, 8: 687.61, 9: 1481.27, 10: 888.38, 11: 598.82, 12: 2342.81, 13: 1567.95, 14: 902.77, 15: 2226.07, 16: 915.76, 17: 1970.06, 18: 1902.23, 19: 455.93, 20: 1215.63, 21: 2291.72, 22: 345.32, 23: 1904.53, 24: 963.76, 25: 2649.73, 26: 539.33, 27: 911.41, 28: 1282.53, 29: 1560.67, 30: 1955.69, 31: 719.24, 32: 2398.35, 33: 986.00, 34: 463.60, 35: 1681.51, 36: 2114.94, 37: 1864.17, 38: 1663.08, 39: 1620.90, 40: 1817.09, 41: 1730.47, 42: 1308.22, 43: 1671.28, 44: 518.56, 45: 1244.33, 46: 865.08, 47: 1802.32, 48: 1471.94, 49: 1598.10, 50: 711.18, 51: 1928.97, 52: 2017.56, 53: 1713.66, 54: 826.74, 55: 1942.17, 56: 588.26, 57: 826.07, 58: 1249.64, 60: 847.30, 61: 151.05, 62: 1271.65, 63: 1569.59, 64: 2378.66, 65: 2397.63, 66: 1140.81, 67: 1324.42, 68: 1282.66, 69: 2403.29, 70: 1776.98, 71: 1290.85, 72: 1442.80, 73: 1210.66, 74: 1759.71, 75: 2445.43, 76: 191.02, 77: 1911.84, 78: 1917.21, 79: 1958.05, 80: 1015.20, 81: 2096.74, 82: 846.22, 83: 1585.20, 84: 1340.49, 85: 458.63, 86: 685.72, 87: 2173.13, 88: 1816.50, 89: 1600.49, 90: 536.86, 91: 1454.75, 92: 871.27, 93: 2269.90, 94: 2315.42, 95: 1862.38, 96: 1963.97, 97: 446.23, 98: 1941.00, 99: 1827.90},
60: {0: 1043.22, 1: 1006.11, 2: 1275.47, 3: 2076.11, 4: 1506.11, 5: 1437.61, 6: 561.81, 7: 1233.11, 8: 517.35, 9: 1712.78, 10: 1431.62, 11: 756.13, 12: 1626.49, 13: 1367.23, 14: 1502.70, 15: 2302.57, 16: 1513.50, 17: 2181.48, 18: 1840.56, 19: 686.72, 20: 1645.99, 21: 2372.75, 22: 934.14, 23: 2186.36, 24: 164.71, 25: 2448.95, 26: 857.42, 27: 627.62, 28: 1080.95, 29: 1101.36, 30: 1500.71, 31: 1230.39, 32: 1700.08, 33: 844.00, 34: 973.93, 35: 2067.20, 36: 1510.43, 37: 2182.47, 38: 1074.23, 39: 780.44, 40: 1701.43, 41: 1316.86, 42: 1315.30, 43: 845.06, 44: 1147.75, 45: 1146.57, 46: 1089.54, 47: 1485.91, 48: 1483.91, 49: 803.30, 50: 186.27, 51: 1435.46, 52: 2053.08, 53: 877.49, 54: 807.96, 55: 1643.52, 56: 515.40, 57: 325.04, 58: 1745.82, 59: 847.30, 61: 813.62, 62: 1306.78, 63: 724.51, 64: 2221.58, 65: 2279.46, 66: 597.01, 67: 609.20, 68: 435.39, 69: 2424.97, 70: 1632.07, 71: 1644.42, 72: 630.05, 73: 1673.96, 74: 1628.65, 75: 1727.95, 76: 658.48, 77: 1405.16, 78: 2043.41, 79: 1538.73, 80: 207.17, 81: 1317.77, 82: 805.73, 83: 1848.85, 84: 702.67, 85: 841.61, 86: 324.14, 87: 2262.26, 88: 1321.44, 89: 1679.10, 90: 1023.89, 91: 1270.18, 92: 634.00, 93: 2399.08, 94: 1554.11, 95: 1340.84, 96: 1756.20, 97: 942.89, 98: 2363.59, 99: 1625.25},
61: {0: 1259.66, 1: 1802.54, 2: 1227.89, 3: 2353.39, 4: 1965.28, 5: 1555.53, 6: 541.61, 7: 1630.72, 8: 569.53, 9: 1626.02, 10: 1039.23, 11: 452.09, 12: 2240.20, 13: 1420.27, 14: 1051.70, 15: 2365.29, 16: 1064.72, 17: 2116.21, 18: 2027.76, 19: 315.84, 20: 1366.43, 21: 2431.54, 22: 493.04, 23: 2053.38, 24: 909.48, 25: 2765.92, 26: 388.29, 27: 981.90, 28: 1137.62, 29: 1430.83, 30: 2031.79, 31: 869.87, 32: 2291.74, 33: 843.53, 34: 324.61, 35: 1832.36, 36: 1995.29, 37: 2014.02, 38: 1546.56, 39: 1594.05, 40: 1666.35, 41: 1809.97, 42: 1157.17, 43: 1608.43, 44: 669.30, 45: 1095.35, 46: 999.99, 47: 1658.65, 48: 1599.67, 49: 1523.39, 50: 655.74, 51: 1798.02, 52: 2152.58, 53: 1690.58, 54: 681.45, 55: 2040.91, 56: 473.08, 57: 851.17, 58: 1400.46, 59: 151.05, 60: 813.62, 62: 1398.28, 63: 1537.16, 64: 2498.08, 65: 2521.18, 66: 1183.32, 67: 1236.01, 68: 1243.63, 69: 2539.28, 70: 1626.78, 71: 1440.04, 72: 1376.89, 73: 1361.71, 74: 1876.57, 75: 2342.41, 76: 221.42, 77: 1782.40, 78: 2058.25, 79: 2039.77, 80: 960.08, 81: 2011.66, 82: 701.62, 83: 1732.20, 84: 1238.13, 85: 307.65, 86: 601.82, 87: 2312.98, 88: 1884.22, 89: 1735.66, 90: 683.74, 91: 1560.58, 92: 945.84, 93: 2412.71, 94: 2223.69, 95: 1735.03, 96: 2074.35, 97: 590.41, 98: 2092.00, 99: 1679.02},
62: {0: 288.09, 1: 1979.20, 2: 2473.70, 3: 973.90, 4: 2799.74, 5: 157.26, 6: 1662.57, 7: 554.05, 8: 1645.48, 9: 465.47, 10: 791.77, 11: 1737.55, 12: 2840.72, 13: 2612.66, 14: 902.70, 15: 1010.03, 16: 901.89, 17: 883.24, 18: 630.60, 19: 1588.68, 20: 674.44, 21: 1079.75, 22: 955.59, 23: 917.99, 24: 1462.85, 25: 1390.95, 26: 1743.70, 27: 685.93, 28: 2312.42, 29: 2405.15, 30: 1000.98, 31: 743.27, 32: 2927.18, 33: 2026.69, 34: 1722.40, 35: 898.35, 36: 2797.09, 37: 938.09, 38: 2375.26, 39: 1643.83, 40: 2922.85, 41: 799.53, 42: 2458.35, 43: 1956.34, 44: 928.07, 45: 2334.82, 46: 420.88, 47: 2771.79, 48: 201.84, 49: 1992.67, 50: 1373.26, 51: 2742.04, 52: 773.08, 53: 1676.93, 54: 1916.72, 55: 800.56, 56: 1572.10, 57: 984.56, 58: 825.26, 59: 1271.65, 60: 1306.78, 61: 1398.28, 63: 1652.95, 64: 1113.69, 65: 1126.68, 66: 881.15, 67: 1893.93, 68: 1526.75, 69: 1159.35, 70: 2864.13, 71: 562.23, 72: 1816.46, 73: 737.83, 74: 512.64, 75: 2935.95, 76: 1204.76, 77: 2711.32, 78: 737.01, 79: 954.08, 80: 1491.66, 81: 2474.04, 82: 1927.05, 83: 603.52, 84: 2004.97, 85: 1673.80, 86: 1489.50, 87: 965.11, 88: 970.22, 89: 373.98, 90: 786.70, 91: 353.41, 92: 673.37, 93: 1094.93, 94: 2719.14, 95: 2646.47, 96: 741.97, 97: 847.93, 98: 1189.73, 99: 2879.80},
63: {0: 1365.66, 1: 331.72, 2: 1650.53, 3: 2131.24, 4: 1350.00, 5: 1735.62, 6: 1187.47, 7: 1320.96, 8: 1137.23, 9: 2114.01, 10: 2031.86, 11: 1403.00, 12: 1234.19, 13: 1647.54, 14: 2120.79, 15: 2527.81, 16: 2129.80, 17: 2517.29, 18: 2011.51, 19: 1374.05, 20: 2170.25, 21: 2595.04, 22: 1610.98, 23: 2569.93, 24: 644.15, 25: 2425.98, 26: 1525.66, 27: 1031.72, 28: 1436.67, 29: 1213.41, 30: 1353.63, 31: 1840.75, 32: 1329.56, 33: 1322.91, 34: 1667.07, 35: 2527.26, 36: 1320.60, 37: 2590.49, 38: 1031.14, 39: 80.45, 40: 1986.25, 41: 1265.19, 42: 1752.90, 43: 349.76, 44: 1808.28, 45: 1556.46, 46: 1601.37, 47: 1638.92, 48: 1774.52, 49: 466.84, 50: 887.35, 51: 1410.11, 52: 2272.99, 53: 180.69, 54: 1367.42, 55: 1635.35, 56: 1177.68, 57: 837.93, 58: 2295.03, 59: 1569.59, 60: 724.51, 61: 1537.16, 62: 1652.95, 64: 2261.30, 65: 2347.32, 66: 773.61, 67: 634.44, 68: 297.38, 69: 2595.79, 70: 1905.25, 71: 2127.14, 72: 375.71, 73: 2212.60, 74: 1777.67, 75: 1320.24, 76: 1379.34, 77: 1370.83, 78: 2332.51, 79: 1424.40, 80: 599.10, 81: 843.13, 82: 1355.34, 83: 2253.72, 84: 784.55, 85: 1528.03, 86: 984.00, 87: 2501.03, 88: 1171.11, 89: 1982.53, 90: 1657.46, 91: 1458.09, 92: 1068.39, 93: 2655.86, 94: 1083.41, 95: 1304.08, 96: 1814.23, 97: 1594.40, 98: 2825.98, 99: 1852.72},
64: {0: 1250.23, 1: 2526.66, 2: 3479.70, 3: 147.18, 4: 3583.51, 5: 960.03, 6: 2685.58, 7: 993.62, 8: 2658.80, 9: 1136.89, 10: 1819.14, 11: 2796.12, 12: 3489.32, 13: 3587.56, 14: 1915.41, 15: 630.89, 16: 1910.08, 17: 977.88, 18: 497.11, 19: 2654.98, 20: 1555.77, 21: 652.33, 22: 2069.13, 23: 1156.22, 24: 2347.93, 25: 283.34, 26: 2821.49, 27: 1625.06, 28: 3296.29, 29: 3295.12, 30: 951.13, 31: 1828.60, 32: 3586.74, 33: 3033.44, 34: 2819.24, 35: 1411.57, 36: 3563.59, 37: 1248.34, 38: 3200.66, 39: 2215.19, 40: 3917.51, 41: 996.11, 42: 3490.50, 43: 2609.99, 44: 2030.68, 45: 3344.44, 46: 1533.94, 47: 3700.00, 48: 921.64, 49: 2703.09, 50: 2342.38, 51: 3587.85, 52: 562.14, 53: 2195.85, 54: 2948.79, 55: 626.01, 56: 2601.61, 57: 1909.33, 58: 1678.25, 59: 2378.66, 60: 2221.58, 61: 2498.08, 62: 1113.69, 63: 2261.30, 65: 114.77, 66: 1645.05, 67: 2715.63, 68: 2270.70, 69: 512.00, 70: 3850.65, 71: 1404.09, 72: 2552.87, 73: 1617.22, 74: 623.03, 75: 3569.72, 76: 2293.36, 77: 3552.04, 78: 784.66, 79: 866.85, 80: 2359.34, 81: 3091.41, 82: 2955.26, 83: 1154.48, 84: 2854.15, 85: 2757.20, 86: 2479.02, 87: 662.15, 88: 1109.76, 89: 865.92, 90: 1898.89, 91: 966.48, 92: 1638.64, 93: 783.78, 94: 3320.43, 95: 3484.07, 96: 466.62, 97: 1961.57, 98: 1550.38, 99: 3846.81},
65: {0: 1286.44, 1: 2618.49, 2: 3529.20, 3: 216.11, 4: 3661.45, 5: 970.27, 6: 2729.89, 7: 1061.08, 8: 2704.79, 9: 1102.39, 10: 1800.88, 11: 2833.13, 12: 3578.14, 13: 3642.56, 14: 1893.37, 15: 534.20, 16: 1887.35, 17: 899.07, 18: 497.12, 19: 2689.69, 20: 1522.78, 21: 549.18, 22: 2080.69, 23: 1079.50, 24: 2410.17, 25: 323.20, 26: 2853.28, 27: 1673.49, 28: 3349.19, 29: 3361.02, 30: 1052.91, 31: 1822.98, 32: 3675.02, 33: 3081.77, 34: 2844.05, 35: 1347.41, 36: 3643.08, 37: 1173.39, 38: 3273.38, 39: 2303.39, 40: 3969.81, 41: 1083.72, 42: 3534.91, 43: 2695.00, 44: 2030.15, 45: 3393.00, 46: 1543.32, 47: 3762.08, 48: 928.87, 49: 2784.18, 50: 2393.96, 51: 3659.58, 52: 502.47, 53: 2287.30, 54: 2992.09, 55: 715.73, 56: 2644.39, 57: 1963.25, 58: 1638.97, 59: 2397.63, 60: 2279.46, 61: 2521.18, 62: 1126.68, 63: 2347.32, 64: 114.77, 66: 1711.34, 67: 2786.74, 68: 2346.23, 69: 400.22, 70: 3904.24, 71: 1371.75, 72: 2630.96, 73: 1582.39, 74: 659.88, 75: 3659.81, 76: 2320.61, 77: 3624.21, 78: 720.15, 79: 967.50, 80: 2423.58, 81: 3181.17, 82: 2999.35, 83: 1106.68, 84: 2923.07, 85: 2787.09, 86: 2528.25, 87: 570.64, 88: 1205.90, 89: 847.85, 90: 1905.66, 91: 1013.97, 92: 1684.14, 93: 682.11, 94: 3412.04, 95: 3556.39, 96: 537.43, 97: 1972.79, 98: 1469.63, 99: 3903.56},
66: {0: 593.19, 1: 1102.74, 2: 1872.41, 3: 1502.07, 4: 1971.11, 5: 973.54, 6: 1130.68, 7: 651.46, 8: 1092.44, 9: 1340.55, 10: 1324.61, 11: 1296.09, 12: 1967.42, 13: 1958.18, 14: 1425.29, 15: 1802.52, 16: 1432.33, 17: 1754.43, 18: 1306.08, 19: 1188.45, 20: 1415.73, 21: 1871.74, 22: 1029.89, 23: 1799.09, 24: 706.21, 25: 1861.10, 26: 1369.00, 27: 300.85, 28: 1676.25, 29: 1650.23, 30: 910.38, 31: 1151.84, 32: 2056.46, 33: 1439.27, 34: 1440.09, 35: 1755.11, 36: 1960.02, 37: 1817.54, 38: 1567.74, 39: 770.73, 40: 2295.34, 41: 720.06, 42: 1909.80, 43: 1077.43, 44: 1180.71, 45: 1743.45, 46: 859.27, 47: 2056.21, 48: 1015.02, 49: 1125.34, 50: 751.83, 51: 1951.32, 52: 1547.17, 53: 816.77, 54: 1389.61, 55: 1051.12, 56: 1064.32, 57: 344.73, 58: 1548.55, 59: 1140.81, 60: 597.01, 61: 1183.32, 62: 881.15, 63: 773.61, 64: 1645.05, 65: 1711.34, 67: 1079.12, 68: 661.88, 69: 1898.04, 70: 2224.46, 71: 1361.03, 72: 954.75, 73: 1463.01, 74: 1080.08, 75: 2060.78, 76: 967.86, 77: 1916.76, 78: 1580.77, 79: 943.76, 80: 714.79, 81: 1594.66, 82: 1390.20, 83: 1480.35, 84: 1212.28, 85: 1329.98, 86: 897.98, 87: 1769.60, 88: 737.53, 89: 1222.65, 90: 1007.25, 91: 730.25, 92: 347.25, 93: 1918.60, 94: 1839.42, 95: 1849.31, 96: 1178.52, 97: 974.31, 98: 2053.31, 99: 2211.73},
67: {0: 1617.69, 1: 710.54, 2: 1020.78, 3: 2575.06, 4: 905.81, 5: 2014.44, 6: 740.95, 7: 1725.78, 8: 696.58, 9: 2315.19, 10: 2027.12, 11: 943.40, 12: 1033.01, 13: 1013.88, 14: 2090.68, 15: 2868.85, 16: 2102.09, 17: 2775.40, 18: 2382.97, 19: 976.57, 20: 2253.98, 21: 2938.72, 22: 1498.81, 23: 2788.63, 24: 444.53, 25: 2915.95, 26: 1079.38, 27: 1208.02, 28: 808.01, 29: 601.84, 30: 1882.71, 31: 1825.26, 32: 1100.04, 33: 741.98, 34: 1249.02, 35: 2676.13, 36: 905.04, 37: 2787.85, 38: 488.86, 39: 714.66, 40: 1354.14, 41: 1744.81, 42: 1133.75, 43: 458.31, 44: 1718.82, 45: 935.54, 46: 1698.64, 47: 1027.80, 48: 2059.46, 49: 319.51, 50: 641.84, 51: 872.89, 52: 2615.21, 53: 808.97, 54: 831.27, 55: 2104.29, 56: 777.01, 57: 913.76, 58: 2350.56, 59: 1324.42, 60: 609.20, 61: 1236.01, 62: 1893.93, 63: 634.44, 64: 2715.63, 65: 2786.74, 66: 1079.12, 68: 460.41, 69: 2974.34, 70: 1273.80, 71: 2253.54, 72: 266.72, 73: 2280.46, 74: 2158.86, 75: 1135.65, 76: 1159.70, 77: 837.86, 78: 2625.51, 79: 1940.58, 80: 406.87, 81: 775.77, 82: 813.55, 83: 2452.52, 84: 153.40, 85: 1110.26, 86: 638.80, 87: 2832.30, 88: 1694.94, 89: 2261.04, 90: 1613.64, 91: 1806.05, 92: 1223.40, 93: 2975.40, 94: 991.06, 95: 770.28, 96: 2250.83, 97: 1525.71, 98: 2972.74, 99: 1227.37},
68: {0: 1240.50, 1: 573.27, 2: 1423.78, 3: 2132.53, 4: 1316.71, 5: 1630.61, 6: 895.32, 7: 1289.13, 8: 845.19, 9: 1973.40, 10: 1807.75, 11: 1109.88, 12: 1314.33, 13: 1450.67, 14: 1889.44, 15: 2464.08, 16: 1899.30, 17: 2407.89, 18: 1963.40, 19: 1077.00, 20: 1979.45, 21: 2533.17, 22: 1350.30, 23: 2441.20, 24: 347.00, 25: 2463.06, 26: 1230.49, 27: 858.52, 28: 1210.75, 29: 1061.70, 30: 1422.65, 31: 1610.85, 32: 1400.45, 33: 1060.75, 34: 1370.00, 35: 2366.25, 36: 1302.00, 37: 2451.74, 38: 932.80, 39: 364.32, 40: 1794.06, 41: 1290.06, 42: 1509.71, 43: 447.68, 44: 1556.17, 45: 1317.65, 46: 1408.46, 47: 1486.46, 48: 1673.31, 49: 466.08, 50: 591.05, 51: 1321.34, 52: 2208.59, 53: 467.13, 54: 1088.54, 55: 1653.47, 56: 881.72, 57: 610.33, 58: 2094.64, 59: 1282.66, 60: 435.39, 61: 1243.63, 62: 1526.75, 63: 297.38, 64: 2270.70, 65: 2346.23, 66: 661.88, 67: 460.41, 69: 2555.10, 70: 1715.73, 71: 1953.20, 72: 292.88, 73: 2016.09, 74: 1734.13, 75: 1410.46, 76: 1093.81, 77: 1284.52, 78: 2240.45, 79: 1481.56, 80: 303.12, 81: 958.43, 82: 1078.23, 83: 2113.21, 84: 611.06, 85: 1231.23, 86: 687.12, 87: 2431.46, 88: 1234.89, 89: 1879.90, 90: 1416.12, 91: 1390.12, 92: 886.51, 93: 2580.34, 94: 1203.17, 95: 1216.38, 96: 1808.88, 97: 1344.86, 98: 2665.92, 99: 1678.04},
69: {0: 1386.56, 1: 2887.44, 2: 3630.58, 3: 554.48, 4: 3869.01, 5: 1007.92, 6: 2820.22, 7: 1275.73, 8: 2801.49, 9: 969.93, 10: 1690.80, 11: 2896.08, 12: 3829.44, 13: 3763.35, 14: 1767.32, 15: 214.85, 16: 1759.04, 17: 612.08, 18: 592.00, 19: 2746.32, 20: 1370.75, 21: 186.13, 22: 2066.96, 23: 788.38, 24: 2569.44, 25: 669.16, 26: 2897.43, 27: 1799.20, 28: 3464.42, 29: 3524.35, 30: 1380.56, 31: 1756.40, 32: 3923.72, 33: 3182.71, 34: 2863.55, 35: 1090.48, 36: 3856.75, 37: 884.17, 38: 3463.12, 39: 2560.74, 40: 4078.59, 41: 1362.22, 42: 3617.67, 43: 2936.40, 44: 1975.54, 45: 3492.01, 46: 1539.32, 47: 3908.42, 48: 961.00, 49: 3009.65, 50: 2515.04, 51: 3843.08, 52: 387.62, 53: 2557.44, 54: 3075.74, 55: 1018.43, 56: 2730.37, 57: 2100.56, 58: 1460.21, 59: 2403.29, 60: 2424.97, 61: 2539.28, 62: 1159.35, 63: 2595.79, 64: 512.00, 65: 400.22, 66: 1898.04, 67: 2974.34, 68: 2555.10, 70: 4018.17, 71: 1229.16, 72: 2846.36, 73: 1421.47, 74: 821.78, 75: 3916.00, 76: 2356.76, 77: 3809.65, 78: 518.42, 79: 1293.35, 80: 2589.97, 81: 3438.25, 82: 3085.79, 83: 924.43, 84: 3101.19, 85: 2825.32, 86: 2638.95, 87: 272.01, 88: 1509.87, 89: 803.70, 90: 1879.83, 91: 1168.44, 92: 1799.46, 93: 313.01, 94: 3675.57, 95: 3742.78, 96: 807.82, 97: 1960.62, 98: 1150.02, 99: 4029.17},
70: {0: 2635.28, 1: 1901.81, 2: 401.00, 3: 3704.46, 4: 1007.26, 5: 3011.41, 6: 1205.23, 7: 2865.05, 8: 1219.06, 9: 3192.03, 10: 2664.75, 11: 1183.26, 12: 1507.06, 13: 267.55, 14: 2677.85, 15: 3873.84, 16: 2690.88, 17: 3684.53, 18: 3448.19, 19: 1335.00, 20: 2983.12, 21: 3943.35, 22: 2104.34, 23: 3645.79, 24: 1521.87, 25: 4080.99, 26: 1242.33, 27: 2232.26, 28: 555.30, 29: 711.14, 30: 3106.05, 31: 2487.61, 32: 1481.00, 33: 838.63, 34: 1370.35, 35: 3448.00, 36: 1075.60, 37: 3616.54, 38: 955.26, 39: 1984.72, 40: 82.68, 41: 2939.08, 42: 489.84, 43: 1653.94, 44: 2295.38, 45: 538.68, 46: 2536.40, 47: 356.92, 48: 3058.47, 49: 1492.62, 50: 1510.68, 51: 752.16, 52: 3635.29, 53: 2074.39, 54: 967.35, 55: 3274.72, 56: 1297.58, 57: 1941.51, 58: 3025.95, 59: 1776.98, 60: 1632.07, 61: 1626.78, 62: 2864.13, 63: 1905.25, 64: 3850.65, 65: 3904.24, 66: 2224.46, 67: 1273.80, 68: 1715.73, 69: 4018.17, 71: 3041.14, 72: 1530.21, 73: 2983.45, 74: 3247.46, 75: 1571.10, 76: 1733.84, 77: 779.10, 78: 3587.86, 79: 3153.35, 80: 1522.28, 81: 1608.08, 82: 952.43, 83: 3312.63, 84: 1121.49, 85: 1323.35, 86: 1380.36, 87: 3827.63, 88: 2920.42, 89: 3234.57, 90: 2286.11, 91: 2890.55, 92: 2225.37, 93: 3949.04, 94: 1652.37, 95: 806.04, 96: 3386.62, 97: 2187.22, 98: 3715.53, 99: 121.43},
71: {0: 801.54, 1: 2458.65, 2: 2640.38, 3: 1293.39, 4: 3145.43, 5: 604.47, 6: 1850.60, 7: 1113.80, 8: 1848.37, 9: 269.65, 10: 467.09, 11: 1861.20, 12: 3254.74, 13: 2811.12, 14: 538.16, 15: 1023.14, 16: 529.92, 17: 697.25, 18: 923.64, 19: 1708.01, 20: 151.71, 21: 1078.69, 22: 947.27, 23: 613.94, 24: 1809.03, 25: 1684.60, 26: 1825.48, 27: 1099.24, 28: 2512.74, 29: 2691.15, 30: 1546.43, 31: 577.29, 32: 3334.12, 33: 2213.22, 34: 1749.71, 35: 423.79, 36: 3153.02, 37: 575.84, 38: 2709.45, 39: 2130.55, 40: 3088.49, 41: 1356.19, 42: 2589.22, 43: 2398.62, 44: 796.52, 45: 2502.51, 46: 554.91, 47: 3011.66, 48: 607.60, 49: 2408.26, 50: 1653.32, 51: 3049.07, 52: 885.87, 53: 2177.24, 54: 2073.96, 55: 1293.54, 56: 1757.82, 57: 1354.51, 58: 287.56, 59: 1290.85, 60: 1644.42, 61: 1440.04, 62: 562.23, 63: 2127.14, 64: 1404.09, 65: 1371.75, 66: 1361.03, 67: 2253.54, 68: 1953.20, 69: 1229.16, 70: 3041.14, 72: 2228.47, 73: 214.70, 74: 939.58, 75: 3354.00, 76: 1307.38, 77: 3022.93, 78: 710.74, 79: 1490.74, 80: 1848.11, 81: 2911.53, 82: 2089.51, 83: 314.24, 84: 2340.16, 85: 1746.16, 86: 1735.61, 87: 965.37, 88: 1529.99, 89: 549.60, 90: 758.60, 91: 909.30, 92: 1067.58, 93: 1024.54, 94: 3155.96, 95: 2962.40, 96: 1170.94, 97: 856.03, 98: 719.22, 99: 3078.00},
72: {0: 1531.16, 1: 462.24, 2: 1287.39, 3: 2416.40, 4: 1030.67, 5: 1922.57, 6: 934.85, 7: 1577.35, 8: 886.28, 9: 2259.18, 10: 2054.66, 11: 1147.97, 12: 1028.41, 13: 1273.98, 14: 2129.61, 15: 2756.81, 16: 2140.14, 17: 2698.60, 18: 2254.93, 19: 1154.25, 20: 2246.86, 21: 2825.86, 22: 1563.50, 23: 2728.73, 24: 483.80, 25: 2737.59, 26: 1280.44, 27: 1141.86, 28: 1074.73, 29: 838.50, 30: 1682.10, 31: 1854.62, 32: 1111.96, 33: 995.08, 34: 1440.49, 35: 2645.10, 36: 1012.79, 37: 2737.01, 38: 669.79, 39: 454.67, 40: 1611.42, 41: 1564.89, 42: 1399.66, 43: 232.74, 44: 1777.79, 45: 1201.60, 46: 1678.39, 47: 1264.80, 48: 1965.51, 49: 179.82, 50: 731.97, 51: 1056.08, 52: 2501.29, 53: 545.22, 54: 1067.16, 55: 1931.89, 56: 950.51, 57: 875.03, 58: 2356.20, 59: 1442.80, 60: 630.05, 61: 1376.89, 62: 1816.46, 63: 375.71, 64: 2552.87, 65: 2630.96, 66: 954.75, 67: 266.72, 68: 292.88, 69: 2846.36, 70: 1530.21, 71: 2228.47, 73: 2280.27, 74: 2024.95, 75: 1126.43, 76: 1262.91, 77: 1017.82, 78: 2532.85, 79: 1746.14, 80: 432.83, 81: 691.40, 82: 1051.58, 83: 2398.70, 84: 411.62, 85: 1299.52, 86: 778.92, 87: 2724.32, 88: 1495.37, 89: 2171.80, 90: 1651.45, 91: 1682.52, 92: 1166.69, 93: 2873.21, 94: 932.18, 95: 949.96, 96: 2093.59, 97: 1572.38, 98: 2944.44, 99: 1477.01},
73: {0: 941.98, 1: 2543.91, 2: 2582.75, 3: 1507.78, 4: 3156.85, 5: 802.89, 6: 1814.36, 7: 1291.33, 8: 1817.95, 9: 480.59, 10: 328.69, 11: 1800.28, 12: 3298.39, 13: 2763.84, 14: 364.92, 15: 1211.14, 16: 354.15, 17: 857.32, 18: 1138.32, 19: 1649.46, 20: 66.01, 21: 1262.40, 22: 879.72, 23: 740.77, 24: 1838.05, 25: 1896.99, 26: 1749.99, 27: 1181.68, 28: 2469.58, 29: 2680.53, 30: 1736.07, 31: 496.46, 32: 3373.68, 33: 2169.10, 34: 1656.49, 35: 475.79, 36: 3169.09, 37: 679.83, 38: 2719.47, 39: 2223.21, 40: 3026.09, 41: 1537.35, 42: 2518.81, 43: 2463.76, 44: 694.95, 45: 2446.94, 46: 611.31, 47: 2978.88, 48: 811.05, 49: 2459.66, 50: 1658.82, 51: 3044.06, 52: 1091.46, 53: 2277.78, 54: 2021.14, 55: 1498.19, 56: 1723.07, 57: 1407.28, 58: 89.00, 59: 1210.66, 60: 1673.96, 61: 1361.71, 62: 737.83, 63: 2212.60, 64: 1617.22, 65: 1582.39, 66: 1463.01, 67: 2280.46, 68: 2016.09, 69: 1421.47, 70: 2983.45, 71: 214.70, 72: 2280.27, 74: 1149.53, 75: 3399.15, 76: 1257.62, 77: 3020.12, 78: 905.06, 79: 1684.50, 80: 1880.72, 81: 2969.73, 82: 2038.37, 83: 497.04, 84: 2355.00, 85: 1669.23, 86: 1725.12, 87: 1153.01, 88: 1706.88, 89: 764.23, 90: 705.44, 91: 1090.95, 92: 1144.21, 93: 1195.61, 94: 3212.20, 95: 2961.99, 96: 1382.49, 97: 804.61, 98: 732.32, 99: 3028.15},
74: {0: 628.05, 1: 2076.21, 2: 2870.34, 3: 477.20, 4: 3049.35, 5: 374.23, 6: 2070.02, 7: 456.98, 8: 2045.11, 9: 712.20, 10: 1280.11, 11: 2174.95, 12: 3009.98, 13: 2986.96, 14: 1386.39, 15: 755.79, 16: 1383.58, 17: 853.80, 18: 234.08, 19: 2032.81, 20: 1083.66, 21: 820.95, 22: 1458.53, 23: 979.40, 24: 1765.36, 25: 890.02, 26: 2198.62, 27: 1015.33, 28: 2692.19, 29: 2720.01, 30: 697.40, 31: 1252.95, 32: 3103.65, 33: 2422.60, 34: 2196.94, 35: 1115.29, 36: 3036.08, 37: 1044.09, 38: 2647.64, 39: 1745.76, 40: 3312.19, 41: 591.49, 42: 2875.02, 43: 2116.01, 44: 1440.70, 45: 2733.83, 46: 930.82, 47: 3114.23, 48: 349.32, 49: 2187.88, 50: 1736.78, 51: 3030.19, 52: 506.35, 53: 1748.61, 54: 2332.22, 55: 370.00, 56: 1984.54, 57: 1308.77, 58: 1227.06, 59: 1759.71, 60: 1628.65, 61: 1876.57, 62: 512.64, 63: 1777.67, 64: 623.03, 65: 659.88, 66: 1080.08, 67: 2158.86, 68: 1734.13, 69: 821.78, 70: 3247.46, 71: 939.58, 72: 2024.95, 73: 1149.53, 75: 3097.62, 76: 1670.61, 77: 2996.02, 78: 629.05, 79: 620.74, 80: 1782.29, 81: 2620.77, 82: 2339.47, 83: 797.30, 84: 2289.39, 85: 2134.17, 86: 1869.64, 87: 735.85, 88: 764.39, 89: 416.45, 90: 1296.44, 91: 358.47, 92: 1024.71, 93: 895.64, 94: 2859.81, 95: 2928.74, 96: 236.54, 97: 1351.93, 98: 1351.66, 99: 3249.33},
75: {0: 2648.72, 1: 1045.02, 2: 1615.07, 3: 3443.82, 4: 564.02, 5: 3034.31, 6: 1810.52, 7: 2641.09, 8: 1776.01, 9: 3383.75, 10: 3158.02, 11: 1975.97, 12: 102.83, 13: 1446.33, 14: 3224.59, 15: 3845.84, 16: 3235.83, 17: 3814.70, 18: 3331.30, 19: 2052.31, 20: 3368.21, 21: 3913.52, 22: 2634.44, 23: 3851.53, 24: 1565.92, 25: 3715.82, 26: 2108.31, 27: 2267.42, 28: 1485.90, 29: 1045.78, 30: 2637.32, 31: 2956.32, 32: 92.20, 33: 1639.01, 34: 2286.50, 35: 3771.41, 36: 496.33, 37: 3861.99, 38: 829.67, 39: 1357.63, 40: 1642.17, 41: 2576.16, 42: 1784.63, 43: 985.43, 44: 2854.46, 45: 1629.21, 46: 2802.28, 47: 1216.15, 48: 3075.65, 49: 947.11, 50: 1777.49, 51: 821.93, 52: 3590.55, 53: 1374.40, 54: 1791.40, 55: 2944.68, 56: 1869.85, 57: 1999.56, 58: 3472.69, 59: 2445.43, 60: 1727.95, 61: 2342.41, 62: 2935.95, 63: 1320.24, 64: 3569.72, 65: 3659.81, 66: 2060.78, 67: 1135.65, 68: 1410.46, 69: 3916.00, 70: 1571.10, 71: 3354.00, 72: 1126.43, 73: 3399.15, 74: 3097.62, 76: 2289.65, 77: 800.16, 78: 3640.07, 79: 2715.00, 80: 1520.80, 81: 478.76, 82: 1768.51, 83: 3523.50, 84: 1105.21, 85: 2160.00, 86: 1763.55, 87: 3817.62, 88: 2464.21, 89: 3283.40, 90: 2746.49, 91: 2772.59, 92: 2293.01, 93: 3970.88, 94: 259.79, 95: 791.94, 96: 3130.46, 97: 2660.11, 98: 4070.66, 99: 1457.12},
76: {0: 1048.43, 1: 1663.86, 2: 1333.01, 3: 2147.80, 4: 1957.63, 5: 1361.38, 6: 560.02, 7: 1411.56, 8: 569.57, 9: 1469.71, 10: 951.16, 11: 555.64, 12: 2186.84, 13: 1507.46, 14: 986.43, 15: 2189.99, 16: 999.03, 17: 1962.94, 18: 1830.41, 19: 402.06, 20: 1252.62, 21: 2257.49, 22: 382.24, 23: 1914.37, 24: 780.86, 25: 2558.13, 26: 540.77, 27: 760.49, 28: 1212.05, 29: 1446.57, 30: 1810.37, 31: 761.84, 32: 2246.45, 33: 911.55, 34: 527.75, 35: 1715.76, 36: 1980.47, 37: 1882.99, 38: 1526.24, 39: 1430.10, 40: 1781.32, 41: 1588.69, 42: 1286.42, 43: 1489.32, 44: 595.63, 45: 1195.30, 46: 824.15, 47: 1722.50, 48: 1406.59, 49: 1422.45, 50: 531.52, 51: 1814.77, 52: 1969.17, 53: 1522.67, 54: 767.01, 55: 1823.68, 56: 471.27, 57: 643.12, 58: 1307.85, 59: 191.02, 60: 658.48, 61: 221.42, 62: 1204.76, 63: 1379.34, 64: 2293.36, 65: 2320.61, 66: 967.86, 67: 1159.70, 68: 1093.81, 69: 2356.76, 70: 1733.84, 71: 1307.38, 72: 1262.91, 73: 1257.62, 74: 1670.61, 75: 2289.65, 77: 1794.75, 78: 1888.40, 79: 1818.62, 80: 832.33, 81: 1926.45, 82: 783.13, 83: 1584.52, 84: 1188.69, 85: 469.13, 86: 526.64, 87: 2139.31, 88: 1663.20, 89: 1554.01, 90: 553.93, 91: 1347.46, 92: 724.56, 93: 2246.72, 94: 2149.70, 95: 1741.62, 96: 1863.10, 97: 454.58, 98: 1989.19, 99: 1773.05},
77: {0: 2442.33, 1: 1262.33, 2: 832.66, 3: 3412.10, 4: 242.17, 5: 2838.77, 6: 1245.83, 7: 2563.43, 8: 1227.73, 9: 3113.28, 10: 2735.06, 11: 1354.71, 12: 730.03, 13: 649.06, 14: 2779.34, 15: 3699.19, 16: 2791.77, 17: 3586.25, 18: 3218.94, 19: 1468.42, 20: 3002.80, 21: 3769.23, 22: 2172.46, 23: 3586.05, 24: 1248.88, 25: 3747.58, 26: 1471.81, 27: 2027.98, 28: 742.05, 29: 351.57, 30: 2699.37, 31: 2537.25, 32: 712.83, 33: 968.92, 34: 1644.66, 35: 3446.35, 36: 305.63, 37: 3577.09, 38: 351.76, 39: 1441.52, 40: 854.42, 41: 2574.52, 42: 1003.69, 43: 1049.21, 44: 2389.80, 45: 871.56, 46: 2473.86, 47: 422.21, 48: 2884.54, 49: 905.88, 50: 1369.76, 51: 40.00, 52: 3446.79, 53: 1510.47, 54: 1136.60, 55: 2937.57, 56: 1327.42, 57: 1726.95, 58: 3081.14, 59: 1911.84, 60: 1405.16, 61: 1782.40, 62: 2711.32, 63: 1370.83, 64: 3552.04, 65: 3624.21, 66: 1916.76, 67: 837.86, 68: 1284.52, 69: 3809.65, 70: 779.10, 71: 3022.93, 72: 1017.82, 73: 3020.12, 74: 2996.02, 75: 800.16, 76: 1794.75, 78: 3447.22, 79: 2762.09, 80: 1223.00, 81: 858.12, 82: 1113.44, 83: 3247.42, 84: 709.14, 85: 1538.63, 86: 1295.17, 87: 3661.01, 88: 2512.30, 89: 3082.58, 90: 2322.14, 91: 2642.06, 92: 2037.97, 93: 3801.02, 94: 875.13, 95: 68.15, 96: 3087.91, 97: 2225.68, 98: 3736.75, 99: 671.32},
78: {0: 1007.91, 1: 2647.11, 2: 3193.36, 3: 718.36, 4: 3530.73, 5: 611.66, 6: 2382.86, 7: 1047.85, 8: 2369.32, 9: 454.23, 10: 1173.36, 11: 2438.24, 12: 3547.62, 13: 3340.40, 14: 1248.91, 15: 315.63, 16: 1240.62, 17: 229.65, 18: 441.49, 19: 2285.95, 20: 853.00, 21: 376.97, 22: 1575.31, 23: 386.26, 24: 2198.37, 25: 1043.35, 26: 2427.70, 27: 1419.61, 28: 3039.50, 29: 3142.15, 30: 1321.00, 31: 1247.60, 32: 3637.16, 33: 2749.23, 34: 2380.39, 35: 627.78, 36: 3525.83, 37: 471.83, 38: 3109.30, 39: 2311.33, 40: 3643.89, 41: 1217.72, 42: 3167.06, 43: 2654.97, 44: 1468.53, 45: 3054.12, 46: 1064.25, 47: 3506.41, 48: 567.67, 49: 2705.59, 50: 2108.33, 51: 3478.25, 52: 223.01, 53: 2327.54, 54: 2630.39, 55: 969.03, 56: 2290.91, 57: 1720.31, 58: 948.13, 59: 1917.21, 60: 2043.41, 61: 2058.25, 62: 737.01, 63: 2332.51, 64: 784.66, 65: 720.15, 66: 1580.77, 67: 2625.51, 68: 2240.45, 69: 518.42, 70: 3587.86, 71: 710.74, 72: 2532.85, 73: 905.06, 74: 629.05, 75: 3640.07, 76: 1888.40, 77: 3447.22, 79: 1240.45, 80: 2225.86, 81: 3169.93, 82: 2642.37, 83: 408.88, 84: 2739.85, 85: 2352.76, 86: 2220.79, 87: 259.33, 88: 1392.84, 89: 364.73, 90: 1385.14, 91: 878.32, 92: 1409.54, 93: 361.19, 94: 3413.31, 95: 3382.08, 96: 767.29, 97: 1471.24, 98: 782.97, 99: 3608.22},
79: {0: 862.97, 1: 1670.00, 2: 2811.81, 3: 758.02, 4: 2768.48, 5: 886.49, 6: 2071.42, 7: 438.51, 8: 2034.62, 9: 1301.62, 10: 1733.54, 11: 2226.23, 12: 2637.90, 13: 2885.92, 14: 1846.29, 15: 1301.41, 16: 1846.85, 17: 1468.70, 18: 806.11, 19: 2106.70, 20: 1619.41, 21: 1355.98, 22: 1729.44, 23: 1599.88, 24: 1632.34, 25: 1002.88, 26: 2285.96, 27: 1060.06, 28: 2611.67, 29: 2538.39, 30: 87.21, 31: 1646.48, 32: 2736.55, 33: 2382.40, 34: 2332.21, 35: 1725.14, 36: 2742.59, 37: 1664.62, 38: 2411.32, 39: 1370.76, 40: 3226.64, 41: 231.14, 42: 2853.29, 43: 1773.90, 44: 1785.82, 45: 2684.80, 46: 1286.10, 47: 2958.37, 48: 888.05, 49: 1881.55, 50: 1695.08, 51: 2799.70, 52: 1081.12, 53: 1341.46, 54: 2332.12, 55: 280.80, 56: 2001.03, 57: 1273.08, 58: 1769.59, 59: 1958.05, 60: 1538.73, 61: 2039.77, 62: 954.08, 63: 1424.40, 64: 866.85, 65: 967.50, 66: 943.76, 67: 1940.58, 68: 1481.56, 69: 1293.35, 70: 3153.35, 71: 1490.74, 72: 1746.14, 73: 1684.50, 74: 620.74, 75: 2715.00, 76: 1818.62, 77: 2762.09, 78: 1240.45, 80: 1631.21, 81: 2238.41, 82: 2333.26, 83: 1403.62, 84: 2088.17, 85: 2237.51, 86: 1840.94, 87: 1297.66, 88: 253.29, 89: 1022.61, 90: 1614.13, 91: 606.07, 92: 1094.15, 93: 1457.09, 94: 2462.66, 95: 2693.99, 96: 496.86, 97: 1635.81, 98: 1970.91, 99: 3132.05},
80: {0: 1219.59, 1: 842.63, 2: 1192.82, 3: 2215.77, 4: 1310.25, 5: 1616.27, 6: 593.67, 7: 1365.78, 8: 543.74, 9: 1908.69, 10: 1638.25, 11: 807.37, 12: 1419.32, 13: 1254.78, 14: 1708.17, 15: 2476.31, 16: 1719.08, 17: 2371.36, 18: 2001.03, 19: 775.34, 20: 1852.20, 21: 2546.38, 22: 1132.86, 23: 2382.22, 24: 51.48, 25: 2574.95, 26: 927.37, 27: 806.31, 28: 986.22, 29: 938.04, 30: 1584.06, 31: 1436.86, 32: 1493.08, 33: 793.30, 34: 1068.32, 35: 2270.21, 36: 1311.48, 37: 2381.00, 38: 883.63, 39: 667.44, 40: 1596.15, 41: 1419.09, 42: 1257.83, 43: 657.01, 44: 1348.90, 45: 1074.29, 46: 1293.26, 47: 1341.46, 48: 1661.88, 49: 601.05, 50: 305.31, 51: 1255.19, 52: 2224.30, 53: 770.17, 54: 799.72, 55: 1763.52, 56: 578.73, 57: 508.33, 58: 1952.87, 59: 1015.20, 60: 207.17, 61: 960.08, 62: 1491.66, 63: 599.10, 64: 2359.34, 65: 2423.58, 66: 714.79, 67: 406.87, 68: 303.12, 69: 2589.97, 70: 1522.28, 71: 1848.11, 72: 432.83, 73: 1880.72, 74: 1782.29, 75: 1520.80, 76: 832.33, 77: 1223.00, 78: 2225.86, 79: 1631.21, 81: 1114.47, 82: 791.62, 83: 2045.83, 84: 514.25, 85: 929.00, 86: 385.22, 87: 2438.01, 88: 1399.00, 89: 1861.14, 90: 1229.30, 91: 1425.40, 92: 819.15, 93: 2578.43, 94: 1349.02, 95: 1157.16, 96: 1892.73, 97: 1146.61, 98: 2567.31, 99: 1502.28},
81: {0: 2186.07, 1: 569.94, 2: 1530.89, 3: 2965.16, 4: 704.49, 5: 2567.16, 6: 1508.62, 7: 2163.98, 8: 1466.81, 9: 2927.25, 10: 2745.90, 11: 1700.40, 12: 399.85, 13: 1415.41, 14: 2819.89, 15: 3370.58, 16: 2830.54, 17: 3348.78, 18: 2854.63, 19: 1748.05, 20: 2935.03, 21: 3437.96, 22: 2246.67, 23: 3391.59, 24: 1163.52, 25: 3240.19, 26: 1836.78, 27: 1816.15, 28: 1355.38, 29: 941.76, 30: 2161.56, 31: 2545.64, 32: 499.41, 33: 1424.00, 34: 2011.20, 35: 3324.45, 36: 646.30, 37: 3405.70, 38: 680.92, 39: 878.93, 40: 1688.35, 41: 2097.48, 42: 1687.28, 43: 517.72, 44: 2463.33, 45: 1503.61, 46: 2364.98, 47: 1261.11, 48: 2607.65, 49: 514.58, 50: 1397.84, 51: 894.56, 52: 3115.56, 53: 897.04, 54: 1552.19, 55: 2466.17, 56: 1551.08, 57: 1562.69, 58: 3046.45, 59: 2096.74, 60: 1317.77, 61: 2011.66, 62: 2474.04, 63: 843.13, 64: 3091.41, 65: 3181.17, 66: 1594.66, 67: 775.77, 68: 958.43, 69: 3438.25, 70: 1608.08, 71: 2911.53, 72: 691.40, 73: 2969.73, 74: 2620.77, 75: 478.76, 76: 1926.45, 77: 858.12, 78: 3169.93, 79: 2238.41, 80: 1114.47, 82: 1531.17, 83: 3067.26, 84: 801.48, 85: 1875.29, 86: 1412.57, 87: 3343.23, 88: 1987.02, 89: 2815.71, 90: 2341.31, 91: 2299.00, 92: 1844.88, 93: 3497.37, 94: 245.31, 95: 813.46, 96: 2651.72, 97: 2260.50, 98: 3624.14, 99: 1512.41},
82: {0: 1715.55, 1: 1513.23, 2: 552.95, 3: 2808.11, 4: 1319.49, 5: 2078.01, 6: 269.68, 7: 1992.99, 8: 299.92, 9: 2240.56, 10: 1725.00, 11: 250.87, 12: 1670.75, 13: 725.58, 14: 1747.40, 15: 2933.65, 16: 1760.34, 17: 2733.48, 18: 2528.07, 19: 391.49, 20: 2035.22, 21: 3002.66, 22: 1158.86, 23: 2693.36, 24: 764.23, 25: 3200.73, 26: 358.45, 27: 1331.54, 28: 436.32, 29: 767.57, 30: 2300.21, 31: 1541.91, 32: 1703.78, 33: 145.96, 34: 532.02, 35: 2498.85, 36: 1359.94, 37: 2664.59, 38: 939.67, 39: 1431.69, 40: 1003.53, 41: 2106.81, 42: 535.56, 43: 1268.25, 44: 1358.76, 45: 414.04, 46: 1585.81, 47: 957.05, 48: 2124.86, 49: 1132.64, 50: 638.38, 51: 1123.64, 52: 2700.12, 53: 1535.01, 54: 23.35, 55: 2412.39, 56: 356.04, 57: 1065.77, 58: 2084.98, 59: 846.22, 60: 805.73, 61: 701.62, 62: 1927.05, 63: 1355.34, 64: 2955.26, 65: 2999.35, 66: 1390.20, 67: 813.55, 68: 1078.23, 69: 3085.79, 70: 952.43, 71: 2089.51, 72: 1051.58, 73: 2038.37, 74: 2339.47, 75: 1768.51, 76: 783.13, 77: 1113.44, 78: 2642.37, 79: 2333.26, 80: 791.62, 81: 1531.17, 83: 2360.37, 84: 735.87, 85: 427.93, 86: 492.33, 87: 2885.93, 88: 2123.88, 89: 2293.55, 90: 1336.79, 91: 1988.79, 92: 1316.62, 93: 3003.27, 94: 1703.20, 95: 1074.59, 96: 2499.12, 97: 1237.55, 98: 2770.59, 99: 990.12},
83: {0: 888.47, 1: 2581.30, 2: 2913.17, 3: 1061.23, 4: 3354.74, 5: 560.97, 6: 2112.27, 7: 1092.48, 8: 2105.55, 9: 140.04, 10: 781.22, 11: 2140.16, 12: 3426.64, 13: 3075.61, 14: 848.07, 15: 714.58, 16: 839.03, 17: 386.80, 18: 711.00, 19: 1986.58, 20: 447.60, 21: 767.52, 22: 1239.90, 23: 338.92, 24: 2011.27, 25: 1427.27, 26: 2113.52, 27: 1256.96, 28: 2775.34, 29: 2924.95, 30: 1471.85, 31: 882.78, 32: 3510.57, 33: 2478.19, 34: 2047.36, 35: 322.02, 36: 3357.30, 37: 338.54, 38: 2922.74, 39: 2246.48, 40: 3363.22, 41: 1313.68, 42: 2870.86, 43: 2549.87, 44: 1104.09, 45: 2774.40, 46: 782.16, 47: 3263.67, 48: 539.42, 49: 2577.02, 50: 1881.77, 51: 3275.60, 52: 606.39, 53: 2280.45, 54: 2346.10, 55: 1167.23, 56: 2019.24, 57: 1539.68, 58: 539.71, 59: 1585.20, 60: 1848.85, 61: 1732.20, 62: 603.52, 63: 2253.72, 64: 1154.48, 65: 1106.68, 66: 1480.35, 67: 2452.52, 68: 2113.21, 69: 924.43, 70: 3312.63, 71: 314.24, 72: 2398.70, 73: 497.04, 74: 797.30, 75: 3523.50, 76: 1584.52, 77: 3247.42, 78: 408.88, 79: 1403.62, 80: 2045.83, 81: 3067.26, 82: 2360.37, 84: 2551.28, 85: 2035.46, 86: 1977.43, 87: 656.49, 88: 1493.86, 89: 382.15, 90: 1048.56, 91: 889.64, 92: 1234.34, 93: 710.30, 94: 3312.57, 95: 3184.81, 96: 1005.63, 97: 1142.51, 98: 593.33, 99: 3343.53},
84: {0: 1733.84, 1: 832.31, 2: 880.57, 3: 2712.55, 4: 805.35, 5: 2130.50, 6: 714.19, 7: 1862.13, 8: 675.88, 9: 2415.41, 10: 2088.98, 11: 899.55, 12: 1002.73, 13: 863.02, 14: 2146.06, 15: 2990.09, 16: 2157.86, 17: 2882.94, 18: 2510.97, 19: 956.06, 20: 2332.05, 21: 3060.13, 22: 1545.29, 23: 2888.97, 24: 542.44, 25: 3058.68, 26: 1035.77, 27: 1320.25, 28: 670.23, 29: 450.87, 30: 2031.61, 31: 1887.69, 32: 1058.42, 33: 643.61, 34: 1211.06, 35: 2763.82, 36: 814.26, 37: 2884.20, 38: 371.55, 39: 864.43, 40: 1202.13, 41: 1889.48, 42: 1002.29, 43: 575.88, 44: 1766.09, 45: 804.19, 46: 1786.53, 47: 875.56, 48: 2176.13, 49: 420.95, 50: 697.83, 51: 741.97, 52: 2737.66, 53: 956.73, 54: 755.91, 55: 2246.39, 56: 766.85, 57: 1020.53, 58: 2421.83, 59: 1340.49, 60: 702.67, 61: 1238.13, 62: 2004.97, 63: 784.55, 64: 2854.15, 65: 2923.07, 66: 1212.28, 67: 153.40, 68: 611.06, 69: 3101.19, 70: 1121.49, 71: 2340.16, 72: 411.62, 73: 2355.00, 74: 2289.39, 75: 1105.21, 76: 1188.69, 77: 709.14, 78: 2739.85, 79: 2088.17, 80: 514.25, 81: 801.48, 82: 735.87, 83: 2551.28, 85: 1076.70, 86: 662.22, 87: 2952.07, 88: 1843.87, 89: 2375.13, 90: 1673.59, 91: 1934.30, 92: 1331.79, 93: 3092.68, 94: 993.32, 95: 643.01, 96: 2388.43, 97: 1581.89, 98: 3058.24, 99: 1074.01},
85: {0: 1508.30, 1: 1752.07, 2: 926.74, 3: 2611.06, 4: 1738.27, 5: 1830.30, 6: 369.43, 7: 1849.80, 8: 415.41, 9: 1926.37, 10: 1346.00, 11: 185.97, 12: 2059.72, 13: 1125.88, 14: 1354.89, 15: 2656.63, 16: 1367.93, 17: 2418.08, 18: 2298.44, 19: 155.43, 20: 1674.06, 21: 2723.72, 22: 798.91, 23: 2358.90, 24: 884.30, 25: 3018.81, 26: 81.15, 27: 1181.79, 28: 854.16, 29: 1189.93, 30: 2219.83, 31: 1177.43, 32: 2101.17, 33: 573.89, 34: 141.06, 35: 2139.99, 36: 1775.14, 37: 2320.75, 38: 1340.15, 39: 1594.95, 40: 1360.78, 41: 2006.38, 42: 850.00, 43: 1531.00, 44: 976.00, 45: 797.52, 46: 1289.60, 47: 1375.82, 48: 1875.61, 49: 1421.04, 50: 657.14, 51: 1550.06, 52: 2437.80, 53: 1696.79, 54: 405.42, 55: 2267.73, 56: 352.37, 57: 985.29, 58: 1707.07, 59: 458.63, 60: 841.61, 61: 307.65, 62: 1673.80, 63: 1528.03, 64: 2757.20, 65: 2787.09, 66: 1329.98, 67: 1110.26, 68: 1231.23, 69: 2825.32, 70: 1323.35, 71: 1746.16, 72: 1299.52, 73: 1669.23, 74: 2134.17, 75: 2160.00, 76: 469.13, 77: 1538.63, 78: 2352.76, 79: 2237.51, 80: 929.00, 81: 1875.29, 82: 427.93, 83: 2035.46, 84: 1076.70, 86: 544.11, 87: 2605.35, 88: 2059.28, 89: 2022.14, 90: 988.34, 91: 1803.18, 92: 1153.32, 93: 2709.48, 94: 2069.11, 95: 1497.33, 96: 2320.32, 97: 893.01, 98: 2399.08, 99: 1380.07},
86: {0: 1254.93, 1: 1218.50, 2: 1001.00, 3: 2332.15, 4: 1442.08, 5: 1633.84, 6: 237.99, 7: 1506.36, 8: 195.49, 9: 1848.41, 10: 1442.34, 11: 435.78, 12: 1660.76, 13: 1124.46, 14: 1492.38, 15: 2499.23, 16: 1504.49, 17: 2334.45, 18: 2067.94, 19: 390.13, 20: 1708.91, 21: 2569.07, 22: 887.39, 23: 2315.88, 24: 340.21, 25: 2718.66, 26: 546.80, 27: 854.78, 28: 825.68, 29: 956.66, 30: 1808.18, 31: 1243.22, 32: 1719.82, 33: 554.59, 34: 683.12, 35: 2157.45, 36: 1461.12, 37: 2299.23, 38: 1006.81, 39: 1050.92, 40: 1443.26, 41: 1614.68, 42: 1018.46, 43: 1011.48, 44: 1107.77, 45: 865.43, 46: 1195.81, 47: 1288.40, 48: 1680.91, 49: 921.65, 50: 146.37, 51: 1318.94, 52: 2257.57, 53: 1152.95, 54: 491.71, 55: 1924.32, 56: 197.52, 57: 576.32, 58: 1786.06, 59: 685.72, 60: 324.14, 61: 601.82, 62: 1489.50, 63: 984.00, 64: 2479.02, 65: 2528.25, 66: 897.98, 67: 638.80, 68: 687.12, 69: 2638.95, 70: 1380.36, 71: 1735.61, 72: 778.92, 73: 1725.12, 74: 1869.64, 75: 1763.55, 76: 526.64, 77: 1295.17, 78: 2220.79, 79: 1840.94, 80: 385.22, 81: 1412.57, 82: 492.33, 83: 1977.43, 84: 662.22, 85: 544.11, 87: 2454.59, 88: 1632.71, 89: 1862.38, 90: 1027.98, 91: 1514.46, 92: 845.65, 93: 2581.38, 94: 1629.71, 95: 1237.79, 96: 2018.75, 97: 932.62, 98: 2444.81, 99: 1390.86},
87: {0: 1219.45, 1: 2806.43, 2: 3435.26, 3: 644.05, 4: 3734.72, 5: 825.11, 6: 2624.00, 7: 1187.77, 8: 2608.58, 9: 713.08, 10: 1430.24, 11: 2686.40, 12: 3727.58, 13: 3577.38, 14: 1502.97, 15: 58.14, 16: 1494.30, 17: 346.17, 18: 506.74, 19: 2534.78, 20: 1103.96, 21: 118.60, 22: 1832.30, 23: 526.27, 24: 2413.33, 25: 882.16, 26: 2679.52, 27: 1634.96, 28: 3276.92, 29: 3363.45, 30: 1383.13, 31: 1506.93, 32: 3819.33, 33: 2989.42, 34: 2635.85, 35: 821.52, 36: 3726.75, 37: 622.27, 38: 3319.09, 39: 2473.47, 40: 3885.23, 41: 1319.89, 42: 3413.44, 43: 2832.73, 44: 1727.82, 45: 3296.14, 46: 1315.78, 47: 3735.79, 48: 778.54, 49: 2893.43, 50: 2337.47, 51: 3693.04, 52: 229.75, 53: 2480.85, 54: 2874.60, 55: 1017.01, 56: 2532.67, 57: 1937.45, 58: 1189.55, 59: 2173.13, 60: 2262.26, 61: 2312.98, 62: 965.11, 63: 2501.03, 64: 662.15, 65: 570.64, 66: 1769.60, 67: 2832.30, 68: 2431.46, 69: 272.01, 70: 3827.63, 71: 965.37, 72: 2724.32, 73: 1153.01, 74: 735.85, 75: 3817.62, 76: 2139.31, 77: 3661.01, 78: 259.33, 79: 1297.66, 80: 2438.01, 81: 3343.23, 82: 2885.93, 83: 656.49, 84: 2952.07, 85: 2605.35, 86: 2454.59, 88: 1484.52, 89: 593.06, 90: 1642.66, 91: 1045.31, 92: 1629.26, 93: 160.88, 94: 3584.44, 95: 3595.08, 96: 801.51, 97: 1727.62, 98: 904.76, 99: 3844.69},
88: {0: 806.49, 1: 1419.51, 2: 2587.07, 3: 992.36, 4: 2515.89, 5: 942.65, 6: 1867.18, 7: 416.33, 8: 1827.89, 9: 1376.94, 10: 1707.30, 11: 2033.10, 12: 2386.26, 13: 2652.87, 14: 1820.12, 15: 1495.20, 16: 1822.46, 17: 1615.11, 18: 979.61, 19: 1921.82, 20: 1644.19, 21: 1554.38, 22: 1621.67, 23: 1728.53, 24: 1403.70, 25: 1255.83, 26: 2102.26, 27: 905.28, 28: 2383.80, 29: 2294.63, 30: 187.77, 31: 1594.01, 32: 2484.68, 33: 2164.62, 34: 2162.40, 35: 1814.51, 36: 2489.62, 37: 1783.48, 38: 2162.05, 39: 1117.66, 40: 2994.92, 41: 180.42, 42: 2636.05, 43: 1520.61, 44: 1706.83, 45: 2462.78, 46: 1234.53, 47: 2716.59, 48: 956.62, 49: 1628.88, 50: 1486.34, 51: 2550.13, 52: 1259.48, 53: 1090.00, 54: 2124.24, 55: 494.50, 56: 1801.84, 57: 1078.72, 58: 1794.84, 59: 1816.50, 60: 1321.44, 61: 1884.22, 62: 970.22, 63: 1171.11, 64: 1109.76, 65: 1205.90, 66: 737.53, 67: 1694.94, 68: 1234.89, 69: 1509.87, 70: 2920.42, 71: 1529.99, 72: 1495.37, 73: 1706.88, 74: 764.39, 75: 2464.21, 76: 1663.20, 77: 2512.30, 78: 1392.84, 79: 253.29, 80: 1399.00, 81: 1987.02, 82: 2123.88, 83: 1493.86, 84: 1843.87, 85: 2059.28, 86: 1632.71, 87: 1484.52, 89: 1125.10, 90: 1529.61, 91: 621.09, 92: 945.40, 93: 1645.37, 94: 2212.87, 95: 2444.27, 96: 702.12, 97: 1536.58, 98: 2079.50, 99: 2895.38},
89: {0: 643.77, 1: 2301.80, 2: 2842.38, 3: 747.47, 4: 3166.42, 5: 249.33, 6: 2031.08, 7: 738.87, 8: 2015.52, 9: 300.03, 10: 954.11, 11: 2096.93, 12: 3189.99, 13: 2984.55, 14: 1049.49, 15: 640.10, 16: 1044.18, 17: 535.09, 18: 375.59, 19: 1946.11, 20: 700.16, 21: 709.19, 22: 1266.82, 23: 612.41, 24: 1833.70, 25: 1148.95, 26: 2094.78, 27: 1054.88, 28: 2684.01, 29: 2778.52, 30: 1092.47, 31: 979.46, 32: 3278.59, 33: 2396.38, 34: 2060.02, 35: 702.76, 36: 3161.96, 37: 659.76, 38: 2744.59, 39: 1965.33, 40: 3292.25, 41: 944.77, 42: 2822.24, 43: 2299.34, 44: 1191.92, 45: 2703.29, 46: 735.83, 47: 3145.68, 48: 208.12, 49: 2345.63, 50: 1747.16, 51: 3113.67, 52: 417.08, 53: 1987.42, 54: 2282.46, 55: 785.86, 56: 1939.87, 57: 1355.71, 58: 834.23, 59: 1600.49, 60: 1679.10, 61: 1735.66, 62: 373.98, 63: 1982.53, 64: 865.92, 65: 847.85, 66: 1222.65, 67: 2261.04, 68: 1879.90, 69: 803.70, 70: 3234.57, 71: 549.60, 72: 2171.80, 73: 764.23, 74: 416.45, 75: 3283.40, 76: 1554.01, 77: 3082.58, 78: 364.73, 79: 1022.61, 80: 1861.14, 81: 2815.71, 82: 2293.55, 83: 382.15, 84: 2375.13, 85: 2022.14, 86: 1862.38, 87: 593.06, 88: 1125.10, 90: 1082.39, 91: 547.53, 92: 1045.12, 93: 721.00, 94: 3059.86, 95: 3017.39, 96: 633.91, 97: 1159.75, 98: 955.07, 99: 3251.98},
90: {0: 752.97, 1: 1978.32, 2: 1885.11, 3: 1760.32, 4: 2468.07, 5: 938.87, 6: 1108.95, 7: 1175.92, 8: 1112.76, 9: 945.01, 10: 415.50, 11: 1104.00, 12: 2644.32, 13: 2061.38, 14: 478.87, 15: 1696.62, 16: 489.80, 17: 1433.20, 18: 1408.79, 19: 951.33, 20: 698.72, 21: 1761.14, 22: 191.64, 23: 1370.61, 24: 1182.21, 25: 2177.37, 26: 1067.28, 27: 709.66, 28: 1765.64, 29: 1979.45, 30: 1632.26, 31: 215.24, 32: 2713.60, 33: 1465.17, 34: 999.91, 35: 1162.16, 36: 2484.21, 37: 1334.16, 38: 2031.31, 39: 1686.15, 40: 2331.82, 41: 1403.87, 42: 1830.77, 43: 1856.16, 44: 179.04, 45: 1748.01, 46: 365.94, 47: 2273.52, 48: 977.95, 49: 1826.73, 50: 976.46, 51: 2344.87, 52: 1497.42, 53: 1759.97, 54: 1320.32, 55: 1537.62, 56: 1017.64, 57: 819.56, 58: 760.43, 59: 536.86, 60: 1023.89, 61: 683.74, 62: 786.70, 63: 1657.46, 64: 1898.89, 65: 1905.66, 66: 1007.25, 67: 1613.64, 68: 1416.12, 69: 1879.83, 70: 2286.11, 71: 758.60, 72: 1651.45, 73: 705.44, 74: 1296.44, 75: 2746.49, 76: 553.93, 77: 2322.14, 78: 1385.14, 79: 1614.13, 80: 1229.30, 81: 2341.31, 82: 1336.79, 83: 1048.56, 84: 1673.59, 85: 988.34, 86: 1027.98, 87: 1642.66, 88: 1529.61, 89: 1082.39, 91: 1041.57, 92: 662.12, 93: 1735.08, 94: 2577.96, 95: 2265.51, 96: 1518.51, 97: 99.41, 98: 1435.83, 99: 2326.86},
91: {0: 302.55, 1: 1769.47, 2: 2515.46, 3: 819.32, 4: 2701.30, 5: 329.07, 6: 1719.11, 7: 206.31, 8: 1692.61, 9: 764.70, 10: 1127.82, 11: 1832.69, 12: 2682.30, 13: 2629.44, 14: 1240.45, 15: 1075.38, 16: 1240.89, 17: 1076.75, 18: 576.94, 19: 1694.17, 20: 1027.19, 21: 1144.01, 22: 1180.86, 23: 1159.04, 24: 1407.61, 25: 1217.87, 26: 1864.20, 27: 659.70, 28: 2335.40, 29: 2362.63, 30: 648.68, 31: 1049.12, 32: 2774.04, 33: 2068.35, 34: 1875.14, 35: 1205.60, 36: 2690.17, 37: 1200.65, 38: 2294.88, 39: 1434.20, 40: 2955.87, 41: 447.18, 42: 2524.08, 43: 1787.50, 44: 1204.88, 45: 2379.54, 46: 693.31, 47: 2755.81, 48: 352.14, 49: 1849.61, 50: 1380.06, 51: 2675.81, 52: 819.68, 53: 1449.23, 54: 1982.33, 55: 496.59, 56: 1635.24, 57: 950.64, 58: 1178.05, 59: 1454.75, 60: 1270.18, 61: 1560.58, 62: 353.41, 63: 1458.09, 64: 966.48, 65: 1013.97, 66: 730.25, 67: 1806.05, 68: 1390.12, 69: 1168.44, 70: 2890.55, 71: 909.30, 72: 1682.52, 73: 1090.95, 74: 358.47, 75: 2772.59, 76: 1347.46, 77: 2642.06, 78: 878.32, 79: 606.07, 80: 1425.40, 81: 2299.00, 82: 1988.79, 83: 889.64, 84: 1934.30, 85: 1803.18, 86: 1514.46, 87: 1045.31, 88: 621.09, 89: 547.53, 90: 1041.57, 92: 672.17, 93: 1198.41, 94: 2541.02, 95: 2575.02, 96: 517.22, 97: 1079.10, 98: 1482.21, 99: 2891.38},
92: {0: 412.98, 1: 1399.75, 2: 1845.80, 3: 1491.48, 4: 2128.81, 5: 804.20, 6: 1046.94, 7: 696.60, 8: 1020.77, 9: 1095.56, 10: 982.15, 11: 1166.28, 12: 2195.08, 13: 1967.08, 14: 1080.60, 15: 1670.48, 16: 1088.02, 17: 1552.28, 18: 1223.06, 19: 1033.16, 20: 1102.43, 21: 1740.65, 22: 702.28, 23: 1567.83, 24: 789.52, 25: 1886.56, 26: 1208.20, 27: 47.68, 28: 1670.19, 29: 1734.41, 30: 1086.58, 31: 805.44, 32: 2277.58, 33: 1397.91, 34: 1240.72, 35: 1479.83, 36: 2128.07, 37: 1571.99, 38: 1702.41, 39: 1080.53, 40: 2288.88, 41: 864.14, 42: 1851.93, 43: 1331.08, 44: 837.61, 45: 1709.14, 46: 533.03, 47: 2109.75, 48: 850.72, 49: 1345.90, 50: 716.45, 51: 2068.79, 52: 1422.95, 53: 1140.04, 54: 1310.24, 55: 1115.63, 56: 963.42, 57: 311.26, 58: 1226.86, 59: 871.27, 60: 634.00, 61: 945.84, 62: 673.37, 63: 1068.39, 64: 1638.64, 65: 1684.14, 66: 347.25, 67: 1223.40, 68: 886.51, 69: 1799.46, 70: 2225.37, 71: 1067.58, 72: 1166.69, 73: 1144.21, 74: 1024.71, 75: 2293.01, 76: 724.56, 77: 2037.97, 78: 1409.54, 79: 1094.15, 80: 819.15, 81: 1844.88, 82: 1316.62, 83: 1234.34, 84: 1331.79, 85: 1153.32, 86: 845.65, 87: 1629.26, 88: 945.40, 89: 1045.12, 90: 662.12, 91: 672.17, 93: 1765.14, 94: 2089.68, 95: 1973.09, 96: 1184.40, 97: 636.13, 98: 1779.47, 99: 2231.58},
93: {0: 1358.85, 1: 2963.13, 2: 3554.43, 3: 784.62, 4: 3879.30, 5: 962.25, 6: 2744.02, 7: 1345.79, 8: 2730.51, 9: 791.77, 10: 1491.46, 11: 2797.85, 12: 3880.20, 13: 3701.49, 14: 1555.12, 15: 160.70, 16: 1545.52, 17: 341.92, 18: 667.47, 19: 2645.30, 20: 1152.91, 21: 133.65, 22: 1926.24, 23: 500.99, 24: 2552.33, 25: 975.55, 26: 2785.06, 27: 1773.18, 28: 3400.61, 29: 3499.21, 30: 1542.80, 31: 1585.78, 32: 3971.39, 33: 3110.41, 34: 2733.48, 35: 813.00, 36: 3872.59, 37: 594.01, 38: 3460.98, 39: 2629.52, 40: 4005.00, 41: 1480.69, 42: 3527.22, 43: 2985.61, 44: 1807.61, 45: 3415.18, 46: 1422.96, 47: 3866.20, 48: 916.56, 49: 3043.55, 50: 2467.80, 51: 3832.53, 52: 389.31, 53: 2638.35, 54: 2991.18, 55: 1176.32, 56: 2652.04, 57: 2075.01, 58: 1221.19, 59: 2269.90, 60: 2399.08, 61: 2412.71, 62: 1094.93, 63: 2655.86, 64: 783.78, 65: 682.11, 66: 1918.60, 67: 2975.40, 68: 2580.34, 69: 313.01, 70: 3949.04, 71: 1024.54, 72: 2873.21, 73: 1195.61, 74: 895.64, 75: 3970.88, 76: 2246.72, 77: 3801.02, 78: 361.19, 79: 1457.09, 80: 2578.43, 81: 3497.37, 82: 3003.27, 83: 710.30, 84: 3092.68, 85: 2709.48, 86: 2581.38, 87: 160.88, 88: 1645.37, 89: 721.00, 90: 1735.08, 91: 1198.41, 92: 1765.14, 94: 3739.13, 95: 3735.48, 96: 960.49, 97: 1823.69, 98: 841.61, 99: 3969.29},
94: {0: 2431.13, 1: 793.77, 2: 1633.18, 3: 3196.27, 4: 670.55, 5: 2811.48, 6: 1707.42, 7: 2402.84, 8: 1668.26, 9: 3172.56, 10: 2984.60, 11: 1889.65, 12: 215.64, 13: 1490.62, 14: 3056.80, 15: 3611.10, 16: 3067.61, 17: 3593.24, 18: 3093.82, 19: 1949.05, 20: 3178.14, 21: 3678.20, 22: 2478.33, 23: 3636.77, 24: 1397.06, 25: 3462.05, 26: 2025.08, 27: 2061.21, 28: 1477.35, 29: 1042.93, 30: 2384.07, 31: 2783.86, 32: 311.01, 33: 1585.32, 34: 2201.81, 35: 3569.38, 36: 602.70, 37: 3651.01, 38: 794.48, 39: 1114.83, 40: 1728.94, 41: 2329.09, 42: 1797.39, 43: 762.92, 44: 2696.24, 45: 1625.08, 46: 2608.57, 47: 1296.30, 48: 2851.76, 49: 753.45, 50: 1624.98, 51: 905.65, 52: 3356.37, 53: 1124.77, 54: 1725.19, 55: 2696.40, 56: 1756.77, 57: 1805.74, 58: 3288.36, 59: 2315.42, 60: 1554.11, 61: 2223.69, 62: 2719.14, 63: 1083.41, 64: 3320.43, 65: 3412.04, 66: 1839.42, 67: 991.06, 68: 1203.17, 69: 3675.57, 70: 1652.37, 71: 3155.96, 72: 932.18, 73: 3212.20, 74: 2859.81, 75: 259.79, 76: 2149.70, 77: 875.13, 78: 3413.31, 79: 2462.66, 80: 1349.02, 81: 245.31, 82: 1703.20, 83: 3312.57, 84: 993.32, 85: 2069.11, 86: 1629.71, 87: 3584.44, 88: 2212.87, 89: 3059.86, 90: 2577.96, 91: 2541.02, 92: 2089.68, 93: 3739.13, 95: 846.98, 96: 2885.19, 97: 2495.57, 98: 3869.06, 99: 1546.39},
95: {0: 2376.68, 1: 1200.94, 2: 826.46, 3: 3344.20, 4: 253.14, 5: 2773.24, 6: 1196.34, 7: 2495.67, 8: 1176.48, 9: 3050.34, 10: 2679.09, 11: 1312.49, 12: 715.44, 13: 655.08, 14: 2724.89, 15: 3633.06, 16: 2737.26, 17: 3522.24, 18: 3151.94, 19: 1422.26, 20: 2943.93, 21: 3703.08, 22: 2117.98, 23: 3523.32, 24: 1183.73, 25: 3679.44, 26: 1432.25, 27: 1962.63, 28: 719.61, 29: 307.42, 30: 2631.36, 31: 2480.71, 32: 707.64, 33: 931.43, 34: 1606.57, 35: 3385.97, 36: 307.92, 37: 3515.10, 38: 283.64, 39: 1375.18, 40: 883.70, 41: 2506.37, 42: 997.09, 43: 984.59, 44: 2336.01, 45: 854.63, 46: 2412.46, 47: 451.69, 48: 2818.95, 49: 839.77, 50: 1309.07, 51: 106.23, 52: 3380.48, 53: 1445.05, 54: 1097.87, 55: 2869.46, 56: 1276.24, 57: 1661.95, 58: 3023.78, 59: 1862.38, 60: 1340.84, 61: 1735.03, 62: 2646.47, 63: 1304.08, 64: 3484.07, 65: 3556.39, 66: 1849.31, 67: 770.28, 68: 1216.38, 69: 3742.78, 70: 806.04, 71: 2962.40, 72: 949.96, 73: 2961.99, 74: 2928.74, 75: 791.94, 76: 1741.62, 77: 68.15, 78: 3382.08, 79: 2693.99, 80: 1157.16, 81: 813.46, 82: 1074.59, 83: 3184.81, 84: 643.01, 85: 1497.33, 86: 1237.79, 87: 3595.08, 88: 2444.27, 89: 3017.39, 90: 2265.51, 91: 2575.02, 92: 1973.09, 93: 3735.48, 94: 846.98, 96: 3020.02, 97: 2169.48, 98: 3677.03, 99: 703.29},
96: {0: 814.88, 1: 2093.04, 2: 3018.38, 3: 324.23, 4: 3124.04, 5: 609.58, 6: 2229.60, 7: 527.06, 8: 2201.18, 9: 933.77, 10: 1516.32, 11: 2348.60, 12: 3047.17, 13: 3122.90, 14: 1622.85, 15: 804.56, 16: 1620.09, 17: 996.83, 18: 325.86, 19: 2211.03, 20: 1316.80, 21: 859.62, 22: 1674.13, 23: 1144.02, 24: 1881.41, 25: 702.16, 26: 2381.41, 27: 1167.59, 28: 2832.83, 29: 2828.69, 30: 583.06, 31: 1484.86, 32: 3143.37, 33: 2573.32, 34: 2390.84, 35: 1315.77, 36: 3105.84, 37: 1218.66, 38: 2736.83, 39: 1772.88, 40: 3454.16, 41: 558.35, 42: 3033.49, 43: 2160.70, 44: 1667.89, 45: 2883.91, 46: 1154.67, 47: 3233.43, 48: 585.84, 49: 2247.50, 50: 1880.46, 51: 3123.47, 52: 589.48, 53: 1761.85, 54: 2493.48, 55: 216.11, 56: 2147.43, 57: 1446.36, 58: 1458.46, 59: 1963.97, 60: 1756.20, 61: 2074.35, 62: 741.97, 63: 1814.23, 64: 466.62, 65: 537.43, 66: 1178.52, 67: 2250.83, 68: 1808.88, 69: 807.82, 70: 3386.62, 71: 1170.94, 72: 2093.59, 73: 1382.49, 74: 236.54, 75: 3130.46, 76: 1863.10, 77: 3087.91, 78: 767.29, 79: 496.86, 80: 1892.73, 81: 2651.72, 82: 2499.12, 83: 1005.63, 84: 2388.43, 85: 2320.32, 86: 2018.75, 87: 801.51, 88: 702.12, 89: 633.91, 90: 1518.51, 91: 517.22, 92: 1184.40, 93: 960.49, 94: 2885.19, 95: 3020.02, 97: 1568.82, 98: 1531.28, 99: 3381.39},
97: {0: 782.65, 1: 1911.41, 2: 1786.24, 3: 1821.03, 4: 2373.91, 5: 1002.96, 6: 1009.76, 7: 1199.81, 8: 1013.98, 9: 1035.71, 10: 509.73, 11: 1005.56, 12: 2557.74, 13: 1962.03, 14: 565.10, 15: 1780.90, 16: 576.64, 17: 1525.91, 18: 1475.71, 19: 852.68, 20: 798.11, 21: 1846.20, 22: 107.94, 23: 1466.90, 24: 1098.60, 25: 2237.87, 26: 971.39, 27: 683.70, 28: 1666.23, 29: 1882.18, 30: 1648.81, 31: 312.08, 32: 2625.68, 33: 1365.77, 34: 909.80, 35: 1261.31, 36: 2390.97, 37: 1431.82, 38: 1937.54, 39: 1626.64, 40: 2233.29, 41: 1419.80, 42: 1733.23, 43: 1781.00, 44: 214.37, 45: 1649.00, 46: 429.69, 47: 2174.28, 48: 1043.92, 49: 1746.15, 50: 886.14, 51: 2248.08, 52: 1576.26, 53: 1703.84, 54: 1221.16, 55: 1575.54, 56: 918.58, 57: 758.98, 58: 858.59, 59: 446.23, 60: 942.89, 61: 590.41, 62: 847.93, 63: 1594.40, 64: 1961.57, 65: 1972.79, 66: 974.31, 67: 1525.71, 68: 1344.86, 69: 1960.62, 70: 2187.22, 71: 856.03, 72: 1572.38, 73: 804.61, 74: 1351.93, 75: 2660.11, 76: 454.58, 77: 2225.68, 78: 1471.24, 79: 1635.81, 80: 1146.61, 81: 2260.50, 82: 1237.55, 83: 1142.51, 84: 1581.89, 85: 893.01, 86: 932.62, 87: 1727.62, 88: 1536.58, 89: 1159.75, 90: 99.41, 91: 1079.10, 92: 636.13, 93: 1823.69, 94: 2495.57, 95: 2169.48, 96: 1568.82, 98: 1535.22, 99: 2227.58},
98: {0: 1468.25, 1: 3155.99, 2: 3314.92, 3: 1498.55, 4: 3863.27, 5: 1154.05, 6: 2544.23, 7: 1683.74, 8: 2546.21, 9: 725.83, 10: 1053.23, 11: 2532.48, 12: 3971.85, 13: 3495.99, 14: 1057.65, 15: 950.96, 16: 1044.89, 17: 572.55, 18: 1209.69, 19: 2381.77, 20: 738.24, 21: 963.97, 22: 1612.04, 23: 397.34, 24: 2528.22, 25: 1786.11, 26: 2480.05, 27: 1808.18, 28: 3201.24, 29: 3401.48, 30: 2044.10, 31: 1228.74, 32: 4052.05, 33: 2900.74, 34: 2380.32, 35: 299.71, 36: 3871.60, 37: 313.38, 38: 3426.82, 39: 2823.44, 40: 3757.60, 41: 1899.09, 42: 3249.06, 43: 3109.08, 44: 1423.14, 45: 3179.23, 46: 1274.12, 47: 3708.78, 48: 1130.76, 49: 3124.08, 50: 2368.50, 51: 3762.06, 52: 1000.95, 53: 2862.28, 54: 2753.43, 55: 1716.91, 56: 2452.44, 57: 2072.06, 58: 692.94, 59: 1941.00, 60: 2363.59, 61: 2092.00, 62: 1189.73, 63: 2825.98, 64: 1550.38, 65: 1469.63, 66: 2053.31, 67: 2972.74, 68: 2665.92, 69: 1150.02, 70: 3715.53, 71: 719.22, 72: 2944.44, 73: 732.32, 74: 1351.66, 75: 4070.66, 76: 1989.19, 77: 3736.75, 78: 782.97, 79: 1970.91, 80: 2567.31, 81: 3624.14, 82: 2770.59, 83: 593.33, 84: 3058.24, 85: 2399.08, 86: 2444.81, 87: 904.76, 88: 2079.50, 89: 955.07, 90: 1435.83, 91: 1482.21, 92: 1779.47, 93: 841.61, 94: 3869.06, 95: 3677.03, 96: 1531.28, 97: 1535.22, 99: 3760.45},
99: {0: 2643.49, 1: 1830.81, 2: 454.28, 3: 3701.25, 4: 894.15, 5: 3024.70, 6: 1231.35, 7: 2857.27, 8: 1240.42, 9: 3220.44, 10: 2712.87, 11: 1229.99, 12: 1395.55, 13: 268.17, 14: 2730.56, 15: 3889.77, 16: 2743.57, 17: 3711.65, 18: 3454.29, 19: 1379.06, 20: 3025.33, 21: 3959.55, 22: 2148.45, 23: 3678.59, 24: 1505.96, 25: 4071.99, 26: 1299.72, 27: 2235.90, 28: 569.17, 29: 643.69, 30: 3081.99, 31: 2531.71, 32: 1366.50, 33: 865.52, 34: 1437.03, 35: 3488.80, 36: 962.93, 37: 3652.28, 38: 874.65, 39: 1931.36, 40: 185.07, 41: 2921.37, 42: 571.83, 43: 1587.15, 44: 2344.83, 45: 583.67, 46: 2564.05, 47: 251.75, 48: 3071.77, 49: 1426.97, 50: 1515.14, 51: 642.22, 52: 3648.39, 53: 2018.09, 54: 1007.04, 55: 3262.84, 56: 1324.36, 57: 1940.76, 58: 3073.52, 59: 1827.90, 60: 1625.25, 61: 1679.02, 62: 2879.80, 63: 1852.72, 64: 3846.81, 65: 3903.56, 66: 2211.73, 67: 1227.37, 68: 1678.04, 69: 4029.17, 70: 121.43, 71: 3078.00, 72: 1477.01, 73: 3028.15, 74: 3249.33, 75: 1457.12, 76: 1773.05, 77: 671.32, 78: 3608.22, 79: 3132.05, 80: 1502.28, 81: 1512.41, 82: 990.12, 83: 3343.53, 84: 1074.01, 85: 1380.07, 86: 1390.86, 87: 3844.69, 88: 2895.38, 89: 3251.98, 90: 2326.86, 91: 2891.38, 92: 2231.58, 93: 3969.29, 94: 1546.39, 95: 703.29, 96: 3381.39, 97: 2227.58, 98: 3760.45}
}
Minimum spanning tree: (14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)
Odd vertices in minimum spanning tree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98]
Minimum weight matching: (14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (11, 85, 185.97), (46, 31, 361.33), (2, 42, 171.03), (65, 64, 114.77), (75, 32, 92.20), (83, 9, 140.04), (1, 53, 331.30), (40, 70, 82.68), (81, 38, 680.92), (77, 51, 40.00), (47, 29, 427.13), (59, 76, 191.02), (73, 58, 89.00), (21, 93, 133.65), (60, 68, 435.39), (98, 52, 1000.95), (96, 25, 702.16), (66, 27, 300.85), (69, 10, 1690.80), (92, 90, 662.12), (72, 34, 1440.49), (44, 16, 404.01)
Eulerian circuit: [14, 10, 69, 21, 93, 21, 15, 87, 52, 98, 35, 37, 23, 17, 78, 52, 18, 74, 96, 25, 64, 65, 64, 3, 96, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 9, 83, 9, 71, 20, 73, 58, 73, 10, 31, 46, 31, 90, 92, 27, 66, 27, 57, 60, 68, 80, 24, 60, 50, 86, 8, 6, 56, 19, 11, 85, 34, 72, 68, 63, 39, 53, 1, 43, 49, 72, 67, 84, 38, 81, 94, 12, 32, 75, 32, 36, 4, 77, 51, 77, 95, 38, 29, 47, 99, 70, 40, 70, 13, 2, 42, 2, 45, 28, 33, 82, 54, 11, 26, 85, 61, 59, 76, 59, 22, 97, 90, 44, 16, 14]
Result path: [14, 10, 69, 21, 93, 15, 87, 52, 98, 35, 37, 23, 17, 78, 18, 74, 96, 25, 64, 65, 3, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 9, 83, 71, 20, 73, 58, 31, 46, 90, 92, 27, 66, 57, 60, 68, 80, 24, 50, 86, 8, 6, 56, 19, 11, 85, 34, 72, 63, 39, 53, 1, 43, 49, 67, 84, 38, 81, 94, 12, 32, 75, 36, 4, 77, 51, 95, 29, 47, 99, 70, 40, 13, 2, 42, 45, 28, 33, 82, 54, 26, 61, 59, 76, 22, 97, 44, 16, 14]
Length of the result path: 26572.55
#!/usr/bin/tclsh
# --- Helper Functions ---
proc print_container {container name} {
puts "$name: \[[join $container ", "]\]"
}
proc print_edges {edges name} {
set edge_strings {}
foreach edge $edges {
lassign $edge u v weight
lappend edge_strings [format "(%d, %d, %.2f)" $u $v $weight]
}
puts "$name: \[[join $edge_strings ", "]\]"
}
proc print_graph {graph name} {
puts "$name: \{"
set n [llength $graph]
for {set i 0} {$i < $n} {incr i} {
set row [lindex $graph $i]
set pairs {}
for {set j 0} {$j < $n} {incr j} {
if {$i != $j} {
set val [lindex $row $j]
lappend pairs [format "%d: %.2f" $j $val]
}
}
set comma [expr {$i == $n-1 ? "" : ","}]
puts " $i: \{[join $pairs ", "]\}$comma"
}
puts "\}"
}
# --- Euclidean Distance ---
proc get_length {p1 p2} {
lassign $p1 x1 y1 id1
lassign $p2 x2 y2 id2
set dx [expr {$x1 - $x2}]
set dy [expr {$y1 - $y2}]
return [expr {sqrt($dx * $dx + $dy * $dy)}]
}
# --- Build Complete Graph (Adjacency Matrix) ---
proc build_graph {data} {
set n [llength $data]
set graph {}
for {set i 0} {$i < $n} {incr i} {
set row {}
for {set j 0} {$j < $n} {incr j} {
lappend row 0.0
}
lappend graph $row
}
for {set i 0} {$i < $n} {incr i} {
for {set j [expr {$i + 1}]} {$j < $n} {incr j} {
set dist [get_length [lindex $data $i] [lindex $data $j]]
set row_i [lindex $graph $i]
set row_j [lindex $graph $j]
lset row_i $j $dist
lset row_j $i $dist
lset graph $i $row_i
lset graph $j $row_j
}
}
return $graph
}
# --- Union-Find Data Structure ---
namespace eval UnionFind {
variable parent
variable rank
proc new {n} {
variable parent
variable rank
set ns [namespace current]
set parent($ns) {}
set rank($ns) {}
for {set i 0} {$i < $n} {incr i} {
lappend parent($ns) $i
lappend rank($ns) 0
}
return $ns
}
proc find {ns i} {
variable parent
variable rank
set pi [lindex $parent($ns) $i]
if {$pi != $i} {
set root [find $ns $pi]
set new_parent [lreplace $parent($ns) $i $i $root]
set parent($ns) $new_parent
return $root
}
return $i
}
proc unite {ns i j} {
variable parent
variable rank
set root_i [find $ns $i]
set root_j [find $ns $j]
if {$root_i != $root_j} {
set rank_i [lindex $rank($ns) $root_i]
set rank_j [lindex $rank($ns) $root_j]
if {$rank_i < $rank_j} {
set new_parent [lreplace $parent($ns) $root_i $root_i $root_j]
set parent($ns) $new_parent
} elseif {$rank_i > $rank_j} {
set new_parent [lreplace $parent($ns) $root_j $root_j $root_i]
set parent($ns) $new_parent
} else {
set new_parent [lreplace $parent($ns) $root_j $root_j $root_i]
set parent($ns) $new_parent
set new_rank [lreplace $rank($ns) $root_i $root_i [expr {$rank_i + 1}]]
set rank($ns) $new_rank
}
}
}
}
# --- Minimum Spanning Tree (Kruskal's Algorithm) ---
proc minimum_spanning_tree {graph} {
set n [llength $graph]
if {$n == 0} {
return {}
}
set edges {}
for {set i 0} {$i < $n} {incr i} {
for {set j [expr {$i + 1}]} {$j < $n} {incr j} {
set weight [lindex [lindex $graph $i] $j]
lappend edges [list $i $j $weight]
}
}
# Sort edges by weight
set edges [lsort -real -index 2 $edges]
set mst {}
set uf [UnionFind::new $n]
set edges_count 0
foreach edge $edges {
lassign $edge u v weight
if {[UnionFind::find $uf $u] != [UnionFind::find $uf $v]} {
lappend mst $edge
UnionFind::unite $uf $u $v
incr edges_count
if {$edges_count == [expr {$n - 1}]} {
break
}
}
}
return $mst
}
# --- Find Vertices with Odd Degree in MST ---
proc find_odd_vertexes {mst n} {
set degree {}
for {set i 0} {$i < $n} {incr i} {
lappend degree 0
}
foreach edge $mst {
lassign $edge u v weight
set degree_u [lindex $degree $u]
set degree_v [lindex $degree $v]
lset degree $u [expr {$degree_u + 1}]
lset degree $v [expr {$degree_v + 1}]
}
set odd_vertices {}
for {set i 0} {$i < $n} {incr i} {
if {[lindex $degree $i] % 2 != 0} {
lappend odd_vertices $i
}
}
return $odd_vertices
}
# --- Shuffle List (Fisher-Yates) ---
proc shuffle_list {list} {
set result [list]
foreach item $list {
set pos [expr {int(rand() * ([llength $result] + 1))}]
set result [linsert $result $pos $item]
}
return $result
}
# --- Minimum Weight Matching (Greedy Heuristic) ---
proc minimum_weight_matching {mst_var graph odd_vertices} {
upvar $mst_var mst
# Use a copy to allow modification while iterating
set current_odd [shuffle_list $odd_vertices]
# Keep track of vertices already matched in this phase
set n [llength $graph]
set matched {}
for {set i 0} {$i < $n} {incr i} {
lappend matched 0
}
for {set i 0} {$i < [llength $current_odd]} {incr i} {
set v [lindex $current_odd $i]
if {[lindex $matched $v]} {
continue
}
set min_length Inf
set closest_u -1
# Find the closest unmatched odd vertex
for {set j [expr {$i + 1}]} {$j < [llength $current_odd]} {incr j} {
set u [lindex $current_odd $j]
if {![lindex $matched $u]} {
set dist [lindex [lindex $graph $v] $u]
if {$dist < $min_length && $dist != "Inf"} {
set min_length $dist
set closest_u $u
}
}
}
if {$closest_u != -1} {
# Add the matching edge to the MST list (now a multigraph)
lappend mst [list $v $closest_u $min_length]
set matched_v [lreplace $matched $v $v 1]
set matched_u [lreplace $matched_v $closest_u $closest_u 1]
set matched $matched_u
}
}
}
# --- Find Eulerian Tour (Hierholzer's Algorithm) ---
proc find_eulerian_tour {matched_mst n} {
if {[llength $matched_mst] == 0} {
return {}
}
# Build adjacency list representation of the multigraph
set adj {}
for {set i 0} {$i < $n} {incr i} {
lappend adj {}
}
# Create a unique identifier for each edge to track usage
set edge_counter 0
array set edge_map {}
array set edge_used {}
foreach edge $matched_mst {
lassign $edge u v weight
set edge_id "edge_$edge_counter"
set edge_map($edge_id) $edge
set edge_used($edge_id) 0
incr edge_counter
# Add edge to adjacency list (both directions)
set adj_u [lindex $adj $u]
lappend adj_u [list $v $edge_id]
lset adj $u $adj_u
set adj_v [lindex $adj $v]
lappend adj_v [list $u $edge_id]
lset adj $v $adj_v
}
set tour {}
set current_path {}
# Start at any vertex with edges
lassign [lindex $matched_mst 0] start_u start_v start_weight
lappend current_path $start_u
while {[llength $current_path] > 0} {
set current_node [lindex $current_path end]
set found_edge 0
# Find an unused edge from the current node
set neighbors [lindex $adj $current_node]
set new_neighbors {}
foreach neighbor_info $neighbors {
lassign $neighbor_info neighbor edge_id
if {![info exists edge_used($edge_id)] || !$edge_used($edge_id)} {
if {!$found_edge} {
set edge_used($edge_id) 1
lappend current_path $neighbor
set found_edge 1
} else {
lappend new_neighbors $neighbor_info
}
} else {
lappend new_neighbors $neighbor_info
}
}
# Update adjacency list to remove used edges
lset adj $current_node $new_neighbors
# If no unused edge was found from current_node, backtrack
if {!$found_edge} {
set last_node [lindex $current_path end]
set current_path [lreplace $current_path end end]
lappend tour $last_node
}
}
# The tour is constructed in reverse order
set reversed_tour {}
for {set i [expr {[llength $tour] - 1}]} {$i >= 0} {incr i -1} {
lappend reversed_tour [lindex $tour $i]
}
return $reversed_tour
}
# --- Main TSP Function (Christofides Approximation) ---
proc tsp {data} {
set n [llength $data]
if {$n == 0} {
return [list 0.0 {}]
}
if {$n == 1} {
lassign [lindex $data 0] x y id
return [list 0.0 [list $id]]
}
# Build a graph
set G [build_graph $data]
# print_graph $G "Graph"
# Build a minimum spanning tree
set MSTree [minimum_spanning_tree $G]
print_edges $MSTree "MSTree"
# Find odd degree vertices
set odd_vertexes [find_odd_vertexes $MSTree $n]
print_container $odd_vertexes "Odd vertexes in MSTree"
# Add minimum weight matching edges
minimum_weight_matching MSTree $G $odd_vertexes
print_edges $MSTree "Minimum weight matching (MST + Matching Edges)"
# Find an Eulerian tour in the combined graph
set eulerian_tour [find_eulerian_tour $MSTree $n]
# Filter out invalid values from eulerian tour
set clean_tour {}
foreach node $eulerian_tour {
if {$node != "" && $node != "," && [string is integer $node]} {
lappend clean_tour $node
}
}
set eulerian_tour $clean_tour
print_container $eulerian_tour "Eulerian tour"
# --- Create Hamiltonian Circuit by Skipping Visited Nodes ---
if {[llength $eulerian_tour] == 0} {
puts "Error: Eulerian tour could not be found."
return [list -1.0 {}]
}
set path {}
set length 0.0
set visited {}
for {set i 0} {$i < $n} {incr i} {
lappend visited 0
}
set current [lindex $eulerian_tour 0]
lappend path $current
set visited_current [lreplace $visited $current $current 1]
set visited $visited_current
for {set i 1} {$i < [llength $eulerian_tour]} {incr i} {
set v [lindex $eulerian_tour $i]
# Validate that v is a proper integer
if {![string is integer $v] || $v < 0 || $v >= $n} {
continue
}
if {![lindex $visited $v]} {
lappend path $v
set visited_v [lreplace $visited $v $v 1]
set visited $visited_v
set length [expr {$length + [lindex [lindex $G $current] $v]}]
set current $v
}
}
# Add the edge back to the start (only if we have a valid path)
if {[llength $path] > 0} {
set length [expr {$length + [lindex [lindex $G $current] [lindex $path 0]]}]
lappend path [lindex $path 0]
}
print_container $path "Result path"
puts [format "Result length of the path: %.2f" $length]
return [list $length $path]
}
# --- Main Program ---
# Input data matching the C++ example
set raw_data {
{1380 939} {2848 96} {3510 1671} {457 334} {3888 666} {984 965} {2721 1482} {1286 525}
{2716 1432} {738 1325} {1251 1832} {2728 1698} {3815 169} {3683 1533} {1247 1945} {123 862}
{1234 1946} {252 1240} {611 673} {2576 1676} {928 1700} {53 857} {1807 1711} {274 1420}
{2574 946} {178 24} {2678 1825} {1795 962} {3384 1498} {3520 1079} {1256 61} {1424 1728}
{3913 192} {3085 1528} {2573 1969} {463 1670} {3875 598} {298 1513} {3479 821} {2542 236}
{3955 1743} {1323 280} {3447 1830} {2936 337} {1621 1830} {3373 1646} {1393 1368}
{3874 1318} {938 955} {3022 474} {2482 1183} {3854 923} {376 825} {2519 135} {2945 1622}
{953 268} {2628 1479} {2097 981} {890 1846} {2139 1806} {2421 1007} {2290 1810} {1115 1052}
{2588 302} {327 265} {241 341} {1917 687} {2991 792} {2573 599} {19 674} {3911 1673}
{872 1559} {2863 558} {929 1766} {839 620} {3893 102} {2178 1619} {3822 899} {378 1048}
{1178 100} {2599 901} {3416 143} {2961 1605} {611 1384} {3113 885} {2597 1830} {2586 1286}
{161 906} {1429 134} {742 1025} {1625 1651} {1187 706} {1787 1009} {22 987} {3640 43}
{3756 882} {776 392} {1724 1642} {198 1810} {3950 1558}
}
set data_points {}
for {set i 0} {$i < [llength $raw_data]} {incr i} {
set point [lindex $raw_data $i]
lassign $point x y
lappend data_points [list $x $y $i]
}
tsp $data_points
- Output:
MSTree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)] Odd vertexes in MSTree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98] Minimum weight matching (MST + Matching Edges): [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (70, 40, 82.68), (2, 42, 171.03), (64, 65, 114.77), (51, 77, 40.00), (92, 27, 47.68), (93, 21, 133.65), (38, 29, 261.24), (52, 69, 387.62), (72, 68, 292.88), (98, 83, 593.33), (53, 1, 331.30), (10, 16, 115.26), (11, 85, 185.97), (47, 32, 1126.68), (66, 60, 597.01), (59, 76, 191.02), (75, 81, 478.76), (46, 31, 361.33), (44, 90, 179.04), (9, 73, 480.59), (96, 25, 702.16), (34, 58, 1687.49)] Eulerian tour: [14, 16, 10, 31, 46, 31, 90, 44, 90, 97, 22, 59, 76, 59, 61, 85, 26, 11, 19, 56, 6, 8, 86, 50, 60, 57, 27, 92, 27, 66, 60, 24, 80, 68, 72, 49, 43, 1, 53, 39, 63, 68, 72, 67, 84, 38, 29, 38, 95, 77, 51, 77, 4, 36, 32, 75, 81, 94, 12, 32, 47, 99, 70, 40, 70, 13, 2, 42, 2, 45, 28, 33, 82, 54, 11, 85, 34, 58, 73, 20, 71, 9, 83, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 93, 21, 69, 52, 18, 74, 96, 3, 64, 65, 64, 25, 96, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 9, 73, 10, 14] Result path: [14, 16, 10, 31, 46, 90, 44, 97, 22, 59, 76, 61, 85, 26, 11, 19, 56, 6, 8, 86, 50, 60, 57, 27, 92, 66, 24, 80, 68, 72, 49, 43, 1, 53, 39, 63, 67, 84, 38, 29, 95, 77, 51, 4, 36, 32, 75, 81, 94, 12, 47, 99, 70, 40, 13, 2, 42, 45, 28, 33, 82, 54, 34, 58, 73, 20, 71, 9, 83, 98, 35, 37, 23, 17, 78, 52, 87, 15, 21, 93, 69, 18, 74, 96, 3, 64, 65, 25, 55, 79, 30, 88, 41, 7, 91, 0, 62, 5, 48, 89, 14] Result length of the path: 25719.11
import "./dynamic" for Struct
import "./set" for Set
import "random" for Random
/* Helper structs. */
var Point = Struct.create("Point", ["x", "y", "id"])
var Edge = Struct.create("Edge", ["u", "v", "weight", "id"])
var Neighbor = Struct.create("Neighbor", ["neighbor", "edgeId"])
/* Random number generator. */
var rand = Random.new()
/* Helper functions. */
var toFixed2 = Fn.new { |f| (f * 100).round / 100 }
var printContainer = Fn.new { |container, name|
System.print("%(name): [%(container.join(", "))]")
}
var printEdges = Fn.new { |edges, name|
var edgeStrings = edges.map { |e| "%(e.u), %(e.v), %(toFixed2.call(e.weight))" }
System.print("%(name): [%(edgeStrings.join(", "))]")
}
var printGraph = Fn.new { |graph, name|
System.print("%(name): {")
var n = graph.count
for (i in 0...n) {
var entries = []
for (j in 0...n) {
if (i != j) entries.add("%(j): %(toFixed2.call(graph[i][j]))")
}
System.print(" %(i): {%(entries.join(", "))}%(i == n - 1 ? "" : ",")")
}
System.print("}")
}
/* Euclidean distance. */
var getLength = Fn.new { |p1, p2|
var dx = p1.x - p2.x
var dy = p1.y - p2.y
return (dx * dx + dy * dy).sqrt
}
/* Build Complete Graph (Adjacency Matrix). */
var buildGraph = Fn.new { |data|
var n = data.count
// Initialize n x n list with 0's.
var graph = List.filled(n, null)
for (i in 0...n) graph[i] = List.filled(n, 0)
for (i in 0...n) {
// Only calculate upper triangle.
var j = i + 1
while (j < n) {
var dist = getLength.call(data[i], data[j])
graph[i][j] = dist
graph[j][i] = dist // symmetric graph
j = j + 1
}
}
return graph
}
/* Union-Find Data Structure. */
class UnionFind {
construct new(n) {
// Initialize parent list: each node is its own parent.
_parent = List.filled(n, 0)
for (i in 0...n) _parent[i] = i
// Initialize rank (or size) list for optimization.
_rank = List.filled(n, 0)
}
find(i) {
if (_parent[i] == i) return i
// Path compression: point directly to the root.
_parent[i] = find(_parent[i])
return _parent[i]
}
unite(i, j) {
var rootI = find(i)
var rootJ = find(j)
if (rootI != rootJ) {
// Union by rank: attach smaller rank tree under larger rank tree.
if (_rank[rootI] < _rank[rootJ]) {
_parent[rootI] = rootJ
} else if (_rank[rootI] > _rank[rootJ]) {
_parent[rootJ] = rootI
} else {
// Ranks are equal, choose one as parent and increment its rank.
_parent[rootJ] = rootI
_rank[rootI] = _rank[rootI] + 1
}
return true // successfully united
}
return false // already in the same set
}
}
/* Minimum Spanning Tree (Kruskal's Algorithm). */
var minimumSpanningTree = Fn.new { |graph|
var n = graph.count
if (n == 0) return []
var edges = []
for (i in 0...n) {
// Avoid duplicates and self-loops.
var j = i + 1
while (j < n) {
edges.add(Edge.new(i, j, graph[i][j], null))
j = j + 1
}
}
// Sort edges by weight in ascending order.
edges.sort { |a, b| a.weight < b.weight }
var mst = []
var uf = UnionFind.new(n)
var edgesCount = 0
for (edge in edges) {
// If uniting forms a new connection:
if (uf.unite(edge.u, edge.v)) {
mst.add(edge)
edgesCount = edgesCount + 1
if (edgesCount == n - 1) break // optimization: MST has n-1 edges
}
}
return mst
}
/* Find Vertices with Odd Degree in MST. */
var findOddVertices = Fn.new { |mst, n|
var degree = List.filled(n, 0)
for (edge in mst) {
degree[edge.u] = degree[edge.u] + 1
degree[edge.v] = degree[edge.v] + 1
}
var oddVertices = []
for (i in 0...n) {
if (degree[i] % 2 != 0) oddVertices.add(i)
}
return oddVertices
}
/* Minimum Weight Matching (Greedy Heuristic)
Fisher-Yates (Knuth) Shuffle algorithm. */
var shuffleArray = Fn.new { |array|
rand.shuffle(array) // uses F-Y uder the hood
}
// Note: This modifies the mst array by adding matching edges.
var minimumWeightMatching = Fn.new { |mst, graph, oddVertices|
// Shuffle for randomness.
shuffleArray.call(oddVertices)
// Keep track of vertices already matched in this phase.
var matched = Set.new()
for (i in 0...oddVertices.count) {
var v = oddVertices[i]
if (matched.contains(v)) continue // skip if already matched
var minLength = Num.infinity
var closestU = -1
// Find the closest *unmatched* odd vertex.
var j = i + 1
while (j < oddVertices.count) {
var u = oddVertices[j]
if (!matched.contains(u)) { // check if 'u' is available
if (graph[v][u] < minLength) {
minLength = graph[v][u]
closestU = u
}
}
j = j + 1
}
if (closestU != -1) {
// Add the matching edge to the MST list (now a multigraph).
mst.add(Edge.new(v, closestU, minLength, null))
matched.add(v)
matched.add(closestU) // mark both as matched
}
// Christofides guarantees an even number of odd-degree vertices,
// so every vertex *should* find a match in a perfect matching scenario.
// The greedy approach might leave some unmatched if not careful,
// but this loop structure should work.
}
}
/* Find Eulerian Tour (Hierholzer's Algorithm). */
var findEulerianTour = Fn.new { |matchedMST, n|
if (matchedMST.isEmpty) return []
// Assign unique IDs to edges for tracking in the multigraph
// (essential because multiple edges can exist between nodes).
for (i in 0...matchedMST.count) matchedMST[i].id = i
// Build adjacency list.
var adj = List.filled(n, null)
for (i in 0...n) adj[i] = []
var edgeUsed = Set.new() // store used edge IDs
for (edge in matchedMST) {
adj[edge.u].add(Neighbor.new(edge.v, edge.id))
adj[edge.v].add(Neighbor.new(edge.u, edge.id))
}
var tour = []
var stack = []
// Start at any vertex with edges (guaranteed to exist if matchedMST is not empty).
var startNode = matchedMST[0].u
stack.add(startNode)
var currentNode = startNode
while (!stack.isEmpty) {
currentNode = stack[-1] // peek top of stack
var foundUnusedEdge = false
// Check outgoing edges from currentNode.
while (!adj[currentNode].isEmpty) {
// Look at last edge (efficient removal).
var edgeInfo = adj[currentNode][adj[currentNode].count - 1]
if (!edgeUsed.contains(edgeInfo.edgeId)) {
// Found an unused edge.
edgeUsed.add(edgeInfo.edgeId) // mark edge as used
stack.add(edgeInfo.neighbor) // push neighbor onto stack
adj[currentNode].removeAt(-1) // remove edge for current node's list
currentNode = edgeInfo.neighbor // move to the neighbor
foundUnusedEdge = true
break // break inner loop to process the new currentNode
} else {
// This edge was already used (by traversal from the other side), remove it.
adj[currentNode].removeAt(-1)
}
}
if (!foundUnusedEdge) {
// If no unused edges from currentNode, backtrack.
tour.add(stack.removeAt(-1))
}
}
// The tour is constructed in reverse order by Hierholzer's algorithm.
return tour[-1..0]
}
/* Main TSP Function (Christofides Approximation). */
var tsp = Fn.new { |data|
var n = data.count
if (n == 0) return [0, []]
if (n == 1) {
// If data points have explicit IDs use them, otherwise use index 0.
var startId = data[0].id ? data[0].id : 0
return [0, [startId]]
}
// Assign IDs if they don't exist, assuming order corresponds to 0..n-1.
for (i in 0...data.count) if (!data[i].id) data[i].id = i
System.print("Bulding graph...")
var G = buildGraph.call(data)
// printGraph.call(G, "Graph") // often too large to print meaningfully
System.print("\nFinding Minimum Spanning Tree...")
var MSTree = minimumSpanningTree.call(G)
printEdges.call(MSTree, "MSTree")
System.print("\nFinding odd degree vertices...")
var oddVertices = findOddVertices.call(MSTree, n)
printContainer.call(oddVertices, "Odd vertices in MSTree")
System.print("\nFinding Minimum Weight Matching (greedy)...")
// Create a new list containing MST edges to avoid modifying the original
// MSTree variable directly. The matching edges will be added to this new list.
var multigraphEdges = MSTree.toList
// Pass a copy of oddVertices as it might be shuffled in place.
minimumWeightMatching.call(multigraphEdges, G, oddVertices.toList)
printEdges.call(multigraphEdges, "Minimum weight matching (MST + Matching Edges)")
System.print("\nFinding Eulerian Tour...")
var eulerianTour = findEulerianTour.call(multigraphEdges, n)
printContainer.call(eulerianTour, "Eulerian tour")
/* Create Hamiltonian Circuit by Skipping Visited Nodes. */
if (eulerianTour.isEmpty && n > 0) {
System.print("Error: Eulerian tour could not be found.")
return [-1, []] // indicate error
}
System.print("\nCreating Hamiltonian path (shortcutting)...")
var path = []
var length = 0
var visited = Set.new() // use Set for efficient O(1) average time complexity checks
var currentPathNode = -1 // track the last node added to the *Hamiltonian* path
for (node in eulerianTour) {
if (!visited.contains(node)) {
path.add(node)
visited.add(node)
if (currentPathNode != -1) { // add edge length from the previous node *in the path*
length = length + G[currentPathNode][node]
}
currentPathNode = node // update the last node added to the path
}
}
// Add the edge back to the start to complete the cycle.
if (!path.isEmpty) {
// Edge from last node in path to first node.
length = length + G[currentPathNode][path[0]]
// Add the starting node again to show the cycle.
path.add(path[0])
}
printContainer.call(path, "Result path")
System.print("Result length of the path: %(toFixed2.call(length))")
}
// Input Data
var rawData = [
[1380, 939], [2848, 96], [3510, 1671], [457, 334], [3888, 666], [984, 965], [2721, 1482], [1286, 525],
[2716, 1432], [738, 1325], [1251, 1832], [2728, 1698], [3815, 169], [3683, 1533], [1247, 1945], [123, 862],
[1234, 1946], [252, 1240], [611, 673], [2576, 1676], [928, 1700], [53, 857], [1807, 1711], [274, 1420],
[2574, 946], [178, 24], [2678, 1825], [1795, 962], [3384, 1498], [3520, 1079], [1256, 61], [1424, 1728],
[3913, 192], [3085, 1528], [2573, 1969], [463, 1670], [3875, 598], [298, 1513], [3479, 821], [2542, 236],
[3955, 1743], [1323, 280], [3447, 1830], [2936, 337], [1621, 1830], [3373, 1646], [1393, 1368],
[3874, 1318], [938, 955], [3022, 474], [2482, 1183], [3854, 923], [376, 825], [2519, 135], [2945, 1622],
[953, 268], [2628, 1479], [2097, 981], [890, 1846], [2139, 1806], [2421, 1007], [2290, 1810], [1115, 1052],
[2588, 302], [327, 265], [241, 341], [1917, 687], [2991, 792], [2573, 599], [19, 674], [3911, 1673],
[872, 1559], [2863, 558], [929, 1766], [839, 620], [3893, 102], [2178, 1619], [3822, 899], [378, 1048],
[1178, 100], [2599, 901], [3416, 143], [2961, 1605], [611, 1384], [3113, 885], [2597, 1830], [2586, 1286],
[161, 906], [1429, 134], [742, 1025], [1625, 1651], [1187, 706], [1787, 1009], [22, 987], [3640, 43],
[3756, 882], [776, 392], [1724, 1642], [198, 1810], [3950, 1558]
]
// Convert raw data to Point objects, using index as ID.
var dataPoints = (0...rawData.count).map { |i|
var x = rawData[i][0]
var y = rawData[i][1]
var id = i // Use 0-based index as the vertex ID
return Point.new(x, y, id)
}.toList
// Runs TSP
tsp.call(dataPoints)
- Output:
Sample run.
Bulding graph... Finding Minimum Spanning Tree... MSTree: [14, 16, 13.04, 54, 82, 23.35, 51, 77, 40, 5, 48, 47.07, 27, 92, 47.68, 6, 8, 50.25, 24, 80, 51.48, 15, 87, 58.14, 20, 73, 66.01, 77, 95, 68.15, 4, 36, 69.23, 15, 21, 70.18, 39, 63, 80.45, 26, 85, 81.15, 40, 70, 82.68, 30, 79, 87.21, 58, 73, 89, 32, 75, 92.2, 6, 56, 93.05, 23, 37, 96.05, 90, 97, 99.41, 12, 32, 100.66, 39, 53, 103.59, 22, 97, 107.94, 10, 14, 113.07, 64, 65, 114.77, 70, 99, 121.43, 21, 93, 133.65, 11, 26, 136.49, 2, 45, 139.26, 9, 83, 140.04, 34, 85, 141.06, 33, 82, 145.96, 50, 86, 146.37, 3, 64, 147.18, 28, 45, 148.41, 59, 61, 151.05, 20, 71, 151.71, 67, 84, 153.4, 11, 19, 153.58, 5, 62, 157.26, 43, 49, 161.76, 24, 60, 164.71, 2, 42, 171.03, 44, 90, 179.04, 49, 72, 179.82, 41, 88, 180.42, 17, 23, 181.34, 21, 69, 186.13, 50, 60, 186.27, 30, 88, 187.77, 59, 76, 191.02, 8, 86, 195.49, 10, 31, 201.85, 19, 56, 203.75, 7, 91, 206.31, 48, 89, 208.12, 31, 90, 215.24, 12, 94, 215.64, 55, 96, 216.11, 2, 13, 221.3, 52, 78, 223.01, 35, 37, 227.76, 17, 78, 229.65, 52, 87, 229.75, 11, 54, 229.92, 18, 74, 234.08, 74, 96, 236.54, 4, 77, 242.17, 81, 94, 245.31, 7, 41, 247.78, 47, 99, 251.75, 1, 43, 256.56, 29, 38, 261.24, 67, 72, 266.72, 13, 70, 267.55, 9, 71, 269.65, 18, 52, 279.87, 55, 79, 280.8, 25, 64, 283.34, 38, 95, 283.64, 0, 62, 288.09, 68, 72, 292.88, 63, 68, 297.38, 35, 98, 299.71, 9, 89, 300.03, 28, 33, 300.5, 27, 66, 300.85, 0, 91, 302.55, 27, 57, 302.6, 68, 80, 303.12, 61, 85, 307.65, 3, 96, 324.23, 57, 60, 325.04, 10, 73, 328.69, 22, 59, 345.32, 31, 46, 361.33, 38, 84, 371.55, 32, 36, 407.77] Finding odd degree vertices... Odd vertices in MSTree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98] Finding Minimum Weight Matching (greedy)... Minimum weight matching (MST + Matching Edges): [14, 16, 13.04, 54, 82, 23.35, 51, 77, 40, 5, 48, 47.07, 27, 92, 47.68, 6, 8, 50.25, 24, 80, 51.48, 15, 87, 58.14, 20, 73, 66.01, 77, 95, 68.15, 4, 36, 69.23, 15, 21, 70.18, 39, 63, 80.45, 26, 85, 81.15, 40, 70, 82.68, 30, 79, 87.21, 58, 73, 89, 32, 75, 92.2, 6, 56, 93.05, 23, 37, 96.05, 90, 97, 99.41, 12, 32, 100.66, 39, 53, 103.59, 22, 97, 107.94, 10, 14, 113.07, 64, 65, 114.77, 70, 99, 121.43, 21, 93, 133.65, 11, 26, 136.49, 2, 45, 139.26, 9, 83, 140.04, 34, 85, 141.06, 33, 82, 145.96, 50, 86, 146.37, 3, 64, 147.18, 28, 45, 148.41, 59, 61, 151.05, 20, 71, 151.71, 67, 84, 153.4, 11, 19, 153.58, 5, 62, 157.26, 43, 49, 161.76, 24, 60, 164.71, 2, 42, 171.03, 44, 90, 179.04, 49, 72, 179.82, 41, 88, 180.42, 17, 23, 181.34, 21, 69, 186.13, 50, 60, 186.27, 30, 88, 187.77, 59, 76, 191.02, 8, 86, 195.49, 10, 31, 201.85, 19, 56, 203.75, 7, 91, 206.31, 48, 89, 208.12, 31, 90, 215.24, 12, 94, 215.64, 55, 96, 216.11, 2, 13, 221.3, 52, 78, 223.01, 35, 37, 227.76, 17, 78, 229.65, 52, 87, 229.75, 11, 54, 229.92, 18, 74, 234.08, 74, 96, 236.54, 4, 77, 242.17, 81, 94, 245.31, 7, 41, 247.78, 47, 99, 251.75, 1, 43, 256.56, 29, 38, 261.24, 67, 72, 266.72, 13, 70, 267.55, 9, 71, 269.65, 18, 52, 279.87, 55, 79, 280.8, 25, 64, 283.34, 38, 95, 283.64, 0, 62, 288.09, 68, 72, 292.88, 63, 68, 297.38, 35, 98, 299.71, 9, 89, 300.03, 28, 33, 300.5, 27, 66, 300.85, 0, 91, 302.55, 27, 57, 302.6, 68, 80, 303.12, 61, 85, 307.65, 3, 96, 324.23, 57, 60, 325.04, 10, 73, 328.69, 22, 59, 345.32, 31, 46, 361.33, 38, 84, 371.55, 32, 36, 407.77, 98, 83, 593.33, 58, 73, 89, 52, 21, 324.58, 42, 2, 171.03, 81, 75, 478.76, 93, 69, 313.01, 25, 64, 283.34, 70, 40, 82.68, 34, 85, 141.06, 65, 96, 537.43, 16, 10, 115.26, 68, 72, 292.88, 59, 76, 191.02, 92, 27, 47.68, 29, 38, 261.24, 9, 46, 656.41, 53, 1, 331.3, 51, 77, 40, 47, 32, 1126.68, 90, 44, 179.04, 11, 60, 756.13, 31, 66, 1151.84] Finding Eulerian Tour... Eulerian tour: [14, 10, 73, 58, 73, 20, 71, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 65, 64, 25, 64, 3, 96, 74, 18, 52, 21, 69, 93, 21, 15, 87, 52, 78, 17, 23, 37, 35, 98, 83, 9, 46, 31, 66, 27, 92, 27, 57, 60, 11, 54, 82, 33, 28, 45, 2, 42, 2, 13, 70, 40, 70, 99, 47, 32, 12, 94, 81, 75, 32, 36, 4, 77, 51, 77, 95, 38, 29, 38, 84, 67, 72, 68, 63, 39, 53, 1, 43, 49, 72, 68, 80, 24, 60, 50, 86, 8, 6, 56, 19, 11, 26, 85, 34, 85, 61, 59, 76, 59, 22, 97, 90, 44, 90, 31, 10, 16, 14] Creating Hamiltonian path (shortcutting)... Result path: [14, 10, 73, 58, 20, 71, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 65, 64, 25, 3, 74, 18, 52, 21, 69, 93, 15, 87, 78, 17, 23, 37, 35, 98, 83, 46, 31, 66, 27, 92, 57, 60, 11, 54, 82, 33, 28, 45, 2, 42, 13, 70, 40, 99, 47, 32, 12, 94, 81, 75, 36, 4, 77, 51, 95, 38, 29, 84, 67, 72, 68, 63, 39, 53, 1, 43, 49, 80, 24, 50, 86, 8, 6, 56, 19, 26, 85, 34, 61, 59, 76, 22, 97, 90, 44, 16, 14] Result length of the path: 25358.71
const std = @import("std");
const math = std.math;
const Allocator = std.mem.Allocator;
const ArrayList = std.ArrayList;
const AutoHashMap = std.AutoHashMap;
// Add this near the top with your other struct definitions
const EulerianAdjEntry = struct {
neighbor: usize,
edge_idx: usize
};
// --- Structs ---
const Point = struct {
id: usize, // Original index or assigned ID
x: f64,
y: f64,
pub fn init(id: usize, x: f64, y: f64) Point {
return .{ .id = id, .x = x, .y = y };
}
};
const Edge = struct {
u: usize,
v: usize,
weight: f64,
pub fn init(u: usize, v: usize, weight: f64) Edge {
return .{ .u = u, .v = v, .weight = weight };
}
// Comparison function for sorting edges by weight
pub fn lessThan(_: void, a: Edge, b: Edge) bool {
return a.weight < b.weight;
}
};
// --- Helper Functions ---
fn printUsizeVec(vec: []const usize, name: []const u8) void {
std.debug.print("{s}: [", .{name});
for (vec, 0..) |x, i| {
if (i > 0) std.debug.print(", ", .{});
std.debug.print("{}", .{x});
}
std.debug.print("]\n", .{});
}
fn printEdges(edges: []const Edge, name: []const u8) void {
std.debug.print("{s}: [", .{name});
for (edges, 0..) |e, i| {
if (i > 0) std.debug.print(", ", .{});
std.debug.print("({}, {}, {d:.2})", .{e.u, e.v, e.weight});
}
std.debug.print("]\n", .{});
}
fn printGraph(graph: []const []const f64, name: []const u8) void {
std.debug.print("{s}: {{\n", .{name});
const n = graph.len;
for (0..n) |i| {
std.debug.print(" {}: {{", .{i});
var first = true;
for (0..n) |j| {
if (i == j) continue;
if (!first) std.debug.print(", ", .{});
std.debug.print("{}: {d:.2}", .{j, graph[i][j]});
first = false;
}
std.debug.print("}}{s}\n", .{if (i == n - 1) "" else ","});
}
std.debug.print("}}\n", .{});
}
// --- Euclidean Distance ---
fn getLength(p1: Point, p2: Point) f64 {
const dx = p1.x - p2.x;
const dy = p1.y - p2.y;
return @sqrt(dx * dx + dy * dy);
}
// --- Build Complete Graph (Adjacency Matrix) ---
fn buildGraph(allocator: Allocator, data: []const Point) ![][]f64 {
const n = data.len;
var graph = try allocator.alloc([]f64, n);
errdefer {
for (0..graph.len) |i| {
allocator.free(graph[i]);
}
allocator.free(graph);
}
for (0..n) |i| {
graph[i] = try allocator.alloc(f64, n);
@memset(graph[i], 0.0);
}
for (0..n) |i| {
for (i + 1..n) |j| { // Only calculate upper triangle
const dist = getLength(data[i], data[j]);
graph[i][j] = dist;
graph[j][i] = dist; // Symmetric graph
}
}
return graph;
}
// --- Union-Find Data Structure ---
const UnionFind = struct {
parent: []usize,
rank: []usize,
allocator: Allocator,
pub fn init(allocator: Allocator, n: usize) !UnionFind {
var parent = try allocator.alloc(usize, n);
errdefer allocator.free(parent);
var rank = try allocator.alloc(usize, n);
errdefer allocator.free(rank);
for (0..n) |i| {
parent[i] = i;
rank[i] = 0;
}
return UnionFind{
.parent = parent,
.rank = rank,
.allocator = allocator,
};
}
pub fn deinit(self: *UnionFind) void {
self.allocator.free(self.parent);
self.allocator.free(self.rank);
}
pub fn find(self: *UnionFind, i: usize) usize {
if (self.parent[i] == i) {
return i;
} else {
// Path compression
self.parent[i] = self.find(self.parent[i]);
return self.parent[i];
}
}
pub fn unite(self: *UnionFind, i: usize, j: usize) bool {
const root_i = self.find(i);
const root_j = self.find(j);
if (root_i != root_j) {
// Union by rank
if (self.rank[root_i] < self.rank[root_j]) {
self.parent[root_i] = root_j;
} else if (self.rank[root_i] > self.rank[root_j]) {
self.parent[root_j] = root_i;
} else {
self.parent[root_j] = root_i;
self.rank[root_i] += 1;
}
return true;
} else {
return false;
}
}
};
// --- Minimum Spanning Tree (Kruskal's Algorithm) ---
fn minimumSpanningTree(allocator: Allocator, graph: []const []const f64) ![]Edge {
const n = graph.len;
if (n == 0) {
return &[_]Edge{};
}
var edges = ArrayList(Edge).init(allocator);
defer edges.deinit();
for (0..n) |i| {
for (i + 1..n) |j| { // Avoid duplicates and self-loops
try edges.append(Edge.init(i, j, graph[i][j]));
}
}
// Sort edges by weight
std.sort.heap(Edge, edges.items, {}, Edge.lessThan);
var mst = ArrayList(Edge).init(allocator);
errdefer mst.deinit();
var uf = try UnionFind.init(allocator, n);
defer uf.deinit();
var edges_count: usize = 0;
for (edges.items) |edge| {
if (uf.unite(edge.u, edge.v)) {
try mst.append(edge);
edges_count += 1;
if (edges_count == n - 1) { // Optimization: MST has n-1 edges
break;
}
}
}
return mst.toOwnedSlice();
}
// --- Find Vertices with Odd Degree in MST ---
fn findOddVertexes(allocator: Allocator, mst: []const Edge, n: usize) ![]usize {
var degree = try allocator.alloc(usize, n);
defer allocator.free(degree);
@memset(degree, 0);
for (mst) |edge| {
degree[edge.u] += 1;
degree[edge.v] += 1;
}
var odd_vertices = ArrayList(usize).init(allocator);
errdefer odd_vertices.deinit();
for (0..n) |i| {
if (degree[i] % 2 != 0) {
try odd_vertices.append(i);
}
}
return odd_vertices.toOwnedSlice();
}
// --- Minimum Weight Matching (Greedy Heuristic) ---
fn minimumWeightMatching(
allocator: Allocator,
multigraph_edges: *ArrayList(Edge),
graph: []const []const f64,
odd_vertices: []const usize,
) !void {
const n = graph.len;
if (odd_vertices.len == 0) {
return;
}
var rand = std.Random.DefaultPrng.init(@as(u64, @intCast(std.time.milliTimestamp())));
var prng = rand.random();
// Clone and shuffle odd_vertices
var current_odd = ArrayList(usize).init(allocator);
defer current_odd.deinit();
try current_odd.appendSlice(odd_vertices);
// Shuffle the array
for (0..current_odd.items.len) |i| {
const j = prng.intRangeLessThan(usize, 0, current_odd.items.len);
std.mem.swap(usize, ¤t_odd.items[i], ¤t_odd.items[j]);
}
var matched = try allocator.alloc(bool, n);
defer allocator.free(matched);
@memset(matched, false);
var processed = try allocator.alloc(bool, current_odd.items.len);
defer allocator.free(processed);
@memset(processed, false);
for (0..current_odd.items.len) |i| {
if (processed[i]) continue; // Skip if already processed (matched)
const v = current_odd.items[i];
var min_length = math.inf(f64);
var closest_u_idx: ?usize = null; // Store index in current_odd
// Find the closest *unmatched* odd vertex *later* in the shuffled list
for (i + 1..current_odd.items.len) |j| {
if (!processed[j]) { // Check if 'u' (at current_odd[j]) is available
const u = current_odd.items[j];
if (graph[v][u] < min_length) {
min_length = graph[v][u];
closest_u_idx = j;
}
}
}
if (closest_u_idx) |j| {
const u = current_odd.items[j];
// Add the matching edge to the MST list (now a multigraph)
try multigraph_edges.append(Edge.init(v, u, min_length));
// Mark both as processed in the shuffled list context
processed[i] = true;
processed[j] = true;
// Mark in the global 'matched' array
matched[v] = true;
matched[u] = true;
} else {
// This *shouldn't* happen in Christofides as the number of odd vertices is always even.
// If it does, it might indicate an issue earlier or a graph where matching isn't possible?
std.log.err("Warning: Could not find match for odd vertex {} in greedy matching.", .{v});
}
}
}
// --- Find Eulerian Tour (Hierholzer's Algorithm) ---
// Then in the findEulerianTour function, modify this section:
fn findEulerianTour(allocator: Allocator, multigraph_edges: []const Edge, n: usize) ![]usize {
if (multigraph_edges.len == 0) {
return &[_]usize{};
}
// Build adjacency list: adj[u] = Vec<(neighbor, edge_index)>
var adj = try allocator.alloc(ArrayList(EulerianAdjEntry), n);
defer {
for (0..n) |i| {
adj[i].deinit();
}
allocator.free(adj);
}
for (0..n) |i| {
adj[i] = ArrayList(EulerianAdjEntry).init(allocator);
}
for (multigraph_edges, 0..) |edge, edge_idx| {
try adj[edge.u].append(.{ .neighbor = edge.v, .edge_idx = edge_idx });
try adj[edge.v].append(.{ .neighbor = edge.u, .edge_idx = edge_idx });
}
var edge_used = try allocator.alloc(bool, multigraph_edges.len);
defer allocator.free(edge_used);
@memset(edge_used, false);
var tour = ArrayList(usize).init(allocator);
errdefer tour.deinit();
var stack = ArrayList(usize).init(allocator);
defer stack.deinit();
// Start at any vertex with edges
const start_node = multigraph_edges[0].u;
try stack.append(start_node);
while (stack.items.len > 0) {
const current_node = stack.items[stack.items.len - 1];
var found_edge = false;
// Try to find an unused edge
while (adj[current_node].items.len > 0) {
const last_idx = adj[current_node].items.len - 1;
const item = adj[current_node].items[last_idx];
const neighbor = item.neighbor;
const edge_idx = item.edge_idx;
_ = adj[current_node].pop();
if (!edge_used[edge_idx]) {
edge_used[edge_idx] = true;
try stack.append(neighbor);
found_edge = true;
break; // Move to the neighbor
}
// If edge was used, loop continues popping from adj[current_node]
}
// If no unused edge was found from current_node
if (!found_edge) {
try tour.append(stack.pop().?);
}
}
// Reverse the tour
std.mem.reverse(usize, tour.items);
return tour.toOwnedSlice();
}
// --- Main TSP Function (Christofides Approximation) ---
fn tsp(allocator: Allocator, data: []const Point) !struct { length: f64, path: []usize } {
const n = data.len;
if (n == 0) {
return .{ .length = 0.0, .path = &[_]usize{} };
}
if (n == 1) {
var path = try allocator.alloc(usize, 1);
path[0] = data[0].id;
return .{ .length = 0.0, .path = path };
}
std.debug.print("Building graph...\n", .{});
const graph = try buildGraph(allocator, data);
defer {
for (0..graph.len) |i| {
allocator.free(graph[i]);
}
allocator.free(graph);
}
// printGraph(graph, "Graph"); // Can be very large
std.debug.print("Finding Minimum Spanning Tree...\n", .{});
const mst = try minimumSpanningTree(allocator, graph);
defer allocator.free(mst);
printEdges(mst, "MSTree");
std.debug.print("Finding odd degree vertices...\n", .{});
const odd_vertices = try findOddVertexes(allocator, mst, n);
defer allocator.free(odd_vertices);
printUsizeVec(odd_vertices, "Odd vertexes in MSTree");
std.debug.print("Finding Minimum Weight Matching (greedy)...\n", .{});
// Clone MST edges to create the initial multigraph
var multigraph_edges = ArrayList(Edge).init(allocator);
defer multigraph_edges.deinit();
try multigraph_edges.appendSlice(mst);
// Add matching edges to the multigraph_edges vector
try minimumWeightMatching(allocator, &multigraph_edges, graph, odd_vertices);
printEdges(multigraph_edges.items, "Minimum weight matching (MST + Matching Edges)");
std.debug.print("Finding Eulerian Tour...\n", .{});
const eulerian_tour = try findEulerianTour(allocator, multigraph_edges.items, n);
defer allocator.free(eulerian_tour);
printUsizeVec(eulerian_tour, "Eulerian tour");
// --- Create Hamiltonian Circuit by Skipping Visited Nodes ---
std.debug.print("Creating Hamiltonian path (shortcutting)...\n", .{});
if (eulerian_tour.len == 0 and n > 0) {
std.log.err("Error: Eulerian tour could not be found.", .{});
return .{ .length = -1.0, .path = &[_]usize{} };
}
var path = ArrayList(usize).init(allocator);
errdefer path.deinit();
var length: f64 = 0.0;
var visited = AutoHashMap(usize, void).init(allocator);
defer visited.deinit();
var last_node_in_path: ?usize = null;
for (eulerian_tour) |node| {
const result = try visited.getOrPut(node);
if (!result.found_existing) {
if (last_node_in_path) |last_node| {
// Add distance from the *previous node added to the path*
length += graph[last_node][node];
}
try path.append(node); // Add node to the Hamiltonian path
last_node_in_path = node; // Update the last node *in the path*
}
}
// Add the edge back to the start to complete the cycle
if (last_node_in_path != null and path.items.len > 0) {
const last = last_node_in_path.?;
const first = path.items[0];
length += graph[last][first];
try path.append(first); // Add the starting node ID again to show the cycle
}
printUsizeVec(path.items, "Result path");
std.debug.print("Result length of the path: {d:.2}\n", .{length});
return .{ .length = length, .path = try path.toOwnedSlice() };
}
pub fn main() !void {
// Use an arena allocator for all temporary allocations
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const allocator = arena.allocator();
// Input data matching the Python/JS example
const raw_data = [_][2]f64{
.{1380.0, 939.0}, .{2848.0, 96.0}, .{3510.0, 1671.0}, .{457.0, 334.0}, .{3888.0, 666.0},
.{984.0, 965.0}, .{2721.0, 1482.0}, .{1286.0, 525.0}, .{2716.0, 1432.0}, .{738.0, 1325.0},
.{1251.0, 1832.0}, .{2728.0, 1698.0}, .{3815.0, 169.0}, .{3683.0, 1533.0}, .{1247.0, 1945.0},
.{123.0, 862.0}, .{1234.0, 1946.0}, .{252.0, 1240.0}, .{611.0, 673.0}, .{2576.0, 1676.0},
.{928.0, 1700.0}, .{53.0, 857.0}, .{1807.0, 1711.0}, .{274.0, 1420.0}, .{2574.0, 946.0},
.{178.0, 24.0}, .{2678.0, 1825.0}, .{1795.0, 962.0}, .{3384.0, 1498.0}, .{3520.0, 1079.0},
.{1256.0, 61.0}, .{1424.0, 1728.0}, .{3913.0, 192.0}, .{3085.0, 1528.0}, .{2573.0, 1969.0},
.{463.0, 1670.0}, .{3875.0, 598.0}, .{298.0, 1513.0}, .{3479.0, 821.0}, .{2542.0, 236.0},
.{3955.0, 1743.0}, .{1323.0, 280.0}, .{3447.0, 1830.0}, .{2936.0, 337.0}, .{1621.0, 1830.0},
.{3373.0, 1646.0}, .{1393.0, 1368.0}, .{3874.0, 1318.0}, .{938.0, 955.0}, .{3022.0, 474.0},
.{2482.0, 1183.0}, .{3854.0, 923.0}, .{376.0, 825.0}, .{2519.0, 135.0}, .{2945.0, 1622.0},
.{953.0, 268.0}, .{2628.0, 1479.0}, .{2097.0, 981.0}, .{890.0, 1846.0}, .{2139.0, 1806.0},
.{2421.0, 1007.0}, .{2290.0, 1810.0}, .{1115.0, 1052.0}, .{2588.0, 302.0}, .{327.0, 265.0},
.{241.0, 341.0}, .{1917.0, 687.0}, .{2991.0, 792.0}, .{2573.0, 599.0}, .{19.0, 674.0},
.{3911.0, 1673.0}, .{872.0, 1559.0}, .{2863.0, 558.0}, .{929.0, 1766.0}, .{839.0, 620.0},
.{3893.0, 102.0}, .{2178.0, 1619.0}, .{3822.0, 899.0}, .{378.0, 1048.0}, .{1178.0, 100.0},
.{2599.0, 901.0}, .{3416.0, 143.0}, .{2961.0, 1605.0}, .{611.0, 1384.0}, .{3113.0, 885.0},
.{2597.0, 1830.0}, .{2586.0, 1286.0}, .{161.0, 906.0}, .{1429.0, 134.0}, .{742.0, 1025.0},
.{1625.0, 1651.0}, .{1187.0, 706.0}, .{1787.0, 1009.0}, .{22.0, 987.0}, .{3640.0, 43.0},
.{3756.0, 882.0}, .{776.0, 392.0}, .{1724.0, 1642.0}, .{198.0, 1810.0}, .{3950.0, 1558.0},
};
// Convert raw data to Point structs, using index as ID
var data_points = ArrayList(Point).init(allocator);
defer data_points.deinit();
for (raw_data, 0..) |coords, i| {
try data_points.append(Point.init(i, coords[0], coords[1]));
}
// --- Run TSP ---
const result = try tsp(allocator, data_points.items);
defer allocator.free(result.path);
// Result is already printed within tsp function
}
- Output:
Building graph... Finding Minimum Spanning Tree... MSTree: [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77)] Finding odd degree vertices... Odd vertexes in MSTree: [1, 2, 9, 10, 11, 16, 21, 25, 27, 29, 31, 32, 34, 38, 40, 42, 44, 46, 47, 51, 52, 53, 58, 59, 60, 64, 65, 66, 68, 69, 70, 72, 73, 75, 76, 77, 81, 83, 85, 90, 92, 93, 96, 98] Finding Minimum Weight Matching (greedy)... Minimum weight matching (MST + Matching Edges): [(14, 16, 13.04), (54, 82, 23.35), (51, 77, 40.00), (5, 48, 47.07), (27, 92, 47.68), (6, 8, 50.25), (24, 80, 51.48), (15, 87, 58.14), (20, 73, 66.01), (77, 95, 68.15), (4, 36, 69.23), (15, 21, 70.18), (39, 63, 80.45), (26, 85, 81.15), (40, 70, 82.68), (30, 79, 87.21), (58, 73, 89.00), (32, 75, 92.20), (6, 56, 93.05), (23, 37, 96.05), (90, 97, 99.41), (12, 32, 100.66), (39, 53, 103.59), (22, 97, 107.94), (10, 14, 113.07), (64, 65, 114.77), (70, 99, 121.43), (21, 93, 133.65), (11, 26, 136.49), (2, 45, 139.26), (9, 83, 140.04), (34, 85, 141.06), (33, 82, 145.96), (50, 86, 146.37), (3, 64, 147.18), (28, 45, 148.41), (59, 61, 151.05), (20, 71, 151.71), (67, 84, 153.40), (11, 19, 153.58), (5, 62, 157.26), (43, 49, 161.76), (24, 60, 164.71), (2, 42, 171.03), (44, 90, 179.04), (49, 72, 179.82), (41, 88, 180.42), (17, 23, 181.34), (21, 69, 186.13), (50, 60, 186.27), (30, 88, 187.77), (59, 76, 191.02), (8, 86, 195.49), (10, 31, 201.85), (19, 56, 203.75), (7, 91, 206.31), (48, 89, 208.12), (31, 90, 215.24), (12, 94, 215.64), (55, 96, 216.11), (2, 13, 221.30), (52, 78, 223.01), (35, 37, 227.76), (17, 78, 229.65), (52, 87, 229.75), (11, 54, 229.92), (18, 74, 234.08), (74, 96, 236.54), (4, 77, 242.17), (81, 94, 245.31), (7, 41, 247.78), (47, 99, 251.75), (1, 43, 256.56), (29, 38, 261.24), (67, 72, 266.72), (13, 70, 267.55), (9, 71, 269.65), (18, 52, 279.87), (55, 79, 280.80), (25, 64, 283.34), (38, 95, 283.64), (0, 62, 288.09), (68, 72, 292.88), (63, 68, 297.38), (35, 98, 299.71), (9, 89, 300.03), (28, 33, 300.50), (27, 66, 300.85), (0, 91, 302.55), (27, 57, 302.60), (68, 80, 303.12), (61, 85, 307.65), (3, 96, 324.23), (57, 60, 325.04), (10, 73, 328.69), (22, 59, 345.32), (31, 46, 361.33), (38, 84, 371.55), (32, 36, 407.77), (69, 21, 186.13), (76, 59, 191.02), (93, 52, 389.31), (31, 10, 201.85), (38, 29, 261.24), (1, 53, 331.30), (42, 2, 171.03), (90, 44, 179.04), (11, 85, 185.97), (98, 83, 593.33), (77, 51, 40.00), (40, 70, 82.68), (16, 73, 354.15), (75, 32, 92.20), (58, 9, 542.72), (25, 64, 283.34), (60, 68, 435.39), (72, 81, 691.40), (92, 27, 47.68), (96, 65, 537.43), (47, 34, 1454.79), (66, 46, 859.27)] Finding Eulerian Tour... Eulerian tour: [14, 10, 31, 46, 66, 27, 92, 27, 57, 60, 68, 63, 39, 53, 1, 43, 49, 72, 81, 94, 12, 32, 75, 32, 36, 4, 77, 51, 77, 95, 38, 29, 38, 84, 67, 72, 68, 80, 24, 60, 50, 86, 8, 6, 56, 19, 11, 85, 34, 47, 99, 70, 40, 70, 13, 2, 42, 2, 45, 28, 33, 82, 54, 11, 26, 85, 61, 59, 76, 59, 22, 97, 90, 44, 90, 31, 10, 73, 58, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 65, 64, 25, 64, 3, 96, 74, 18, 52, 93, 21, 69, 21, 15, 87, 52, 78, 17, 23, 37, 35, 98, 83, 9, 71, 20, 73, 16, 14] Creating Hamiltonian path (shortcutting)... Result path: [14, 10, 31, 46, 66, 27, 92, 57, 60, 68, 63, 39, 53, 1, 43, 49, 72, 81, 94, 12, 32, 75, 36, 4, 77, 51, 95, 38, 29, 84, 67, 80, 24, 50, 86, 8, 6, 56, 19, 11, 85, 34, 47, 99, 70, 40, 13, 2, 42, 45, 28, 33, 82, 54, 26, 61, 59, 76, 22, 97, 90, 44, 73, 58, 9, 89, 48, 5, 62, 0, 91, 7, 41, 88, 30, 79, 55, 96, 65, 64, 25, 3, 74, 18, 52, 93, 21, 69, 15, 87, 78, 17, 23, 37, 35, 98, 83, 71, 20, 16, 14] Result length of the path: 25115.36