From 89015b843418b045c777dc20ca3cc3f052e7b9d2 Mon Sep 17 00:00:00 2001 From: Marcin Chrzanowski Date: Fri, 25 Dec 2020 15:33:34 +0100 Subject: Add day 16 --- 16/a.rb | 28 +++++++ 16/b.rb | 76 +++++++++++++++++ 16/input.txt | 262 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 366 insertions(+) create mode 100644 16/a.rb create mode 100644 16/b.rb create mode 100644 16/input.txt (limited to '16') diff --git a/16/a.rb b/16/a.rb new file mode 100644 index 0000000..dd3eea4 --- /dev/null +++ b/16/a.rb @@ -0,0 +1,28 @@ +sections = File.read('input.txt').split "\n\n" + +fields = sections[0].split "\n" +tickets = sections[2].split "\n" + +valid_values = Hash.new false + +fields.each do |field| + ranges = field.split(/.*: | or /).slice(1, 2) + ranges.each do |range| + from, to = range.split('-').map {|n| n.to_i} + (from..to).each do |n| + valid_values[n] = true + end + end +end + +invalid = 0 +tickets.each do |ticket| + values = ticket.split(',').map {|n| n.to_i} + values.each do |n| + if !valid_values[n] + invalid += n + end + end +end + +puts invalid diff --git a/16/b.rb b/16/b.rb new file mode 100644 index 0000000..d981c02 --- /dev/null +++ b/16/b.rb @@ -0,0 +1,76 @@ +require 'set' + +sections = File.read('input.txt').split "\n\n" + +fields = sections[0].split "\n" +my_ticket_line = sections[1].split("\n")[1] +my_ticket = my_ticket_line.split(',').map {|n| n.to_i} +ticket_lines = sections[2].split("\n") +tickets = ticket_lines.slice(1, ticket_lines.size).map {|t| t.split(',').map {|n| n.to_i}} + +valid_values = {} +valid_all = {} + +fields.each do |field| + f, range1, range2 = field.split(/: | or /) + valid_values[f] = [] + [range1, range2].each do |range| + from, to = range.split('-').map {|n| n.to_i} + valid_values[f].push (from..to) + (from..to).each do |n| + valid_all[n] = true + end + end +end + +candidates = [] +my_ticket.each do + candidates.push(Set.new valid_values.keys()) +end + +tickets = tickets.filter do |ticket| + ticket.all? { |n| valid_all[n] } +end + +tickets.each do |ticket| + ticket.each_with_index do |n, i| + valid_values.each do |field, valid| + if !(valid[0].include?(n) || valid[1].include?(n)) + candidates[i].delete(field) + end + end + end +end + +decided = Set.new +mapping = {} +changed = true +while changed + changed = false + new_decided = candidates.find do |c| + if c.size == 1 + f = c.to_a[0] + !decided.member? f + else + false + end + end + if new_decided + index = candidates.find_index new_decided + field = new_decided.to_a[0] + decided.add field + mapping[field] = index + changed = true + candidates.each do |c| + c.delete(field) + end + end +end + +product = 1 +mapping.each do |field, index| + if field =~ /departure/ + product *= my_ticket[index] + end +end +puts product diff --git a/16/input.txt b/16/input.txt new file mode 100644 index 0000000..a9cead9 --- /dev/null +++ b/16/input.txt @@ -0,0 +1,262 @@ +departure location: 40-152 or 161-969 +departure station: 39-838 or 845-971 +departure platform: 39-209 or 217-970 +departure track: 47-76 or 82-955 +departure date: 41-167 or 178-949 +departure time: 25-652 or 660-953 +arrival location: 36-798 or 810-964 +arrival station: 30-688 or 702-973 +arrival platform: 44-248 or 268-969 +arrival track: 45-536 or 552-956 +class: 29-751 or 760-951 +duration: 40-912 or 934-971 +price: 44-896 or 911-965 +route: 32-582 or 590-953 +row: 46-269 or 282-971 +seat: 49-114 or 134-971 +train: 37-395 or 401-969 +type: 43-180 or 206-960 +wagon: 41-462 or 480-953 +zone: 35-411 or 427-960 + +your ticket: +139,109,61,149,101,89,103,53,107,59,73,151,71,67,97,113,83,163,137,167 + +nearby tickets: +660,948,772,679,610,713,875,887,750,335,895,553,774,802,797,336,823,566,861,599 +428,760,595,55,490,877,63,570,742,735,830,854,566,989,292,748,445,876,677,329 +396,92,686,894,353,668,666,794,743,142,604,344,437,440,352,680,439,431,636,385 +319,322,318,301,736,485,727,437,679,486,129,516,488,643,560,880,384,846,609,644 +851,865,837,744,150,624,140,569,627,733,607,352,221,630,731,212,331,713,674,635 +690,681,593,411,865,494,673,814,482,707,626,636,384,661,857,514,896,613,526,941 +64,720,331,225,602,4,90,719,739,83,887,101,559,603,616,872,782,349,450,320 +235,449,339,427,24,770,554,428,646,235,851,710,234,911,823,489,436,336,324,652 +827,863,569,290,483,286,432,592,619,306,790,405,443,333,57,399,355,60,674,102 +669,429,282,362,368,400,714,819,582,766,485,344,785,449,302,771,561,650,288,946 +875,107,715,780,53,178,405,284,484,497,400,395,817,848,729,139,725,61,240,245 +206,747,761,710,941,592,66,714,770,100,328,299,510,677,426,104,712,145,721,310 +881,865,651,574,495,591,321,355,764,774,92,864,661,438,745,667,563,783,754,813 +235,53,888,820,374,642,457,740,877,824,555,343,410,154,53,629,285,432,864,56 +18,439,247,247,718,148,315,628,441,286,648,639,102,783,730,849,813,284,163,244 +93,497,233,396,107,631,331,777,230,507,848,879,786,494,448,482,315,506,456,493 +568,63,425,443,348,597,145,712,350,633,631,51,779,735,879,232,229,618,600,771 +591,440,145,489,881,555,864,847,597,574,987,486,824,872,148,623,711,220,482,362 +217,320,113,70,313,751,509,81,404,229,286,525,114,647,743,590,366,166,660,796 +861,407,621,180,751,376,636,378,282,159,686,559,96,497,766,374,101,320,338,294 +936,788,154,499,318,580,516,564,392,710,663,339,935,309,590,611,729,489,860,866 +408,624,398,811,721,349,554,282,730,732,300,875,283,221,557,620,875,743,838,345 +489,748,628,326,67,713,151,399,447,853,670,289,773,314,375,308,382,208,574,519 +787,368,331,608,318,51,71,140,484,704,207,371,638,323,334,387,166,852,438,691 +733,99,989,427,671,817,814,775,354,406,883,446,295,86,380,491,339,318,71,344 +715,943,712,734,604,329,600,287,858,297,296,19,621,137,608,430,608,503,222,706 +369,408,611,851,580,62,346,886,785,231,509,337,845,296,362,309,555,590,155,825 +89,238,785,747,392,785,682,357,345,631,446,370,526,789,558,274,666,222,566,672 +438,339,565,741,810,504,70,499,804,786,624,528,135,87,387,562,838,496,108,142 +98,601,902,576,717,623,645,911,521,448,714,620,742,558,523,456,294,517,627,810 +58,883,93,317,885,642,569,502,729,641,788,458,622,432,646,101,300,947,900,508 +828,360,435,542,505,534,748,558,816,516,935,112,306,650,307,329,299,326,828,631 +571,114,460,674,482,97,683,939,457,552,323,207,862,400,430,227,712,594,110,846 +597,244,289,883,636,229,708,607,481,162,888,287,391,429,908,145,105,64,854,225 +885,312,770,911,288,475,96,349,324,590,505,889,438,618,148,646,511,356,728,555 +599,308,371,441,146,385,838,143,107,868,529,117,878,343,855,516,100,368,305,89 +395,445,790,148,765,462,403,695,946,394,777,823,569,162,720,668,401,163,144,942 +742,769,881,712,608,936,495,372,944,892,594,525,725,21,501,891,816,686,811,304 +883,302,287,911,60,786,54,376,674,298,611,499,815,179,374,405,483,364,718,10 +896,340,638,323,299,829,143,740,106,344,572,482,865,869,321,80,480,448,788,371 +281,57,493,735,821,580,429,819,148,444,403,353,303,515,360,854,580,738,307,90 +500,590,725,798,880,354,866,432,811,51,268,76,630,178,509,718,978,616,554,442 +459,431,147,291,570,862,91,165,816,397,453,747,613,343,855,862,344,765,327,774 +354,713,600,699,838,388,411,139,562,293,526,358,871,790,665,847,339,71,678,790 +571,314,139,728,299,497,614,846,293,575,382,459,325,383,79,374,640,791,793,942 +163,238,516,461,911,601,288,59,373,292,650,486,776,516,327,850,109,832,725,998 +646,443,67,790,620,626,442,349,761,501,432,65,936,433,494,932,581,94,729,309 +676,716,244,716,387,871,161,244,324,384,311,311,448,900,512,619,513,394,446,228 +66,868,380,945,556,938,341,496,604,323,576,854,76,210,145,65,409,728,296,136 +785,830,228,403,285,247,754,152,228,607,165,845,375,894,741,301,597,612,490,428 +628,61,89,231,327,335,760,825,371,686,678,346,144,492,750,466,162,717,746,315 +370,794,577,345,739,290,740,568,292,941,61,787,115,676,514,151,533,244,814,612 +765,777,525,495,727,448,887,647,338,728,59,831,74,405,384,631,745,681,15,637 +444,319,161,637,358,512,225,521,285,855,342,573,651,70,659,646,161,108,627,631 +652,556,93,63,606,639,118,730,530,716,491,744,832,349,845,848,890,410,827,321 +874,381,854,80,136,436,645,764,679,883,509,90,488,621,386,148,486,705,449,113 +534,137,124,89,619,243,522,290,433,166,640,406,403,406,107,494,859,503,864,494 +333,114,406,74,686,716,704,510,791,313,689,509,613,360,343,500,573,606,134,743 +612,394,660,303,567,245,703,145,222,839,891,88,912,219,445,882,620,355,165,675 +508,311,165,845,881,419,688,459,148,723,940,686,830,740,444,560,823,578,502,618 +818,325,734,871,339,429,762,683,612,637,617,291,694,109,674,832,326,430,629,232 +347,618,248,505,536,742,344,61,287,869,345,632,948,132,566,729,940,863,683,675 +325,140,848,492,754,738,311,730,704,854,744,854,944,505,600,404,388,494,742,881 +374,268,376,373,720,362,406,409,74,946,802,54,942,774,769,352,743,306,50,73 +375,76,440,406,57,300,431,178,756,630,723,881,362,765,388,784,484,378,434,318 +65,667,527,144,292,272,493,378,52,299,481,286,516,356,431,575,324,852,99,508 +679,783,307,221,247,409,683,671,358,711,753,938,316,336,410,303,744,289,380,482 +730,688,641,67,767,830,237,368,591,555,333,528,722,866,289,803,70,458,331,393 +59,731,234,609,582,404,948,436,90,506,674,651,83,173,314,446,878,873,711,82 +816,311,405,509,716,346,113,68,727,51,51,781,479,797,72,457,230,742,439,461 +675,489,510,760,747,816,651,810,786,440,741,763,573,887,382,719,397,432,411,866 +113,638,433,745,730,616,143,859,13,783,71,374,949,314,574,315,369,712,518,612 +408,717,539,631,685,60,96,332,395,826,447,104,495,358,227,405,366,561,161,145 +445,606,238,350,90,489,676,287,408,402,738,241,324,720,299,909,618,834,56,793 +244,70,240,741,467,705,302,336,225,56,561,849,875,309,521,366,342,481,888,591 +219,446,750,687,832,799,575,661,885,346,428,71,386,451,84,519,391,561,726,366 +98,596,946,621,632,513,524,57,810,892,851,4,838,596,289,86,864,242,604,460 +524,512,100,827,767,672,728,328,520,594,305,427,748,144,309,690,645,627,284,679 +629,773,617,650,95,242,688,941,750,808,771,389,863,641,871,247,244,461,854,147 +403,567,787,101,771,486,323,756,727,86,708,529,282,767,720,604,406,378,577,60 +638,334,875,209,581,851,868,487,393,788,729,61,883,342,176,73,862,836,180,384 +458,638,530,861,580,853,524,848,534,150,740,845,399,71,352,364,850,677,812,208 +909,163,348,229,380,644,828,708,652,812,591,394,785,457,611,353,438,853,775,643 +608,367,706,642,379,86,817,180,152,362,938,855,818,462,485,401,775,164,697,494 +635,221,638,833,516,943,881,812,570,168,567,688,817,860,90,813,895,60,105,784 +410,790,606,702,590,236,593,570,444,140,743,74,401,83,140,844,667,282,575,444 +787,285,631,111,101,600,890,107,178,73,298,576,708,677,743,547,621,454,683,608 +759,290,140,836,622,296,760,378,499,353,330,456,429,825,948,225,858,776,233,630 +109,52,605,297,452,788,228,861,241,459,765,626,326,95,538,787,358,719,686,795 +786,293,402,799,779,71,311,946,366,911,441,709,497,180,845,71,569,837,628,794 +775,723,294,527,442,348,733,52,633,784,712,794,72,54,895,169,518,788,732,765 +425,459,352,64,320,139,498,878,105,733,880,167,228,405,491,715,575,559,790,606 +77,710,849,558,113,636,285,738,144,718,407,335,390,236,562,143,770,577,375,671 +942,364,114,832,979,329,380,82,483,792,852,895,56,732,430,365,675,649,857,457 +245,740,479,378,314,516,833,878,453,782,94,566,861,640,606,376,590,301,728,829 +339,72,150,890,769,283,383,126,723,827,602,511,791,370,486,64,911,891,434,503 +942,434,66,316,845,880,137,875,111,854,446,723,504,546,708,577,58,829,114,387 +747,320,629,610,529,569,765,139,532,871,651,667,442,150,351,938,576,619,542,439 +666,722,879,761,977,597,316,876,668,882,500,289,706,90,713,110,87,573,344,147 +626,749,744,389,517,631,677,360,236,576,377,436,574,567,661,624,429,312,115,379 +561,761,571,828,408,331,409,856,442,79,776,647,384,845,233,615,427,776,643,731 +491,619,230,220,599,670,749,480,577,509,165,641,553,702,498,337,391,491,18,671 +446,332,698,358,591,682,343,662,786,938,512,60,411,762,380,745,860,730,449,393 +311,704,988,381,386,764,501,388,725,70,733,881,379,812,301,827,411,480,671,224 +304,152,760,848,482,98,62,285,325,285,623,626,716,394,449,589,487,633,482,54 +312,650,738,144,810,531,912,419,590,825,485,624,356,709,577,432,448,268,877,943 +357,667,816,482,141,288,66,143,305,425,453,350,68,62,571,937,669,346,379,760 +268,817,618,428,444,705,665,56,245,943,725,61,650,868,739,834,979,494,607,443 +296,208,662,878,732,247,377,871,16,734,561,142,369,229,294,872,575,150,53,676 +787,437,452,813,824,460,666,664,557,435,715,712,762,352,410,746,221,101,423,735 +57,360,320,937,491,640,94,600,572,519,581,612,497,945,782,387,652,55,830,131 +353,223,792,176,614,402,784,569,386,882,944,705,725,248,747,449,881,409,226,778 +488,73,887,332,897,882,743,147,292,85,142,383,286,527,847,135,362,714,556,232 +457,431,984,853,597,242,620,337,304,891,609,568,457,512,234,437,365,943,617,579 +624,93,508,654,598,456,534,458,888,768,237,811,825,446,617,310,816,866,817,90 +762,749,324,648,821,91,440,991,98,650,644,286,226,246,604,728,716,403,452,559 +347,483,332,493,497,246,856,162,436,370,365,488,103,60,872,752,794,293,620,945 +773,66,508,430,383,58,882,668,603,676,624,314,270,410,854,748,747,703,246,102 +612,662,567,303,881,742,793,912,911,668,864,641,403,605,346,159,881,515,498,822 +764,503,292,148,838,611,427,178,299,866,846,680,759,780,868,378,936,114,877,938 +618,709,646,830,364,782,639,546,524,872,682,325,604,54,76,354,616,557,520,868 +73,670,716,103,778,108,533,272,612,89,602,86,67,226,87,294,506,332,660,354 +84,679,781,798,673,370,307,619,380,890,97,838,618,242,385,661,305,827,799,109 +782,244,630,785,566,574,746,515,650,818,341,521,239,437,768,445,395,432,2,777 +126,85,462,166,315,51,104,99,640,151,730,487,389,436,718,332,872,436,561,558 +243,560,572,748,372,348,179,833,889,861,827,335,223,414,440,449,446,355,409,717 +686,719,329,867,490,576,400,393,860,863,845,791,138,705,234,303,152,670,217,851 +139,591,348,909,938,401,612,52,351,328,311,74,514,163,663,686,238,527,90,103 +237,614,939,465,738,451,863,269,664,821,773,574,912,893,441,236,772,812,670,874 +336,829,410,391,944,137,760,139,936,639,71,359,526,771,118,607,708,857,846,289 +736,746,300,891,697,486,631,361,95,872,533,527,761,572,565,672,492,795,459,497 +751,447,781,129,348,825,178,720,392,74,293,375,751,222,853,851,381,835,69,790 +796,373,741,391,876,455,350,496,433,811,663,565,684,785,94,376,138,16,391,489 +387,750,109,218,522,622,320,658,480,223,773,435,795,645,750,824,794,720,825,455 +637,339,776,641,278,732,100,166,312,138,287,247,331,610,641,71,316,313,819,578 +866,111,737,145,57,772,894,743,521,439,883,861,289,102,839,409,247,50,562,681 +295,819,402,71,648,301,217,143,117,574,623,461,730,484,148,590,778,880,355,500 +72,54,81,849,772,485,765,66,786,680,287,69,444,363,594,615,427,527,734,811 +581,734,96,846,716,814,9,796,284,722,113,152,440,762,434,534,578,95,59,429 +608,633,488,782,760,600,976,448,373,493,565,248,389,582,345,335,606,232,593,736 +219,725,895,222,828,798,293,403,849,771,300,180,353,769,154,567,634,289,55,575 +367,767,943,651,703,318,671,870,699,108,749,289,943,451,850,580,674,178,619,142 +335,530,408,301,732,488,947,499,638,52,598,316,598,235,162,771,117,946,314,614 +485,637,892,832,678,734,682,853,896,713,484,300,644,620,688,658,773,670,99,633 +571,248,444,782,763,223,838,836,247,245,448,54,431,919,608,749,358,821,384,524 +687,208,871,777,387,825,643,138,569,752,641,206,449,535,394,404,631,139,499,161 +245,109,713,624,553,152,75,377,836,471,848,868,56,948,512,670,558,443,578,246 +825,620,501,553,723,139,287,735,886,87,556,812,227,754,451,687,745,717,485,855 +382,372,219,632,57,428,427,114,740,866,87,227,301,404,69,613,164,979,891,244 +602,101,713,144,351,76,749,646,350,567,630,241,873,749,148,498,233,622,654,687 +320,890,434,359,162,401,402,823,426,113,873,235,557,578,102,817,868,740,562,738 +495,788,503,93,344,360,873,944,663,461,376,112,750,885,978,566,600,377,57,221 +707,483,620,844,304,947,912,299,670,948,941,336,621,73,794,733,458,232,327,102 +736,398,67,866,643,206,817,876,703,320,504,352,448,748,669,834,506,640,573,575 +604,435,342,141,634,644,294,859,288,389,471,438,596,795,506,813,510,815,876,95 +731,284,66,795,532,360,781,827,619,505,768,781,827,732,24,386,735,57,714,336 +805,304,645,855,348,820,867,816,560,431,616,64,410,217,849,511,668,317,433,819 +771,90,244,873,398,58,579,581,912,875,787,837,561,404,309,650,163,435,662,56 +310,90,341,530,161,381,612,469,373,357,483,616,560,110,378,705,268,388,341,876 +774,512,724,600,853,455,476,681,360,626,602,706,665,533,395,432,297,135,163,887 +664,529,283,704,744,94,629,822,562,783,937,318,324,338,818,395,723,846,81,373 +605,791,762,512,594,899,523,328,638,846,337,242,305,853,875,519,619,892,634,321 +708,850,295,52,104,410,911,739,485,480,140,437,856,946,388,355,661,69,399,429 +573,148,339,376,612,569,493,403,460,7,677,833,564,86,633,356,711,637,284,135 +576,868,527,601,333,721,562,93,594,312,143,833,136,842,315,606,856,642,557,529 +828,738,108,412,884,345,330,662,287,338,646,335,454,345,331,816,579,306,385,440 +357,219,318,651,938,854,104,208,572,392,445,307,105,877,364,892,244,53,248,397 +672,348,887,213,59,590,99,524,404,778,556,244,73,779,364,236,243,636,238,813 +567,676,876,355,712,858,340,561,515,697,945,760,382,484,497,427,615,767,220,382 +599,390,656,506,62,579,521,676,148,484,207,310,666,573,772,51,180,71,561,836 +516,387,556,646,64,509,113,949,515,581,369,354,233,393,583,524,90,776,149,552 +615,315,230,507,371,149,791,827,760,93,645,162,534,947,749,349,935,321,274,611 +354,722,171,54,351,627,382,649,315,516,105,649,442,849,361,529,512,709,511,51 +943,123,740,772,394,144,141,365,507,294,743,879,772,411,366,134,381,74,706,307 +499,612,834,891,334,828,227,63,810,882,668,681,452,946,631,712,335,867,660,757 +401,455,790,783,338,111,232,643,333,443,663,612,438,992,450,224,679,231,582,705 +339,854,331,495,686,499,698,533,731,711,85,491,283,882,221,894,487,372,816,74 +636,218,883,458,737,673,877,366,110,657,221,439,876,664,574,717,300,736,343,532 +613,612,408,765,879,664,610,141,496,63,226,682,707,626,162,0,363,883,605,615 +796,717,100,937,541,402,688,102,439,687,662,245,98,617,360,488,815,553,577,358 +746,152,240,308,104,164,825,602,223,787,375,522,323,565,276,217,506,566,150,864 +223,641,223,72,319,716,483,798,304,612,359,486,710,274,288,779,352,402,147,646 +74,92,451,434,225,319,776,299,60,370,376,489,869,503,398,354,315,294,368,887 +607,499,852,144,853,624,105,208,633,845,439,882,579,595,573,120,71,65,514,385 +716,224,609,490,709,912,392,99,272,161,436,353,770,343,711,506,509,875,238,374 +845,591,626,712,100,701,665,337,738,289,332,313,109,661,113,451,410,834,813,723 +66,443,847,530,486,7,152,630,710,231,713,441,686,167,58,299,935,866,379,150 +787,329,407,317,892,139,449,708,396,496,393,75,785,86,243,149,617,737,791,554 +325,946,288,275,138,486,140,325,869,878,94,242,851,150,535,518,869,149,235,674 +345,763,208,341,825,684,284,350,748,61,572,872,531,587,243,798,847,641,461,748 +285,723,139,824,561,826,428,949,778,539,72,853,242,821,526,148,488,520,848,370 +736,594,800,628,598,760,356,748,106,624,152,939,452,288,872,454,835,798,816,231 +562,711,69,502,836,823,574,767,236,902,598,643,376,321,649,311,835,590,608,601 +709,895,50,316,506,879,823,526,435,730,620,352,226,322,361,988,455,867,779,732 +780,60,621,863,623,166,670,608,845,868,734,724,112,221,347,229,764,15,603,304 +738,939,331,607,838,798,99,152,633,51,495,577,60,75,755,222,348,827,779,450 +307,886,506,226,224,65,89,51,662,517,734,301,610,52,854,625,179,624,14,283 +492,944,276,887,833,576,819,221,516,607,455,393,710,405,911,949,642,371,818,376 +151,640,64,91,484,719,935,868,225,858,911,459,864,658,743,502,616,151,393,791 +498,612,446,768,51,511,101,762,289,625,321,92,808,102,682,345,385,533,638,437 +313,524,824,69,223,52,936,70,315,104,557,378,710,68,556,558,351,481,882,5 +437,482,779,790,24,852,720,51,708,823,439,341,149,866,303,75,76,406,703,358 +352,634,649,54,526,440,103,575,764,977,52,669,887,831,245,431,370,110,390,674 +557,634,489,935,312,651,500,624,878,353,238,688,502,554,641,150,390,1,869,497 +747,716,409,533,639,129,603,110,864,681,858,411,179,179,498,319,576,725,178,517 +862,380,889,633,712,619,243,910,828,713,179,343,58,867,603,500,750,569,229,62 +663,434,650,884,137,773,518,557,643,935,343,247,717,474,150,367,514,797,222,721 +590,442,306,753,789,315,749,93,306,525,934,243,142,948,574,152,292,316,136,532 +472,268,484,237,637,451,847,645,616,940,498,772,867,600,787,894,643,107,59,872 +112,299,461,621,817,606,784,672,457,450,69,427,299,78,502,601,856,688,291,134 +149,564,741,491,615,643,631,162,609,838,837,604,105,252,855,819,73,709,517,444 +831,777,86,516,406,91,248,716,703,121,460,293,609,147,107,428,63,339,241,346 +947,880,755,854,684,307,643,240,858,55,373,943,814,269,772,824,660,561,291,682 +231,864,296,863,130,767,308,513,450,461,226,137,678,687,775,737,334,624,482,452 +934,626,744,518,820,354,60,719,332,90,663,579,680,775,800,576,773,573,335,62 +618,785,64,95,861,704,315,528,560,389,73,705,890,566,452,595,793,339,470,94 +104,86,647,153,307,381,611,72,75,609,339,65,221,302,765,56,110,328,352,494 +88,236,892,729,418,528,151,436,451,446,703,112,865,628,710,748,297,286,636,796 +109,449,459,582,242,838,502,582,494,59,448,823,375,813,287,419,390,828,88,732 +428,65,310,869,487,284,290,454,505,135,641,302,760,91,478,138,75,631,235,336 +539,235,794,206,377,650,72,880,245,75,865,536,226,934,496,778,393,379,594,645 +395,591,820,343,788,759,888,825,505,862,440,374,336,109,109,637,292,622,731,944 +290,720,387,326,638,461,851,180,602,678,113,72,490,494,896,102,557,782,20,92 +574,235,489,442,143,346,564,111,765,113,647,313,289,405,994,774,209,106,335,136 +639,327,787,628,591,51,945,557,938,301,235,624,445,647,306,622,377,825,23,488 +323,831,894,432,800,383,622,669,789,625,834,329,873,608,370,850,114,892,683,87 +481,225,373,685,742,751,83,248,878,238,870,734,452,104,216,607,329,553,614,179 +63,678,772,646,865,208,750,269,869,708,218,772,338,938,692,888,845,358,631,495 +886,780,629,489,322,793,401,799,524,651,941,862,362,521,740,681,219,849,737,141 +111,353,363,151,294,313,663,502,575,276,624,626,402,218,678,818,404,324,853,816 +236,318,236,352,322,735,882,678,304,384,993,734,145,866,92,221,667,109,608,451 +299,288,949,329,383,217,569,825,113,597,826,847,727,19,766,288,746,165,521,648 +672,84,988,739,630,373,688,558,788,822,797,431,141,112,615,490,835,283,353,307 +895,405,602,565,61,736,878,217,464,608,331,92,72,579,134,403,73,428,484,289 +649,52,708,552,675,869,940,6,61,391,291,894,331,774,786,395,828,556,235,72 +332,758,595,369,745,743,385,437,640,684,97,936,536,725,322,734,313,287,401,138 +361,434,671,135,347,765,461,533,92,857,560,166,228,689,834,103,651,151,582,878 -- cgit v1.2.3