diff --git a/.gitattributes b/.gitattributes index 2798537200f..720693a434e 100644 --- a/.gitattributes +++ b/.gitattributes @@ -442,6 +442,8 @@ Boolean_set_operations_2/doc_tex/Boolean_set_operations_2/fig/triangles.pdf -tex Boolean_set_operations_2/doc_tex/Boolean_set_operations_2/fig/unique.eps -text svneol=unset#application/postscript Boolean_set_operations_2/doc_tex/Boolean_set_operations_2/fig/unique.gif -text svneol=unset#image/gif Boolean_set_operations_2/doc_tex/Boolean_set_operations_2/fig/unique.pdf -text svneol=unset#application/pdf +Boolean_set_operations_2/examples/Boolean_set_operations_2/char_g.dat -text +Boolean_set_operations_2/examples/Boolean_set_operations_2/char_m.dat -text Boolean_set_operations_2/examples/Boolean_set_operations_2/pgn_holes.dat -text Boolean_set_operations_2/examples/Boolean_set_operations_2/test.dxf -text svneol=unset#application/octet-stream Boolean_set_operations_2/test/Boolean_set_operations_2/test_agg_op.cmd eol=lf diff --git a/Boolean_set_operations_2/examples/Boolean_set_operations_2/bezier_traits_adapter.cpp b/Boolean_set_operations_2/examples/Boolean_set_operations_2/bezier_traits_adapter.cpp new file mode 100644 index 00000000000..ec0e3bedd8a --- /dev/null +++ b/Boolean_set_operations_2/examples/Boolean_set_operations_2/bezier_traits_adapter.cpp @@ -0,0 +1,179 @@ +/*! \file bezier_traits_adapter.cpp + * Using the traits adaptor to generate a traits class for Bezier polygons. + */ + +#include + +#ifndef CGAL_USE_CORE +#include +int main () +{ + std::cout << "Sorry, this example needs CORE ..." << std::endl; + return (0); +} +#else + +#include +#include +#include +#include +#include +#include +#include + +#include + +typedef CGAL::CORE_algebraic_number_traits Nt_traits; +typedef Nt_traits::Rational Rational; +typedef Nt_traits::Algebraic Algebraic; + +// instead of +// typedef CGAL::Cartesian Rat_kernel; +// typedef CGAL::Cartesian Alg_kernel; +// typedef CGAL::Arr_Bezier_curve_traits_2 +// Traits_2; +// workaround for VC++ +struct Rat_kernel : public CGAL::Cartesian {}; +struct Alg_kernel : public CGAL::Cartesian {}; +struct Traits_2 : + public CGAL::Arr_Bezier_curve_traits_2 {}; + +typedef Rat_kernel::Point_2 Rat_point_2; +typedef Traits_2::Curve_2 Bezier_curve_2; +typedef Traits_2::X_monotone_curve_2 X_monotone_curve_2; +typedef CGAL::Gps_traits_2 Gps_traits_2; +typedef Gps_traits_2::Polygon_2 Polygon_2; +typedef Gps_traits_2::Polygon_with_holes_2 Polygon_with_holes_2; +typedef std::list Polygon_set; + +/*! Read a general polygon with holes, formed by Bezier curves, from the + * given input file. + */ +bool read_Bezier_polygon (const char* filename, Polygon_with_holes_2& P) +{ + // Open the input file. + std::ifstream in_file (filename); + + if (! in_file.is_open()) + return false; + + // Read the number of curves. + unsigned int n_curves; + unsigned int k; + + in_file >> n_curves; + + // Read the curves one by one, and construct the general polygon these + // curve form (the outer boundary and the holes inside it). + Traits_2 traits; + Traits_2::Make_x_monotone_2 make_x_monotone = + traits.make_x_monotone_2_object(); + bool first = true; + Rat_point_2 p_0; + std::list xcvs; + Rat_kernel ker; + Rat_kernel::Equal_2 equal = ker.equal_2_object(); + std::list pgns; + + for (k = 0; k < n_curves; k++) { + // Read the current curve and subdivide it into x-monotone subcurves. + Bezier_curve_2 B; + std::list x_objs; + std::list::const_iterator xoit; + X_monotone_curve_2 xcv; + + in_file >> B; + make_x_monotone (B, std::back_inserter (x_objs)); + + for (xoit = x_objs.begin(); xoit != x_objs.end(); ++xoit) { + if (CGAL::assign (xcv, *xoit)) + xcvs.push_back (xcv); + } + + // Check if the current curve closes a polygon, namely whether it target + // point (the last control point) equals the source of the first curve in + // the current chain. + if (! first) { + if (equal (p_0, B.control_point(B.number_of_control_points() - 1))) { + // Push a new polygon into the polygon list. Make sure that the polygon + // is counterclockwise oriented if it represents the outer boundary + // and clockwise oriented if it represents a hole. + Polygon_2 pgn (xcvs.begin(), xcvs.end()); + CGAL::Orientation orient = pgn.orientation(); + + if ((pgns.empty() && orient == CGAL::CLOCKWISE) || + (! pgns.empty() && orient == CGAL::COUNTERCLOCKWISE)) + pgn.reverse_orientation(); + + pgns.push_back (pgn); + xcvs.clear(); + first = true; + } + } + else { + // This is the first curve in the chain - store its source point. + p_0 = B.control_point(0); + first = false; + } + } + + if (! xcvs.empty()) + return false; + + // Construct the polygon with holes. + std::list::iterator pit = pgns.begin(); + + ++pit; + P = Polygon_with_holes_2 (pgns.front(), pit, pgns.end()); + + return true; +} + +// The main program. +int main (int argc, char **argv) +{ + // Get the name of the input files from the command line, or use the default + // char_g.dat and char_m.dat files if no command-line parameters are given. + const char *filename1 = (argc > 1) ? argv[1] : "char_g.dat"; + const char *filename2 = (argc > 2) ? argv[2] : "char_m.dat"; + + // Read the general polygons from the input files. + CGAL::Timer timer; + Polygon_with_holes_2 P1, P2; + + timer.start(); + + if (! read_Bezier_polygon (filename1, P1)) { + std::cerr << "Failed to read " << filename1 << " ..." << std::endl; + return 1; + } + + if (! read_Bezier_polygon (filename2, P2)) { + std::cerr << "Failed to read " << filename2 << " ..." << std::endl; + return 1; + } + + timer.stop(); + std::cout << "Constructed the input polygons in " << timer.time() + << " seconds." << std::endl << std::endl; + + // Compute the intersection of the two polygons. + Polygon_set R; + Polygon_set::const_iterator rit; + + timer.reset(); + timer.start(); + CGAL::intersection (P1, P2, std::back_inserter(R)); + timer.stop(); + + std::cout << "The intersection polygons are of sizes: {"; + for (rit = R.begin(); rit != R.end(); ++rit) + std::cout << ' ' << rit->outer_boundary().size(); + std::cout << " }" << std::endl; + std::cout << "The intersection computation took " + << timer.time() << " seconds." << std::endl; + + return 0; +} + +#endif diff --git a/Boolean_set_operations_2/examples/Boolean_set_operations_2/char_g.dat b/Boolean_set_operations_2/examples/Boolean_set_operations_2/char_g.dat new file mode 100644 index 00000000000..a03e1c56d1f --- /dev/null +++ b/Boolean_set_operations_2/examples/Boolean_set_operations_2/char_g.dat @@ -0,0 +1,339 @@ +43 +7 + 89494154/100000000 -154340947/100000000 + 89512189/100000000 -154885004/100000000 + 89445331/100000000 -155338170/100000000 + 89293577/100000000 -155700447/100000000 + 89056928/100000000 -155971834/100000000 + 88735384/100000000 -156152330/100000000 + 88328945/100000000 -156241937/100000000 +7 + 88328945/100000000 -156241937/100000000 + 88112094/100000000 -156286851/100000000 + 87704061/100000000 -156324906/100000000 + 87104847/100000000 -156356103/100000000 + 86314451/100000000 -156380440/100000000 + 85332874/100000000 -156397919/100000000 + 84160116/100000000 -156408539/100000000 +4 + 84160116/100000000 -156408539/100000000 + 80913638/100000000 -156438408/100000000 + 77667161/100000000 -156468277/100000000 + 74420683/100000000 -156498146/100000000 +7 + 74420683/100000000 -156498146/100000000 + 75984781/100000000 -157518114/100000000 + 77246712/100000000 -158655787/100000000 + 78206478/100000000 -159911167/100000000 + 78864079/100000000 -161284251/100000000 + 79219514/100000000 -162775042/100000000 + 79272783/100000000 -164383538/100000000 +7 + 79272783/100000000 -164383538/100000000 + 79341152/100000000 -166451351/100000000 + 78798898/100000000 -168361059/100000000 + 77646021/100000000 -170112660/100000000 + 75882521/100000000 -171706155/100000000 + 73508398/100000000 -173141544/100000000 + 70523652/100000000 -174418827/100000000 +7 + 70523652/100000000 -174418827/100000000 + 67780085/100000000 -175578847/100000000 + 64778142/100000000 -176514297/100000000 + 61517823/100000000 -177225177/100000000 + 57999128/100000000 -177711487/100000000 + 54222057/100000000 -177973228/100000000 + 50186610/100000000 -178010398/100000000 +7 + 50186610/100000000 -178010398/100000000 + 48332678/100000000 -178027434/100000000 + 46460459/100000000 -177986857/100000000 + 44569952/100000000 -177888665/100000000 + 42661157/100000000 -177732860/100000000 + 40734075/100000000 -177519441/100000000 + 38788705/100000000 -177248409/100000000 +7 + 38788705/100000000 -177248409/100000000 + 36774966/100000000 -178205320/100000000 + 35168757/100000000 -179115149/100000000 + 33970077/100000000 -179977896/100000000 + 33178926/100000000 -180793561/100000000 + 32795305/100000000 -181562143/100000000 + 32819213/100000000 -182283643/100000000 +7 + 32819213/100000000 -182283643/100000000 + 32840185/100000000 -182918634/100000000 + 33299977/100000000 -183457159/100000000 + 34198589/100000000 -183899219/100000000 + 35536020/100000000 -184244813/100000000 + 37312271/100000000 -184493942/100000000 + 39527342/100000000 -184646606/100000000 +7 + 39527342/100000000 -184646606/100000000 + 40320086/100000000 -184697051/100000000 + 41560207/100000000 -184740505/100000000 + 43247704/100000000 -184776967/100000000 + 45382578/100000000 -184806437/100000000 + 47964828/100000000 -184828917/100000000 + 50994454/100000000 -184844404/100000000 +7 + 50994454/100000000 -184844404/100000000 + 56588546/100000000 -184864759/100000000 + 61402896/100000000 -184903832/100000000 + 65437504/100000000 -184961623/100000000 + 68692370/100000000 -185038132/100000000 + 71167495/100000000 -185133358/100000000 + 72862877/100000000 -185247303/100000000 +7 + 72862877/100000000 -185247303/100000000 + 75296058/100000000 -185411913/100000000 + 77547536/100000000 -185687548/100000000 + 79617312/100000000 -186074207/100000000 + 81505386/100000000 -186571889/100000000 + 83211758/100000000 -187180595/100000000 + 84736428/100000000 -187900325/100000000 +7 + 84736428/100000000 -187900325/100000000 + 86396578/100000000 -188704795/100000000 + 87732835/100000000 -189595729/100000000 + 88745199/100000000 -190573128/100000000 + 89433670/100000000 -191636992/100000000 + 89798249/100000000 -192787321/100000000 + 89838934/100000000 -194024115/100000000 +7 + 89838934/100000000 -194024115/100000000 + 89892623/100000000 -195648984/100000000 + 89367231/100000000 -197238939/100000000 + 88262757/100000000 -198793981/100000000 + 86579203/100000000 -200314109/100000000 + 84316567/100000000 -201799324/100000000 + 81474851/100000000 -203249626/100000000 +7 + 81474851/100000000 -203249626/100000000 + 77292180/100000000 -205388240/100000000 + 72577825/100000000 -207111698/100000000 + 67331786/100000000 -208420000/100000000 + 61554062/100000000 -209313147/100000000 + 55244655/100000000 -209791138/100000000 + 48403564/100000000 -209853973/100000000 +7 + 48403564/100000000 -209853973/100000000 + 43116084/100000000 -209902648/100000000 + 38158285/100000000 -209697770/100000000 + 33530167/100000000 -209239337/100000000 + 29231730/100000000 -208527351/100000000 + 25262974/100000000 -207561811/100000000 + 21623899/100000000 -206342717/100000000 +7 + 21623899/100000000 -206342717/100000000 + 19556472/100000000 -205656175/100000000 + 17897245/100000000 -204948613/100000000 + 16646219/100000000 -204220033/100000000 + 15803393/100000000 -203470434/100000000 + 15368768/100000000 -202699816/100000000 + 15342343/100000000 -201908180/100000000 +7 + 15342343/100000000 -201908180/100000000 + 15318854/100000000 -201188671/100000000 + 15730075/100000000 -200318225/100000000 + 16576004/100000000 -199296841/100000000 + 17856643/100000000 -198124519/100000000 + 19571991/100000000 -196801260/100000000 + 21722049/100000000 -195327064/100000000 +7 + 21722049/100000000 -195327064/100000000 + 21934286/100000000 -195181038/100000000 + 22604973/100000000 -194777431/100000000 + 23734110/100000000 -194116244/100000000 + 25321696/100000000 -193197477/100000000 + 27367732/100000000 -192021128/100000000 + 29872217/100000000 -190587200/100000000 +7 + 29872217/100000000 -190587200/100000000 + 27267905/100000000 -189790474/100000000 + 25179337/100000000 -188997643/100000000 + 23606516/100000000 -188208705/100000000 + 22549439/100000000 -187423662/100000000 + 22008108/100000000 -186642512/100000000 + 21982522/100000000 -185865257/100000000 +7 + 21982522/100000000 -185865257/100000000 + 21943933/100000000 -184699263/100000000 + 22770065/100000000 -183372774/100000000 + 24460918/100000000 -181885789/100000000 + 27016491/100000000 -180238309/100000000 + 30436785/100000000 -178430333/100000000 + 34721800/100000000 -176461861/100000000 +7 + 34721800/100000000 -176461861/100000000 + 29956944/100000000 -175285468/100000000 + 26126772/100000000 -173793262/100000000 + 23231283/100000000 -171985242/100000000 + 21270478/100000000 -169861407/100000000 + 20244356/100000000 -167421759/100000000 + 20152918/100000000 -164666297/100000000 +7 + 20152918/100000000 -164666297/100000000 + 20083291/100000000 -162556667/100000000 + 20623615/100000000 -160590762/100000000 + 21773892/100000000 -158768581/100000000 + 23534120/100000000 -157090126/100000000 + 25904300/100000000 -155555395/100000000 + 28884432/100000000 -154164389/100000000 +7 + 28884432/100000000 -154164389/100000000 + 31703499/100000000 -152846395/100000000 + 34770875/100000000 -151784522/100000000 + 38086560/100000000 -150978770/100000000 + 41650555/100000000 -150429138/100000000 + 45462859/100000000 -150135626/100000000 + 49523472/100000000 -150098235/100000000 +7 + 49523472/100000000 -150098235/100000000 + 53093759/100000000 -150065489/100000000 + 56479323/100000000 -150218551/100000000 + 59680165/100000000 -150557419/100000000 + 62696286/100000000 -151082094/100000000 + 65527684/100000000 -151792576/100000000 + 68174360/100000000 -152688865/100000000 +4 + 68174360/100000000 -152688865/100000000 + 73461840/100000000 -152640189/100000000 + 78749320/100000000 -152591514/100000000 + 84036800/100000000 -152542839/100000000 +7 + 84036800/100000000 -152542839/100000000 + 85508201/100000000 -152529342/100000000 + 86719002/100000000 -152546888/100000000 + 87669205/100000000 -152595474/100000000 + 88358809/100000000 -152675103/100000000 + 88787814/100000000 -152785773/100000000 + 88956220/100000000 -152927484/100000000 +7 + 88956220/100000000 -152927484/100000000 + 89124626/100000000 -153069195/100000000 + 89261531/100000000 -153248453/100000000 + 89366937/100000000 -153465257/100000000 + 89440842/100000000 -153719607/100000000 + 89483248/100000000 -154011504/100000000 + 89494154/100000000 -154340947/100000000 +7 + 65054973/100000000 -165592897/100000000 + 64979474/100000000 -163312903/100000000 + 64533104/100000000 -161234293/100000000 + 63715864/100000000 -159357065/100000000 + 62527754/100000000 -157681220/100000000 + 60968774/100000000 -156206758/100000000 + 59038923/100000000 -154933679/100000000 +7 + 59038923/100000000 -154933679/100000000 + 57612822/100000000 -153999999/100000000 + 56034380/100000000 -153257082/100000000 + 54303596/100000000 -152704927/100000000 + 52420471/100000000 -152343536/100000000 + 50385005/100000000 -152172907/100000000 + 48197198/100000000 -152193041/100000000 +7 + 48197198/100000000 -152193041/100000000 + 45681388/100000000 -152216051/100000000 + 43430078/100000000 -152460445/100000000 + 41443267/100000000 -152926223/100000000 + 39720956/100000000 -153613385/100000000 + 38263145/100000000 -154521931/100000000 + 37069834/100000000 -155651860/100000000 +7 + 37069834/100000000 -155651860/100000000 + 36088341/100000000 -156578903/100000000 + 35312458/100000000 -157601614/100000000 + 34742185/100000000 -158719995/100000000 + 34377523/100000000 -159934044/100000000 + 34218470/100000000 -161243762/100000000 + 34265028/100000000 -162649150/100000000 +7 + 34265028/100000000 -162649150/100000000 + 34339689/100000000 -164914983/100000000 + 34779599/100000000 -166973681/100000000 + 35584759/100000000 -168825244/100000000 + 36755169/100000000 -170469671/100000000 + 38290828/100000000 -171906963/100000000 + 40191737/100000000 -173137119/100000000 +7 + 40191737/100000000 -173137119/100000000 + 41645102/100000000 -174070578/100000000 + 43245355/100000000 -174813318/100000000 + 44992497/100000000 -175365340/100000000 + 46886527/100000000 -175726643/100000000 + 48927446/100000000 -175897228/100000000 + 51115253/100000000 -175877094/100000000 +7 + 51115253/100000000 -175877094/100000000 + 55873398/100000000 -175833286/100000000 + 59657599/100000000 -175121388/100000000 + 62467858/100000000 -173741401/100000000 + 64304173/100000000 -171693323/100000000 + 65166545/100000000 -168977155/100000000 + 65054973/100000000 -165592897/100000000 +7 + 83934875/100000000 -195755848/100000000 + 83902159/100000000 -194763758/100000000 + 83310914/100000000 -193914862/100000000 + 82161141/100000000 -193209159/100000000 + 80452840/100000000 -192646650/100000000 + 78186010/100000000 -192227335/100000000 + 75360652/100000000 -191951213/100000000 +7 + 75360652/100000000 -191951213/100000000 + 74373286/100000000 -191859615/100000000 + 72938041/100000000 -191783637/100000000 + 71054916/100000000 -191723280/100000000 + 68723912/100000000 -191678543/100000000 + 65945028/100000000 -191649427/100000000 + 62718264/100000000 -191635930/100000000 +7 + 62718264/100000000 -191635930/100000000 + 56592321/100000000 -191605840/100000000 + 51023060/100000000 -191539022/100000000 + 46010482/100000000 -191435477/100000000 + 41554587/100000000 -191295203/100000000 + 37655374/100000000 -191118202/100000000 + 34312845/100000000 -190904474/100000000 +7 + 34312845/100000000 -190904474/100000000 + 31838559/100000000 -192408761/100000000 + 29866093/100000000 -193822157/100000000 + 28395447/100000000 -195144664/100000000 + 27426621/100000000 -196376281/100000000 + 26959615/100000000 -197517008/100000000 + 26994429/100000000 -198566845/100000000 +7 + 26994429/100000000 -198566845/100000000 + 27017079/100000000 -199257148/100000000 + 27354477/100000000 -199909972/100000000 + 28006625/100000000 -200525316/100000000 + 28973522/100000000 -201103179/100000000 + 30255167/100000000 -201643563/100000000 + 31851562/100000000 -202146467/100000000 +7 + 31851562/100000000 -202146467/100000000 + 34603937/100000000 -203013108/100000000 + 37835063/100000000 -203696951/100000000 + 41544939/100000000 -204197997/100000000 + 45733567/100000000 -204516244/100000000 + 50400944/100000000 -204651694/100000000 + 55547072/100000000 -204604347/100000000 +7 + 55547072/100000000 -204604347/100000000 + 58869049/100000000 -204573814/100000000 + 62051184/100000000 -204432346/100000000 + 65093478/100000000 -204179943/100000000 + 67995929/100000000 -203816604/100000000 + 70758539/100000000 -203342330/100000000 + 73381307/100000000 -202757121/100000000 +7 + 73381307/100000000 -202757121/100000000 + 76949916/100000000 -201947784/100000000 + 79794652/100000000 -200995430/100000000 + 81915516/100000000 -199900060/100000000 + 83312508/100000000 -198661673/100000000 + 83985628/100000000 -197280269/100000000 + 83934875/100000000 -195755848/100000000 diff --git a/Boolean_set_operations_2/examples/Boolean_set_operations_2/char_m.dat b/Boolean_set_operations_2/examples/Boolean_set_operations_2/char_m.dat new file mode 100644 index 00000000000..fdb30cd1895 --- /dev/null +++ b/Boolean_set_operations_2/examples/Boolean_set_operations_2/char_m.dat @@ -0,0 +1,351 @@ +52 +4 + 90000000/100000000 -208313601/100000000 + 82375743/100000000 -208477079/100000000 + 74751487/100000000 -208640556/100000000 + 67127230/100000000 -208804033/100000000 +4 + 67127230/100000000 -208804033/100000000 + 67116612/100000000 -208049425/100000000 + 67105994/100000000 -207294816/100000000 + 67095376/100000000 -206540207/100000000 +4 + 67095376/100000000 -206540207/100000000 + 67416765/100000000 -206533515/100000000 + 67738154/100000000 -206526823/100000000 + 68059544/100000000 -206520131/100000000 +7 + 68059544/100000000 -206520131/100000000 + 69835084/100000000 -206481891/100000000 + 71318810/100000000 -206143783/100000000 + 72510722/100000000 -205505807/100000000 + 73410819/100000000 -204567963/100000000 + 74019102/100000000 -203330252/100000000 + 74335571/100000000 -201792673/100000000 +7 + 74335571/100000000 -201792673/100000000 + 74398761/100000000 -201481014/100000000 + 74444496/100000000 -200892560/100000000 + 74472776/100000000 -200027309/100000000 + 74483602/100000000 -198885262/100000000 + 74476972/100000000 -197466419/100000000 + 74452887/100000000 -195770780/100000000 +4 + 74452887/100000000 -195770780/100000000 + 74337384/100000000 -187623045/100000000 + 74221880/100000000 -179475310/100000000 + 74106377/100000000 -171327575/100000000 +7 + 74106377/100000000 -171327575/100000000 + 74073228/100000000 -168990774/100000000 + 73953167/100000000 -166937141/100000000 + 73746193/100000000 -165166679/100000000 + 73452307/100000000 -163679386/100000000 + 73071508/100000000 -162475262/100000000 + 72603798/100000000 -161554308/100000000 +7 + 72603798/100000000 -161554308/100000000 + 71945739/100000000 -160244578/100000000 + 71126442/100000000 -159203039/100000000 + 70145907/100000000 -158429693/100000000 + 69004133/100000000 -157924538/100000000 + 67701121/100000000 -157687576/100000000 + 66236870/100000000 -157718805/100000000 +7 + 66236870/100000000 -157718805/100000000 + 64486450/100000000 -157756408/100000000 + 62649067/100000000 -158313060/100000000 + 60724719/100000000 -159388760/100000000 + 58713407/100000000 -160983508/100000000 + 56615130/100000000 -163097305/100000000 + 54429890/100000000 -165730150/100000000 +4 + 54429890/100000000 -165730150/100000000 + 54399590/100000000 -165958317/100000000 + 54369290/100000000 -166186484/100000000 + 54338989/100000000 -166414651/100000000 +4 + 54338989/100000000 -166414651/100000000 + 54385346/100000000 -167303101/100000000 + 54431703/100000000 -168191551/100000000 + 54478060/100000000 -169080001/100000000 +4 + 54478060/100000000 -169080001/100000000 + 54605994/100000000 -178117142/100000000 + 54733928/100000000 -187154283/100000000 + 54861862/100000000 -196191424/100000000 +7 + 54861862/100000000 -196191424/100000000 + 54883357/100000000 -197700960/100000000 + 54911534/100000000 -198970411/100000000 + 54946392/100000000 -199999776/100000000 + 54987932/100000000 -200789056/100000000 + 55036153/100000000 -201338250/100000000 + 55091056/100000000 -201647360/100000000 +7 + 55091056/100000000 -201647360/100000000 + 55238931/100000000 -202616433/100000000 + 55489465/100000000 -203471614/100000000 + 55842656/100000000 -204212902/100000000 + 56298506/100000000 -204840298/100000000 + 56857014/100000000 -205353802/100000000 + 57518180/100000000 -205753413/100000000 +7 + 57518180/100000000 -205753413/100000000 + 58009976/100000000 -206073675/100000000 + 58638563/100000000 -206324850/100000000 + 59403941/100000000 -206506938/100000000 + 60306110/100000000 -206619938/100000000 + 61345070/100000000 -206663851/100000000 + 62520822/100000000 -206638676/100000000 +4 + 62520822/100000000 -206638676/100000000 + 62531440/100000000 -207393285/100000000 + 62542058/100000000 -208147893/100000000 + 62552676/100000000 -208902502/100000000 +4 + 62552676/100000000 -208902502/100000000 + 54762674/100000000 -209069803/100000000 + 46972673/100000000 -209237105/100000000 + 39182671/100000000 -209404406/100000000 +4 + 39182671/100000000 -209404406/100000000 + 39172053/100000000 -208649797/100000000 + 39161435/100000000 -207895189/100000000 + 39150817/100000000 -207140580/100000000 +7 + 39150817/100000000 -207140580/100000000 + 41200095/100000000 -207096604/100000000 + 42909182/100000000 -206762065/100000000 + 44278078/100000000 -206136963/100000000 + 45306783/100000000 -205221299/100000000 + 45995297/100000000 -204015072/100000000 + 46343620/100000000 -202518283/100000000 +7 + 46343620/100000000 -202518283/100000000 + 46422608/100000000 -202164878/100000000 + 46480981/100000000 -201543027/100000000 + 46518740/100000000 -200652729/100000000 + 46535884/100000000 -199493984/100000000 + 46532413/100000000 -198066792/100000000 + 46508329/100000000 -196371153/100000000 +4 + 46508329/100000000 -196371153/100000000 + 46392825/100000000 -188223737/100000000 + 46277322/100000000 -180076320/100000000 + 46161819/100000000 -171928904/100000000 +7 + 46161819/100000000 -171928904/100000000 + 46128670/100000000 -169592102/100000000 + 45988305/100000000 -167526552/100000000 + 45740723/100000000 -165732253/100000000 + 45385926/100000000 -164209205/100000000 + 44923913/100000000 -162957409/100000000 + 44354683/100000000 -161976864/100000000 +7 + 44354683/100000000 -161976864/100000000 + 43595365/100000000 -160669364/100000000 + 42722046/100000000 -159629036/100000000 + 41734726/100000000 -158855881/100000000 + 40633404/100000000 -158349898/100000000 + 39418081/100000000 -158111087/100000000 + 38088756/100000000 -158139449/100000000 +7 + 38088756/100000000 -158139449/100000000 + 37196843/100000000 -158158569/100000000 + 36303220/100000000 -158297700/100000000 + 35407887/100000000 -158556842/100000000 + 34510846/100000000 -158935994/100000000 + 33612095/100000000 -159435158/100000000 + 32711635/100000000 -160054332/100000000 +7 + 32711635/100000000 -160054332/100000000 + 31311092/100000000 -161015439/100000000 + 30045735/100000000 -162010770/100000000 + 28915563/100000000 -163040327/100000000 + 27920577/100000000 -164104108/100000000 + 27060777/100000000 -165202115/100000000 + 26336161/100000000 -166334347/100000000 +4 + 26336161/100000000 -166334347/100000000 + 26480152/100000000 -176487786/100000000 + 26624143/100000000 -186641225/100000000 + 26768134/100000000 -196794664/100000000 +7 + 26768134/100000000 -196794664/100000000 + 26806203/100000000 -199482639/100000000 + 27006236/100000000 -201741176/100000000 + 27368233/100000000 -203570274/100000000 + 27892193/100000000 -204969933/100000000 + 28578118/100000000 -205940153/100000000 + 29426005/100000000 -206480935/100000000 +7 + 29426005/100000000 -206480935/100000000 + 29833375/100000000 -206761682/100000000 + 30411202/100000000 -206980863/100000000 + 31159488/100000000 -207138477/100000000 + 32078232/100000000 -207234524/100000000 + 33167433/100000000 -207269004/100000000 + 34427093/100000000 -207241917/100000000 +4 + 34427093/100000000 -207241917/100000000 + 34437711/100000000 -207996526/100000000 + 34448329/100000000 -208751134/100000000 + 34458947/100000000 -209505743/100000000 +4 + 34458947/100000000 -209505743/100000000 + 26834690/100000000 -209669220/100000000 + 19210434/100000000 -209832698/100000000 + 11586177/100000000 -209996175/100000000 +4 + 11586177/100000000 -209996175/100000000 + 11575559/100000000 -209241566/100000000 + 11564941/100000000 -208486957/100000000 + 11554323/100000000 -207732349/100000000 +7 + 11554323/100000000 -207732349/100000000 + 13252429/100000000 -207696020/100000000 + 14691611/100000000 -207429358/100000000 + 15871869/100000000 -206932361/100000000 + 16793202/100000000 -206205031/100000000 + 17455611/100000000 -205247366/100000000 + 17859096/100000000 -204059367/100000000 +7 + 17859096/100000000 -204059367/100000000 + 18069126/100000000 -203454852/100000000 + 18232177/100000000 -202619556/100000000 + 18348250/100000000 -201553480/100000000 + 18417345/100000000 -200256623/100000000 + 18439462/100000000 -198728987/100000000 + 18414600/100000000 -196970570/100000000 +4 + 18414600/100000000 -196970570/100000000 + 18312045/100000000 -189731042/100000000 + 18209491/100000000 -182491514/100000000 + 18106936/100000000 -175251987/100000000 +7 + 18106936/100000000 -175251987/100000000 + 18062393/100000000 -172107996/100000000 + 17994023/100000000 -169415560/100000000 + 17901827/100000000 -167174678/100000000 + 17785806/100000000 -165385350/100000000 + 17645959/100000000 -164047576/100000000 + 17482286/100000000 -163161357/100000000 +7 + 17482286/100000000 -163161357/100000000 + 17263710/100000000 -161966029/100000000 + 16917563/100000000 -161013399/100000000 + 16443844/100000000 -160303468/100000000 + 15842553/100000000 -159836235/100000000 + 15113691/100000000 -159611701/100000000 + 14257257/100000000 -159629865/100000000 +7 + 14257257/100000000 -159629865/100000000 + 13787215/100000000 -159640062/100000000 + 13281072/100000000 -159712209/100000000 + 12738828/100000000 -159846305/100000000 + 12160482/100000000 -160042350/100000000 + 11546036/100000000 -160300345/100000000 + 10895488/100000000 -160620289/100000000 +4 + 10895488/100000000 -160620289/100000000 + 10633145/100000000 -159871097/100000000 + 10370802/100000000 -159121906/100000000 + 10108459/100000000 -158372715/100000000 +4 + 10108459/100000000 -158372715/100000000 + 14722119/100000000 -155968355/100000000 + 19335778/100000000 -153563996/100000000 + 23949438/100000000 -151159636/100000000 +4 + 23949438/100000000 -151159636/100000000 + 24673276/100000000 -151144022/100000000 + 25397114/100000000 -151128407/100000000 + 26120952/100000000 -151112792/100000000 +4 + 26120952/100000000 -151112792/100000000 + 26178186/100000000 -155151925/100000000 + 26235420/100000000 -159191057/100000000 + 26292653/100000000 -163230190/100000000 +7 + 26292653/100000000 -163230190/100000000 + 27952431/100000000 -161143544/100000000 + 29344065/100000000 -159406541/100000000 + 30467555/100000000 -158019183/100000000 + 31322902/100000000 -156981468/100000000 + 31910104/100000000 -156293398/100000000 + 32229163/100000000 -155954971/100000000 +7 + 32229163/100000000 -155954971/100000000 + 33826268/100000000 -154263156/100000000 + 35462169/100000000 -152901992/100000000 + 37136864/100000000 -151871480/100000000 + 38850353/100000000 -151171618/100000000 + 40602637/100000000 -150802408/100000000 + 42393716/100000000 -150763849/100000000 +7 + 42393716/100000000 -150763849/100000000 + 45600617/100000000 -150695017/100000000 + 48324269/100000000 -151444654/100000000 + 50564672/100000000 -153012762/100000000 + 52321824/100000000 -155399339/100000000 + 53595728/100000000 -158604387/100000000 + 54386382/100000000 -162627905/100000000 +7 + 54386382/100000000 -162627905/100000000 + 55703535/100000000 -160651837/100000000 + 56947500/100000000 -158896989/100000000 + 58118280/100000000 -157363362/100000000 + 59215872/100000000 -156050954/100000000 + 60240278/100000000 -154959767/100000000 + 61191497/100000000 -154089800/100000000 +7 + 61191497/100000000 -154089800/100000000 + 62585307/100000000 -152816716/100000000 + 64019154/100000000 -151791430/100000000 + 65493039/100000000 -151013941/100000000 + 67006961/100000000 -150484249/100000000 + 68560922/100000000 -150202354/100000000 + 70154920/100000000 -150168256/100000000 +7 + 70154920/100000000 -150168256/100000000 + 72761514/100000000 -150112171/100000000 + 75062051/100000000 -150724908/100000000 + 77056529/100000000 -152006468/100000000 + 78744950/100000000 -153956851/100000000 + 80127313/100000000 -156576057/100000000 + 81203617/100000000 -159864087/100000000 +7 + 81203617/100000000 -159864087/100000000 + 81585607/100000000 -161035196/100000000 + 81898554/100000000 -162489284/100000000 + 82142458/100000000 -164226350/100000000 + 82317318/100000000 -166246394/100000000 + 82423136/100000000 -168549417/100000000 + 82459910/100000000 -171135417/100000000 +4 + 82459910/100000000 -171135417/100000000 + 82575414/100000000 -179286021/100000000 + 82690917/100000000 -187436624/100000000 + 82806421/100000000 -195587227/100000000 +7 + 82806421/100000000 -195587227/100000000 + 82832059/100000000 -197387071/100000000 + 82898409/100000000 -198954286/100000000 + 83005470/100000000 -200288873/100000000 + 83153241/100000000 -201390831/100000000 + 83341724/100000000 -202260161/100000000 + 83570918/100000000 -202896862/100000000 +7 + 83570918/100000000 -202896862/100000000 + 83975957/100000000 -203984798/100000000 + 84645462/100000000 -204847755/100000000 + 85579433/100000000 -205485731/100000000 + 86777871/100000000 -205898726/100000000 + 88240775/100000000 -206086741/100000000 + 89968146/100000000 -206049775/100000000 +4 + 89968146/100000000 -206049775/100000000 + 89978764/100000000 -206804384/100000000 + 89989382/100000000 -207558993/100000000 + 90000000/100000000 -208313601/100000000