Skip to content

Instantly share code, notes, and snippets.

@mrzv
Last active May 13, 2019 22:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mrzv/67434e9bdb49d2f6ba1814ecf0232dcb to your computer and use it in GitHub Desktop.
Save mrzv/67434e9bdb49d2f6ba1814ecf0232dcb to your computer and use it in GitHub Desktop.
Filtration bug

Describes a bug in CGAL's alpha shape filtration.

//Copyright (C) 2011 Carl Rogers
//Released under MIT License
//license available in LICENSE file, or at http://www.opensource.org/licenses/mit-license.php
#include"cnpy.h"
#include<complex>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<stdint.h>
#include<stdexcept>
#include <regex>
char cnpy::BigEndianTest() {
int x = 1;
return (((char *)&x)[0]) ? '<' : '>';
}
char cnpy::map_type(const std::type_info& t)
{
if(t == typeid(float) ) return 'f';
if(t == typeid(double) ) return 'f';
if(t == typeid(long double) ) return 'f';
if(t == typeid(int) ) return 'i';
if(t == typeid(char) ) return 'i';
if(t == typeid(short) ) return 'i';
if(t == typeid(long) ) return 'i';
if(t == typeid(long long) ) return 'i';
if(t == typeid(unsigned char) ) return 'u';
if(t == typeid(unsigned short) ) return 'u';
if(t == typeid(unsigned long) ) return 'u';
if(t == typeid(unsigned long long) ) return 'u';
if(t == typeid(unsigned int) ) return 'u';
if(t == typeid(bool) ) return 'b';
if(t == typeid(std::complex<float>) ) return 'c';
if(t == typeid(std::complex<double>) ) return 'c';
if(t == typeid(std::complex<long double>) ) return 'c';
else return '?';
}
template<> std::vector<char>& cnpy::operator+=(std::vector<char>& lhs, const std::string rhs) {
lhs.insert(lhs.end(),rhs.begin(),rhs.end());
return lhs;
}
template<> std::vector<char>& cnpy::operator+=(std::vector<char>& lhs, const char* rhs) {
//write in little endian
size_t len = strlen(rhs);
lhs.reserve(len);
for(size_t byte = 0; byte < len; byte++) {
lhs.push_back(rhs[byte]);
}
return lhs;
}
void cnpy::parse_npy_header(unsigned char* buffer,size_t& word_size, std::vector<size_t>& shape, bool& fortran_order) {
//std::string magic_string(buffer,6);
uint8_t major_version = *reinterpret_cast<uint8_t*>(buffer+6);
uint8_t minor_version = *reinterpret_cast<uint8_t*>(buffer+7);
uint16_t header_len = *reinterpret_cast<uint16_t*>(buffer+8);
std::string header(reinterpret_cast<char*>(buffer+9),header_len);
size_t loc1, loc2;
//fortran order
loc1 = header.find("fortran_order")+16;
fortran_order = (header.substr(loc1,4) == "True" ? true : false);
//shape
loc1 = header.find("(");
loc2 = header.find(")");
std::regex num_regex("[0-9][0-9]*");
std::smatch sm;
shape.clear();
std::string str_shape = header.substr(loc1+1,loc2-loc1-1);
while(std::regex_search(str_shape, sm, num_regex)) {
shape.push_back(std::stoi(sm[0].str()));
str_shape = sm.suffix().str();
}
//endian, word size, data type
//byte order code | stands for not applicable.
//not sure when this applies except for byte array
loc1 = header.find("descr")+9;
bool littleEndian = (header[loc1] == '<' || header[loc1] == '|' ? true : false);
assert(littleEndian);
//char type = header[loc1+1];
//assert(type == map_type(T));
std::string str_ws = header.substr(loc1+2);
loc2 = str_ws.find("'");
word_size = atoi(str_ws.substr(0,loc2).c_str());
}
void cnpy::parse_npy_header(FILE* fp, size_t& word_size, std::vector<size_t>& shape, bool& fortran_order) {
char buffer[256];
size_t res = fread(buffer,sizeof(char),11,fp);
if(res != 11)
throw std::runtime_error("parse_npy_header: failed fread");
std::string header = fgets(buffer,256,fp);
assert(header[header.size()-1] == '\n');
size_t loc1, loc2;
//fortran order
loc1 = header.find("fortran_order");
if (loc1 == std::string::npos)
throw std::runtime_error("parse_npy_header: failed to find header keyword: 'fortran_order'");
loc1 += 16;
fortran_order = (header.substr(loc1,4) == "True" ? true : false);
//shape
loc1 = header.find("(");
loc2 = header.find(")");
if (loc1 == std::string::npos || loc2 == std::string::npos)
throw std::runtime_error("parse_npy_header: failed to find header keyword: '(' or ')'");
std::regex num_regex("[0-9][0-9]*");
std::smatch sm;
shape.clear();
std::string str_shape = header.substr(loc1+1,loc2-loc1-1);
while(std::regex_search(str_shape, sm, num_regex)) {
shape.push_back(std::stoi(sm[0].str()));
str_shape = sm.suffix().str();
}
//endian, word size, data type
//byte order code | stands for not applicable.
//not sure when this applies except for byte array
loc1 = header.find("descr");
if (loc1 == std::string::npos)
throw std::runtime_error("parse_npy_header: failed to find header keyword: 'descr'");
loc1 += 9;
bool littleEndian = (header[loc1] == '<' || header[loc1] == '|' ? true : false);
assert(littleEndian);
//char type = header[loc1+1];
//assert(type == map_type(T));
std::string str_ws = header.substr(loc1+2);
loc2 = str_ws.find("'");
word_size = atoi(str_ws.substr(0,loc2).c_str());
}
void cnpy::parse_zip_footer(FILE* fp, uint16_t& nrecs, size_t& global_header_size, size_t& global_header_offset)
{
std::vector<char> footer(22);
fseek(fp,-22,SEEK_END);
size_t res = fread(&footer[0],sizeof(char),22,fp);
if(res != 22)
throw std::runtime_error("parse_zip_footer: failed fread");
uint16_t disk_no, disk_start, nrecs_on_disk, comment_len;
disk_no = *(uint16_t*) &footer[4];
disk_start = *(uint16_t*) &footer[6];
nrecs_on_disk = *(uint16_t*) &footer[8];
nrecs = *(uint16_t*) &footer[10];
global_header_size = *(uint32_t*) &footer[12];
global_header_offset = *(uint32_t*) &footer[16];
comment_len = *(uint16_t*) &footer[20];
assert(disk_no == 0);
assert(disk_start == 0);
assert(nrecs_on_disk == nrecs);
assert(comment_len == 0);
}
cnpy::NpyArray load_the_npy_file(FILE* fp) {
std::vector<size_t> shape;
size_t word_size;
bool fortran_order;
cnpy::parse_npy_header(fp,word_size,shape,fortran_order);
cnpy::NpyArray arr(shape, word_size, fortran_order);
size_t nread = fread(arr.data<char>(),1,arr.num_bytes(),fp);
if(nread != arr.num_bytes())
throw std::runtime_error("load_the_npy_file: failed fread");
return arr;
}
cnpy::NpyArray load_the_npz_array(FILE* fp, uint32_t compr_bytes, uint32_t uncompr_bytes) {
std::vector<unsigned char> buffer_compr(compr_bytes);
std::vector<unsigned char> buffer_uncompr(uncompr_bytes);
size_t nread = fread(&buffer_compr[0],1,compr_bytes,fp);
if(nread != compr_bytes)
throw std::runtime_error("load_the_npy_file: failed fread");
int err;
z_stream d_stream;
d_stream.zalloc = Z_NULL;
d_stream.zfree = Z_NULL;
d_stream.opaque = Z_NULL;
d_stream.avail_in = 0;
d_stream.next_in = Z_NULL;
err = inflateInit2(&d_stream, -MAX_WBITS);
d_stream.avail_in = compr_bytes;
d_stream.next_in = &buffer_compr[0];
d_stream.avail_out = uncompr_bytes;
d_stream.next_out = &buffer_uncompr[0];
err = inflate(&d_stream, Z_FINISH);
err = inflateEnd(&d_stream);
std::vector<size_t> shape;
size_t word_size;
bool fortran_order;
cnpy::parse_npy_header(&buffer_uncompr[0],word_size,shape,fortran_order);
cnpy::NpyArray array(shape, word_size, fortran_order);
size_t offset = uncompr_bytes - array.num_bytes();
memcpy(array.data<unsigned char>(),&buffer_uncompr[0]+offset,array.num_bytes());
return array;
}
cnpy::npz_t cnpy::npz_load(std::string fname) {
FILE* fp = fopen(fname.c_str(),"rb");
if(!fp) {
throw std::runtime_error("npz_load: Error! Unable to open file "+fname+"!");
}
cnpy::npz_t arrays;
while(1) {
std::vector<char> local_header(30);
size_t headerres = fread(&local_header[0],sizeof(char),30,fp);
if(headerres != 30)
throw std::runtime_error("npz_load: failed fread");
//if we've reached the global header, stop reading
if(local_header[2] != 0x03 || local_header[3] != 0x04) break;
//read in the variable name
uint16_t name_len = *(uint16_t*) &local_header[26];
std::string varname(name_len,' ');
size_t vname_res = fread(&varname[0],sizeof(char),name_len,fp);
if(vname_res != name_len)
throw std::runtime_error("npz_load: failed fread");
//erase the lagging .npy
varname.erase(varname.end()-4,varname.end());
//read in the extra field
uint16_t extra_field_len = *(uint16_t*) &local_header[28];
if(extra_field_len > 0) {
std::vector<char> buff(extra_field_len);
size_t efield_res = fread(&buff[0],sizeof(char),extra_field_len,fp);
if(efield_res != extra_field_len)
throw std::runtime_error("npz_load: failed fread");
}
uint16_t compr_method = *reinterpret_cast<uint16_t*>(&local_header[0]+8);
uint32_t compr_bytes = *reinterpret_cast<uint32_t*>(&local_header[0]+18);
uint32_t uncompr_bytes = *reinterpret_cast<uint32_t*>(&local_header[0]+22);
if(compr_method == 0) {arrays[varname] = load_the_npy_file(fp);}
else {arrays[varname] = load_the_npz_array(fp,compr_bytes,uncompr_bytes);}
}
fclose(fp);
return arrays;
}
cnpy::NpyArray cnpy::npz_load(std::string fname, std::string varname) {
FILE* fp = fopen(fname.c_str(),"rb");
if(!fp) throw std::runtime_error("npz_load: Unable to open file "+fname);
while(1) {
std::vector<char> local_header(30);
size_t header_res = fread(&local_header[0],sizeof(char),30,fp);
if(header_res != 30)
throw std::runtime_error("npz_load: failed fread");
//if we've reached the global header, stop reading
if(local_header[2] != 0x03 || local_header[3] != 0x04) break;
//read in the variable name
uint16_t name_len = *(uint16_t*) &local_header[26];
std::string vname(name_len,' ');
size_t vname_res = fread(&vname[0],sizeof(char),name_len,fp);
if(vname_res != name_len)
throw std::runtime_error("npz_load: failed fread");
vname.erase(vname.end()-4,vname.end()); //erase the lagging .npy
//read in the extra field
uint16_t extra_field_len = *(uint16_t*) &local_header[28];
fseek(fp,extra_field_len,SEEK_CUR); //skip past the extra field
uint16_t compr_method = *reinterpret_cast<uint16_t*>(&local_header[0]+8);
uint32_t compr_bytes = *reinterpret_cast<uint32_t*>(&local_header[0]+18);
uint32_t uncompr_bytes = *reinterpret_cast<uint32_t*>(&local_header[0]+22);
if(vname == varname) {
NpyArray array = (compr_method == 0) ? load_the_npy_file(fp) : load_the_npz_array(fp,compr_bytes,uncompr_bytes);
fclose(fp);
return array;
}
else {
//skip past the data
uint32_t size = *(uint32_t*) &local_header[22];
fseek(fp,size,SEEK_CUR);
}
}
fclose(fp);
//if we get here, we haven't found the variable in the file
throw std::runtime_error("npz_load: Variable name "+varname+" not found in "+fname);
}
cnpy::NpyArray cnpy::npy_load(std::string fname) {
FILE* fp = fopen(fname.c_str(), "rb");
if(!fp) throw std::runtime_error("npy_load: Unable to open file "+fname);
NpyArray arr = load_the_npy_file(fp);
fclose(fp);
return arr;
}
//Copyright (C) 2011 Carl Rogers
//Released under MIT License
//license available in LICENSE file, or at http://www.opensource.org/licenses/mit-license.php
#ifndef LIBCNPY_H_
#define LIBCNPY_H_
#include<string>
#include<stdexcept>
#include<sstream>
#include<vector>
#include<cstdio>
#include<typeinfo>
#include<iostream>
#include<cassert>
#include<zlib.h>
#include<map>
#include<memory>
#include<stdint.h>
#include<numeric>
namespace cnpy {
struct NpyArray {
NpyArray(const std::vector<size_t>& _shape, size_t _word_size, bool _fortran_order) :
shape(_shape), word_size(_word_size), fortran_order(_fortran_order)
{
num_vals = 1;
for(size_t i = 0;i < shape.size();i++) num_vals *= shape[i];
data_holder = std::shared_ptr<std::vector<char>>(
new std::vector<char>(num_vals * word_size));
}
NpyArray() : shape(0), word_size(0), fortran_order(0), num_vals(0) { }
template<typename T>
T* data() {
return reinterpret_cast<T*>(&(*data_holder)[0]);
}
template<typename T>
const T* data() const {
return reinterpret_cast<T*>(&(*data_holder)[0]);
}
template<typename T>
std::vector<T> as_vec() const {
const T* p = data<T>();
return std::vector<T>(p, p+num_vals);
}
size_t num_bytes() const {
return data_holder->size();
}
std::shared_ptr<std::vector<char>> data_holder;
std::vector<size_t> shape;
size_t word_size;
bool fortran_order;
size_t num_vals;
};
using npz_t = std::map<std::string, NpyArray>;
char BigEndianTest();
char map_type(const std::type_info& t);
template<typename T> std::vector<char> create_npy_header(const std::vector<size_t>& shape);
void parse_npy_header(FILE* fp,size_t& word_size, std::vector<size_t>& shape, bool& fortran_order);
void parse_npy_header(unsigned char* buffer,size_t& word_size, std::vector<size_t>& shape, bool& fortran_order);
void parse_zip_footer(FILE* fp, uint16_t& nrecs, size_t& global_header_size, size_t& global_header_offset);
npz_t npz_load(std::string fname);
NpyArray npz_load(std::string fname, std::string varname);
NpyArray npy_load(std::string fname);
template<typename T> std::vector<char>& operator+=(std::vector<char>& lhs, const T rhs) {
//write in little endian
for(size_t byte = 0; byte < sizeof(T); byte++) {
char val = *((char*)&rhs+byte);
lhs.push_back(val);
}
return lhs;
}
template<> std::vector<char>& operator+=(std::vector<char>& lhs, const std::string rhs);
template<> std::vector<char>& operator+=(std::vector<char>& lhs, const char* rhs);
template<typename T> void npy_save(std::string fname, const T* data, const std::vector<size_t> shape, std::string mode = "w") {
FILE* fp = NULL;
std::vector<size_t> true_data_shape; //if appending, the shape of existing + new data
if(mode == "a") fp = fopen(fname.c_str(),"r+b");
if(fp) {
//file exists. we need to append to it. read the header, modify the array size
size_t word_size;
bool fortran_order;
parse_npy_header(fp,word_size,true_data_shape,fortran_order);
assert(!fortran_order);
if(word_size != sizeof(T)) {
std::cout<<"libnpy error: "<<fname<<" has word size "<<word_size<<" but npy_save appending data sized "<<sizeof(T)<<"\n";
assert( word_size == sizeof(T) );
}
if(true_data_shape.size() != shape.size()) {
std::cout<<"libnpy error: npy_save attempting to append misdimensioned data to "<<fname<<"\n";
assert(true_data_shape.size() != shape.size());
}
for(size_t i = 1; i < shape.size(); i++) {
if(shape[i] != true_data_shape[i]) {
std::cout<<"libnpy error: npy_save attempting to append misshaped data to "<<fname<<"\n";
assert(shape[i] == true_data_shape[i]);
}
}
true_data_shape[0] += shape[0];
}
else {
fp = fopen(fname.c_str(),"wb");
true_data_shape = shape;
}
std::vector<char> header = create_npy_header<T>(true_data_shape);
size_t nels = std::accumulate(shape.begin(),shape.end(),1,std::multiplies<size_t>());
fseek(fp,0,SEEK_SET);
fwrite(&header[0],sizeof(char),header.size(),fp);
fseek(fp,0,SEEK_END);
fwrite(data,sizeof(T),nels,fp);
fclose(fp);
}
template<typename T> void npz_save(std::string zipname, std::string fname, const T* data, const std::vector<size_t>& shape, std::string mode = "w")
{
//first, append a .npy to the fname
fname += ".npy";
//now, on with the show
FILE* fp = NULL;
uint16_t nrecs = 0;
size_t global_header_offset = 0;
std::vector<char> global_header;
if(mode == "a") fp = fopen(zipname.c_str(),"r+b");
if(fp) {
//zip file exists. we need to add a new npy file to it.
//first read the footer. this gives us the offset and size of the global header
//then read and store the global header.
//below, we will write the the new data at the start of the global header then append the global header and footer below it
size_t global_header_size;
parse_zip_footer(fp,nrecs,global_header_size,global_header_offset);
fseek(fp,global_header_offset,SEEK_SET);
global_header.resize(global_header_size);
size_t res = fread(&global_header[0],sizeof(char),global_header_size,fp);
if(res != global_header_size){
throw std::runtime_error("npz_save: header read error while adding to existing zip");
}
fseek(fp,global_header_offset,SEEK_SET);
}
else {
fp = fopen(zipname.c_str(),"wb");
}
std::vector<char> npy_header = create_npy_header<T>(shape);
size_t nels = std::accumulate(shape.begin(),shape.end(),1,std::multiplies<size_t>());
size_t nbytes = nels*sizeof(T) + npy_header.size();
//get the CRC of the data to be added
uint32_t crc = crc32(0L,(uint8_t*)&npy_header[0],npy_header.size());
crc = crc32(crc,(uint8_t*)data,nels*sizeof(T));
//build the local header
std::vector<char> local_header;
local_header += "PK"; //first part of sig
local_header += (uint16_t) 0x0403; //second part of sig
local_header += (uint16_t) 20; //min version to extract
local_header += (uint16_t) 0; //general purpose bit flag
local_header += (uint16_t) 0; //compression method
local_header += (uint16_t) 0; //file last mod time
local_header += (uint16_t) 0; //file last mod date
local_header += (uint32_t) crc; //crc
local_header += (uint32_t) nbytes; //compressed size
local_header += (uint32_t) nbytes; //uncompressed size
local_header += (uint16_t) fname.size(); //fname length
local_header += (uint16_t) 0; //extra field length
local_header += fname;
//build global header
global_header += "PK"; //first part of sig
global_header += (uint16_t) 0x0201; //second part of sig
global_header += (uint16_t) 20; //version made by
global_header.insert(global_header.end(),local_header.begin()+4,local_header.begin()+30);
global_header += (uint16_t) 0; //file comment length
global_header += (uint16_t) 0; //disk number where file starts
global_header += (uint16_t) 0; //internal file attributes
global_header += (uint32_t) 0; //external file attributes
global_header += (uint32_t) global_header_offset; //relative offset of local file header, since it begins where the global header used to begin
global_header += fname;
//build footer
std::vector<char> footer;
footer += "PK"; //first part of sig
footer += (uint16_t) 0x0605; //second part of sig
footer += (uint16_t) 0; //number of this disk
footer += (uint16_t) 0; //disk where footer starts
footer += (uint16_t) (nrecs+1); //number of records on this disk
footer += (uint16_t) (nrecs+1); //total number of records
footer += (uint32_t) global_header.size(); //nbytes of global headers
footer += (uint32_t) (global_header_offset + nbytes + local_header.size()); //offset of start of global headers, since global header now starts after newly written array
footer += (uint16_t) 0; //zip file comment length
//write everything
fwrite(&local_header[0],sizeof(char),local_header.size(),fp);
fwrite(&npy_header[0],sizeof(char),npy_header.size(),fp);
fwrite(data,sizeof(T),nels,fp);
fwrite(&global_header[0],sizeof(char),global_header.size(),fp);
fwrite(&footer[0],sizeof(char),footer.size(),fp);
fclose(fp);
}
template<typename T> void npy_save(std::string fname, const std::vector<T> data, std::string mode = "w") {
std::vector<size_t> shape;
shape.push_back(data.size());
npy_save(fname, &data[0], shape, mode);
}
template<typename T> void npz_save(std::string zipname, std::string fname, const std::vector<T> data, std::string mode = "w") {
std::vector<size_t> shape;
shape.push_back(data.size());
npz_save(zipname, fname, &data[0], shape, mode);
}
template<typename T> std::vector<char> create_npy_header(const std::vector<size_t>& shape) {
std::vector<char> dict;
dict += "{'descr': '";
dict += BigEndianTest();
dict += map_type(typeid(T));
dict += std::to_string(sizeof(T));
dict += "', 'fortran_order': False, 'shape': (";
dict += std::to_string(shape[0]);
for(size_t i = 1;i < shape.size();i++) {
dict += ", ";
dict += std::to_string(shape[i]);
}
if(shape.size() == 1) dict += ",";
dict += "), }";
//pad with spaces so that preamble+dict is modulo 16 bytes. preamble is 10 bytes. dict needs to end with \n
int remainder = 16 - (10 + dict.size()) % 16;
dict.insert(dict.end(),remainder,' ');
dict.back() = '\n';
std::vector<char> header;
header += (char) 0x93;
header += "NUMPY";
header += (char) 0x01; //major version of numpy format
header += (char) 0x00; //minor version of numpy format
header += (uint16_t) dict.size();
header.insert(header.end(),dict.begin(),dict.end());
return header;
}
}
#endif
#include <vector>
#include <array>
#include <iostream>
#include <boost/range/adaptor/map.hpp>
#include "cnpy.h"
#include <CGAL/Exact_predicates_inexact_constructions_kernel.h>
#include <CGAL/Delaunay_triangulation_3.h>
#include <CGAL/Alpha_shape_3.h>
#include <CGAL/Alpha_shape_vertex_base_3.h>
using K = CGAL::Exact_predicates_inexact_constructions_kernel;
using Vb = CGAL::Alpha_shape_vertex_base_3<K>;
using Fb = CGAL::Alpha_shape_cell_base_3<K>;
using TDS = CGAL::Triangulation_data_structure_3<Vb,Fb>;
using Delaunay = CGAL::Delaunay_triangulation_3<K,TDS,CGAL::Fast_location>;
using AlphaShape = CGAL::Alpha_shape_3<Delaunay>;
using Point = Delaunay::Point;
using FT = AlphaShape::FT;
using Vertex = size_t;
using PointsMap = std::map<Point,Vertex>;
struct OutputIterator
{
const PointsMap& points;
OutputIterator(const PointsMap& points_):
points(points_) {}
OutputIterator& operator*() { return *this; }
OutputIterator& operator=(const CGAL::Object& o)
{
using V = typename AlphaShape::Vertex_handle;
using E = typename AlphaShape::Edge;
using F = typename AlphaShape::Facet;
using C = typename AlphaShape::Cell_handle;
std::vector<Vertex> vertices;
if (const V* v = CGAL::object_cast<V>(&o))
{
auto u = points.find((*v)->point())->second;
vertices.push_back(u);
}
else if (const E* e = CGAL::object_cast<E>(&o))
{
C c = e->first;
auto u = points.find(c->vertex(e->second)->point())->second;
auto v = points.find(c->vertex(e->third)->point())->second;
vertices.push_back(u);
vertices.push_back(v);
}
else if (const F* f = CGAL::object_cast<F>(&o))
{
size_t j = 0;
C c = f->first;
for (size_t i = 0; i < 4; ++i)
if (i != f->second)
vertices.push_back(points.find(c->vertex(i)->point())->second);
} else if (const C* c = CGAL::object_cast<C>(&o))
{
for (size_t i = 0; i < 4; ++i)
vertices.push_back(points.find((*c)->vertex(i)->point())->second);
} else
throw std::runtime_error("Unknown object type in OutputIterator");
std::sort(vertices.begin(), vertices.end());
for (Vertex v : vertices)
std::cout << v << ' ';
std::cout << std::endl;
return *this;
}
OutputIterator& operator++() { return *this; }
OutputIterator& operator++(int) { return *this; }
};
int main()
{
cnpy::NpyArray arr = cnpy::npy_load("filtration-bug.npy");
double* data = arr.data<double>();
PointsMap points;
for (size_t i = 0; i < arr.shape[0]; ++i)
{
double x = data[3*i + 0],
y = data[3*i + 1],
z = data[3*i + 2];
Point p(x,y,z);
points[p] = i;
}
auto points_range = points | boost::adaptors::map_keys;
Delaunay dt(std::begin(points_range), std::end(points_range));
AlphaShape as(dt, std::numeric_limits<FT>::infinity(), AlphaShape::GENERAL);
as.filtration(OutputIterator(points));
}
65
71
8
33
137
166
143
253
188
274
184
262
267
97
151
4
61
160
14
88
2
85
170
149
95
189
239
194
281
191
212
209
169
91
127
79
55
89
73
24
57
3
15
51
69
81
20
53
62
77
44
47
28
86
118
155
167
152
98
161
110
171
147
159
105
163
114
179
39
129
204
269
208
134
176
227
245
257
242
266
224
298
294
219
237
285
231
183
273
213
278
290
233
251
200
261
123
93
195
249
141
256
133
241
199
207
124
125
197
185
289
214
287
275
187
297
223
277
220
286
232
288
276
186
215
222
132
240
198
263
142
196
130
250
238
94
148
172
177
40
58
82
87
76
7
19
27
34
109
117
43
96
107
173
35
5
17
70
83
60
16
18
6
52
42
106
108
150
178
128
115
41
59
74
38
25
56
50
23
68
140
146
113
104
122
145
67
139
21
32
13
49
45
9
63
80
135
92
153
99
111
218
225
175
205
236
268
131
164
254
221
295
272
260
265
279
243
271
193
283
247
291
284
248
293
158
203
230
182
201
103
235
229
157
174
181
217
211
190
156
210
168
180
270
258
246
292
259
280
264
299
255
202
282
192
234
252
296
162
206
216
102
228
112
244
165
226
75
119
136
154
138
121
100
84
120
101
66
90
144
126
116
72
26
36
54
12
0
78
30
11
37
1
31
10
22
48
64
46
29
196 262
102 168
16 82
106 172
12 78
192 258
200 261
195 261
20 81
15 81
105 171
110 171
197 263
103 169
17 83
13 79
107 173
193 259
111 170
104 170
14 80
21 80
201 260
194 260
112 169
22 79
198 263
202 259
18 83
108 173
199 262
113 168
19 82
23 78
109 172
203 258
19 76
199 256
109 166
113 167
203 257
23 77
15 73
14 74
105 163
195 253
104 164
194 254
112 165
202 255
192 252
102 162
12 72
22 75
20 77
110 167
200 257
197 254
107 164
17 74
10 46
100 136
190 226
98 134
8 44
188 224
3 39
93 129
183 219
96 132
6 42
186 222
0 36
180 216
90 126
1 37
5 41
7 43
97 133
95 131
11 47
181 217
91 127
191 227
101 137
187 223
185 221
9 45
189 225
99 135
2 38
92 128
182 218
94 130
4 40
184 220
105 147
110 152
201 243
194 236
15 57
20 62
14 56
21 63
104 146
111 153
195 237
200 242
109 151
107 149
19 61
17 59
197 239
199 241
108 150
106 148
202 244
192 234
16 58
18 60
22 64
12 54
102 144
112 154
198 240
196 238
193 235
203 245
13 55
23 65
113 155
103 145
114 179
175 205
85 115
24 89
204 269
265 295
176 206
86 116
266 296
117 177
115 178
25 88
27 87
207 267
205 268
86 118
176 208
266 298
174 209
84 119
264 299
118 179
28 89
208 269
3 33
93 123
183 213
2 32
182 212
92 122
91 121
181 211
1 31
5 35
95 125
185 215
96 125
186 215
184 214
94 124
4 34
6 35
100 121
190 211
10 31
180 210
90 120
0 30
191 210
101 120
11 30
187 214
97 124
7 34
189 212
99 122
9 32
8 33
188 213
98 123
205 218
25 38
115 128
28 47
208 227
118 137
223 297
133 207
43 117
116 126
26 36
206 216
119 136
209 226
29 46
134 208
44 118
224 298
221 295
131 205
41 115
219 294
39 114
129 204
196 250
198 250
18 70
16 70
108 160
106 160
195 249
15 69
105 159
104 158
14 68
194 248
197 251
103 157
17 71
13 67
107 161
193 247
200 251
20 71
110 161
111 157
21 67
201 247
112 156
102 156
22 66
12 66
202 246
192 246
199 249
113 158
23 68
19 69
203 248
109 159
188 242
99 153
189 243
8 62
9 63
98 152
187 241
185 239
5 59
7 61
95 149
97 151
186 240
100 154
190 244
10 64
6 60
96 150
184 238
180 234
90 144
0 54
4 58
94 148
183 237
92 146
182 236
2 56
3 57
93 147
181 235
91 145
191 245
101 155
1 55
11 65
4 52
0 48
94 142
184 232
90 138
180 228
7 51
5 53
11 50
187 231
97 141
95 143
185 233
1 49
191 230
101 140
181 229
91 139
9 49
8 53
189 229
99 139
98 143
188 233
6 52
10 48
96 142
186 232
100 138
190 228
2 50
3 51
92 140
182 230
93 141
183 231
175 225
85 135
40 177
130 267
84 127
174 217
42 178
132 268
254 260
194 254 260
74 80
14 74 80
164 170
104 164 170
252 258
192 252 258
72 78
12 72 78
162 168
102 162 168
255 259
202 255 259
75 79
22 75 79
165 169
112 165 169
163 171
105 163 171
73 81
15 73 81
253 261
195 253 261
164 173
107 164 173
74 83
17 74 83
254 263
197 254 263
166 172
109 166 172
257 258
203 257 258
76 82
19 76 82
256 262
199 256 262
167 168
113 167 168
77 78
23 77 78
77 81
20 77 81
167 171
110 167 171
257 261
200 257 261
131 218
131 205 218
41 128
41 115 128
134 227
134 208 227
44 137
44 118 137
40 58
4 40 58
130 148
94 130 148
220 238
184 220 238
41 59
5 41 59
43 61
7 43 61
133 151
97 133 151
131 149
95 131 149
223 241
187 223 241
221 239
185 221 239
126 144
90 126 144
216 234
180 216 234
36 54
0 36 54
137 155
101 137 155
227 245
191 227 245
217 235
181 217 235
127 145
91 127 145
47 65
11 47 65
37 55
1 37 55
39 57
3 39 57
129 147
93 129 147
219 237
183 219 237
218 236
182 218 236
128 146
92 128 146
38 56
2 38 56
42 60
6 42 60
132 150
96 132 150
222 240
186 222 240
136 154
100 136 154
226 244
190 226 244
46 64
10 46 64
44 62
8 44 62
134 152
98 134 152
224 242
188 224 242
135 153
99 135 153
225 243
189 225 243
45 63
9 45 63
231 237
183 231 237
51 57
3 51 57
50 56
2 50 56
140 146
92 140 146
230 236
182 230 236
141 147
93 141 147
50 65
11 50 65
49 55
1 49 55
230 245
191 230 245
140 155
101 140 155
229 235
181 229 235
139 145
91 139 145
232 240
186 232 240
48 64
10 48 64
228 244
190 228 244
138 154
100 138 154
52 60
6 52 60
142 150
96 142 150
233 242
188 233 242
53 62
8 53 62
49 63
9 49 63
139 153
99 139 153
229 243
189 229 243
143 152
98 143 152
232 238
184 232 238
52 58
4 52 58
48 54
0 48 54
138 144
90 138 144
228 234
180 228 234
142 148
94 142 148
231 241
187 231 241
233 239
185 233 239
51 61
7 51 61
53 59
5 53 59
141 151
97 141 151
143 149
95 143 149
239 263
197 239 263
59 83
17 59 83
149 173
107 149 173
151 172
109 151 172
61 82
19 61 82
241 262
199 241 262
144 168
102 144 168
54 78
12 54 78
238 262
196 238 262
58 82
16 58 82
234 258
192 234 258
148 172
106 148 172
146 170
104 146 170
153 170
111 153 170
56 80
14 56 80
63 80
21 63 80
243 260
201 243 260
236 260
194 236 260
240 263
198 240 263
60 83
18 60 83
64 79
22 64 79
154 169
112 154 169
150 173
108 150 173
244 259
202 244 259
242 261
200 242 261
152 171
110 152 171
62 81
20 62 81
147 171
105 147 171
57 81
15 57 81
237 261
195 237 261
145 169
103 145 169
55 79
13 55 79
235 259
193 235 259
65 78
23 65 78
155 168
113 155 168
245 258
203 245 258
215 239
185 215 239
35 59
5 35 59
125 149
95 125 149
213 242
188 213 242
32 63
9 32 63
122 153
99 122 153
212 243
189 212 243
33 62
8 33 62
123 152
98 123 152
214 241
187 214 241
34 61
7 34 61
124 151
97 124 151
214 238
184 214 238
30 54
0 30 54
210 234
180 210 234
120 144
90 120 144
34 58
4 34 58
124 148
94 124 148
31 55
1 31 55
121 145
91 121 145
211 235
181 211 235
213 237
183 213 237
32 56
2 32 56
122 146
92 122 146
33 57
3 33 57
212 236
182 212 236
123 147
93 123 147
215 240
186 215 240
31 64
10 31 64
121 154
100 121 154
211 244
190 211 244
35 60
6 35 60
125 150
96 125 150
30 65
11 30 65
120 155
101 120 155
210 245
191 210 245
242 251
200 242 251
62 71
20 62 71
63 67
21 63 67
152 161
110 152 161
153 157
111 153 157
243 247
201 243 247
145 157
103 145 157
55 67
13 55 67
235 247
193 235 247
237 249
195 237 249
57 69
15 57 69
147 159
105 147 159
56 68
14 56 68
146 158
104 146 158
236 248
194 236 248
238 250
196 238 250
240 250
198 240 250
58 70
16 58 70
60 70
18 60 70
148 160
106 148 160
150 160
108 150 160
155 158
113 155 158
65 68
23 65 68
245 248
203 245 248
239 251
197 239 251
59 71
17 59 71
149 161
107 149 161
154 156
112 154 156
64 66
22 64 66
54 66
12 54 66
144 156
102 144 156
244 246
202 244 246
234 246
192 234 246
241 249
199 241 249
151 159
109 151 159
61 69
19 61 69
120 126
90 120 126
210 216
180 210 216
30 36
0 30 36
211 226
190 211 226
121 136
100 121 136
31 46
10 31 46
33 44
8 33 44
123 134
98 123 134
213 224
188 213 224
211 217
181 211 217
35 41
5 35 41
125 131
95 125 131
121 127
91 121 127
31 37
1 31 37
215 221
185 215 221
122 135
99 122 135
32 45
9 32 45
212 225
189 212 225
33 39
3 33 39
123 129
93 123 129
213 219
183 213 219
212 218
182 212 218
122 128
92 122 128
32 38
2 32 38
124 130
94 124 130
34 40
4 34 40
214 220
184 214 220
35 42
6 35 42
125 132
96 125 132
215 222
186 215 222
210 227
191 210 227
120 137
101 120 137
30 47
11 30 47
124 133
97 124 133
34 43
7 34 43
214 223
187 214 223
214 232
184 214 232
34 52
4 34 52
30 48
0 30 48
124 142
94 124 142
210 228
180 210 228
120 138
90 120 138
32 49
9 32 49
212 229
189 212 229
122 139
99 122 139
33 53
8 33 53
213 233
188 213 233
123 143
98 123 143
31 48
10 31 48
35 52
6 35 52
215 232
186 215 232
211 228
190 211 228
121 138
100 121 138
125 142
96 125 142
34 51
7 34 51
120 140
101 120 140
210 230
191 210 230
30 50
11 30 50
214 231
187 214 231
124 141
97 124 141
211 229
181 211 229
125 143
95 125 143
31 49
1 31 49
121 139
91 121 139
35 53
5 35 53
215 233
185 215 233
33 51
3 33 51
32 50
2 32 50
212 230
182 212 230
122 140
92 122 140
213 231
183 213 231
123 141
93 123 141
161 167
110 161 167
71 77
20 71 77
251 257
200 251 257
159 166
109 159 166
248 257
203 248 257
69 76
19 69 76
68 77
23 68 77
158 167
113 158 167
249 256
199 249 256
161 164
107 161 164
71 74
17 71 74
251 254
197 251 254
159 163
105 159 163
248 254
194 248 254
69 73
15 69 73
68 74
14 68 74
158 164
104 158 164
249 253
195 249 253
246 255
202 246 255
246 252
192 246 252
66 72
12 66 72
66 75
22 66 75
156 162
102 156 162
156 165
112 156 165
85 178
85 115 178
175 268
175 205 268
86 179
86 118 179
176 269
176 208 269
176 216
176 206 216
86 126
86 116 126
44 179
44 118 179
134 269
134 208 269
131 268
131 205 268
41 178
41 115 178
85 128
85 115 128
175 218
175 205 218
174 226
174 209 226
84 136
84 119 136
43 177
43 117 177
133 267
133 207 267
86 137
86 118 137
176 227
176 208 227
39 179
39 114 179
129 269
129 204 269
218 268
205 218 268
38 88
25 38 88
128 178
115 128 178
227 269
208 227 269
47 89
28 47 89
137 179
118 137 179
221 265
221 265 295
131 175
131 175 205
41 85
41 85 115
224 266
224 266 298
44 86
44 86 118
134 176
134 176 208
159 171
105 159 171
249 261
195 249 261
69 81
15 69 81
246 258
192 246 258
66 78
12 66 78
156 168
102 156 168
158 170
104 158 170
248 260
194 248 260
68 80
14 68 80
71 81
20 71 81
161 171
110 161 171
251 261
200 251 261
160 172
106 160 172
70 82
16 70 82
250 262
196 250 262
248 258
203 248 258
68 78
23 68 78
159 172
109 159 172
158 168
113 158 168
69 82
19 69 82
249 262
199 249 262
246 259
202 246 259
66 79
22 66 79
156 169
112 156 169
247 260
201 247 260
67 80
21 67 80
157 170
111 157 170
160 173
108 160 173
70 83
18 70 83
250 263
198 250 263
157 169
103 157 169
247 259
193 247 259
71 83
17 71 83
161 173
107 161 173
67 79
13 67 79
251 263
197 251 263
219 231
183 219 231
129 141
93 129 141
39 51
3 39 51
223 231
187 223 231
133 141
97 133 141
131 143
95 131 143
221 233
185 221 233
217 229
181 217 229
227 230
191 227 230
43 51
7 43 51
127 139
91 127 139
137 140
101 137 140
41 53
5 41 53
37 49
1 37 49
47 50
11 47 50
224 233
188 224 233
134 143
98 134 143
44 53
8 44 53
136 138
100 136 138
226 228
190 226 228
46 48
10 46 48
222 232
186 222 232
132 142
96 132 142
42 52
6 42 52
216 228
180 216 228
126 138
90 126 138
36 48
0 36 48
220 232
184 220 232
130 142
94 130 142
40 52
4 40 52
128 140
92 128 140
218 230
182 218 230
38 50
2 38 50
225 229
189 225 229
135 139
99 135 139
45 49
9 45 49
234 252
192 234 252
54 72
12 54 72
244 255
202 244 255
64 75
22 64 75
144 162
102 144 162
154 165
112 154 165
149 164
107 149 164
59 74
17 59 74
239 254
197 239 254
245 257
203 245 257
65 77
23 65 77
155 167
113 155 167
151 166
109 151 166
61 76
19 61 76
241 256
199 241 256
152 167
110 152 167
62 77
20 62 77
242 257
200 242 257
147 163
105 147 163
57 73
15 57 73
236 254
194 236 254
56 74
14 56 74
237 253
195 237 253
146 164
104 146 164
286 288
282 292
287 290
285 289
283 291
284 293
270 282
274 286
279 291
278 290
281 293
271 283
277 289
275 287
272 284
273 285
280 292
276 288
275 278
271 279
274 276
270 280
273 277
272 281
271 280
275 276
273 278
272 279
270 281
274 277
286 289
287 288
283 292
282 293
285 290
284 291
284 287
290 293
26 28
294 298
280 299
281 298
272 295
270 296
145 153
55 63
235 243
236 245
146 155
56 65
234 244
144 154
54 64
238 240
148 150
58 60
237 241
149 152
147 151
57 61
239 242
59 62
140 146 155
50 56 65
230 236 245
49 55 63
229 235 243
139 145 153
232 238 240
228 234 244
138 144 154
48 54 64
52 58 60
142 148 150
233 239 242
231 237 241
51 57 61
53 59 62
143 149 152
141 147 151
213 261
33 81
123 171
215 263
214 262
124 172
211 259
121 169
120 168
34 82
35 83
210 258
125 173
31 79
30 78
32 80
122 170
212 260
55 63 67
145 153 157
235 243 247
56 65 68
236 245 248
146 155 158
238 240 250
148 150 160
58 60 70
234 244 246
144 154 156
54 64 66
149 152 161
239 242 251
59 62 71
147 151 159
237 241 249
57 61 69
215 239 263
125 149 173
35 59 83
213 237 261
213 242 261
33 57 81
123 147 171
33 62 81
123 152 171
214 238 262
124 148 172
34 58 82
210 234 258
30 54 78
120 144 168
214 241 262
124 151 172
34 61 82
32 56 80
122 146 170
122 153 170
212 243 260
32 63 80
212 236 260
31 55 79
121 145 169
211 235 259
215 240 263
211 244 259
125 150 173
31 64 79
121 154 169
35 60 83
30 65 78
120 155 168
210 245 258
36 47
126 137
216 227
127 136
217 226
37 46
219 224
39 44
129 134
218 225
128 135
38 45
40 43
220 223
130 133
131 132
41 42
221 222
211 217 226
31 37 46
121 127 136
30 36 47
210 216 227
120 126 137
33 39 44
123 129 134
213 219 224
212 218 225
122 128 135
32 38 45
35 41 42
125 131 132
215 221 222
124 130 133
34 40 43
214 220 223
176 216 227
86 126 137
174 217 226
84 127 136
85 128 135
175 218 225
39 44 179
129 134 269
40 43 177
130 133 267
41 42 178
131 132 268
193 211
193 211 235
193 211 259
193 211 235 259
13 31
13 31 55
13 31 79
13 31 55 79
103 121
103 121 145
103 121 169
103 121 145 169
203 210
203 210 258
203 210 245
203 210 245 258
23 30
23 30 78
23 30 65
23 30 65 78
113 120
113 120 168
113 120 155
113 120 155 168
196 214
196 214 238
196 214 262
196 214 238 262
106 124
106 124 172
106 124 148
106 124 148 172
192 210
192 210 258
192 210 234
192 210 234 258
16 34
16 34 58
16 34 82
16 34 58 82
12 30
12 30 78
12 30 54
12 30 54 78
102 120
102 120 168
102 120 144
102 120 144 168
198 215
198 215 240
198 215 263
198 215 240 263
108 125
108 125 150
108 125 173
108 125 150 173
202 211
202 211 244
202 211 259
202 211 244 259
18 35
18 35 60
18 35 83
18 35 60 83
22 31
22 31 64
22 31 79
22 31 64 79
112 121
112 121 169
112 121 154
112 121 154 169
197 215
197 215 263
197 215 239
197 215 239 263
107 125
107 125 173
107 125 149
107 125 149 173
17 35
17 35 83
17 35 59
17 35 59 83
194 212
194 212 236
194 212 260
194 212 236 260
201 212
201 212 260
201 212 243
201 212 243 260
14 32
14 32 56
14 32 80
14 32 56 80
21 32
21 32 63
21 32 80
21 32 63 80
104 122
104 122 170
104 122 146
104 122 146 170
111 122
111 122 170
111 122 153
111 122 153 170
199 214
199 214 241
199 214 262
199 214 241 262
109 124
109 124 151
109 124 172
109 124 151 172
19 34
19 34 61
19 34 82
19 34 61 82
195 213
195 213 237
195 213 261
195 213 237 261
200 213
200 213 261
200 213 242
200 213 242 261
110 123
110 123 171
110 123 152
110 123 152 171
105 123
105 123 171
105 123 147
105 123 147 171
20 33
20 33 62
20 33 81
20 33 62 81
15 33
15 33 81
15 33 57
15 33 57 81
158 161
68 71
248 251
158 161 167
68 71 74
158 161 164
68 71 77
248 251 254
248 251 257
25 45
220 297
29 37
222 295
246 248
246 248 258
156 158
156 158 168
66 68
66 68 78
157 158
157 158 170
67 68
67 68 80
247 248
247 248 260
69 71
69 71 81
159 161
159 161 171
249 251
249 251 261
156 157
156 157 169
246 247
246 247 259
66 67
66 67 79
249 250
249 250 262
159 160
159 160 172
69 70
69 70 82
160 161
160 161 173
70 71
70 71 83
250 251
250 251 263
162 165
156 162 165
252 255
246 252 255
72 75
66 72 75
73 76
69 73 76
163 166
159 163 166
253 256
249 253 256
28 36
26 28 36
28 36 47
224 294
224 294 298
25 38 45
219 224 294
29 37 46
220 223 297
221 222 295
34 177
34 43 177
34 40 177
34 40 43 177
124 267
124 130 267
124 133 267
124 130 133 267
85 122
85 122 135
85 122 128
85 122 128 135
175 212
175 212 225
175 212 218
175 212 218 225
35 178
35 42 178
35 41 178
35 41 42 178
125 268
125 131 268
125 132 268
125 131 132 268
33 179
33 44 179
33 39 179
33 39 44 179
123 269
123 134 269
123 129 269
123 129 134 269
86 120
86 120 126
86 120 137
86 120 126 137
176 210
176 210 216
176 210 227
176 210 216 227
174 211
174 211 217
174 211 226
174 211 217 226
84 121
84 121 136
84 121 127
84 121 127 136
265 279
264 271
33 34
33 34 51
30 32
30 32 50
123 124
123 124 141
213 214
213 214 231
120 122
120 122 140
210 212
210 212 230
34 35
34 35 52
30 31
30 31 48
124 125
124 125 142
214 215
214 215 232
120 121
120 121 138
210 211
210 211 228
211 212
211 212 229
31 32
31 32 49
121 122
121 122 139
123 125
123 125 143
33 35
33 35 53
213 215
213 215 233
232 250
232 238 250
232 240 250
232 238 240 250
52 70
52 60 70
52 58 70
52 58 60 70
142 160
142 148 160
142 150 160
142 148 150 160
48 66
48 54 66
48 64 66
48 54 64 66
138 156
138 154 156
138 144 156
138 144 154 156
228 246
228 234 246
228 244 246
228 234 244 246
233 251
233 242 251
233 239 251
233 239 242 251
53 71
53 59 71
53 62 71
53 59 62 71
143 161
143 149 161
143 152 161
143 149 152 161
231 249
231 241 249
231 237 249
231 237 241 249
51 69
51 57 69
51 61 69
51 57 61 69
141 159
141 151 159
141 147 159
141 147 151 159
49 67
49 63 67
49 55 67
49 55 63 67
229 247
229 243 247
229 235 247
229 235 243 247
139 157
139 153 157
139 145 157
139 145 153 157
50 68
50 56 68
50 65 68
50 56 65 68
140 158
140 146 158
140 155 158
140 146 155 158
230 248
230 236 248
230 245 248
230 236 245 248
265 272
265 272 295
266 281
266 281 298
266 270
266 270 296
264 280
264 280 299
143 230
53 140
30 66
30 54 66
210 246
210 234 246
120 156
120 144 156
213 249
213 237 249
32 68
32 56 68
123 159
123 147 159
122 158
122 146 158
33 69
33 57 69
212 248
212 236 248
214 250
214 238 250
124 160
124 148 160
34 70
34 58 70
31 66
31 64 66
121 156
121 154 156
211 246
211 244 246
30 68
30 65 68
120 158
120 155 158
210 248
210 245 248
214 249
214 241 249
34 69
34 61 69
124 159
124 151 159
31 67
31 55 67
211 247
211 235 247
121 157
121 145 157
213 251
213 242 251
32 67
32 63 67
33 71
33 62 71
123 161
123 152 161
212 247
212 243 247
122 157
122 153 157
215 251
215 239 251
125 161
125 149 161
35 71
35 59 71
215 250
215 240 250
35 70
35 60 70
125 160
125 150 160
192 210 246
192 210 234 246
12 30 66
12 30 54 66
102 120 156
102 120 144 156
195 213 249
195 213 237 249
14 32 68
14 32 56 68
15 33 69
15 33 57 69
105 123 159
105 123 147 159
104 122 158
104 122 146 158
194 212 248
194 212 236 248
196 214 250
196 214 238 250
16 34 70
16 34 58 70
106 124 160
106 124 148 160
22 31 66
22 31 64 66
202 211 246
202 211 244 246
112 121 156
112 121 154 156
23 30 68
23 30 65 68
113 120 158
113 120 155 158
203 210 248
203 210 245 248
199 214 249
199 214 241 249
19 34 69
19 34 61 69
109 124 159
109 124 151 159
13 31 67
13 31 55 67
193 211 247
193 211 235 247
103 121 157
103 121 145 157
197 215 251
197 215 239 251
17 35 71
17 35 59 71
107 125 161
107 125 149 161
200 213 251
200 213 242 251
21 32 67
21 32 63 67
111 122 157
111 122 153 157
20 33 71
20 33 62 71
110 123 161
110 123 152 161
201 212 247
201 212 243 247
198 215 250
198 215 240 250
18 35 70
18 35 60 70
108 125 160
108 125 150 160
221 272
221 272 295
224 281
224 281 298
90 156
90 144 156
180 246
180 234 246
0 66
0 54 66
184 250
184 238 250
4 70
4 58 70
94 160
94 148 160
187 249
187 241 249
7 69
7 61 69
97 159
97 151 159
185 251
185 239 251
5 71
5 59 71
95 161
95 149 161
101 158
101 155 158
191 248
191 245 248
11 68
11 65 68
91 157
91 145 157
181 247
181 235 247
1 67
1 55 67
183 249
183 237 249
93 159
93 147 159
3 69
3 57 69
2 68
2 56 68
182 248
182 236 248
92 158
92 146 158
10 66
10 64 66
190 246
190 244 246
100 156
100 154 156
186 250
186 240 250
96 160
96 150 160
6 70
6 60 70
188 251
188 242 251
98 161
98 152 161
9 67
9 63 67
8 71
8 62 71
99 157
99 153 157
189 247
189 243 247
90 138 156
90 138 144 156
180 228 246
180 228 234 246
0 48 66
0 48 54 66
184 232 250
184 232 238 250
94 142 160
94 142 148 160
4 52 70
4 52 58 70
187 231 249
187 231 241 249
97 141 159
97 141 151 159
7 51 69
7 51 61 69
185 233 251
185 233 239 251
95 143 161
95 143 149 161
5 53 71
5 53 59 71
11 50 68
11 50 65 68
101 140 158
101 140 155 158
191 230 248
191 230 245 248
91 139 157
91 139 145 157
181 229 247
181 229 235 247
1 49 67
1 49 55 67
183 231 249
183 231 237 249
182 230 248
182 230 236 248
93 141 159
93 141 147 159
92 140 158
92 140 146 158
2 50 68
2 50 56 68
3 51 69
3 51 57 69
190 228 246
190 228 244 246
100 138 156
100 138 154 156
10 48 66
10 48 64 66
186 232 250
186 232 240 250
96 142 160
96 142 150 160
6 52 70
6 52 60 70
188 233 251
188 233 242 251
8 53 71
8 53 62 71
98 143 161
98 143 152 161
9 49 67
9 49 63 67
99 139 157
99 139 153 157
189 229 247
189 229 243 247
180 210 246
180 210 234 246
90 120 156
90 120 144 156
0 30 66
0 30 54 66
184 214 250
184 214 238 250
94 124 160
94 124 148 160
4 34 70
4 34 58 70
187 214 249
187 214 241 249
97 124 159
97 124 151 159
7 34 69
7 34 61 69
191 210 248
191 210 245 248
101 120 158
101 120 155 158
11 30 68
11 30 65 68
183 213 249
183 213 237 249
93 123 159
93 123 147 159
3 33 69
3 33 57 69
2 32 68
2 32 56 68
182 212 248
182 212 236 248
92 122 158
92 122 146 158
185 215 251
185 215 239 251
5 35 71
5 35 59 71
95 125 161
95 125 149 161
100 121 156
100 121 154 156
190 211 246
190 211 244 246
10 31 66
10 31 64 66
1 31 67
1 31 55 67
181 211 247
181 211 235 247
91 121 157
91 121 145 157
186 215 250
186 215 240 250
6 35 70
6 35 60 70
96 125 160
96 125 150 160
188 213 251
188 213 242 251
8 33 71
8 33 62 71
98 123 161
98 123 152 161
9 32 67
9 32 63 67
189 212 247
189 212 243 247
99 122 157
99 122 153 157
265 272 279
266 270 281
264 271 280
134 230
134 227 230
44 140
44 137 140
131 230
131 218 230
41 140
41 128 140
143 227
134 143 227
53 137
44 53 137
143 218
131 143 218
53 128
41 53 128
213 249 261
195 213 249 261
33 69 81
15 33 69 81
123 159 171
105 123 159 171
120 156 168
102 120 156 168
30 66 78
12 30 66 78
210 246 258
192 210 246 258
122 158 170
104 122 158 170
32 68 80
14 32 68 80
212 248 260
194 212 248 260
214 249 262
199 214 249 262
120 158 168
113 120 158 168
30 68 78
23 30 68 78
34 69 82
19 34 69 82
210 248 258
203 210 248 258
124 159 172
109 124 159 172
214 250 262
196 214 250 262
34 70 82
16 34 70 82
124 160 172
106 124 160 172
213 251 261
200 213 251 261
33 71 81
20 33 71 81
123 161 171
110 123 161 171
121 156 169
112 121 156 169
31 66 79
22 31 66 79
211 246 259
202 211 246 259
32 67 80
21 32 67 80
122 157 170
111 122 157 170
212 247 260
201 212 247 260
215 250 263
198 215 250 263
35 70 83
18 35 70 83
125 160 173
108 125 160 173
215 251 263
197 215 251 263
31 67 79
13 31 67 79
121 157 169
103 121 157 169
211 247 259
193 211 247 259
35 71 83
17 35 71 83
125 161 173
107 125 161 173
134 143 230
44 53 140
143 227 230
131 143 230
41 53 140
53 137 140
143 218 230
53 128 140
134 143 227 230
44 53 137 140
131 143 218 230
41 53 128 140
270 292
270 282 292
274 288
274 286 288
270 280 292
274 276 288
279 283
279 283 291
278 287
278 287 290
271 279 283
275 278 287
281 284
281 284 293
277 285
277 285 289
272 281 284
273 277 285
246 247 248
66 67 68
156 157 158
159 160 161
249 250 251
69 70 71
272 291
272 279 291
273 290
273 278 290
272 284 291
273 285 290
280 283
271 280 283
276 287
275 276 287
280 283 292
276 287 288
281 282
270 281 282
277 286
274 277 286
281 282 293
277 286 289
284 290
284 290 293
284 287 290
148 151
124 148 151
148 151 172
124 148 151 172
58 61
34 58 61
58 61 82
34 58 61 82
238 241
238 241 262
214 238 241
214 238 241 262
59 60
35 59 60
59 60 83
35 59 60 83
149 150
125 149 150
149 150 173
125 149 150 173
239 240
239 240 263
215 239 240
215 239 240 263
57 62
33 57 62
57 62 81
33 57 62 81
147 152
123 147 152
147 152 171
123 147 152 171
237 242
237 242 261
213 237 242
213 237 242 261
144 155
120 144 155
144 155 168
120 144 155 168
54 65
30 54 65
54 65 78
30 54 65 78
234 245
234 245 258
210 234 245
210 234 245 258
56 63
56 63 80
32 56 63
32 56 63 80
146 153
146 153 170
122 146 153
122 146 153 170
236 243
236 243 260
212 236 243
212 236 243 260
145 154
145 154 169
121 145 154
121 145 154 169
235 244
235 244 259
211 235 244
211 235 244 259
55 64
55 64 79
31 55 64
31 55 64 79
30 48 66
0 30 48 66
210 228 246
180 210 228 246
120 138 156
90 120 138 156
31 48 66
10 31 48 66
121 138 156
100 121 138 156
211 228 246
190 211 228 246
214 232 250
184 214 232 250
34 52 70
4 34 52 70
124 142 160
94 124 142 160
214 231 249
187 214 231 249
30 50 68
11 30 50 68
120 140 158
101 120 140 158
34 51 69
7 34 51 69
210 230 248
191 210 230 248
124 141 159
97 124 141 159
215 232 250
186 215 232 250
35 52 70
6 35 52 70
125 142 160
96 125 142 160
213 231 249
183 213 231 249
32 50 68
2 32 50 68
33 51 69
3 33 51 69
122 140 158
92 122 140 158
123 141 159
93 123 141 159
212 230 248
182 212 230 248
213 233 251
188 213 233 251
32 49 67
9 32 49 67
212 229 247
189 212 229 247
122 139 157
99 122 139 157
33 53 71
8 33 53 71
123 143 161
98 123 143 161
215 233 251
185 215 233 251
31 49 67
1 31 49 67
211 229 247
181 211 229 247
121 139 157
91 121 139 157
35 53 71
5 35 53 71
125 143 161
95 125 143 161
275 290
275 287 290
275 278 290
275 278 287 290
271 291
271 283 291
271 279 291
271 279 283 291
266 294
266 294 298
26 89
26 28 89
33 34 35
213 214 215
123 124 125
120 121 122
30 31 32
210 211 212
271 292
271 280 292
271 283 292
271 280 283 292
275 288
275 287 288
275 276 288
275 276 287 288
30 31 66
30 31 48 66
210 211 246
210 211 228 246
120 121 156
120 121 138 156
213 214 249
213 214 231 249
210 212 248
210 212 230 248
120 122 158
120 122 140 158
30 32 68
30 32 50 68
123 124 159
123 124 141 159
33 34 69
33 34 51 69
214 215 250
214 215 232 250
124 125 160
124 125 142 160
34 35 70
34 35 52 70
213 215 251
213 215 233 251
31 32 67
31 32 49 67
121 122 157
121 122 139 157
33 35 71
33 35 53 71
211 212 247
211 212 229 247
123 125 161
123 125 143 161
192 244
192 234 244
192 244 246
192 234 244 246
12 64
12 64 66
12 54 64
12 54 64 66
102 154
102 154 156
102 144 154
102 144 154 156
192 202
192 202 244
192 202 246
192 202 244 246
12 22
12 22 66
12 22 64
12 22 64 66
102 112
102 112 156
102 112 154
102 112 154 156
19 57
19 57 69
19 57 61
19 57 61 69
109 147
109 147 159
109 147 151
109 147 151 159
199 237
199 237 249
199 237 241
199 237 241 249
194 245
194 245 248
194 236 245
194 236 245 248
14 65
14 65 68
14 56 65
14 56 65 68
104 155
104 155 158
104 146 155
104 146 155 158
15 19
15 19 69
15 19 57
15 19 57 69
105 109
105 109 159
105 109 147
105 109 147 159
195 199
195 199 249
195 199 237
195 199 237 249
194 203
194 203 248
194 203 245
194 203 245 248
104 113
104 113 158
104 113 155
104 113 155 158
14 23
14 23 68
14 23 65
14 23 65 68
107 152
107 149 152
107 152 161
107 149 152 161
17 62
17 62 71
17 59 62
17 59 62 71
197 242
197 242 251
197 239 242
197 239 242 251
108 148
108 148 150
108 148 160
108 148 150 160
106 108
106 108 148
106 108 160
106 108 148 160
18 58
16 18
16 18 58
18 58 70
16 18 70
16 18 58 70
18 58 60
18 58 60 70
198 238
198 238 240
198 238 250
198 238 240 250
196 198
196 198 238
196 198 250
196 198 238 250
201 235
201 235 247
201 235 243
201 235 243 247
21 55
21 55 67
21 55 63
21 55 63 67
111 145
111 145 153
111 145 157
111 145 153 157
107 110
107 110 152
107 110 161
107 110 152 161
17 20
17 20 71
17 20 62
17 20 62 71
197 200
197 200 251
197 200 242
197 200 242 251
193 201
193 201 247
193 201 235
193 201 235 247
13 21
13 21 55
13 21 67
13 21 55 67
103 111
103 111 157
103 111 145
103 111 145 157
104 161
104 158 161
104 161 164
104 158 161 164
14 71
14 68 71
14 71 74
14 68 71 74
194 251
194 248 251
194 251 254
194 248 251 254
113 161
113 161 167
113 158 161
113 158 161 167
23 71
23 68 71
23 71 77
23 68 71 77
203 251
203 251 257
203 248 251
203 248 251 257
197 248
197 248 251
197 248 254
197 248 251 254
17 68
17 68 74
17 68 71
17 68 71 74
107 158
107 158 161
107 158 164
107 158 161 164
200 248
200 248 251
200 248 257
200 248 251 257
110 158
110 158 167
110 158 161
110 158 161 167
20 68
20 68 77
20 68 71
20 68 71 77
30 66 68
30 66 68 78
120 156 158
120 156 158 168
210 246 248
210 246 248 258
32 67 68
32 67 68 80
122 157 158
122 157 158 170
212 247 248
212 247 248 260
31 66 67
31 66 67 79
121 156 157
121 156 157 169
211 246 247
211 246 247 259
214 249 250
214 249 250 262
34 69 70
34 69 70 82
124 159 160
124 159 160 172
213 249 251
213 249 251 261
33 69 71
33 69 71 81
123 159 161
123 159 161 171
215 250 251
215 250 251 263
35 70 71
35 70 71 83
125 160 161
125 160 161 173
104 113 161
104 113 158 161
14 23 71
14 23 68 71
194 203 251
194 203 248 251
107 110 158
107 110 158 161
17 20 68
17 20 68 71
197 200 248
197 200 248 251
202 252
202 246 252
202 252 255
202 246 252 255
192 202 252
192 202 246 252
22 72
22 66 72
22 72 75
22 66 72 75
112 162
112 156 162
102 112 162
102 112 156 162
12 22 72
12 22 66 72
112 162 165
112 156 162 165
105 166
105 163 166
105 159 166
105 159 163 166
15 76
15 69 76
15 73 76
15 69 73 76
195 256
195 249 256
195 253 256
195 249 253 256
105 109 166
105 109 159 166
15 19 76
15 19 69 76
195 199 256
195 199 249 256
159 163 171
105 159 163 171
69 73 81
15 69 73 81
249 253 261
195 249 253 261
248 254 260
194 248 254 260
68 74 80
14 68 74 80
158 164 170
104 158 164 170
246 252 258
192 246 252 258
66 72 78
12 66 72 78
156 162 168
102 156 162 168
248 257 258
203 248 257 258
159 166 172
109 159 166 172
69 76 82
19 69 76 82
68 77 78
23 68 77 78
158 167 168
113 158 167 168
249 256 262
199 249 256 262
246 255 259
202 246 255 259
66 75 79
22 66 75 79
156 165 169
112 156 165 169
161 167 171
110 161 167 171
71 77 81
20 71 77 81
251 257 261
200 251 257 261
161 164 173
107 161 164 173
71 74 83
17 71 74 83
251 254 263
197 251 254 263
233 281
233 272
224 233 281
221 233 272
65 71
65 71 77
155 161
155 161 167
245 251
245 251 257
146 161
146 161 164
56 71
56 71 74
236 251
236 251 254
242 248
242 248 257
152 158
152 158 167
62 68
62 68 77
239 248
239 248 254
149 158
149 158 164
59 68
59 68 74
104 146 161
104 146 161 164
14 56 71
14 56 71 74
194 236 251
194 236 251 254
113 155 161
113 155 161 167
23 65 71
23 65 71 77
203 245 251
203 245 251 257
200 242 248
200 242 248 257
110 152 158
110 152 158 167
20 62 68
20 62 68 77
107 149 158
107 149 158 164
17 59 68
17 59 68 74
197 239 248
197 239 248 254
35 41 59
5 35 41 59
125 131 149
95 125 131 149
215 221 239
185 215 221 239
30 36 54
0 30 36 54
210 216 234
180 210 216 234
120 126 144
90 120 126 144
34 40 58
4 34 40 58
124 130 148
94 124 130 148
214 220 238
184 214 220 238
212 225 243
189 212 225 243
32 45 63
9 32 45 63
122 135 153
99 122 135 153
33 44 62
8 33 44 62
123 134 152
98 123 134 152
213 224 242
188 213 224 242
34 43 61
7 34 43 61
124 133 151
97 124 133 151
214 223 241
187 214 223 241
31 37 55
1 31 37 55
211 217 235
181 211 217 235
121 127 145
91 121 127 145
31 46 64
10 31 46 64
121 136 154
100 121 136 154
211 226 244
190 211 226 244
30 47 65
11 30 47 65
210 227 245
191 210 227 245
120 137 155
101 120 137 155
32 38 56
2 32 38 56
212 218 236
182 212 218 236
122 128 146
92 122 128 146
35 42 60
6 35 42 60
125 132 150
96 125 132 150
215 222 240
186 215 222 240
33 39 57
3 33 39 57
123 129 147
93 123 129 147
213 219 237
183 213 219 237
149 164 173
107 149 164 173
59 74 83
17 59 74 83
239 254 263
197 239 254 263
244 255 259
202 244 255 259
64 75 79
22 64 75 79
154 165 169
112 154 165 169
236 254 260
194 236 254 260
56 74 80
14 56 74 80
146 164 170
104 146 164 170
234 252 258
192 234 252 258
54 72 78
12 54 72 78
144 162 168
102 144 162 168
151 166 172
109 151 166 172
61 76 82
19 61 76 82
241 256 262
199 241 256 262
147 163 171
105 147 163 171
57 73 81
15 57 73 81
237 253 261
195 237 253 261
65 77 78
23 65 77 78
245 257 258
203 245 257 258
155 167 168
113 155 167 168
152 167 171
110 152 167 171
62 77 81
20 62 77 81
242 257 261
200 242 257 261
134 227 269
134 208 227 269
44 137 179
44 118 137 179
41 128 178
41 115 128 178
131 218 268
131 205 218 268
131 175 218
131 175 205 218
41 85 128
41 85 115 128
44 86 137
44 86 118 137
134 176 227
134 176 208 227
14 65 71
14 23 65 71
104 155 161
104 113 155 161
194 245 251
194 203 245 251
56 65 71
14 56 65 71
146 155 161
104 146 155 161
236 245 251
194 236 245 251
107 152 158
107 110 152 158
197 242 248
197 200 242 248
17 62 68
17 20 62 68
149 152 158
107 149 152 158
59 62 68
17 59 62 68
239 242 248
197 239 242 248
273 289
273 277 289
273 285 289
273 277 285 289
272 293
272 284 293
272 281 293
272 281 284 293
39 51 57
3 39 51 57
219 231 237
183 219 231 237
129 141 147
93 129 141 147
128 140 146
92 128 140 146
218 230 236
182 218 230 236
38 50 56
2 38 50 56
137 140 155
101 137 140 155
227 230 245
191 227 230 245
47 50 65
11 47 50 65
37 49 55
1 37 49 55
217 229 235
181 217 229 235
127 139 145
91 127 139 145
42 52 60
6 42 52 60
222 232 240
186 222 232 240
132 142 150
96 132 142 150
41 53 59
5 41 53 59
223 231 241
187 223 231 241
43 51 61
7 43 51 61
221 233 239
185 221 233 239
131 143 149
95 131 143 149
133 141 151
97 133 141 151
220 232 238
184 220 232 238
40 52 58
4 40 52 58
130 142 148
94 130 142 148
226 228 244
190 226 228 244
136 138 154
100 136 138 154
46 48 64
10 46 48 64
126 138 144
90 126 138 144
216 228 234
180 216 228 234
36 48 54
0 36 48 54
44 53 62
8 44 53 62
224 233 242
188 224 233 242
134 143 152
98 134 143 152
225 229 243
189 225 229 243
135 139 153
99 135 139 153
45 49 63
9 45 49 63
175 218 268
175 205 218 268
85 128 178
85 115 128 178
41 85 178
41 85 115 178
131 175 268
131 175 205 268
44 86 179
44 86 118 179
134 176 269
134 176 208 269
176 227 269
176 208 227 269
86 137 179
86 118 137 179
147 166
105 147 166
109 147 166
105 109 147 166
57 76
19 57 76
15 57 76
15 19 57 76
237 256
199 237 256
195 237 256
195 199 237 256
244 252
234 244 252
192 244 252
192 234 244 252
202 244 252
192 202 244 252
64 72
22 64 72
64 72 75
22 64 72 75
12 64 72
54 64 72
12 54 64 72
154 162
102 154 162
112 154 162
102 112 154 162
244 252 255
202 244 252 255
12 22 64 72
154 162 165
112 154 162 165
144 154 162
102 144 154 162
147 151 166
109 147 151 166
57 61 76
19 57 61 76
237 241 256
199 237 241 256
147 163 166
105 147 163 166
57 73 76
15 57 73 76
237 253 256
195 237 253 256
214 297
214 223 297
214 220 297
214 220 223 297
25 32
25 32 45
25 32 38
25 32 38 45
28 30
28 30 47
28 30 36
28 30 36 47
213 294
213 224 294
213 219 294
213 219 224 294
29 31
29 31 46
29 31 37
29 31 37 46
215 295
215 221 295
215 222 295
215 221 222 295
26 30
26 28 30
26 30 36
26 28 30 36
213 298
213 224 298
213 294 298
213 224 294 298
213 224 233
188 213 224 233
123 134 143
98 123 134 143
33 44 53
8 33 44 53
210 216 228
180 210 216 228
120 126 138
90 120 126 138
30 36 48
0 30 36 48
211 226 228
190 211 226 228
121 136 138
100 121 136 138
31 46 48
10 31 46 48
213 219 231
183 213 219 231
123 129 141
93 123 129 141
33 39 51
3 33 39 51
215 221 233
185 215 221 233
125 131 143
95 125 131 143
211 217 229
181 211 217 229
121 127 139
91 121 127 139
35 41 53
5 35 41 53
31 37 49
1 31 37 49
214 223 231
187 214 223 231
124 133 141
97 124 133 141
210 227 230
191 210 227 230
120 137 140
101 120 137 140
34 43 51
7 34 43 51
30 47 50
11 30 47 50
212 225 229
189 212 225 229
122 135 139
99 122 135 139
32 45 49
9 32 45 49
214 220 232
184 214 220 232
124 130 142
94 124 130 142
34 40 52
4 34 40 52
215 222 232
186 215 222 232
125 132 142
96 125 132 142
35 42 52
6 35 42 52
122 128 140
92 122 128 140
212 218 230
182 212 218 230
32 38 50
2 32 38 50
233 272 281
274 289
274 286 289
274 277 289
274 277 286 289
270 293
270 282 293
270 281 293
270 281 282 293
40 61
40 43 61
34 40 61
34 40 43 61
130 151
130 133 151
124 130 151
124 130 133 151
220 241
214 220 241
220 223 241
214 220 223 241
40 58 61
34 40 58 61
130 148 151
124 130 148 151
220 238 241
214 220 238 241
227 234
210 227 234
216 227 234
210 216 227 234
47 54
36 47 54
30 47 54
30 36 47 54
137 144
120 137 144
126 137 144
120 126 137 144
137 144 155
120 137 144 155
227 234 245
210 227 234 245
47 54 65
30 47 54 65
42 59
41 42 59
35 42 59
35 41 42 59
132 149
131 132 149
125 132 149
125 131 132 149
222 239
215 222 239
221 222 239
215 221 222 239
132 149 150
125 132 149 150
42 59 60
35 42 59 60
222 239 240
215 222 239 240
225 236
212 225 236
225 236 243
212 225 236 243
135 146
135 146 153
122 135 146
122 135 146 153
45 56
45 56 63
32 45 56
32 45 56 63
38 45 56
32 38 45 56
218 225 236
212 218 225 236
128 135 146
122 128 135 146
44 57
33 44 57
44 57 62
33 44 57 62
39 44 57
33 39 44 57
134 147
123 134 147
129 134 147
123 129 134 147
134 147 152
123 134 147 152
224 237
224 237 242
213 224 237
213 224 237 242
219 224 237
213 219 224 237
127 154
127 136 154
121 127 154
121 127 136 154
217 244
211 217 244
217 226 244
211 217 226 244
37 64
37 46 64
31 37 64
31 37 46 64
127 145 154
121 127 145 154
217 235 244
211 217 235 244
37 55 64
31 37 55 64
221 265 272
221 265 272 295
224 266 281
224 266 281 298
41 122
41 85 122
41 122 128
41 85 122 128
131 212
131 175 212
131 212 218
131 175 212 218
125 218
125 131 218
125 218 268
125 131 218 268
35 128
35 128 178
35 41 128
35 41 128 178
134 210
134 210 227
134 176 210
134 176 210 227
44 120
44 120 137
44 86 120
44 86 120 137
33 137
33 44 137
33 137 179
33 44 137 179
123 227
123 227 269
123 134 227
123 134 227 269
122 156
122 156 158
122 156 157
122 156 157 158
212 246
212 246 248
212 246 247
212 246 247 248
32 66
32 66 68
32 66 67
32 66 67 68
210 212 246
210 212 246 248
120 122 156
120 122 156 158
31 32 66
31 32 66 67
121 122 156
121 122 156 157
30 32 66
30 32 66 68
211 212 246
211 212 246 247
210 211 212 246
120 121 122 156
30 31 32 66
215 249
215 249 250
215 249 251
215 249 250 251
214 215 249
214 215 249 250
125 159
124 125 159
125 159 160
124 125 159 160
35 69
34 35 69
35 69 70
34 35 69 70
125 159 161
125 159 160 161
35 69 71
35 69 70 71
213 215 249
213 214 215 249
213 215 249 251
33 35 69
33 34 35 69
123 125 159
123 125 159 161
33 35 69 71
123 124 125 159
155 171
155 167 171
65 81
65 77 81
245 261
245 257 261
146 173
146 164 173
56 83
56 74 83
236 263
236 254 263
59 80
59 74 80
239 260
239 254 260
149 170
149 164 170
242 258
242 257 258
62 78
62 77 78
152 168
152 167 168
41 122 140
41 122 128 140
131 212 230
131 212 218 230
125 143 218
125 131 143 218
35 53 128
35 41 53 128
134 210 230
134 210 227 230
44 120 140
44 120 137 140
33 53 137
33 44 53 137
123 143 227
123 134 143 227
45 88
25 45 88
222 265
222 265 295
38 45 88
25 38 45 88
36 89
28 36 89
26 36 89
26 28 36 89
36 47 89
28 36 47 89
224 266 294
224 266 294 298
221 222 265
221 222 265 295
219 266
219 266 294
219 224 266
219 224 266 294
28 50
28 47 50
141 207
133 141 207
51 117
43 51 117
231 297
223 231 297
25 50
25 38 50
116 138
116 126 138
206 228
206 216 228
209 228
209 226 228
119 138
119 136 138
26 48
26 36 48
29 48
29 46 48
141 204
129 141 204
51 114
39 51 114
231 294
219 231 294
155 161 171
155 161 167 171
65 71 81
65 71 77 81
245 251 261
245 251 257 261
146 161 173
146 161 164 173
56 71 83
56 71 74 83
236 251 263
236 251 254 263
239 248 260
239 248 254 260
149 158 170
149 158 164 170
59 68 80
59 68 74 80
242 248 258
242 248 257 258
62 68 78
62 68 77 78
152 158 168
152 158 167 168
283 284
283 293
283 284 293
283 284 291
287 289
289 290
287 289 290
285 289 290
288 289
286 288 289
287 288 289
282 283
282 283 292
282 283 293
273 275
273 275 278
271 272
271 272 279
274 275
274 275 276
270 271
270 271 280
273 274
273 274 277
270 272
270 272 281
273 274 275
270 271 272
242 266
224 242 266
62 86
44 62 86
152 176
134 152 176
239 265
221 239 265
59 85
41 59 85
149 175
131 149 175
245 269
227 245 269
65 89
47 65 89
155 179
137 155 179
236 268
218 236 268
56 88
38 56 88
146 178
128 146 178
245 253
245 253 261
65 73
65 73 81
155 163
155 163 171
152 162
152 162 168
62 72
62 72 78
242 252
242 252 258
233 295
221 233 295
233 272 295
221 233 272 295
233 298
224 233 298
233 281 298
224 233 281 298
253 257
253 257 261
73 77
73 77 81
163 167
163 167 171
162 167
162 167 168
72 77
72 77 78
252 257
252 257 258
245 253 257
245 253 257 261
65 73 77
65 73 77 81
155 163 167
155 163 167 171
152 162 167
152 162 167 168
62 72 77
62 72 77 78
242 252 257
242 252 257 258
165 209
162 206
75 119
72 116
255 299
252 296
204 253
207 256
24 73
27 76
114 163
117 166
253 269
73 89
163 179
162 176
72 86
252 266
256 267
76 87
166 177
165 174
75 84
255 264
204 253 269
24 73 89
114 163 179
162 176 206
72 86 116
252 266 296
207 256 267
27 76 87
117 166 177
165 174 209
75 84 119
255 264 299
225 268
218 225 268
175 225 268
175 218 225 268
135 178
85 135 178
128 135 178
85 128 135 178
216 269
216 227 269
176 216 269
176 216 227 269
126 179
126 137 179
86 126 179
86 126 137 179
132 175
132 175 268
131 132 175
131 132 175 268
42 85
41 42 85
42 85 178
41 42 85 178
129 176
129 134 176
129 176 269
129 134 176 269
39 86
39 86 179
39 44 86
39 44 86 179
34 117
34 117 177
34 43 117
34 43 117 177
124 207
124 133 207
124 207 267
124 133 207 267
209 211
174 209 211
209 211 226
174 209 211 226
119 121
119 121 136
84 119 121
84 119 121 136
33 114
33 114 179
33 39 114
33 39 114 179
123 204
123 129 204
123 204 269
123 129 204 269
206 210
176 206 210
206 210 216
176 206 210 216
116 120
116 120 126
86 116 120
86 116 120 126
124 141 207
124 133 141 207
28 30 50
28 30 47 50
34 51 117
34 43 51 117
214 231 297
214 223 231 297
25 32 50
25 32 38 50
206 210 228
206 210 216 228
116 120 138
116 120 126 138
26 30 48
26 30 36 48
119 121 138
119 121 136 138
209 211 228
209 211 226 228
29 31 48
29 31 46 48
123 141 204
123 129 141 204
33 51 114
33 39 51 114
213 231 294
213 219 231 294
215 233 295
215 221 233 295
213 233 298
213 224 233 298
142 267
130 142 267
124 142 267
124 130 142 267
52 177
34 52 177
40 52 177
34 40 52 177
85 139
85 135 139
85 122 139
85 122 135 139
175 229
175 225 229
175 212 229
175 212 225 229
142 268
125 142 268
132 142 268
125 132 142 268
52 178
35 52 178
42 52 178
35 42 52 178
174 229
174 217 229
174 211 229
174 211 217 229
84 139
84 121 139
84 127 139
84 121 127 139
86 138
86 120 138
86 116 138
86 116 120 138
176 228
176 210 228
176 206 228
176 206 210 228
141 267
124 141 267
141 207 267
124 141 207 267
51 177
34 51 177
51 117 177
34 51 117 177
141 269
123 141 269
141 204 269
123 141 204 269
51 179
33 51 179
51 114 179
33 51 114 179
174 228
174 209 228
174 211 228
174 209 211 228
84 138
84 119 138
84 121 138
84 119 121 138
270 271 292
270 271 280 292
274 275 288
274 275 276 288
271 272 291
271 272 279 291
273 275 290
273 275 278 290
272 283
271 272 283
272 283 291
271 272 283 291
273 287
273 287 290
273 275 287
273 275 287 290
272 283 284
272 283 293
272 283 284 293
272 283 284 291
273 289 290
273 285 289 290
273 287 289
273 287 289 290
270 272 293
270 272 281 293
273 274 289
273 274 277 289
270 283
270 283 292
270 271 283
270 271 283 292
274 287
274 287 288
274 275 287
274 275 287 288
270 283 293
270 282 283
270 282 283 293
270 282 283 292
274 288 289
274 286 288 289
274 287 289
274 287 288 289
270 272 283
270 271 272 283
273 274 287
273 274 275 287
270 272 283 293
273 274 287 289
245 253 269
65 73 89
155 163 179
62 72 86
242 252 266
152 162 176
24 27
270 299
270 280 299
296 299
270 296 299
169 174
165 169 174
259 264
255 259 264
79 84
75 79 84
262 267
256 262 267
172 177
166 172 177
82 87
76 82 87
221 279
221 265 279
221 272 279
221 265 272 279
224 270
224 266 270
224 270 281
224 266 270 281
206 269
176 206 269
116 179
86 116 179
176 204
176 204 269
86 114
86 114 179
281 294
281 294 298
260 265
239 260 265
80 85
59 80 85
170 175
149 170 175
263 268
236 263 268
83 88
56 83 88
173 178
146 173 178
284 288
284 287 288
282 290
282 290 293
285 293
285 290 293
287 291
284 287 291
135 170
135 153 170
135 146 170
135 146 153 170
225 260
225 236 260
225 243 260
225 236 243 260
45 80
45 56 80
38 80
38 45 80
38 56 80
38 45 56 80
45 63 80
45 56 63 80
218 260
218 236 260
218 225 260
218 225 236 260
128 170
128 135 170
128 146 170
128 135 146 170
127 169
127 154 169
127 145 169
127 145 154 169
217 259
217 235 259
217 244 259
217 235 244 259
37 79
37 55 79
37 64 79
37 55 64 79
136 169
136 154 169
127 136 169
127 136 154 169
46 79
37 46 79
46 64 79
37 46 64 79
226 259
217 226 259
226 244 259
217 226 244 259
132 173
132 150 173
132 149 173
132 149 150 173
42 83
42 59 83
42 60 83
42 59 60 83
222 263
222 240 263
222 239 263
222 239 240 263
227 258
227 245 258
227 234 258
227 234 245 258
137 168
137 155 168
137 144 168
137 144 155 168
47 78
47 54 78
47 65 78
47 54 65 78
36 78
36 47 78
36 54 78
36 47 54 78
126 168
126 137 168
126 144 168
126 137 144 168
216 258
216 227 258
216 234 258
216 227 234 258
129 171
134 171
129 134 171
134 147 171
129 147 171
129 134 147 171
134 152 171
134 147 152 171
44 81
44 57 81
39 81
39 57 81
39 44 81
39 44 57 81
44 62 81
44 57 62 81
224 261
224 237 261
224 242 261
224 237 242 261
219 261
219 237 261
219 224 261
219 224 237 261
131 173
131 132 173
131 149 173
131 132 149 173
41 83
41 42 83
41 59 83
41 42 59 83
221 263
221 239 263
221 222 263
221 222 239 263
130 172
130 151 172
130 148 172
130 148 151 172
40 82
40 61 82
40 58 82
40 58 61 82
220 262
220 241 262
220 238 262
220 238 241 262
133 172
133 151 172
130 133 172
130 133 151 172
43 82
43 61 82
40 43 82
40 43 61 82
223 262
223 241 262
220 223 262
220 223 241 262
206 216 269
176 206 216 269
116 126 179
86 116 126 179
129 176 204
129 176 204 269
39 86 114
39 86 114 179
24 28
24 28 89
213 281
213 233 281
213 281 298
213 233 281 298
215 272
215 233 272
215 272 295
215 233 272 295
289 297
285 294
278 293
278 290 293
281 290
281 290 293
275 284
275 284 287
272 287
272 284 287
196 267
196 262 267
16 87
16 82 87
106 177
106 172 177
21 85
21 80 85
111 175
111 170 175
201 265
201 260 265
103 174
103 169 174
13 84
13 79 84
193 264
193 259 264
198 268
198 263 268
18 88
18 83 88
108 178
108 173 178
47 73
47 73 89
47 65 73
47 65 73 89
227 253
227 253 269
227 245 253
227 245 253 269
137 163
137 155 163
137 163 179
137 155 163 179
44 72
44 72 86
44 62 72
44 62 72 86
134 162
134 162 176
134 152 162
134 152 162 176
224 252
224 252 266
224 242 252
224 242 252 266
155 159
155 159 171
155 159 161
155 159 161 171
65 69
65 69 81
65 69 71
65 69 71 81
245 249
245 249 251
245 249 261
245 249 251 261
152 156
152 156 158
152 156 168
152 156 158 168
242 246
242 246 258
242 246 248
242 246 248 258
62 66
62 66 68
62 66 78
62 66 68 78
56 70
56 70 83
56 70 71
56 70 71 83
146 160
146 160 161
146 160 173
146 160 161 173
236 250
236 250 251
236 250 263
236 250 251 263
149 157
149 157 170
149 157 158
149 157 158 170
239 247
239 247 260
239 247 248
239 247 248 260
59 67
59 67 80
59 67 68
59 67 68 80
278 282
278 282 290
281 285
281 285 293
275 291
275 287 291
272 288
272 284 288
278 282 293
278 282 290 293
281 285 290
281 285 290 293
275 284 291
275 284 287 291
272 287 288
272 284 287 288
142 218
125 142 218
142 218 268
125 142 218 268
52 128
35 52 128
52 128 178
35 52 128 178
141 227
123 141 227
141 227 269
123 141 227 269
41 139
41 85 139
41 122 139
41 85 122 139
131 229
131 175 229
131 212 229
131 175 212 229
51 137
33 51 137
51 137 179
33 51 137 179
134 228
134 210 228
134 176 228
134 176 210 228
44 138
44 120 138
44 86 138
44 86 120 138
282 296
270 282 296
284 295
272 284 295
293 298
281 293 298
292 299
280 292 299
293 294
281 293 294
155 159 163
155 159 163 171
65 69 73
65 69 73 81
245 249 253
245 249 253 261
152 156 162
152 156 162 168
242 246 252
242 246 252 258
62 66 72
62 66 72 78
26 29
26 29 48
206 209
206 209 228
116 119
116 119 138
294 297
231 294 297
114 117
51 114 117
25 28
25 28 50
204 207
141 204 207
293 294 298
281 293 294 298
281 285 294
285 293 294
281 285 293 294
260 268
218 260 268
236 260 268
218 236 260 268
80 88
56 80 88
38 80 88
38 56 80 88
170 178
128 170 178
146 170 178
128 146 170 178
263 265
239 263 265
221 263 265
221 239 263 265
83 85
41 83 85
59 83 85
41 59 83 85
173 175
131 173 175
149 173 175
131 149 173 175
258 269
245 258 269
227 258 269
227 245 258 269
78 89
47 78 89
65 78 89
47 65 78 89
168 179
137 168 179
155 168 179
137 155 168 179
261 266
242 261 266
224 261 266
224 242 261 266
171 176
152 171 176
134 171 176
134 152 171 176
81 86
44 81 86
62 81 86
44 62 81 86
222 263 265
221 222 263 265
42 83 85
41 42 83 85
132 173 175
131 132 173 175
225 260 268
218 225 260 268
45 80 88
38 45 80 88
135 170 178
128 135 170 178
216 258 269
216 227 258 269
126 168 179
126 137 168 179
36 78 89
36 47 78 89
219 261 266
219 224 261 266
39 81 86
39 44 81 86
129 171 176
129 134 171 176
160 177
160 172 177
106 160 177
106 160 172 177
70 87
16 70 87
70 82 87
16 70 82 87
250 267
250 262 267
196 250 267
196 250 262 267
247 265
247 260 265
201 247 265
201 247 260 265
157 175
111 157 175
157 170 175
111 157 170 175
67 85
67 80 85
21 67 85
21 67 80 85
247 264
247 259 264
193 247 264
193 247 259 264
157 174
157 169 174
103 157 174
103 157 169 174
67 84
13 67 84
67 79 84
13 67 79 84
70 88
18 70 88
70 83 88
18 70 83 88
160 178
160 173 178
108 160 178
108 160 173 178
250 268
198 250 268
250 263 268
198 250 263 268
254 268
254 263 268
236 254 268
236 254 263 268
74 88
74 83 88
56 74 88
56 74 83 88
164 178
146 164 178
164 173 178
146 164 173 178
164 175
164 170 175
149 164 175
149 164 170 175
74 85
59 74 85
74 80 85
59 74 80 85
254 265
239 254 265
254 260 265
239 254 260 265
286 297
286 289 297
278 284
278 284 287
278 284 290
278 284 287 290
278 284 293
278 284 290 293
275 278 284
275 278 284 287
281 284 290
281 284 290 293
281 287
281 287 290
281 284 287
281 284 287 290
272 281 287
272 281 284 287
288 295
272 288 295
213 281 294
213 281 294 298
266 282
266 281 282
266 270 282
266 270 281 282
264 283
264 271 283
264 280 283
264 271 280 283
265 291
265 279 291
265 272 291
265 272 279 291
266 293
266 281 293
266 282 293
266 281 282 293
265 284
265 272 284
265 284 291
265 272 284 291
264 292
264 283 292
264 280 292
264 280 283 292
141 256
141 207 256
51 166
51 117 166
141 253
141 204 253
51 163
51 114 163
165 228
165 209 228
162 228
162 206 228
72 138
72 116 138
75 138
75 119 138
284 288 295
272 284 288 295
239 247 265
239 247 260 265
59 67 85
59 67 80 85
149 157 175
149 157 170 175
56 70 88
56 70 83 88
146 160 178
146 160 173 178
236 250 268
236 250 263 268
162 165 228
72 75 138
141 253 256
51 163 166
266 282 296
266 270 282 296
266 293 298
266 281 293 298
265 284 295
265 272 284 295
264 292 299
264 280 292 299
120 139
120 121 139
120 122 139
120 121 122 139
210 229
210 212 229
210 211 229
210 211 212 229
124 143
123 124 143
124 125 143
123 124 125 143
214 233
213 214 233
214 215 233
213 214 215 233
30 49
30 32 49
30 31 49
30 31 32 49
34 53
33 34 53
34 35 53
33 34 35 53
232 233
214 232 233
215 232 233
214 215 232 233
138 139
121 138 139
120 138 139
120 121 138 139
228 229
210 228 229
211 228 229
210 211 228 229
142 143
124 142 143
125 142 143
124 125 142 143
48 49
31 48 49
30 48 49
30 31 48 49
52 53
35 52 53
34 52 53
34 35 52 53
139 140
120 139 140
122 139 140
120 122 139 140
229 230
212 229 230
210 229 230
210 212 229 230
231 233
214 231 233
213 231 233
213 214 231 233
141 143
124 141 143
123 141 143
123 124 141 143
49 50
32 49 50
30 49 50
30 32 49 50
51 53
33 51 53
34 51 53
33 34 51 53
138 140
138 139 140
120 138 140
120 138 139 140
228 230
228 229 230
210 228 230
210 228 229 230
141 142
124 141 142
141 142 143
124 141 142 143
231 232
214 231 232
231 232 233
214 231 232 233
48 50
48 49 50
30 48 50
30 48 49 50
51 52
51 52 53
34 51 52
34 51 52 53
117 163
114 117 163
117 163 166
114 117 163 166
162 209
162 206 209
162 165 209
72 119
72 116 119
72 75 119
252 299
252 296 299
252 255 299
204 256
204 253 256
204 207 256
114 163 166
24 76
24 27 76
114 117 166
24 73 76
207 253
204 207 253
207 253 256
204 207 253 256
27 73
27 73 76
24 27 73
24 27 73 76
162 209 228
162 206 209 228
162 165 209 228
72 119 138
72 75 119 138
72 116 119 138
141 204 256
141 204 253 256
51 114 166
51 114 163 166
141 204 207 256
51 114 117 166
220 286
222 288
38 70
38 70 88
38 56 70
38 56 70 88
128 160
128 160 178
128 146 160
128 146 160 178
218 250
218 236 250
218 250 268
218 236 250 268
131 157
131 149 157
131 157 175
131 149 157 175
41 67
41 67 85
41 59 67
41 59 67 85
221 247
221 247 265
221 239 247
221 239 247 265
220 286 297
222 288 295
87 88
220 222
220 222 232
40 42
40 42 52
130 132
130 132 142
219 223
219 223 231
39 43
39 43 51
129 133
129 133 141
37 45
37 45 49
38 47
38 47 50
217 225
217 225 229
127 135
127 135 139
36 46
36 46 48
216 226
216 226 228
126 136
126 136 138
52 160
142 250
67 139
157 229
219 297
219 231 297
219 294 297
219 231 294 297
39 117
39 51 117
39 114 117
39 51 114 117
129 207
129 204 207
129 141 207
129 141 204 207
219 223 297
219 223 231 297
39 43 117
39 43 51 117
129 133 207
129 133 141 207
28 38
28 38 50
25 28 38
25 28 38 50
28 38 47
28 38 47 50
26 46
26 29 46
26 46 48
26 29 46 48
116 136
116 119 136
116 136 138
116 119 136 138
26 36 46
26 36 46 48
116 126 136
116 126 136 138
206 226
206 209 226
206 226 228
206 209 226 228
206 216 226
206 216 226 228
66 138
66 72 138
66 75 138
66 72 75 138
156 228
156 165 228
156 162 228
156 162 165 228
51 159
51 159 166
51 159 163
51 159 163 166
141 249
141 249 253
141 249 256
141 249 253 256
232 297
214 232 297
220 232 297
214 220 232 297
25 49
25 45 49
25 32 49
25 32 45 49
29 49
29 37 49
29 31 49
29 31 37 49
232 295
215 232 295
222 232 295
215 222 232 295
52 160 177
142 250 267
67 85 139
157 175 229
67 84 139
157 174 229
52 160 178
142 250 268
73 78
73 77 78
163 168
163 167 168
253 258
253 257 258
252 261
252 257 261
72 81
72 77 81
162 171
162 167 171
42 160
42 160 178
132 250
132 250 268
67 127
67 84 127
157 217
157 174 217
157 225
157 175 225
67 135
67 85 135
40 160
40 160 177
130 250
130 250 267
155 163 168
155 163 167 168
245 253 258
245 253 257 258
65 73 78
65 73 77 78
242 252 261
242 252 257 261
152 162 171
152 162 167 171
62 72 81
62 72 77 81
157 217 229
157 174 217 229
67 127 139
67 84 127 139
42 52 160
42 52 160 178
132 142 250
132 142 250 268
40 52 160
40 52 160 177
130 142 250
130 142 250 267
67 135 139
67 85 135 139
157 225 229
157 175 225 229
137 159
137 155 159
137 159 163
137 155 159 163
47 69
47 69 73
47 65 69
47 65 69 73
227 249
227 249 253
227 245 249
227 245 249 253
134 156
134 156 162
134 152 156
134 152 156 162
224 246
224 246 252
224 242 246
224 242 246 252
44 66
44 66 72
44 62 66
44 62 66 72
66 84
66 75 84
66 79 84
66 75 79 84
246 264
246 259 264
246 255 264
246 255 259 264
156 174
156 165 174
156 169 174
156 165 169 174
159 177
159 172 177
159 166 177
159 166 172 177
69 87
69 82 87
69 76 87
69 76 82 87
249 267
249 256 267
249 262 267
249 256 262 267
232 272
215 232 272
232 272 295
215 232 272 295
253 258 269
245 253 258 269
73 78 89
65 73 78 89
163 168 179
155 163 168 179
72 81 86
62 72 81 86
252 261 266
242 252 261 266
162 171 176
152 162 171 176
254 260 268
236 254 260 268
74 80 88
56 74 80 88
164 170 178
146 164 170 178
74 83 85
59 74 83 85
254 263 265
239 254 263 265
164 173 175
149 164 173 175
222 272
222 272 295
222 232 272
222 232 272 295
132 198
132 198 250
132 198 268
132 198 250 268
42 108
42 108 178
42 108 160
42 108 160 178
103 217
103 157 217
103 174 217
103 157 174 217
13 127
13 67 127
13 84 127
13 67 84 127
111 225
111 175 225
111 157 225
111 157 175 225
21 135
21 85 135
21 67 135
21 67 85 135
130 196
130 196 267
130 196 250
130 196 250 267
40 106
40 106 177
40 106 160
40 106 160 177
294 296
266 294 296
24 26
24 26 89
231 281
213 231 281
231 281 294
213 231 281 294
246 266
224 246 266
246 252 266
224 246 252 266
156 176
156 162 176
134 156 176
134 156 162 176
66 86
66 72 86
44 66 86
44 66 72 86
69 89
69 73 89
47 69 89
47 69 73 89
159 179
159 163 179
137 159 179
137 159 163 179
249 269
249 253 269
227 249 269
227 249 253 269
246 296
246 252 296
246 299
246 255 299
24 69
24 69 73
27 69
27 69 76
24 47
24 47 89
224 296
224 266 296
66 116
66 72 116
66 116 138
66 72 116 138
66 119
66 75 119
66 119 138
66 75 119 138
156 209
156 209 228
156 165 209
156 165 209 228
156 206
156 206 228
156 162 206
156 162 206 228
114 159
51 114 159
114 159 163
51 114 159 163
204 249
204 249 253
141 204 249
141 204 249 253
117 159
51 117 159
117 159 166
51 117 159 166
207 249
141 207 249
207 249 256
141 207 249 256
232 288
222 232 288
232 286
220 232 286
156 176 206
156 162 176 206
246 266 296
246 252 266 296
66 86 116
66 72 86 116
246 264 299
246 255 264 299
66 84 119
66 75 84 119
156 174 209
156 165 174 209
24 69 89
24 69 73 89
114 159 179
114 159 163 179
204 249 269
204 249 253 269
117 159 177
117 159 166 177
27 69 87
27 69 76 87
207 249 267
207 249 256 267
224 270 296
224 266 270 296
66 86 138
66 86 116 138
156 176 228
156 176 206 228
51 159 179
51 114 159 179
141 249 269
141 204 249 269
141 249 267
141 207 249 267
51 159 177
51 117 159 177
66 84 138
66 84 119 138
156 174 228
156 174 209 228
52 128 160
52 128 160 178
142 218 250
142 218 250 268
51 137 159
51 137 159 179
141 227 249
141 227 249 269
41 67 139
41 67 85 139
131 157 229
131 157 175 229
134 156 228
134 156 176 228
44 66 138
44 66 86 138
142 143 218
125 142 143 218
52 53 128
35 52 53 128
131 229 230
131 212 229 230
41 139 140
41 122 139 140
141 143 227
123 141 143 227
51 53 137
33 51 53 137
44 138 140
44 120 138 140
134 228 230
134 210 228 230
24 47 69
24 47 69 89
224 246 296
224 246 266 296
285 297
285 289 297
285 294 297
246 252 299
246 252 255 299
246 296 299
246 252 296 299
24 69 76
24 69 73 76
24 27 69
24 27 69 76
231 285
231 285 294
231 289
231 289 297
232 286 288
231 285 289
231 285 297
231 285 294 297
231 285 289 297
222 272 288
222 272 288 295
156 157 174
156 157 169 174
246 247 264
246 247 259 264
66 67 84
66 67 79 84
69 70 87
69 70 82 87
159 160 177
159 160 172 177
249 250 267
249 250 262 267
142 230
142 143 230
142 218 230
142 143 218 230
52 140
52 53 140
52 128 140
52 53 128 140
143 228
143 228 230
134 143 228
134 143 228 230
53 138
44 53 138
53 138 140
44 53 138 140
51 140
51 53 140
51 137 140
51 53 137 140
53 139
41 53 139
53 139 140
41 53 139 140
141 230
141 227 230
141 143 230
141 143 227 230
143 229
131 143 229
143 229 230
131 143 229 230
237 266
219 237 266
237 261 266
219 237 261 266
147 176
129 147 176
147 171 176
129 147 171 176
57 86
57 81 86
39 57 86
39 57 81 86
234 269
234 258 269
216 234 269
216 234 258 269
54 89
54 78 89
36 54 89
36 54 78 89
144 179
126 144 179
144 168 179
126 144 168 179
240 265
222 240 265
240 263 265
222 240 263 265
150 175
132 150 175
150 173 175
132 150 173 175
60 85
42 60 85
60 83 85
42 60 83 85
63 88
63 80 88
45 63 88
45 63 80 88
243 268
243 260 268
225 243 268
225 243 260 268
153 178
153 170 178
135 153 178
135 153 170 178
233 270
224 233 270
233 270 281
224 233 270 281
233 279
233 272 279
221 233 279
221 233 272 279
72 73
72 73 77
252 253
252 253 257
162 163
162 163 167
72 73 78
72 73 77 78
252 253 258
252 253 257 258
162 163 168
162 163 167 168
72 73 81
72 73 77 81
162 163 171
162 163 167 171
252 253 261
252 253 257 261
141 245
141 245 249
141 227 245
141 227 245 249
51 155
51 155 159
51 137 155
51 137 155 159
152 228
152 156 228
134 152 228
134 152 156 228
62 138
62 66 138
44 62 138
44 62 66 138
142 236
142 218 236
142 236 250
142 218 236 250
52 146
52 128 146
52 146 160
52 128 146 160
59 139
41 59 139
59 67 139
41 59 67 139
149 229
131 149 229
149 157 229
131 149 157 229
247 271
247 264 271
247 279
247 265 279
247 271 279
65 70
56 65 70
65 70 71
56 65 70 71
245 250
245 250 251
236 245 250
236 245 250 251
155 160
155 160 161
146 155 160
146 155 160 161
245 249 250
245 249 250 251
155 159 160
155 159 160 161
65 69 70
65 69 70 71
149 156
149 156 158
149 152 156
149 152 156 158
59 66
59 62 66
59 66 68
59 62 66 68
239 246
239 246 248
239 242 246
239 242 246 248
239 246 247
239 246 247 248
149 156 157
149 156 157 158
59 66 67
59 66 67 68
233 270 272
233 270 272 281
233 271
233 271 272
233 271 279
233 271 272 279
233 270 271
233 270 271 272
233 280
233 271 280
233 270 280
233 270 271 280
232 272 288
222 232 272 288
129 163
129 147 163
39 73
39 57 73
219 253
219 237 253
226 255
226 244 255
46 75
46 64 75
216 252
216 234 252
136 165
136 154 165
36 72
36 54 72
126 162
126 144 162
133 166
133 151 166
43 76
43 61 76
223 256
223 241 256
141 142 230
141 142 143 230
51 52 140
51 52 53 140
53 138 139
53 138 139 140
143 228 229
143 228 229 230
70 87 88
141 230 245
141 227 230 245
51 140 155
51 137 140 155
53 62 138
44 53 62 138
143 152 228
134 143 152 228
142 230 236
142 218 230 236
52 140 146
52 128 140 146
143 149 229
131 143 149 229
53 59 139
41 53 59 139
232 233 272
215 232 233 272
231 233 281
213 231 233 281
232 286 297
220 232 286 297
221 271
221 271 279
221 233 271
221 233 271 279
224 280
224 270 280
224 233 280
224 233 270 280
27 47
24 27 47
38 87
38 87 88
47 87
27 47 87
27 89
24 27 89
27 47 89
24 27 47 89
87 89
27 87 89
47 87 89
27 47 87 89
204 206
204 206 269
176 204 206
176 204 206 269
114 116
114 116 179
86 114 116
86 114 116 179
242 247
239 242 247
242 246 247
239 242 246 247
62 67
59 62 67
62 66 67
59 62 66 67
152 157
149 152 157
152 156 157
149 152 156 157
231 281 285
231 281 285 294
221 247 279
221 247 265 279
156 211
156 211 228
156 174 211
156 174 211 228
66 121
66 84 121
66 121 138
66 84 121 138
34 159
34 51 159
34 159 177
34 51 159 177
124 249
124 249 267
124 141 249
124 141 249 267
67 121
67 84 121
67 121 139
67 84 121 139
157 211
157 174 211
157 211 229
157 174 211 229
34 160
34 160 177
34 52 160
34 52 160 177
124 250
124 250 267
124 142 250
124 142 250 267
156 157 211
156 157 174 211
66 67 121
66 67 84 121
34 159 160
34 159 160 177
124 249 250
124 249 250 267
66 139
66 121 139
66 67 139
66 67 121 139
156 229
156 211 229
156 157 229
156 157 211 229
66 138 139
66 121 138 139
156 228 229
156 211 228 229
52 159
52 159 160
34 52 159
34 52 159 160
142 249
142 249 250
124 142 249
124 142 249 250
141 142 249
124 141 142 249
51 52 159
34 51 52 159
38 47 87
246 270
246 270 299
246 270 296
246 270 296 299
246 280
246 280 299
246 270 280
246 270 280 299
80 83
74 80 83
260 263
254 260 263
170 173
164 170 173
224 246 270
224 246 270 296
50 87
47 50 87
38 50 87
38 47 50 87
221 247 271
221 247 271 279
224 246 280
224 246 270 280
27 47 69
24 27 47 69
246 264 280
246 264 280 299
38 70 87
38 70 87 88
142 245
141 142 245
142 230 245
141 142 230 245
52 155
52 140 155
51 52 155
51 52 140 155
142 236 245
142 230 236 245
52 146 155
52 140 146 155
62 139
62 138 139
53 62 139
53 62 138 139
152 229
143 152 229
152 228 229
143 152 228 229
59 62 139
53 59 62 139
149 152 229
143 149 152 229
52 155 160
52 146 155 160
142 245 250
142 236 245 250
142 245 249
142 245 249 250
52 155 159
52 155 159 160
51 52 155 159
141 142 245 249
152 157 229
149 152 157 229
62 67 139
59 62 67 139
62 66 139
62 66 67 139
152 156 229
152 156 157 229
62 66 138 139
152 156 228 229
47 69 87
27 47 69 87
221 264
221 247 264
221 264 271
221 247 264 271
224 264
224 264 280
224 246 264
224 246 264 280
233 247
233 239 247
233 242 247
233 239 242 247
233 246
233 246 247
233 242 246
233 242 246 247
50 70
50 56 70
50 65 70
50 56 65 70
50 69
50 69 70
50 65 69
50 65 69 70
233 264
233 264 271
233 264 280
233 264 271 280
214 286
214 286 297
214 232 286
214 232 286 297
224 233 264
224 233 264 280
221 233 264
221 233 264 271
38 89
28 38 89
38 47 89
28 38 47 89
25 89
25 28 89
25 38 89
25 28 38 89
88 89
25 88 89
38 88 89
25 38 88 89
214 289
214 289 297
214 231 289
214 231 289 297
214 286 289
214 286 289 297
221 233 247
221 233 239 247
224 233 246
224 233 242 246
38 50 70
38 50 56 70
47 50 69
47 50 65 69
38 87 89
38 47 87 89
87 88 89
38 87 88 89
40 42 160
40 42 52 160
130 132 250
130 132 142 250
67 127 135
67 127 135 139
157 217 225
157 217 225 229
163 176
147 163 176
163 171 176
147 163 171 176
253 266
253 261 266
237 253 266
237 253 261 266
73 86
57 73 86
73 81 86
57 73 81 86
252 269
252 258 269
234 252 269
234 252 258 269
72 89
54 72 89
72 78 89
54 72 78 89
162 179
162 168 179
144 162 179
144 162 168 179
50 69 87
47 50 69 87
50 70 87
38 50 70 87
233 246 264
224 233 246 264
233 247 264
221 233 247 264
50 69 70 87
233 246 247 264
266 293 294
266 293 294 298
232 289
214 232 289
232 286 289
214 232 286 289
231 232 289
214 231 232 289
220 288
220 232 288
220 222 288
220 222 232 288
220 286 288
220 232 286 288
232 281
232 272 281
232 233 281
232 233 272 281
231 232 281
231 232 233 281
170 173 178
164 170 173 178
80 83 88
74 80 83 88
260 263 268
254 260 263 268
260 263 265
254 260 263 265
80 83 85
74 80 83 85
170 173 175
164 170 173 175
129 163 176
129 147 163 176
39 73 86
39 57 73 86
219 253 266
219 237 253 266
216 252 269
216 234 252 269
36 72 89
36 54 72 89
126 162 179
126 144 162 179
28 48
28 30 48
26 28 48
26 28 30 48
29 48 49
29 31 48 49
28 48 50
28 30 48 50
25 49 50
25 32 49 50
278 291
278 284 291
275 278 291
275 278 284 291
278 283
278 283 284
278 283 293
278 283 284 293
278 283 291
278 283 284 291
278 282 283
278 282 283 293
278 292
278 282 292
278 283 292
278 282 283 292
281 288
281 287 288
272 281 288
272 281 287 288
281 289
281 289 290
281 287 289
281 287 289 290
281 285 289
281 285 289 290
275 283
275 278 283
275 283 291
275 278 283 291
281 288 289
281 287 288 289
281 286
281 286 289
281 286 288
281 286 288 289
272 286
272 286 288
272 281 286
272 281 286 288
226 255 259
226 244 255 259
46 75 79
46 64 75 79
136 165 169
136 154 165 169
133 166 172
133 151 166 172
43 76 82
43 61 76 82
223 256 262
223 241 256 262
231 281 289
231 281 285 289
232 272 286
232 272 286 288
27 88
27 88 89
27 87 88
27 87 88 89
25 27
25 27 88
25 27 89
25 27 88 89
24 25
24 25 28
24 25 89
24 25 28 89
24 25 27
24 25 27 89
282 285
282 285 293
282 285 290
282 285 290 293
288 291
287 288 291
284 288 291
284 287 288 291
232 281 286
232 272 281 286
232 281 289
231 232 281 289
232 281 286 289
162 163 176
162 163 171 176
72 73 86
72 73 81 86
252 253 266
252 253 261 266
252 253 269
252 253 258 269
162 163 179
162 163 168 179
72 73 89
72 73 78 89
282 294
282 293 294
266 282 294
266 282 293 294
84 169
84 136 169
84 127 169
84 127 136 169
174 259
174 217 259
174 226 259
174 217 226 259
82 177
43 82 177
40 82 177
40 43 82 177
172 267
133 172 267
130 172 267
130 133 172 267
282 294 296
266 282 294 296
133 204
129 133 204
133 204 207
129 133 204 207
43 114
39 43 114
43 114 117
39 43 114 117
223 294
223 294 297
219 223 294
219 223 294 297
130 150
130 142 150
130 132 150
130 132 142 150
40 60
40 52 60
40 42 60
40 42 52 60
130 148 150
130 142 148 150
40 58 60
40 52 58 60
220 240
220 222 240
220 232 240
220 222 232 240
220 238 240
220 232 238 240
133 147
133 141 147
133 147 151
133 141 147 151
43 57
43 51 57
43 57 61
43 51 57 61
223 237
223 237 241
223 231 237
223 231 237 241
45 55
45 55 63
45 49 55
45 49 55 63
135 145
135 145 153
135 139 145
135 139 145 153
225 235
225 235 243
225 229 235
225 229 235 243
217 225 235
217 225 229 235
37 45 55
37 45 49 55
127 135 145
127 135 139 145
129 133 147
129 133 141 147
39 43 57
39 43 51 57
219 223 237
219 223 231 237
216 244
216 234 244
216 228 244
216 228 234 244
216 226 244
216 226 228 244
126 154
126 136 154
126 138 154
126 136 138 154
126 144 154
126 138 144 154
36 64
36 48 64
36 46 64
36 46 48 64
36 54 64
36 48 54 64
265 288
265 284 288
265 288 295
265 284 288 295
282 285 294
282 285 293 294
130 198
130 196 198
130 198 250
130 196 198 250
130 132 198
130 132 198 250
40 108
40 108 160
40 42 108
40 42 108 160
40 106 108
40 106 108 160
111 217
111 217 225
111 157 217
111 157 217 225
21 127
21 67 127
21 127 135
21 67 127 135
103 111 217
103 111 157 217
13 21 127
13 21 67 127
265 288 291
265 284 288 291
29 79
29 37 79
29 46 79
29 37 46 79
262 297
223 262 297
220 262 297
220 223 262 297
163 204
129 163 204
73 114
39 73 114
253 294
219 253 294
209 255
209 226 255
29 75
29 46 75
119 165
119 136 165
206 252
206 216 252
26 72
26 36 72
116 162
116 126 162
166 207
133 166 207
76 117
43 76 117
256 297
223 256 297
163 176 204
129 163 176 204
253 266 294
219 253 266 294
73 86 114
39 73 86 114
206 252 269
206 216 252 269
26 72 89
26 36 72 89
116 162 179
116 126 162 179
24 26 28
24 26 28 89
174 255
174 255 259
174 226 255
174 226 255 259
84 165
84 165 169
84 136 165
84 136 165 169
166 267
133 166 267
166 172 267
133 166 172 267
76 177
43 76 177
76 82 177
43 76 82 177
174 209 255
174 209 226 255
84 119 165
84 119 136 165
76 117 177
43 76 117 177
166 207 267
133 166 207 267
29 75 79
29 46 75 79
256 262 297
223 256 262 297
201 279
201 265 279
201 247 279
201 247 265 279
193 271
193 264 271
193 247 271
193 247 264 271
193 279
193 247 279
193 271 279
193 247 271 279
193 201 279
193 201 247 279
18 87
18 87 88
18 70 87
18 70 87 88
16 18 87
16 18 70 87
276 291
276 287 291
275 276 291
275 276 287 291
276 288 291
276 287 288 291
273 282
273 282 290
273 278 282
273 278 282 290
273 282 285
273 282 285 290
28 49
28 48 49
28 49 50
28 48 49 50
25 28 49
25 28 49 50
28 29
26 28 29
28 29 48
26 28 29 48
28 29 49
28 29 48 49
25 29
25 29 49
25 28 29
25 28 29 49
222 265 288
222 265 288 295
220 256
220 256 262
220 256 297
220 256 262 297
37 75
37 75 79
29 37 75
29 37 75 79
150 170
150 170 175
150 170 173
150 170 173 175
60 80
60 80 85
60 80 83
60 80 83 85
240 260
240 260 265
240 260 263
240 260 263 265
153 173
153 173 178
153 170 173
153 170 173 178
243 263
243 263 268
243 260 263
243 260 263 268
63 83
63 80 83
63 83 88
63 80 83 88
162 204
162 163 204
162 176 204
162 163 176 204
72 114
72 73 114
72 86 114
72 73 86 114
252 294
252 253 294
252 266 294
252 253 266 294
162 204 206
162 176 204 206
72 114 116
72 86 114 116
252 294 296
252 266 294 296
114 162
114 162 179
114 162 163
114 162 163 179
24 72
24 72 73
24 72 89
24 72 73 89
204 252
204 252 253
204 252 269
204 252 253 269
114 116 162
114 116 162 179
24 26 72
24 26 72 89
204 206 252
204 206 252 269
150 178
108 150 178
150 173 178
108 150 173 178
60 88
60 83 88
18 60 88
18 60 83 88
240 268
198 240 268
240 263 268
198 240 263 268
148 177
148 172 177
106 148 177
106 148 172 177
58 87
16 58 87
58 82 87
16 58 82 87
238 267
238 262 267
196 238 267
196 238 262 267
145 174
145 169 174
103 145 174
103 145 169 174
235 264
193 235 264
235 259 264
193 235 259 264
55 84
13 55 84
55 79 84
13 55 79 84
243 265
243 260 265
201 243 265
201 243 260 265
153 175
153 170 175
111 153 175
111 153 170 175
63 85
63 80 85
21 63 85
21 63 80 85
150 153
150 153 170
150 153 173
150 153 170 173
60 63
60 63 80
60 63 83
60 63 80 83
240 243
240 243 263
240 243 260
240 243 260 263
150 153 178
150 153 173 178
60 63 88
60 63 83 88
240 243 268
240 243 263 268
150 153 175
150 153 170 175
60 63 85
60 63 80 85
240 243 265
240 243 260 265
25 37
25 37 49
25 29 37
25 29 37 49
25 37 45
25 37 45 49
285 296
285 294 296
282 285 296
282 285 294 296
270 292 299
270 280 292 299
282 299
270 282 299
282 292 299
270 282 292 299
282 296 299
270 282 296 299
133 147 166
133 147 151 166
43 57 76
43 57 61 76
223 237 256
223 237 241 256
133 163
133 147 163
133 163 166
133 147 163 166
43 73
43 57 73
43 73 76
43 57 73 76
223 253
223 253 256
223 237 253
223 237 253 256
129 133 163
129 133 147 163
39 43 73
39 43 57 73
219 223 253
219 223 237 253
216 244 252
226 252
226 244 252
216 226 252
216 226 244 252
216 234 244 252
226 252 255
226 244 252 255
36 64 72
36 54 64 72
46 72
46 64 72
46 72 75
46 64 72 75
36 46 72
36 46 64 72
136 162
136 154 162
126 154 162
126 136 162
126 136 154 162
126 144 154 162
136 162 165
136 154 162 165
40 87
40 82 87
40 58 87
40 58 82 87
130 177
130 172 177
130 148 177
130 148 172 177
220 267
220 262 267
220 238 267
220 238 262 267
217 264
217 235 264
217 259 264
217 235 259 264
37 84
37 55 84
37 79 84
37 55 79 84
127 174
127 169 174
127 145 174
127 145 169 174
174 264
174 259 264
174 255 264
174 255 259 264
84 174
84 169 174
84 165 174
84 165 169 174
177 267
166 177 267
172 177 267
166 172 177 267
87 177
76 87 177
82 87 177
76 82 87 177
40 87 177
40 82 87 177
130 177 267
130 172 177 267
174 217 264
174 217 259 264
84 127 174
84 127 169 174
220 256 267
220 256 262 267
37 75 84
37 75 79 84
265 268
240 265 268
243 265 268
240 243 265 268
175 178
153 175 178
150 175 178
150 153 175 178
85 88
60 85 88
63 85 88
60 63 85 88
40 148
40 148 177
40 106 148
40 106 148 177
130 238
130 238 267
130 196 238
130 196 238 267
42 150
42 150 178
42 108 150
42 108 150 178
132 240
132 198 240
132 240 268
132 198 240 268
55 127
13 55 127
55 84 127
13 55 84 127
145 217
103 145 217
145 174 217
103 145 174 217
63 135
63 85 135
21 63 135
21 63 85 135
153 225
111 153 225
153 175 225
111 153 175 225
225 265
225 265 268
225 243 265
225 243 265 268
135 175
135 175 178
135 153 175
135 153 175 178
45 85
45 63 85
45 85 88
45 63 85 88
42 88
42 60 88
42 85 88
42 60 85 88
132 178
132 175 178
132 150 178
132 150 175 178
222 268
222 240 268
222 265 268
222 240 265 268
29 84
29 37 84
29 75 84
29 37 75 84
267 297
220 267 297
256 267 297
220 256 267 297
21 55 127
13 21 55 127
111 145 217
103 111 145 217
145 225
145 217 225
111 145 225
111 145 217 225
55 135
21 55 135
55 127 135
21 55 127 135
40 150
40 108 150
40 42 150
40 42 108 150
40 108 148
40 148 150
40 108 148 150
40 106 108 148
130 198 238
130 196 198 238
130 240
130 238 240
130 198 240
130 198 238 240
130 132 240
130 132 198 240
55 63 135
21 55 63 135
145 153 225
111 145 153 225
177 207
166 177 207
177 207 267
166 177 207 267
87 117
76 87 117
87 117 177
76 87 117 177
119 174
119 165 174
84 119 174
84 119 165 174
209 264
174 209 264
209 255 264
174 209 255 264
27 117
27 76 117
27 87 117
27 76 87 117
117 207
117 166 207
117 177 207
117 166 177 207
207 297
207 267 297
207 256 297
207 256 267 297
29 119
29 75 119
29 84 119
29 75 84 119
119 209
119 165 209
119 174 209
119 165 174 209
209 299
209 255 299
209 264 299
209 255 264 299
273 296
273 285 296
273 282 296
273 282 285 296
235 271
193 235 271
235 264 271
193 235 264 271
243 279
243 265 279
201 243 279
201 243 265 279
235 279
201 235 279
193 235 279
193 201 235 279
235 271 279
193 235 271 279
235 243 279
201 235 243 279
209 252
209 226 252
209 252 255
209 226 252 255
206 226 252
206 216 226 252
116 136 162
116 126 136 162
206 209 252
206 209 226 252
26 46 72
26 36 46 72
29 72
29 46 72
26 29 72
26 29 46 72
119 162
119 136 162
119 162 165
119 136 162 165
29 72 75
29 46 72 75
116 119 162
116 119 136 162
133 163 204
129 133 163 204
43 73 114
39 43 73 114
223 253 294
219 223 253 294
163 207
133 163 207
163 204 207
133 163 204 207
253 297
223 253 297
253 294 297
223 253 294 297
73 117
43 73 117
73 114 117
43 73 114 117
163 166 207
133 163 166 207
73 76 117
43 73 76 117
253 256 297
223 253 256 297
60 87
58 60 87
18 58 87
18 60 87
18 58 60 87
16 18 58 87
60 87 88
18 60 87 88
277 297
277 289 297
277 286 297
277 286 289 297
274 297
274 286 297
274 277 297
274 277 286 297
273 294
273 285 294
273 294 296
273 285 294 296
24 114
24 73 114
24 72 114
24 72 73 114
114 204
114 163 204
114 162 204
114 162 163 204
204 294
204 253 294
204 252 294
204 252 253 294
116 204
116 162 204
116 206
116 204 206
116 162 206
116 162 204 206
26 114
26 72 114
26 116
26 114 116
26 72 116
26 72 114 116
24 26 114
24 26 72 114
114 116 204
114 116 162 204
206 294
206 252 294
206 296
206 294 296
206 252 296
206 252 294 296
204 206 294
204 206 252 294
135 225
135 153 225
135 175 225
135 153 175 225
45 135
45 85 135
45 63 135
45 63 85 135
40 130
40 130 177
40 130 148
40 130 148 177
130 220
130 220 267
130 220 238
130 220 238 267
42 132
42 132 178
42 132 150
42 132 150 178
132 222
132 222 240
132 222 268
132 222 240 268
37 127
37 84 127
37 55 127
37 55 84 127
127 217
127 145 217
127 174 217
127 145 174 217
265 276
265 276 288
265 276 291
265 276 288 291
220 274
220 274 297
220 274 286
220 274 286 297
277 285 297
277 285 289 297
277 294
277 294 297
277 285 294
277 285 294 297
273 277 294
273 277 285 294
222 276
222 276 288
222 265 276
222 265 276 288
130 220 240
132 220
130 132 220
132 220 240
130 132 220 240
42 130
42 130 150
42 130 132
42 130 132 150
40 130 150
40 130 148 150
40 42 130
40 42 130 150
132 220 222
132 220 222 240
130 220 238 240
45 55 135
45 55 63 135
135 145 225
135 145 153 225
127 225
127 135 225
127 145 225
127 135 145 225
37 135
37 55 135
37 45 135
37 45 55 135
37 127 135
37 55 127 135
127 217 225
127 145 217 225
220 274 288
222 274
222 274 288
220 222 274
220 222 274 288
220 274 286 288
222 274 276
222 274 276 288
225 279
225 265 279
225 243 279
225 243 265 279
217 271
217 235 271
217 264 271
217 235 264 271
178 268
132 178 268
175 178 268
132 175 178 268
88 178
42 88 178
85 88 178
42 85 88 178
85 175
85 135 175
85 175 178
85 135 175 178
175 265
175 265 268
175 225 265
175 225 265 268
225 235 279
225 235 243 279
217 279
217 271 279
217 235 279
217 235 271 279
217 225 279
217 225 235 279
217 283
217 271 283
217 264 283
217 264 271 283
225 291
225 265 291
225 279 291
225 265 279 291
217 279 283
217 271 279 283
217 291
217 283 291
217 279 291
217 279 283 291
217 225 291
217 225 279 291
40 60 87
40 58 60 87
42 87
40 42 87
42 60 87
40 42 60 87
42 87 88
42 60 87 88
276 283
275 276 283
276 283 291
275 276 283 291
117 163 207
117 163 166 207
27 73 117
27 73 76 117
207 253 297
207 253 256 297
163 253
163 204 253
163 207 253
163 204 207 253
73 163
73 114 163
73 117 163
73 114 117 163
CPPFLAGS=-DCGAL_USE_GMP -DCGAL_USE_MPFR
LIBS=-lmpfr -lgmp -lCGAL -lz
compute-filtration: compute-filtration.cpp cnpy.cpp
g++ ${CPPFLAGS} -O3 -o $@ $^ -std=c++11 ${LIBS}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment