# HG changeset patch # User alpar # Date 1113831263 0 # Node ID c280de819a738b469f7bd4c5fd6d1fc6845c0bf2 # Parent ee5959aa4410c3a32e25ae9a4d3a31849b615777 src/work is moved to hugo_loc diff -r ee5959aa4410 -r c280de819a73 src/work/Doxyfile --- a/src/work/Doxyfile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1227 +0,0 @@ -# Doxyfile 1.4.0 - -# This file describes the settings to be used by the documentation system -# doxygen (www.doxygen.org) for a project -# -# All text after a hash (#) is considered a comment and will be ignored -# The format is: -# TAG = value [value, ...] -# For lists items can also be appended using: -# TAG += value [value, ...] -# Values that contain spaces should be placed between quotes (" ") - -#--------------------------------------------------------------------------- -# Project related configuration options -#--------------------------------------------------------------------------- - -# The PROJECT_NAME tag is a single word (or a sequence of words surrounded -# by quotes) that should identify the project. - -PROJECT_NAME = LEMON - -# The PROJECT_NUMBER tag can be used to enter a project or revision number. -# This could be handy for archiving the generated documentation or -# if some version control system is used. - -PROJECT_NUMBER = 0.3 - -# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) -# base path where the generated documentation will be put. -# If a relative path is entered, it will be relative to the location -# where doxygen was started. If left blank the current directory will be used. - -OUTPUT_DIRECTORY = - -# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create -# 4096 sub-directories (in 2 levels) under the output directory of each output -# format and will distribute the generated files over these directories. -# Enabling this option can be useful when feeding doxygen a huge amount of -# source files, where putting all generated files in the same directory would -# otherwise cause performance problems for the file system. - -CREATE_SUBDIRS = NO - -# The OUTPUT_LANGUAGE tag is used to specify the language in which all -# documentation generated by doxygen is written. Doxygen will use this -# information to generate all constant output in the proper language. -# The default language is English, other supported languages are: -# Brazilian, Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, -# Dutch, Finnish, French, German, Greek, Hungarian, Italian, Japanese, -# Japanese-en (Japanese with English messages), Korean, Korean-en, Norwegian, -# Polish, Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, -# Swedish, and Ukrainian. - -OUTPUT_LANGUAGE = English - -# This tag can be used to specify the encoding used in the generated output. -# The encoding is not always determined by the language that is chosen, -# but also whether or not the output is meant for Windows or non-Windows users. -# In case there is a difference, setting the USE_WINDOWS_ENCODING tag to YES -# forces the Windows encoding (this is the default for the Windows binary), -# whereas setting the tag to NO uses a Unix-style encoding (the default for -# all platforms other than Windows). - -USE_WINDOWS_ENCODING = NO - -# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will -# include brief member descriptions after the members that are listed in -# the file and class documentation (similar to JavaDoc). -# Set to NO to disable this. - -BRIEF_MEMBER_DESC = YES - -# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend -# the brief description of a member or function before the detailed description. -# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the -# brief descriptions will be completely suppressed. - -REPEAT_BRIEF = NO - -# This tag implements a quasi-intelligent brief description abbreviator -# that is used to form the text in various listings. Each string -# in this list, if found as the leading text of the brief description, will be -# stripped from the text and the result after processing the whole list, is -# used as the annotated text. Otherwise, the brief description is used as-is. -# If left blank, the following values are used ("$name" is automatically -# replaced with the name of the entity): "The $name class" "The $name widget" -# "The $name file" "is" "provides" "specifies" "contains" -# "represents" "a" "an" "the" - -ABBREVIATE_BRIEF = - -# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then -# Doxygen will generate a detailed section even if there is only a brief -# description. - -ALWAYS_DETAILED_SEC = NO - -# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all -# inherited members of a class in the documentation of that class as if those -# members were ordinary class members. Constructors, destructors and assignment -# operators of the base classes will not be shown. - -INLINE_INHERITED_MEMB = NO - -# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full -# path before files name in the file list and in the header files. If set -# to NO the shortest path that makes the file name unique will be used. - -FULL_PATH_NAMES = YES - -# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag -# can be used to strip a user-defined part of the path. Stripping is -# only done if one of the specified strings matches the left-hand part of -# the path. The tag can be used to show relative paths in the file list. -# If left blank the directory from which doxygen is run is used as the -# path to strip. - -STRIP_FROM_PATH = .. - -# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of -# the path mentioned in the documentation of a class, which tells -# the reader which header file to include in order to use a class. -# If left blank only the name of the header file containing the class -# definition is used. Otherwise one should specify the include paths that -# are normally passed to the compiler using the -I flag. - -STRIP_FROM_INC_PATH = .. - -# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter -# (but less readable) file names. This can be useful is your file systems -# doesn't support long names like on DOS, Mac, or CD-ROM. - -SHORT_NAMES = NO - -# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen -# will interpret the first line (until the first dot) of a JavaDoc-style -# comment as the brief description. If set to NO, the JavaDoc -# comments will behave just like the Qt-style comments (thus requiring an -# explicit @brief command for a brief description. - -JAVADOC_AUTOBRIEF = NO - -# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen -# treat a multi-line C++ special comment block (i.e. a block of //! or /// -# comments) as a brief description. This used to be the default behaviour. -# The new default is to treat a multi-line C++ comment block as a detailed -# description. Set this tag to YES if you prefer the old behaviour instead. - -MULTILINE_CPP_IS_BRIEF = NO - -# If the DETAILS_AT_TOP tag is set to YES then Doxygen -# will output the detailed description near the top, like JavaDoc. -# If set to NO, the detailed description appears after the member -# documentation. - -DETAILS_AT_TOP = YES - -# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented -# member inherits the documentation from any documented member that it -# re-implements. - -INHERIT_DOCS = NO - -# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC -# tag is set to YES, then doxygen will reuse the documentation of the first -# member in the group (if any) for the other members of the group. By default -# all members of a group must be documented explicitly. - -DISTRIBUTE_GROUP_DOC = NO - -# The TAB_SIZE tag can be used to set the number of spaces in a tab. -# Doxygen uses this value to replace tabs by spaces in code fragments. - -TAB_SIZE = 8 - -# This tag can be used to specify a number of aliases that acts -# as commands in the documentation. An alias has the form "name=value". -# For example adding "sideeffect=\par Side Effects:\n" will allow you to -# put the command \sideeffect (or @sideeffect) in the documentation, which -# will result in a user-defined paragraph with heading "Side Effects:". -# You can put \n's in the value part of an alias to insert newlines. - -ALIASES = - -# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C -# sources only. Doxygen will then generate output that is more tailored for C. -# For instance, some of the names that are used will be different. The list -# of all members will be omitted, etc. - -OPTIMIZE_OUTPUT_FOR_C = NO - -# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java sources -# only. Doxygen will then generate output that is more tailored for Java. -# For instance, namespaces will be presented as packages, qualified scopes -# will look different, etc. - -OPTIMIZE_OUTPUT_JAVA = NO - -# Set the SUBGROUPING tag to YES (the default) to allow class member groups of -# the same type (for instance a group of public functions) to be put as a -# subgroup of that type (e.g. under the Public Functions section). Set it to -# NO to prevent subgrouping. Alternatively, this can be done per class using -# the \nosubgrouping command. - -SUBGROUPING = YES - -#--------------------------------------------------------------------------- -# Build related configuration options -#--------------------------------------------------------------------------- - -# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in -# documentation are documented, even if no documentation was available. -# Private class members and static file members will be hidden unless -# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES - -EXTRACT_ALL = NO - -# If the EXTRACT_PRIVATE tag is set to YES all private members of a class -# will be included in the documentation. - -EXTRACT_PRIVATE = YES - -# If the EXTRACT_STATIC tag is set to YES all static members of a file -# will be included in the documentation. - -EXTRACT_STATIC = NO - -# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs) -# defined locally in source files will be included in the documentation. -# If set to NO only classes defined in header files are included. - -EXTRACT_LOCAL_CLASSES = YES - -# This flag is only useful for Objective-C code. When set to YES local -# methods, which are defined in the implementation section but not in -# the interface are included in the documentation. -# If set to NO (the default) only methods in the interface are included. - -EXTRACT_LOCAL_METHODS = NO - -# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all -# undocumented members of documented classes, files or namespaces. -# If set to NO (the default) these members will be included in the -# various overviews, but no documentation section is generated. -# This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_MEMBERS = YES - -# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all -# undocumented classes that are normally visible in the class hierarchy. -# If set to NO (the default) these classes will be included in the various -# overviews. This option has no effect if EXTRACT_ALL is enabled. - -HIDE_UNDOC_CLASSES = YES - -# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all -# friend (class|struct|union) declarations. -# If set to NO (the default) these declarations will be included in the -# documentation. - -HIDE_FRIEND_COMPOUNDS = NO - -# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any -# documentation blocks found inside the body of a function. -# If set to NO (the default) these blocks will be appended to the -# function's detailed documentation block. - -HIDE_IN_BODY_DOCS = NO - -# The INTERNAL_DOCS tag determines if documentation -# that is typed after a \internal command is included. If the tag is set -# to NO (the default) then the documentation will be excluded. -# Set it to YES to include the internal documentation. - -INTERNAL_DOCS = YES - -# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate -# file names in lower-case letters. If set to YES upper-case letters are also -# allowed. This is useful if you have classes or files whose names only differ -# in case and if your file system supports case sensitive file names. Windows -# and Mac users are advised to set this option to NO. - -CASE_SENSE_NAMES = YES - -# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen -# will show members with their full class and namespace scopes in the -# documentation. If set to YES the scope will be hidden. - -HIDE_SCOPE_NAMES = YES - -# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen -# will put a list of the files that are included by a file in the documentation -# of that file. - -SHOW_INCLUDE_FILES = YES - -# If the INLINE_INFO tag is set to YES (the default) then a tag [inline] -# is inserted in the documentation for inline members. - -INLINE_INFO = YES - -# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen -# will sort the (detailed) documentation of file and class members -# alphabetically by member name. If set to NO the members will appear in -# declaration order. - -SORT_MEMBER_DOCS = NO - -# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the -# brief documentation of file, namespace and class members alphabetically -# by member name. If set to NO (the default) the members will appear in -# declaration order. - -SORT_BRIEF_DOCS = NO - -# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be -# sorted by fully-qualified names, including namespaces. If set to -# NO (the default), the class list will be sorted only by class name, -# not including the namespace part. -# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. -# Note: This option applies only to the class list, not to the -# alphabetical list. - -SORT_BY_SCOPE_NAME = NO - -# The GENERATE_TODOLIST tag can be used to enable (YES) or -# disable (NO) the todo list. This list is created by putting \todo -# commands in the documentation. - -GENERATE_TODOLIST = YES - -# The GENERATE_TESTLIST tag can be used to enable (YES) or -# disable (NO) the test list. This list is created by putting \test -# commands in the documentation. - -GENERATE_TESTLIST = YES - -# The GENERATE_BUGLIST tag can be used to enable (YES) or -# disable (NO) the bug list. This list is created by putting \bug -# commands in the documentation. - -GENERATE_BUGLIST = YES - -# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or -# disable (NO) the deprecated list. This list is created by putting -# \deprecated commands in the documentation. - -GENERATE_DEPRECATEDLIST= YES - -# The ENABLED_SECTIONS tag can be used to enable conditional -# documentation sections, marked by \if sectionname ... \endif. - -ENABLED_SECTIONS = - -# The MAX_INITIALIZER_LINES tag determines the maximum number of lines -# the initial value of a variable or define consists of for it to appear in -# the documentation. If the initializer consists of more lines than specified -# here it will be hidden. Use a value of 0 to hide initializers completely. -# The appearance of the initializer of individual variables and defines in the -# documentation can be controlled using \showinitializer or \hideinitializer -# command in the documentation regardless of this setting. - -MAX_INITIALIZER_LINES = 5 - -# Set the SHOW_USED_FILES tag to NO to disable the list of files generated -# at the bottom of the documentation of classes and structs. If set to YES the -# list will mention the files that were used to generate the documentation. - -SHOW_USED_FILES = YES - -# If the sources in your project are distributed over multiple directories -# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy -# in the documentation. - -SHOW_DIRECTORIES = YES - -# The FILE_VERSION_FILTER tag can be used to specify a program or script that -# doxygen should invoke to get the current version for each file (typically from the -# version control system). Doxygen will invoke the program by executing (via -# popen()) the command , where is the value of -# the FILE_VERSION_FILTER tag, and is the name of an input file -# provided by doxygen. Whatever the progam writes to standard output -# is used as the file version. See the manual for examples. - -FILE_VERSION_FILTER = - -#--------------------------------------------------------------------------- -# configuration options related to warning and progress messages -#--------------------------------------------------------------------------- - -# The QUIET tag can be used to turn on/off the messages that are generated -# by doxygen. Possible values are YES and NO. If left blank NO is used. - -QUIET = NO - -# The WARNINGS tag can be used to turn on/off the warning messages that are -# generated by doxygen. Possible values are YES and NO. If left blank -# NO is used. - -WARNINGS = YES - -# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings -# for undocumented members. If EXTRACT_ALL is set to YES then this flag will -# automatically be disabled. - -WARN_IF_UNDOCUMENTED = YES - -# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for -# potential errors in the documentation, such as not documenting some -# parameters in a documented function, or documenting parameters that -# don't exist or using markup commands wrongly. - -WARN_IF_DOC_ERROR = YES - -# This WARN_NO_PARAMDOC option can be abled to get warnings for -# functions that are documented, but have no documentation for their parameters -# or return value. If set to NO (the default) doxygen will only warn about -# wrong or incomplete parameter documentation, but not about the absence of -# documentation. - -WARN_NO_PARAMDOC = NO - -# The WARN_FORMAT tag determines the format of the warning messages that -# doxygen can produce. The string should contain the $file, $line, and $text -# tags, which will be replaced by the file and line number from which the -# warning originated and the warning text. Optionally the format may contain -# $version, which will be replaced by the version of the file (if it could -# be obtained via FILE_VERSION_FILTER) - -WARN_FORMAT = "$file:$line: $text" - -# The WARN_LOGFILE tag can be used to specify a file to which warning -# and error messages should be written. If left blank the output is written -# to stderr. - -WARN_LOGFILE = doxygen.log - -#--------------------------------------------------------------------------- -# configuration options related to the input files -#--------------------------------------------------------------------------- - -# The INPUT tag can be used to specify the files and/or directories that contain -# documented source files. You may enter file names like "myfile.cpp" or -# directories like "/usr/src/myproject". Separate the files or directories -# with spaces. - -INPUT = ../../doc/mainpage.dox \ - ../../doc/graphs.dox \ - ../../doc/maps.dox \ - ../../doc/coding_style.dox \ - ../../doc/groups.dox \ - ../lemon \ - ../lemon/concept \ - ../test/test_tools.h \ - alpar \ - deba \ - jacint \ - klao \ - marci/lp \ - marci - -# If the value of the INPUT tag contains directories, you can use the -# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank the following patterns are tested: -# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx -# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm - -FILE_PATTERNS = - -# The RECURSIVE tag can be used to turn specify whether or not subdirectories -# should be searched for input files as well. Possible values are YES and NO. -# If left blank NO is used. - -RECURSIVE = NO - -# The EXCLUDE tag can be used to specify files and/or directories that should -# excluded from the INPUT source files. This way you can easily exclude a -# subdirectory from a directory tree whose root is specified with the INPUT tag. - -EXCLUDE = - -# The EXCLUDE_SYMLINKS tag can be used select whether or not files or -# directories that are symbolic links (a Unix filesystem feature) are excluded -# from the input. - -EXCLUDE_SYMLINKS = NO - -# If the value of the INPUT tag contains directories, you can use the -# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude -# certain files from those directories. - -EXCLUDE_PATTERNS = - -# The EXAMPLE_PATH tag can be used to specify one or more files or -# directories that contain example code fragments that are included (see -# the \include command). - -EXAMPLE_PATH = ../demo \ - ../../doc \ - ../../LICENSE - -# If the value of the EXAMPLE_PATH tag contains directories, you can use the -# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp -# and *.h) to filter out the source-files in the directories. If left -# blank all files are included. - -EXAMPLE_PATTERNS = - -# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be -# searched for input files to be used with the \include or \dontinclude -# commands irrespective of the value of the RECURSIVE tag. -# Possible values are YES and NO. If left blank NO is used. - -EXAMPLE_RECURSIVE = NO - -# The IMAGE_PATH tag can be used to specify one or more files or -# directories that contain image that are included in the documentation (see -# the \image command). - -IMAGE_PATH = - -# The INPUT_FILTER tag can be used to specify a program that doxygen should -# invoke to filter for each input file. Doxygen will invoke the filter program -# by executing (via popen()) the command , where -# is the value of the INPUT_FILTER tag, and is the name of an -# input file. Doxygen will then use the output that the filter program writes -# to standard output. If FILTER_PATTERNS is specified, this tag will be -# ignored. - -INPUT_FILTER = - -# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern -# basis. Doxygen will compare the file name with each pattern and apply the -# filter if there is a match. The filters are a list of the form: -# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further -# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER -# is applied to all files. - -FILTER_PATTERNS = - -# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using -# INPUT_FILTER) will be used to filter the input files when producing source -# files to browse (i.e. when SOURCE_BROWSER is set to YES). - -FILTER_SOURCE_FILES = NO - -#--------------------------------------------------------------------------- -# configuration options related to source browsing -#--------------------------------------------------------------------------- - -# If the SOURCE_BROWSER tag is set to YES then a list of source files will -# be generated. Documented entities will be cross-referenced with these sources. -# Note: To get rid of all source code in the generated output, make sure also -# VERBATIM_HEADERS is set to NO. - -SOURCE_BROWSER = YES - -# Setting the INLINE_SOURCES tag to YES will include the body -# of functions and classes directly in the documentation. - -INLINE_SOURCES = NO - -# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct -# doxygen to hide any special comment blocks from generated source code -# fragments. Normal C and C++ comments will always remain visible. - -STRIP_CODE_COMMENTS = YES - -# If the REFERENCED_BY_RELATION tag is set to YES (the default) -# then for each documented function all documented -# functions referencing it will be listed. - -REFERENCED_BY_RELATION = YES - -# If the REFERENCES_RELATION tag is set to YES (the default) -# then for each documented function all documented entities -# called/used by that function will be listed. - -REFERENCES_RELATION = YES - -# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen -# will generate a verbatim copy of the header file for each class for -# which an include is specified. Set to NO to disable this. - -VERBATIM_HEADERS = YES - -#--------------------------------------------------------------------------- -# configuration options related to the alphabetical class index -#--------------------------------------------------------------------------- - -# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index -# of all compounds will be generated. Enable this if the project -# contains a lot of classes, structs, unions or interfaces. - -ALPHABETICAL_INDEX = YES - -# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then -# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns -# in which this list will be split (can be a number in the range [1..20]) - -COLS_IN_ALPHA_INDEX = 2 - -# In case all classes in a project start with a common prefix, all -# classes will be put under the same header in the alphabetical index. -# The IGNORE_PREFIX tag can be used to specify one or more prefixes that -# should be ignored while generating the index headers. - -IGNORE_PREFIX = - -#--------------------------------------------------------------------------- -# configuration options related to the HTML output -#--------------------------------------------------------------------------- - -# If the GENERATE_HTML tag is set to YES (the default) Doxygen will -# generate HTML output. - -GENERATE_HTML = YES - -# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `html' will be used as the default path. - -HTML_OUTPUT = html - -# The HTML_FILE_EXTENSION tag can be used to specify the file extension for -# each generated HTML page (for example: .htm,.php,.asp). If it is left blank -# doxygen will generate files with .html extension. - -HTML_FILE_EXTENSION = .html - -# The HTML_HEADER tag can be used to specify a personal HTML header for -# each generated HTML page. If it is left blank doxygen will generate a -# standard header. - -HTML_HEADER = - -# The HTML_FOOTER tag can be used to specify a personal HTML footer for -# each generated HTML page. If it is left blank doxygen will generate a -# standard footer. - -HTML_FOOTER = - -# The HTML_STYLESHEET tag can be used to specify a user-defined cascading -# style sheet that is used by each HTML page. It can be used to -# fine-tune the look of the HTML output. If the tag is left blank doxygen -# will generate a default style sheet. Note that doxygen will try to copy -# the style sheet file to the HTML output directory, so don't put your own -# stylesheet in the HTML output directory as well, or it will be erased! - -HTML_STYLESHEET = - -# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, -# files or namespaces will be aligned in HTML using tables. If set to -# NO a bullet list will be used. - -HTML_ALIGN_MEMBERS = YES - -# If the GENERATE_HTMLHELP tag is set to YES, additional index files -# will be generated that can be used as input for tools like the -# Microsoft HTML help workshop to generate a compressed HTML help file (.chm) -# of the generated HTML documentation. - -GENERATE_HTMLHELP = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can -# be used to specify the file name of the resulting .chm file. You -# can add a path in front of the file if the result should not be -# written to the html output directory. - -CHM_FILE = - -# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can -# be used to specify the location (absolute path including file name) of -# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run -# the HTML help compiler on the generated index.hhp. - -HHC_LOCATION = - -# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag -# controls if a separate .chi index file is generated (YES) or that -# it should be included in the master .chm file (NO). - -GENERATE_CHI = NO - -# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag -# controls whether a binary table of contents is generated (YES) or a -# normal table of contents (NO) in the .chm file. - -BINARY_TOC = NO - -# The TOC_EXPAND flag can be set to YES to add extra items for group members -# to the contents of the HTML help documentation and to the tree view. - -TOC_EXPAND = NO - -# The DISABLE_INDEX tag can be used to turn on/off the condensed index at -# top of each HTML page. The value NO (the default) enables the index and -# the value YES disables it. - -DISABLE_INDEX = NO - -# This tag can be used to set the number of enum values (range [1..20]) -# that doxygen will group on one line in the generated HTML documentation. - -ENUM_VALUES_PER_LINE = 4 - -# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be -# generated containing a tree-like index structure (just like the one that -# is generated for HTML Help). For this to work a browser that supports -# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+, -# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are -# probably better off using the HTML help feature. - -GENERATE_TREEVIEW = YES - -# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be -# used to set the initial width (in pixels) of the frame in which the tree -# is shown. - -TREEVIEW_WIDTH = 250 - -#--------------------------------------------------------------------------- -# configuration options related to the LaTeX output -#--------------------------------------------------------------------------- - -# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will -# generate Latex output. - -GENERATE_LATEX = NO - -# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `latex' will be used as the default path. - -LATEX_OUTPUT = latex - -# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be -# invoked. If left blank `latex' will be used as the default command name. - -LATEX_CMD_NAME = latex - -# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to -# generate index for LaTeX. If left blank `makeindex' will be used as the -# default command name. - -MAKEINDEX_CMD_NAME = makeindex - -# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact -# LaTeX documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_LATEX = YES - -# The PAPER_TYPE tag can be used to set the paper type that is used -# by the printer. Possible values are: a4, a4wide, letter, legal and -# executive. If left blank a4wide will be used. - -PAPER_TYPE = a4wide - -# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX -# packages that should be included in the LaTeX output. - -EXTRA_PACKAGES = - -# The LATEX_HEADER tag can be used to specify a personal LaTeX header for -# the generated latex document. The header should contain everything until -# the first chapter. If it is left blank doxygen will generate a -# standard header. Notice: only use this tag if you know what you are doing! - -LATEX_HEADER = - -# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated -# is prepared for conversion to pdf (using ps2pdf). The pdf file will -# contain links (just like the HTML output) instead of page references -# This makes the output suitable for online browsing using a pdf viewer. - -PDF_HYPERLINKS = YES - -# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of -# plain latex in the generated Makefile. Set this option to YES to get a -# higher quality PDF documentation. - -USE_PDFLATEX = YES - -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode. -# command to the generated LaTeX files. This will instruct LaTeX to keep -# running if errors occur, instead of asking the user for help. -# This option is also used when generating formulas in HTML. - -LATEX_BATCHMODE = NO - -# If LATEX_HIDE_INDICES is set to YES then doxygen will not -# include the index chapters (such as File Index, Compound Index, etc.) -# in the output. - -LATEX_HIDE_INDICES = NO - -#--------------------------------------------------------------------------- -# configuration options related to the RTF output -#--------------------------------------------------------------------------- - -# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output -# The RTF output is optimized for Word 97 and may not look very pretty with -# other RTF readers or editors. - -GENERATE_RTF = NO - -# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `rtf' will be used as the default path. - -RTF_OUTPUT = rtf - -# If the COMPACT_RTF tag is set to YES Doxygen generates more compact -# RTF documents. This may be useful for small projects and may help to -# save some trees in general. - -COMPACT_RTF = NO - -# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated -# will contain hyperlink fields. The RTF file will -# contain links (just like the HTML output) instead of page references. -# This makes the output suitable for online browsing using WORD or other -# programs which support those fields. -# Note: wordpad (write) and others do not support links. - -RTF_HYPERLINKS = NO - -# Load stylesheet definitions from file. Syntax is similar to doxygen's -# config file, i.e. a series of assignments. You only have to provide -# replacements, missing definitions are set to their default value. - -RTF_STYLESHEET_FILE = - -# Set optional variables used in the generation of an rtf document. -# Syntax is similar to doxygen's config file. - -RTF_EXTENSIONS_FILE = - -#--------------------------------------------------------------------------- -# configuration options related to the man page output -#--------------------------------------------------------------------------- - -# If the GENERATE_MAN tag is set to YES (the default) Doxygen will -# generate man pages - -GENERATE_MAN = NO - -# The MAN_OUTPUT tag is used to specify where the man pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `man' will be used as the default path. - -MAN_OUTPUT = man - -# The MAN_EXTENSION tag determines the extension that is added to -# the generated man pages (default is the subroutine's section .3) - -MAN_EXTENSION = .3 - -# If the MAN_LINKS tag is set to YES and Doxygen generates man output, -# then it will generate one additional man file for each entity -# documented in the real man page(s). These additional files -# only source the real man page, but without them the man command -# would be unable to find the correct page. The default is NO. - -MAN_LINKS = NO - -#--------------------------------------------------------------------------- -# configuration options related to the XML output -#--------------------------------------------------------------------------- - -# If the GENERATE_XML tag is set to YES Doxygen will -# generate an XML file that captures the structure of -# the code including all documentation. - -GENERATE_XML = NO - -# The XML_OUTPUT tag is used to specify where the XML pages will be put. -# If a relative path is entered the value of OUTPUT_DIRECTORY will be -# put in front of it. If left blank `xml' will be used as the default path. - -XML_OUTPUT = xml - -# The XML_SCHEMA tag can be used to specify an XML schema, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_SCHEMA = - -# The XML_DTD tag can be used to specify an XML DTD, -# which can be used by a validating XML parser to check the -# syntax of the XML files. - -XML_DTD = - -# If the XML_PROGRAMLISTING tag is set to YES Doxygen will -# dump the program listings (including syntax highlighting -# and cross-referencing information) to the XML output. Note that -# enabling this will significantly increase the size of the XML output. - -XML_PROGRAMLISTING = YES - -#--------------------------------------------------------------------------- -# configuration options for the AutoGen Definitions output -#--------------------------------------------------------------------------- - -# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will -# generate an AutoGen Definitions (see autogen.sf.net) file -# that captures the structure of the code including all -# documentation. Note that this feature is still experimental -# and incomplete at the moment. - -GENERATE_AUTOGEN_DEF = NO - -#--------------------------------------------------------------------------- -# configuration options related to the Perl module output -#--------------------------------------------------------------------------- - -# If the GENERATE_PERLMOD tag is set to YES Doxygen will -# generate a Perl module file that captures the structure of -# the code including all documentation. Note that this -# feature is still experimental and incomplete at the -# moment. - -GENERATE_PERLMOD = NO - -# If the PERLMOD_LATEX tag is set to YES Doxygen will generate -# the necessary Makefile rules, Perl scripts and LaTeX code to be able -# to generate PDF and DVI output from the Perl module output. - -PERLMOD_LATEX = NO - -# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be -# nicely formatted so it can be parsed by a human reader. This is useful -# if you want to understand what is going on. On the other hand, if this -# tag is set to NO the size of the Perl module output will be much smaller -# and Perl will parse it just the same. - -PERLMOD_PRETTY = YES - -# The names of the make variables in the generated doxyrules.make file -# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. -# This is useful so different doxyrules.make files included by the same -# Makefile don't overwrite each other's variables. - -PERLMOD_MAKEVAR_PREFIX = - -#--------------------------------------------------------------------------- -# Configuration options related to the preprocessor -#--------------------------------------------------------------------------- - -# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will -# evaluate all C-preprocessor directives found in the sources and include -# files. - -ENABLE_PREPROCESSING = YES - -# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro -# names in the source code. If set to NO (the default) only conditional -# compilation will be performed. Macro expansion can be done in a controlled -# way by setting EXPAND_ONLY_PREDEF to YES. - -MACRO_EXPANSION = NO - -# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES -# then the macro expansion is limited to the macros specified with the -# PREDEFINED and EXPAND_AS_PREDEFINED tags. - -EXPAND_ONLY_PREDEF = NO - -# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files -# in the INCLUDE_PATH (see below) will be search if a #include is found. - -SEARCH_INCLUDES = YES - -# The INCLUDE_PATH tag can be used to specify one or more directories that -# contain include files that are not input files but should be processed by -# the preprocessor. - -INCLUDE_PATH = - -# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard -# patterns (like *.h and *.hpp) to filter out the header-files in the -# directories. If left blank, the patterns specified with FILE_PATTERNS will -# be used. - -INCLUDE_FILE_PATTERNS = - -# The PREDEFINED tag can be used to specify one or more macro names that -# are defined before the preprocessor is started (similar to the -D option of -# gcc). The argument of the tag is a list of macros of the form: name -# or name=definition (no spaces). If the definition and the = are -# omitted =1 is assumed. To prevent a macro definition from being -# undefined via #undef or recursively expanded use the := operator -# instead of the = operator. - -PREDEFINED = DOXYGEN - -# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then -# this tag can be used to specify a list of macro names that should be expanded. -# The macro definition that is found in the sources will be used. -# Use the PREDEFINED tag if you want to use a different macro definition. - -EXPAND_AS_DEFINED = - -# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then -# doxygen's preprocessor will remove all function-like macros that are alone -# on a line, have an all uppercase name, and do not end with a semicolon. Such -# function macros are typically used for boiler-plate code, and will confuse -# the parser if not removed. - -SKIP_FUNCTION_MACROS = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to external references -#--------------------------------------------------------------------------- - -# The TAGFILES option can be used to specify one or more tagfiles. -# Optionally an initial location of the external documentation -# can be added for each tagfile. The format of a tag file without -# this location is as follows: -# TAGFILES = file1 file2 ... -# Adding location for the tag files is done as follows: -# TAGFILES = file1=loc1 "file2 = loc2" ... -# where "loc1" and "loc2" can be relative or absolute paths or -# URLs. If a location is present for each tag, the installdox tool -# does not have to be run to correct the links. -# Note that each tag file must have a unique name -# (where the name does NOT include the path) -# If a tag file is not located in the directory in which doxygen -# is run, you must also specify the path to the tagfile here. - -TAGFILES = - -# When a file name is specified after GENERATE_TAGFILE, doxygen will create -# a tag file that is based on the input files it reads. - -GENERATE_TAGFILE = - -# If the ALLEXTERNALS tag is set to YES all external classes will be listed -# in the class index. If set to NO only the inherited external classes -# will be listed. - -ALLEXTERNALS = NO - -# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will -# be listed. - -EXTERNAL_GROUPS = YES - -# The PERL_PATH should be the absolute path and name of the perl script -# interpreter (i.e. the result of `which perl'). - -PERL_PATH = /usr/bin/perl - -#--------------------------------------------------------------------------- -# Configuration options related to the dot tool -#--------------------------------------------------------------------------- - -# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will -# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base -# or super classes. Setting the tag to NO turns the diagrams off. Note that -# this option is superseded by the HAVE_DOT option below. This is only a -# fallback. It is recommended to install and use dot, since it yields more -# powerful graphs. - -CLASS_DIAGRAMS = YES - -# If set to YES, the inheritance and collaboration graphs will hide -# inheritance and usage relations if the target is undocumented -# or is not a class. - -HIDE_UNDOC_RELATIONS = NO - -# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is -# available from the path. This tool is part of Graphviz, a graph visualization -# toolkit from AT&T and Lucent Bell Labs. The other options in this section -# have no effect if this option is set to NO (the default) - -HAVE_DOT = YES - -# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect inheritance relations. Setting this tag to YES will force the -# the CLASS_DIAGRAMS tag to NO. - -CLASS_GRAPH = YES - -# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for each documented class showing the direct and -# indirect implementation dependencies (inheritance, containment, and -# class references variables) of the class with other documented classes. - -COLLABORATION_GRAPH = YES - -# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen -# will generate a graph for groups, showing the direct groups dependencies - -GROUP_GRAPHS = YES - -# If the UML_LOOK tag is set to YES doxygen will generate inheritance and -# collaboration diagrams in a style similar to the OMG's Unified Modeling -# Language. - -UML_LOOK = NO - -# If set to YES, the inheritance and collaboration graphs will show the -# relations between templates and their instances. - -TEMPLATE_RELATIONS = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT -# tags are set to YES then doxygen will generate a graph for each documented -# file showing the direct and indirect include dependencies of the file with -# other documented files. - -INCLUDE_GRAPH = YES - -# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and -# HAVE_DOT tags are set to YES then doxygen will generate a graph for each -# documented header file showing the documented files that directly or -# indirectly include this file. - -INCLUDED_BY_GRAPH = YES - -# If the CALL_GRAPH and HAVE_DOT tags are set to YES then doxygen will -# generate a call dependency graph for every global function or class method. -# Note that enabling this option will significantly increase the time of a run. -# So in most cases it will be better to enable call graphs for selected -# functions only using the \callgraph command. - -CALL_GRAPH = YES - -# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen -# will graphical hierarchy of all classes instead of a textual one. - -GRAPHICAL_HIERARCHY = YES - -# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES -# then doxygen will show the dependencies a directory has on other directories -# in a graphical way. The dependency relations are determined by the #include -# relations between the files in the directories. - -DIRECTORY_GRAPH = YES - -# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images -# generated by dot. Possible values are png, jpg, or gif -# If left blank png will be used. - -DOT_IMAGE_FORMAT = png - -# The tag DOT_PATH can be used to specify the path where the dot tool can be -# found. If left blank, it is assumed the dot tool can be found on the path. - -DOT_PATH = - -# The DOTFILE_DIRS tag can be used to specify one or more directories that -# contain dot files that are included in the documentation (see the -# \dotfile command). - -DOTFILE_DIRS = - -# The MAX_DOT_GRAPH_WIDTH tag can be used to set the maximum allowed width -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_WIDTH = 1024 - -# The MAX_DOT_GRAPH_HEIGHT tag can be used to set the maximum allows height -# (in pixels) of the graphs generated by dot. If a graph becomes larger than -# this value, doxygen will try to truncate the graph, so that it fits within -# the specified constraint. Beware that most browsers cannot cope with very -# large images. - -MAX_DOT_GRAPH_HEIGHT = 1024 - -# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the -# graphs generated by dot. A depth value of 3 means that only nodes reachable -# from the root by following a path via at most 3 edges will be shown. Nodes -# that lay further from the root node will be omitted. Note that setting this -# option to 1 or 2 may greatly reduce the computation time needed for large -# code bases. Also note that a graph may be further truncated if the graph's -# image dimensions are not sufficient to fit the graph (see MAX_DOT_GRAPH_WIDTH -# and MAX_DOT_GRAPH_HEIGHT). If 0 is used for the depth value (the default), -# the graph is not depth-constrained. - -MAX_DOT_GRAPH_DEPTH = 0 - -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, which results in a white background. -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). - -DOT_TRANSPARENT = NO - -# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output -# files in one run (i.e. multiple -o and -T options on the command line). This -# makes dot run faster, but since only newer versions of dot (>1.8.10) -# support this, this feature is disabled by default. - -DOT_MULTI_TARGETS = NO - -# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will -# generate a legend page explaining the meaning of the various boxes and -# arrows in the dot generated graphs. - -GENERATE_LEGEND = YES - -# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will -# remove the intermediate dot files that are used to generate -# the various graphs. - -DOT_CLEANUP = YES - -#--------------------------------------------------------------------------- -# Configuration::additions related to the search engine -#--------------------------------------------------------------------------- - -# The SEARCHENGINE tag specifies whether or not a search engine should be -# used. If set to NO the values of all tags below this one will be ignored. - -SEARCHENGINE = NO diff -r ee5959aa4410 -r c280de819a73 src/work/akos/makefile --- a/src/work/akos/makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -BINARIES = simann_demo -INCLUDEDIRS= -I. -I.. -I../.. -I../{marci,jacint,alpar,johanna,athos,akos} -include ../makefile diff -r ee5959aa4410 -r c280de819a73 src/work/akos/simann.h --- a/src/work/akos/simann.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,328 +0,0 @@ -#ifndef LEMON_SIMANN_H -#define LEMON_SIMANN_H - -/// \ingroup experimental -/// \file -/// \brief Simulated annealing framework. -/// \author Akos Ladanyi - -#include -#include -#include - -namespace lemon { - -/// \addtogroup experimental -/// @{ - - const double INFTY = 1e24; - - /*! \brief Simulated annealing base class. */ - class SimAnnBase { - public: - class Controller; - private: - /*! Pointer to the controller. */ - Controller *controller; - protected: - /*! \brief Cost of the current solution. */ - double curr_cost; - /*! \brief Cost of the best solution. */ - double best_cost; - /*! \brief Cost of the previous solution. */ - double prev_cost; - /*! \brief Cost of the solution preceding the previous one. */ - double prev_prev_cost; - - /*! \brief Step to a neighbouring state. */ - virtual void mutate() = 0; - /*! \brief Reverts the last mutate(). */ - virtual void revert() = 0; - /*! \brief Saves the current solution as the best one. */ - virtual void saveAsBest() = 0; - public: - /*! \brief Constructor. */ - SimAnnBase() { - best_cost = prev_cost = prev_prev_cost = INFTY; - } - /*! \brief Sets the controller class to use. */ - void setController(Controller &_controller) { - controller = &_controller; - controller->setBase(this); - } - /*! \brief Returns the cost of the current solution. */ - double getCurrCost() const { return curr_cost; } - /*! \brief Returns the cost of the previous solution. */ - double getPrevCost() const { return prev_cost; } - /*! \brief Returns the cost of the best solution. */ - double getBestCost() const { return best_cost; } - /*! \brief Starts the annealing process. */ - void run() { - controller->init(); - do { - curr_cost=mutate(); - if (controller->accept()) { - controller->acceptEvent(); - if (curr_cost < best_cost) { - saveAsBest(); - controller->improveEvent(); - } - } - else { - revert(); - controller->rejectEvent(); - } - } while (controller->next()); - } - - /*! \brief A base class for controllers. */ - class Controller { - public: - /*! \brief Pointer to the simulated annealing base class. */ - SimAnnBase *base; - /*! \brief Initializes the controller. */ - virtual void init() {} - /*! \brief This is called when a neighbouring state gets accepted. */ - virtual void acceptEvent() {} - /*! \brief This is called when the accepted neighbouring state's cost is - * less than the best found one's. - */ - virtual void improveEvent() {} - /*! \brief This is called when a neighbouring state gets rejected. */ - virtual void rejectEvent() {} - /*! \brief Sets the simulated annealing base class to use. */ - virtual void setBase(SimAnnBase *_base) { base = _base; } - /*! \brief Decides whether to continue the annealing process or not. */ - virtual bool next() = 0; - /*! \brief Decides whether to accept the current solution or not. */ - virtual bool accept() = 0; - }; - }; - - /*! \brief Simulated annealing class. */ - template - class SimAnn : public SimAnnBase { - private: - /*! \brief Pointer to the current entity. */ - E *curr_ent; - /*! \brief Pointer to the best entity. */ - E *best_ent; - public: - /*! \brief Constructor. */ - SimAnn() : SimAnnBase() {} - /*! \brief Sets the initial entity. */ - void setEntity(E &ent) { - curr_ent = new E(ent); - best_ent = new E(ent); - curr_cost = curr_ent->getCost(); - } - /*! \brief Returns the best found entity. */ - E getBestEntity() { return *best_ent; } - /*! \brief Step to a neighbouring state. */ - void mutate() { - prev_prev_cost = prev_cost; - prev_cost = curr_cost; - curr_ent->mutate(); - curr_cost = curr_ent->getCost(); - } - /*! \brief Reverts the last mutate(). */ - void revert() { - curr_ent->revert(); - curr_cost = prev_cost; - prev_cost = prev_prev_cost; - } - /*! \brief Saves the current solution as the best one. */ - void saveAsBest() { - delete(best_ent); - best_ent = new E(*curr_ent); - best_cost = curr_cost; - } - }; - - /*! \brief Skeleton of an entity class. */ - class EntitySkeleton { - public: - /*! \brief Returns the cost of the entity. */ - double getCost() { return 0.0; } - /*! \brief Makes a minor change to the entity. */ - void mutate() {} - /*! \brief Restores the entity to its previous state i.e. reverts the - * effects of the last mutate(). - */ - void revert() {} - }; - - /*! \brief A simple controller for the simulated annealing class. */ - class SimpleController : public SimAnnBase::Controller { - public: - /*! \brief Number of iterations. */ - long iter; - /*! \brief Number of iterations which did not improve the solution since - * the last improvement. */ - long last_impr; - /*! \brief Maximum number of iterations. */ - long max_iter; - /*! \brief Maximum number of iterations which do not improve the - * solution. */ - long max_no_impr; - /*! \brief Temperature. */ - double temp; - /*! \brief Annealing factor. */ - double ann_fact; - /*! \brief Constructor. - * \param _max_iter maximum number of iterations - * \param _max_no_impr maximum number of consecutive iterations which do - * not yield a better solution - * \param _temp initial temperature - * \param _ann_fact annealing factor - */ - SimpleController(long _max_iter = 500000, long _max_no_impr = 20000, - double _temp = 1000.0, double _ann_fact = 0.9999) : iter(0), last_impr(0), - max_iter(_max_iter), max_no_impr(_max_no_impr), temp(_temp), - ann_fact(_ann_fact) {} - /*! \brief This is called when a neighbouring state gets accepted. */ - void acceptEvent() { - iter++; - } - /*! \brief This is called when the accepted neighbouring state's cost is - * less than the best found one's. - */ - void improveEvent() { - last_impr = iter; - } - /*! \brief This is called when a neighbouring state gets rejected. */ - void rejectEvent() { - iter++; - } - /*! \brief Decides whether to continue the annealing process or not. Also - * decreases the temperature. */ - bool next() { - temp *= ann_fact; - bool quit = (iter > max_iter) || (iter - last_impr > max_no_impr); - return !quit; - } - /*! \brief Decides whether to accept the current solution or not. */ - bool accept() { - double cost_diff = base->getPrevCost() - base->getCurrCost(); - if (cost_diff < 0.0) { - bool ret = drand48() <= exp(cost_diff / temp); - return ret; - } - else { - return true; - } - } - }; - - /*! \brief A controller with preset running time for the simulated annealing - * class. - * - * With this controller you can set the running time of the annealing - * process in advance. It works the following way: the controller measures - * a kind of divergence. The divergence is the difference of the average - * cost of the recently found solutions the cost of the best found one. In - * case this divergence is greater than a given threshold, then we decrease - * the annealing factor, that is we cool the system faster. In case the - * divergence is lower than the threshold, then we increase the temperature. - * The threshold is a function of the elapsed time which reaches zero at the - * desired end time. - */ - class AdvancedController : public SimAnnBase::Controller { - private: - Timer timer; - /*! \param time the elapsed time in seconds */ - virtual double threshold(double time) { - return (-1.0) * start_threshold / end_time * time + start_threshold; - } - public: - double alpha; - double beta; - double gamma; - /*! \brief The time at the end of the algorithm. */ - double end_time; - /*! \brief The time at the start of the algorithm. */ - double start_time; - /*! \brief Starting threshold. */ - double start_threshold; - /*! \brief Average cost of recent solutions. */ - double avg_cost; - /*! \brief Temperature. */ - double temp; - /*! \brief Annealing factor. */ - double ann_fact; - /*! \brief Initial annealing factor. */ - double init_ann_fact; - bool warmup; - /*! \brief Constructor. - * \param _end_time running time in seconds - * \param _alpha parameter used to calculate the running average - * \param _beta parameter used to decrease the annealing factor - * \param _gamma parameter used to increase the temperature - * \param _ann_fact initial annealing factor - */ - AdvancedController(double _end_time, double _alpha = 0.2, - double _beta = 0.9, double _gamma = 1.6, double _ann_fact = 0.9999) : - alpha(_alpha), beta(_beta), gamma(_gamma), end_time(_end_time), - ann_fact(_ann_fact), init_ann_fact(_ann_fact), warmup(true) {} - void init() { - avg_cost = base->getCurrCost(); - } - /*! \brief This is called when a neighbouring state gets accepted. */ - void acceptEvent() { - avg_cost = alpha * base->getCurrCost() + (1.0 - alpha) * avg_cost; - if (warmup) { - static int cnt = 0; - cnt++; - if (cnt >= 100) { - // calculate starting threshold and starting temperature - start_threshold = 5.0 * fabs(base->getBestCost() - avg_cost); - temp = 10000.0; - warmup = false; - timer.reset(); - } - } - } - /*! \brief Decides whether to continue the annealing process or not. */ - bool next() { - if (warmup) { - return true; - } - else { - double elapsed_time = timer.getRealTime(); - if (fabs(avg_cost - base->getBestCost()) > threshold(elapsed_time)) { - // decrease the annealing factor - ann_fact *= beta; - } - else { - // increase the temperature - temp *= gamma; - // reset the annealing factor - ann_fact = init_ann_fact; - } - temp *= ann_fact; - return elapsed_time < end_time; - } - } - /*! \brief Decides whether to accept the current solution or not. */ - bool accept() { - if (warmup) { - // we accept eveything during the "warm up" phase - return true; - } - else { - double cost_diff = base->getPrevCost() - base->getCurrCost(); - if (cost_diff < 0.0) { - return (drand48() <= exp(cost_diff / temp)); - } - else { - return true; - } - } - } - }; - -/// @} - -} - -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/akos/simann_demo.cc --- a/src/work/akos/simann_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -#include "simann.h" - -using namespace lemon; - -class MyEntity { -public: - double getCost() { return 10.0; } - void mutate() {} - void revert() {} -}; - -int main() { - /* - SimAnn simann; - SimpleController ctrl; - simann.setController(ctrl); - MyEntity ent; - simann.setEntity(ent); - simann.run(); - */ - - SimAnn simann2; - AdvancedController ctrl2(10.0); - simann2.setController(ctrl2); - MyEntity ent2; - simann2.setEntity(ent2); - simann2.run(); -} diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/attic/bfs.h --- a/src/work/alpar/attic/bfs.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,352 +0,0 @@ -// -*-mode: c++; -*- -#ifndef _BFS_H_ -#define _BFS_H_ - -#include -#include - -namespace NEGRO -{ - using namespace std; - - // template class bfs_T - // { - // typedef G Graph; - // typedef Graph::OutEdgeIterator EdgeIterator; //Ez kell - // typedef Graph::NodeIterator NodeIterator; - - // class bfs_node_D - // { - // EdgeIterator Tree; - // int Dist; - // int Priority; - // } - // } - - - // // template > - // // void bfs(bfs_T::Graph &G,const bfs_T::NodeIterator &start_node,const &maps) - - - - // template - // class bfs_maps_T - // { - // typedef visited; //node->bool (RW) - // typedef tree; //node->EdgeIterator (W) - // typedef dist; //node->int (W) - // typedef priority; //node->int (W) - // }; - - - // Nem jo! Osszeakad a masik Put-tal - // class do_nothing_map {}; - // template - // void Put(const do_nothing_map &p,const V &v,const T &t) {} - - struct do_nothing_map { - template static void Put(V v,T t) {} - template void SetG(G &g) {} - }; - - - template - class class_element_map { - public: - typedef T value_type; - static void Put(const I &i, const T &t) {(*i).*M=t;} - static T Get(const I i) {return (*i).*M;} - T &operator[](I i) {return (*i).*M;} - }; - - /* - template - void Put(class_element_map p,I i, T t) - { - i->*M=t; - }; - */ - - template - inline void Put(P &p,const I &i, const T &t) - { - p.Put(i,t); - }; - template - inline typename P::value_type Get(const P &p,const I &i) - { - return p.Get(i); - }; - - /* - template - T Get(edge_element_map p,G::EdgeIterator i) - { - return i->*M; - }; - */ - - /* - template - class default_bfs_maps - { - public: - typedef typename G::NodeType NodeType; - - class_element_map visited; //node->bool (RW) - do_nothing_map tree; //node->EdgeIterator (W) - do_nothing_map dist; //node->int (W) - do_nothing_map priority; //node->int (W) - }; - */ - - template - struct bfs_node_data - { - bool visited; - typename G::EdgeIterator tree; - int dist; - int priority; - }; - - template - class bfs_static_maps - { - public: - typedef typename G::NodeType NodeType; - - /* class_element_map,&NT::D> n_d; //node-> data - */ - class - { - public: - bfs_node_data NodeType::*d; - typedef bool value_type; - void Put(typename G::NodeIterator &i, const value_type &t) - {((*i).*d).visited=t;} - value_type Get(const typename G::NodeIterator &i) const - {return ((*i).*d).visited;} - } visited; - - class - { - public: - bfs_node_data NodeType::*d; - typedef typename G::EdgeIterator value_type; - void Put(typename G::NodeIterator &i, const value_type &t) - {((*i).*d).tree=t;} - value_type Get(const typename G::NodeIterator &i) const - {return ((*i).*d).tree;} - } tree; - - class - { - public: - bfs_node_data NodeType::*d; - typedef int value_type; - void Put(typename G::NodeIterator &i, const value_type &t) - {((*i).*d).dist=t;} - value_type Get(const typename G::NodeIterator &i) const - {return ((*i).*d).dist;} - } dist; - - class - { - public: - bfs_node_data NodeType::*d; - typedef int value_type; - void Put(typename G::NodeIterator &i, const value_type &t) - {((*i).*d).priority=t;} - value_type Get(const typename G::NodeIterator &i) const - {return ((*i).*d).priority;} - } priority; - - //do_nothing_map tree; //node->EdgeIterator (W) - // do_nothing_map dist; //node->int (W) - // do_nothing_map priority; //node->int (W) - - void SetDataField(const bfs_node_data NodeType::*dd) - { - tree.d=visited.d=dist.d=priority.d=dd; - } - - bfs_static_maps(const bfs_node_data NodeType::*dd) - { - PutDataField(dd); - } - - bfs_static_maps(const bfs_static_maps &B) - { - tree.d=B.tree.d;visited.d=B.visited.d; - dist.d=B.dist.d;priority.d=B.priority.d; - } - - }; - - template - struct BFS_Q - { - I n; - int dist; - // BFS_Q() {} - // BFS_Q(BFS_Q &b) {n=b.n;dist=b.dist;} - }; - - template - void bfs_fn(G &Gr,const typename G::NodeIterator &start_node,M &maps) - { - using namespace std; - - typedef BFS_Q Q_T; - - Q_T q; - - int pr=0; - typename G::NodeIterator n,m; - typename G::OutEdgeIterator e; - int d; - - for(Gr.GetFirst(n);n.isValid();++n) - Put(maps.visited,n,false); - - queue Q; - - q.n=start_node; - q.dist=0; - Q.push(q); - Put(maps.visited,start_node,true); - // Put(maps::tree,start_node,?????); - Put(maps.dist,start_node,0); - Put(maps.priority,start_node,pr++); - - do { - n=Q.front().n;d=Q.front().dist+1; - Q.pop(); - for(Gr.GetFirst(e,n);e.isValid();++e) - if(!Get(maps.visited,(m=e.Bnode()))) { - q.n=m; - q.dist=d; - Q.push(q); - Put(maps.visited,m,true); - Put(maps.tree,m,e); - Put(maps.dist,m,d); - Put(maps.priority,m,pr++); - } - } while(!Q.empty()); - }; - - // bfs algorithm class - - template //the default traits - class default_bfs_T - { - public: - - typedef G Graph; - typedef typename G::OutEdgeIterator SearchEdgeIterator; - - typedef typename G::NodeMap visited_map_t; - typedef typename G::NodeMap tree_map_t; - - typedef typename G::NodeMap dist_map_t; //node->int (W) - typedef typename G::NodeMap priority_map_t; //node->int (W) -}; - - template - class Bfs - { - public: - typedef typename T::Graph Graph; - typedef typename Graph::NodeIterator NodeIterator; - typedef typename Graph::EdgeIterator EdgeIterator; - - typedef typename T::SearchEdgeIterator SearchEdgeIterator; - - typename T::visited_map_t visited_map; - typename T::tree_map_t tree_map; - typename T::dist_map_t dist_map; - typename T::priority_map_t priority_map; - - struct bfs_queue_cont - { - NodeIterator n; - int dist; - }; - - std::queue bfs_queue; - - int priority; - Graph *G; - - //Bfs(int i): visited_map(G), tree_map(G), dist_map(G), priority_map(G) {} - Bfs() {} - - void SetG(Graph &Gr) - { - G=&Gr; - visited_map.SetG(Gr); - tree_map.SetG(Gr); - dist_map.SetG(Gr); - priority_map.SetG(Gr); - } - - void Init() - { - //There must be a better way to do this: - while(!bfs_queue.empty()) bfs_queue.pop(); - - for(NodeIterator n(*G);n.isValid();++n) - Put(visited_map,n,false); - - priority=0; - } - - void AddStartNode(const NodeIterator &start_node,int dist=0) - { - bfs_queue_cont q; - q.n=start_node; - q.dist=dist; - bfs_queue.push(q); - - Put(visited_map,start_node,true); - // Put(tree_map,start_node,?????); - Put(dist_map,start_node,dist); - Put(priority_map,start_node,priority++); - } - - void Init(const NodeIterator &start_node,int dist=0) - { - Init(); - AddStartNode(start_node,dist); - } - - void Run() - { - NodeIterator n,m; - int d; - - bfs_queue_cont q; - while(!(bfs_queue.empty()/* && other stop conditions */)) { - n=bfs_queue.front().n;d=bfs_queue.front().dist+1; - bfs_queue.pop(); - for(SearchEdgeIterator e(*G,n);e.isValid();++e) - if(!Get(visited_map,(m=e.Bnode()))) { - q.n=m; - q.dist=d; - bfs_queue.push(q); - Put(visited_map,m,true); - Put(tree_map,m,e); - Put(dist_map,m,d); - Put(priority_map,m,priority++); - } - } - } - }; - -} - -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/attic/texi/etikol.texi --- a/src/work/alpar/attic/texi/etikol.texi Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,189 +0,0 @@ -\input texinfo @c -*-texinfo-*- -@comment $Id: etikol.texi,v 1.5 2004/02/10 13:29:15 alpar Exp $ -@comment %**start of header -@setfilename etikol.info -@include version.texi -@settitle GNU ETIK-OL Optimization Library @value{VERSION} -@syncodeindex pg cp - -@c @ifnottex -@c @macro mref { nn, txt } -@c @ref{\nn\,\txt\} -@c @end macro -@c @end ifnottex -@c @iftex -@macro mref { nn, txt } -@ifnottex -@ref{\nn\,\txt\} -@end ifnottex -@tex -\txt\ -@end tex -@end macro -@c @href{\nn\}{\txt\} - - - -@c @ifplaintext -@c Whereas this text will only appear in plain text. -@c @end ifplaintext -@c @ifxml -@c And this will only appear in XML output. -@c @end ifxm -@c @ref{\nn\,\txt\} - - -@comment %**end of header - -@copying -This manual is for GNU ETIL-OL Optimization Library -(version @value{VERSION}, @value{UPDATED}). - -Copyright @copyright{} 2003 ETIK. - -@quotation -Permission is granted to copy, distribute and/or modify this document -under the terms of the GNU Free Documentation License, Version 1.1 or -any later version published by the Free Software Foundation; with no -Invariant Sections, with the Front-Cover Texts being ``A GNU Manual,'' -and with the Back-Cover Texts as in (a) below. A copy of the -license is included in the section entitled ``GNU Free Documentation -License.'' - -(a) The FSF's Back-Cover Text is: ``You have freedom to copy and modify -this GNU Manual, like GNU software. Copies published by the Free -Software Foundation raise funds for GNU development.'' -@end quotation -@end copying - -@dircategory Texinfo documentation system -@direntry -* ETIK-OL: ETIK-OL Optimization Library. -@end direntry - -@titlepage -@title GNU ETIL-OL Optimization Library -@subtitle for version @value{VERSION}, @value{UPDATED} -@author ETIK Group -@page -@vskip 0pt plus 1filll -@c @insertcopying -@end titlepage - -@contents - -@ifnottex -@node Top -@top GNU ETIK-OL Library - -@c @insertcopying -@end ifnottex - -@menu -* Basic Concepts:: -* Copying This Manual:: -* Index:: -@end menu - - -@node Basic Concepts -@chapter Basic Concepts - -@menu -* The Full Feature Graph Class:: -* The BFS algorithm:: -@end menu - -@include flf-graph.texi - -@c @node A Full Feature Graph -@c @section A Full Feature Graph -@c @cindex Full Feature Graph - -@node The BFS algorithm -@section The BFS algorithm -@cindex The BFS algorithm - -@menu -* Iterator style BFS class:: -* The BFS funcion:: -@end menu - -bla2 - -@node Iterator style BFS class -@subsection Iterator style BFS class -@cindex BFS algorithm -@cindex BFS concept - -Here is a code example. - - -@quotation -@verbatim -class -{ -public: - bfs_node_data NodeType::*d; - typedef typename G::EdgeIterator value_type; - void Put(typename G::NodeIterator &i, - const value_type &t); - value_type Get(const typename G::NodeIterator &i) const; -} tree; -@end verbatim -@end quotation - - -The same code with a remark. - -@comment @quotation -@example -class -@{ -public: - bfs_node_data NodeType::*d; - typedef typename G::EdgeIterator value_type; - void Put(typename G::NodeIterator &i, - const value_type &t); @r{This is a long funcion declaration.} - value_type Get(const typename G::NodeIterator &i) const; -@} tree; -@end example -@comment @end quotation - -@node The BFS funcion -@subsection The BFS funcion -@cindex BFS algorithm - -@enumerate -@item -This is the first item. - -@item -This is the second item. -@end enumerate - - -@node Copying This Manual -@appendix Copying This Manual - -@menu -* GNU Free Documentation License:: License for copying this manual. -@end menu - -@include fdl.texi - - -@node Index -@unnumbered Concept Index -@printindex cp - -@c @node Function Index -@unnumbered Function Index -@printindex fn - -@c @node Type Index -@unnumbered Type Index -@printindex tp - -@bye - diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/attic/texi/fdl.texi --- a/src/work/alpar/attic/texi/fdl.texi Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,452 +0,0 @@ - -@node GNU Free Documentation License -@appendixsec GNU Free Documentation License - -@cindex FDL, GNU Free Documentation License -@center Version 1.2, November 2002 - -@display -Copyright @copyright{} 2000,2001,2002 Free Software Foundation, Inc. -59 Temple Place, Suite 330, Boston, MA 02111-1307, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -@end display - -@enumerate 0 -@item -PREAMBLE - -The purpose of this License is to make a manual, textbook, or other -functional and useful document @dfn{free} in the sense of freedom: to -assure everyone the effective freedom to copy and redistribute it, -with or without modifying it, either commercially or noncommercially. -Secondarily, this License preserves for the author and publisher a way -to get credit for their work, while not being considered responsible -for modifications made by others. - -This License is a kind of ``copyleft'', which means that derivative -works of the document must themselves be free in the same sense. It -complements the GNU General Public License, which is a copyleft -license designed for free software. - -We have designed this License in order to use it for manuals for free -software, because free software needs free documentation: a free -program should come with manuals providing the same freedoms that the -software does. But this License is not limited to software manuals; -it can be used for any textual work, regardless of subject matter or -whether it is published as a printed book. We recommend this License -principally for works whose purpose is instruction or reference. - -@item -APPLICABILITY AND DEFINITIONS - -This License applies to any manual or other work, in any medium, that -contains a notice placed by the copyright holder saying it can be -distributed under the terms of this License. Such a notice grants a -world-wide, royalty-free license, unlimited in duration, to use that -work under the conditions stated herein. The ``Document'', below, -refers to any such manual or work. Any member of the public is a -licensee, and is addressed as ``you''. You accept the license if you -copy, modify or distribute the work in a way requiring permission -under copyright law. - -A ``Modified Version'' of the Document means any work containing the -Document or a portion of it, either copied verbatim, or with -modifications and/or translated into another language. - -A ``Secondary Section'' is a named appendix or a front-matter section -of the Document that deals exclusively with the relationship of the -publishers or authors of the Document to the Document's overall -subject (or to related matters) and contains nothing that could fall -directly within that overall subject. (Thus, if the Document is in -part a textbook of mathematics, a Secondary Section may not explain -any mathematics.) The relationship could be a matter of historical -connection with the subject or with related matters, or of legal, -commercial, philosophical, ethical or political position regarding -them. - -The ``Invariant Sections'' are certain Secondary Sections whose titles -are designated, as being those of Invariant Sections, in the notice -that says that the Document is released under this License. If a -section does not fit the above definition of Secondary then it is not -allowed to be designated as Invariant. The Document may contain zero -Invariant Sections. If the Document does not identify any Invariant -Sections then there are none. - -The ``Cover Texts'' are certain short passages of text that are listed, -as Front-Cover Texts or Back-Cover Texts, in the notice that says that -the Document is released under this License. A Front-Cover Text may -be at most 5 words, and a Back-Cover Text may be at most 25 words. - -A ``Transparent'' copy of the Document means a machine-readable copy, -represented in a format whose specification is available to the -general public, that is suitable for revising the document -straightforwardly with generic text editors or (for images composed of -pixels) generic paint programs or (for drawings) some widely available -drawing editor, and that is suitable for input to text formatters or -for automatic translation to a variety of formats suitable for input -to text formatters. A copy made in an otherwise Transparent file -format whose markup, or absence of markup, has been arranged to thwart -or discourage subsequent modification by readers is not Transparent. -An image format is not Transparent if used for any substantial amount -of text. A copy that is not ``Transparent'' is called ``Opaque''. - -Examples of suitable formats for Transparent copies include plain -@sc{ascii} without markup, Texinfo input format, La@TeX{} input -format, @acronym{SGML} or @acronym{XML} using a publicly available -@acronym{DTD}, and standard-conforming simple @acronym{HTML}, -PostScript or @acronym{PDF} designed for human modification. Examples -of transparent image formats include @acronym{PNG}, @acronym{XCF} and -@acronym{JPG}. Opaque formats include proprietary formats that can be -read and edited only by proprietary word processors, @acronym{SGML} or -@acronym{XML} for which the @acronym{DTD} and/or processing tools are -not generally available, and the machine-generated @acronym{HTML}, -PostScript or @acronym{PDF} produced by some word processors for -output purposes only. - -The ``Title Page'' means, for a printed book, the title page itself, -plus such following pages as are needed to hold, legibly, the material -this License requires to appear in the title page. For works in -formats which do not have any title page as such, ``Title Page'' means -the text near the most prominent appearance of the work's title, -preceding the beginning of the body of the text. - -A section ``Entitled XYZ'' means a named subunit of the Document whose -title either is precisely XYZ or contains XYZ in parentheses following -text that translates XYZ in another language. (Here XYZ stands for a -specific section name mentioned below, such as ``Acknowledgements'', -``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' -of such a section when you modify the Document means that it remains a -section ``Entitled XYZ'' according to this definition. - -The Document may include Warranty Disclaimers next to the notice which -states that this License applies to the Document. These Warranty -Disclaimers are considered to be included by reference in this -License, but only as regards disclaiming warranties: any other -implication that these Warranty Disclaimers may have is void and has -no effect on the meaning of this License. - -@item -VERBATIM COPYING - -You may copy and distribute the Document in any medium, either -commercially or noncommercially, provided that this License, the -copyright notices, and the license notice saying this License applies -to the Document are reproduced in all copies, and that you add no other -conditions whatsoever to those of this License. You may not use -technical measures to obstruct or control the reading or further -copying of the copies you make or distribute. However, you may accept -compensation in exchange for copies. If you distribute a large enough -number of copies you must also follow the conditions in section 3. - -You may also lend copies, under the same conditions stated above, and -you may publicly display copies. - -@item -COPYING IN QUANTITY - -If you publish printed copies (or copies in media that commonly have -printed covers) of the Document, numbering more than 100, and the -Document's license notice requires Cover Texts, you must enclose the -copies in covers that carry, clearly and legibly, all these Cover -Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -the back cover. Both covers must also clearly and legibly identify -you as the publisher of these copies. The front cover must present -the full title with all words of the title equally prominent and -visible. You may add other material on the covers in addition. -Copying with changes limited to the covers, as long as they preserve -the title of the Document and satisfy these conditions, can be treated -as verbatim copying in other respects. - -If the required texts for either cover are too voluminous to fit -legibly, you should put the first ones listed (as many as fit -reasonably) on the actual cover, and continue the rest onto adjacent -pages. - -If you publish or distribute Opaque copies of the Document numbering -more than 100, you must either include a machine-readable Transparent -copy along with each Opaque copy, or state in or with each Opaque copy -a computer-network location from which the general network-using -public has access to download using public-standard network protocols -a complete Transparent copy of the Document, free of added material. -If you use the latter option, you must take reasonably prudent steps, -when you begin distribution of Opaque copies in quantity, to ensure -that this Transparent copy will remain thus accessible at the stated -location until at least one year after the last time you distribute an -Opaque copy (directly or through your agents or retailers) of that -edition to the public. - -It is requested, but not required, that you contact the authors of the -Document well before redistributing any large number of copies, to give -them a chance to provide you with an updated version of the Document. - -@item -MODIFICATIONS - -You may copy and distribute a Modified Version of the Document under -the conditions of sections 2 and 3 above, provided that you release -the Modified Version under precisely this License, with the Modified -Version filling the role of the Document, thus licensing distribution -and modification of the Modified Version to whoever possesses a copy -of it. In addition, you must do these things in the Modified Version: - -@enumerate A -@item -Use in the Title Page (and on the covers, if any) a title distinct -from that of the Document, and from those of previous versions -(which should, if there were any, be listed in the History section -of the Document). You may use the same title as a previous version -if the original publisher of that version gives permission. - -@item -List on the Title Page, as authors, one or more persons or entities -responsible for authorship of the modifications in the Modified -Version, together with at least five of the principal authors of the -Document (all of its principal authors, if it has fewer than five), -unless they release you from this requirement. - -@item -State on the Title page the name of the publisher of the -Modified Version, as the publisher. - -@item -Preserve all the copyright notices of the Document. - -@item -Add an appropriate copyright notice for your modifications -adjacent to the other copyright notices. - -@item -Include, immediately after the copyright notices, a license notice -giving the public permission to use the Modified Version under the -terms of this License, in the form shown in the Addendum below. - -@item -Preserve in that license notice the full lists of Invariant Sections -and required Cover Texts given in the Document's license notice. - -@item -Include an unaltered copy of this License. - -@item -Preserve the section Entitled ``History'', Preserve its Title, and add -to it an item stating at least the title, year, new authors, and -publisher of the Modified Version as given on the Title Page. If -there is no section Entitled ``History'' in the Document, create one -stating the title, year, authors, and publisher of the Document as -given on its Title Page, then add an item describing the Modified -Version as stated in the previous sentence. - -@item -Preserve the network location, if any, given in the Document for -public access to a Transparent copy of the Document, and likewise -the network locations given in the Document for previous versions -it was based on. These may be placed in the ``History'' section. -You may omit a network location for a work that was published at -least four years before the Document itself, or if the original -publisher of the version it refers to gives permission. - -@item -For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve -the Title of the section, and preserve in the section all the -substance and tone of each of the contributor acknowledgements and/or -dedications given therein. - -@item -Preserve all the Invariant Sections of the Document, -unaltered in their text and in their titles. Section numbers -or the equivalent are not considered part of the section titles. - -@item -Delete any section Entitled ``Endorsements''. Such a section -may not be included in the Modified Version. - -@item -Do not retitle any existing section to be Entitled ``Endorsements'' or -to conflict in title with any Invariant Section. - -@item -Preserve any Warranty Disclaimers. -@end enumerate - -If the Modified Version includes new front-matter sections or -appendices that qualify as Secondary Sections and contain no material -copied from the Document, you may at your option designate some or all -of these sections as invariant. To do this, add their titles to the -list of Invariant Sections in the Modified Version's license notice. -These titles must be distinct from any other section titles. - -You may add a section Entitled ``Endorsements'', provided it contains -nothing but endorsements of your Modified Version by various -parties---for example, statements of peer review or that the text has -been approved by an organization as the authoritative definition of a -standard. - -You may add a passage of up to five words as a Front-Cover Text, and a -passage of up to 25 words as a Back-Cover Text, to the end of the list -of Cover Texts in the Modified Version. Only one passage of -Front-Cover Text and one of Back-Cover Text may be added by (or -through arrangements made by) any one entity. If the Document already -includes a cover text for the same cover, previously added by you or -by arrangement made by the same entity you are acting on behalf of, -you may not add another; but you may replace the old one, on explicit -permission from the previous publisher that added the old one. - -The author(s) and publisher(s) of the Document do not by this License -give permission to use their names for publicity for or to assert or -imply endorsement of any Modified Version. - -@item -COMBINING DOCUMENTS - -You may combine the Document with other documents released under this -License, under the terms defined in section 4 above for modified -versions, provided that you include in the combination all of the -Invariant Sections of all of the original documents, unmodified, and -list them all as Invariant Sections of your combined work in its -license notice, and that you preserve all their Warranty Disclaimers. - -The combined work need only contain one copy of this License, and -multiple identical Invariant Sections may be replaced with a single -copy. If there are multiple Invariant Sections with the same name but -different contents, make the title of each such section unique by -adding at the end of it, in parentheses, the name of the original -author or publisher of that section if known, or else a unique number. -Make the same adjustment to the section titles in the list of -Invariant Sections in the license notice of the combined work. - -In the combination, you must combine any sections Entitled ``History'' -in the various original documents, forming one section Entitled -``History''; likewise combine any sections Entitled ``Acknowledgements'', -and any sections Entitled ``Dedications''. You must delete all -sections Entitled ``Endorsements.'' - -@item -COLLECTIONS OF DOCUMENTS - -You may make a collection consisting of the Document and other documents -released under this License, and replace the individual copies of this -License in the various documents with a single copy that is included in -the collection, provided that you follow the rules of this License for -verbatim copying of each of the documents in all other respects. - -You may extract a single document from such a collection, and distribute -it individually under this License, provided you insert a copy of this -License into the extracted document, and follow this License in all -other respects regarding verbatim copying of that document. - -@item -AGGREGATION WITH INDEPENDENT WORKS - -A compilation of the Document or its derivatives with other separate -and independent documents or works, in or on a volume of a storage or -distribution medium, is called an ``aggregate'' if the copyright -resulting from the compilation is not used to limit the legal rights -of the compilation's users beyond what the individual works permit. -When the Document is included in an aggregate, this License does not -apply to the other works in the aggregate which are not themselves -derivative works of the Document. - -If the Cover Text requirement of section 3 is applicable to these -copies of the Document, then if the Document is less than one half of -the entire aggregate, the Document's Cover Texts may be placed on -covers that bracket the Document within the aggregate, or the -electronic equivalent of covers if the Document is in electronic form. -Otherwise they must appear on printed covers that bracket the whole -aggregate. - -@item -TRANSLATION - -Translation is considered a kind of modification, so you may -distribute translations of the Document under the terms of section 4. -Replacing Invariant Sections with translations requires special -permission from their copyright holders, but you may include -translations of some or all Invariant Sections in addition to the -original versions of these Invariant Sections. You may include a -translation of this License, and all the license notices in the -Document, and any Warranty Disclaimers, provided that you also include -the original English version of this License and the original versions -of those notices and disclaimers. In case of a disagreement between -the translation and the original version of this License or a notice -or disclaimer, the original version will prevail. - -If a section in the Document is Entitled ``Acknowledgements'', -``Dedications'', or ``History'', the requirement (section 4) to Preserve -its Title (section 1) will typically require changing the actual -title. - -@item -TERMINATION - -You may not copy, modify, sublicense, or distribute the Document except -as expressly provided for under this License. Any other attempt to -copy, modify, sublicense or distribute the Document is void, and will -automatically terminate your rights under this License. However, -parties who have received copies, or rights, from you under this -License will not have their licenses terminated so long as such -parties remain in full compliance. - -@item -FUTURE REVISIONS OF THIS LICENSE - -The Free Software Foundation may publish new, revised versions -of the GNU Free Documentation License from time to time. Such new -versions will be similar in spirit to the present version, but may -differ in detail to address new problems or concerns. See -@uref{http://www.gnu.org/copyleft/}. - -Each version of the License is given a distinguishing version number. -If the Document specifies that a particular numbered version of this -License ``or any later version'' applies to it, you have the option of -following the terms and conditions either of that specified version or -of any later version that has been published (not as a draft) by the -Free Software Foundation. If the Document does not specify a version -number of this License, you may choose any version ever published (not -as a draft) by the Free Software Foundation. -@end enumerate - -@page -@appendixsubsec ADDENDUM: How to use this License for your documents - -To use this License in a document you have written, include a copy of -the License in the document and put the following copyright and -license notices just after the title page: - -@smallexample -@group - Copyright (C) @var{year} @var{your name}. - Permission is granted to copy, distribute and/or modify this document - under the terms of the GNU Free Documentation License, Version 1.2 - or any later version published by the Free Software Foundation; - with no Invariant Sections, no Front-Cover Texts, and no Back-Cover - Texts. A copy of the license is included in the section entitled ``GNU - Free Documentation License''. -@end group -@end smallexample - -If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -replace the ``with...Texts.'' line with this: - -@smallexample -@group - with the Invariant Sections being @var{list their titles}, with - the Front-Cover Texts being @var{list}, and with the Back-Cover Texts - being @var{list}. -@end group -@end smallexample - -If you have Invariant Sections without Cover Texts, or some other -combination of the three, merge those two alternatives to suit the -situation. - -If your document contains nontrivial examples of program code, we -recommend releasing these examples in parallel under your choice of -free software license, such as the GNU General Public License, -to permit their use in free software. - -@c Local Variables: -@c ispell-local-pdict: "ispell-dict" -@c End: - diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/attic/texi/flf-graph.texi --- a/src/work/alpar/attic/texi/flf-graph.texi Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,242 +0,0 @@ -@node The Full Feature Graph Class -@section The Full Feature Graph Class -@cindex Full Feature Graph Class - -This section describes what an imaginary full feature graph class knows. -The set of features provided by a real graph implementation is typically -a subset of the features below. - -On the other hand, each graph algorithm requires the underlying graph -structure to provide a certain (typically small) set of features in order -to be able to run. - -@subsection Declaration - -@deftp {Class} {class Graph} -@code{Graph} is the imaginary @emph{full feature graph class}. -@code{G} denotes the instance of this class in the exaples below. -@c Each node and edge has a user defined data sturcure -@c @var{N} and @var{E} statically attached to it. -@end deftp - -@subsection Types - -@c @deftp {Type} Graph::NodeType -@c @deftpx {Type} Graph::EdgeType -@c The type of the data stored statically for each node and edge. -@c @end deftp - -@anchor{Graph-NodeIterator} -@deftp {Type} Graph::NodeIt -@c @deftpx {Type} Graph::NodeIterator -These types points a node uniquely. The difference between the -@code{NodeIt} and the @code{NodeIterator} is that @code{NodeIt} -requires the graph structure itself for most of the operations. -For examples using iterators you can go through all nodes as follows. -@quotation -@verbatim -Graph G; -int nodenum=0; -for(Graph::NodeIterator n(G);n.valid();++n) ++nodenum; -@end verbatim -@end quotation -Using @code{NodeIt} the last line looks like this. -@quotation -@verbatim -for(Graph::NodeIt n(G);n.valid();n=G.next(n)) ++nodenum; -@end verbatim -@end quotation -or -@quotation -@verbatim -MyGraph::NodeIt n; -for(G.getFirst(n);G.valid(n);G.goNext(n)) ++nodenum; -@end verbatim -@end quotation -@end deftp - -@deftp {Type} Graph::EdgeIt -@deftpx {Type} Graph::InEdgeIt -@deftpx {Type} Graph::OutEdgeIt -@deftpx {Type} Graph::EachEdgeIt -@c @deftpx {Type} Graph::BiEdgeIt -@c @deftpx {Type} Graph::SymEdgeIt -Each of these types points an edge uniquely. The difference between the -@code{EdgeIt} and the -@c @mref{Graph-NodeIterator,@code{EdgeIterator}} -@mref{Graph-NodeIterator , EdgeIterator} -series is that -@code{EdgeIt} requires the graph structure itself for most of the -operations. -@end deftp - -@anchor{Graph-EdgeIterator} -@c @deftp {Type} Graph::EdgeIterator -@c @deftpx {Type} Graph::InEdgeIterator -@c @deftpx {Type} Graph::OutEdgeIterator -@c @deftpx {Type} Graph::BiEdgeIterator -@c @deftpx {Type} Graph::SymEdgeIterator -@c @deftpx {Type} Graph::EachEdgeIterator -@c Each of these types points an edge uniquely. The difference between the -@c @code{EdgeIt} and the @code{EdgeIterator} series is that -@c @code{EdgeIt} requires the graph structure itself for most of the -@c operations. - -@c For the @code{EdgeIterator} types you can use operator @code{++} -@c (both the prefix and the posfix one) to obtain the next edge. -@c @end deftp - -@deftp {Type} Graph::NodeMap -@deftpx {Type} Graph::EdgeMap -There are the default property maps for the edges and the nodes. -@end deftp - -@deftp {Type} Graph::DynNodeMap -@deftpx {Type} Graph::DynEdgeMap -There are the default @emph{dynamic} property maps for the edges and the nodes. -@end deftp - -@subsection Member Functions - -@subsubsection Constructors - -@deftypefun { } Graph::Graph () -The default constructor. -@end deftypefun - -@c @deftypefun { } Graph::Graph (Graph@tie{}&) -@deftypefun { } Graph::Graph (Graph &) -The copy constructor. -@end deftypefun - -@subsubsection Graph Maintenence Operations - -@deftypefun NodeIt Graph::addNode () -Adds a new node to the graph and returns a @code{NodeIt} pointing to it. -@end deftypefun - -@deftypefun EdgeIt Graph::addEdge (@w{const @mref{Graph-NodeIterator,NodeIt} @var{from}}, @w{const @mref{Graph-NodeIterator,NodeIt} @var{to}}) -Adds a new edge with tail @var{from} and head @var{to} to the graph -and returns an @code{EdgeIt} pointing to it. -@end deftypefun - -@deftypefun void Graph::delete (@w{const @mref{Graph-NodeIterator,NodeIt} @var{n}}) -Deletes the node @var{n}. It also deletes the adjacent edges. -@end deftypefun - -@deftypefun void Graph::delete (@w{const @mref{Graph-EdgeIterator,EdgeIt} @var{e}}) -Deletes the edge @var{n}. -@end deftypefun - -@deftypefun void Graph::clear () -Deletes all edges and nodes from the graph. -@end deftypefun - -@deftypefun int Graph::nodeNum () -Returns the number of the nodes in the graph. -??? Is it necessary??? -@end deftypefun - -@subsubsection NodeIt Operations - -@deftypefun NodeIt Graph::getFirst (NodeIt &@var{n}) const -@deftypefunx NodeIt Graph::getNext (NodeIt @var{n}) const -@deftypefunx {NodeIt &} Graph::next (NodeIt &@var{n}) -The nodes in the graph forms a list. @code{getFirst(n)} sets @var{n} to -be the first node. @code{getNext(n)} gives back the subsequent -node. @code{next(n)} is equivalent to @code{n=getNext(n)}, though it -might be faster. ??? What should be the return value ??? -@end deftypefun - -@deftypefun bool Graph::valid (NodeIt &@var{e}) -@c @deftypefunx bool NodeIt::valid () -These functions check if and NodeIt is valid or not. -@c ??? Which one should be implemented ??? -@end deftypefun - -@subsubsection EdgeIt Operations - -@deftypefun EachEdgeIt Graph::getFirst (const EachEdgeIt & @var{e}) const -@deftypefunx EachEdgeIt Graph::getNext (EachEdgeIt @var{n}) const -@deftypefunx {EachEdgeIt &} Graph::next (EachEdgeIt &@var{n}) -With these functions you can go though all the edges of the graph. -@c ??? What should be the return value ??? -@end deftypefun - -@deftypefun InEdgeIt &Graph::getFirst (InEdgeIt & @var{e}, const NodeIt @var{n}) -@deftypefunx OutEdgeIt &Graph::getFirst (OutEdgeIt & @var{e}, const NodeIt @var{n}) -@c @deftypefunx SymEdgeIt &Graph::getFirst (SymEdgeIt & @var{e}, const NodeIt @var{n}) -The edges leaving from -or -arriving at -@c or adjacent with -a node forms a -list. These functions give back the first elements of these -lists. The exact behavior depends on the type of @var{e}. - -If @var{e} is an @code{InEdgeIt} or an @code{OutEdgeIt} then -@code{getFirst} sets @var{e} to be the first incoming or outgoing edge -of the node @var{n}, respectively. - -@c If @var{e} is a @code{SymEdgeIt} then -@c @code{getFirst} sets @var{e} to be the first incoming if there exists one -@c otherwise the first outgoing edge. - -If there are no such edges, @var{e} will be invalid. - -@end deftypefun - -@deftypefun InEdgeIt Graph::next (const InEdgeIt @var{e}) -@deftypefunx OutEdgeIt Graph::next (const OutEdgeIt @var{e}) -@deftypefunx SymEdgeIt Graph::next (const SymEdgeIt @var{e}) -These functions give back the edge that follows @var{e} -@end deftypefun - -@deftypefun {InEdgeIt &} Graph::goNext (InEdgeIt &@var{e}) -@deftypefunx {OutEdgeIt &} Graph::goNext (OutEdgeIt &@var{e}) -@deftypefunx {SymEdgeIt &} Graph::goNext (SymEdgeIt &@var{e}) -@code{G.goNext(e)} is equivalent to @code{e=G.next(e)}, though it -might be faster. -??? What should be the return value ??? -@end deftypefun - -@deftypefun bool Graph::valid (EdgeIt &@var{e}) -@deftypefunx bool EdgeIt::valid () -These functions check if and EdgeIt is valid or not. -??? Which one should be implemented ??? -@end deftypefun - -@deftypefun NodeIt Graph::tail (const EdgeIt @var{e}) -@deftypefunx NodeIt Graph::head (const EdgeIt @var{e}) -@deftypefunx NodeIt Graph::aNode (const InEdgeIt @var{e}) -@deftypefunx NodeIt Graph::aNode (const OutEdgeIt @var{e}) -@deftypefunx NodeIt Graph::aNode (const SymEdgeIt @var{e}) -@deftypefunx NodeIt Graph::bNode (const InEdgeIt @var{e}) -@deftypefunx NodeIt Graph::bNode (const OutEdgeIt @var{e}) -@deftypefunx NodeIt Graph::bNode (const SymEdgeIt @var{e}) -There queries give back the two endpoints of the edge @var{e}. For a -directed edge @var{e}, @code{tail(e)} and @code{head(e)} is its tail and -its head, respectively. For an undirected @var{e}, they are two -endpoints, but you should not rely on which end is which. - -@code{aNode(e)} is the node which @var{e} is bounded to, i.e. it is -equal to @code{tail(e)} if @var{e} is an @code{OutEdgeIt} and -@code{head(e)} if @var{e} is an @code{InEdgeIt}. If @var{e} is a -@code{SymEdgeIt} and it or its first preceding edge was created by -@code{getFirst(e,n)}, then @code{aNode(e)} is equal to @var{n}. - -@code{bNode(e)} is the other end of the edge. - -@deftypefun void Graph::setInvalid (EdgeIt &@var{e}) -@deftypefunx void Graph::setInvalid (EdgeIt &@var{e}) -These functions set the corresponding iterator to be invalid. -@end deftypefun - -@c ???It is implemented in an other way now. (Member function <-> Graph global)??? -@end deftypefun - - - -@c @deftypevar int from -@c the tail of the created edge. -@c @end deftypevar diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/attic/texi/texinfo.tex --- a/src/work/alpar/attic/texi/texinfo.tex Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6615 +0,0 @@ -% texinfo.tex -- TeX macros to handle Texinfo files. -% -% Load plain if necessary, i.e., if running under initex. -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi -% -\def\texinfoversion{2003-07-28.08} -% -% Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, -% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003 Free Software Foundation, Inc. -% -% This texinfo.tex file is free software; you can redistribute it and/or -% modify it under the terms of the GNU General Public License as -% published by the Free Software Foundation; either version 2, or (at -% your option) any later version. -% -% This texinfo.tex file is distributed in the hope that it will be -% useful, but WITHOUT ANY WARRANTY; without even the implied warranty -% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -% General Public License for more details. -% -% You should have received a copy of the GNU General Public License -% along with this texinfo.tex file; see the file COPYING. If not, write -% to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, -% Boston, MA 02111-1307, USA. -% -% In other words, you are welcome to use, share and improve this program. -% You are forbidden to forbid anyone else to use, share and improve -% what you give them. Help stamp out software-hoarding! -% -% Please try the latest version of texinfo.tex before submitting bug -% reports; you can get the latest version from: -% ftp://ftp.gnu.org/gnu/texinfo/texinfo.tex -% (and all GNU mirrors, see http://www.gnu.org/order/ftp.html) -% ftp://tug.org/tex/texinfo.tex -% (and all CTAN mirrors, see http://www.ctan.org), -% and /home/gd/gnu/doc/texinfo.tex on the GNU machines. -% -% The GNU Texinfo home page is http://www.gnu.org/software/texinfo. -% -% The texinfo.tex in any given Texinfo distribution could well be out -% of date, so if that's what you're using, please check. -% -% Send bug reports to bug-texinfo@gnu.org. Please include including a -% complete document in each bug report with which we can reproduce the -% problem. Patches are, of course, greatly appreciated. -% -% To process a Texinfo manual with TeX, it's most reliable to use the -% texi2dvi shell script that comes with the distribution. For a simple -% manual foo.texi, however, you can get away with this: -% tex foo.texi -% texindex foo.?? -% tex foo.texi -% tex foo.texi -% dvips foo.dvi -o # or whatever; this makes foo.ps. -% The extra TeX runs get the cross-reference information correct. -% Sometimes one run after texindex suffices, and sometimes you need more -% than two; texi2dvi does it as many times as necessary. -% -% It is possible to adapt texinfo.tex for other languages, to some -% extent. You can get the existing language-specific files from the -% full Texinfo distribution. - -\message{Loading texinfo [version \texinfoversion]:} - -% If in a .fmt file, print the version number -% and turn on active characters that we couldn't do earlier because -% they might have appeared in the input file name. -\everyjob{\message{[Texinfo version \texinfoversion]}% - \catcode`+=\active \catcode`\_=\active} - -\message{Basics,} -\chardef\other=12 - -% We never want plain's \outer definition of \+ in Texinfo. -% For @tex, we can use \tabalign. -\let\+ = \relax - -% Save some plain tex macros whose names we will redefine. -\let\ptexb=\b -\let\ptexbullet=\bullet -\let\ptexc=\c -\let\ptexcomma=\, -\let\ptexdot=\. -\let\ptexdots=\dots -\let\ptexend=\end -\let\ptexequiv=\equiv -\let\ptexexclam=\! -\let\ptexgtr=> -\let\ptexhat=^ -\let\ptexi=\i -\let\ptexindent=\indent -\let\ptexlbrace=\{ -\let\ptexless=< -\let\ptexplus=+ -\let\ptexrbrace=\} -\let\ptexslash=\/ -\let\ptexstar=\* -\let\ptext=\t - -% If this character appears in an error message or help string, it -% starts a new line in the output. -\newlinechar = `^^J - -% Set up fixed words for English if not already set. -\ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi -\ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi -\ifx\putwordfile\undefined \gdef\putwordfile{file}\fi -\ifx\putwordin\undefined \gdef\putwordin{in}\fi -\ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi -\ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi -\ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi -\ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi -\ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi -\ifx\putwordof\undefined \gdef\putwordof{of}\fi -\ifx\putwordon\undefined \gdef\putwordon{on}\fi -\ifx\putwordpage\undefined \gdef\putwordpage{page}\fi -\ifx\putwordsection\undefined \gdef\putwordsection{section}\fi -\ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi -\ifx\putwordsee\undefined \gdef\putwordsee{see}\fi -\ifx\putwordSee\undefined \gdef\putwordSee{See}\fi -\ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi -\ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi -% -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi -% -\ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi -\ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi -\ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi -\ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi -\ifx\putwordDeftypevar\undefined\gdef\putwordDeftypevar{Variable}\fi -\ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi -\ifx\putwordDeftypefun\undefined\gdef\putwordDeftypefun{Function}\fi - -% In some macros, we cannot use the `\? notation---the left quote is -% in some cases the escape char. -\chardef\colonChar = `\: -\chardef\commaChar = `\, -\chardef\dotChar = `\. -\chardef\equalChar = `\= -\chardef\exclamChar= `\! -\chardef\questChar = `\? -\chardef\semiChar = `\; -\chardef\spaceChar = `\ % -\chardef\underChar = `\_ - -% Ignore a token. -% -\def\gobble#1{} - -% True if #1 is the empty string, i.e., called like `\ifempty{}'. -% -\def\ifempty#1{\ifemptyx #1\emptymarkA\emptymarkB}% -\def\ifemptyx#1#2\emptymarkB{\ifx #1\emptymarkA}% - -% Hyphenation fixes. -\hyphenation{ap-pen-dix} -\hyphenation{eshell} -\hyphenation{mini-buf-fer mini-buf-fers} -\hyphenation{time-stamp} -\hyphenation{white-space} - -% Margin to add to right of even pages, to left of odd pages. -\newdimen\bindingoffset -\newdimen\normaloffset -\newdimen\pagewidth \newdimen\pageheight - -% Sometimes it is convenient to have everything in the transcript file -% and nothing on the terminal. We don't just call \tracingall here, -% since that produces some useless output on the terminal. We also make -% some effort to order the tracing commands to reduce output in the log -% file; cf. trace.sty in LaTeX. -% -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% -\def\loggingall{% - \tracingstats2 - \tracingpages1 - \tracinglostchars2 % 2 gives us more in etex - \tracingparagraphs1 - \tracingoutput1 - \tracingmacros2 - \tracingrestores1 - \showboxbreadth\maxdimen \showboxdepth\maxdimen - \ifx\eTeXversion\undefined\else % etex gives us more logging - \tracingscantokens1 - \tracingifs1 - \tracinggroups1 - \tracingnesting2 - \tracingassigns1 - \fi - \tracingcommands3 % 3 gives us more in etex - \errorcontextlines\maxdimen -}% - -% add check for \lastpenalty to plain's definitions. If the last thing -% we did was a \nobreak, we don't want to insert more space. -% -\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount - \removelastskip\penalty-50\smallskip\fi\fi} -\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount - \removelastskip\penalty-100\medskip\fi\fi} -\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount - \removelastskip\penalty-200\bigskip\fi\fi} - -% For @cropmarks command. -% Do @cropmarks to get crop marks. -% -\newif\ifcropmarks -\let\cropmarks = \cropmarkstrue -% -% Dimensions to add cropmarks at corners. -% Added by P. A. MacKay, 12 Nov. 1986 -% -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines -\newdimen\cornerlong \cornerlong=1pc -\newdimen\cornerthick \cornerthick=.3pt -\newdimen\topandbottommargin \topandbottommargin=.75in - -% Main output routine. -\chardef\PAGE = 255 -\output = {\onepageout{\pagecontents\PAGE}} - -\newbox\headlinebox -\newbox\footlinebox - -% \onepageout takes a vbox as an argument. Note that \pagecontents -% does insertions, but you have to call it yourself. -\def\onepageout#1{% - \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi - % - \ifodd\pageno \advance\hoffset by \bindingoffset - \else \advance\hoffset by -\bindingoffset\fi - % - % Do this outside of the \shipout so @code etc. will be expanded in - % the headline as they should be, not taken literally (outputting ''code). - \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% - \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% - % - {% - % Have to do this stuff outside the \shipout because we want it to - % take effect in \write's, yet the group defined by the \vbox ends - % before the \shipout runs. - % - \escapechar = `\\ % use backslash in output files. - \indexdummies % don't expand commands in the output. - \normalturnoffactive % \ in index entries must not stay \, e.g., if - % the page break happens to be in the middle of an example. - \shipout\vbox{% - % Do this early so pdf references go to the beginning of the page. - \ifpdfmakepagedest \pdfmkdest{\the\pageno} \fi - % - \ifcropmarks \vbox to \outervsize\bgroup - \hsize = \outerhsize - \vskip-\topandbottommargin - \vtop to0pt{% - \line{\ewtop\hfil\ewtop}% - \nointerlineskip - \line{% - \vbox{\moveleft\cornerthick\nstop}% - \hfill - \vbox{\moveright\cornerthick\nstop}% - }% - \vss}% - \vskip\topandbottommargin - \line\bgroup - \hfil % center the page within the outer (page) hsize. - \ifodd\pageno\hskip\bindingoffset\fi - \vbox\bgroup - \fi - % - \unvbox\headlinebox - \pagebody{#1}% - \ifdim\ht\footlinebox > 0pt - % Only leave this space if the footline is nonempty. - % (We lessened \vsize for it in \oddfootingxxx.) - % The \baselineskip=24pt in plain's \makefootline has no effect. - \vskip 2\baselineskip - \unvbox\footlinebox - \fi - % - \ifcropmarks - \egroup % end of \vbox\bgroup - \hfil\egroup % end of (centering) \line\bgroup - \vskip\topandbottommargin plus1fill minus1fill - \boxmaxdepth = \cornerthick - \vbox to0pt{\vss - \line{% - \vbox{\moveleft\cornerthick\nsbot}% - \hfill - \vbox{\moveright\cornerthick\nsbot}% - }% - \nointerlineskip - \line{\ewbot\hfil\ewbot}% - }% - \egroup % \vbox from first cropmarks clause - \fi - }% end of \shipout\vbox - }% end of group with \normalturnoffactive - \advancepageno - \ifnum\outputpenalty>-20000 \else\dosupereject\fi -} - -\newinsert\margin \dimen\margin=\maxdimen - -\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} -{\catcode`\@ =11 -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi -% marginal hacks, juha@viisa.uucp (Juha Takala) -\ifvoid\margin\else % marginal info is present - \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi -\dimen@=\dp#1 \unvbox#1 -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi -\ifr@ggedbottom \kern-\dimen@ \vfil \fi} -} - -% Here are the rules for the cropmarks. Note that they are -% offset so that the space between them is truly \outerhsize or \outervsize -% (P. A. MacKay, 12 November, 1986) -% -\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} -\def\nstop{\vbox - {\hrule height\cornerthick depth\cornerlong width\cornerthick}} -\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} -\def\nsbot{\vbox - {\hrule height\cornerlong depth\cornerthick width\cornerthick}} - -% Parse an argument, then pass it to #1. The argument is the rest of -% the input line (except we remove a trailing comment). #1 should be a -% macro which expects an ordinary undelimited TeX argument. -% -\def\parsearg#1{% - \let\next = #1% - \begingroup - \obeylines - \futurelet\temp\parseargx -} - -% If the next token is an obeyed space (from an @example environment or -% the like), remove it and recurse. Otherwise, we're done. -\def\parseargx{% - % \obeyedspace is defined far below, after the definition of \sepspaces. - \ifx\obeyedspace\temp - \expandafter\parseargdiscardspace - \else - \expandafter\parseargline - \fi -} - -% Remove a single space (as the delimiter token to the macro call). -{\obeyspaces % - \gdef\parseargdiscardspace {\futurelet\temp\parseargx}} - -{\obeylines % - \gdef\parseargline#1^^M{% - \endgroup % End of the group started in \parsearg. - % - % First remove any @c comment, then any @comment. - % Result of each macro is put in \toks0. - \argremovec #1\c\relax % - \expandafter\argremovecomment \the\toks0 \comment\relax % - % - % Call the caller's macro, saved as \next in \parsearg. - \expandafter\next\expandafter{\the\toks0}% - }% -} - -% Since all \c{,omment} does is throw away the argument, we can let TeX -% do that for us. The \relax here is matched by the \relax in the call -% in \parseargline; it could be more or less anything, its purpose is -% just to delimit the argument to the \c. -\def\argremovec#1\c#2\relax{\toks0 = {#1}} -\def\argremovecomment#1\comment#2\relax{\toks0 = {#1}} - -% \argremovec{,omment} might leave us with trailing spaces, though; e.g., -% @end itemize @c foo -% will have two active spaces as part of the argument with the -% `itemize'. Here we remove all active spaces from #1, and assign the -% result to \toks0. -% -% This loses if there are any *other* active characters besides spaces -% in the argument -- _ ^ +, for example -- since they get expanded. -% Fortunately, Texinfo does not define any such commands. (If it ever -% does, the catcode of the characters in questionwill have to be changed -% here.) But this means we cannot call \removeactivespaces as part of -% \argremovec{,omment}, since @c uses \parsearg, and thus the argument -% that \parsearg gets might well have any character at all in it. -% -\def\removeactivespaces#1{% - \begingroup - \ignoreactivespaces - \edef\temp{#1}% - \global\toks0 = \expandafter{\temp}% - \endgroup -} - -% Change the active space to expand to nothing. -% -\begingroup - \obeyspaces - \gdef\ignoreactivespaces{\obeyspaces\let =\empty} -\endgroup - - -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} - -%% These are used to keep @begin/@end levels from running away -%% Call \inENV within environments (after a \begingroup) -\newif\ifENV \ENVfalse \def\inENV{\ifENV\relax\else\ENVtrue\fi} -\def\ENVcheck{% -\ifENV\errmessage{Still within an environment; press RETURN to continue} -\endgroup\fi} % This is not perfect, but it should reduce lossage - -% @begin foo is the same as @foo, for now. -\newhelp\EMsimple{Press RETURN to continue.} - -\outer\def\begin{\parsearg\beginxxx} - -\def\beginxxx #1{% -\expandafter\ifx\csname #1\endcsname\relax -{\errhelp=\EMsimple \errmessage{Undefined command @begin #1}}\else -\csname #1\endcsname\fi} - -% @end foo executes the definition of \Efoo. -% -\def\end{\parsearg\endxxx} -\def\endxxx #1{% - \removeactivespaces{#1}% - \edef\endthing{\the\toks0}% - % - \expandafter\ifx\csname E\endthing\endcsname\relax - \expandafter\ifx\csname \endthing\endcsname\relax - % There's no \foo, i.e., no ``environment'' foo. - \errhelp = \EMsimple - \errmessage{Undefined command `@end \endthing'}% - \else - \unmatchedenderror\endthing - \fi - \else - % Everything's ok; the right environment has been started. - \csname E\endthing\endcsname - \fi -} - -% There is an environment #1, but it hasn't been started. Give an error. -% -\def\unmatchedenderror#1{% - \errhelp = \EMsimple - \errmessage{This `@end #1' doesn't have a matching `@#1'}% -} - -% Define the control sequence \E#1 to give an unmatched @end error. -% -\def\defineunmatchedend#1{% - \expandafter\def\csname E#1\endcsname{\unmatchedenderror{#1}}% -} - - -%% Simple single-character @ commands - -% @@ prints an @ -% Kludge this until the fonts are right (grr). -\def\@{{\tt\char64}} - -% This is turned off because it was never documented -% and you can use @w{...} around a quote to suppress ligatures. -%% Define @` and @' to be the same as ` and ' -%% but suppressing ligatures. -%\def\`{{`}} -%\def\'{{'}} - -% Used to generate quoted braces. -\def\mylbrace {{\tt\char123}} -\def\myrbrace {{\tt\char125}} -\let\{=\mylbrace -\let\}=\myrbrace -\begingroup - % Definitions to produce \{ and \} commands for indices, - % and @{ and @} for the aux file. - \catcode`\{ = \other \catcode`\} = \other - \catcode`\[ = 1 \catcode`\] = 2 - \catcode`\! = 0 \catcode`\\ = \other - !gdef!lbracecmd[\{]% - !gdef!rbracecmd[\}]% - !gdef!lbraceatcmd[@{]% - !gdef!rbraceatcmd[@}]% -!endgroup - -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent -% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. -\let\, = \c -\let\dotaccent = \. -\def\ringaccent#1{{\accent23 #1}} -\let\tieaccent = \t -\let\ubaraccent = \b -\let\udotaccent = \d - -% Other special characters: @questiondown @exclamdown -% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. -\def\questiondown{?`} -\def\exclamdown{!`} - -% Dotless i and dotless j, used for accents. -\def\imacro{i} -\def\jmacro{j} -\def\dotless#1{% - \def\temp{#1}% - \ifx\temp\imacro \ptexi - \else\ifx\temp\jmacro \j - \else \errmessage{@dotless can be used only with i or j}% - \fi\fi -} - -% Be sure we're in horizontal mode when doing a tie, since we make space -% equivalent to this in @example-like environments. Otherwise, a space -% at the beginning of a line will start with \penalty -- and -% since \penalty is valid in vertical mode, we'd end up putting the -% penalty on the vertical list instead of in the new paragraph. -{\catcode`@ = 11 - % Avoid using \@M directly, because that causes trouble - % if the definition is written into an index file. - \global\let\tiepenalty = \@M - \gdef\tie{\leavevmode\penalty\tiepenalty\ } -} - -% @: forces normal size whitespace following. -\def\:{\spacefactor=1000 } - -% @* forces a line break. -\def\*{\hfil\break\hbox{}\ignorespaces} - -% @/ allows a line break. -\let\/=\allowbreak - -% @. is an end-of-sentence period. -\def\.{.\spacefactor=3000 } - -% @! is an end-of-sentence bang. -\def\!{!\spacefactor=3000 } - -% @? is an end-of-sentence query. -\def\?{?\spacefactor=3000 } - -% @w prevents a word break. Without the \leavevmode, @w at the -% beginning of a paragraph, when TeX is still in vertical mode, would -% produce a whole line of output instead of starting the paragraph. -\def\w#1{\leavevmode\hbox{#1}} - -% @group ... @end group forces ... to be all on one page, by enclosing -% it in a TeX vbox. We use \vtop instead of \vbox to construct the box -% to keep its height that of a normal line. According to the rules for -% \topskip (p.114 of the TeXbook), the glue inserted is -% max (\topskip - \ht (first item), 0). If that height is large, -% therefore, no glue is inserted, and the space between the headline and -% the text is small, which looks bad. -% -% Another complication is that the group might be very large. This can -% cause the glue on the previous page to be unduly stretched, because it -% does not have much material. In this case, it's better to add an -% explicit \vfill so that the extra space is at the bottom. The -% threshold for doing this is if the group is more than \vfilllimit -% percent of a page (\vfilllimit can be changed inside of @tex). -% -\newbox\groupbox -\def\vfilllimit{0.7} -% -\def\group{\begingroup - \ifnum\catcode13=\active \else - \errhelp = \groupinvalidhelp - \errmessage{@group invalid in context where filling is enabled}% - \fi - % - % The \vtop we start below produces a box with normal height and large - % depth; thus, TeX puts \baselineskip glue before it, and (when the - % next line of text is done) \lineskip glue after it. (See p.82 of - % the TeXbook.) Thus, space below is not quite equal to space - % above. But it's pretty close. - \def\Egroup{% - \egroup % End the \vtop. - % \dimen0 is the vertical size of the group's box. - \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox - % \dimen2 is how much space is left on the page (more or less). - \dimen2 = \pageheight \advance\dimen2 by -\pagetotal - % if the group doesn't fit on the current page, and it's a big big - % group, force a page break. - \ifdim \dimen0 > \dimen2 - \ifdim \pagetotal < \vfilllimit\pageheight - \page - \fi - \fi - \copy\groupbox - \endgroup % End the \group. - }% - % - \setbox\groupbox = \vtop\bgroup - % We have to put a strut on the last line in case the @group is in - % the midst of an example, rather than completely enclosing it. - % Otherwise, the interline space between the last line of the group - % and the first line afterwards is too small. But we can't put the - % strut in \Egroup, since there it would be on a line by itself. - % Hence this just inserts a strut at the beginning of each line. - \everypar = {\strut}% - % - % Since we have a strut on every line, we don't need any of TeX's - % normal interline spacing. - \offinterlineskip - % - % OK, but now we have to do something about blank - % lines in the input in @example-like environments, which normally - % just turn into \lisppar, which will insert no space now that we've - % turned off the interline space. Simplest is to make them be an - % empty paragraph. - \ifx\par\lisppar - \edef\par{\leavevmode \par}% - % - % Reset ^^M's definition to new definition of \par. - \obeylines - \fi - % - % Do @comment since we are called inside an environment such as - % @example, where each end-of-line in the input causes an - % end-of-line in the output. We don't want the end-of-line after - % the `@group' to put extra space in the output. Since @group - % should appear on a line by itself (according to the Texinfo - % manual), we don't worry about eating any user text. - \comment -} -% -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help -% message, so this ends up printing `@group can only ...'. -% -\newhelp\groupinvalidhelp{% -group can only be used in environments such as @example,^^J% -where each line of input produces a line of output.} - -% @need space-in-mils -% forces a page break if there is not space-in-mils remaining. - -\newdimen\mil \mil=0.001in - -\def\need{\parsearg\needx} - -% Old definition--didn't work. -%\def\needx #1{\par % -%% This method tries to make TeX break the page naturally -%% if the depth of the box does not fit. -%{\baselineskip=0pt% -%\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak -%\prevdepth=-1000pt -%}} - -\def\needx#1{% - % Ensure vertical mode, so we don't make a big box in the middle of a - % paragraph. - \par - % - % If the @need value is less than one line space, it's useless. - \dimen0 = #1\mil - \dimen2 = \ht\strutbox - \advance\dimen2 by \dp\strutbox - \ifdim\dimen0 > \dimen2 - % - % Do a \strut just to make the height of this box be normal, so the - % normal leading is inserted relative to the preceding line. - % And a page break here is fine. - \vtop to #1\mil{\strut\vfil}% - % - % TeX does not even consider page breaks if a penalty added to the - % main vertical list is 10000 or more. But in order to see if the - % empty box we just added fits on the page, we must make it consider - % page breaks. On the other hand, we don't want to actually break the - % page after the empty box. So we use a penalty of 9999. - % - % There is an extremely small chance that TeX will actually break the - % page at this \penalty, if there are no other feasible breakpoints in - % sight. (If the user is using lots of big @group commands, which - % almost-but-not-quite fill up a page, TeX will have a hard time doing - % good page breaking, for example.) However, I could not construct an - % example where a page broke at this \penalty; if it happens in a real - % document, then we can reconsider our strategy. - \penalty9999 - % - % Back up by the size of the box, whether we did a page break or not. - \kern -#1\mil - % - % Do not allow a page break right after this kern. - \nobreak - \fi -} - -% @br forces paragraph break - -\let\br = \par - -% @dots{} output an ellipsis using the current font. -% We do .5em per period so that it has the same spacing in a typewriter -% font as three actual period characters. -% -\def\dots{% - \leavevmode - \hbox to 1.5em{% - \hskip 0pt plus 0.25fil minus 0.25fil - .\hss.\hss.% - \hskip 0pt plus 0.5fil minus 0.5fil - }% -} - -% @enddots{} is an end-of-sentence ellipsis. -% -\def\enddots{% - \leavevmode - \hbox to 2em{% - \hskip 0pt plus 0.25fil minus 0.25fil - .\hss.\hss.\hss.% - \hskip 0pt plus 0.5fil minus 0.5fil - }% - \spacefactor=3000 -} - -% @page forces the start of a new page. -% -\def\page{\par\vfill\supereject} - -% @exdent text.... -% outputs text on separate line in roman font, starting at standard page margin - -% This records the amount of indent in the innermost environment. -% That's how much \exdent should take out. -\newskip\exdentamount - -% This defn is used inside fill environments such as @defun. -\def\exdent{\parsearg\exdentyyy} -\def\exdentyyy #1{{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}} - -% This defn is used inside nofill environments such as @example. -\def\nofillexdent{\parsearg\nofillexdentyyy} -\def\nofillexdentyyy #1{{\advance \leftskip by -\exdentamount -\leftline{\hskip\leftskip{\rm#1}}}} - -% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current -% paragraph. For more general purposes, use the \margin insertion -% class. WHICH is `l' or `r'. -% -\newskip\inmarginspacing \inmarginspacing=1cm -\def\strutdepth{\dp\strutbox} -% -\def\doinmargin#1#2{\strut\vadjust{% - \nobreak - \kern-\strutdepth - \vtop to \strutdepth{% - \baselineskip=\strutdepth - \vss - % if you have multiple lines of stuff to put here, you'll need to - % make the vbox yourself of the appropriate size. - \ifx#1l% - \llap{\ignorespaces #2\hskip\inmarginspacing}% - \else - \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% - \fi - \null - }% -}} -\def\inleftmargin{\doinmargin l} -\def\inrightmargin{\doinmargin r} -% -% @inmargin{TEXT [, RIGHT-TEXT]} -% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; -% else use TEXT for both). -% -\def\inmargin#1{\parseinmargin #1,,\finish} -\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \def\lefttext{#1}% have both texts - \def\righttext{#2}% - \else - \def\lefttext{#1}% have only one text - \def\righttext{#1}% - \fi - % - \ifodd\pageno - \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin - \else - \def\temp{\inleftmargin\lefttext}% - \fi - \temp -} - -% @include file insert text of that file as input. -% Allow normal characters that we make active in the argument (a file name). -\def\include{\begingroup - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \parsearg\includezzz} -% Restore active chars for included file. -\def\includezzz#1{\endgroup\begingroup - % Read the included file in a group so nested @include's work. - \def\thisfile{#1}% - \let\value=\expandablevalue - \input\thisfile -\endgroup} - -\def\thisfile{} - -% @center line -% outputs that line, centered. -% -\def\center{\parsearg\docenter} -\def\docenter#1{{% - \ifhmode \hfil\break \fi - \advance\hsize by -\leftskip - \advance\hsize by -\rightskip - \line{\hfil \ignorespaces#1\unskip \hfil}% - \ifhmode \break \fi -}} - -% @sp n outputs n lines of vertical space - -\def\sp{\parsearg\spxxx} -\def\spxxx #1{\vskip #1\baselineskip} - -% @comment ...line which is ignored... -% @c is the same as @comment -% @ignore ... @end ignore is another way to write a comment - -\def\comment{\begingroup \catcode`\^^M=\other% -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% -\commentxxx} -{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} - -\let\c=\comment - -% @paragraphindent NCHARS -% We'll use ems for NCHARS, close enough. -% NCHARS can also be the word `asis' or `none'. -% We cannot feasibly implement @paragraphindent asis, though. -% -\def\asisword{asis} % no translation, these are keywords -\def\noneword{none} -% -\def\paragraphindent{\parsearg\doparagraphindent} -\def\doparagraphindent#1{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \defaultparindent = 0pt - \else - \defaultparindent = #1em - \fi - \fi - \parindent = \defaultparindent -} - -% @exampleindent NCHARS -% We'll use ems for NCHARS like @paragraphindent. -% It seems @exampleindent asis isn't necessary, but -% I preserve it to make it similar to @paragraphindent. -\def\exampleindent{\parsearg\doexampleindent} -\def\doexampleindent#1{% - \def\temp{#1}% - \ifx\temp\asisword - \else - \ifx\temp\noneword - \lispnarrowing = 0pt - \else - \lispnarrowing = #1em - \fi - \fi -} - -% @firstparagraphindent WORD -% If WORD is `none', then suppress indentation of the first paragraph -% after a section heading. If WORD is `insert', then do indent at such -% paragraphs. -% -% The paragraph indentation is suppressed or not by calling -% \suppressfirstparagraphindent, which the sectioning commands do. -% We switch the definition of this back and forth according to WORD. -% By default, we suppress indentation. -% -\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} -\newdimen\currentparindent -% -\def\insertword{insert} -% -\def\firstparagraphindent{\parsearg\dofirstparagraphindent} -\def\dofirstparagraphindent#1{% - \def\temp{#1}% - \ifx\temp\noneword - \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent - \else\ifx\temp\insertword - \let\suppressfirstparagraphindent = \relax - \else - \errhelp = \EMsimple - \errmessage{Unknown @firstparagraphindent option `\temp'}% - \fi\fi -} - -% Here is how we actually suppress indentation. Redefine \everypar to -% \kern backwards by \parindent, and then reset itself to empty. -% -% We also make \indent itself not actually do anything until the next -% paragraph. -% -\gdef\dosuppressfirstparagraphindent{% - \gdef\indent{% - \global\let\indent=\ptexindent - \global\everypar = {}% - }% - \global\everypar = {% - \kern-\parindent - \global\let\indent=\ptexindent - \global\everypar = {}% - }% -}% - - -% @asis just yields its argument. Used with @table, for example. -% -\def\asis#1{#1} - -% @math outputs its argument in math mode. -% We don't use $'s directly in the definition of \math because we need -% to set catcodes according to plain TeX first, to allow for subscripts, -% superscripts, special math chars, etc. -% -\let\implicitmath = $%$ font-lock fix -% -% One complication: _ usually means subscripts, but it could also mean -% an actual _ character, as in @math{@var{some_variable} + 1}. So make -% _ within @math be active (mathcode "8000), and distinguish by seeing -% if the current family is \slfam, which is what @var uses. -% -{\catcode\underChar = \active -\gdef\mathunderscore{% - \catcode\underChar=\active - \def_{\ifnum\fam=\slfam \_\else\sb\fi}% -}} -% -% Another complication: we want \\ (and @\) to output a \ character. -% FYI, plain.tex uses \\ as a temporary control sequence (why?), but -% this is not advertised and we don't care. Texinfo does not -% otherwise define @\. -% -% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. -\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} -% -\def\math{% - \tex - \mathcode`\_="8000 \mathunderscore - \let\\ = \mathbackslash - \mathactive - \implicitmath\finishmath} -\def\finishmath#1{#1\implicitmath\Etex} - -% Some active characters (such as <) are spaced differently in math. -% We have to reset their definitions in case the @math was an -% argument to a command which set the catcodes (such as @item or @section). -% -{ - \catcode`^ = \active - \catcode`< = \active - \catcode`> = \active - \catcode`+ = \active - \gdef\mathactive{% - \let^ = \ptexhat - \let< = \ptexless - \let> = \ptexgtr - \let+ = \ptexplus - } -} - -% @bullet and @minus need the same treatment as @math, just above. -\def\bullet{\implicitmath\ptexbullet\implicitmath} -\def\minus{\implicitmath-\implicitmath} - -% @refill is a no-op. -\let\refill=\relax - -% If working on a large document in chapters, it is convenient to -% be able to disable indexing, cross-referencing, and contents, for test runs. -% This is done with @novalidate (before @setfilename). -% -\newif\iflinks \linkstrue % by default we want the aux files. -\let\novalidate = \linksfalse - -% @setfilename is done at the beginning of every texinfo file. -% So open here the files we need to have open while reading the input. -% This makes it possible to make a .fmt file for texinfo. -\def\setfilename{% - \iflinks - \readauxfile - \fi % \openindices needs to do some work in any case. - \openindices - \fixbackslash % Turn off hack to swallow `\input texinfo'. - \global\let\setfilename=\comment % Ignore extra @setfilename cmds. - % - % If texinfo.cnf is present on the system, read it. - % Useful for site-wide @afourpaper, etc. - % Just to be on the safe side, close the input stream before the \input. - \openin 1 texinfo.cnf - \ifeof1 \let\temp=\relax \else \def\temp{\input texinfo.cnf }\fi - \closein1 - \temp - % - \comment % Ignore the actual filename. -} - -% Called from \setfilename. -% -\def\openindices{% - \newindex{cp}% - \newcodeindex{fn}% - \newcodeindex{vr}% - \newcodeindex{tp}% - \newcodeindex{ky}% - \newcodeindex{pg}% -} - -% @bye. -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} - - -\message{pdf,} -% adobe `portable' document format -\newcount\tempnum -\newcount\lnkcount -\newtoks\filename -\newcount\filenamelength -\newcount\pgn -\newtoks\toksA -\newtoks\toksB -\newtoks\toksC -\newtoks\toksD -\newbox\boxA -\newcount\countA -\newif\ifpdf -\newif\ifpdfmakepagedest - -\ifx\pdfoutput\undefined - \pdffalse - \let\pdfmkdest = \gobble - \let\pdfurl = \gobble - \let\endlink = \relax - \let\linkcolor = \relax - \let\pdfmakeoutlines = \relax -\else - \pdftrue - \pdfoutput = 1 - \input pdfcolor - \def\dopdfimage#1#2#3{% - \def\imagewidth{#2}% - \def\imageheight{#3}% - % without \immediate, pdftex seg faults when the same image is - % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) - \ifnum\pdftexversion < 14 - \immediate\pdfimage - \else - \immediate\pdfximage - \fi - \ifx\empty\imagewidth\else width \imagewidth \fi - \ifx\empty\imageheight\else height \imageheight \fi - \ifnum\pdftexversion<13 - #1.pdf% - \else - {#1.pdf}% - \fi - \ifnum\pdftexversion < 14 \else - \pdfrefximage \pdflastximage - \fi} - \def\pdfmkdest#1{{\normalturnoffactive \pdfdest name{#1} xyz}} - \def\pdfmkpgn#1{#1} - \let\linkcolor = \Blue % was Cyan, but that seems light? - \def\endlink{\Black\pdfendlink} - % Adding outlines to PDF; macros for calculating structure of outlines - % come from Petr Olsak - \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% - \else \csname#1\endcsname \fi} - \def\advancenumber#1{\tempnum=\expnumber{#1}\relax - \advance\tempnum by1 - \expandafter\xdef\csname#1\endcsname{\the\tempnum}} - \def\pdfmakeoutlines{{% - \openin 1 \jobname.toc - \ifeof 1\else\begingroup - \closein 1 - % Thanh's hack / proper braces in bookmarks - \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace - \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace - % - \def\chapentry ##1##2##3{} - \def\secentry ##1##2##3##4{\advancenumber{chap##2}} - \def\subsecentry ##1##2##3##4##5{\advancenumber{sec##2.##3}} - \def\subsubsecentry ##1##2##3##4##5##6{\advancenumber{subsec##2.##3.##4}} - \let\appendixentry = \chapentry - \let\unnumbchapentry = \chapentry - \let\unnumbsecentry = \secentry - \let\unnumbsubsecentry = \subsecentry - \let\unnumbsubsubsecentry = \subsubsecentry - \input \jobname.toc - \def\chapentry ##1##2##3{% - \pdfoutline goto name{\pdfmkpgn{##3}}count-\expnumber{chap##2}{##1}} - \def\secentry ##1##2##3##4{% - \pdfoutline goto name{\pdfmkpgn{##4}}count-\expnumber{sec##2.##3}{##1}} - \def\subsecentry ##1##2##3##4##5{% - \pdfoutline goto name{\pdfmkpgn{##5}}count-\expnumber{subsec##2.##3.##4}{##1}} - \def\subsubsecentry ##1##2##3##4##5##6{% - \pdfoutline goto name{\pdfmkpgn{##6}}{##1}} - \let\appendixentry = \chapentry - \let\unnumbchapentry = \chapentry - \let\unnumbsecentry = \secentry - \let\unnumbsubsecentry = \subsecentry - \let\unnumbsubsubsecentry = \subsubsecentry - % - % Make special characters normal for writing to the pdf file. - % - \indexnofonts - \let\tt=\relax - \turnoffactive - \input \jobname.toc - \endgroup\fi - }} - \def\makelinks #1,{% - \def\params{#1}\def\E{END}% - \ifx\params\E - \let\nextmakelinks=\relax - \else - \let\nextmakelinks=\makelinks - \ifnum\lnkcount>0,\fi - \picknum{#1}% - \startlink attr{/Border [0 0 0]} - goto name{\pdfmkpgn{\the\pgn}}% - \linkcolor #1% - \advance\lnkcount by 1% - \endlink - \fi - \nextmakelinks - } - \def\picknum#1{\expandafter\pn#1} - \def\pn#1{% - \def\p{#1}% - \ifx\p\lbrace - \let\nextpn=\ppn - \else - \let\nextpn=\ppnn - \def\first{#1} - \fi - \nextpn - } - \def\ppn#1{\pgn=#1\gobble} - \def\ppnn{\pgn=\first} - \def\pdfmklnk#1{\lnkcount=0\makelinks #1,END,} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\skipspaces#1{\def\PP{#1}\def\D{|}% - \ifx\PP\D\let\nextsp\relax - \else\let\nextsp\skipspaces - \ifx\p\space\else\addtokens{\filename}{\PP}% - \advance\filenamelength by 1 - \fi - \fi - \nextsp} - \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} - \ifnum\pdftexversion < 14 - \let \startlink \pdfannotlink - \else - \let \startlink \pdfstartlink - \fi - \def\pdfurl#1{% - \begingroup - \normalturnoffactive\def\@{@}% - \let\value=\expandablevalue - \leavevmode\Red - \startlink attr{/Border [0 0 0]}% - user{/Subtype /Link /A << /S /URI /URI (#1) >>}% - % #1 - \endgroup} - \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} - \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} - \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} - \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} - \def\maketoks{% - \expandafter\poptoks\the\toksA|ENDTOKS| - \ifx\first0\adn0 - \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 - \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 - \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 - \else - \ifnum0=\countA\else\makelink\fi - \ifx\first.\let\next=\done\else - \let\next=\maketoks - \addtokens{\toksB}{\the\toksD} - \ifx\first,\addtokens{\toksB}{\space}\fi - \fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \next} - \def\makelink{\addtokens{\toksB}% - {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} - \def\pdflink#1{% - \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} - \linkcolor #1\endlink} - \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} -\fi % \ifx\pdfoutput - - -\message{fonts,} -% Font-change commands. - -% Texinfo sort of supports the sans serif font style, which plain TeX does not. -% So we set up a \sf analogous to plain's \rm, etc. -\newfam\sffam -\def\sf{\fam=\sffam \tensf} -\let\li = \sf % Sometimes we call it \li, not \sf. - -% We don't need math for this one. -\def\ttsl{\tenttsl} - -% Default leading. -\newdimen\textleading \textleading = 13.2pt - -% Set the baselineskip to #1, and the lineskip and strut size -% correspondingly. There is no deep meaning behind these magic numbers -% used as factors; they just match (closely enough) what Knuth defined. -% -\def\lineskipfactor{.08333} -\def\strutheightpercent{.70833} -\def\strutdepthpercent {.29167} -% -\def\setleading#1{% - \normalbaselineskip = #1\relax - \normallineskip = \lineskipfactor\normalbaselineskip - \normalbaselines - \setbox\strutbox =\hbox{% - \vrule width0pt height\strutheightpercent\baselineskip - depth \strutdepthpercent \baselineskip - }% -} - -% Set the font macro #1 to the font named #2, adding on the -% specified font prefix (normally `cm'). -% #3 is the font's design size, #4 is a scale factor -\def\setfont#1#2#3#4{\font#1=\fontprefix#2#3 scaled #4} - -% Use cm as the default font prefix. -% To specify the font prefix, you must define \fontprefix -% before you read in texinfo.tex. -\ifx\fontprefix\undefined -\def\fontprefix{cm} -\fi -% Support font families that don't use the same naming scheme as CM. -\def\rmshape{r} -\def\rmbshape{bx} %where the normal face is bold -\def\bfshape{b} -\def\bxshape{bx} -\def\ttshape{tt} -\def\ttbshape{tt} -\def\ttslshape{sltt} -\def\itshape{ti} -\def\itbshape{bxti} -\def\slshape{sl} -\def\slbshape{bxsl} -\def\sfshape{ss} -\def\sfbshape{ss} -\def\scshape{csc} -\def\scbshape{csc} - -\newcount\mainmagstep -\ifx\bigger\relax - % not really supported. - \mainmagstep=\magstep1 - \setfont\textrm\rmshape{12}{1000} - \setfont\texttt\ttshape{12}{1000} -\else - \mainmagstep=\magstephalf - \setfont\textrm\rmshape{10}{\mainmagstep} - \setfont\texttt\ttshape{10}{\mainmagstep} -\fi -% Instead of cmb10, you may want to use cmbx10. -% cmbx10 is a prettier font on its own, but cmb10 -% looks better when embedded in a line with cmr10 -% (in Bob's opinion). -\setfont\textbf\bfshape{10}{\mainmagstep} -\setfont\textit\itshape{10}{\mainmagstep} -\setfont\textsl\slshape{10}{\mainmagstep} -\setfont\textsf\sfshape{10}{\mainmagstep} -\setfont\textsc\scshape{10}{\mainmagstep} -\setfont\textttsl\ttslshape{10}{\mainmagstep} -\font\texti=cmmi10 scaled \mainmagstep -\font\textsy=cmsy10 scaled \mainmagstep - -% A few fonts for @defun, etc. -\setfont\defbf\bxshape{10}{\magstep1} %was 1314 -\setfont\deftt\ttshape{10}{\magstep1} -\def\df{\let\tentt=\deftt \let\tenbf = \defbf \bf} - -% Fonts for indices, footnotes, small examples (9pt). -\setfont\smallrm\rmshape{9}{1000} -\setfont\smalltt\ttshape{9}{1000} -\setfont\smallbf\bfshape{10}{900} -\setfont\smallit\itshape{9}{1000} -\setfont\smallsl\slshape{9}{1000} -\setfont\smallsf\sfshape{9}{1000} -\setfont\smallsc\scshape{10}{900} -\setfont\smallttsl\ttslshape{10}{900} -\font\smalli=cmmi9 -\font\smallsy=cmsy9 - -% Fonts for small examples (8pt). -\setfont\smallerrm\rmshape{8}{1000} -\setfont\smallertt\ttshape{8}{1000} -\setfont\smallerbf\bfshape{10}{800} -\setfont\smallerit\itshape{8}{1000} -\setfont\smallersl\slshape{8}{1000} -\setfont\smallersf\sfshape{8}{1000} -\setfont\smallersc\scshape{10}{800} -\setfont\smallerttsl\ttslshape{10}{800} -\font\smalleri=cmmi8 -\font\smallersy=cmsy8 - -% Fonts for title page: -\setfont\titlerm\rmbshape{12}{\magstep3} -\setfont\titleit\itbshape{10}{\magstep4} -\setfont\titlesl\slbshape{10}{\magstep4} -\setfont\titlett\ttbshape{12}{\magstep3} -\setfont\titlettsl\ttslshape{10}{\magstep4} -\setfont\titlesf\sfbshape{17}{\magstep1} -\let\titlebf=\titlerm -\setfont\titlesc\scbshape{10}{\magstep4} -\font\titlei=cmmi12 scaled \magstep3 -\font\titlesy=cmsy10 scaled \magstep4 -\def\authorrm{\secrm} -\def\authortt{\sectt} - -% Chapter (and unnumbered) fonts (17.28pt). -\setfont\chaprm\rmbshape{12}{\magstep2} -\setfont\chapit\itbshape{10}{\magstep3} -\setfont\chapsl\slbshape{10}{\magstep3} -\setfont\chaptt\ttbshape{12}{\magstep2} -\setfont\chapttsl\ttslshape{10}{\magstep3} -\setfont\chapsf\sfbshape{17}{1000} -\let\chapbf=\chaprm -\setfont\chapsc\scbshape{10}{\magstep3} -\font\chapi=cmmi12 scaled \magstep2 -\font\chapsy=cmsy10 scaled \magstep3 - -% Section fonts (14.4pt). -\setfont\secrm\rmbshape{12}{\magstep1} -\setfont\secit\itbshape{10}{\magstep2} -\setfont\secsl\slbshape{10}{\magstep2} -\setfont\sectt\ttbshape{12}{\magstep1} -\setfont\secttsl\ttslshape{10}{\magstep2} -\setfont\secsf\sfbshape{12}{\magstep1} -\let\secbf\secrm -\setfont\secsc\scbshape{10}{\magstep2} -\font\seci=cmmi12 scaled \magstep1 -\font\secsy=cmsy10 scaled \magstep2 - -% Subsection fonts (13.15pt). -\setfont\ssecrm\rmbshape{12}{\magstephalf} -\setfont\ssecit\itbshape{10}{1315} -\setfont\ssecsl\slbshape{10}{1315} -\setfont\ssectt\ttbshape{12}{\magstephalf} -\setfont\ssecttsl\ttslshape{10}{1315} -\setfont\ssecsf\sfbshape{12}{\magstephalf} -\let\ssecbf\ssecrm -\setfont\ssecsc\scbshape{10}{\magstep1} -\font\sseci=cmmi12 scaled \magstephalf -\font\ssecsy=cmsy10 scaled 1315 -% The smallcaps and symbol fonts should actually be scaled \magstep1.5, -% but that is not a standard magnification. - -% In order for the font changes to affect most math symbols and letters, -% we have to define the \textfont of the standard families. Since -% texinfo doesn't allow for producing subscripts and superscripts except -% in the main text, we don't bother to reset \scriptfont and -% \scriptscriptfont (which would also require loading a lot more fonts). -% -\def\resetmathfonts{% - \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy - \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf - \textfont\ttfam=\tentt \textfont\sffam=\tensf -} - -% The font-changing commands redefine the meanings of \tenSTYLE, instead -% of just \STYLE. We do this so that font changes will continue to work -% in math mode, where it is the current \fam that is relevant in most -% cases, not the current font. Plain TeX does \def\bf{\fam=\bffam -% \tenbf}, for example. By redefining \tenbf, we obviate the need to -% redefine \bf itself. -\def\textfonts{% - \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl - \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc - \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl - \resetmathfonts \setleading{\textleading}} -\def\titlefonts{% - \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl - \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc - \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy - \let\tenttsl=\titlettsl - \resetmathfonts \setleading{25pt}} -\def\titlefont#1{{\titlefonts\rm #1}} -\def\chapfonts{% - \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl - \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc - \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl - \resetmathfonts \setleading{19pt}} -\def\secfonts{% - \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl - \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc - \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl - \resetmathfonts \setleading{16pt}} -\def\subsecfonts{% - \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl - \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc - \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl - \resetmathfonts \setleading{15pt}} -\let\subsubsecfonts = \subsecfonts % Maybe make sssec fonts scaled magstephalf? -\def\smallfonts{% - \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl - \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc - \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy - \let\tenttsl=\smallttsl - \resetmathfonts \setleading{10.5pt}} -\def\smallerfonts{% - \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl - \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc - \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy - \let\tenttsl=\smallerttsl - \resetmathfonts \setleading{9.5pt}} - -% Set the fonts to use with the @small... environments. -\let\smallexamplefonts = \smallfonts - -% About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample -% can fit this many characters: -% 8.5x11=86 smallbook=72 a4=90 a5=69 -% If we use \smallerfonts (8pt), then we can fit this many characters: -% 8.5x11=90+ smallbook=80 a4=90+ a5=77 -% For me, subjectively, the few extra characters that fit aren't worth -% the additional smallness of 8pt. So I'm making the default 9pt. -% -% By the way, for comparison, here's what fits with @example (10pt): -% 8.5x11=71 smallbook=60 a4=75 a5=58 -% -% I wish we used A4 paper on this side of the Atlantic. -% -% --karl, 24jan03. - - -% Set up the default fonts, so we can use them for creating boxes. -% -\textfonts - -% Define these so they can be easily changed for other fonts. -\def\angleleft{$\langle$} -\def\angleright{$\rangle$} - -% Count depth in font-changes, for error checks -\newcount\fontdepth \fontdepth=0 - -% Fonts for short table of contents. -\setfont\shortcontrm\rmshape{12}{1000} -\setfont\shortcontbf\bxshape{12}{1000} -\setfont\shortcontsl\slshape{12}{1000} -\setfont\shortconttt\ttshape{12}{1000} - -%% Add scribe-like font environments, plus @l for inline lisp (usually sans -%% serif) and @ii for TeX italic - -% \smartitalic{ARG} outputs arg in italics, followed by an italic correction -% unless the following character is such as not to need one. -\def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else - \ptexslash\fi\fi\fi} -\def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} -\def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} - -\let\i=\smartitalic -\let\var=\smartslanted -\let\dfn=\smartslanted -\let\emph=\smartitalic -\let\cite=\smartslanted - -\def\b#1{{\bf #1}} -\let\strong=\b - -% We can't just use \exhyphenpenalty, because that only has effect at -% the end of a paragraph. Restore normal hyphenation at the end of the -% group within which \nohyphenation is presumably called. -% -\def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} -\def\restorehyphenation{\hyphenchar\font = `- } - -% Set sfcode to normal for the chars that usually have another value. -% Can't use plain's \frenchspacing because it uses the `\x notation, and -% sometimes \x has an active definition that messes things up. -% -\catcode`@=11 - \def\frenchspacing{% - \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m - \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m - } -\catcode`@=\other - -\def\t#1{% - {\tt \rawbackslash \frenchspacing #1}% - \null -} -\let\ttfont=\t -\def\samp#1{`\tclose{#1}'\null} -\setfont\keyrm\rmshape{8}{1000} -\font\keysy=cmsy9 -\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% - \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% - \vbox{\hrule\kern-0.4pt - \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% - \kern-0.4pt\hrule}% - \kern-.06em\raise0.4pt\hbox{\angleright}}}} -% The old definition, with no lozenge: -%\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} -\def\ctrl #1{{\tt \rawbackslash \hat}#1} - -% @file, @option are the same as @samp. -\let\file=\samp -\let\option=\samp - -% @code is a modification of @t, -% which makes spaces the same size as normal in the surrounding text. -\def\tclose#1{% - {% - % Change normal interword space to be same as for the current font. - \spaceskip = \fontdimen2\font - % - % Switch to typewriter. - \tt - % - % But `\ ' produces the large typewriter interword space. - \def\ {{\spaceskip = 0pt{} }}% - % - % Turn off hyphenation. - \nohyphenation - % - \rawbackslash - \frenchspacing - #1% - }% - \null -} - -% We *must* turn on hyphenation at `-' and `_' in \code. -% Otherwise, it is too hard to avoid overfull hboxes -% in the Emacs manual, the Library manual, etc. - -% Unfortunately, TeX uses one parameter (\hyphenchar) to control -% both hyphenation at - and hyphenation within words. -% We must therefore turn them both off (\tclose does that) -% and arrange explicitly to hyphenate at a dash. -% -- rms. -{ - \catcode`\-=\active - \catcode`\_=\active - % - \global\def\code{\begingroup - \catcode`\-=\active \let-\codedash - \catcode`\_=\active \let_\codeunder - \codex - } - % - % If we end up with any active - characters when handling the index, - % just treat them as a normal -. - \global\def\indexbreaks{\catcode`\-=\active \let-\realdash} -} - -\def\realdash{-} -\def\codedash{-\discretionary{}{}{}} -\def\codeunder{% - % this is all so @math{@code{var_name}+1} can work. In math mode, _ - % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) - % will therefore expand the active definition of _, which is us - % (inside @code that is), therefore an endless loop. - \ifusingtt{\ifmmode - \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. - \else\normalunderscore \fi - \discretionary{}{}{}}% - {\_}% -} -\def\codex #1{\tclose{#1}\endgroup} - -% @kbd is like @code, except that if the argument is just one @key command, -% then @kbd has no effect. - -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), -% `example' (@kbd uses ttsl only inside of @example and friends), -% or `code' (@kbd uses normal tty font always). -\def\kbdinputstyle{\parsearg\kbdinputstylexxx} -\def\kbdinputstylexxx#1{% - \def\arg{#1}% - \ifx\arg\worddistinct - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% - \else\ifx\arg\wordexample - \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% - \else\ifx\arg\wordcode - \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% - \else - \errhelp = \EMsimple - \errmessage{Unknown @kbdinputstyle option `\arg'}% - \fi\fi\fi -} -\def\worddistinct{distinct} -\def\wordexample{example} -\def\wordcode{code} - -% Default is `distinct.' -\kbdinputstyle distinct - -\def\xkey{\key} -\def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% -\ifx\one\xkey\ifx\threex\three \key{#2}% -\else{\tclose{\kbdfont\look}}\fi -\else{\tclose{\kbdfont\look}}\fi} - -% For @url, @env, @command quotes seem unnecessary, so use \code. -\let\url=\code -\let\env=\code -\let\command=\code - -% @uref (abbreviation for `urlref') takes an optional (comma-separated) -% second argument specifying the text to display and an optional third -% arg as text to display instead of (rather than in addition to) the url -% itself. First (mandatory) arg is the url. Perhaps eventually put in -% a hypertex \special here. -% -\def\uref#1{\douref #1,,,\finish} -\def\douref#1,#2,#3,#4\finish{\begingroup - \unsepspaces - \pdfurl{#1}% - \setbox0 = \hbox{\ignorespaces #3}% - \ifdim\wd0 > 0pt - \unhbox0 % third arg given, show only that - \else - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0 > 0pt - \ifpdf - \unhbox0 % PDF: 2nd arg given, show only it - \else - \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url - \fi - \else - \code{#1}% only url given, so show it - \fi - \fi - \endlink -\endgroup} - -% rms does not like angle brackets --karl, 17may97. -% So now @email is just like @uref, unless we are pdf. -% -%\def\email#1{\angleleft{\tt #1}\angleright} -\ifpdf - \def\email#1{\doemail#1,,\finish} - \def\doemail#1,#2,#3\finish{\begingroup - \unsepspaces - \pdfurl{mailto:#1}% - \setbox0 = \hbox{\ignorespaces #2}% - \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi - \endlink - \endgroup} -\else - \let\email=\uref -\fi - -% Check if we are currently using a typewriter font. Since all the -% Computer Modern typewriter fonts have zero interword stretch (and -% shrink), and it is reasonable to expect all typewriter fonts to have -% this property, we can check that font parameter. -% -\def\ifmonospace{\ifdim\fontdimen3\font=0pt } - -% Typeset a dimension, e.g., `in' or `pt'. The only reason for the -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. -% -\def\dmn#1{\thinspace #1} - -\def\kbd#1{\def\look{#1}\expandafter\kbdfoo\look??\par} - -% @l was never documented to mean ``switch to the Lisp font'', -% and it is not used as such in any manual I can find. We need it for -% Polish suppressed-l. --karl, 22sep96. -%\def\l#1{{\li #1}\null} - -% Explicit font changes: @r, @sc, undocumented @ii. -\def\r#1{{\rm #1}} % roman font -\def\sc#1{{\smallcaps#1}} % smallcaps font -\def\ii#1{{\it #1}} % italic font - -% @acronym downcases the argument and prints in smallcaps. -\def\acronym#1{{\smallcaps \lowercase{#1}}} - -% @pounds{} is a sterling sign. -\def\pounds{{\it\$}} - -% @registeredsymbol - R in a circle. For now, only works in text size; -% we'd have to redo the font mechanism to change the \scriptstyle and -% \scriptscriptstyle font sizes to make it look right in headings. -% Adapted from the plain.tex definition of \copyright. -% -\def\registeredsymbol{% - $^{{\ooalign{\hfil\raise.07ex\hbox{$\scriptstyle\rm R$}\hfil\crcr\Orb}}% - }$% -} - - -\message{page headings,} - -\newskip\titlepagetopglue \titlepagetopglue = 1.5in -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc - -% First the title page. Must do @settitle before @titlepage. -\newif\ifseenauthor -\newif\iffinishedtitlepage - -% Do an implicit @contents or @shortcontents after @end titlepage if the -% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. -% -\newif\ifsetcontentsaftertitlepage - \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue -\newif\ifsetshortcontentsaftertitlepage - \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue - -\def\shorttitlepage{\parsearg\shorttitlepagezzz} -\def\shorttitlepagezzz #1{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% - \endgroup\page\hbox{}\page} - -\def\titlepage{\begingroup \parindent=0pt \textfonts - \let\subtitlerm=\tenrm - \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}% - % - \def\authorfont{\authorrm \normalbaselineskip = 16pt \normalbaselines - \let\tt=\authortt}% - % - % Leave some space at the very top of the page. - \vglue\titlepagetopglue - % - % Now you can print the title using @title. - \def\title{\parsearg\titlezzz}% - \def\titlezzz##1{\leftline{\titlefonts\rm ##1} - % print a rule at the page bottom also. - \finishedtitlepagefalse - \vskip4pt \hrule height 4pt width \hsize \vskip4pt}% - % No rule at page bottom unless we print one at the top with @title. - \finishedtitlepagetrue - % - % Now you can put text using @subtitle. - \def\subtitle{\parsearg\subtitlezzz}% - \def\subtitlezzz##1{{\subtitlefont \rightline{##1}}}% - % - % @author should come last, but may come many times. - \def\author{\parsearg\authorzzz}% - \def\authorzzz##1{\ifseenauthor\else\vskip 0pt plus 1filll\seenauthortrue\fi - {\authorfont \leftline{##1}}}% - % - % Most title ``pages'' are actually two pages long, with space - % at the top of the second. We don't want the ragged left on the second. - \let\oldpage = \page - \def\page{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - \oldpage - \let\page = \oldpage - \hbox{}}% -% \def\page{\oldpage \hbox{}} -} - -\def\Etitlepage{% - \iffinishedtitlepage\else - \finishtitlepage - \fi - % It is important to do the page break before ending the group, - % because the headline and footline are only empty inside the group. - % If we use the new definition of \page, we always get a blank page - % after the title page, which we certainly don't want. - \oldpage - \endgroup - % - % Need this before the \...aftertitlepage checks so that if they are - % in effect the toc pages will come out with page numbers. - \HEADINGSon - % - % If they want short, they certainly want long too. - \ifsetshortcontentsaftertitlepage - \shortcontents - \contents - \global\let\shortcontents = \relax - \global\let\contents = \relax - \fi - % - \ifsetcontentsaftertitlepage - \contents - \global\let\contents = \relax - \global\let\shortcontents = \relax - \fi -} - -\def\finishtitlepage{% - \vskip4pt \hrule height 2pt width \hsize - \vskip\titlepagebottomglue - \finishedtitlepagetrue -} - -%%% Set up page headings and footings. - -\let\thispage=\folio - -\newtoks\evenheadline % headline on even pages -\newtoks\oddheadline % headline on odd pages -\newtoks\evenfootline % footline on even pages -\newtoks\oddfootline % footline on odd pages - -% Now make Tex use those variables -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline - \else \the\evenheadline \fi}} -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline - \else \the\evenfootline \fi}\HEADINGShook} -\let\HEADINGShook=\relax - -% Commands to set those variables. -% For example, this is what @headings on does -% @evenheading @thistitle|@thispage|@thischapter -% @oddheading @thischapter|@thispage|@thistitle -% @evenfooting @thisfile|| -% @oddfooting ||@thisfile - -\def\evenheading{\parsearg\evenheadingxxx} -\def\oddheading{\parsearg\oddheadingxxx} -\def\everyheading{\parsearg\everyheadingxxx} - -\def\evenfooting{\parsearg\evenfootingxxx} -\def\oddfooting{\parsearg\oddfootingxxx} -\def\everyfooting{\parsearg\everyfootingxxx} - -{\catcode`\@=0 % - -\gdef\evenheadingxxx #1{\evenheadingyyy #1@|@|@|@|\finish} -\gdef\evenheadingyyy #1@|#2@|#3@|#4\finish{% -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddheadingxxx #1{\oddheadingyyy #1@|@|@|@|\finish} -\gdef\oddheadingyyy #1@|#2@|#3@|#4\finish{% -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\everyheadingxxx#1{\oddheadingxxx{#1}\evenheadingxxx{#1}}% - -\gdef\evenfootingxxx #1{\evenfootingyyy #1@|@|@|@|\finish} -\gdef\evenfootingyyy #1@|#2@|#3@|#4\finish{% -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} - -\gdef\oddfootingxxx #1{\oddfootingyyy #1@|@|@|@|\finish} -\gdef\oddfootingyyy #1@|#2@|#3@|#4\finish{% - \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% - % - % Leave some space for the footline. Hopefully ok to assume - % @evenfooting will not be used by itself. - \global\advance\pageheight by -\baselineskip - \global\advance\vsize by -\baselineskip -} - -\gdef\everyfootingxxx#1{\oddfootingxxx{#1}\evenfootingxxx{#1}} -% -}% unbind the catcode of @. - -% @headings double turns headings on for double-sided printing. -% @headings single turns headings on for single-sided printing. -% @headings off turns them off. -% @headings on same as @headings double, retained for compatibility. -% @headings after turns on double-sided headings after this page. -% @headings doubleafter turns on double-sided headings after this page. -% @headings singleafter turns on single-sided headings after this page. -% By default, they are off at the start of a document, -% and turned `on' after @end titlepage. - -\def\headings #1 {\csname HEADINGS#1\endcsname} - -\def\HEADINGSoff{ -\global\evenheadline={\hfil} \global\evenfootline={\hfil} -\global\oddheadline={\hfil} \global\oddfootline={\hfil}} -\HEADINGSoff -% When we turn headings on, set the page number to 1. -% For double-sided printing, put current file name in lower left corner, -% chapter name on inside top of right hand pages, document -% title on inside top of left hand pages, and page numbers on outside top -% edge of all pages. -\def\HEADINGSdouble{ -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} -\let\contentsalignmacro = \chappager - -% For single-sided printing, chapter title goes across top left of page, -% page number on top right. -\def\HEADINGSsingle{ -\global\pageno=1 -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} -\def\HEADINGSon{\HEADINGSdouble} - -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} -\let\HEADINGSdoubleafter=\HEADINGSafter -\def\HEADINGSdoublex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\folio\hfil\thistitle}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chapoddpage -} - -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} -\def\HEADINGSsinglex{% -\global\evenfootline={\hfil} -\global\oddfootline={\hfil} -\global\evenheadline={\line{\thischapter\hfil\folio}} -\global\oddheadline={\line{\thischapter\hfil\folio}} -\global\let\contentsalignmacro = \chappager -} - -% Subroutines used in generating headings -% This produces Day Month Year style of output. -% Only define if not already defined, in case a txi-??.tex file has set -% up a different format (e.g., txi-cs.tex does this). -\ifx\today\undefined -\def\today{% - \number\day\space - \ifcase\month - \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr - \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug - \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec - \fi - \space\number\year} -\fi - -% @settitle line... specifies the title of the document, for headings. -% It generates no output of its own. -\def\thistitle{\putwordNoTitle} -\def\settitle{\parsearg\settitlezzz} -\def\settitlezzz #1{\gdef\thistitle{#1}} - - -\message{tables,} -% Tables -- @table, @ftable, @vtable, @item(x), @kitem(x), @xitem(x). - -% default indentation of table text -\newdimen\tableindent \tableindent=.8in -% default indentation of @itemize and @enumerate text -\newdimen\itemindent \itemindent=.3in -% margin between end of table item and start of table text. -\newdimen\itemmargin \itemmargin=.1in - -% used internally for \itemindent minus \itemmargin -\newdimen\itemmax - -% Note @table, @vtable, and @vtable define @item, @itemx, etc., with -% these defs. -% They also define \itemindex -% to index the item name in whatever manner is desired (perhaps none). - -\newif\ifitemxneedsnegativevskip - -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} - -\def\internalBitem{\smallbreak \parsearg\itemzzz} -\def\internalBitemx{\itemxpar \parsearg\itemzzz} - -\def\internalBxitem "#1"{\def\xitemsubtopix{#1} \smallbreak \parsearg\xitemzzz} -\def\internalBxitemx "#1"{\def\xitemsubtopix{#1} \itemxpar \parsearg\xitemzzz} - -\def\internalBkitem{\smallbreak \parsearg\kitemzzz} -\def\internalBkitemx{\itemxpar \parsearg\kitemzzz} - -\def\kitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \lastfunction}}% - \itemzzz {#1}} - -\def\xitemzzz #1{\dosubind {kw}{\code{#1}}{for {\bf \xitemsubtopic}}% - \itemzzz {#1}} - -\def\itemzzz #1{\begingroup % - \advance\hsize by -\rightskip - \advance\hsize by -\tableindent - \setbox0=\hbox{\itemfont{#1}}% - \itemindex{#1}% - \nobreak % This prevents a break before @itemx. - % - % If the item text does not fit in the space we have, put it on a line - % by itself, and do not allow a page break either before or after that - % line. We do not start a paragraph here because then if the next - % command is, e.g., @kindex, the whatsit would get put into the - % horizontal list on a line by itself, resulting in extra blank space. - \ifdim \wd0>\itemmax - % - % Make this a paragraph so we get the \parskip glue and wrapping, - % but leave it ragged-right. - \begingroup - \advance\leftskip by-\tableindent - \advance\hsize by\tableindent - \advance\rightskip by0pt plus1fil - \leavevmode\unhbox0\par - \endgroup - % - % We're going to be starting a paragraph, but we don't want the - % \parskip glue -- logically it's part of the @item we just started. - \nobreak \vskip-\parskip - % - % Stop a page break at the \parskip glue coming up. (Unfortunately - % we can't prevent a possible page break at the following - % \baselineskip glue.) However, if what follows is an environment - % such as @example, there will be no \parskip glue; then - % the negative vskip we just would cause the example and the item to - % crash together. So we use this bizarre value of 10001 as a signal - % to \aboveenvbreak to insert \parskip glue after all. - % (Possibly there are other commands that could be followed by - % @example which need the same treatment, but not section titles; or - % maybe section titles are the only special case and they should be - % penalty 10001...) - \penalty 10001 - \endgroup - \itemxneedsnegativevskipfalse - \else - % The item text fits into the space. Start a paragraph, so that the - % following text (if any) will end up on the same line. - \noindent - % Do this with kerns and \unhbox so that if there is a footnote in - % the item text, it can migrate to the main vertical list and - % eventually be printed. - \nobreak\kern-\tableindent - \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 - \unhbox0 - \nobreak\kern\dimen0 - \endgroup - \itemxneedsnegativevskiptrue - \fi -} - -\def\item{\errmessage{@item while not in a table}} -\def\itemx{\errmessage{@itemx while not in a table}} -\def\kitem{\errmessage{@kitem while not in a table}} -\def\kitemx{\errmessage{@kitemx while not in a table}} -\def\xitem{\errmessage{@xitem while not in a table}} -\def\xitemx{\errmessage{@xitemx while not in a table}} - -% Contains a kludge to get @end[description] to work. -\def\description{\tablez{\dontindex}{1}{}{}{}{}} - -% @table, @ftable, @vtable. -\def\table{\begingroup\inENV\obeylines\obeyspaces\tablex} -{\obeylines\obeyspaces% -\gdef\tablex #1^^M{% -\tabley\dontindex#1 \endtabley}} - -\def\ftable{\begingroup\inENV\obeylines\obeyspaces\ftablex} -{\obeylines\obeyspaces% -\gdef\ftablex #1^^M{% -\tabley\fnitemindex#1 \endtabley -\def\Eftable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\vtable{\begingroup\inENV\obeylines\obeyspaces\vtablex} -{\obeylines\obeyspaces% -\gdef\vtablex #1^^M{% -\tabley\vritemindex#1 \endtabley -\def\Evtable{\endgraf\afterenvbreak\endgroup}% -\let\Etable=\relax}} - -\def\dontindex #1{} -\def\fnitemindex #1{\doind {fn}{\code{#1}}}% -\def\vritemindex #1{\doind {vr}{\code{#1}}}% - -{\obeyspaces % -\gdef\tabley#1#2 #3 #4 #5 #6 #7\endtabley{\endgroup% -\tablez{#1}{#2}{#3}{#4}{#5}{#6}}} - -\def\tablez #1#2#3#4#5#6{% -\aboveenvbreak % -\begingroup % -\def\Edescription{\Etable}% Necessary kludge. -\let\itemindex=#1% -\ifnum 0#3>0 \advance \leftskip by #3\mil \fi % -\ifnum 0#4>0 \tableindent=#4\mil \fi % -\ifnum 0#5>0 \advance \rightskip by #5\mil \fi % -\def\itemfont{#2}% -\itemmax=\tableindent % -\advance \itemmax by -\itemmargin % -\advance \leftskip by \tableindent % -\exdentamount=\tableindent -\parindent = 0pt -\parskip = \smallskipamount -\ifdim \parskip=0pt \parskip=2pt \fi% -\def\Etable{\endgraf\afterenvbreak\endgroup}% -\let\item = \internalBitem % -\let\itemx = \internalBitemx % -\let\kitem = \internalBkitem % -\let\kitemx = \internalBkitemx % -\let\xitem = \internalBxitem % -\let\xitemx = \internalBxitemx % -} - -% This is the counter used by @enumerate, which is really @itemize - -\newcount \itemno - -\def\itemize{\parsearg\itemizezzz} - -\def\itemizezzz #1{% - \begingroup % ended by the @end itemize - \itemizey {#1}{\Eitemize} -} - -\def\itemizey#1#2{% - \aboveenvbreak - \itemmax=\itemindent - \advance\itemmax by -\itemmargin - \advance\leftskip by \itemindent - \exdentamount=\itemindent - \parindent=0pt - \parskip=\smallskipamount - \ifdim\parskip=0pt \parskip=2pt \fi - \def#2{\endgraf\afterenvbreak\endgroup}% - \def\itemcontents{#1}% - % @itemize with no arg is equivalent to @itemize @bullet. - \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi - \let\item=\itemizeitem -} - -% \splitoff TOKENS\endmark defines \first to be the first token in -% TOKENS, and \rest to be the remainder. -% -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% - -% Allow an optional argument of an uppercase letter, lowercase letter, -% or number, to specify the first label in the enumerated list. No -% argument is the same as `1'. -% -\def\enumerate{\parsearg\enumeratezzz} -\def\enumeratezzz #1{\enumeratey #1 \endenumeratey} -\def\enumeratey #1 #2\endenumeratey{% - \begingroup % ended by the @end enumerate - % - % If we were given no argument, pretend we were given `1'. - \def\thearg{#1}% - \ifx\thearg\empty \def\thearg{1}\fi - % - % Detect if the argument is a single token. If so, it might be a - % letter. Otherwise, the only valid thing it can be is a number. - % (We will always have one token, because of the test we just made. - % This is a good thing, since \splitoff doesn't work given nothing at - % all -- the first parameter is undelimited.) - \expandafter\splitoff\thearg\endmark - \ifx\rest\empty - % Only one token in the argument. It could still be anything. - % A ``lowercase letter'' is one whose \lccode is nonzero. - % An ``uppercase letter'' is one whose \lccode is both nonzero, and - % not equal to itself. - % Otherwise, we assume it's a number. - % - % We need the \relax at the end of the \ifnum lines to stop TeX from - % continuing to look for a . - % - \ifnum\lccode\expandafter`\thearg=0\relax - \numericenumerate % a number (we hope) - \else - % It's a letter. - \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax - \lowercaseenumerate % lowercase letter - \else - \uppercaseenumerate % uppercase letter - \fi - \fi - \else - % Multiple tokens in the argument. We hope it's a number. - \numericenumerate - \fi -} - -% An @enumerate whose labels are integers. The starting integer is -% given in \thearg. -% -\def\numericenumerate{% - \itemno = \thearg - \startenumeration{\the\itemno}% -} - -% The starting (lowercase) letter is in \thearg. -\def\lowercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more lowercase letters in @enumerate; get a bigger - alphabet}% - \fi - \char\lccode\itemno - }% -} - -% The starting (uppercase) letter is in \thearg. -\def\uppercaseenumerate{% - \itemno = \expandafter`\thearg - \startenumeration{% - % Be sure we're not beyond the end of the alphabet. - \ifnum\itemno=0 - \errmessage{No more uppercase letters in @enumerate; get a bigger - alphabet} - \fi - \char\uccode\itemno - }% -} - -% Call itemizey, adding a period to the first argument and supplying the -% common last two arguments. Also subtract one from the initial value in -% \itemno, since @item increments \itemno. -% -\def\startenumeration#1{% - \advance\itemno by -1 - \itemizey{#1.}\Eenumerate\flushcr -} - -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg -% to @enumerate. -% -\def\alphaenumerate{\enumerate{a}} -\def\capsenumerate{\enumerate{A}} -\def\Ealphaenumerate{\Eenumerate} -\def\Ecapsenumerate{\Eenumerate} - -% Definition of @item while inside @itemize. - -\def\itemizeitem{% -\advance\itemno by 1 -{\let\par=\endgraf \smallbreak}% -\ifhmode \errmessage{In hmode at itemizeitem}\fi -{\parskip=0in \hskip 0pt -\hbox to 0pt{\hss \itemcontents\hskip \itemmargin}% -\vadjust{\penalty 1200}}% -\flushcr} - -% @multitable macros -% Amy Hendrickson, 8/18/94, 3/6/96 -% -% @multitable ... @end multitable will make as many columns as desired. -% Contents of each column will wrap at width given in preamble. Width -% can be specified either with sample text given in a template line, -% or in percent of \hsize, the current width of text on page. - -% Table can continue over pages but will only break between lines. - -% To make preamble: -% -% Either define widths of columns in terms of percent of \hsize: -% @multitable @columnfractions .25 .3 .45 -% @item ... -% -% Numbers following @columnfractions are the percent of the total -% current hsize to be used for each column. You may use as many -% columns as desired. - - -% Or use a template: -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item ... -% using the widest term desired in each column. -% -% For those who want to use more than one line's worth of words in -% the preamble, break the line within one argument and it -% will parse correctly, i.e., -% -% @multitable {Column 1 template} {Column 2 template} {Column 3 -% template} -% Not: -% @multitable {Column 1 template} {Column 2 template} -% {Column 3 template} - -% Each new table line starts with @item, each subsequent new column -% starts with @tab. Empty columns may be produced by supplying @tab's -% with nothing between them for as many times as empty columns are needed, -% ie, @tab@tab@tab will produce two empty columns. - -% @item, @tab, @multitable or @end multitable do not need to be on their -% own lines, but it will not hurt if they are. - -% Sample multitable: - -% @multitable {Column 1 template} {Column 2 template} {Column 3 template} -% @item first col stuff @tab second col stuff @tab third col -% @item -% first col stuff -% @tab -% second col stuff -% @tab -% third col -% @item first col stuff @tab second col stuff -% @tab Many paragraphs of text may be used in any column. -% -% They will wrap at the width determined by the template. -% @item@tab@tab This will be in third column. -% @end multitable - -% Default dimensions may be reset by user. -% @multitableparskip is vertical space between paragraphs in table. -% @multitableparindent is paragraph indent in table. -% @multitablecolmargin is horizontal space to be left between columns. -% @multitablelinespace is space to leave between table items, baseline -% to baseline. -% 0pt means it depends on current normal line spacing. -% -\newskip\multitableparskip -\newskip\multitableparindent -\newdimen\multitablecolspace -\newskip\multitablelinespace -\multitableparskip=0pt -\multitableparindent=6pt -\multitablecolspace=12pt -\multitablelinespace=0pt - -% Macros used to set up halign preamble: -% -\let\endsetuptable\relax -\def\xendsetuptable{\endsetuptable} -\let\columnfractions\relax -\def\xcolumnfractions{\columnfractions} -\newif\ifsetpercent - -% #1 is the part of the @columnfraction before the decimal point, which -% is presumably either 0 or the empty string (but we don't check, we -% just throw it away). #2 is the decimal part, which we use as the -% percent of \hsize for this column. -\def\pickupwholefraction#1.#2 {% - \global\advance\colcount by 1 - \expandafter\xdef\csname col\the\colcount\endcsname{.#2\hsize}% - \setuptable -} - -\newcount\colcount -\def\setuptable#1{% - \def\firstarg{#1}% - \ifx\firstarg\xendsetuptable - \let\go = \relax - \else - \ifx\firstarg\xcolumnfractions - \global\setpercenttrue - \else - \ifsetpercent - \let\go\pickupwholefraction - \else - \global\advance\colcount by 1 - \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a - % separator; typically that is always in the input, anyway. - \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% - \fi - \fi - \ifx\go\pickupwholefraction - % Put the argument back for the \pickupwholefraction call, so - % we'll always have a period there to be parsed. - \def\go{\pickupwholefraction#1}% - \else - \let\go = \setuptable - \fi% - \fi - \go -} - -% @multitable ... @end multitable definitions: -% -\def\multitable{\parsearg\dotable} -\def\dotable#1{\bgroup - \vskip\parskip - \let\item=\crcrwithfootnotes - % A \tab used to include \hskip1sp. But then the space in a template - % line is not enough. That is bad. So let's go back to just & until - % we encounter the problem it was intended to solve again. --karl, - % nathan@acm.org, 20apr99. - \let\tab=&% - \let\startfootins=\startsavedfootnote - \tolerance=9500 - \hbadness=9500 - \setmultitablespacing - \parskip=\multitableparskip - \parindent=\multitableparindent - \overfullrule=0pt - \global\colcount=0 - \def\Emultitable{% - \global\setpercentfalse - \crcrwithfootnotes\crcr - \egroup\egroup - }% - % - % To parse everything between @multitable and @item: - \setuptable#1 \endsetuptable - % - % \everycr will reset column counter, \colcount, at the end of - % each line. Every column entry will cause \colcount to advance by one. - % The table preamble - % looks at the current \colcount to find the correct column width. - \everycr{\noalign{% - % - % \filbreak%% keeps underfull box messages off when table breaks over pages. - % Maybe so, but it also creates really weird page breaks when the table - % breaks over pages. Wouldn't \vfil be better? Wait until the problem - % manifests itself, so it can be fixed for real --karl. - \global\colcount=0\relax}}% - % - % This preamble sets up a generic column definition, which will - % be used as many times as user calls for columns. - % \vtop will set a single line and will also let text wrap and - % continue for many paragraphs if desired. - \halign\bgroup&\global\advance\colcount by 1\relax - \multistrut\vtop{\hsize=\expandafter\csname col\the\colcount\endcsname - % - % In order to keep entries from bumping into each other - % we will add a \leftskip of \multitablecolspace to all columns after - % the first one. - % - % If a template has been used, we will add \multitablecolspace - % to the width of each template entry. - % - % If the user has set preamble in terms of percent of \hsize we will - % use that dimension as the width of the column, and the \leftskip - % will keep entries from bumping into each other. Table will start at - % left margin and final column will justify at right margin. - % - % Make sure we don't inherit \rightskip from the outer environment. - \rightskip=0pt - \ifnum\colcount=1 - % The first column will be indented with the surrounding text. - \advance\hsize by\leftskip - \else - \ifsetpercent \else - % If user has not set preamble in terms of percent of \hsize - % we will advance \hsize by \multitablecolspace. - \advance\hsize by \multitablecolspace - \fi - % In either case we will make \leftskip=\multitablecolspace: - \leftskip=\multitablecolspace - \fi - % Ignoring space at the beginning and end avoids an occasional spurious - % blank line, when TeX decides to break the line at the space before the - % box from the multistrut, so the strut ends up on a line by itself. - % For example: - % @multitable @columnfractions .11 .89 - % @item @code{#} - % @tab Legal holiday which is valid in major parts of the whole country. - % Is automatically provided with highlighting sequences respectively marking - % characters. - \noindent\ignorespaces##\unskip\multistrut}\cr -} - -\def\setmultitablespacing{% test to see if user has set \multitablelinespace. -% If so, do nothing. If not, give it an appropriate dimension based on -% current baselineskip. -\ifdim\multitablelinespace=0pt -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip -\global\advance\multitablelinespace by-\ht0 -%% strut to put in table in case some entry doesn't have descenders, -%% to keep lines equally spaced -\let\multistrut = \strut -\else -%% FIXME: what is \box0 supposed to be? -\gdef\multistrut{\vrule height\multitablelinespace depth\dp0 -width0pt\relax} \fi -%% Test to see if parskip is larger than space between lines of -%% table. If not, do nothing. -%% If so, set to same dimension as multitablelinespace. -\ifdim\multitableparskip>\multitablelinespace -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi% -\ifdim\multitableparskip=0pt -\global\multitableparskip=\multitablelinespace -\global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller - %% than skip between lines in the table. -\fi} - -% In case a @footnote appears inside an alignment, save the footnote -% text to a box and make the \insert when a row of the table is -% finished. Otherwise, the insertion is lost, it never migrates to the -% main vertical list. --kasal, 22jan03. -% -\newbox\savedfootnotes -% -% \dotable \let's \startfootins to this, so that \dofootnote will call -% it instead of starting the insertion right away. -\def\startsavedfootnote{% - \global\setbox\savedfootnotes = \vbox\bgroup - \unvbox\savedfootnotes -} -\def\crcrwithfootnotes{% - \crcr - \ifvoid\savedfootnotes \else - \noalign{\insert\footins{\box\savedfootnotes}}% - \fi -} - -\message{conditionals,} -% Prevent errors for section commands. -% Used in @ignore and in failing conditionals. -\def\ignoresections{% - \let\appendix=\relax - \let\appendixsec=\relax - \let\appendixsection=\relax - \let\appendixsubsec=\relax - \let\appendixsubsection=\relax - \let\appendixsubsubsec=\relax - \let\appendixsubsubsection=\relax - %\let\begin=\relax - %\let\bye=\relax - \let\centerchap=\relax - \let\chapter=\relax - \let\contents=\relax - \let\section=\relax - \let\smallbook=\relax - \let\subsec=\relax - \let\subsection=\relax - \let\subsubsec=\relax - \let\subsubsection=\relax - \let\titlepage=\relax - \let\top=\relax - \let\unnumbered=\relax - \let\unnumberedsec=\relax - \let\unnumberedsection=\relax - \let\unnumberedsubsec=\relax - \let\unnumberedsubsection=\relax - \let\unnumberedsubsubsec=\relax - \let\unnumberedsubsubsection=\relax -} - -% Ignore @ignore, @ifhtml, @ifinfo, and the like. -% -\def\direntry{\doignore{direntry}} -\def\documentdescriptionword{documentdescription} -\def\documentdescription{\doignore{documentdescription}} -\def\html{\doignore{html}} -\def\ifhtml{\doignore{ifhtml}} -\def\ifinfo{\doignore{ifinfo}} -\def\ifnottex{\doignore{ifnottex}} -\def\ifplaintext{\doignore{ifplaintext}} -\def\ifxml{\doignore{ifxml}} -\def\ignore{\doignore{ignore}} -\def\menu{\doignore{menu}} -\def\xml{\doignore{xml}} - -% @dircategory CATEGORY -- specify a category of the dir file -% which this file should belong to. Ignore this in TeX. -\let\dircategory = \comment - -% Ignore text until a line `@end #1', keeping track of nested conditionals. -% -% A count to remember the depth of nesting. -\newcount\doignorecount \doignorecount = 0 - -\def\doignore#1{\begingroup - % Don't complain about control sequences we have declared \outer. - \ignoresections - % - % Make sure that spaces turn into tokens that match what \doignoretext wants. - \catcode\spaceChar = 10 - % - % Ignore braces, so mismatched braces don't cause trouble. - \catcode`\{ = 9 - \catcode`\} = 9 - % - % Count number of #1's that we've seen. - \doignorecount = 0 - % - % Swallow text until we reach the matching `@end #1'. - \expandafter \dodoignore \csname#1\endcsname {#1}% -} - -{ \catcode`@=11 % We want to use \ST@P which cannot appear in texinfo source. - \obeylines % - % - \gdef\dodoignore#1#2{% - % #1 contains, e.g., \ifinfo, a.k.a. @ifinfo. - % #2 contains the string `ifinfo'. - % - % Define a command to find the next `@end #2', which must be on a line - % by itself. - \long\def\doignoretext##1^^M\end #2{\doignoretextyyy##1^^M#1\ST@P}% - % And this command to find another #1 command, at the beginning of a - % line. (Otherwise, we would consider a line `@c @ifset', for - % example, to count as an @ifset for nesting.) - \long\def\doignoretextyyy##1^^M#1##2\ST@P{\doignoreyyy{##2}\ST@P}% - % - % And now expand that command. - \obeylines % - \doignoretext ^^M% - }% -} - -\def\doignoreyyy#1{% - \def\temp{#1}% - \ifx\temp\empty % Nothing found. - \let\next\doignoretextzzz - \else % Found a nested condition, ... - \advance\doignorecount by 1 - \let\next\doignoretextyyy % ..., look for another. - % If we're here, #1 ends with \ifinfo (for example). - \fi - \next #1% the token \ST@P is present just after this macro. -} - -% We have to swallow the remaining "\ST@P". -% -\def\doignoretextzzz#1{% - \ifnum\doignorecount = 0 % We have just found the outermost @end. - \let\next\enddoignore - \else % Still inside a nested condition. - \advance\doignorecount by -1 - \let\next\doignoretext % Look for the next @end. - \fi - \next -} - -% Finish off ignored text. -\def\enddoignore{\endgroup\ignorespaces} - - -% @set VAR sets the variable VAR to an empty value. -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. -% -% Since we want to separate VAR from REST-OF-LINE (which might be -% empty), we can't just use \parsearg; we have to insert a space of our -% own to delimit the rest of the line, and then take it out again if we -% didn't need it. Make sure the catcode of space is correct to avoid -% losing inside @example, for instance. -% -\def\set{\begingroup\catcode` =10 - \catcode`\-=12 \catcode`\_=12 % Allow - and _ in VAR. - \parsearg\setxxx} -\def\setxxx#1{\setyyy#1 \endsetyyy} -\def\setyyy#1 #2\endsetyyy{% - \def\temp{#2}% - \ifx\temp\empty \global\expandafter\let\csname SET#1\endcsname = \empty - \else \setzzz{#1}#2\endsetzzz % Remove the trailing space \setxxx inserted. - \fi - \endgroup -} -% Can't use \xdef to pre-expand #2 and save some time, since \temp or -% \next or other control sequences that we've defined might get us into -% an infinite loop. Consider `@set foo @cite{bar}'. -\def\setzzz#1#2 \endsetzzz{\expandafter\gdef\csname SET#1\endcsname{#2}} - -% @clear VAR clears (i.e., unsets) the variable VAR. -% -\def\clear{\parsearg\clearxxx} -\def\clearxxx#1{\global\expandafter\let\csname SET#1\endcsname=\relax} - -% @value{foo} gets the text saved in variable foo. -{ - \catcode`\_ = \active - % - % We might end up with active _ or - characters in the argument if - % we're called from @code, as @code{@value{foo-bar_}}. So \let any - % such active characters to their normal equivalents. - \gdef\value{\begingroup - \catcode`\-=\other \catcode`\_=\other - \indexbreaks \let_\normalunderscore - \valuexxx} -} -\def\valuexxx#1{\expandablevalue{#1}\endgroup} - -% We have this subroutine so that we can handle at least some @value's -% properly in indexes (we \let\value to this in \indexdummies). Ones -% whose names contain - or _ still won't work, but we can't do anything -% about that. The command has to be fully expandable (if the variable -% is set), since the result winds up in the index file. This means that -% if the variable's value contains other Texinfo commands, it's almost -% certain it will fail (although perhaps we could fix that with -% sufficient work to do a one-level expansion on the result, instead of -% complete). -% -\def\expandablevalue#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - {[No value for ``#1'']}% - \message{Variable `#1', used in @value, is not set.}% - \else - \csname SET#1\endcsname - \fi -} - -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined -% with @set. -% -\def\ifset{\parsearg\doifset} -\def\doifset#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \let\next=\ifsetfail - \else - \let\next=\ifsetsucceed - \fi - \next -} -\def\ifsetsucceed{\conditionalsucceed{ifset}} -\def\ifsetfail{\doignore{ifset}} -\defineunmatchedend{ifset} - -% @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been -% defined with @set, or has been undefined with @clear. -% -\def\ifclear{\parsearg\doifclear} -\def\doifclear#1{% - \expandafter\ifx\csname SET#1\endcsname\relax - \let\next=\ifclearsucceed - \else - \let\next=\ifclearfail - \fi - \next -} -\def\ifclearsucceed{\conditionalsucceed{ifclear}} -\def\ifclearfail{\doignore{ifclear}} -\defineunmatchedend{ifclear} - -% @iftex, @ifnothtml, @ifnotinfo, @ifnotplaintext always succeed; we -% read the text following, through the first @end iftex (etc.). Make -% `@end iftex' (etc.) valid only after an @iftex. -% -\def\iftex{\conditionalsucceed{iftex}} -\def\ifnothtml{\conditionalsucceed{ifnothtml}} -\def\ifnotinfo{\conditionalsucceed{ifnotinfo}} -\def\ifnotplaintext{\conditionalsucceed{ifnotplaintext}} -\defineunmatchedend{iftex} -\defineunmatchedend{ifnothtml} -\defineunmatchedend{ifnotinfo} -\defineunmatchedend{ifnotplaintext} - -% True conditional. Since \set globally defines its variables, we can -% just start and end a group (to keep the @end definition undefined at -% the outer level). -% -\def\conditionalsucceed#1{\begingroup - \expandafter\def\csname E#1\endcsname{\endgroup}% -} - -% @defininfoenclose. -\let\definfoenclose=\comment - - -\message{indexing,} -% Index generation facilities - -% Define \newwrite to be identical to plain tex's \newwrite -% except not \outer, so it can be used within \newindex. -{\catcode`\@=11 -\gdef\newwrite{\alloc@7\write\chardef\sixt@@n}} - -% \newindex {foo} defines an index named foo. -% It automatically defines \fooindex such that -% \fooindex ...rest of line... puts an entry in the index foo. -% It also defines \fooindfile to be the number of the output channel for -% the file that accumulates this index. The file's extension is foo. -% The name of an index should be no more than 2 characters long -% for the sake of vms. -% -\def\newindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 % Open the file - \fi - \expandafter\xdef\csname#1index\endcsname{% % Define @#1index - \noexpand\doindex{#1}} -} - -% @defindex foo == \newindex{foo} -% -\def\defindex{\parsearg\newindex} - -% Define @defcodeindex, like @defindex except put all entries in @code. -% -\def\defcodeindex{\parsearg\newcodeindex} -% -\def\newcodeindex#1{% - \iflinks - \expandafter\newwrite \csname#1indfile\endcsname - \openout \csname#1indfile\endcsname \jobname.#1 - \fi - \expandafter\xdef\csname#1index\endcsname{% - \noexpand\docodeindex{#1}}% -} - - -% @synindex foo bar makes index foo feed into index bar. -% Do this instead of @defindex foo if you don't want it as a separate index. -% -% @syncodeindex foo bar similar, but put all entries made for index foo -% inside @code. -% -\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} -\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} - -% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), -% #3 the target index (bar). -\def\dosynindex#1#2#3{% - % Only do \closeout if we haven't already done it, else we'll end up - % closing the target index. - \expandafter \ifx\csname donesynindex#2\endcsname \undefined - % The \closeout helps reduce unnecessary open files; the limit on the - % Acorn RISC OS is a mere 16 files. - \expandafter\closeout\csname#2indfile\endcsname - \expandafter\let\csname\donesynindex#2\endcsname = 1 - \fi - % redefine \fooindfile: - \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname - \expandafter\let\csname#2indfile\endcsname=\temp - % redefine \fooindex: - \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% -} - -% Define \doindex, the driver for all \fooindex macros. -% Argument #1 is generated by the calling \fooindex macro, -% and it is "foo", the name of the index. - -% \doindex just uses \parsearg; it calls \doind for the actual work. -% This is because \doind is more useful to call from other macros. - -% There is also \dosubind {index}{topic}{subtopic} -% which makes an entry in a two-level index such as the operation index. - -\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} -\def\singleindexer #1{\doind{\indexname}{#1}} - -% like the previous two, but they put @code around the argument. -\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} -\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} - -% Take care of Texinfo commands that can appear in an index entry. -% Since there are some commands we want to expand, and others we don't, -% we have to laboriously prevent expansion for those that we don't. -% -\def\indexdummies{% - \def\@{@}% change to @@ when we switch to @ as escape char in index files. - \def\ {\realbackslash\space }% - % Need these in case \tex is in effect and \{ is a \delimiter again. - % But can't use \lbracecmd and \rbracecmd because texindex assumes - % braces and backslashes are used only as delimiters. - \let\{ = \mylbrace - \let\} = \myrbrace - % - % \definedummyword defines \#1 as \realbackslash #1\space, thus - % effectively preventing its expansion. This is used only for control - % words, not control letters, because the \space would be incorrect - % for control characters, but is needed to separate the control word - % from whatever follows. - % - % For control letters, we have \definedummyletter, which omits the - % space. - % - % These can be used both for control words that take an argument and - % those that do not. If it is followed by {arg} in the input, then - % that will dutifully get written to the index (or wherever). - % - \def\definedummyword##1{% - \expandafter\def\csname ##1\endcsname{\realbackslash ##1\space}% - }% - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{\realbackslash ##1}% - }% - % - % Do the redefinitions. - \commondummies -} - -% For the aux file, @ is the escape character. So we want to redefine -% everything using @ instead of \realbackslash. When everything uses -% @, this will be simpler. -% -\def\atdummies{% - \def\@{@@}% - \def\ {@ }% - \let\{ = \lbraceatcmd - \let\} = \rbraceatcmd - % - % (See comments in \indexdummies.) - \def\definedummyword##1{% - \expandafter\def\csname ##1\endcsname{@##1\space}% - }% - \def\definedummyletter##1{% - \expandafter\def\csname ##1\endcsname{@##1}% - }% - % - % Do the redefinitions. - \commondummies -} - -% Called from \indexdummies and \atdummies. \definedummyword and -% \definedummyletter must be defined first. -% -\def\commondummies{% - % - \normalturnoffactive - % - % Control letters and accents. - \definedummyletter{_}% - \definedummyletter{,}% - \definedummyletter{"}% - \definedummyletter{`}% - \definedummyletter{'}% - \definedummyletter{^}% - \definedummyletter{~}% - \definedummyletter{=}% - \definedummyword{u}% - \definedummyword{v}% - \definedummyword{H}% - \definedummyword{dotaccent}% - \definedummyword{ringaccent}% - \definedummyword{tieaccent}% - \definedummyword{ubaraccent}% - \definedummyword{udotaccent}% - \definedummyword{dotless}% - % - % Other non-English letters. - \definedummyword{AA}% - \definedummyword{AE}% - \definedummyword{L}% - \definedummyword{OE}% - \definedummyword{O}% - \definedummyword{aa}% - \definedummyword{ae}% - \definedummyword{l}% - \definedummyword{oe}% - \definedummyword{o}% - \definedummyword{ss}% - % - % Although these internal commands shouldn't show up, sometimes they do. - \definedummyword{bf}% - \definedummyword{gtr}% - \definedummyword{hat}% - \definedummyword{less}% - \definedummyword{sf}% - \definedummyword{sl}% - \definedummyword{tclose}% - \definedummyword{tt}% - % - % Texinfo font commands. - \definedummyword{b}% - \definedummyword{i}% - \definedummyword{r}% - \definedummyword{sc}% - \definedummyword{t}% - % - \definedummyword{TeX}% - \definedummyword{acronym}% - \definedummyword{cite}% - \definedummyword{code}% - \definedummyword{command}% - \definedummyword{dfn}% - \definedummyword{dots}% - \definedummyword{emph}% - \definedummyword{env}% - \definedummyword{file}% - \definedummyword{kbd}% - \definedummyword{key}% - \definedummyword{math}% - \definedummyword{option}% - \definedummyword{samp}% - \definedummyword{strong}% - \definedummyword{uref}% - \definedummyword{url}% - \definedummyword{var}% - \definedummyword{w}% - % - % Assorted special characters. - \definedummyword{bullet}% - \definedummyword{copyright}% - \definedummyword{dots}% - \definedummyword{enddots}% - \definedummyword{equiv}% - \definedummyword{error}% - \definedummyword{expansion}% - \definedummyword{minus}% - \definedummyword{pounds}% - \definedummyword{point}% - \definedummyword{print}% - \definedummyword{result}% - % - % Handle some cases of @value -- where the variable name does not - % contain - or _, and the value does not contain any - % (non-fully-expandable) commands. - \let\value = \expandablevalue - % - % Normal spaces, not active ones. - \unsepspaces - % - % No macro expansion. - \turnoffmacros -} - -% If an index command is used in an @example environment, any spaces -% therein should become regular spaces in the raw index file, not the -% expansion of \tie (\leavevmode \penalty \@M \ ). -{\obeyspaces - \gdef\unsepspaces{\obeyspaces\let =\space}} - - -% \indexnofonts is used when outputting the strings to sort the index -% by, and when constructing control sequence names. It eliminates all -% control sequences and just writes whatever the best ASCII sort string -% would be for a given command (usually its argument). -% -\def\indexdummytex{TeX} -\def\indexdummydots{...} -% -\def\indexnofonts{% - \def\ { }% - \def\@{@}% - % how to handle braces? - \def\_{\normalunderscore}% - % - \let\,=\asis - \let\"=\asis - \let\`=\asis - \let\'=\asis - \let\^=\asis - \let\~=\asis - \let\==\asis - \let\u=\asis - \let\v=\asis - \let\H=\asis - \let\dotaccent=\asis - \let\ringaccent=\asis - \let\tieaccent=\asis - \let\ubaraccent=\asis - \let\udotaccent=\asis - \let\dotless=\asis - % - % Other non-English letters. - \def\AA{AA}% - \def\AE{AE}% - \def\L{L}% - \def\OE{OE}% - \def\O{O}% - \def\aa{aa}% - \def\ae{ae}% - \def\l{l}% - \def\oe{oe}% - \def\o{o}% - \def\ss{ss}% - \def\exclamdown{!}% - \def\questiondown{?}% - % - % Don't no-op \tt, since it isn't a user-level command - % and is used in the definitions of the active chars like <, >, |, etc. - % Likewise with the other plain tex font commands. - %\let\tt=\asis - % - % Texinfo font commands. - \let\b=\asis - \let\i=\asis - \let\r=\asis - \let\sc=\asis - \let\t=\asis - % - \let\TeX=\indexdummytex - \let\acronym=\asis - \let\cite=\asis - \let\code=\asis - \let\command=\asis - \let\dfn=\asis - \let\dots=\indexdummydots - \let\emph=\asis - \let\env=\asis - \let\file=\asis - \let\kbd=\asis - \let\key=\asis - \let\math=\asis - \let\option=\asis - \let\samp=\asis - \let\strong=\asis - \let\uref=\asis - \let\url=\asis - \let\var=\asis - \let\w=\asis -} - -\let\indexbackslash=0 %overridden during \printindex. -\let\SETmarginindex=\relax % put index entries in margin (undocumented)? - -% For \ifx comparisons. -\def\emptymacro{\empty} - -% Most index entries go through here, but \dosubind is the general case. -% -\def\doind#1#2{\dosubind{#1}{#2}\empty} - -% Workhorse for all \fooindexes. -% #1 is name of index, #2 is stuff to put there, #3 is subentry -- -% \empty if called from \doind, as we usually are. The main exception -% is with defuns, which call us directly. -% -\def\dosubind#1#2#3{% - % Put the index entry in the margin if desired. - \ifx\SETmarginindex\relax\else - \insert\margin{\hbox{\vrule height8pt depth3pt width0pt #2}}% - \fi - {% - \count255=\lastpenalty - {% - \indexdummies % Must do this here, since \bf, etc expand at this stage - \escapechar=`\\ - {% - \let\folio = 0% We will expand all macros now EXCEPT \folio. - \def\rawbackslashxx{\indexbackslash}% \indexbackslash isn't defined now - % so it will be output as is; and it will print as backslash. - % - % The main index entry text. - \toks0 = {#2}% - % - % If third arg is present, precede it with space in sort key. - \def\thirdarg{#3}% - \ifx\thirdarg\emptymacro \else - % If the third (subentry) arg is present, add it to the index - % line to write. - \toks0 = \expandafter{\the\toks0 \space #3}% - \fi - % - % Process the index entry with all font commands turned off, to - % get the string to sort by. - {\indexnofonts - \edef\temp{\the\toks0}% need full expansion - \xdef\indexsorttmp{\temp}% - }% - % - % Set up the complete index entry, with both the sort key and - % the original text, including any font commands. We write - % three arguments to \entry to the .?? file (four in the - % subentry case), texindex reduces to two when writing the .??s - % sorted result. - \edef\temp{% - \write\csname#1indfile\endcsname{% - \realbackslash entry{\indexsorttmp}{\folio}{\the\toks0}}% - }% - % - % If a skip is the last thing on the list now, preserve it - % by backing up by \lastskip, doing the \write, then inserting - % the skip again. Otherwise, the whatsit generated by the - % \write will make \lastskip zero. The result is that sequences - % like this: - % @end defun - % @tindex whatever - % @defun ... - % will have extra space inserted, because the \medbreak in the - % start of the @defun won't see the skip inserted by the @end of - % the previous defun. - % - % But don't do any of this if we're not in vertical mode. We - % don't want to do a \vskip and prematurely end a paragraph. - % - % Avoid page breaks due to these extra skips, too. - % - \iflinks - \ifvmode - \skip0 = \lastskip - \ifdim\lastskip = 0pt \else \nobreak\vskip-\skip0 \fi - \fi - % - \temp % do the write - % - \ifvmode \ifdim\skip0 = 0pt \else \nobreak\vskip\skip0 \fi \fi - \fi - }% - }% - \penalty\count255 - }% -} - -% The index entry written in the file actually looks like -% \entry {sortstring}{page}{topic} -% or -% \entry {sortstring}{page}{topic}{subtopic} -% The texindex program reads in these files and writes files -% containing these kinds of lines: -% \initial {c} -% before the first topic whose initial is c -% \entry {topic}{pagelist} -% for a topic that is used without subtopics -% \primary {topic} -% for the beginning of a topic that is used with subtopics -% \secondary {subtopic}{pagelist} -% for each subtopic. - -% Define the user-accessible indexing commands -% @findex, @vindex, @kindex, @cindex. - -\def\findex {\fnindex} -\def\kindex {\kyindex} -\def\cindex {\cpindex} -\def\vindex {\vrindex} -\def\tindex {\tpindex} -\def\pindex {\pgindex} - -\def\cindexsub {\begingroup\obeylines\cindexsub} -{\obeylines % -\gdef\cindexsub "#1" #2^^M{\endgroup % -\dosubind{cp}{#2}{#1}}} - -% Define the macros used in formatting output of the sorted index material. - -% @printindex causes a particular index (the ??s file) to get printed. -% It does not print any chapter heading (usually an @unnumbered). -% -\def\printindex{\parsearg\doprintindex} -\def\doprintindex#1{\begingroup - \dobreak \chapheadingskip{10000}% - % - \smallfonts \rm - \tolerance = 9500 - \everypar = {}% don't want the \kern\-parindent from indentation suppression. - \indexbreaks - % - % See if the index file exists and is nonempty. - % Change catcode of @ here so that if the index file contains - % \initial {@} - % as its first line, TeX doesn't complain about mismatched braces - % (because it thinks @} is a control sequence). - \catcode`\@ = 11 - \openin 1 \jobname.#1s - \ifeof 1 - % \enddoublecolumns gets confused if there is no text in the index, - % and it loses the chapter title and the aux file entries for the - % index. The easiest way to prevent this problem is to make sure - % there is some text. - \putwordIndexNonexistent - \else - % - % If the index file exists but is empty, then \openin leaves \ifeof - % false. We have to make TeX try to read something from the file, so - % it can discover if there is anything in it. - \read 1 to \temp - \ifeof 1 - \putwordIndexIsEmpty - \else - % Index files are almost Texinfo source, but we use \ as the escape - % character. It would be better to use @, but that's too big a change - % to make right now. - \def\indexbackslash{\rawbackslashxx}% - \catcode`\\ = 0 - \escapechar = `\\ - \begindoublecolumns - \input \jobname.#1s - \enddoublecolumns - \fi - \fi - \closein 1 -\endgroup} - -% These macros are used by the sorted index file itself. -% Change them to control the appearance of the index. - -\def\initial#1{{% - % Some minor font changes for the special characters. - \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt - % - % Remove any glue we may have, we'll be inserting our own. - \removelastskip - % - % We like breaks before the index initials, so insert a bonus. - \penalty -300 - % - % Typeset the initial. Making this add up to a whole number of - % baselineskips increases the chance of the dots lining up from column - % to column. It still won't often be perfect, because of the stretch - % we need before each entry, but it's better. - % - % No shrink because it confuses \balancecolumns. - \vskip 1.67\baselineskip plus .5\baselineskip - \leftline{\secbf #1}% - \vskip .33\baselineskip plus .1\baselineskip - % - % Do our best not to break after the initial. - \nobreak -}} - -% This typesets a paragraph consisting of #1, dot leaders, and then #2 -% flush to the right margin. It is used for index and table of contents -% entries. The paragraph is indented by \leftskip. -% -\def\entry#1#2{\begingroup - % - % Start a new paragraph if necessary, so our assignments below can't - % affect previous text. - \par - % - % Do not fill out the last line with white space. - \parfillskip = 0in - % - % No extra space above this paragraph. - \parskip = 0in - % - % Do not prefer a separate line ending with a hyphen to fewer lines. - \finalhyphendemerits = 0 - % - % \hangindent is only relevant when the entry text and page number - % don't both fit on one line. In that case, bob suggests starting the - % dots pretty far over on the line. Unfortunately, a large - % indentation looks wrong when the entry text itself is broken across - % lines. So we use a small indentation and put up with long leaders. - % - % \hangafter is reset to 1 (which is the value we want) at the start - % of each paragraph, so we need not do anything with that. - \hangindent = 2em - % - % When the entry text needs to be broken, just fill out the first line - % with blank space. - \rightskip = 0pt plus1fil - % - % A bit of stretch before each entry for the benefit of balancing columns. - \vskip 0pt plus1pt - % - % Start a ``paragraph'' for the index entry so the line breaking - % parameters we've set above will have an effect. - \noindent - % - % Insert the text of the index entry. TeX will do line-breaking on it. - #1% - % The following is kludged to not output a line of dots in the index if - % there are no page numbers. The next person who breaks this will be - % cursed by a Unix daemon. - \def\tempa{{\rm }}% - \def\tempb{#2}% - \edef\tempc{\tempa}% - \edef\tempd{\tempb}% - \ifx\tempc\tempd\ \else% - % - % If we must, put the page number on a line of its own, and fill out - % this line with blank space. (The \hfil is overwhelmed with the - % fill leaders glue in \indexdotfill if the page number does fit.) - \hfil\penalty50 - \null\nobreak\indexdotfill % Have leaders before the page number. - % - % The `\ ' here is removed by the implicit \unskip that TeX does as - % part of (the primitive) \par. Without it, a spurious underfull - % \hbox ensues. - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - \ #2% The page number ends the paragraph. - \fi - \fi% - \par -\endgroup} - -% Like \dotfill except takes at least 1 em. -\def\indexdotfill{\cleaders - \hbox{$\mathsurround=0pt \mkern1.5mu ${\it .}$ \mkern1.5mu$}\hskip 1em plus 1fill} - -\def\primary #1{\line{#1\hfil}} - -\newskip\secondaryindent \secondaryindent=0.5cm -\def\secondary#1#2{{% - \parfillskip=0in - \parskip=0in - \hangindent=1in - \hangafter=1 - \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill - \ifpdf - \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. - \else - #2 - \fi - \par -}} - -% Define two-column mode, which we use to typeset indexes. -% Adapted from the TeXbook, page 416, which is to say, -% the manmac.tex format used to print the TeXbook itself. -\catcode`\@=11 - -\newbox\partialpage -\newdimen\doublecolumnhsize - -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns - % Grab any single-column material above us. - \output = {% - % - % Here is a possibility not foreseen in manmac: if we accumulate a - % whole lot of material, we might end up calling this \output - % routine twice in a row (see the doublecol-lose test, which is - % essentially a couple of indexes with @setchapternewpage off). In - % that case we just ship out what is in \partialpage with the normal - % output routine. Generally, \partialpage will be empty when this - % runs and this will be a no-op. See the indexspread.tex test case. - \ifvoid\partialpage \else - \onepageout{\pagecontents\partialpage}% - \fi - % - \global\setbox\partialpage = \vbox{% - % Unvbox the main output page. - \unvbox\PAGE - \kern-\topskip \kern\baselineskip - }% - }% - \eject % run that output routine to set \partialpage - % - % Use the double-column output routine for subsequent pages. - \output = {\doublecolumnout}% - % - % Change the page size parameters. We could do this once outside this - % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 - % format, but then we repeat the same computation. Repeating a couple - % of assignments once per index is clearly meaningless for the - % execution time, so we may as well do it in one place. - % - % First we halve the line length, less a little for the gutter between - % the columns. We compute the gutter based on the line length, so it - % changes automatically with the paper format. The magic constant - % below is chosen so that the gutter has the same value (well, +-<1pt) - % as it did when we hard-coded it. - % - % We put the result in a separate register, \doublecolumhsize, so we - % can restore it in \pagesofar, after \hsize itself has (potentially) - % been clobbered. - % - \doublecolumnhsize = \hsize - \advance\doublecolumnhsize by -.04154\hsize - \divide\doublecolumnhsize by 2 - \hsize = \doublecolumnhsize - % - % Double the \vsize as well. (We don't need a separate register here, - % since nobody clobbers \vsize.) - \vsize = 2\vsize -} - -% The double-column output routine for all double-column pages except -% the last. -% -\def\doublecolumnout{% - \splittopskip=\topskip \splitmaxdepth=\maxdepth - % Get the available space for the double columns -- the normal - % (undoubled) page height minus any material left over from the - % previous page. - \dimen@ = \vsize - \divide\dimen@ by 2 - \advance\dimen@ by -\ht\partialpage - % - % box0 will be the left-hand column, box2 the right. - \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ - \onepageout\pagesofar - \unvbox255 - \penalty\outputpenalty -} -% -% Re-output the contents of the output page -- any previous material, -% followed by the two boxes we just split, in box0 and box2. -\def\pagesofar{% - \unvbox\partialpage - % - \hsize = \doublecolumnhsize - \wd0=\hsize \wd2=\hsize - \hbox to\pagewidth{\box0\hfil\box2}% -} -% -% All done with double columns. -\def\enddoublecolumns{% - \output = {% - % Split the last of the double-column material. Leave it on the - % current page, no automatic page break. - \balancecolumns - % - % If we end up splitting too much material for the current page, - % though, there will be another page break right after this \output - % invocation ends. Having called \balancecolumns once, we do not - % want to call it again. Therefore, reset \output to its normal - % definition right away. (We hope \balancecolumns will never be - % called on to balance too much material, but if it is, this makes - % the output somewhat more palatable.) - \global\output = {\onepageout{\pagecontents\PAGE}}% - }% - \eject - \endgroup % started in \begindoublecolumns - % - % \pagegoal was set to the doubled \vsize above, since we restarted - % the current page. We're now back to normal single-column - % typesetting, so reset \pagegoal to the normal \vsize (after the - % \endgroup where \vsize got restored). - \pagegoal = \vsize -} -% -% Called at the end of the double column material. -\def\balancecolumns{% - \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. - \dimen@ = \ht0 - \advance\dimen@ by \topskip - \advance\dimen@ by-\baselineskip - \divide\dimen@ by 2 % target to split to - %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% - \splittopskip = \topskip - % Loop until we get a decent breakpoint. - {% - \vbadness = 10000 - \loop - \global\setbox3 = \copy0 - \global\setbox1 = \vsplit3 to \dimen@ - \ifdim\ht3>\dimen@ - \global\advance\dimen@ by 1pt - \repeat - }% - %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% - \setbox0=\vbox to\dimen@{\unvbox1}% - \setbox2=\vbox to\dimen@{\unvbox3}% - % - \pagesofar -} -\catcode`\@ = \other - - -\message{sectioning,} -% Chapters, sections, etc. - -\newcount\chapno -\newcount\secno \secno=0 -\newcount\subsecno \subsecno=0 -\newcount\subsubsecno \subsubsecno=0 - -% This counter is funny since it counts through charcodes of letters A, B, ... -\newcount\appendixno \appendixno = `\@ -% \def\appendixletter{\char\the\appendixno} -% We do the following for the sake of pdftex, which needs the actual -% letter in the expansion, not just typeset. -\def\appendixletter{% - \ifnum\appendixno=`A A% - \else\ifnum\appendixno=`B B% - \else\ifnum\appendixno=`C C% - \else\ifnum\appendixno=`D D% - \else\ifnum\appendixno=`E E% - \else\ifnum\appendixno=`F F% - \else\ifnum\appendixno=`G G% - \else\ifnum\appendixno=`H H% - \else\ifnum\appendixno=`I I% - \else\ifnum\appendixno=`J J% - \else\ifnum\appendixno=`K K% - \else\ifnum\appendixno=`L L% - \else\ifnum\appendixno=`M M% - \else\ifnum\appendixno=`N N% - \else\ifnum\appendixno=`O O% - \else\ifnum\appendixno=`P P% - \else\ifnum\appendixno=`Q Q% - \else\ifnum\appendixno=`R R% - \else\ifnum\appendixno=`S S% - \else\ifnum\appendixno=`T T% - \else\ifnum\appendixno=`U U% - \else\ifnum\appendixno=`V V% - \else\ifnum\appendixno=`W W% - \else\ifnum\appendixno=`X X% - \else\ifnum\appendixno=`Y Y% - \else\ifnum\appendixno=`Z Z% - % The \the is necessary, despite appearances, because \appendixletter is - % expanded while writing the .toc file. \char\appendixno is not - % expandable, thus it is written literally, thus all appendixes come out - % with the same letter (or @) in the toc without it. - \else\char\the\appendixno - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi - \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} - -% Each @chapter defines this as the name of the chapter. -% page headings and footings can use it. @section does likewise. -\def\thischapter{} -\def\thissection{} - -\newcount\absseclevel % used to calculate proper heading level -\newcount\secbase\secbase=0 % @raise/lowersections modify this count - -% @raisesections: treat @section as chapter, @subsection as section, etc. -\def\raisesections{\global\advance\secbase by -1} -\let\up=\raisesections % original BFox name - -% @lowersections: treat @chapter as section, @section as subsection, etc. -\def\lowersections{\global\advance\secbase by 1} -\let\down=\lowersections % original BFox name - -% Choose a numbered-heading macro -% #1 is heading level if unmodified by @raisesections or @lowersections -% #2 is text for heading -\def\numhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \chapterzzz{#2} -\or - \seczzz{#2} -\or - \numberedsubseczzz{#2} -\or - \numberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \chapterzzz{#2} - \else - \numberedsubsubseczzz{#2} - \fi -\fi -\suppressfirstparagraphindent -} - -% like \numhead, but chooses appendix heading levels -\def\apphead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \appendixzzz{#2} -\or - \appendixsectionzzz{#2} -\or - \appendixsubseczzz{#2} -\or - \appendixsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \appendixzzz{#2} - \else - \appendixsubsubseczzz{#2} - \fi -\fi -\suppressfirstparagraphindent -} - -% like \numhead, but chooses numberless heading levels -\def\unnmhead#1#2{\absseclevel=\secbase\advance\absseclevel by #1 -\ifcase\absseclevel - \unnumberedzzz{#2} -\or - \unnumberedseczzz{#2} -\or - \unnumberedsubseczzz{#2} -\or - \unnumberedsubsubseczzz{#2} -\else - \ifnum \absseclevel<0 - \unnumberedzzz{#2} - \else - \unnumberedsubsubseczzz{#2} - \fi -\fi -\suppressfirstparagraphindent -} - -% @chapter, @appendix, @unnumbered. -\def\thischaptername{No Chapter Title} -\outer\def\chapter{\parsearg\chapteryyy} -\def\chapteryyy #1{\numhead0{#1}} % normally numhead0 calls chapterzzz -\def\chapterzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 - \global\advance \chapno by 1 \message{\putwordChapter\space \the\chapno}% - \chapmacro {#1}{\the\chapno}% - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - % We don't substitute the actual chapter name into \thischapter - % because we don't want its macros evaluated now. - \xdef\thischapter{\putwordChapter{} \the\chapno: \noexpand\thischaptername}% - \writetocentry{chap}{#1}{{\the\chapno}} - \donoderef - \global\let\section = \numberedsec - \global\let\subsection = \numberedsubsec - \global\let\subsubsection = \numberedsubsubsec -} - -% we use \chapno to avoid indenting back -\def\appendixbox#1{% - \setbox0 = \hbox{\putwordAppendix{} \the\chapno}% - \hbox to \wd0{#1\hss}} - -\outer\def\appendix{\parsearg\appendixyyy} -\def\appendixyyy #1{\apphead0{#1}} % normally apphead0 calls appendixzzz -\def\appendixzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 - \global\advance \appendixno by 1 - \message{\putwordAppendix\space \appendixletter}% - \chapmacro {#1}{\appendixbox{\putwordAppendix{} \appendixletter}}% - \gdef\thissection{#1}% - \gdef\thischaptername{#1}% - \xdef\thischapter{\putwordAppendix{} \appendixletter: \noexpand\thischaptername}% - \writetocentry{appendix}{#1}{{\appendixletter}} - \appendixnoderef - \global\let\section = \appendixsec - \global\let\subsection = \appendixsubsec - \global\let\subsubsection = \appendixsubsubsec -} - -% @centerchap is like @unnumbered, but the heading is centered. -\outer\def\centerchap{\parsearg\centerchapyyy} -\def\centerchapyyy #1{{\let\unnumbchapmacro=\centerchapmacro \unnumberedyyy{#1}}} - -% @top is like @unnumbered. -\outer\def\top{\parsearg\unnumberedyyy} - -\outer\def\unnumbered{\parsearg\unnumberedyyy} -\def\unnumberedyyy #1{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz -\def\unnumberedzzz #1{% - \secno=0 \subsecno=0 \subsubsecno=0 - % - % This used to be simply \message{#1}, but TeX fully expands the - % argument to \message. Therefore, if #1 contained @-commands, TeX - % expanded them. For example, in `@unnumbered The @cite{Book}', TeX - % expanded @cite (which turns out to cause errors because \cite is meant - % to be executed, not expanded). - % - % Anyway, we don't want the fully-expanded definition of @cite to appear - % as a result of the \message, we just want `@cite' itself. We use - % \the to achieve this: TeX expands \the only once, - % simply yielding the contents of . (We also do this for - % the toc entries.) - \toks0 = {#1}\message{(\the\toks0)}% - % - \unnumbchapmacro {#1}% - \gdef\thischapter{#1}\gdef\thissection{#1}% - \writetocentry{unnumbchap}{#1}{{\the\chapno}} - \unnumbnoderef - \global\let\section = \unnumberedsec - \global\let\subsection = \unnumberedsubsec - \global\let\subsubsection = \unnumberedsubsubsec -} - -% Sections. -\outer\def\numberedsec{\parsearg\secyyy} -\def\secyyy #1{\numhead1{#1}} % normally calls seczzz -\def\seczzz #1{% - \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % - \gdef\thissection{#1}\secheading {#1}{\the\chapno}{\the\secno}% - \writetocentry{sec}{#1}{{\the\chapno}{\the\secno}} - \donoderef - \nobreak -} - -\outer\def\appendixsection{\parsearg\appendixsecyyy} -\outer\def\appendixsec{\parsearg\appendixsecyyy} -\def\appendixsecyyy #1{\apphead1{#1}} % normally calls appendixsectionzzz -\def\appendixsectionzzz #1{% - \subsecno=0 \subsubsecno=0 \global\advance \secno by 1 % - \gdef\thissection{#1}\secheading {#1}{\appendixletter}{\the\secno}% - \writetocentry{sec}{#1}{{\appendixletter}{\the\secno}} - \appendixnoderef - \nobreak -} - -\outer\def\unnumberedsec{\parsearg\unnumberedsecyyy} -\def\unnumberedsecyyy #1{\unnmhead1{#1}} % normally calls unnumberedseczzz -\def\unnumberedseczzz #1{% - \plainsecheading {#1}\gdef\thissection{#1}% - \writetocentry{unnumbsec}{#1}{{\the\chapno}{\the\secno}} - \unnumbnoderef - \nobreak -} - -% Subsections. -\outer\def\numberedsubsec{\parsearg\numberedsubsecyyy} -\def\numberedsubsecyyy #1{\numhead2{#1}} % normally calls numberedsubseczzz -\def\numberedsubseczzz #1{% - \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % - \subsecheading {#1}{\the\chapno}{\the\secno}{\the\subsecno}% - \writetocentry{subsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}} - \donoderef - \nobreak -} - -\outer\def\appendixsubsec{\parsearg\appendixsubsecyyy} -\def\appendixsubsecyyy #1{\apphead2{#1}} % normally calls appendixsubseczzz -\def\appendixsubseczzz #1{% - \gdef\thissection{#1}\subsubsecno=0 \global\advance \subsecno by 1 % - \subsecheading {#1}{\appendixletter}{\the\secno}{\the\subsecno}% - \writetocentry{subsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}} - \appendixnoderef - \nobreak -} - -\outer\def\unnumberedsubsec{\parsearg\unnumberedsubsecyyy} -\def\unnumberedsubsecyyy #1{\unnmhead2{#1}} %normally calls unnumberedsubseczzz -\def\unnumberedsubseczzz #1{% - \plainsubsecheading {#1}\gdef\thissection{#1}% - \writetocentry{unnumbsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}} - \unnumbnoderef - \nobreak -} - -% Subsubsections. -\outer\def\numberedsubsubsec{\parsearg\numberedsubsubsecyyy} -\def\numberedsubsubsecyyy #1{\numhead3{#1}} % normally numberedsubsubseczzz -\def\numberedsubsubseczzz #1{% - \gdef\thissection{#1}\global\advance \subsubsecno by 1 % - \subsubsecheading {#1} - {\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}% - \writetocentry{subsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}} - \donoderef - \nobreak -} - -\outer\def\appendixsubsubsec{\parsearg\appendixsubsubsecyyy} -\def\appendixsubsubsecyyy #1{\apphead3{#1}} % normally appendixsubsubseczzz -\def\appendixsubsubseczzz #1{% - \gdef\thissection{#1}\global\advance \subsubsecno by 1 % - \subsubsecheading {#1} - {\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}% - \writetocentry{subsubsec}{#1}{{\appendixletter}{\the\secno}{\the\subsecno}{\the\subsubsecno}} - \appendixnoderef - \nobreak -} - -\outer\def\unnumberedsubsubsec{\parsearg\unnumberedsubsubsecyyy} -\def\unnumberedsubsubsecyyy #1{\unnmhead3{#1}} %normally unnumberedsubsubseczzz -\def\unnumberedsubsubseczzz #1{% - \plainsubsubsecheading {#1}\gdef\thissection{#1}% - \writetocentry{unnumbsubsubsec}{#1}{{\the\chapno}{\the\secno}{\the\subsecno}{\the\subsubsecno}} - \unnumbnoderef - \nobreak -} - -% These are variants which are not "outer", so they can appear in @ifinfo. -% Actually, they should now be obsolete; ordinary section commands should work. -\def\infotop{\parsearg\unnumberedzzz} -\def\infounnumbered{\parsearg\unnumberedzzz} -\def\infounnumberedsec{\parsearg\unnumberedseczzz} -\def\infounnumberedsubsec{\parsearg\unnumberedsubseczzz} -\def\infounnumberedsubsubsec{\parsearg\unnumberedsubsubseczzz} - -\def\infoappendix{\parsearg\appendixzzz} -\def\infoappendixsec{\parsearg\appendixseczzz} -\def\infoappendixsubsec{\parsearg\appendixsubseczzz} -\def\infoappendixsubsubsec{\parsearg\appendixsubsubseczzz} - -\def\infochapter{\parsearg\chapterzzz} -\def\infosection{\parsearg\sectionzzz} -\def\infosubsection{\parsearg\subsectionzzz} -\def\infosubsubsection{\parsearg\subsubsectionzzz} - -% These macros control what the section commands do, according -% to what kind of chapter we are in (ordinary, appendix, or unnumbered). -% Define them by default for a numbered chapter. -\global\let\section = \numberedsec -\global\let\subsection = \numberedsubsec -\global\let\subsubsection = \numberedsubsubsec - -% Define @majorheading, @heading and @subheading - -% NOTE on use of \vbox for chapter headings, section headings, and such: -% 1) We use \vbox rather than the earlier \line to permit -% overlong headings to fold. -% 2) \hyphenpenalty is set to 10000 because hyphenation in a -% heading is obnoxious; this forbids it. -% 3) Likewise, headings look best if no \parindent is used, and -% if justification is not attempted. Hence \raggedright. - - -\def\majorheading{% - {\advance\chapheadingskip by 10pt \chapbreak }% - \parsearg\chapheadingzzz -} - -\def\chapheading{\chapbreak \parsearg\chapheadingzzz} -\def\chapheadingzzz #1{% - {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}% - \bigskip \par\penalty 200\relax - \suppressfirstparagraphindent -} - -% @heading, @subheading, @subsubheading. -\def\heading{\parsearg\doheading} -\def\subheading{\parsearg\dosubheading} -\def\subsubheading{\parsearg\dosubsubheading} -\def\doheading#1{\plainsecheading{#1}\suppressfirstparagraphindent} -\def\dosubheading#1{\plainsubsecheading{#1}\suppressfirstparagraphindent} -\def\dosubsubheading#1{\plainsubsubsecheading{#1}\suppressfirstparagraphindent} - -% These macros generate a chapter, section, etc. heading only -% (including whitespace, linebreaking, etc. around it), -% given all the information in convenient, parsed form. - -%%% Args are the skip and penalty (usually negative) -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} - -\def\setchapterstyle #1 {\csname CHAPF#1\endcsname} - -%%% Define plain chapter starts, and page on/off switching for it -% Parameter controlling skip before chapter headings (if needed) - -\newskip\chapheadingskip - -\def\chapbreak{\dobreak \chapheadingskip {-4000}} -\def\chappager{\par\vfill\supereject} -\def\chapoddpage{\chappager \ifodd\pageno \else \hbox to 0pt{} \chappager\fi} - -\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} - -\def\CHAPPAGoff{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chapbreak -\global\let\pagealignmacro=\chappager} - -\def\CHAPPAGon{% -\global\let\contentsalignmacro = \chappager -\global\let\pchapsepmacro=\chappager -\global\let\pagealignmacro=\chappager -\global\def\HEADINGSon{\HEADINGSsingle}} - -\def\CHAPPAGodd{ -\global\let\contentsalignmacro = \chapoddpage -\global\let\pchapsepmacro=\chapoddpage -\global\let\pagealignmacro=\chapoddpage -\global\def\HEADINGSon{\HEADINGSdouble}} - -\CHAPPAGon - -\def\CHAPFplain{ -\global\let\chapmacro=\chfplain -\global\let\unnumbchapmacro=\unnchfplain -\global\let\centerchapmacro=\centerchfplain} - -% Plain chapter opening. -% #1 is the text, #2 the chapter number or empty if unnumbered. -\def\chfplain#1#2{% - \pchapsepmacro - {% - \chapfonts \rm - \def\chapnum{#2}% - \setbox0 = \hbox{#2\ifx\chapnum\empty\else\enspace\fi}% - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 \centerparametersmaybe - \unhbox0 #1\par}% - }% - \nobreak\bigskip % no page break after a chapter title - \nobreak -} - -% Plain opening for unnumbered. -\def\unnchfplain#1{\chfplain{#1}{}} - -% @centerchap -- centered and unnumbered. -\let\centerparametersmaybe = \relax -\def\centerchfplain#1{{% - \def\centerparametersmaybe{% - \advance\rightskip by 3\rightskip - \leftskip = \rightskip - \parfillskip = 0pt - }% - \chfplain{#1}{}% -}} - -\CHAPFplain % The default - -\def\unnchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt\raggedright - \rm #1\hfill}}\bigskip \par\nobreak -} - -\def\chfopen #1#2{\chapoddpage {\chapfonts -\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% -\par\penalty 5000 % -} - -\def\centerchfopen #1{% -\chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 - \parindent=0pt - \hfill {\rm #1}\hfill}}\bigskip \par\nobreak -} - -\def\CHAPFopen{ -\global\let\chapmacro=\chfopen -\global\let\unnumbchapmacro=\unnchfopen -\global\let\centerchapmacro=\centerchfopen} - - -% Section titles. -\newskip\secheadingskip -\def\secheadingbreak{\dobreak \secheadingskip {-1000}} -\def\secheading#1#2#3{\sectionheading{sec}{#2.#3}{#1}} -\def\plainsecheading#1{\sectionheading{sec}{}{#1}} - -% Subsection titles. -\newskip \subsecheadingskip -\def\subsecheadingbreak{\dobreak \subsecheadingskip {-500}} -\def\subsecheading#1#2#3#4{\sectionheading{subsec}{#2.#3.#4}{#1}} -\def\plainsubsecheading#1{\sectionheading{subsec}{}{#1}} - -% Subsubsection titles. -\let\subsubsecheadingskip = \subsecheadingskip -\let\subsubsecheadingbreak = \subsecheadingbreak -\def\subsubsecheading#1#2#3#4#5{\sectionheading{subsubsec}{#2.#3.#4.#5}{#1}} -\def\plainsubsubsecheading#1{\sectionheading{subsubsec}{}{#1}} - - -% Print any size section title. -% -% #1 is the section type (sec/subsec/subsubsec), #2 is the section -% number (maybe empty), #3 the text. -\def\sectionheading#1#2#3{% - {% - \expandafter\advance\csname #1headingskip\endcsname by \parskip - \csname #1headingbreak\endcsname - }% - {% - % Switch to the right set of fonts. - \csname #1fonts\endcsname \rm - % - % Only insert the separating space if we have a section number. - \def\secnum{#2}% - \setbox0 = \hbox{#2\ifx\secnum\empty\else\enspace\fi}% - % - \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright - \hangindent = \wd0 % zero if no section number - \unhbox0 #3}% - }% - % Add extra space after the heading -- either a line space or a - % paragraph space, whichever is more. (Some people like to set - % \parskip to large values for some reason.) Don't allow stretch, though. - \nobreak - \ifdim\parskip>\normalbaselineskip - \kern\parskip - \else - \kern\normalbaselineskip - \fi - \nobreak -} - - -\message{toc,} -% Table of contents. -\newwrite\tocfile - -% Write an entry to the toc file, opening it if necessary. -% Called from @chapter, etc. We supply {\folio} at the end of the -% argument, which will end up as the last argument to the \...entry macro. -% -% Usage: \writetocentry{chap}{The Name of The Game}{{\the\chapno}} -% We open the .toc file for writing here instead of at @setfilename (or -% any other fixed time) so that @contents can be anywhere in the document. -% -\newif\iftocfileopened -\def\writetocentry#1#2#3{% - \iftocfileopened\else - \immediate\openout\tocfile = \jobname.toc - \global\tocfileopenedtrue - \fi - % - \iflinks - \toks0 = {#2}% - \edef\temp{\write\tocfile{\realbackslash #1entry{\the\toks0}#3{\folio}}}% - \temp - \fi - % - % Tell \shipout to create a page destination if we're doing pdf, which - % will be the target of the links in the table of contents. We can't - % just do it on every page because the title pages are numbered 1 and - % 2 (the page numbers aren't printed), and so are the first two pages - % of the document. Thus, we'd have two destinations named `1', and - % two named `2'. - \ifpdf \pdfmakepagedesttrue \fi -} - -\newskip\contentsrightmargin \contentsrightmargin=1in -\newcount\savepageno -\newcount\lastnegativepageno \lastnegativepageno = -1 - -% Finish up the main text and prepare to read what we've written -% to \tocfile. -% -\def\startcontents#1{% - % If @setchapternewpage on, and @headings double, the contents should - % start on an odd page, unlike chapters. Thus, we maintain - % \contentsalignmacro in parallel with \pagealignmacro. - % From: Torbjorn Granlund - \contentsalignmacro - \immediate\closeout\tocfile - % - % Don't need to put `Contents' or `Short Contents' in the headline. - % It is abundantly clear what they are. - \unnumbchapmacro{#1}\def\thischapter{}% - \savepageno = \pageno - \begingroup % Set up to handle contents files properly. - \catcode`\\=0 \catcode`\{=1 \catcode`\}=2 \catcode`\@=11 - % We can't do this, because then an actual ^ in a section - % title fails, e.g., @chapter ^ -- exponentiation. --karl, 9jul97. - %\catcode`\^=7 % to see ^^e4 as \"a etc. juha@piuha.ydi.vtt.fi - \raggedbottom % Worry more about breakpoints than the bottom. - \advance\hsize by -\contentsrightmargin % Don't use the full line length. - % - % Roman numerals for page numbers. - \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi -} - - -% Normal (long) toc. -\def\contents{% - \startcontents{\putwordTOC}% - \openin 1 \jobname.toc - \ifeof 1 \else - \closein 1 - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \pdfmakeoutlines - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} - -% And just the chapters. -\def\summarycontents{% - \startcontents{\putwordShortTOC}% - % - \let\chapentry = \shortchapentry - \let\appendixentry = \shortappendixentry - \let\unnumbchapentry = \shortunnumberedentry - % We want a true roman here for the page numbers. - \secfonts - \let\rm=\shortcontrm \let\bf=\shortcontbf - \let\sl=\shortcontsl \let\tt=\shortconttt - \rm - \hyphenpenalty = 10000 - \advance\baselineskip by 1pt % Open it up a little. - \def\secentry ##1##2##3##4{} - \def\subsecentry ##1##2##3##4##5{} - \def\subsubsecentry ##1##2##3##4##5##6{} - \let\unnumbsecentry = \secentry - \let\unnumbsubsecentry = \subsecentry - \let\unnumbsubsubsecentry = \subsubsecentry - \openin 1 \jobname.toc - \ifeof 1 \else - \closein 1 - \input \jobname.toc - \fi - \vfill \eject - \contentsalignmacro % in case @setchapternewpage odd is in effect - \endgroup - \lastnegativepageno = \pageno - \global\pageno = \savepageno -} -\let\shortcontents = \summarycontents - -\ifpdf - \pdfcatalog{/PageMode /UseOutlines}% -\fi - -% These macros generate individual entries in the table of contents. -% The first argument is the chapter or section name. -% The last argument is the page number. -% The arguments in between are the chapter number, section number, ... - -% Chapters, in the main contents. -\def\chapentry#1#2#3{\dochapentry{#2\labelspace#1}{#3}} -% -% Chapters, in the short toc. -% See comments in \dochapentry re vbox and related settings. -\def\shortchapentry#1#2#3{% - \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#3\egroup}% -} - -% Appendices, in the main contents. -\def\appendixentry#1#2#3{% - \dochapentry{\appendixbox{\putwordAppendix{} #2}\labelspace#1}{#3}} -% -% Appendices, in the short toc. -\let\shortappendixentry = \shortchapentry - -% Typeset the label for a chapter or appendix for the short contents. -% The arg is, e.g., `Appendix A' for an appendix, or `3' for a chapter. -% We could simplify the code here by writing out an \appendixentry -% command in the toc file for appendices, instead of using \chapentry -% for both, but it doesn't seem worth it. -% -\newdimen\shortappendixwidth -% -\def\shortchaplabel#1{% - % This space should be enough, since a single number is .5em, and the - % widest letter (M) is 1em, at least in the Computer Modern fonts. - % But use \hss just in case. - % (This space doesn't include the extra space that gets added after - % the label; that gets put in by \shortchapentry above.) - \dimen0 = 1em - \hbox to \dimen0{#1\hss}% -} - -% Unnumbered chapters. -\def\unnumbchapentry#1#2#3{\dochapentry{#1}{#3}} -\def\shortunnumberedentry#1#2#3{\tocentry{#1}{\doshortpageno\bgroup#3\egroup}} - -% Sections. -\def\secentry#1#2#3#4{\dosecentry{#2.#3\labelspace#1}{#4}} -\def\unnumbsecentry#1#2#3#4{\dosecentry{#1}{#4}} - -% Subsections. -\def\subsecentry#1#2#3#4#5{\dosubsecentry{#2.#3.#4\labelspace#1}{#5}} -\def\unnumbsubsecentry#1#2#3#4#5{\dosubsecentry{#1}{#5}} - -% And subsubsections. -\def\subsubsecentry#1#2#3#4#5#6{% - \dosubsubsecentry{#2.#3.#4.#5\labelspace#1}{#6}} -\def\unnumbsubsubsecentry#1#2#3#4#5#6{\dosubsubsecentry{#1}{#6}} - -% This parameter controls the indentation of the various levels. -\newdimen\tocindent \tocindent = 3pc - -% Now for the actual typesetting. In all these, #1 is the text and #2 is the -% page number. -% -% If the toc has to be broken over pages, we want it to be at chapters -% if at all possible; hence the \penalty. -\def\dochapentry#1#2{% - \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip - \begingroup - \chapentryfonts - \tocentry{#1}{\dopageno\bgroup#2\egroup}% - \endgroup - \nobreak\vskip .25\baselineskip plus.1\baselineskip -} - -\def\dosecentry#1#2{\begingroup - \secentryfonts \leftskip=\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsecentry#1#2{\begingroup - \subsecentryfonts \leftskip=2\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -\def\dosubsubsecentry#1#2{\begingroup - \subsubsecentryfonts \leftskip=3\tocindent - \tocentry{#1}{\dopageno\bgroup#2\egroup}% -\endgroup} - -% Final typesetting of a toc entry; we use the same \entry macro as for -% the index entries, but we want to suppress hyphenation here. (We -% can't do that in the \entry macro, since index entries might consist -% of hyphenated-identifiers-that-do-not-fit-on-a-line-and-nothing-else.) -\def\tocentry#1#2{\begingroup - \vskip 0pt plus1pt % allow a little stretch for the sake of nice page breaks - % Do not use \turnoffactive in these arguments. Since the toc is - % typeset in cmr, characters such as _ would come out wrong; we - % have to do the usual translation tricks. - \entry{#1}{#2}% -\endgroup} - -% Space between chapter (or whatever) number and the title. -\def\labelspace{\hskip1em \relax} - -\def\dopageno#1{{\rm #1}} -\def\doshortpageno#1{{\rm #1}} - -\def\chapentryfonts{\secfonts \rm} -\def\secentryfonts{\textfonts} -\let\subsecentryfonts = \textfonts -\let\subsubsecentryfonts = \textfonts - - -\message{environments,} -% @foo ... @end foo. - -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}. -% -% Since these characters are used in examples, it should be an even number of -% \tt widths. Each \tt character is 1en, so two makes it 1em. -% -\def\point{$\star$} -\def\result{\leavevmode\raise.15ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} -\def\expansion{\leavevmode\raise.1ex\hbox to 1em{\hfil$\mapsto$\hfil}} -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} -\def\equiv{\leavevmode\lower.1ex\hbox to 1em{\hfil$\ptexequiv$\hfil}} - -% The @error{} command. -% Adapted from the TeXbook's \boxit. -% -\newbox\errorbox -% -{\tentt \global\dimen0 = 3em}% Width of the box. -\dimen2 = .55pt % Thickness of rules -% The text. (`r' is open on the right, `e' somewhat less so on the left.) -\setbox0 = \hbox{\kern-.75pt \tensf error\kern-1.5pt} -% -\global\setbox\errorbox=\hbox to \dimen0{\hfil - \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. - \advance\hsize by -2\dimen2 % Rules. - \vbox{ - \hrule height\dimen2 - \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. - \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. - \kern3pt\vrule width\dimen2}% Space to right. - \hrule height\dimen2} - \hfil} -% -\def\error{\leavevmode\lower.7ex\copy\errorbox} - -% @tex ... @end tex escapes into raw Tex temporarily. -% One exception: @ is still an escape character, so that @end tex works. -% But \@ or @@ will get a plain tex @ character. - -\def\tex{\begingroup - \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 - \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 - \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie - \catcode `\%=14 - \catcode `\+=\other - \catcode `\"=\other - \catcode `\==\other - \catcode `\|=\other - \catcode `\<=\other - \catcode `\>=\other - \escapechar=`\\ - % - \let\b=\ptexb - \let\bullet=\ptexbullet - \let\c=\ptexc - \let\,=\ptexcomma - \let\.=\ptexdot - \let\dots=\ptexdots - \let\equiv=\ptexequiv - \let\!=\ptexexclam - \let\i=\ptexi - \let\indent=\ptexindent - \let\{=\ptexlbrace - \let\+=\tabalign - \let\}=\ptexrbrace - \let\/=\ptexslash - \let\*=\ptexstar - \let\t=\ptext - % - \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% - \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% - \def\@{@}% -\let\Etex=\endgroup} - -% Define @lisp ... @end lisp. -% @lisp does a \begingroup so it can rebind things, -% including the definition of @end lisp (which normally is erroneous). - -% Amount to narrow the margins by for @lisp. -\newskip\lispnarrowing \lispnarrowing=0.4in - -% This is the definition that ^^M gets inside @lisp, @example, and other -% such environments. \null is better than a space, since it doesn't -% have any width. -\def\lisppar{\null\endgraf} - -% Make each space character in the input produce a normal interword -% space in the output. Don't allow a line break at this space, as this -% is used only in environments like @example, where each line of input -% should produce a line of output anyway. -% -{\obeyspaces % -\gdef\sepspaces{\obeyspaces\let =\tie}} - -% Define \obeyedspace to be our active space, whatever it is. This is -% for use in \parsearg. -{\sepspaces% -\global\let\obeyedspace= } - -% This space is always present above and below environments. -\newskip\envskipamount \envskipamount = 0pt - -% Make spacing and below environment symmetrical. We use \parskip here -% to help in doing that, since in @example-like environments \parskip -% is reset to zero; thus the \afterenvbreak inserts no space -- but the -% start of the next paragraph will insert \parskip. -% -\def\aboveenvbreak{{% - % =10000 instead of <10000 because of a special case in \itemzzz, q.v. - \ifnum \lastpenalty=10000 \else - \advance\envskipamount by \parskip - \endgraf - \ifdim\lastskip<\envskipamount - \removelastskip - % it's not a good place to break if the last penalty was \nobreak - % or better ... - \ifnum\lastpenalty>10000 \else \penalty-50 \fi - \vskip\envskipamount - \fi - \fi -}} - -\let\afterenvbreak = \aboveenvbreak - -% \nonarrowing is a flag. If "set", @lisp etc don't narrow margins. -\let\nonarrowing=\relax - -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around -% environment contents. -\font\circle=lcircle10 -\newdimen\circthick -\newdimen\cartouter\newdimen\cartinner -\newskip\normbskip\newskip\normpskip\newskip\normlskip -\circthick=\fontdimen8\circle -% -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth -\def\ctr{{\hskip 6pt\circle\char'010}} -\def\cbl{{\circle\char'012\hskip -6pt}} -\def\cbr{{\hskip 6pt\circle\char'011}} -\def\carttop{\hbox to \cartouter{\hskip\lskip - \ctl\leaders\hrule height\circthick\hfil\ctr - \hskip\rskip}} -\def\cartbot{\hbox to \cartouter{\hskip\lskip - \cbl\leaders\hrule height\circthick\hfil\cbr - \hskip\rskip}} -% -\newskip\lskip\newskip\rskip - -\def\cartouche{% -\par % can't be in the midst of a paragraph. -\begingroup - \lskip=\leftskip \rskip=\rightskip - \leftskip=0pt\rightskip=0pt %we want these *outside*. - \cartinner=\hsize \advance\cartinner by-\lskip - \advance\cartinner by-\rskip - \cartouter=\hsize - \advance\cartouter by 18.4pt % allow for 3pt kerns on either -% side, and for 6pt waste from -% each corner char, and rule thickness - \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip - % Flag to tell @lisp, etc., not to narrow margin. - \let\nonarrowing=\comment - \vbox\bgroup - \baselineskip=0pt\parskip=0pt\lineskip=0pt - \carttop - \hbox\bgroup - \hskip\lskip - \vrule\kern3pt - \vbox\bgroup - \hsize=\cartinner - \kern3pt - \begingroup - \baselineskip=\normbskip - \lineskip=\normlskip - \parskip=\normpskip - \vskip -\parskip -\def\Ecartouche{% - \endgroup - \kern3pt - \egroup - \kern3pt\vrule - \hskip\rskip - \egroup - \cartbot - \egroup -\endgroup -}} - - -% This macro is called at the beginning of all the @example variants, -% inside a group. -\def\nonfillstart{% - \aboveenvbreak - \inENV % This group ends at the end of the body - \hfuzz = 12pt % Don't be fussy - \sepspaces % Make spaces be word-separators rather than space tokens. - \let\par = \lisppar % don't ignore blank lines - \obeylines % each line of input is a line of output - \parskip = 0pt - \parindent = 0pt - \emergencystretch = 0pt % don't try to avoid overfull boxes - % @cartouche defines \nonarrowing to inhibit narrowing - % at next level down. - \ifx\nonarrowing\relax - \advance \leftskip by \lispnarrowing - \exdentamount=\lispnarrowing - \let\exdent=\nofillexdent - \let\nonarrowing=\relax - \fi -} - -% Define the \E... control sequence only if we are inside the particular -% environment, so the error checking in \end will work. -% -% To end an @example-like environment, we first end the paragraph (via -% \afterenvbreak's vertical glue), and then the group. That way we keep -% the zero \parskip that the environments set -- \parskip glue will be -% inserted at the beginning of the next paragraph in the document, after -% the environment. -% -\def\nonfillfinish{\afterenvbreak\endgroup} - -% @lisp: indented, narrowed, typewriter font. -\def\lisp{\begingroup - \nonfillstart - \let\Elisp = \nonfillfinish - \tt - \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. - \gobble % eat return -} - -% @example: Same as @lisp. -\def\example{\begingroup \def\Eexample{\nonfillfinish\endgroup}\lisp} - -% @smallexample and @smalllisp: use smaller fonts. -% Originally contributed by Pavel@xerox. -\def\smalllisp{\begingroup - \def\Esmalllisp{\nonfillfinish\endgroup}% - \def\Esmallexample{\nonfillfinish\endgroup}% - \smallexamplefonts - \lisp -} -\let\smallexample = \smalllisp - - -% @display: same as @lisp except keep current font. -% -\def\display{\begingroup - \nonfillstart - \let\Edisplay = \nonfillfinish - \gobble -} -% -% @smalldisplay: @display plus smaller fonts. -% -\def\smalldisplay{\begingroup - \def\Esmalldisplay{\nonfillfinish\endgroup}% - \smallexamplefonts \rm - \display -} - -% @format: same as @display except don't narrow margins. -% -\def\format{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eformat = \nonfillfinish - \gobble -} -% -% @smallformat: @format plus smaller fonts. -% -\def\smallformat{\begingroup - \def\Esmallformat{\nonfillfinish\endgroup}% - \smallexamplefonts \rm - \format -} - -% @flushleft (same as @format). -% -\def\flushleft{\begingroup \def\Eflushleft{\nonfillfinish\endgroup}\format} - -% @flushright. -% -\def\flushright{\begingroup - \let\nonarrowing = t - \nonfillstart - \let\Eflushright = \nonfillfinish - \advance\leftskip by 0pt plus 1fill - \gobble -} - - -% @quotation does normal linebreaking (hence we can't use \nonfillstart) -% and narrows the margins. -% -\def\quotation{% - \begingroup\inENV %This group ends at the end of the @quotation body - {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip - \parindent=0pt - % We have retained a nonzero parskip for the environment, since we're - % doing normal filling. So to avoid extra space below the environment... - \def\Equotation{\parskip = 0pt \nonfillfinish}% - % - % @cartouche defines \nonarrowing to inhibit narrowing at next level down. - \ifx\nonarrowing\relax - \advance\leftskip by \lispnarrowing - \advance\rightskip by \lispnarrowing - \exdentamount = \lispnarrowing - \let\nonarrowing = \relax - \fi -} - - -% LaTeX-like @verbatim...@end verbatim and @verb{...} -% If we want to allow any as delimiter, -% we need the curly braces so that makeinfo sees the @verb command, eg: -% `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org -% -% [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. -% -% [Knuth] p.344; only we need to do the other characters Texinfo sets -% active too. Otherwise, they get lost as the first character on a -% verbatim line. -\def\dospecials{% - \do\ \do\\\do\{\do\}\do\$\do\&% - \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% - \do\<\do\>\do\|\do\@\do+\do\"% -} -% -% [Knuth] p. 380 -\def\uncatcodespecials{% - \def\do##1{\catcode`##1=12}\dospecials} -% -% [Knuth] pp. 380,381,391 -% Disable Spanish ligatures ?` and !` of \tt font -\begingroup - \catcode`\`=\active\gdef`{\relax\lq} -\endgroup -% -% Setup for the @verb command. -% -% Eight spaces for a tab -\begingroup - \catcode`\^^I=\active - \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} -\endgroup -% -\def\setupverb{% - \tt % easiest (and conventionally used) font for verbatim - \def\par{\leavevmode\endgraf}% - \catcode`\`=\active - \tabeightspaces - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces -} - -% Setup for the @verbatim environment -% -% Real tab expansion -\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount -% -\def\starttabbox{\setbox0=\hbox\bgroup} -\begingroup - \catcode`\^^I=\active - \gdef\tabexpand{% - \catcode`\^^I=\active - \def^^I{\leavevmode\egroup - \dimen0=\wd0 % the width so far, or since the previous tab - \divide\dimen0 by\tabw - \multiply\dimen0 by\tabw % compute previous multiple of \tabw - \advance\dimen0 by\tabw % advance to next multiple of \tabw - \wd0=\dimen0 \box0 \starttabbox - }% - } -\endgroup -\def\setupverbatim{% - % Easiest (and conventionally used) font for verbatim - \tt - \def\par{\leavevmode\egroup\box0\endgraf}% - \catcode`\`=\active - \tabexpand - % Respect line breaks, - % print special symbols as themselves, and - % make each space count - % must do in this order: - \obeylines \uncatcodespecials \sepspaces - \everypar{\starttabbox}% -} - -% Do the @verb magic: verbatim text is quoted by unique -% delimiter characters. Before first delimiter expect a -% right brace, after last delimiter expect closing brace: -% -% \def\doverb'{'#1'}'{#1} -% -% [Knuth] p. 382; only eat outer {} -\begingroup - \catcode`[=1\catcode`]=2\catcode`\{=12\catcode`\}=12 - \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] -\endgroup -% -\def\verb{\begingroup\setupverb\doverb} -% -% -% Do the @verbatim magic: define the macro \doverbatim so that -% the (first) argument ends when '@end verbatim' is reached, ie: -% -% \def\doverbatim#1@end verbatim{#1} -% -% For Texinfo it's a lot easier than for LaTeX, -% because texinfo's \verbatim doesn't stop at '\end{verbatim}': -% we need not redefine '\', '{' and '}'. -% -% Inspired by LaTeX's verbatim command set [latex.ltx] -%% Include LaTeX hack for completeness -- never know -%% \begingroup -%% \catcode`|=0 \catcode`[=1 -%% \catcode`]=2\catcode`\{=12\catcode`\}=12\catcode`\ =\active -%% \catcode`\\=12|gdef|doverbatim#1@end verbatim[ -%% #1|endgroup|def|Everbatim[]|end[verbatim]] -%% |endgroup -% -\begingroup - \catcode`\ =\active - \obeylines % - % ignore everything up to the first ^^M, that's the newline at the end - % of the @verbatim input line itself. Otherwise we get an extra blank - % line in the output. - \gdef\doverbatim#1^^M#2@end verbatim{#2\end{verbatim}}% -\endgroup -% -\def\verbatim{% - \def\Everbatim{\nonfillfinish\endgroup}% - \begingroup - \nonfillstart - \advance\leftskip by -\defbodyindent - \begingroup\setupverbatim\doverbatim -} - -% @verbatiminclude FILE - insert text of file in verbatim environment. -% -% Allow normal characters that we make active in the argument (a file name). -\def\verbatiminclude{% - \begingroup - \catcode`\\=\other - \catcode`~=\other - \catcode`^=\other - \catcode`_=\other - \catcode`|=\other - \catcode`<=\other - \catcode`>=\other - \catcode`+=\other - \parsearg\doverbatiminclude -} -\def\setupverbatiminclude{% - \begingroup - \nonfillstart - \advance\leftskip by -\defbodyindent - \begingroup\setupverbatim -} -% -\def\doverbatiminclude#1{% - % Restore active chars for included file. - \endgroup - \begingroup - \let\value=\expandablevalue - \def\thisfile{#1}% - \expandafter\expandafter\setupverbatiminclude\input\thisfile - \endgroup - \nonfillfinish - \endgroup -} - -% @copying ... @end copying. -% Save the text away for @insertcopying later. Many commands won't be -% allowed in this context, but that's ok. -% -% We save the uninterpreted tokens, rather than creating a box. -% Saving the text in a box would be much easier, but then all the -% typesetting commands (@smallbook, font changes, etc.) have to be done -% beforehand -- and a) we want @copying to be done first in the source -% file; b) letting users define the frontmatter in as flexible order as -% possible is very desirable. -% -\def\copying{\begingroup - % Define a command to swallow text until we reach `@end copying'. - % \ is the escape char in this texinfo.tex file, so it is the - % delimiter for the command; @ will be the escape char when we read - % it, but that doesn't matter. - \long\def\docopying##1\end copying{\gdef\copyingtext{##1}\enddocopying}% - % - % We must preserve ^^M's in the input file; see \insertcopying below. - \catcode`\^^M = \active - \docopying -} - -% What we do to finish off the copying text. -% -\def\enddocopying{\endgroup\ignorespaces} - -% @insertcopying. Here we must play games with ^^M's. On the one hand, -% we need them to delimit commands such as `@end quotation', so they -% must be active. On the other hand, we certainly don't want every -% end-of-line to be a \par, as would happen with the normal active -% definition of ^^M. On the third hand, two ^^M's in a row should still -% generate a \par. -% -% Our approach is to make ^^M insert a space and a penalty1 normally; -% then it can also check if \lastpenalty=1. If it does, then manually -% do \par. -% -% This messes up the normal definitions of @c[omment], so we redefine -% it. Similarly for @ignore. (These commands are used in the gcc -% manual for man page generation.) -% -% Seems pretty fragile, most line-oriented commands will presumably -% fail, but for the limited use of getting the copying text (which -% should be quite simple) inserted, we can hope it's ok. -% -{\catcode`\^^M=\active % -\gdef\insertcopying{\begingroup % - \parindent = 0pt % looks wrong on title page - \def^^M{% - \ifnum \lastpenalty=1 % - \par % - \else % - \space \penalty 1 % - \fi % - }% - % - % Fix @c[omment] for catcode 13 ^^M's. - \def\c##1^^M{\ignorespaces}% - \let\comment = \c % - % - % Don't bother jumping through all the hoops that \doignore does, it - % would be very hard since the catcodes are already set. - \long\def\ignore##1\end ignore{\ignorespaces}% - % - \copyingtext % -\endgroup}% -} - -\message{defuns,} -% @defun etc. - -% Allow user to change definition object font (\df) internally -\def\setdeffont#1 {\csname DEF#1\endcsname} - -\newskip\defbodyindent \defbodyindent=.4in -\newskip\defargsindent \defargsindent=50pt -\newskip\deflastargmargin \deflastargmargin=18pt - -\newcount\parencount - -% We want ()&[] to print specially on the defun line. -% -\def\activeparens{% - \catcode`\(=\active \catcode`\)=\active - \catcode`\&=\active - \catcode`\[=\active \catcode`\]=\active -} - -% Make control sequences which act like normal parenthesis chars. -\let\lparen = ( \let\rparen = ) - -{\activeparens % Now, smart parens don't turn on until &foo (see \amprm) - -% Be sure that we always have a definition for `(', etc. For example, -% if the fn name has parens in it, \boldbrax will not be in effect yet, -% so TeX would otherwise complain about undefined control sequence. -\global\let(=\lparen \global\let)=\rparen -\global\let[=\lbrack \global\let]=\rbrack - -\gdef\functionparens{\boldbrax\let&=\amprm\parencount=0 } -\gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} -% This is used to turn on special parens -% but make & act ordinary (given that it's active). -\gdef\boldbraxnoamp{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb\let&=\ampnr} - -% Definitions of (, ) and & used in args for functions. -% This is the definition of ( outside of all parentheses. -\gdef\oprm#1 {{\rm\char`\(}#1 \bf \let(=\opnested - \global\advance\parencount by 1 -} -% -% This is the definition of ( when already inside a level of parens. -\gdef\opnested{\char`\(\global\advance\parencount by 1 } -% -\gdef\clrm{% Print a paren in roman if it is taking us back to depth of 0. - % also in that case restore the outer-level definition of (. - \ifnum \parencount=1 {\rm \char `\)}\sl \let(=\oprm \else \char `\) \fi - \global\advance \parencount by -1 } -% If we encounter &foo, then turn on ()-hacking afterwards -\gdef\amprm#1 {{\rm\}\let(=\oprm \let)=\clrm\ } -% -\gdef\normalparens{\boldbrax\let&=\ampnr} -} % End of definition inside \activeparens -%% These parens (in \boldbrax) actually are a little bolder than the -%% contained text. This is especially needed for [ and ] -\def\opnr{{\sf\char`\(}\global\advance\parencount by 1 } -\def\clnr{{\sf\char`\)}\global\advance\parencount by -1 } -\let\ampnr = \& -\def\lbrb{{\bf\char`\[}} -\def\rbrb{{\bf\char`\]}} - -% Active &'s sneak into the index arguments, so make sure it's defined. -{ - \catcode`& = \active - \global\let& = \ampnr -} - -% \defname, which formats the name of the @def (not the args). -% #1 is the function name. -% #2 is the type of definition, such as "Function". -% -\def\defname#1#2{% - % How we'll output the type name. Putting it in brackets helps - % distinguish it from the body text that may end up on the next line - % just below it. - \ifempty{#2}% - \def\defnametype{}% - \else - \def\defnametype{[\rm #2]}% - \fi - % - % Get the values of \leftskip and \rightskip as they were outside the @def... - \dimen2=\leftskip - \advance\dimen2 by -\defbodyindent - % - % Figure out values for the paragraph shape. - \setbox0=\hbox{\hskip \deflastargmargin{\defnametype}}% - \dimen0=\hsize \advance \dimen0 by -\wd0 % compute size for first line - \dimen1=\hsize \advance \dimen1 by -\defargsindent % size for continuations - \parshape 2 0in \dimen0 \defargsindent \dimen1 - % - % Output arg 2 ("Function" or some such) but stuck inside a box of - % width 0 so it does not interfere with linebreaking. - \noindent - % - {% Adjust \hsize to exclude the ambient margins, - % so that \rightline will obey them. - \advance \hsize by -\dimen2 - \dimen3 = 0pt % was -1.25pc - \rlap{\rightline{\defnametype\kern\dimen3}}% - }% - % - % Allow all lines to be underfull without complaint: - \tolerance=10000 \hbadness=10000 - \advance\leftskip by -\defbodyindent - \exdentamount=\defbodyindent - {\df #1}\enskip % output function name - % \defunargs will be called next to output the arguments, if any. -} - -% Common pieces to start any @def... -% #1 is the \E... control sequence to end the definition (which we define). -% #2 is the \...x control sequence (which our caller defines). -% #3 is the control sequence to process the header, such as \defunheader. -% -\def\parsebodycommon#1#2#3{% - \begingroup\inENV - % If there are two @def commands in a row, we'll have a \nobreak, - % which is there to keep the function description together with its - % header. But if there's nothing but headers, we want to allow a - % break after all. Check for penalty 10002 (inserted by - % \defargscommonending) instead of 10000, since the sectioning - % commands insert a \penalty10000, and we don't want to allow a break - % between a section heading and a defun. - \ifnum\lastpenalty=10002 \penalty0 \fi - \medbreak - % - % Define the \E... end token that this defining construct specifies - % so that it will exit this group. - \def#1{\endgraf\endgroup\medbreak}% - % - \parindent=0in - \advance\leftskip by \defbodyindent - \exdentamount=\defbodyindent -} - -% Common part of the \...x definitions. -% -\def\defxbodycommon{% - % As with \parsebodycommon above, allow line break if we have multiple - % x headers in a row. It's not a great place, though. - \ifnum\lastpenalty=10000 \penalty1000 \fi - % - \begingroup\obeylines -} - -% Process body of @defun, @deffn, @defmac, etc. -% -\def\defparsebody#1#2#3{% - \parsebodycommon{#1}{#2}{#3}% - \def#2{\defxbodycommon \activeparens \spacesplit#3}% - \catcode\equalChar=\active - \begingroup\obeylines\activeparens - \spacesplit#3% -} - -% #1, #2, #3 are the common arguments (see \parsebodycommon above). -% #4, delimited by the space, is the class name. -% -\def\defmethparsebody#1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 {\defxbodycommon \activeparens \spacesplit{#3{##1}}}% - \begingroup\obeylines\activeparens - % The \empty here prevents misinterpretation of a construct such as - % @deffn {whatever} {Enharmonic comma} - % See comments at \deftpparsebody, although in our case we don't have - % to remove the \empty afterwards, since it is empty. - \spacesplit{#3{#4}}\empty -} - -% Used for @deftypemethod and @deftypeivar. -% #1, #2, #3 are the common arguments (see \defparsebody). -% #4, delimited by a space, is the class name. -% #5 is the method's return type. -% -\def\deftypemethparsebody#1#2#3#4 #5 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 {\defxbodycommon \activeparens \spacesplit{#3{##1}{##2}}}% - \begingroup\obeylines\activeparens - \spacesplit{#3{#4}{#5}}% -} - -% Used for @deftypeop. The change from \deftypemethparsebody is an -% extra argument at the beginning which is the `category', instead of it -% being the hardwired string `Method' or `Instance Variable'. We have -% to account for this both in the \...x definition and in parsing the -% input at hand. Thus also need a control sequence (passed as #5) for -% the \E... definition to assign the category name to. -% -\def\deftypeopparsebody#1#2#3#4#5 #6 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 ##3 {\def#4{##1}% - \defxbodycommon \activeparens \spacesplit{#3{##2}{##3}}}% - \begingroup\obeylines\activeparens - \spacesplit{#3{#5}{#6}}% -} - -% For @defop. -\def\defopparsebody #1#2#3#4#5 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 {\def#4{##1}% - \defxbodycommon \activeparens \spacesplit{#3{##2}}}% - \begingroup\obeylines\activeparens - \spacesplit{#3{#5}}% -} - -% These parsing functions are similar to the preceding ones -% except that they do not make parens into active characters. -% These are used for "variables" since they have no arguments. -% -\def\defvarparsebody #1#2#3{% - \parsebodycommon{#1}{#2}{#3}% - \def#2{\defxbodycommon \spacesplit#3}% - \catcode\equalChar=\active - \begingroup\obeylines - \spacesplit#3% -} - -% @defopvar. -\def\defopvarparsebody #1#2#3#4#5 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 ##2 {\def#4{##1}% - \defxbodycommon \spacesplit{#3{##2}}}% - \begingroup\obeylines - \spacesplit{#3{#5}}% -} - -\def\defvrparsebody#1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}% - \begingroup\obeylines - \spacesplit{#3{#4}}% -} - -% This loses on `@deftp {Data Type} {struct termios}' -- it thinks the -% type is just `struct', because we lose the braces in `{struct -% termios}' when \spacesplit reads its undelimited argument. Sigh. -% \let\deftpparsebody=\defvrparsebody -% -% So, to get around this, we put \empty in with the type name. That -% way, TeX won't find exactly `{...}' as an undelimited argument, and -% won't strip off the braces. -% -\def\deftpparsebody #1#2#3#4 {% - \parsebodycommon{#1}{#2}{#3}% - \def#2##1 {\defxbodycommon \spacesplit{#3{##1}}}% - \begingroup\obeylines - \spacesplit{\parsetpheaderline{#3{#4}}}\empty -} - -% Fine, but then we have to eventually remove the \empty *and* the -% braces (if any). That's what this does. -% -\def\removeemptybraces\empty#1\relax{#1} - -% After \spacesplit has done its work, this is called -- #1 is the final -% thing to call, #2 the type name (which starts with \empty), and #3 -% (which might be empty) the arguments. -% -\def\parsetpheaderline#1#2#3{% - #1{\removeemptybraces#2\relax}{#3}% -}% - -% Split up #2 (the rest of the input line) at the first space token. -% call #1 with two arguments: -% the first is all of #2 before the space token, -% the second is all of #2 after that space token. -% If #2 contains no space token, all of it is passed as the first arg -% and the second is passed as empty. -% -{\obeylines % - \gdef\spacesplit#1#2^^M{\endgroup\spacesplitx{#1}#2 \relax\spacesplitx}% - \long\gdef\spacesplitx#1#2 #3#4\spacesplitx{% - \ifx\relax #3% - #1{#2}{}% - \else % - #1{#2}{#3#4}% - \fi}% -} - -% Define @defun. - -% This is called to end the arguments processing for all the @def... commands. -% -\def\defargscommonending{% - \interlinepenalty = 10000 - \advance\rightskip by 0pt plus 1fil - \endgraf - \nobreak\vskip -\parskip - \penalty 10002 % signal to \parsebodycommon. -} - -% This expands the args and terminates the paragraph they comprise. -% -\def\defunargs#1{\functionparens \sl -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -% Set the font temporarily and use \font in case \setfont made \tensl a macro. -{\tensl\hyphenchar\font=0}% -#1% -{\tensl\hyphenchar\font=45}% -\ifnum\parencount=0 \else \errmessage{Unbalanced parentheses in @def}\fi% - \defargscommonending -} - -\def\deftypefunargs #1{% -% Expand, preventing hyphenation at `-' chars. -% Note that groups don't affect changes in \hyphenchar. -% Use \boldbraxnoamp, not \functionparens, so that & is not special. -\boldbraxnoamp -\tclose{#1}% avoid \code because of side effects on active chars - \defargscommonending -} - -% Do complete processing of one @defun or @defunx line already parsed. - -% @deffn Command forward-char nchars - -\def\deffn{\defmethparsebody\Edeffn\deffnx\deffnheader} - -\def\deffnheader #1#2#3{\doind {fn}{\code{#2}}% -\begingroup\defname {#2}{#1}\defunargs{#3}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defun == @deffn Function - -\def\defun{\defparsebody\Edefun\defunx\defunheader} - -\def\defunheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDeffunc}% -\defunargs {#2}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @deftypefun int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefun{\defparsebody\Edeftypefun\deftypefunx\deftypefunheader} - -% #1 is the data type. #2 is the name and args. -\def\deftypefunheader #1#2{\deftypefunheaderx{#1}#2 \relax} -% #1 is the data type, #2 the name, #3 the args. -\def\deftypefunheaderx #1#2 #3\relax{% -\doind {fn}{\code{#2}}% Make entry in function index -\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypefun}% -\deftypefunargs {#3}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @deftypefn {Library Function} int foobar (int @var{foo}, float @var{bar}) - -\def\deftypefn{\defmethparsebody\Edeftypefn\deftypefnx\deftypefnheader} - -% \defheaderxcond#1\relax$.$ -% puts #1 in @code, followed by a space, but does nothing if #1 is null. -\def\defheaderxcond#1#2$.${\ifx#1\relax\else\code{#1#2} \fi} - -% #1 is the classification. #2 is the data type. #3 is the name and args. -\def\deftypefnheader #1#2#3{\deftypefnheaderx{#1}{#2}#3 \relax} -% #1 is the classification, #2 the data type, #3 the name, #4 the args. -\def\deftypefnheaderx #1#2#3 #4\relax{% -\doind {fn}{\code{#3}}% Make entry in function index -\begingroup -\normalparens % notably, turn off `&' magic, which prevents -% at least some C++ text from working -\defname {\defheaderxcond#2\relax$.$#3}{#1}% -\deftypefunargs {#4}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defmac == @deffn Macro - -\def\defmac{\defparsebody\Edefmac\defmacx\defmacheader} - -\def\defmacheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDefmac}% -\defunargs {#2}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defspec == @deffn Special Form - -\def\defspec{\defparsebody\Edefspec\defspecx\defspecheader} - -\def\defspecheader #1#2{\doind {fn}{\code{#1}}% Make entry in function index -\begingroup\defname {#1}{\putwordDefspec}% -\defunargs {#2}\endgroup % -\catcode\equalChar=\other % Turn off change made in \defparsebody -} - -% @defop CATEGORY CLASS OPERATION ARG... -% -\def\defop #1 {\def\defoptype{#1}% -\defopparsebody\Edefop\defopx\defopheader\defoptype} -% -\def\defopheader#1#2#3{% - \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% function index entry - \begingroup - \defname{#2}{\defoptype\ \putwordon\ #1}% - \defunargs{#3}% - \endgroup -} - -% @deftypeop CATEGORY CLASS TYPE OPERATION ARG... -% -\def\deftypeop #1 {\def\deftypeopcategory{#1}% - \deftypeopparsebody\Edeftypeop\deftypeopx\deftypeopheader - \deftypeopcategory} -% -% #1 is the class name, #2 the data type, #3 the operation name, #4 the args. -\def\deftypeopheader#1#2#3#4{% - \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{\defheaderxcond#2\relax$.$#3} - {\deftypeopcategory\ \putwordon\ \code{#1}}% - \deftypefunargs{#4}% - \endgroup -} - -% @deftypemethod CLASS TYPE METHOD ARG... -% -\def\deftypemethod{% - \deftypemethparsebody\Edeftypemethod\deftypemethodx\deftypemethodheader} -% -% #1 is the class name, #2 the data type, #3 the method name, #4 the args. -\def\deftypemethodheader#1#2#3#4{% - \dosubind{fn}{\code{#3}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{\defheaderxcond#2\relax$.$#3}{\putwordMethodon\ \code{#1}}% - \deftypefunargs{#4}% - \endgroup -} - -% @deftypeivar CLASS TYPE VARNAME -% -\def\deftypeivar{% - \deftypemethparsebody\Edeftypeivar\deftypeivarx\deftypeivarheader} -% -% #1 is the class name, #2 the data type, #3 the variable name. -\def\deftypeivarheader#1#2#3{% - \dosubind{vr}{\code{#3}}{\putwordof\ \code{#1}}% entry in variable index - \begingroup - \defname{\defheaderxcond#2\relax$.$#3} - {\putwordInstanceVariableof\ \code{#1}}% - \defvarargs{#3}% - \endgroup -} - -% @defmethod == @defop Method -% -\def\defmethod{\defmethparsebody\Edefmethod\defmethodx\defmethodheader} -% -% #1 is the class name, #2 the method name, #3 the args. -\def\defmethodheader#1#2#3{% - \dosubind{fn}{\code{#2}}{\putwordon\ \code{#1}}% entry in function index - \begingroup - \defname{#2}{\putwordMethodon\ \code{#1}}% - \defunargs{#3}% - \endgroup -} - -% @defcv {Class Option} foo-class foo-flag - -\def\defcv #1 {\def\defcvtype{#1}% -\defopvarparsebody\Edefcv\defcvx\defcvarheader\defcvtype} - -\def\defcvarheader #1#2#3{% - \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% variable index entry - \begingroup - \defname{#2}{\defcvtype\ \putwordof\ #1}% - \defvarargs{#3}% - \endgroup -} - -% @defivar CLASS VARNAME == @defcv {Instance Variable} CLASS VARNAME -% -\def\defivar{\defvrparsebody\Edefivar\defivarx\defivarheader} -% -\def\defivarheader#1#2#3{% - \dosubind{vr}{\code{#2}}{\putwordof\ \code{#1}}% entry in var index - \begingroup - \defname{#2}{\putwordInstanceVariableof\ #1}% - \defvarargs{#3}% - \endgroup -} - -% @defvar -% First, define the processing that is wanted for arguments of @defvar. -% This is actually simple: just print them in roman. -% This must expand the args and terminate the paragraph they make up -\def\defvarargs #1{\normalparens #1% - \defargscommonending -} - -% @defvr Counter foo-count - -\def\defvr{\defvrparsebody\Edefvr\defvrx\defvrheader} - -\def\defvrheader #1#2#3{\doind {vr}{\code{#2}}% -\begingroup\defname {#2}{#1}\defvarargs{#3}\endgroup} - -% @defvar == @defvr Variable - -\def\defvar{\defvarparsebody\Edefvar\defvarx\defvarheader} - -\def\defvarheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{\putwordDefvar}% -\defvarargs {#2}\endgroup % -} - -% @defopt == @defvr {User Option} - -\def\defopt{\defvarparsebody\Edefopt\defoptx\defoptheader} - -\def\defoptheader #1#2{\doind {vr}{\code{#1}}% Make entry in var index -\begingroup\defname {#1}{\putwordDefopt}% -\defvarargs {#2}\endgroup % -} - -% @deftypevar int foobar - -\def\deftypevar{\defvarparsebody\Edeftypevar\deftypevarx\deftypevarheader} - -% #1 is the data type. #2 is the name, perhaps followed by text that -% is actually part of the data type, which should not be put into the index. -\def\deftypevarheader #1#2{% -\dovarind#2 \relax% Make entry in variables index -\begingroup\defname {\defheaderxcond#1\relax$.$#2}{\putwordDeftypevar}% - \defargscommonending -\endgroup} -\def\dovarind#1 #2\relax{\doind{vr}{\code{#1}}} - -% @deftypevr {Global Flag} int enable - -\def\deftypevr{\defvrparsebody\Edeftypevr\deftypevrx\deftypevrheader} - -\def\deftypevrheader #1#2#3{\dovarind#3 \relax% -\begingroup\defname {\defheaderxcond#2\relax$.$#3}{#1} - \defargscommonending -\endgroup} - -% Now define @deftp -% Args are printed in bold, a slight difference from @defvar. - -\def\deftpargs #1{\bf \defvarargs{#1}} - -% @deftp Class window height width ... - -\def\deftp{\deftpparsebody\Edeftp\deftpx\deftpheader} - -\def\deftpheader #1#2#3{\doind {tp}{\code{#2}}% -\begingroup\defname {#2}{#1}\deftpargs{#3}\endgroup} - -% These definitions are used if you use @defunx (etc.) -% anywhere other than immediately after a @defun or @defunx. -% -\def\defcvx#1 {\errmessage{@defcvx in invalid context}} -\def\deffnx#1 {\errmessage{@deffnx in invalid context}} -\def\defivarx#1 {\errmessage{@defivarx in invalid context}} -\def\defmacx#1 {\errmessage{@defmacx in invalid context}} -\def\defmethodx#1 {\errmessage{@defmethodx in invalid context}} -\def\defoptx #1 {\errmessage{@defoptx in invalid context}} -\def\defopx#1 {\errmessage{@defopx in invalid context}} -\def\defspecx#1 {\errmessage{@defspecx in invalid context}} -\def\deftpx#1 {\errmessage{@deftpx in invalid context}} -\def\deftypefnx#1 {\errmessage{@deftypefnx in invalid context}} -\def\deftypefunx#1 {\errmessage{@deftypefunx in invalid context}} -\def\deftypeivarx#1 {\errmessage{@deftypeivarx in invalid context}} -\def\deftypemethodx#1 {\errmessage{@deftypemethodx in invalid context}} -\def\deftypeopx#1 {\errmessage{@deftypeopx in invalid context}} -\def\deftypevarx#1 {\errmessage{@deftypevarx in invalid context}} -\def\deftypevrx#1 {\errmessage{@deftypevrx in invalid context}} -\def\defunx#1 {\errmessage{@defunx in invalid context}} -\def\defvarx#1 {\errmessage{@defvarx in invalid context}} -\def\defvrx#1 {\errmessage{@defvrx in invalid context}} - - -\message{macros,} -% @macro. - -% To do this right we need a feature of e-TeX, \scantokens, -% which we arrange to emulate with a temporary file in ordinary TeX. -\ifx\eTeXversion\undefined - \newwrite\macscribble - \def\scanmacro#1{% - \begingroup \newlinechar`\^^M - % Undo catcode changes of \startcontents and \doprintindex - \catcode`\@=0 \catcode`\\=\other \escapechar=`\@ - % Append \endinput to make sure that TeX does not see the ending newline. - \toks0={#1\endinput}% - \immediate\openout\macscribble=\jobname.tmp - \immediate\write\macscribble{\the\toks0}% - \immediate\closeout\macscribble - \let\xeatspaces\eatspaces - \input \jobname.tmp - \endgroup -} -\else -\def\scanmacro#1{% -\begingroup \newlinechar`\^^M -% Undo catcode changes of \startcontents and \doprintindex -\catcode`\@=0 \catcode`\\=\other \escapechar=`\@ -\let\xeatspaces\eatspaces\scantokens{#1\endinput}\endgroup} -\fi - -\newcount\paramno % Count of parameters -\newtoks\macname % Macro name -\newif\ifrecursive % Is it recursive? -\def\macrolist{} % List of all defined macros in the form - % \do\macro1\do\macro2... - -% Utility routines. -% Thisdoes \let #1 = #2, except with \csnames. -\def\cslet#1#2{% -\expandafter\expandafter -\expandafter\let -\expandafter\expandafter -\csname#1\endcsname -\csname#2\endcsname} - -% Trim leading and trailing spaces off a string. -% Concepts from aro-bend problem 15 (see CTAN). -{\catcode`\@=11 -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} -\def\unbrace#1{#1} -\unbrace{\gdef\trim@@@ #1 } #2@{#1} -} - -% Trim a single trailing ^^M off a string. -{\catcode`\^^M=\other \catcode`\Q=3% -\gdef\eatcr #1{\eatcra #1Q^^MQ}% -\gdef\eatcra#1^^MQ{\eatcrb#1Q}% -\gdef\eatcrb#1Q#2Q{#1}% -} - -% Macro bodies are absorbed as an argument in a context where -% all characters are catcode 10, 11 or 12, except \ which is active -% (as in normal texinfo). It is necessary to change the definition of \. - -% It's necessary to have hard CRs when the macro is executed. This is -% done by making ^^M (\endlinechar) catcode 12 when reading the macro -% body, and then making it the \newlinechar in \scanmacro. - -\def\macrobodyctxt{% - \catcode`\~=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\+=\other - \catcode`\{=\other - \catcode`\}=\other - \catcode`\@=\other - \catcode`\^^M=\other - \usembodybackslash} - -\def\macroargctxt{% - \catcode`\~=\other - \catcode`\^=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\+=\other - \catcode`\@=\other - \catcode`\\=\other} - -% \mbodybackslash is the definition of \ in @macro bodies. -% It maps \foo\ => \csname macarg.foo\endcsname => #N -% where N is the macro parameter number. -% We define \csname macarg.\endcsname to be \realbackslash, so -% \\ in macro replacement text gets you a backslash. - -{\catcode`@=0 @catcode`@\=@active - @gdef@usembodybackslash{@let\=@mbodybackslash} - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} -} -\expandafter\def\csname macarg.\endcsname{\realbackslash} - -\def\macro{\recursivefalse\parsearg\macroxxx} -\def\rmacro{\recursivetrue\parsearg\macroxxx} - -\def\macroxxx#1{% - \getargs{#1}% now \macname is the macname and \argl the arglist - \ifx\argl\empty % no arguments - \paramno=0% - \else - \expandafter\parsemargdef \argl;% - \fi - \if1\csname ismacro.\the\macname\endcsname - \message{Warning: redefining \the\macname}% - \else - \expandafter\ifx\csname \the\macname\endcsname \relax - \else \errmessage{Macro name \the\macname\space already defined}\fi - \global\cslet{macsave.\the\macname}{\the\macname}% - \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% - % Add the macroname to \macrolist - \toks0 = \expandafter{\macrolist\do}% - \xdef\macrolist{\the\toks0 - \expandafter\noexpand\csname\the\macname\endcsname}% - \fi - \begingroup \macrobodyctxt - \ifrecursive \expandafter\parsermacbody - \else \expandafter\parsemacbody - \fi} - -\def\unmacro{\parsearg\dounmacro} -\def\dounmacro#1{% - \if1\csname ismacro.#1\endcsname - \global\cslet{#1}{macsave.#1}% - \global\expandafter\let \csname ismacro.#1\endcsname=0% - % Remove the macro name from \macrolist: - \begingroup - \expandafter\let\csname#1\endcsname \relax - \let\do\unmacrodo - \xdef\macrolist{\macrolist}% - \endgroup - \else - \errmessage{Macro #1 not defined}% - \fi -} - -% Called by \do from \dounmacro on each macro. The idea is to omit any -% macro definitions that have been changed to \relax. -% -\def\unmacrodo#1{% - \ifx#1\relax - % remove this - \else - \noexpand\do \noexpand #1% - \fi -} - -% This makes use of the obscure feature that if the last token of a -% is #, then the preceding argument is delimited by -% an opening brace, and that opening brace is not consumed. -\def\getargs#1{\getargsxxx#1{}} -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} -\def\getmacname #1 #2\relax{\macname={#1}} -\def\getmacargs#1{\def\argl{#1}} - -% Parse the optional {params} list. Set up \paramno and \paramlist -% so \defmacro knows what to do. Define \macarg.blah for each blah -% in the params list, to be ##N where N is the position in that list. -% That gets used by \mbodybackslash (above). - -% We need to get `macro parameter char #' into several definitions. -% The technique used is stolen from LaTeX: let \hash be something -% unexpandable, insert that wherever you need a #, and then redefine -% it to # just before using the token list produced. -% -% The same technique is used to protect \eatspaces till just before -% the macro is used. - -\def\parsemargdef#1;{\paramno=0\def\paramlist{}% - \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} -\def\parsemargdefxxx#1,{% - \if#1;\let\next=\relax - \else \let\next=\parsemargdefxxx - \advance\paramno by 1% - \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname - {\xeatspaces{\hash\the\paramno}}% - \edef\paramlist{\paramlist\hash\the\paramno,}% - \fi\next} - -% These two commands read recursive and nonrecursive macro bodies. -% (They're different since rec and nonrec macros end differently.) - -\long\def\parsemacbody#1@end macro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% -\long\def\parsermacbody#1@end rmacro% -{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% - -% This defines the macro itself. There are six cases: recursive and -% nonrecursive macros of zero, one, and many arguments. -% Much magic with \expandafter here. -% \xdef is used so that macro definitions will survive the file -% they're defined in; @include reads the file inside a group. -\def\defmacro{% - \let\hash=##% convert placeholders to macro parameter chars - \ifrecursive - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\scanmacro{\temp}}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup\noexpand\scanmacro{\temp}}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{\egroup\noexpand\scanmacro{\temp}}% - \fi - \else - \ifcase\paramno - % 0 - \expandafter\xdef\csname\the\macname\endcsname{% - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \or % 1 - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \noexpand\braceorline - \expandafter\noexpand\csname\the\macname xxx\endcsname}% - \expandafter\xdef\csname\the\macname xxx\endcsname##1{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \else % many - \expandafter\xdef\csname\the\macname\endcsname{% - \bgroup\noexpand\macroargctxt - \expandafter\noexpand\csname\the\macname xx\endcsname}% - \expandafter\xdef\csname\the\macname xx\endcsname##1{% - \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% - \expandafter\expandafter - \expandafter\xdef - \expandafter\expandafter - \csname\the\macname xxx\endcsname - \paramlist{% - \egroup - \noexpand\norecurse{\the\macname}% - \noexpand\scanmacro{\temp}\egroup}% - \fi - \fi} - -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} - -% \braceorline decides whether the next nonwhitespace character is a -% {. If so it reads up to the closing }, if not, it reads the whole -% line. Whatever was read is then fed to the next control sequence -% as an argument (by \parsebrace or \parsearg) -\def\braceorline#1{\let\next=#1\futurelet\nchar\braceorlinexxx} -\def\braceorlinexxx{% - \ifx\nchar\bgroup\else - \expandafter\parsearg - \fi \next} - -% We mant to disable all macros during \shipout so that they are not -% expanded by \write. -\def\turnoffmacros{\begingroup \def\do##1{\let\noexpand##1=\relax}% - \edef\next{\macrolist}\expandafter\endgroup\next} - - -% @alias. -% We need some trickery to remove the optional spaces around the equal -% sign. Just make them active and then expand them all to nothing. -\def\alias{\begingroup\obeyspaces\parsearg\aliasxxx} -\def\aliasxxx #1{\aliasyyy#1\relax} -\def\aliasyyy #1=#2\relax{\ignoreactivespaces -\edef\next{\global\let\expandafter\noexpand\csname#1\endcsname=% - \expandafter\noexpand\csname#2\endcsname}% -\expandafter\endgroup\next} - - -\message{cross references,} -% @xref etc. - -\newwrite\auxfile - -\newif\ifhavexrefs % True if xref values are known. -\newif\ifwarnedxrefs % True if we warned once that they aren't known. - -% @inforef is relatively simple. -\def\inforef #1{\inforefzzz #1,,,,**} -\def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, - node \samp{\ignorespaces#1{}}} - -% @node's job is to define \lastnode. -\def\node{\ENVcheck\parsearg\nodezzz} -\def\nodezzz#1{\nodexxx #1,\finishnodeparse} -\def\nodexxx#1,#2\finishnodeparse{\gdef\lastnode{#1}} -\let\nwnode=\node -\let\lastnode=\relax - -% The sectioning commands (@chapter, etc.) call these. -\def\donoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}% - {Ysectionnumberandtype}% - \global\let\lastnode=\relax - \fi -} -\def\unnumbnoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}{Ynothing}% - \global\let\lastnode=\relax - \fi -} -\def\appendixnoderef{% - \ifx\lastnode\relax\else - \expandafter\expandafter\expandafter\setref{\lastnode}% - {Yappendixletterandtype}% - \global\let\lastnode=\relax - \fi -} - - -% @anchor{NAME} -- define xref target at arbitrary point. -% -\newcount\savesfregister -\gdef\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} -\gdef\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} -\gdef\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} - -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an -% anchor), namely NAME-title (the corresponding @chapter/etc. name), -% NAME-pg (the page number), and NAME-snt (section number and type). -% Called from \foonoderef. -% -% We have to set \indexdummies so commands such as @code in a section -% title aren't expanded. It would be nicer not to expand the titles in -% the first place, but there's so many layers that that is hard to do. -% -% Likewise, use \turnoffactive so that punctuation chars such as underscore -% and backslash work in node names. -% -\def\setref#1#2{{% - \atdummies - \pdfmkdest{#1}% - % - \turnoffactive - \dosetq{#1-title}{Ytitle}% - \dosetq{#1-pg}{Ypagenumber}% - \dosetq{#1-snt}{#2}% -}} - -% @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is -% the node name, #2 the name of the Info cross-reference, #3 the printed -% node name, #4 the name of the Info file, #5 the name of the printed -% manual. All but the node name can be omitted. -% -\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} -\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} -\def\ref#1{\xrefX[#1,,,,,,,]} -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup - \unsepspaces - \def\printedmanual{\ignorespaces #5}% - \def\printednodename{\ignorespaces #3}% - \setbox1=\hbox{\printedmanual}% - \setbox0=\hbox{\printednodename}% - \ifdim \wd0 = 0pt - % No printed node name was explicitly given. - \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax - % Use the node name inside the square brackets. - \def\printednodename{\ignorespaces #1}% - \else - % Use the actual chapter/section title appear inside - % the square brackets. Use the real section title if we have it. - \ifdim \wd1 > 0pt - % It is in another manual, so we don't have it. - \def\printednodename{\ignorespaces #1}% - \else - \ifhavexrefs - % We know the real title if we have the xref values. - \def\printednodename{\refx{#1-title}{}}% - \else - % Otherwise just copy the Info node name. - \def\printednodename{\ignorespaces #1}% - \fi% - \fi - \fi - \fi - % - % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not - % insert empty discretionaries after hyphens, which means that it will - % not find a line break at a hyphen in a node names. Since some manuals - % are best written with fairly long node names, containing hyphens, this - % is a loss. Therefore, we give the text of the node name again, so it - % is as if TeX is seeing it for the first time. - \ifpdf - \leavevmode - \getfilename{#4}% - {\turnoffactive \otherbackslash - \ifnum\filenamelength>0 - \startlink attr{/Border [0 0 0]}% - goto file{\the\filename.pdf} name{#1}% - \else - \startlink attr{/Border [0 0 0]}% - goto name{#1}% - \fi - }% - \linkcolor - \fi - % - \ifdim \wd1 > 0pt - \putwordsection{} ``\printednodename'' \putwordin{} \cite{\printedmanual}% - \else - % _ (for example) has to be the character _ for the purposes of the - % control sequence corresponding to the node, but it has to expand - % into the usual \leavevmode...\vrule stuff for purposes of - % printing. So we \turnoffactive for the \refx-snt, back on for the - % printing, back off for the \refx-pg. - {\turnoffactive \otherbackslash - % Only output a following space if the -snt ref is nonempty; for - % @unnumbered and @anchor, it won't be. - \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% - \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi - }% - % output the `[mynode]' via a macro. - \xrefprintnodename\printednodename - % - % But we always want a comma and a space: - ,\space - % - % output the `page 3'. - \turnoffactive \otherbackslash \putwordpage\tie\refx{#1-pg}{}% - \fi - \endlink -\endgroup} - -% This macro is called from \xrefX for the `[nodename]' part of xref -% output. It's a separate macro only so it can be changed more easily, -% since not square brackets don't work in some documents. Particularly -% one that Bob is working on :). -% -\def\xrefprintnodename#1{[#1]} - -% \dosetq is called from \setref to do the actual \write (\iflinks). -% -\def\dosetq#1#2{% - {\let\folio=0% - \edef\next{\write\auxfile{\internalsetq{#1}{#2}}}% - \iflinks \next \fi - }% -} - -% \internalsetq{foo}{page} expands into -% CHARACTERS @xrdef{foo}{...expansion of \page...} -\def\internalsetq#1#2{@xrdef{#1}{\csname #2\endcsname}} - -% Things to be expanded by \internalsetq. -% -\def\Ypagenumber{\folio} -\def\Ytitle{\thissection} -\def\Ynothing{} -\def\Ysectionnumberandtype{% - \ifnum\secno=0 - \putwordChapter@tie \the\chapno - \else \ifnum\subsecno=0 - \putwordSection@tie \the\chapno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno - \else - \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -\def\Yappendixletterandtype{% - \ifnum\secno=0 - \putwordAppendix@tie @char\the\appendixno{}% - \else \ifnum\subsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno - \else \ifnum\subsubsecno=0 - \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno - \else - \putwordSection@tie - @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno - \fi\fi\fi -} - -% Use TeX 3.0's \inputlineno to get the line number, for better error -% messages, but if we're using an old version of TeX, don't do anything. -% -\ifx\inputlineno\thisisundefined - \let\linenumber = \empty % Pre-3.0. -\else - \def\linenumber{\the\inputlineno:\space} -\fi - -% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. -% If its value is nonempty, SUFFIX is output afterward. -% -\def\refx#1#2{% - {% - \indexnofonts - \otherbackslash - \expandafter\global\expandafter\let\expandafter\thisrefX - \csname X#1\endcsname - }% - \ifx\thisrefX\relax - % If not defined, say something at least. - \angleleft un\-de\-fined\angleright - \iflinks - \ifhavexrefs - \message{\linenumber Undefined cross reference `#1'.}% - \else - \ifwarnedxrefs\else - \global\warnedxrefstrue - \message{Cross reference values unknown; you must run TeX again.}% - \fi - \fi - \fi - \else - % It's defined, so just use it. - \thisrefX - \fi - #2% Output the suffix in any case. -} - -% This is the macro invoked by entries in the aux file. -% -\def\xrdef#1{\expandafter\gdef\csname X#1\endcsname} - -% Read the last existing aux file, if any. No error if none exists. -\def\readauxfile{\begingroup - \catcode`\^^@=\other - \catcode`\^^A=\other - \catcode`\^^B=\other - \catcode`\^^C=\other - \catcode`\^^D=\other - \catcode`\^^E=\other - \catcode`\^^F=\other - \catcode`\^^G=\other - \catcode`\^^H=\other - \catcode`\^^K=\other - \catcode`\^^L=\other - \catcode`\^^N=\other - \catcode`\^^P=\other - \catcode`\^^Q=\other - \catcode`\^^R=\other - \catcode`\^^S=\other - \catcode`\^^T=\other - \catcode`\^^U=\other - \catcode`\^^V=\other - \catcode`\^^W=\other - \catcode`\^^X=\other - \catcode`\^^Z=\other - \catcode`\^^[=\other - \catcode`\^^\=\other - \catcode`\^^]=\other - \catcode`\^^^=\other - \catcode`\^^_=\other - % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. - % in xref tags, i.e., node names. But since ^^e4 notation isn't - % supported in the main text, it doesn't seem desirable. Furthermore, - % that is not enough: for node names that actually contain a ^ - % character, we would end up writing a line like this: 'xrdef {'hat - % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first - % argument, and \hat is not an expandable control sequence. It could - % all be worked out, but why? Either we support ^^ or we don't. - % - % The other change necessary for this was to define \auxhat: - % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter - % and then to call \auxhat in \setq. - % - \catcode`\^=\other - % - % Special characters. Should be turned off anyway, but... - \catcode`\~=\other - \catcode`\[=\other - \catcode`\]=\other - \catcode`\"=\other - \catcode`\_=\other - \catcode`\|=\other - \catcode`\<=\other - \catcode`\>=\other - \catcode`\$=\other - \catcode`\#=\other - \catcode`\&=\other - \catcode`\%=\other - \catcode`+=\other % avoid \+ for paranoia even though we've turned it off - % - % Make the characters 128-255 be printing characters - {% - \count 1=128 - \def\loop{% - \catcode\count 1=\other - \advance\count 1 by 1 - \ifnum \count 1<256 \loop \fi - }% - }% - % - % Turn off \ as an escape so we do not lose on - % entries which were dumped with control sequences in their names. - % For example, @xrdef{$\leq $-fun}{page ...} made by @defun ^^ - % Reference to such entries still does not work the way one would wish, - % but at least they do not bomb out when the aux file is read in. - \catcode`\\=\other - % - % @ is our escape character in .aux files. - \catcode`\{=1 - \catcode`\}=2 - \catcode`\@=0 - % - \openin 1 \jobname.aux - \ifeof 1 \else - \closein 1 - \input \jobname.aux - \global\havexrefstrue - \fi - % Open the new aux file. TeX will close it automatically at exit. - \openout\auxfile=\jobname.aux -\endgroup} - - -% Footnotes. - -\newcount \footnoteno - -% The trailing space in the following definition for supereject is -% vital for proper filling; pages come out unaligned when you do a -% pagealignmacro call if that space before the closing brace is -% removed. (Generally, numeric constants should always be followed by a -% space to prevent strange expansion errors.) -\def\supereject{\par\penalty -20000\footnoteno =0 } - -% @footnotestyle is meaningful for info output only. -\let\footnotestyle=\comment - -\let\ptexfootnote=\footnote - -{\catcode `\@=11 -% -% Auto-number footnotes. Otherwise like plain. -\gdef\footnote{% - \let\indent=\ptexindent - \global\advance\footnoteno by \@ne - \edef\thisfootno{$^{\the\footnoteno}$}% - % - % In case the footnote comes at the end of a sentence, preserve the - % extra spacing after we do the footnote number. - \let\@sf\empty - \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi - % - % Remove inadvertent blank space before typesetting the footnote number. - \unskip - \thisfootno\@sf - \dofootnote -}% - -% Don't bother with the trickery in plain.tex to not require the -% footnote text as a parameter. Our footnotes don't need to be so general. -% -% Oh yes, they do; otherwise, @ifset and anything else that uses -% \parseargline fail inside footnotes because the tokens are fixed when -% the footnote is read. --karl, 16nov96. -% -% The start of the footnote looks usually like this: -\gdef\startfootins{\insert\footins\bgroup} -% -% ... but this macro is redefined inside @multitable. -% -\gdef\dofootnote{% - \startfootins - % We want to typeset this text as a normal paragraph, even if the - % footnote reference occurs in (for example) a display environment. - % So reset some parameters. - \hsize=\pagewidth - \interlinepenalty\interfootnotelinepenalty - \splittopskip\ht\strutbox % top baseline for broken footnotes - \splitmaxdepth\dp\strutbox - \floatingpenalty\@MM - \leftskip\z@skip - \rightskip\z@skip - \spaceskip\z@skip - \xspaceskip\z@skip - \parindent\defaultparindent - % - \smallfonts \rm - % - % Because we use hanging indentation in footnotes, a @noindent appears - % to exdent this text, so make it be a no-op. makeinfo does not use - % hanging indentation so @noindent can still be needed within footnote - % text after an @example or the like (not that this is good style). - \let\noindent = \relax - % - % Hang the footnote text off the number. Use \everypar in case the - % footnote extends for more than one paragraph. - \everypar = {\hang}% - \textindent{\thisfootno}% - % - % Don't crash into the line above the footnote text. Since this - % expands into a box, it must come within the paragraph, lest it - % provide a place where TeX can split the footnote. - \footstrut - \futurelet\next\fo@t -} -}%end \catcode `\@=11 - -% @| inserts a changebar to the left of the current line. It should -% surround any changed text. This approach does *not* work if the -% change spans more than two lines of output. To handle that, we would -% have adopt a much more difficult approach (putting marks into the main -% vertical list for the beginning and end of each change). -% -\def\|{% - % \vadjust can only be used in horizontal mode. - \leavevmode - % - % Append this vertical mode material after the current line in the output. - \vadjust{% - % We want to insert a rule with the height and depth of the current - % leading; that is exactly what \strutbox is supposed to record. - \vskip-\baselineskip - % - % \vadjust-items are inserted at the left edge of the type. So - % the \llap here moves out into the left-hand margin. - \llap{% - % - % For a thicker or thinner bar, change the `1pt'. - \vrule height\baselineskip width1pt - % - % This is the space between the bar and the text. - \hskip 12pt - }% - }% -} - -% For a final copy, take out the rectangles -% that mark overfull boxes (in case you have decided -% that the text looks ok even though it passes the margin). -% -\def\finalout{\overfullrule=0pt} - -% @image. We use the macros from epsf.tex to support this. -% If epsf.tex is not installed and @image is used, we complain. -% -% Check for and read epsf.tex up front. If we read it only at @image -% time, we might be inside a group, and then its definitions would get -% undone and the next image would fail. -\openin 1 = epsf.tex -\ifeof 1 \else - \closein 1 - % Do not bother showing banner with epsf.tex v2.7k (available in - % doc/epsf.tex and on ctan). - \def\epsfannounce{\toks0 = }% - \input epsf.tex -\fi -% -% We will only complain once about lack of epsf.tex. -\newif\ifwarnednoepsf -\newhelp\noepsfhelp{epsf.tex must be installed for images to - work. It is also included in the Texinfo distribution, or you can get - it from ftp://tug.org/tex/epsf.tex.} -% -\def\image#1{% - \ifx\epsfbox\undefined - \ifwarnednoepsf \else - \errhelp = \noepsfhelp - \errmessage{epsf.tex not found, images will be ignored}% - \global\warnednoepsftrue - \fi - \else - \imagexxx #1,,,,,\finish - \fi -} -% -% Arguments to @image: -% #1 is (mandatory) image filename; we tack on .eps extension. -% #2 is (optional) width, #3 is (optional) height. -% #4 is (ignored optional) html alt text. -% #5 is (ignored optional) extension. -% #6 is just the usual extra ignored arg for parsing this stuff. -\newif\ifimagevmode -\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup - \catcode`\^^M = 5 % in case we're inside an example - \normalturnoffactive % allow _ et al. in names - % If the image is by itself, center it. - \ifvmode - \imagevmodetrue - \nobreak\bigskip - % Usually we'll have text after the image which will insert - % \parskip glue, so insert it here too to equalize the space - % above and below. - \nobreak\vskip\parskip - \nobreak - \line\bgroup\hss - \fi - % - % Output the image. - \ifpdf - \dopdfimage{#1}{#2}{#3}% - \else - % \epsfbox itself resets \epsf?size at each figure. - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi - \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi - \epsfbox{#1.eps}% - \fi - % - \ifimagevmode \hss \egroup \bigbreak \fi % space after the image -\endgroup} - - -\message{localization,} -% and i18n. - -% @documentlanguage is usually given very early, just after -% @setfilename. If done too late, it may not override everything -% properly. Single argument is the language abbreviation. -% It would be nice if we could set up a hyphenation file here. -% -\def\documentlanguage{\parsearg\dodocumentlanguage} -\def\dodocumentlanguage#1{% - \tex % read txi-??.tex file in plain TeX. - % Read the file if it exists. - \openin 1 txi-#1.tex - \ifeof1 - \errhelp = \nolanghelp - \errmessage{Cannot read language file txi-#1.tex}% - \let\temp = \relax - \else - \def\temp{\input txi-#1.tex }% - \fi - \temp - \endgroup -} -\newhelp\nolanghelp{The given language definition file cannot be found or -is empty. Maybe you need to install it? In the current directory -should work if nowhere else does.} - - -% @documentencoding should change something in TeX eventually, most -% likely, but for now just recognize it. -\let\documentencoding = \comment - - -% Page size parameters. -% -\newdimen\defaultparindent \defaultparindent = 15pt - -\chapheadingskip = 15pt plus 4pt minus 2pt -\secheadingskip = 12pt plus 3pt minus 2pt -\subsecheadingskip = 9pt plus 2pt minus 2pt - -% Prevent underfull vbox error messages. -\vbadness = 10000 - -% Don't be so finicky about underfull hboxes, either. -\hbadness = 2000 - -% Following George Bush, just get rid of widows and orphans. -\widowpenalty=10000 -\clubpenalty=10000 - -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're -% using an old version of TeX, don't do anything. We want the amount of -% stretch added to depend on the line length, hence the dependence on -% \hsize. We call this whenever the paper size is set. -% -\def\setemergencystretch{% - \ifx\emergencystretch\thisisundefined - % Allow us to assign to \emergencystretch anyway. - \def\emergencystretch{\dimen0}% - \else - \emergencystretch = .15\hsize - \fi -} - -% Parameters in order: 1) textheight; 2) textwidth; 3) voffset; -% 4) hoffset; 5) binding offset; 6) topskip; 7) physical page height; 8) -% physical page width. -% -% We also call \setleading{\textleading}, so the caller should define -% \textleading. The caller should also set \parskip. -% -\def\internalpagesizes#1#2#3#4#5#6#7#8{% - \voffset = #3\relax - \topskip = #6\relax - \splittopskip = \topskip - % - \vsize = #1\relax - \advance\vsize by \topskip - \outervsize = \vsize - \advance\outervsize by 2\topandbottommargin - \pageheight = \vsize - % - \hsize = #2\relax - \outerhsize = \hsize - \advance\outerhsize by 0.5in - \pagewidth = \hsize - % - \normaloffset = #4\relax - \bindingoffset = #5\relax - % - \ifpdf - \pdfpageheight #7\relax - \pdfpagewidth #8\relax - \fi - % - \setleading{\textleading} - % - \parindent = \defaultparindent - \setemergencystretch -} - -% @letterpaper (the default). -\def\letterpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % If page is nothing but text, make it come out even. - \internalpagesizes{46\baselineskip}{6in}% - {\voffset}{.25in}% - {\bindingoffset}{36pt}% - {11in}{8.5in}% -}} - -% Use @smallbook to reset parameters for 7x9.5 (or so) format. -\def\smallbook{{\globaldefs = 1 - \parskip = 2pt plus 1pt - \textleading = 12pt - % - \internalpagesizes{7.5in}{5in}% - {\voffset}{.25in}% - {\bindingoffset}{16pt}% - {9.25in}{7in}% - % - \lispnarrowing = 0.3in - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = .5cm -}} - -% Use @afourpaper to print on European A4 paper. -\def\afourpaper{{\globaldefs = 1 - \parskip = 3pt plus 2pt minus 1pt - \textleading = 13.2pt - % - % Double-side printing via postscript on Laserjet 4050 - % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. - % To change the settings for a different printer or situation, adjust - % \normaloffset until the front-side and back-side texts align. Then - % do the same for \bindingoffset. You can set these for testing in - % your texinfo source file like this: - % @tex - % \global\normaloffset = -6mm - % \global\bindingoffset = 10mm - % @end tex - \internalpagesizes{51\baselineskip}{160mm} - {\voffset}{\hoffset}% - {\bindingoffset}{44pt}% - {297mm}{210mm}% - % - \tolerance = 700 - \hfuzz = 1pt - \contentsrightmargin = 0pt - \defbodyindent = 5mm -}} - -% Use @afivepaper to print on European A5 paper. -% From romildo@urano.iceb.ufop.br, 2 July 2000. -% He also recommends making @example and @lisp be small. -\def\afivepaper{{\globaldefs = 1 - \parskip = 2pt plus 1pt minus 0.1pt - \textleading = 12.5pt - % - \internalpagesizes{160mm}{120mm}% - {\voffset}{\hoffset}% - {\bindingoffset}{8pt}% - {210mm}{148mm}% - % - \lispnarrowing = 0.2in - \tolerance = 800 - \hfuzz = 1.2pt - \contentsrightmargin = 0pt - \defbodyindent = 2mm - \tableindent = 12mm -}} - -% A specific text layout, 24x15cm overall, intended for A4 paper. -\def\afourlatex{{\globaldefs = 1 - \afourpaper - \internalpagesizes{237mm}{150mm}% - {\voffset}{4.6mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - % - % Must explicitly reset to 0 because we call \afourpaper. - \globaldefs = 0 -}} - -% Use @afourwide to print on A4 paper in landscape format. -\def\afourwide{{\globaldefs = 1 - \afourpaper - \internalpagesizes{241mm}{165mm}% - {\voffset}{-2.95mm}% - {\bindingoffset}{7mm}% - {297mm}{210mm}% - \globaldefs = 0 -}} - -% @pagesizes TEXTHEIGHT[,TEXTWIDTH] -% Perhaps we should allow setting the margins, \topskip, \parskip, -% and/or leading, also. Or perhaps we should compute them somehow. -% -\def\pagesizes{\parsearg\pagesizesxxx} -\def\pagesizesxxx#1{\pagesizesyyy #1,,\finish} -\def\pagesizesyyy#1,#2,#3\finish{{% - \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi - \globaldefs = 1 - % - \parskip = 3pt plus 2pt minus 1pt - \setleading{\textleading}% - % - \dimen0 = #1 - \advance\dimen0 by \voffset - % - \dimen2 = \hsize - \advance\dimen2 by \normaloffset - % - \internalpagesizes{#1}{\hsize}% - {\voffset}{\normaloffset}% - {\bindingoffset}{44pt}% - {\dimen0}{\dimen2}% -}} - -% Set default to letter. -% -\letterpaper - - -\message{and turning on texinfo input format.} - -% Define macros to output various characters with catcode for normal text. -\catcode`\"=\other -\catcode`\~=\other -\catcode`\^=\other -\catcode`\_=\other -\catcode`\|=\other -\catcode`\<=\other -\catcode`\>=\other -\catcode`\+=\other -\catcode`\$=\other -\def\normaldoublequote{"} -\def\normaltilde{~} -\def\normalcaret{^} -\def\normalunderscore{_} -\def\normalverticalbar{|} -\def\normalless{<} -\def\normalgreater{>} -\def\normalplus{+} -\def\normaldollar{$}%$ font-lock fix - -% This macro is used to make a character print one way in ttfont -% where it can probably just be output, and another way in other fonts, -% where something hairier probably needs to be done. -% -% #1 is what to print if we are indeed using \tt; #2 is what to print -% otherwise. Since all the Computer Modern typewriter fonts have zero -% interword stretch (and shrink), and it is reasonable to expect all -% typewriter fonts to have this, we can check that font parameter. -% -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} - -% Same as above, but check for italic font. Actually this also catches -% non-italic slanted fonts since it is impossible to distinguish them from -% italic fonts. But since this is only used by $ and it uses \sl anyway -% this is not a problem. -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} - -% Turn off all special characters except @ -% (and those which the user can use as if they were ordinary). -% Most of these we simply print from the \tt font, but for some, we can -% use math or other variants that look better in normal text. - -\catcode`\"=\active -\def\activedoublequote{{\tt\char34}} -\let"=\activedoublequote -\catcode`\~=\active -\def~{{\tt\char126}} -\chardef\hat=`\^ -\catcode`\^=\active -\def^{{\tt \hat}} - -\catcode`\_=\active -\def_{\ifusingtt\normalunderscore\_} -% Subroutine for the previous macro. -\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } - -\catcode`\|=\active -\def|{{\tt\char124}} -\chardef \less=`\< -\catcode`\<=\active -\def<{{\tt \less}} -\chardef \gtr=`\> -\catcode`\>=\active -\def>{{\tt \gtr}} -\catcode`\+=\active -\def+{{\tt \char 43}} -\catcode`\$=\active -\def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix - -% Set up an active definition for =, but don't enable it most of the time. -{\catcode`\==\active -\global\def={{\tt \char 61}}} - -\catcode`+=\active -\catcode`\_=\active - -% If a .fmt file is being used, characters that might appear in a file -% name cannot be active until we have parsed the command line. -% So turn them off again, and have \everyjob (or @setfilename) turn them on. -% \otherifyactive is called near the end of this file. -\def\otherifyactive{\catcode`+=\other \catcode`\_=\other} - -\catcode`\@=0 - -% \rawbackslashxx outputs one backslash character in current font, -% as in \char`\\. -\global\chardef\rawbackslashxx=`\\ - -% \rawbackslash defines an active \ to do \rawbackslashxx. -% \otherbackslash defines an active \ to be a literal `\' character with -% catcode other. -{\catcode`\\=\active - @gdef@rawbackslash{@let\=@rawbackslashxx} - @gdef@otherbackslash{@let\=@realbackslash} -} - -% \realbackslash is an actual character `\' with catcode other. -{\catcode`\\=\other @gdef@realbackslash{\}} - -% \normalbackslash outputs one backslash in fixed width font. -\def\normalbackslash{{\tt\rawbackslashxx}} - -\catcode`\\=\active - -% Used sometimes to turn off (effectively) the active characters -% even after parsing them. -@def@turnoffactive{% - @let"=@normaldoublequote - @let\=@realbackslash - @let~=@normaltilde - @let^=@normalcaret - @let_=@normalunderscore - @let|=@normalverticalbar - @let<=@normalless - @let>=@normalgreater - @let+=@normalplus - @let$=@normaldollar %$ font-lock fix -} - -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of -% the literal character `\'. (Thus, \ is not expandable when this is in -% effect.) -% -@def@normalturnoffactive{@turnoffactive @let\=@normalbackslash} - -% Make _ and + \other characters, temporarily. -% This is canceled by @fixbackslash. -@otherifyactive - -% If a .fmt file is being used, we don't want the `\input texinfo' to show up. -% That is what \eatinput is for; after that, the `\' should revert to printing -% a backslash. -% -@gdef@eatinput input texinfo{@fixbackslash} -@global@let\ = @eatinput - -% On the other hand, perhaps the file did not have a `\input texinfo'. Then -% the first `\{ in the file would cause an error. This macro tries to fix -% that, assuming it is called before the first `\' could plausibly occur. -% Also back turn on active characters that might appear in the input -% file name, in case not using a pre-dumped format. -% -@gdef@fixbackslash{% - @ifx\@eatinput @let\ = @normalbackslash @fi - @catcode`+=@active - @catcode`@_=@active -} - -% Say @foo, not \foo, in error messages. -@escapechar = `@@ - -% These look ok in all fonts, so just make them not special. -@catcode`@& = @other -@catcode`@# = @other -@catcode`@% = @other - -@c Set initial fonts. -@textfonts -@rm - - -@c Local variables: -@c eval: (add-hook 'write-file-hooks 'time-stamp) -@c page-delimiter: "^\\\\message" -@c time-stamp-start: "def\\\\texinfoversion{" -@c time-stamp-format: "%:y-%02m-%02d.%02H" -@c time-stamp-end: "}" -@c End: diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/attic/texi/version.texi --- a/src/work/alpar/attic/texi/version.texi Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2 +0,0 @@ -@set VERSION 0.0.2 -@set UPDATED 2004 diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/bfs-named-param.cc --- a/src/work/alpar/bfs-named-param.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ -// -*- mode:C++ -*- - -#include -#include -#include -#include - -using namespace lemon; - -struct _BFS_DEFAULT_VIS {}; -struct _BFS_CUSTOM_VIS {}; - - -class _Bfs_Traits -{ - typedef ListGraph Graph; -} - -template -class _Bfs -{ - public: - typedef typename T::Graph Graph; - typedef typename T::Reached Reached; - typedef typename T::PredNode PredNode; - typedef typename T::PredEdge PredEdge; - typedef typename T::Priority Priority; - - typedef typename T::DefaultReachedTag DefaultReachedTag; - - typedef typename Graph::Node Node; - typedef typename Graph::OutEdgeIt OutEdgeIt; - - const Graph &_graph; - - Node _source; - - Reached *_visited; - PredNode _predNode; - PredEdge _predEdge; - Priority _priority; - - _Bfs(const Graph &g, - Node s, - Reached *v, - PredNode &pn, - PredEdge &pe, - Priority &pr) :_graph(g), _source(s), - _visited(v), - _predNode(pn), _predEdge(pe), _priority(pr) { } - - - int run(const _Bfs_CUSTOM_VIS &) - { - using namespace std; - - int N=_graph.nodeNum(); - vector Q(N); - int Qh=0; - int Qt=0; - - for(typename Graph::NodeIt n(_graph);n!=INVALID;++n) - _visited->set(n,false); - - Q[Qh++]=_source; - _visited->set(_source,true); - do { - Node m; - Node n=Q[Qt++]; - for(OutEdgeIt e(_graph,n);e!=INVALID;++e) - if(!(*_visited)[m=_graph.target(e)]) { - Q[Qh++]=m; - _visited->set(m,true); - _predNode.set(m,n); - _predEdge.set(m,e); - } - } while(Qt!=Qh); - - return 1; //Why return 1? - } - int run(const _BFS_DEFAULT_VIS &) - { - _visited= new Reached(_graph); - int r = run(_BFS_CUSTOM_VIS()); - delete _visited; - return r; - } - int run() { return run(DefaultReachedTag());} - - template _Bfs - setVisitMap(T &t) - { - return _Bfs - (_graph,_source,&t,_predNode,_predEdge,_priority); - } - - template - _Bfs - setPredNodeMap(T &t) - { - return _BFS - (_graph,_source, - _visited, - t,_predEdge,_priority); - } - - template - _BFS - setPredEdgeMap(T &t) - { - return _BFS - (_graph,_source, - _visited, - _predNode,t,_priority); - } - - _Bfs - setNothing() - { - return _Bfs - (_graph,_source, - _visited, - _predNode,_predEdge,_priority); - } -}; - - -template -_Bfs, - _BFS_DEFAULT_VIS, - NullMap, - NullMap, - NullMap > -bfs(const G &g,typename G::Node s) -{ - // typename G::template NodeMap v(g); - - return _Bfs < G, - typename G::template NodeMap, - _BFS_DEFAULT_VIS, - NullMap, - NullMap, - NullMap > - (g,s, - (typename G::template NodeMap*)(NULL), - *((NullMap*)(NULL)), - *((NullMap *)(NULL)), - *((NullMap *)(NULL)) - ); -} - - -class MyReachedMap : public SmartGraph::NodeMap -{ - const SmartGraph &_G; -public: - MyReachedMap(const SmartGraph &G) : SmartGraph::NodeMap(G), _G(G) {} - void set(SmartGraph::Node n,bool b) - { - SmartGraph::NodeMap::set(n,b); - if(b) std::cout << _G.id(n) << std::endl; - } -}; - - -int main() -{ - SmartGraph G; - SmartGraph::Node s=G.addNode(); - SmartGraph::Node n1=G.addNode(); - SmartGraph::Node n2=G.addNode(); - SmartGraph::Node n3=G.addNode(); - SmartGraph::Node n4=G.addNode(); - SmartGraph::Node n5=G.addNode(); - SmartGraph::Node n6=G.addNode(); - SmartGraph::Node n7=G.addNode(); - - G.addEdge(s,n1);G.addEdge(s,n3);G.addEdge(n1,n2);G.addEdge(n1,n3); - G.addEdge(s,n4);G.addEdge(n4,n7);G.addEdge(n7,n6);G.addEdge(n4,n5); - G.addEdge(n7,n2);G.addEdge(n6,n3);G.addEdge(n4,s);G.addEdge(n1,s); - - - - SmartGraph::NodeMap m(G); - SmartGraph::NodeMap em(G); - - MyReachedMap vm(G); - - - //Runs BFS on graph 'G' from node 's'. - //(It practically does nothing, for it throws away its result.) - bfs(G,s).run(); - - //Runs BFS on graph 'G' from node 's'. Puts the predessor nodes to 'm'. - bfs(G,s).setPredNodeMap(m).run(); - - //Runs BFS on graph 'G' from node 's'. - //Puts the predessor nodes to 'm' and the edges of the bfs tree to 'em'. - bfs(G,s).setPredNodeMap(m).setPredEdgeMap(em).run(); - - //Runs BFS on graph 'G' from node 's'. - //It uses a scpecial 'visited map' that prints out the reached nodes. - bfs(G,s).setVisitMap(vm).run(); - -} diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/boolmap_iter.cc --- a/src/work/alpar/boolmap_iter.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -#include -#include -#include -#include - -using namespace lemon; - -///\todo This is only a static map! -///\param BaseMap is an interger map. -template -class BoolIterMap -{ -public: - - typedef typename BaseMap::Key Key; - typedef bool Value; - - friend class RefType; - friend class FalseIt; - friend class TrueIt; - -private: - BaseMap &cref; - std::vector vals; - int sep; //map[e] is true <=> cref[e]>=sep - - bool isTrue(Key k) {return cref[k]>=sep;} - void swap(Key k, int s) - { - int ti=cref[k]; - Key tk=vals[s]; - cref[k]=s; vals[s]=k; - cref[tk]=ti; vals[ti]=tk; - } - - void setTrue(Key k) { if(cref[k]=sep) { swap(k,sep); sep++; } } - -public: - ///\e - void set(Key k,Value v) { if(v) setTrue(k); else setFalse(k);} - - ///\e - class FalseIt - { - const BoolIterMap &M; - int i; - public: - explicit FalseIt(const BoolIterMap &_M) : M(_M), i(0) { } - FalseIt(Invalid) - : M(*((BoolIterMap*)(0))), i(std::numeric_limits::max()) { } - FalseIt &operator++() { ++i; return *this;} - operator Key() { return i=M.sep; } - }; - ///\e - class TrueIt - { - BoolIterMap &M; - int i; - public: - explicit TrueIt(BoolIterMap &_M) : M(_M), i(M.vals.size()-1) { } - TrueIt(Invalid) - : M(*((BoolIterMap*)(0))), i(-1) { } - TrueIt &operator++() { --i; return *this;} - operator Key() { return i>=M.sep ? M.vals[i] : INVALID; } - bool operator !=(Invalid) { return i>=M.sep; } - bool operator ==(Invalid) { return isecond=sep; - vals.push_back(i->first); - sep++; - } - } - RefType operator[] (Key k) { return RefType(*this,k);} - Value operator[] (Key k) const { return isTrue(k);} -}; - -int main() -{ - typedef SmartGraph Graph; - typedef Graph::NodeIt NodeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - typedef Graph::EdgeIt EdgeIt; - - Graph G; - - for(int i=0;i<3;i++) G.addNode(); - - for(NodeIt n(G);n!=INVALID;++n) - for(NodeIt m(G);m!=INVALID;++m) if(n!=m) - G.addEdge(n,m); - - //for(OutEdgeIt e(G,NodeIt(G));G.valid(e);G.next(e)) - - Graph::EdgeMap tem(G); - typedef BoolIterMap > BoolIterEdgeMap; - BoolIterEdgeMap map(tem); - - bool b=true; - - for(EdgeIt e(G);e!=INVALID;++e) {map[e]=b;b=!b;} - - std::cout << true << '\n'; - - for(EdgeIt e(G);e!=INVALID;++e) - std::cout << G.id(G.source(e)) << "->" << G.id(G.target(e)) - << ": " << map[e] << '\n'; - std::cout << "True Edges:\n"; - for(BoolIterEdgeMap::TrueIt i(map);i!=INVALID;++i) - std::cout << G.id(G.source(i)) << "->" << G.id(G.target(i)) << '\n'; - std::cout << "False Edges:\n"; - for(BoolIterEdgeMap::FalseIt i(map);i!=INVALID;++i) - std::cout << G.id(G.source(i)) << "->" << G.id(G.target(i)) << '\n'; -} - diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/f_ed_ka.h --- a/src/work/alpar/f_ed_ka.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,119 +0,0 @@ -// -*- mode:c++ -*- - -#ifndef EDMONDS_KARP_HH -#define EDMONDS_KARP_HH - -#include - -//#include - -#include - -//#include - -namespace lemon { - template - typename FlowMap::Value maxFlow(Graph &G, - FlowMap &f, - CapacityMap &c, - typename Graph::NodeIt s, - typename Graph::NodeIt t) - { - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EachNodeIt EachNodeIt; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::EachEdgeIt EachEdgeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - typedef typename FlowMap::Value T; - - T flow_val = 0; - T aug_val; - - for(EachEdgeIt e(G);G.valid(e);G.goNext(e)) - f.set(e,0); - - std::queue bfs_queue; - typename Graph::NodeMap visited(G); //0: unvisited, - //1: reached by a forward edge - //2: reached by a backward edge - //3: it is node s - typename Graph::NodeMap tree(G); - - NodeIt gn; //FIXME: it might be too global for some people... - - augment: - - for(EachNodeIt n(G);G.valid(n);G.goNext(n)) - visited.set(n,0); - - visited.set(s,3); - - //There must be a better way to do this: - while(!bfs_queue.empty()) bfs_queue.pop(); - - bfs_queue.push(s); - - while(!bfs_queue.empty() && !visited.get(t)) - { - NodeIt n(bfs_queue.front()); - bfs_queue.pop(); - for(OutEdgeIt e(G,n);G.valid(e);G.goNext(e)) - if(f.get(e)0 && //FIXME: > - !visited.get(G.bNode(e))) - { - NodeIt nn(G.bNode(e)); - tree.set(nn,e); - visited.set(nn,2); - bfs_queue.push(nn); - } - } - - if(!visited.get(t)) return flow_val; - - // Augmenting value computation - aug_val = visited.get(t)==1 ? - c.get(tree.get(t))-f.get(tree.get(t)) : f.get(tree.get(t)); - //FIXME: I would need 'G.opposite(e,n)' - gn = visited.get(t)==1 ? G.source(tree.get(t)) : G.target(tree.get(t)); - while(gn!=s) if(visited.get(gn)==1) - { - //FIXME: nonstandard gcc extension! - aug_val -#include - -#include "smart_graph.h" - -#include "../list_graph.hh" -#include "../marci/dimacs.hh" -#include "f_ed_ka.h" -#include "../marci/time_measure.h" - -using namespace lemon; - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo < dimacs_max_flow_file - -int main(int, char **) { - typedef SmartGraph Graph; - //typedef ListGraph Graph; - - typedef Graph::NodeIt NodeIt; - typedef Graph::EachNodeIt EachNodeIt; - typedef Graph::EachEdgeIt EachEdgeIt; - - Graph G; - NodeIt s, t; - Timer ts; - Graph::DynEdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - - std::cout << "loading time: " << ts << std::endl; - ts.reset(); - std::cout << "edmonds karp demo..." << std::endl; - Graph::DynEdgeMap flow(G); //0 flow - - int ret; - // double pre_time=currTime(); - - ret = maxFlow(G,flow,cap,s,t); - // double post_time=currTime(); - std::cout << "running time: " << ts << std::endl; - - //std::cout << "maximum flow: "<< std::endl; - //for(EachEdgeIt e=G.first(); e.valid(); ++e) { - // std::cout<<"("<"< -#include -#include - -using namespace lemon; - -template -class Reader -{ - -public: - typedef GR Graph; - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - - ///A beolvasando ertekek tipusa. - - ///Ebben gyakorlatilag egy stringet tarolunk. - ///Tovabba ez egy olyan tipus, amitol elvarjuk, hogy konvertalodjon - ///a beolvasando mapok Value-jara. - class InputValue - { - public: - operator int() const { return 0; } - operator double() const { return 0; } - }; - - ///Ez adja a mapok kozos interface-et. - class WrapEdgeMapBase - { - public: - virtual void set(Edge n,const InputValue &v) = 0; - virtual ~WrapEdgeMapBase() {} - }; - - ///Ez meg becsomagol egy mapot a kozos formara. - template - class WrapEdgeMap : public WrapEdgeMapBase - { - M ↦ - - public: - WrapEdgeMap(M &m) : map(m) {} - void set(Edge n,const InputValue &v) {map.set(n,v);} - }; - - ///Ebben a strukturaban adunk meg egy feltoltendo mapot. - struct EdgeMapDesc - { - std::string name; - int column; - WrapEdgeMapBase *map; - - template EdgeMapDesc(char *n,M &m) : name(n), map(&m) {} - ~EdgeMapDesc() {} - }; - - ///Itt vannak felsorolva a feltoltendo mapok - std::list EdgeMaps; - - ///Ezzel lehet egy mapot hozzaadni a feltoltendok listajahoz. - template void addEdgeMap(char *name,M &map) - { - EdgeMaps.push_back(EdgeMapDesc(name,*(new WrapEdgeMap(map)))); - } - - ///Ez meg kiuriti a map-listat. - void removeEdgeMaps() - { - while(EdgeMaps.begin()!=EdgeMaps.end()) { - //Ez igy OK?: - delete EdgeMaps.begin()->map; - EdgeMaps.pop_front(); - } - } - - //Esetleg stream a file-nev helyett... - Reader(char *file,Graph &G) - { - removeEdgeMaps(); - } - - ///Ez inditja a beolvasast. - void read() - { - //Ez olvassa be/vegig a file-t. - } - - ~Reader() - { - //Ez kell!!! - removeEdgeMaps(); - } - -}; - -class SumMap : public MapBase -{ - double sum; -public: - SumMap() : sum(0) {} - void set(ListGraph::Edge e,double d) - { - sum+=d; - } - double getSum() { return sum; } -}; - -int main() -{ - ListGraph g; //Kis g!!! - ListGraph::EdgeMap cost(g); - ListGraph::EdgeMap channels(g); - - SumMap sum_cost; //Ez egy sajat "custom" irhato map - - Reader r("file_name.lgf",g); - r.addEdgeMap("cost",cost); - r.addEdgeMap("channels",channels); - r.addEdgeMap("cost",sum_cost); - r.read(); -} diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/graph.h --- a/src/work/alpar/graph.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,493 +0,0 @@ -// -*-mode: c++; -*- -#ifndef __GRAPH_H_ -#define __GRAPH_H_ - -//inline void *operator new(size_t s, void *p) { return p; } -#include -#include - -namespace NEGRO -{ - using namespace std; - -#include "oldgraph.h" - - template class Graph : protected OldGraph - { - public: - typedef E EdgeType; - typedef N NodeType; - - class EdgeIt - { - public: - NEGRO::EdgePoint e; - bool valid() { return e; } - }; - - class InEdgeIt : public EdgeIt {}; - class OutEdgeIt : public EdgeIt {}; - class BiEdgeIt : public EdgeIt {}; - class SymEdgeIt : public EdgeIt {}; - - typedef int NodeIt; - - typedef NodeIt EachNodeIt; - - class NodeIterator; - - class EdgeIterator; - class InEdgeIterator; - class OutEdgeIterator; - class BiEdgeIterator; - class SymEdgeIterator; - class AllEdgeIterator; - - class FirstAnythingTypeNode; //Required by the unified First() function. - - friend class NodeIterator; - friend class EdgeIterator; - friend class InEdgeIterator; - friend class OutEdgeIterator; - friend class BiEdgeIterator; - friend class SymEdgeIterator; - friend class EachEdgeIterator; - - class NodeIterator - { - Graph *G; //operator*() miatt kell!!! - int n; //nem kellene, ha itt mutato lenne!! - public: - - NodeIterator() {;} - NodeIterator(Graph &Gr)//'const Graph &G' would be wrong. - {G=&Gr;n=Gr.OldGraph::FirstNode();} - NodeIterator(const NodeIterator &i) {G=i.G;n=i.n;} - - NodeIterator &goNext() { n=G->NextNode(n); return *this;} - NodeIterator next() const { return NodeIterator(*this).goNext();} - NodeIterator &operator++() { return goNext();} - NodeIterator operator++(int) - {NodeIterator tmp(*this); goNext(); return tmp;} - bool valid() { return n!=INVALID; } - - N &operator*() const { return G->Data(n); } - N *operator->() const { return &G->Data(n); } - - bool operator==(const NodeIterator &i) const {return n==i.n;} - bool operator!=(const NodeIterator &i) const {return n!=i.n;} - - int index() const { return n; } //If the nodes are indexable - friend class Graph; - friend class EdgeIterator; - friend class InEdgeIterator; - friend class OutEdgeIterator; - friend class BiEdgeIterator; - friend class SymEdgeIterator; - friend class EachEdgeIterator; - friend class FirstAnythingTypeNode; - - //Nem kellene egy: - // static NodeIterator &GetInvalid(); ? - }; - - class EdgeIterator - { - - Graph *G; //Itt baj van!!!!! operator*() miatt kell! - //Ez csak kicsit baj, de: - // Meg a From() es To() miatt!!!!!!!!!! - - NEGRO::EdgeIt e; - - public: - EdgeIterator() {;} //Kell inicializalni? (Nem) - EdgeIterator(const EdgeIterator &i) {G=i.G;e=i.e;} - - // Lehet, hogy ez a ketto nem kell!!! - - NodeIterator source() const {NodeIterator i;i.G=G;i.n=e->From();return i;} - NodeIterator target() const {NodeIterator i;i.G=G;i.n=e->To();return i;} - NodeIterator opposite(const NodeIterator &n) const - {return n==source()?target():source();} - - bool valid() {return e;} - E &operator*() const { return G->Data(e); } - E *operator->() const { return &G->Data(e); } - - //operator const OutEdgeIterator (); - //operator const InEdgeIterator (); - //operator const BiEdgeIterator (); - //operator const SymEdgeIterator(); //Ez kerdeses, mit csinal - - bool operator==(const EdgeIterator &i) const {return e==i.e;} - bool operator!=(const EdgeIterator &i) const {return e!=i.e;} - - int Index() const {return e->index.block*EDGE_BLOCK_SIZE+e->index.index;} - //If the edges are indexable - - friend class Graph; - friend class InEdgeIterator; - friend class OutEdgeIterator; - friend class BiEdgeIterator; - friend class SymEdgeIterator; - friend class EachEdgeIterator; - }; - - class BiEdgeIterator : public EdgeIterator - { - public: - BiEdgeIterator &goNextIn() { e=e->NextIn(); return *this;} - BiEdgeIterator &goNextOut() { e=e->NextOut(); return *this;} - BiEdgeIterator nextIn() const {return BiEdgeIterator(*this).goNextIn();} - BiEdgeIterator nextOut() const {return BiEdgeIterator(*this).goNextOut();} - - operator InEdgeIterator () - {InEdgeIterator i; i.G=G;i.e=e;return i;} - operator OutEdgeIterator () - {OutEdgeIterator i; i.G=G;i.e=e;return i;} - //operator const SymEdgeIterator () - - friend class Graph; - }; - - class InEdgeIterator : public EdgeIterator - //Ne a BiEdgeIterator-bol szarmazzon? - { - public: - InEdgeIterator() {} - InEdgeIterator(Graph &Gr,const NodeIterator &n) - { G=&Gr; e=Gr.OldGraph::FirstIn(n.n);} - - InEdgeIterator &GoNext() { e=e->NextIn(); return *this;} - InEdgeIterator Next() const {return InEdgeIterator(*this).GoNext();} - InEdgeIterator &operator++() { return GoNext();} - InEdgeIterator operator++(int) - {InEdgeIterator tmp(*this); GoNext(); return tmp;} - - operator const OutEdgeIterator () - {OutEdgeIterator i; i.G=G;i.e=e;return i;} - operator const BiEdgeIterator () - {EdgeIterator i; i.G=G;i.e=e;return i;} - // operator const SymEdgeIterator (); - - NodeIterator Anode() const {return To();} - NodeIterator Bnode() const {return From();} - - friend class Graph; - }; - - class OutEdgeIterator : public EdgeIterator - { - public: - OutEdgeIterator() {} - OutEdgeIterator(Graph &Gr,const NodeIterator &n) - { G=&Gr; e=Gr.OldGraph::FirstOut(n.n);} - - OutEdgeIterator &goNext() { e=e->NextOut(); return *this;} - OutEdgeIterator next() const {return OutEdgeIterator(*this).goNext();} - OutEdgeIterator &operator++() { return goNext();} - OutEdgeIterator operator++(int) - {OutEdgeIterator tmp(*this); goNext(); return tmp;} - - NodeIterator aNode() const {return source();} - NodeIterator bNode() const {return target();} - - operator const InEdgeIterator () - {InEdgeIterator i; i.G=G;i.e=e;return i;} - operator const BiEdgeIterator () - {BiEdgeIterator i; i.G=G;i.e=e;return i;} - //operator const SymEdgeIterator(); - - friend class Graph; - }; - - class SymEdgeIterator : public EdgeIterator - { - NodeIterator n; // Itt ketszer van a G - - public: - SymEdgeIterator() {} - SymEdgeIterator(Graph &Gr,const NodeIterator &nn) - { G=&Gr; n=nn; e=Gr.OldGraph::FirstEdge(nn.n); } - - SymEdgeIterator &goNext() { e=G->NextEdge(n.n,e); return *this;} - SymEdgeIterator next() const {return SymEdgeIterator(*this).goNext();} - SymEdgeIterator &operator++() { return goNext();} - SymEdgeIterator operator++(int) - {SymEdgeIterator tmp(*this); goNext(); return tmp;} - - NodeIterator aNode() const {return n;} - NodeIterator bNode() const {return n.n==source().n?target():source();} - - operator const InEdgeIterator () - {InEdgeIterator i; i.G=G;i.e=e;return i;} - operator const OutEdgeIterator () - {OutEdgeIterator i; i.G=G;i.e=e;return i;} - operator const BiEdgeIterator () - {BiEdgeIterator i; i.G=G;i.e=e;return i;} - - friend class Graph; - }; - - class EachEdgeIterator : public EdgeIterator - { - NodeIterator n; // Itt ketszer van a G - - public: - EachEdgeIterator() {} - EachEdgeIterator(Graph &Gr) : n(Gr) - { - e=n.valid()?Gr.OldGraph::FirstOut(n.n):NULL; - } - - EachEdgeIterator &goNext() - { - e=e->NextOut(); - if(!e && (++n).valid()) e=G->OldGraph::FirstOut(n.n); - return *this; - } - EachEdgeIterator next() const {return EachEdgeIterator(*this).goNext();} - EachEdgeIterator &operator++() { return goNext();} - EachEdgeIterator operator++(int) - {EachEdgeIterator tmp(*this); goNext(); return tmp;} - - - NodeIterator aNode() const {return n;} - NodeIterator bNode() const {return n.n==source().n?target():source();} - - operator const EdgeIterator () - {EdgeIterator i; i.G=G;i.e=e;return i;} - operator const InEdgeIterator () - {InEdgeIterator i; i.G=G;i.e=e;return i;} - operator const OutEdgeIterator () - {OutEdgeIterator i; i.G=G;i.e=e;return i;} - operator const BiEdgeIterator () - {BiEdgeIterator i; i.G=G;i.e=e;return i;} - - friend class Graph; - }; - - typedef NodeIterator DeletingNodeIterator; - typedef EdgeIterator DeletingEdgeIterator; - typedef BiEdgeIterator DeletingBiEdgeIterator; - typedef OutEdgeIterator DeletingOutEdgeIterator; - typedef InEdgeIterator DeletingInEdgeIterator; - typedef SymEdgeIterator DeletingSymEdgeIterator; - - const NodeIterator firstNode() - { - NodeIterator i; - i.G=this;i.n=OldGraph::FirstNode(); - return i; - } - - void getFirst(NodeIt &p) { p=OldGraph::FirstNode(); } - - void getFirst(InEdgeIt &p,const NodeIt &n) - { p=OldGraph::FirstIn(n); } - void getFirst(OutEdgeIt &p,const NodeIt &n) - { p=OldGraph::FirstOut(n); } - void getFirst(SymEdgeIt &p,const NodeIt &n) - { p=OldGraph::FirstEdge(n); } - void getFirst(EdgeIt &p) //Vegigmegy mindenen - { p.e=nodeNum()?OldGraph::FirstOut(OldGraph::FirstNode()):NULL;} - - void getFirst(NodeIterator &i) { i.G=this;i.n=OldGraph::FirstNode();} - - void getFirst(InEdgeIterator &i,const NodeIterator &n) - { i.G=this;i.e=OldGraph::FirstIn(n.n); } - void getFirst(OutEdgeIterator &i,const NodeIterator &n) - { i.G=this;i.e=OldGraph::FirstOut(n.n); } - void getFirst(SymEdgeIterator &i,const NodeIterator &n) - { i.G=this;i.e=OldGraph::FirstEdge(n.n); } - void getFirst(EachEdgeIterator &i) //Vegigmegy mindenen - { - i.G=this; - getFirst(i.n); - i.e=OldGraph::NodeNum()?OldGraph::FirstOut(i.n.n):NULL; - } - - - - //Vagy beginnode()? - const DeletingEdgeIterator firstOut(const NodeIterator &n) - { - EdgeIterator i; - i.G=n.G;i.edge=n.G->OldGraph::FirstOut(n.n); - return i; - } - const DeletingEdgeIterator firstIn(const NodeIterator &n) - { - EdgeIterator i; - i.G=n.G;i.edge=n.G->OldGraph::FirstIn(n.n); - return i; - } - const DeletingSymEdgeIterator firstSym(const NodeIterator &n) - { - EdgeIterator i; - i.G=n.G;i.n=n.n; - i.edge=n.G->OldGraph::FirstEdge(n.n); - return i; - } - - // class FirstAnythingType; - // friend class FirstAnythingType; - - class FirstAnythingTypeNode - { - NodeIterator n; - public: - FirstAnythingTypeNode(NodeIterator i) : n(i) {} - - operator const InEdgeIterator () const - {InEdgeIterator i; n.G->GetFirst(i,n);return i;} - operator const OutEdgeIterator () const - {OutEdgeIterator i; n.G->GetFirst(i,n);return i;} - operator const SymEdgeIterator () const - {SymEdgeIterator i; n.G->GetFirst(i,n);return i;} - - operator const InEdgeIt () const - {InEdgeIt i; n.G->GetFirst(i,n);return i;} - operator const OutEdgeIt () const - {OutEdgeIt i; n.G->GetFirst(i,n);return i;} - operator const SymEdgeIt () const - {SymEdgeIt i; n.G->GetFirst(i,n);return i;} - }; - - class FirstAnythingType - { - Graph *G; - public: - FirstAnythingType(Graph *gg) : G(gg) {} - - operator const EachEdgeIterator () const - {EachEdgeIterator i; G->GetFirst(i);return i;} - operator const EdgeIt () const - {EdgeIt i; G->GetFirst(i);return i;} - operator const NodeIterator () const - {NodeIterator i; G->GetFirst(i);return i;} - operator const NodeIt () const - {NodeIt i; G->GetFirst(i);return i;} - } _FST; - - // const NodeIterator First() {NodeIterator i;GetFirst(i); return i;} - FirstAnythingTypeNode first(NodeIterator &i) - {FirstAnythingTypeNode t(i); return t;} - const FirstAnythingType &first() {return _FST;} - - // LastNode() vagy endnode() stb. Nem kell? - - DeletingNodeIterator addNode() - { - DeletingNodeIterator i; - i.G=this; i.n=OldGraph::AddNode(); - return i; - } - DeletingEdgeIterator - addEdge(const NodeIterator from,const NodeIterator to) - { - DeletingEdgeIterator i; - i.G=this;i.e=OldGraph::AddEdge(from.n,to.n);return i; - } - - void Delete(DeletingNodeIterator n) {n.G->OldGraph::Delete(n.n);} - void Delete(DeletingEdgeIterator e) {e.G->OldGraph::Delete(e.e);} - - int nodeNum() { OldGraph::NodeNum(); } - void clean() { OldGraph::Clean(); } - - Graph() : _FST(this) {} - - // MAPS: - template class NodeMap - { - Graph *G; - vector map; - - public: - typedef T value_type; - void put(const NodeIterator i, const T &t) {map[i.Index()]=t;} - T get(const NodeIterator i) const {return map[i.Index()];} - T operator[](NodeIterator i) {return map[i.Index()];} - - void update() { map.resize(G->MaxNode());} - - NodeMap() {} - void setG(Graph &Gr) { G=&Gr; update();} - }; - - template class EdgeMap - { - Graph *G; - vector map; - - public: - typedef T value_type; - void put(const EdgeIterator i, const T &t) {map[i.Index()]=t;} - T get(const EdgeIterator i) const {return map[i.Index()];} - T &operator[](EdgeIterator i) {return map[i.Index()];} - - void update() - { map.resize(G->MaxEdge());} - - EdgeMap() {} - void setG(Graph &Gr) - { G=&Gr ;update();} - - }; - - - int maxNode() { return OldGraph::MaxNode();} - int maxEdge() { return ::edge_block_num*EDGE_BLOCK_SIZE;} - - }; - - template //G is a graph-type - class Path - { - public: - typedef G Graph; - typedef typename G::NodeIterator NodeIterator; - typedef typename G::EdgeIterator EdgeIterator; - typedef typename G::SymEdgeIterator SymEdgeIterator; - - private: - std::vector path; - std::vector reversed; - - public: - void setLength(int n) { path.resize(n);reversed.resize(n);} - int getLength() { return path.size(); } - EdgeIterator &operator[](int n) {return path[n];} - NodeIterator GetNode(int n) // What about path of length 1? - { - return n? - reversed[n-1]?path[n-1].source():path[n-1].target(): - reversed[0]?path[0].target():path[0].source(); - } - void setRevert(int n,bool r=true) {reversed[n]=r;} - void setEdge(int n,SymEdgeIterator i) - { - path[n]=i; - reversed[n] = i.target()==i.aNode(); - } - void setEdge(int n,EdgeIterator i,bool r) - { - path[n]=i; - reversed[n] = r; - } - - NodeIterator source() { return getNode(0); } - NodeIterator target() { return getNode(getLength()); } - }; - - /* Ez itt a fiam kommentje: - -class TrivGraphWrapper -{ - G *graph; - -public: - typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - typedef typename G::InEdgeIt InEdgeIt; - typedef typename G::OutEdgeIt OutEdgeIt; - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - - template I &getFirst(I &i); { return graph->getFirst(i); } - template I &getFirst(I &i,const P &p); - { return graph->getFirst(i,p); } - template I next(const I i); { return graph->goNext(i); } - template I &goNext(I &i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return graph->target(e); } - NodeIt source(const EdgeIt &e); - { return graph->source(e); } - - template NodeIt aNode(const I e); - { return graph->aNode(e); } - template NodeIt bNode(const I e); - { return graph->bNode(e); } - - template bool valid(const I i); - { return graph->valid(i); } - - template void setInvalid(const I &i); - { return graph->setInvalid(i); } - - NodeIt addNode(); { return graph->addNode(); } - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return graph->addEdge(ftom,to); } - - template void delete(I i); { graph->delete(i); } - - void clean(); { graph->clean(); } - - template class NodeMap : public typename G::NodeMap; - template class EdgeMap : public typename G::EdgeMap; - - void SetG(G &g) {graph = &g;} - - TrivGraphWrapper() {graph = NULL;} - TrivGraphWrapper(G &g) {graph = &g;} -}; - -template -class RevGraphWrapper -{ - G *graph; - -public: - typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - typedef typename G::InEdgeIt OutEdgeIt; - typedef typename G::OutEdgeIt InEdgeIt; - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - - template I &getFirst(I &i); { return graph->getFirst(i); } - template I &getFirst(I &i,const P &p); - { return graph->getFirst(i,p); } - template I next(const I i); { return graph->goNext(i); } - template I &goNext(I &i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return graph->source(e); } - NodeIt source(const EdgeIt &e); - { return graph->target(e); } - - template NodeIt aNode(const I e); - { return graph->aNode(e); } - template NodeIt bNode(const I e); - { return graph->bNode(e); } - - template bool valid(const I i); - { return graph->valid(i); } - - template void setInvalid(const I &i); - { return graph->setInvalid(i); } - - NodeIt addNode(); { return graph->addNode(); } - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return graph->addEdge(to,from); } - - template void delete(I i); { graph->delete(i); } - - void clean(); { graph->clean(); } - - template class NodeMap : public typename G::NodeMap; - template class EdgeMap : public typename G::EdgeMap; - - void SetG(G &g) {graph = &g;} - - RevGraphWrapper() {graph = NULL;} - RevGraphWrapper(G &g) {graph = &g;} -}; - -template -class RevGraphExt : public G -{ -public: - // typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - typedef typename G::InEdgeIt OutEdgeIt; - typedef typename G::OutEdgeIt InEdgeIt; - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - -// template I &getFirst(I &i); { return graph->getFirst(i); } -// template I &getFirst(I &i,const P &p); -// { return graph->getFirst(i,p); } -// template I next(const I i); { return graph->goNext(i); } -// template I &goNext(I &i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return G::source(e); } - NodeIt source(const EdgeIt &e); - { return G::target(e); } - -// template NodeIt aNode(const I e); -// { return graph->aNode(e); } -// template NodeIt bNode(const I e); -// { return graph->bNode(e); } - -// template bool valid(const I i); -// { return graph->valid(i); } - -// template void setInvalid(const I &i); -// { return graph->setInvalid(i); } - -// NodeIt addNode(); { return graph->addNode(); } - - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return G::addEdge(to,from); } - -// template void delete(I i); { graph->delete(i); } - -// void clean(); { graph->clean(); } - -// template class NodeMap : public typename G::NodeMap; -// template class EdgeMap : public typename G::EdgeMap; - -// void SetG(G &g) {graph = &g;} - -// RevGraphWrapper() {graph = NULL;} -// RevGraphWrapper(G &g) {graph = &g;} -}; - -template -class SymGraphWrapper -{ - G *graph; - -public: - typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - typedef typename G::SymEdgeIt InEdgeIt; - typedef typename G::SymEdgeIt OutEdgeIt; - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - - template I &getFirst(I &i); { return graph->getFirst(i); } - template I &getFirst(I &i,const P &p); - { return graph->getFirst(i,p); } - template I next(const I i); { return graph->goNext(i); } - template I &goNext(I &i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return graph->target(e); } - NodeIt source(const EdgeIt &e); - { return graph->source(e); } - - template NodeIt aNode(const I e); - { return graph->aNode(e); } - template NodeIt bNode(const I e); - { return graph->bNode(e); } - - template bool valid(const I i); - { return graph->valid(i); } - - template void setInvalid(const I &i); - { return graph->setInvalid(i); } - - NodeIt addNode(); { return graph->addNode(); } - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return graph->addEdge(to,from); } - - template void delete(I i); { graph->delete(i); } - - void clean(); { graph->clean(); } - - template class NodeMap : public typename G::NodeMap; - template class EdgeMap : public typename G::EdgeMap; - - void SetG(G &g) {graph = &g;} - - RevGraphWrapper() {graph = NULL;} - RevGraphWrapper(G &g) {graph = &g;} -}; - - - - - - - - - - - - - - - - - - - -// FIXME: comparison should be made better!!! -template -class ResGraphWrapper -{ - G *graph; - -public: - typedef G BaseGraph; - - typedef typename G::EdgeIt EdgeIt; - - class InEdgeIt - { - public: - G::NodeIt n; - G::InEdgeIt i; - G::OutEdgeIt o; - } - class OutEdgeIt - { - public: - G::NodeIt n; - G::InEdgeIt i; - G::OutEdgeIt o; - } - typedef typename G::SymEdgeIt SymEdgeIt; - typedef typename G::EachEdgeIt EachEdgeIt; - - typedef typename G::NodeIt NodeIt; - - NodeIt &getFirst(NodeIt &n); { return graph->getFirst(n); } - - // EachEdge and SymEdge is missing!!!! - // EdgeIt <-> In/OutEdgeIt conversion is missing!!!! - - InEdgeIt &getFirst(InEdgeIt &e,const NodeIt &n) - { - e.n=n; - graph->getFirst(e.i,n); - while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i)) - graph->goNext(e.i); - if(!graph->valid(e.i)) { - graph->getFirst(e.o,n); - while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o)) - graph->goNext(e.o); - } - return e; - } - InEdgeIt &goNext(InEdgeIt &e) - { - if(graph->valid(e.i)) { - while(graph->valid(e.i) && fmap.get(e.i)>=himap.get(e.i)) - graph->goNext(e.i); - if(graph->valid(e.i)) return e; - else graph->getFirst(e.o,e.n); - } - else { - while(graph->valid(e.o) && fmap.get(e.o)<=lomap.get(e.o)) - graph->goNext(e.o); - return e; - } - } - InEdgeIt Next(const InEdgeIt &e) {InEdgeIt t(e); return goNext(t);} - bool valid(const InEdgeIt e) { return graph->valid(e.i)||graph->valid(e.o);} - - OutEdgeIt &getFirst(OutEdgeIt &e,const NodeIt &n) - { - e.n=n; - graph->getFirst(e.o,n); - while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o)) - graph->goNext(e.o); - if(!graph->valid(e.o)) { - graph->getFirst(e.i,n); - while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i)) - graph->goNext(e.i); - } - return e; - } - OutEdgeIt &goNext(OutEdgeIt &e) - { - if(graph->valid(e.o)) { - while(graph->valid(e.o) && fmap.get(e.o)>=himap.get(e.o)) - graph->goNext(e.o); - if(graph->valid(e.o)) return e; - else graph->getFirst(e.i,e.n); - } - else { - while(graph->valid(e.i) && fmap.get(e.i)<=lomap.get(e.i)) - graph->goNext(e.i); - return e; - } - } - OutEdgeIt Next(const OutEdgeIt &e) {OutEdgeIt t(e); return goNext(t);} - bool valid(const OutEdgeIt e) { return graph->valid(e.o)||graph->valid(e.i);} - - template I &goNext(I &i); { return graph->goNext(i); } - template I next(const I i); { return graph->goNext(i); } - - NodeIt target(const EdgeIt &e); - { return graph->target(e); } - NodeIt source(const EdgeIt &e); - { return graph->source(e); } - - template NodeIt aNode(const I e); - { return graph->aNode(e); } - template NodeIt bNode(const I e); - { return graph->bNode(e); } - - template bool valid(const I i); - { return graph->valid(i); } - - template void setInvalid(const I &i); - { return graph->setInvalid(i); } - - NodeIt addNode(); { return graph->addNode(); } - EdgeIt addEdge(const NodeIt from,const NodeIt to); - { return graph->addEdge(to,from); } - - template void delete(I i); { graph->delete(i); } - - void clean(); { graph->clean(); } - - template class NodeMap : public typename G::NodeMap; - template class EdgeMap : public typename G::EdgeMap; - - void SetG(G &g) {graph = &g;} - - RevGraphWrapper() {graph = NULL;} - RevGraphWrapper(G &g) {graph = &g;} -}; - - - -// NodeIt &getFirst(NodeIt &n) { return graph->getFirst(n); } -// InEdgeIt &getFirst(InEdgeIt &e,const NodeIt &n); -// { return graph->getFirst(e,n); } -// OutEdgeIt &getFirst(OutEdgeIt &e,const NodeIt &n); -// { return graph->getFirst(e,n); } -// SymEdgeIt &getFirst(SymEdgeIt &e,const NodeIt &n); -// { return graph->getFirst(e,n); } -// EachEdgeIt &getFirst(EachEdgeIt &e); -// { return graph->getFirst(e); } - -// NodeIt next(const NodeIt &n); -// { return graph->next(n); } -// InEdgeIt next(const InEdgeIt &e); -// { return graph->next(e); } -// OutEdgeIt next(const OutEdgeIt &e); -// { return graph->next(e); } -// SymEdgeIt next(const SymEdgeIt &e); -// { return graph->next(e); } -// EachEdgeIt next(const EachEdgeIt &e); -// { return graph->next(e); } - -// NodeIt &goNext(NodeIt &n); -// { return graph->goNext(n); } -// InEdgeIt &goNext(InEdgeIt &e); -// { return graph->goNext(e); } -// OutEdgeIt &goNext(OutEdgeIt &e); -// { return graph->goNext(e); } -// SymEdgeIt &goNext(SymEdgeIt &e); -// { return graph->goNext(e); } -// EachEdgeIt &goNext(EachEdgeIt &e); -// { return graph->goNext(e); } - diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/list_graph_demo.cc --- a/src/work/alpar/list_graph_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,154 +0,0 @@ -#include -#include - -#include -#include - -using namespace lemon; - -typedef ListGraph Graph; -//typedef Graph Graph; - - -Graph::OutEdgeIt safeFirstOut(const Graph &G, Graph::Node n) -{ - return G.valid(n) ? Graph::OutEdgeIt(G,n):INVALID; -} - -int main() -{ - - typedef Graph::Edge Edge; - typedef Graph::InEdgeIt InEdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - - Graph G; - - { - NodeIt n; - - for(int i=0;i<10;i++) G.addNode(); - for(G.first(n);G.valid(n);G.next(n)) - for(NodeIt m(G);m!=INVALID;G.next(m)) - if(n!=m) G.addEdge(n,m); - - OutEdgeIt e = safeFirstOut(G,n); - OutEdgeIt f = safeFirstOut(G,NodeIt(G)); - - - InEdgeIt i(INVALID), j; - InEdgeIt ii(i); - ii=G.first(i,n); - ii=G.next(i); - - OutEdgeIt o(INVALID), oo; - OutEdgeIt ooo(oo); - oo=G.first(o,n); - oo=G.next(o); - - EdgeIt ei(INVALID), eie; - EdgeIt eiee(ei); - eie=G.first(ei); - eie=G.next(ei); - - Edge eee(i); - eee=o; - eee=eie; - - - bool tm; - tm = G.valid(n) && G.valid(i) && G.valid(o) && G.valid(ei); - - std::vector v(10); - std::vector w(10,INVALID); - - } - - // Test of maps - - G.clear(); - - for(int i=0;i<10;i++) G.addNode(); - for(NodeIt i(G);G.valid(i);G.next(i)) - for(NodeIt j(G);G.valid(j);G.next(j)) - if(i n(G); - int count=0; - for(NodeIt i(G);G.valid(i);G.next(i)) n[i]=count++; - - Graph::NodeMap nn=n; - Graph::NodeMap dd=n; - - n = nn; - - dd = nn; - - Graph::EdgeMap emap(G); - - // Test of SymListGraph - - { - typedef SymListGraph Graph; - typedef Graph::Edge Edge; - typedef Graph::InEdgeIt InEdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - - Graph G; - - for(int i=0;i<10;i++) G.addNode(); - for(NodeIt i(G);G.valid(i);G.next(i)) - for(NodeIt j(G);G.valid(j);G.next(j)) - if(i em(G); - Graph::SymEdgeMap sm(G); - for(EdgeIt e(G);G.valid(e);G.next(e)) em[e]=G.id(e); - for(EdgeIt e(G);G.valid(e);G.next(e)) - if(G.source(e)" << G.id(G.target(e)) - << ": id=" << G.id(e) << " oppid=" << G.id(G.opposite(e)) - << " em=" << em[e] - << " sm=" << sm[e] << "\n"; - - //Delete all nodes - NodeIt n; - while(G.valid(G.first(n))) G.erase(n); - } - - // Tests for NodeSet and EdgeSet - - { - NodeSet N; - - typedef EdgeSet ES; - - ES E(N); - ES F(N); - for(int i=0;i<10;i++) G.addNode(); - - for(ES::NodeIt n(E);E.valid(n);E.next(n)) - for(ES::NodeIt m(E);E.valid(m);E.next(m)) - if(n!=m) F.addEdge(n,m); - for(ES::NodeIt n(F);F.valid(n);F.next(n)) - for(ES::NodeIt m(F);F.valid(m);F.next(m)) - if(n nm1(N); - ES::NodeMap nm2(E); - ES::EdgeMap eme(E); - ES::EdgeMap emf(F); - - - } - -} diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/matrix.cc --- a/src/work/alpar/matrix.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -#include -#include - -template -class Matrix -{ -public: - int m,n; - std::vector values; - - Matrix(int _m, int _n) : m(_m), n(_n), values(n*m) {} - typename std::vector::reference operator()(int i, int j) - { return values[i*n+j];} - - class Row - { - public: - Matrix &mat; - int row; - - Row(Matrix &_mat,int _row) : mat(_mat), row(_row) {} - typename std::vector::reference operator()(int j) - { return mat.values[row*mat.n+j];} - }; - class Column - { - public: - Matrix &mat; - int col; - - Column(Matrix &_mat,int _col) : mat(_mat), col(_col) {} - typename std::vector::reference operator[](int i) - { return mat.values[i*mat.n+col];} - }; - - Row operator[](int i) { return Row(*this,i); } - Column operator()(int j) { return Column(*this,j); } -}; - -main() -{ - const int COUNT=1000000; - const int SIZE=100; - - Matrix A(SIZE,SIZE); - - for(int i=0;i -class Named_T -{ -public: - - typedef A Atype; - typedef B Btype; - - template class SetAType : public Named_T { }; - template class SetBType : public Named_T { }; -}; - -// Named_T<>::SetAType::SetBType - -////////////////////////////////////////////////////////////////////// -// Named class template parameters (A) -////////////////////////////////////////////////////////////////////// - -struct _NTR -{ - typedef int Atype; - typedef double Btype; -}; - -template -class Named_TR -{ -public: - - typedef typename TR::Atype Atype; - typedef typename TR::Btype Btype; - - Atype a; - Btype b; - - template - struct ATR : public TR { - typedef T Atype; - }; - - template - class SetAType : public Named_TR > { }; - - template - struct BTR : public TR { - typedef T Btype; - }; - template - class SetBType : public Named_TR > { }; - - Named_TR() {}; - Named_TR &setA(Atype _a) { a=_a; return *this;} - Named_TR &setB(Btype _b) { b=_b; return *this;} - - void run() { - // itt az algoritmus - } - - ////////////////////////////////////////////////////////////////////// - template - SetAType SETA(T t) { SetAType r; r.a=t; r.b=b; return r;} - template - SetBType SETB(T t) { SetBType r; r.a=a; r.b=t; return r;} -}; - -// Hasznalat: -// 1. -// Named_TR<>::SetAType nt; -// Named_TR<>::SetBType::SetAType nt2; -// nt2.setA(5).setB(6).run(); -// 2. -// double x; -// Named_TR<>().SETA(5.2).SETB(x).run(); -// 3. -// struct MyTr : public _NTR { typedef float Btype; }; -// int main() -// { -// Named_TR d2; d2=d2; -// } - - -// Sajnos ezt csak a fuggvenyen kivul lehet deklaralni: -struct MyTr : public _NTR { typedef float Btype; }; - -typedef Named_T<> Named_TN; - -int main() -{ - - Named_T<> a;a=a; - Named_T<>::SetAType b;b=b; - Named_T<>::SetAType::SetBType c;c=c; - - Named_TR<> a2;a2=a2; - Named_TR<>::SetAType b2;b2=b2; - Named_TR<>::SetAType::SetBType c2;c2=c2; - - //De igy is lehet: - Named_TR d2; d2=d2; - - named_fn().id(3); - named_fn().id(3).val(2); - named_fn().dim(4).id(3); - - Named_TR<>::SetAType nt; - Named_TR<>::SetBType::SetAType nt2; - nt2.setA(5).setB(6).run(); - - double x; - Named_TR<>().SETA(5.2).SETB(x).run(); -} - diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/named-param-test2.cc --- a/src/work/alpar/named-param-test2.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -struct TR -{ - int a; - int b; - int c; -}; - -template struct D -{ - T t; - - D(const T &tt) :t(tt) {}; - - template struct TA : public T { - X a; - TA(const T &t,const X& x) : T(t), a(x) {}; - }; - template D > setA(const X &x) { - return D >(TA(this->t,x)); - } - - template struct TB : public T { - X b; - TB(const T &t,const X& x) : T(t), b(x) {}; - }; - - template D > setB(const X &x) { - return D >(TB(this->t,x)); - } - - template struct TC : public T { - X c; - TC(const T &t,const X& x) : T(t), c(x) {}; - }; - - template D > setC(const X &x) { - return D >(TC(this->t,x)); - } - ~D() - { - //Itt csinalunk valamit - } -}; - -D d() -{ - return D(TR()); -} - -int main() -{ - d(); - d().setA(5.5).setB(10).setC(1.5e12); -} diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/named-param-test3.cc --- a/src/work/alpar/named-param-test3.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -struct TR -{ - int a; - int b; - int c; -}; - -template struct D : public T -{ - - D(const T &tt) : T(tt) {}; - - template struct TA : public T { - X a; - TA(const T &t,const X& x) : T(t), a(x) {}; - }; - - template D > setA(const X &x) { - return D >(TA(*this,x)); - } - - template struct TB : public T { - X b; - TB(const T &t,const X& x) : T(t), b(x) {}; - }; - - template D > setB(const X &x) { - return D >(TB(*this,x)); - } - - template struct TC : public T { - X c; - TC(const T &t,const X& x) : T(t), c(x) {}; - }; - - template D > setC(const X &x) { - return D >(TC(*this,x)); - } - ~D() - { - //Itt csinalunk valamit - } -}; - -D d() -{ - return D(TR()); -} - -int main() -{ - d(); - d().setA(5.5).setB(10).setC(1.5e12); -} diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/named-param-test4.cc --- a/src/work/alpar/named-param-test4.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,158 +0,0 @@ -///\file -///Named template study - -///\e - -///\e -/// -class AlgorithmDefaultTypes -{ -public: -///\e - -///\e -/// - typedef int Adat; -}; - -///\e - -///\e -/// -template -class AlgorithmTypes : public T -{ -public: -///\e - -///\e -/// - template - class SetAdat : public T { X Adat; }; -}; - -///\e - -///\e -/// -template > -class AlgorithmDefaultDataFields : public T -{ -protected: -///\e - -///\e -/// - typedef T TypeTraits; //Jo ez a nev? -protected: -///\e - -///\e -/// - typename T::Adat adat; -}; - -///\e - -///\e -/// -template > -class Algorithm : public T -{ - int _intAdat; -public: - Algorithm() {}; - Algorithm(const T &tt) : T(tt) {}; - - template class _SetAdat : public T { - protected: - X adat; - public: - typedef X Adat; - _SetAdat() {}; //"Algorithm<>::_SetAdat b;"-hez kell!!!! - // De az is rossz!!!!! - _SetAdat(const T &t,const X& x) : T(t), adat(x) {}; - }; - - ///\name Funtion Named Parameters - - ///@{ - - ///\e - - ///\e - /// - template - Algorithm<_SetAdat > setAdat(const X &x) { - return Algorithm<_SetAdat >(_SetAdat(*this,x)); - } - - ///@} - ///\name Named Parameters - - ///@{ - - ///\e - - ///\e - /// - template - class SetAdat : - public Algorithm > > - {}; - - ///@} - -///\e - -///\e -/// - Algorithm &setIntAdat(int i) {_intAdat=i;return *this;} - //vagy: -///Vagy - -///Vagy... -/// - Algorithm &intAdat(int i) {_intAdat=i;return *this;} - - //Maga az algoritmus!!!!!!! -///\e - -///\e -/// - typename T::Adat run() - { - //Itt csinalunk valamit - return adat; - } - - ~Algorithm() - { - //Itt nem csinalunk semmit - } -}; - -///\e - -///\e -/// -Algorithm<> algorithm() -{ - return Algorithm<>(); -} - -int main() -{ - Algorithm<> a; - a.run(); - -// Algorithm<>::_SetAdat b; b=b;//Ez itt nem az, amit szeretnenk!!! -// // b.run(); - - Algorithm<>::SetAdat c; //Algorithm<>::Adat c; jobb vo'na - c.run(); - - algorithm().run(); - algorithm().setAdat(5.2).run(); -} diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/oldgraph.h --- a/src/work/alpar/oldgraph.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,551 +0,0 @@ -// -*-mode: c++; -*- -#ifndef __OLDGRAPH_H_ -#define __OLDGRAPH_H_ - -#include - -//#include - -#define INVALID -1 -#define FREE_NODE INVALID - -#define EDGE_BLOCK_SIZE 100 -#define INIT_NODES_SIZE 10 -#define INIT_EDGES_BLOCK_MAX 10 - -#define foreachNode(n,G) for((n)=(G).FirstNode();(n)!=INVALID;(n)=(G).NextNode(n)) -#define foreachIn(e,G,n) for((e)=(G).FirstIn(n) ;(e);(e)=(G).NextIn(e) ) -#define foreachOut(e,G,n) for((e)=(G).FirstOut(n);(e);(e)=(G).NextOut(e)) -#define foreachEdge(e,G,n) for((e)=(G).FirstEdge(n);(e);(e)=(G).NextEdge((n),(e))) - -struct EdgeIndex { int block,index; }; - -extern EdgeIndex InvalidIndex; - -class EdgeCorp; -typedef EdgeCorp *EdgePoint; - -class EdgeCorp { - public: - int from,to; //from==INVALID <=> this is a free edge. - EdgePoint previn,nextin,prevout,nextout; - EdgeIndex index; - - int From() { return from; } - int To() { return to; } - EdgePoint NextIn() { return nextin; } - EdgePoint NextOut() { return nextout; } -}; - -inline int From(EdgePoint e) { return e->from; } -inline int To(EdgePoint e) { return e->to; } -inline EdgePoint NextIn(EdgePoint e) { return e->nextin; } -inline EdgePoint NextOut(EdgePoint e) { return e->nextout; } - - -////////////////////////////////////////////////////////////////////// -// OLDGRAPH TEMPLATE -////////////////////////////////////////////////////////////////////// -// Copy Constructor should be provided for N - -//class Graph; -//class Graph::NodeIterator; //Nem megy. Disznosag! -template class OldGraph -{ - - // friend class NEGRO::Graph::NodeIterator; //Nem megy. Disznosag! - - - class nodes_t; - friend class OldGraph::nodes_t; - class edge_block; - friend class OldGraph::edge_block; - - class edge_t : public EdgeCorp { - public: - //edge_t *previn,*nextin,*prevout,*nextout; - union { - int _align; - char data[sizeof(E)]; - }; - }; - - class nodes_t { - public: - union { - int _align; - char data[sizeof(N)]; - }; - int indeg,outdeg; // indeg==FREE_NODE <=> this node is free. - EdgePoint firstin, firstout; - int prev,next; - - void Copy(nodes_t &n) - { - indeg = n.indeg; outdeg = n.outdeg; - firstin = n.firstin; firstout = n.firstout; - prev = n.prev; next = n.next; - if(n.indeg!=FREE_NODE) new(data) N(*(N*)(n.data)); - // if(n.indeg!=FREE_NODE) { - // new(data) N; - // (*(N*)(data))=(*(N*)(n.data)); - // } - } - - } *nodes; - int nodenum, nodes_size; - int firstnode, freenodes; - class edge_block { - public: - //edge_block *next; - // char fields[sizeof(edge_t)*EDGE_BLOCK_SIZE]; - edge_t fields[EDGE_BLOCK_SIZE]; - } **edges; - int edge_block_num,edge_block_max; - EdgePoint freeedges; - - void setup(int nosi = INIT_NODES_SIZE); - void destroy(); - void inc_nodes_size(int n); - - public: - int NodeNum() {return nodenum;}; - int EdgeNum(); - int MaxNode() const {return nodes_size;}; - int FirstNode() const {return firstnode;}; - int NextNode(int n) const {return nodes[n].next;}; - int PrevNode(int n) const {return nodes[n].prev;}; - N& operator()(int n) const {return *(N*)(nodes[n].data);}; - N& Data (int n) const {return *(N*)(nodes[n].data);}; - int AddNode(); - void AddNodeBlock(int n) const {for(int i=0;i=0&&ndata);}; - E& Data (EdgePoint e) const {return *(E*)(((edge_t*)e)->data);}; - int From(EdgePoint e) const {return e->from;}; - int To(EdgePoint e) const {return e->to;}; - EdgePoint NextIn(EdgePoint e) const - {return e->nextin;}; - EdgePoint NextOut(EdgePoint e)const - {return e->nextout;}; - EdgePoint AddEdge(int f, int t); - void Delete(EdgePoint e); - EdgePoint Edge(int f,int t); - // EdgePoint Edge(E &d) - // {return (EdgePoint)(((char*)&d)-(char*)&(((edge_t*)NULL)->data));}; - E& operator()(int f, int t) const {return *(E*)(((edge_t*)Edge(f,t))->data);}; - E& Data(int f, int t) const {return *(E*)(((edge_t*)Edge(f,t))->data);}; - void Delete(int f, int t) {Delete(Edge(f,t));}; - void Reverse(EdgePoint e); - - // Functions for EdgeIndex - - EdgePoint Edge(EdgeIndex i) const - { return (EdgePoint)(edges[i.block]->fields+i.index);}; - EdgeIndex Index(EdgePoint e) const { return e->index;}; - EdgeIndex Index(int f, int t) const { EdgePoint e; return Edge(f,t)->index; } - void Delete(EdgeIndex i) { Delete(Edge(i));}; - E& operator()(EdgeIndex i) const - {return *(E*)(edges[i.block]->fields[i.index].data);}; - E& Data(EdgeIndex i) const - {return *(E*)(edges[i.block]->fields[i.index].data);}; - EdgePoint AddEdge(int f, int t,EdgeIndex in); - - - - // Operators for symmetric graphs: - - EdgePoint FirstEdge(int n) const - { return (EdgePoint)(FirstIn(n)?FirstIn(n):FirstOut(n));}; - EdgePoint NextEdge(int n,EdgePoint e) const - { return From(e)==n?NextOut(e):(NextIn(e)?NextIn(e):FirstOut(n)); }; - int Opposite(EdgePoint e,int n) const - { return From(e)+To(e)-n; }; - - // Initializers, destructors - - OldGraph() {setup();}; - OldGraph(int nosi) {setup(nosi);}; - OldGraph(OldGraph &H) {setup();operator=(H);}; - ~OldGraph() {destroy();}; - void Clean(int nosi = INIT_NODES_SIZE) {destroy();setup(nosi);}; - void Clear(int nosi = INIT_NODES_SIZE) {destroy();setup(nosi);}; - - void DeleteEdges(); - - OldGraph &operator=(OldGraph &H); -}; - -////////////////////////////////////////////////////////////////////// -// Template Definitions -////////////////////////////////////////////////////////////////////// - -//#include - -//********************************************************************** -// OldGraph definitions -//********************************************************************** - -template void OldGraph::setup(int nosi) { - int i; - - //Set up nodes - nodenum = 0; - nodes_size = nosi; - // nodes = (nodes_t*) new char[sizeof(nodes_t)*nodes_size]; - nodes = (nodes_t*) new nodes_t [nodes_size]; - for(i=0;i void OldGraph::destroy() -{ - int i; - - while(firstnode!=INVALID) Delete(firstnode); - delete [] nodes; - for(i=0;i void OldGraph::inc_nodes_size(int n) -{ - int i; - if(n<=nodenum) return; - - nodes_t *nn; -// nn = (nodes_t*) new char [sizeof(nodes_t)*n]; - nn = (nodes_t*) new nodes_t [n]; - for(i=0;i~N(); - } - - delete [] nodes; - nodes = nn; - for(i=nodes_size;i OldGraph &OldGraph::operator=(OldGraph &H) -{ - Clean(); - - int i; - EdgePoint e; - - for(i=H.FirstNode();i!=INVALID;i=H.NextNode(i)) - { - AddNode(i); - operator()(i)=H(i); - } - for(i=H.FirstNode();i!=INVALID;i=H.NextNode(i)) - for(e=H.FirstOut(i);e;e=H.NextOut(e)) - operator()(AddEdge(i,H.To(e),H.Index(e)))=H(e); - - return *this; -} - -template int OldGraph::EdgeNum() -{ - int n=firstnode, m=0; - EdgePoint e; - while(n != INVALID) - { - e=FirstOut(n); - while (e != NULL) - { - m++; - e=NextOut(e); - } - n=nodes[n].next; - } - return m; -} - -template int OldGraph::AddNode() -{ - int i; - - if(freenodes==INVALID) inc_nodes_size(2*nodes_size); - - i=freenodes; - if(firstnode!=INVALID) nodes[firstnode].prev=i; - freenodes=nodes[i].next; - new(nodes[i].data) N; //Explicit constructor call - nodes[i].next=firstnode; - nodes[i].prev=INVALID; - nodes[i].indeg=0; - firstnode=i; - if(freenodes!=INVALID) nodes[freenodes].prev=INVALID; - nodenum++; - return i; -} - -template int OldGraph::AddNode(int n) -{ - int i; - - if(n>=nodes_size) - { - for(i=INIT_NODES_SIZE;i<=n;i*=2) ; - inc_nodes_size(i); - } - - if(nodes[n].indeg==FREE_NODE) - { - new(nodes[n].data) N; //Explicit constructor call - if(nodes[n].next!=INVALID) nodes[nodes[n].next].prev = nodes[n].prev; - if(nodes[n].prev!=INVALID) nodes[nodes[n].prev].next = nodes[n].next; - else freenodes = nodes[n].next; - - nodes[n].prev = INVALID; - if((nodes[n].next = firstnode)!=INVALID) nodes[firstnode].prev=n; - firstnode = n; - nodenum++; - nodes[n].indeg=0; - } - return n; -} - -template void OldGraph::Delete(int n) -{ - if(n==INVALID||nodes[n].indeg==FREE_NODE) return; - - EdgePoint e; - - while(e=FirstIn(n)) Delete(e); - while(e=FirstOut(n)) Delete(e); - - if(n==firstnode) firstnode=nodes[n].next; - if(nodes[n].prev!=INVALID) nodes[nodes[n].prev].next=nodes[n].next; - if(nodes[n].next!=INVALID) nodes[nodes[n].next].prev=nodes[n].prev; - if(freenodes!=INVALID) nodes[freenodes].prev=n; - nodes[n].next=freenodes; - nodes[n].prev=INVALID; - nodes[n].indeg=FREE_NODE; - ((N*)(nodes[n].data))->~N(); //Explicit destructor call - freenodes=n; - - nodenum--; -} - -template EdgePoint OldGraph::AddEdge(int f, int t) -{ - int i; - edge_block *peb; - edge_block **ppeb; - edge_t *e; - - if(!freeedges) - { - if(edge_block_num>=edge_block_max) - { - ppeb = new edge_block* [edge_block_max*=2]; - for(i=0;ifields)[i].nextin=((edge_t*)peb->fields)+(i+1); - ((edge_t*)peb->fields)[i].previn=((edge_t*)peb->fields)+(i-1); - ((edge_t*)peb->fields)[i].index.block = edge_block_num; - ((edge_t*)peb->fields)[i].index.index = i; - ((edge_t*)peb->fields)[i].from = INVALID; - } - ((edge_t*)peb->fields)[0].previn= - ((edge_t*)peb->fields)[EDGE_BLOCK_SIZE-1].nextin=NULL; - freeedges = (edge_t*)peb->fields; - edge_block_num++; - } - - e=(edge_t *)freeedges; - new (e->data) E; //Explicit constructor call - freeedges=e->nextin; - if(freeedges) freeedges->previn=NULL; - - e->from=f; e->to=t; - e->previn=e->prevout=NULL; - e->nextin=nodes[t].firstin; - e->nextout=nodes[f].firstout; - if(nodes[t].firstin) nodes[t].firstin->previn=e; - if(nodes[f].firstout) nodes[f].firstout->prevout=e; - nodes[t].firstin=nodes[f].firstout=e; - nodes[t].indeg++; nodes[f].outdeg++; - - return (EdgePoint)e; - -} - -template -EdgePoint OldGraph::AddEdge(int f, int t, EdgeIndex in) -{ - int i; - edge_block *peb; - edge_block **ppeb; - edge_t *e; - - while(edge_block_num<=in.block) - { - if(edge_block_num>=edge_block_max) - { - ppeb = new edge_block* [edge_block_max*=2]; - for(i=0;ifields)[i].nextin=((edge_t*)peb->fields)+(i+1); - ((edge_t*)peb->fields)[i].previn=((edge_t*)peb->fields)+(i-1); - ((edge_t*)peb->fields)[i].index.block = edge_block_num; - ((edge_t*)peb->fields)[i].index.index = i; - ((edge_t*)peb->fields)[i].from = INVALID; - } - ((edge_t*)peb->fields)[0].previn=NULL; - ((edge_t*)peb->fields)[EDGE_BLOCK_SIZE-1].nextin=freeedges; - if(freeedges) - freeedges->previn = ((edge_t*)peb->fields) + (EDGE_BLOCK_SIZE-1); - freeedges = (edge_t*)peb->fields; - edge_block_num++; - } - - - e=((edge_t*)(edges[in.block]->fields))+in.index; - if(e->from==INVALID) - { - if(e->previn) e->previn->nextin = e->nextin; - else freeedges = e->nextin; - if(e->nextin) e->nextin->previn = e->previn; - - new (e->data) E; //Explicit constructor call - - e->from=f; e->to=t; - e->previn=e->prevout=NULL; - e->nextin=nodes[t].firstin; - e->nextout=nodes[f].firstout; - if(nodes[t].firstin) nodes[t].firstin->previn=e; - if(nodes[f].firstout) nodes[f].firstout->prevout=e; - nodes[t].firstin=nodes[f].firstout=e; - nodes[t].indeg++; nodes[f].outdeg++; - } - return (EdgePoint)e; -} - -template void OldGraph::Delete(EdgePoint e) -{ - if(!e||e->from==INVALID) return; - - ((E*)(((edge_t*)e)->data))->~E(); //Explicit destructor call - - nodes[e->from].outdeg--; nodes[e->to].indeg--; - - - if(e->previn) - e->previn->nextin=e->nextin; - else nodes[e->to].firstin=e->nextin; - if(e->prevout) - e->prevout->nextout=e->nextout; - else nodes[e->from].firstout=e->nextout; - if(e->nextin) - e->nextin->previn=e->previn; - if(e->nextout) - e->nextout->prevout=e->prevout; - - if(freeedges) freeedges->previn=e; - e->previn=NULL; e->nextin=freeedges; - - e->from = INVALID; - freeedges=e; -} - -template EdgePoint OldGraph::Edge(int f, int t) -{ - EdgePoint e; - - for(e=nodes[f].firstout;e&&e->to!=t;e=e->nextout) ; - - return (EdgePoint) e; -} - -template void OldGraph::Reverse(EdgePoint e) -{ - if(!e) return; - - nodes[e->from].outdeg--; nodes[e->to].indeg--; - - if(e->previn) - e->previn->nextin=e->nextin; - else nodes[e->to].firstin=e->nextin; - if(e->prevout) - e->prevout->nextout=e->nextout; - else nodes[e->from].firstout=e->nextout; - if(e->nextin) - e->nextin->previn=e->previn; - if(e->nextout) - e->nextout->prevout=e->prevout; - - int t,f; - f=e->to;e->to=t=e->from; - e->from=f; - - e->previn=e->prevout=NULL; - e->nextin=nodes[t].firstin; - e->nextout=nodes[f].firstout; - if(nodes[t].firstin) nodes[t].firstin->previn=e; - if(nodes[f].firstout) nodes[f].firstout->prevout=e; - nodes[t].firstin=nodes[f].firstout=e; - nodes[t].indeg++; nodes[f].outdeg++; - -} - -template void OldGraph::DeleteEdges() -{ - int n; - for(n=FirstNode();n!=INVALID;n=NextNode(n)) - while(FirstOut(n)) Delete(FirstOut(n)); -} - -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/rw_nonref_map.cc --- a/src/work/alpar/rw_nonref_map.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -#include -#include - -using namespace lemon; - -template -class CinCoutMap -{ -public: - typedef GG Graph; - typedef typename GG::Edge Edge; - - typedef Edge Key; - typedef TT Value; - - class RefType - { - Graph &G; - Edge e; - public: - RefType(Graph &_G,Edge _e) : G(_G), e(_e) { } - - operator Value() const - { - Value tmp; - std::cout << G.id(G.source(e)) << "->" - << G.id(G.target(e)) << ": "; - std::cin >> tmp; - return tmp; - } - Value operator = (Value v) const - { - std::cout << G.id(G.source(e)) << "->" - << G.id(G.target(e)) << ": " << v << '\n'; - return v; - } - }; - -private: - Graph &G; -public: - CinCoutMap(Graph &_G) : G(_G) { } - RefType operator[] (Edge e) const { return RefType(G,e);} -}; - -template -class NullMap -{ -public: - typedef K Key; - typedef T Value; - - class RefType - { - Value val; - public: - RefType(Value v) : val(v) { } - operator Value() const { return val; } - Value operator = (Value v) const { return val; } - }; - -private: - Value val; -public: - NullMap(Value v) : val(v) { } - RefType operator[] (Key e) const { return RefType(v);} -}; - -int main() -{ - typedef SmartGraph Graph; - typedef Graph::NodeIt NodeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - typedef Graph::EdgeIt EdgeIt; - - Graph G; - - CinCoutMap map(G); - - Graph::EdgeMap emap(G); - - for(int i=0;i<3;i++) G.addNode(); - - for(NodeIt n(G);G.valid(n);G.next(n)) - for(NodeIt m(G);G.valid(m);G.next(m)) if(n!=m) - G.addEdge(n,m); - - //for(OutEdgeIt e(G,NodeIt(G));G.valid(e);G.next(e)) - - for(EdgeIt e(G);G.valid(e);G.next(e)) emap[e] = map[e]; - - std::cout << '\n'; - - for(EdgeIt e(G);G.valid(e);G.next(e)) map[e] = emap[e]; - -} - diff -r ee5959aa4410 -r c280de819a73 src/work/alpar/smart_graph_demo.cc --- a/src/work/alpar/smart_graph_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,124 +0,0 @@ -#include -#include - -#include -#include - -using namespace lemon; - -typedef SmartGraph Graph; -//typedef Graph Graph; - - -Graph::OutEdgeIt safeFirstOut(const Graph &G, Graph::Node n) -{ - return G.valid(n) ? Graph::OutEdgeIt(G,n):INVALID; -} - -int main() -{ - - typedef Graph::Edge Edge; - typedef Graph::InEdgeIt InEdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - - Graph G; - - { - NodeIt n; - - for(int i=0;i<10;i++) G.addNode(); - for(G.first(n);G.valid(n);G.next(n)) - for(NodeIt m(G);m!=INVALID;G.next(m)) - if(n!=m) G.addEdge(n,m); - - OutEdgeIt e = safeFirstOut(G,n); - OutEdgeIt f = safeFirstOut(G,NodeIt(G)); - - - InEdgeIt i(INVALID), j; - InEdgeIt ii(i); - ii=G.first(i,n); - ii=G.next(i); - - OutEdgeIt o(INVALID), oo; - OutEdgeIt ooo(oo); - oo=G.first(o,n); - oo=G.next(o); - - EdgeIt ei(INVALID), eie; - EdgeIt eiee(ei); - eie=G.first(ei); - eie=G.next(ei); - - Edge eee(i); - eee=o; - eee=eie; - - - bool tm; - tm = G.valid(n) && G.valid(i) && G.valid(o) && G.valid(ei); - - std::vector v(10); - std::vector w(10,INVALID); - - } - - // Test of maps - - G.clear(); - - for(int i=0;i<10;i++) G.addNode(); - for(NodeIt i(G);G.valid(i);G.next(i)) - for(NodeIt j(G);G.valid(j);G.next(j)) - if(i n(G); - int count=0; - for(NodeIt i(G);G.valid(i);G.next(i)) n[i]=count++; - - Graph::NodeMap nn=n; - Graph::NodeMap dd=n; - - n = nn; - - dd = nn; - - Graph::EdgeMap emap(G); - - // Test of SymSmartGraph - - { - typedef SymSmartGraph Graph; - typedef Graph::Edge Edge; - typedef Graph::InEdgeIt InEdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - - Graph G; - - for(int i=0;i<10;i++) G.addNode(); - for(NodeIt i(G);G.valid(i);G.next(i)) - for(NodeIt j(G);G.valid(j);G.next(j)) - if(i em(G); - Graph::SymEdgeMap sm(G); - for(EdgeIt e(G);G.valid(e);G.next(e)) em[e]=G.id(e); - for(EdgeIt e(G);G.valid(e);G.next(e)) - if(G.source(e)" << G.id(G.target(e)) - << ": id=" << G.id(e) << " oppid=" << G.id(G.opposite(e)) - << " em=" << em[e] - << " sm=" << sm[e] << "\n"; - - } - -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/bfs_test.cc --- a/src/work/athos/bfs_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,79 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -//#include -#include -#include -#include -#include - -using namespace lemon; - -int main() { - typedef SageGraph Graph; - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - - Graph g; - Node s, t; - Graph::EdgeMap cap(g); - //readDimacsMaxFlow(std::cin, g, s, t, cap); - readDimacs(std::cin, g); - - Graph::NodeMap pred(g); - - Timer ts; - /* - { - ts.reset(); - Graph::NodeMap reached(g); - reached.set(s, true); - pred.set(s, INVALID); - std::queue bfs_queue; - bfs_queue.push(t); - while (!bfs_queue.empty()) { - Node v=bfs_queue.front(); - bfs_queue.pop(); - OutEdgeIt e; - for(g.first(e,v); g.valid(e); g.next(e)) { - Node w=g.target(e); - if (!reached[w]) { - bfs_queue.push(w); - reached.set(w, true); - pred.set(w, e); - } - } - } - - std::cout << ts << std::endl; - } - */ - - { - ts.reset(); - Graph::NodeMap bfs_reached(g); - Graph::NodeMap bfs_pred(g); - Graph::NodeMap bfs_dist(g); - - Bfs< Graph, Graph::NodeMap, - Graph::NodeMap, Graph::NodeMap > - bfs(g,bfs_reached, bfs_pred, bfs_dist ); - bfs.run(s); - /* - pred.set(s, INVALID); - while (!bfs.finished()) { - ++bfs; - if (g.valid(bfs) && bfs.isBNodeNewlyReached()) - pred.set(bfs.bNode(), bfs); - } - */ - std::cout << ts << std::endl; - } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/dijkstra_at.h --- a/src/work/athos/dijkstra_at.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,123 +0,0 @@ -/* -Egy pontból összes többibe vezetõ legrövidebb utak irányított gráfban - -Preconditions: -A gráf típus tud: -- pontból kimenõ éleket sorban visszaadni -A T számtípus, ami tud összehasonlítást, összedást -A bemenetre: -weight nemnegatív - -*/ -#ifndef DIJKSTRA_AT_H -#define DIJKSTRA_AT_H - - - -//#include -//#include -//#include -//#include "pf_hiba.hh" -//#include -//#include - - -using namespace std; - -namespace lemon { - - template - class dijkstra_at { - - //Hasznos typedef-ek - typedef typename graph_type::NodeIt NodeIt; - typedef typename graph_type::EdgeIt EdgeIt; - typedef typename graph_type::EachNodeIt EachNodeIt; - typedef typename graph_type::EachEdgeIt EachEdgeIt; - typedef typename graph_type::OutEdgeIt OutEdgeIt; - typedef typename graph_type::InEdgeIt InEdgeIt; - typedef typename graph_type::SymEdgeIt SymEdgeIt; - - - - //--------------------------------------------- - //Parameters of the algorithm - //--------------------------------------------- - - //--------------------------------------------- - //Parameters of the algorithm - //--------------------------------------------- - - private: - //input - graph_type& G; - NodeIt s; - typename graph_type::EdgeMap &weight; - //typename graph_type::EdgeMap &capacity; - //output - //typename graph_type::EdgeMap - // typename graph_type::EdgeMap preflow; - - //auxiliary variables for computation - deque next_to_reach; - - - typename graph_type::NodeMap reached; - - //Variables holding output - //Predessors in the shortest paths arborescence - typename graph_type::NodeMap pred; - - - public: - - - dijkstra_at( - graph_type& _G, - NodeIt _s, - typename graph_type::EdgeMap & _weight) - : G(_G), s(_s), - weight(_weight), - next_to_reach(), - reached(_G), - pred(G) - - { - } - /*By Misi.*/ - struct Node_dist_comp - { - NodeMap &d; - Node_dist_comp(NodeMap &_d) : d(_d) {} - - bool operator()(const NodeIt& u, const NodeIt& v) const - { return d.get(u) < d.get(v); } - }; - - - - void run() { - - NodeMap scanned(G, false); - std::priority_queue, Node_dist_comp> - heap(( Node_dist_comp(distance) )); - - heap.push(s); - reached.set(s, true); - - } - - - }; - - - - - - - }; //class dijkstra_at - - -}//namespace lemon - -#endif //DIJKSTRA_AT diff -r ee5959aa4410 -r c280de819a73 src/work/athos/dijkstra_demo.cc --- a/src/work/athos/dijkstra_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,160 +0,0 @@ -#include -#include - -#include "list_graph.hh" -//#include "marci_property_vector.hh" -#include - -using namespace lemon; - - -int main (int, char*[]) -{ - - - typedef ListGraph::NodeIt NodeIt; - typedef ListGraph::EdgeIt EdgeIt; - /* - typedef ListGraph::EachNodeIt EachNodeIt; - typedef ListGraph::EachEdgeIt EachEdgeIt; - typedef ListGraph::OutEdgeIt OutEdgeIt; - typedef ListGraph::InEdgeIt InEdgeIt; - typedef ListGraph::SymEdgeIt SymEdgeIt; - */ - ListGraph flowG; - - /* - //Marci példája - - - NodeIt s=flowG.addNode(); - NodeIt v1=flowG.addNode(); - NodeIt v2=flowG.addNode(); - NodeIt v3=flowG.addNode(); - NodeIt v4=flowG.addNode(); - NodeIt t=flowG.addNode(); - - - EdgeIt s_v1=flowG.addEdge(s, v1); - EdgeIt s_v2=flowG.addEdge(s, v2); - EdgeIt v1_v2=flowG.addEdge(v1, v2); - EdgeIt v2_v1=flowG.addEdge(v2, v1); - EdgeIt v1_v3=flowG.addEdge(v1, v3); - EdgeIt v3_v2=flowG.addEdge(v3, v2); - EdgeIt v2_v4=flowG.addEdge(v2, v4); - EdgeIt v4_v3=flowG.addEdge(v4, v3); - EdgeIt v3_t=flowG.addEdge(v3, t); - EdgeIt v4_t=flowG.addEdge(v4, t); - - ListGraph::EdgeMap cap(flowG); - - cap.set(s_v1, 16); - cap.set(s_v2, 13); - cap.set(v1_v2, 10); - cap.set(v2_v1, 4); - cap.set(v1_v3, 12); - cap.set(v3_v2, 9); - cap.set(v2_v4, 14); - cap.set(v4_v3, 7); - cap.set(v3_t, 20); - cap.set(v4_t, 4); - */ - - - //Ahuja könyv példája - - NodeIt s=flowG.addNode(); - NodeIt v2=flowG.addNode(); - NodeIt v3=flowG.addNode(); - NodeIt v4=flowG.addNode(); - NodeIt v5=flowG.addNode(); - NodeIt t=flowG.addNode(); - - EdgeIt s_v2=flowG.addEdge(s, v2); - EdgeIt s_v3=flowG.addEdge(s, v3); - EdgeIt v2_v4=flowG.addEdge(v2, v4); - EdgeIt v2_v5=flowG.addEdge(v2, v5); - EdgeIt v3_v5=flowG.addEdge(v3, v5); - EdgeIt v4_t=flowG.addEdge(v4, t); - EdgeIt v5_t=flowG.addEdge(v5, t); - - //Kis modositas - //edge_iterator v2_s=flowG.add_edge(v2, s); - - ListGraph::EdgeMap cap(flowG); - - cap.set(s_v2, 10); - cap.set(s_v3, 10); - cap.set(v2_v4, 5); - cap.set(v2_v5, 8); - cap.set(v3_v5, 5); - cap.set(v4_t, 8); - cap.set(v5_t, 8); - - //Kis modositas - //cap.put(v2_s, 100); - - - - - /*Egyszerû példa - NodeIt s=flow_test.add_node(); - NodeIt v1=flow_test.add_node(); - NodeIt v2=flow_test.add_node(); - NodeIt t=flow_test.add_node(); - - node_property_vector node_name(flow_test); - node_name.put(s, "s"); - node_name.put(v1, "v1"); - node_name.put(v2, "v2"); - node_name.put(t, "t"); - - edge_iterator s_v1=flow_test.add_edge(s, v1); - edge_iterator v1_v2=flow_test.add_edge(v1, v2); - edge_iterator v2_t=flow_test.add_edge(v2, t); - - edge_property_vector cap(flow_test); - - cap.put(s_v1, 16); - cap.put(v1_v2, 10); - cap.put(v2_t, 4); - */ - - std::cout << "preflow-push algorithm test..." << std::endl; - - /* - std::cout << "on directed graph graph" << std::endl; //<< flow_test; - std::cout << "names and capacity values" << std::endl; - for(EachNodeIt i=flow_test.first_node(); i.valid(); ++i) { - std::cout << node_name.get(i) << ": "; - std::cout << "out edges: "; - for(out_edge_iterator j=flow_test.first_out_edge(i); j.valid(); ++j) - std::cout << node_name.get(flow_test.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flow_test.target(j)) << " "; - std::cout << "in edges: "; - for(in_edge_iterator j=flow_test.first_in_edge(i); j.valid(); ++j) - std::cout << node_name.get(flow_test.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flow_test.target(j)) << " "; - std::cout << std::endl; - } - */ - - //for(each_NodeIt i=flow_test.first_node(); i.valid(); ++i) { - // std::cout << i << " "; - //} - - dijkstra_at dijkstra_test(flowG, s, cap); - //cout << preflow_push_test.run()< - -namespace lemon { - - template - class Kruskal { - - - //Hasznos typedef-ek - typedef typename graph_type::NodeIt NodeIt; - typedef typename graph_type::EdgeIt EdgeIt; - typedef typename graph_type::EachNodeIt EachNodeIt; - typedef typename graph_type::EachEdgeIt EachEdgeIt; - typedef typename graph_type::SymEdgeIt SymEdgeIt; - - //input - graph_type& G; - typename graph_type::EdgeMap &weight; - - //Auxilliary variables - typename graph_type::NodeMap component(flowG); - - Kruskal( - graph_type& _G, - typename graph_type::EdgeMap & _weight) - : G(_G), - weight(_weight), - component(-1) - { - } - - /*Originally by Misi.*/ - struct Edge_comp - { - NodeMap &d; - Node_dist_comp(NodeMap &_d) : d(_d) {} - - bool operator()(const NodeIt& u, const NodeIt& v) const - { return d.get(u) < d.get(v); } - }; - - - //Runs the algorithm - void run() { - - - - } - - } - -}//namespacc lemon - -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/athos/kruskal_otletek --- a/src/work/athos/kruskal_otletek Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ - -UnionFind uf( G, G.NodeIt()); -NodeUnionFind uf( G); - -Kell e: -find visszaadja a nagyfonokot, altalaban kell e a belso tarolobol tudni visszafejteni az ott levo pontot. -Kell e merge(int, int) - esetleg merge(Nodeit fonoka, NodeIt fonokb) - -konstruálás map-bõl. -find: visszaad egy egészet - -findAndMerge: visszaad egy boolt - diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp/Makefile --- a/src/work/athos/lp/Makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,29 +0,0 @@ -CXXFLAGS = -Wall -ggdb --no-inline -I../../.. -I.. -I/usr/local/cplex/cplex75/include - -all: lp_sample_cplex - -clean: - rm lp_test lp_sample_cplex lp_sample *.o - -lp_base.o: ../../../lemon/lp_base.cc ../../../lemon/lp_base.h - $(CXX) $(CXXFLAGS) -o $@ -c $< - - -lp_solver_skeleton.o: lp_solver_skeleton.cc lp_solver_skeleton.h lp_base.h - $(CXX) $(CXXFLAGS) -o $@ -c $< - -lp_glpk.o: ../../../lemon/lp_glpk.cc ../../../lemon/lp_glpk.h ../../../lemon/lp_base.h - $(CXX) $(CXXFLAGS) -o $@ -c $< - -lp_cplex.o: lp_cplex.cc lp_cplex.h ../../../lemon/lp_base.h - $(CXX) $(CXXFLAGS) -I/usr/local/cplex/cplex75/include -o $@ -c $< - -lp_sample.o: lp_sample.cc - -lp_sample: lp_sample.o lp_base.o lp_glpk.o - $(CXX) -o $@ $^ -lglpk - -lp_sample_cplex: lp_sample_cplex.o lp_base.o lp_cplex.o - $(CXX) $(CXXFLAGS) -o $@ $^ -L/usr/local/cplex/cplex75/lib/i86_linux2_glibc2.2_gcc3.0/static_pic_mt -lcplex -lm -lpthread - -# $(CXX) $(CXXFLAGS) $(LDFLAGS) -o $@ $^ diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp/lp_cplex.cc --- a/src/work/athos/lp/lp_cplex.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,201 +0,0 @@ -/* -*- C++ -*- - * src/lemon/lp_cplex.cc - * - Part of LEMON, a generic C++ optimization library - * - * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport - * (Egervary Research Group on Combinatorial Optimization, EGRES). - * - * Permission to use, modify and distribute this software is granted - * provided that this copyright notice appears in all copies. For - * precise terms see the accompanying LICENSE file. - * - * This software is provided "AS IS" with no warranty of any kind, - * express or implied, and with no claim as to its suitability for any - * purpose. - * - */ - -#include"lp_cplex.h" - -///\file -///\brief Implementation of the LEMON-CPLEX lp solver interface. -namespace lemon { - - int LpCplex::_addCol() - { - int i = CPXgetnumcols (env, lp); - Value lb[1],ub[1]; - lb[0]=-INF;//-CPX_INFBOUND; - ub[0]=INF;//CPX_INFBOUND; - status = CPXnewcols (env, lp, 1, NULL, lb, ub, NULL, NULL); - return i; - } - - int LpCplex::_addRow() - { - //We want a ranged row - char sense[1]; - sense[0]='R'; - - int i = CPXgetnumrows (env, lp); - status = CPXnewrows (env, lp, 1, NULL, sense, NULL, NULL); - return i; - } - - ///\warning Data at index 0 is ignored iin the arrays. - void LpCplex::_setRowCoeffs(int i, - int length, - int const * indices, - Value const * values ) - { - int rowlist[length+1]; - int* p=rowlist; - for (int k=1;k<=length;++k){ - rowlist[k]=i; - } - status = CPXchgcoeflist(env, lp, - length, - p++, - const_cast(indices++), - const_cast(values++)); - } - - void LpCplex::_setColCoeffs(int i, - int length, - int const * indices, - Value const * values) - { - int collist[length+1]; - int* p=collist; - for (int k=1;k<=length;++k){ - collist[k]=i; - } - status = CPXchgcoeflist(env, lp, - length, - const_cast(indices++), - p++, - const_cast(values++)); - } - - void LpCplex::_setColLowerBound(int i, Value value) - { - int indices[1]; - indices[0]=i; - char lu[1]; - lu[0]='L'; - Value bd[1]; - bd[0]=value; - status = CPXchgbds (env, lp, 1, indices, lu, bd); - - } - - void LpCplex::_setColUpperBound(int i, Value value) - { - int indices[1]; - indices[0]=i; - char lu[1]; - lu[0]='U'; - Value bd[1]; - bd[0]=value; - status = CPXchgbds (env, lp, 1, indices, lu, bd); - } - - void LpCplex::_setRowLowerBound(int i, Value value) - { - status = CPXchgcoef (env, lp, i, -1, value); - - } - - void LpCplex::_setRowUpperBound(int i, Value value) - { - //TODO Ezt kell meg megirni - //type of the problem - char sense[1]; - status = CPXgetsense (env, lp, sense, i, i); - Value rhs[1]; - status = CPXgetrhs (env, lp, rhs, i, i); - - switch (sense[0]) { - case 'L'://<= constraint - break; - case 'E'://= constraint - break; - case 'G'://>= constraint - break; - case 'R'://ranged constraint - break; - default: ; - //FIXME error - } - - status = CPXchgcoef (env, lp, i, -2, value_rng); - } - - void LpCplex::_setObjCoeff(int i, Value obj_coef) - { - status = CPXchgcoef (env, lp, -1, i, obj_coef); - } - - LpCplex::SolveExitStatus LpCplex::_solve() - { - return SOLVED; -// int i= lpx_simplex(lp); -// switch (i) { -// case LPX_E_OK: -// return SOLVED; -// break; -// default: -// return UNSOLVED; -// } - } - - LpCplex::Value LpCplex::_getPrimal(int i) - { - return 0; - } - - LpCplex::Value LpCplex::_getPrimalValue() - { - return 0; - } - - - LpCplex::SolutionStatus LpCplex::_getPrimalStatus() - { - return OPTIMAL; -// int stat= lpx_get_status(lp); -// switch (stat) { -// case LPX_UNDEF://Undefined (no solve has been run yet) -// return UNDEFINED; -// break; -// case LPX_NOFEAS://There is no feasible solution (primal, I guess) -// case LPX_INFEAS://Infeasible -// return INFEASIBLE; -// break; -// case LPX_UNBND://Unbounded -// return INFINITE; -// break; -// case LPX_FEAS://Feasible -// return FEASIBLE; -// break; -// case LPX_OPT://Feasible -// return OPTIMAL; -// break; -// default: -// return UNDEFINED; //to avoid gcc warning -// //FIXME error -// } - } - - - void LpCplex::_setMax() - { - CPXchgobjsen (env, lp, CPX_MAX); - } - void LpCplex::_setMin() - { - CPXchgobjsen (env, lp, CPX_MIN); - } - -} //namespace lemon - diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp/lp_cplex.h --- a/src/work/athos/lp/lp_cplex.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,143 +0,0 @@ -/* -*- C++ -*- - * src/lemon/lp_cplex.h - Part of LEMON, a generic C++ optimization library - * - * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport - * (Egervary Research Group on Combinatorial Optimization, EGRES). - * - * Permission to use, modify and distribute this software is granted - * provided that this copyright notice appears in all copies. For - * precise terms see the accompanying LICENSE file. - * - * This software is provided "AS IS" with no warranty of any kind, - * express or implied, and with no claim as to its suitability for any - * purpose. - * - */ - -#ifndef LEMON_LP_CPLEX_H -#define LEMON_LP_CPLEX_H - -///\file -///\brief Header of the LEMON-CPLEX lp solver interface. - -#include -extern "C" { -#include -} - -namespace lemon { - - - /// \brief Wrapper for GLPK solver - /// - /// This class implements a lemon wrapper for GLPK. - class LpCplex : public LpSolverBase { - - public: - - typedef LpSolverBase Parent; - - /// \e - int status; - CPXENVptr env; - CPXLPptr lp; - - - /// \e - LpCplex() : Parent() { - env = NULL; - lp = NULL; - env = CPXopenCPLEXdevelop(&status); -// if (Env == NULL) -// { -// fprintf(stderr,"A CPLEX környezet megnyitása sikertelen.\n"); -// CPXgeterrorstring(Env, Status, ErrorMsg); -// fprintf(stderr,"%s",ErrorMsg); -// goto Terminate; -// } - - // *** A problema létrehozása *** - lp = CPXcreateprob(env, &status, "LP problem"); - -// if (Problem == NULL) -// { -// fprintf(stderr,"Az LP létrehozása sikertelen"); -// goto Terminate; -// } - - } - /// \e - ~LpCplex() { - status = CPXfreeprob(env,&lp); -// if (Status != 0) -// { -// fprintf(stderr,"A CPLEX feladat törlése sikertelen.\n"); -// CPXgeterrorstring(Env, Status, ErrorMsg); -// fprintf(stderr,"%s",ErrorMsg); -// goto Terminate; -// } - - status = CPXcloseCPLEX(&env); -// if (Status != 0) -// { -// fprintf(stderr,"A CPLEX környezet bezárása sikertelen.\n"); -// CPXgeterrorstring(Env, Status, ErrorMsg); -// fprintf(stderr,"%s",ErrorMsg); -// goto Terminate; -// } - - } - - protected: - virtual int _addCol(); - virtual int _addRow(); - virtual void _setRowCoeffs(int i, - int length, - const int * indices, - const Value * values ); - virtual void _setColCoeffs(int i, - int length, - const int * indices, - const Value * values); - virtual void _setColLowerBound(int i, Value value); - virtual void _setColUpperBound(int i, Value value); - virtual void _setRowLowerBound(int i, Value value); - virtual void _setRowUpperBound(int i, Value value); - virtual void _setObjCoeff(int i, Value obj_coef); - ///\e - - ///\bug Unimplemented - /// - virtual SolveExitStatus _solve(); - ///\e - - ///\bug Unimplemented - /// - virtual Value _getPrimal(int i); - ///\e - - ///\bug Unimplemented - /// - virtual Value _getPrimalValue(); - ///\e - - ///\bug Unimplemented - /// - virtual SolutionStatus _getPrimalStatus(); - - ///\e - - ///\bug Unimplemented - /// - virtual void _setMax(); - ///\e - - ///\bug Unimplemented - /// - virtual void _setMin(); - - }; -} //END OF NAMESPACE LEMON - -#endif //LEMON_LP_CPLEX_H - diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp/lp_solver_base.h --- a/src/work/athos/lp/lp_solver_base.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,162 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_LP_SOLVER_BASE_H -#define LEMON_LP_SOLVER_BASE_H - -///\ingroup misc -///\file - -// #include -#include -#include -#include -#include -// #include -//#include - -#include -#include -#include -#include -#include -#include - -//#include -//#include -//#include -//#include -//#include -//#include - -using std::cout; -using std::cin; -using std::endl; - -namespace lemon { - - template - class LpSolverBase { - - /*! @name Uncategorized functions and types (public members) - */ - //@{ - public: - - //UNCATEGORIZED - - /// \e - typedef _Value Value; - /// \e - static const Value INF; - public: - /// \e - LpSolverBase() { } - /// \e - virtual ~LpSolverBase() { } - - /*! @name Low level interface (protected members) - Problem manipulating functions in the low level interface - */ - //@{ - protected: - - //MATRIX MANIPULATING FUNCTIONS - - /// \e - virtual int _addCol() = 0; - /// \e - virtual int _addRow() = 0; - /// \e - virtual void _eraseCol(int i) = 0; - /// \e - virtual void _eraseRow(int i) = 0; - /// \e - virtual void _setRowCoeffs(int i, - const std::vector >& coeffs) = 0; - /// \e - /// This routine modifies \c coeffs only by the \c push_back method. - virtual void _getRowCoeffs(int i, - std::vector >& coeffs) = 0; - /// \e - virtual void _setColCoeffs(int i, - const std::vector >& coeffs) = 0; - /// \e - /// This routine modifies \c coeffs only by the \c push_back method. - virtual void _getColCoeffs(int i, - std::vector >& coeffs) = 0; - /// \e - virtual void _setCoeff(int col, int row, Value value) = 0; - /// \e - virtual Value _getCoeff(int col, int row) = 0; - // public: - // /// \e - // enum Bound { FREE, LOWER, UPPER, DOUBLE, FIXED }; - protected: - /// \e - /// The lower bound of a variable (column) have to be given by an - /// extended number of type Value, i.e. a finite number of type - /// Value or -INF. - virtual void _setColLowerBound(int i, Value value) = 0; - /// \e - /// The lower bound of a variable (column) is an - /// extended number of type Value, i.e. a finite number of type - /// Value or -INF. - virtual Value _getColLowerBound(int i) = 0; - /// \e - /// The upper bound of a variable (column) have to be given by an - /// extended number of type Value, i.e. a finite number of type - /// Value or INF. - virtual void _setColUpperBound(int i, Value value) = 0; - /// \e - /// The upper bound of a variable (column) is an - /// extended number of type Value, i.e. a finite number of type - /// Value or INF. - virtual Value _getColUpperBound(int i) = 0; - /// \e - /// The lower bound of a linear expression (row) have to be given by an - /// extended number of type Value, i.e. a finite number of type - /// Value or -INF. - virtual void _setRowLowerBound(int i, Value value) = 0; - /// \e - /// The lower bound of a linear expression (row) is an - /// extended number of type Value, i.e. a finite number of type - /// Value or -INF. - virtual Value _getRowLowerBound(int i) = 0; - /// \e - /// The upper bound of a linear expression (row) have to be given by an - /// extended number of type Value, i.e. a finite number of type - /// Value or INF. - virtual void _setRowUpperBound(int i, Value value) = 0; - /// \e - /// The upper bound of a linear expression (row) is an - /// extended number of type Value, i.e. a finite number of type - /// Value or INF. - virtual Value _getRowUpperBound(int i) = 0; - /// \e - virtual void _setObjCoeff(int i, Value obj_coef) = 0; - /// \e - virtual Value _getObjCoeff(int i) = 0; - - //SOLUTION RETRIEVING - - /// \e - virtual Value _getPrimal(int i) = 0; - //@} - - - - /*! @name MIP functions and types (public members) - */ - //@{ - protected: - /// \e - virtual void _setColCont(int i) = 0; - /// \e - virtual void _setColInt(int i) = 0; - /// \e - virtual Value _getMIPPrimal(int i) = 0; - //@} - }; - -} //namespace lemon - -#endif //LEMON_LP_SOLVER_BASE_H diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp/lp_solver_glpk.cc --- a/src/work/athos/lp/lp_solver_glpk.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,28 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_LP_SOLVER_GLPK_CC -#define LEMON_LP_SOLVER_GLPK_CC - //LOW LEVEL INTERFACE, MATRIX MANIPULATING FUNCTIONS -extern "C" { -#include "glpk.h" -} -#include "lp_solver_glpk.h" - -namespace lemon { - - - /// \e - int LpGlpk::_addCol() { - int i=lpx_add_cols(lp, 1); - _setColLowerBound(i, -INF); - _setColUpperBound(i, INF); - return i; - } - /// \e - int LpGlpk::_addRow() { - int i=lpx_add_rows(lp, 1); - return i; - } - -} //namespace lemon - -#endif //LEMON_LP_SOLVER_GLPK_CC diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp/lp_solver_glpk.h --- a/src/work/athos/lp/lp_solver_glpk.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,565 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_LP_SOLVER_GLPK_H -#define LEMON_LP_SOLVER_GLPK_H - -///\ingroup misc -///\file - -extern "C" { -#include "glpk.h" -} -#include - -namespace lemon { - - - template - const Value LpSolverBase::INF=std::numeric_limits::infinity(); - - - /// \brief Wrapper for GLPK solver - /// - /// This class implements a lemon wrapper for GLPK. - class LpGlpk : public LpSolverBase { - - public: - - typedef LpSolverBase Parent; - - /// \e - LPX* lp; - - /// \e - LpGlpk() : Parent(), - lp(lpx_create_prob()) { - //int_row_map.push_back(Row()); - //int_col_map.push_back(Col()); - lpx_set_int_parm(lp, LPX_K_DUAL, 1); - } - /// \e - ~LpGlpk() { - lpx_delete_prob(lp); - } - - //MATRIX INDEPEDENT MANIPULATING FUNCTIONS - - /// \e - void setMinimize() { - lpx_set_obj_dir(lp, LPX_MIN); - } - /// \e - void setMaximize() { - lpx_set_obj_dir(lp, LPX_MAX); - } - - /// \e - /// Retrieve number of rows - int rowNum() const { return lpx_get_num_rows(lp); } - /// \e - /// Retrieve number of coloumns - int colNum() const { return lpx_get_num_cols(lp); } - - protected: - /// \e - int LpGlpk::_addCol() { - int i=lpx_add_cols(lp, 1); - _setColLowerBound(i, -INF); - _setColUpperBound(i, INF); - return i; - } - /// \e - int LpGlpk::_addRow() { - int i=lpx_add_rows(lp, 1); - return i; - } - /// \e - virtual void _setRowCoeffs(int i, - const std::vector >& coeffs) { - int mem_length=1+colNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for (std::vector >:: - const_iterator it=coeffs.begin(); it!=coeffs.end(); ++it) { - ++length; - indices[length]=it->first; - doubles[length]=it->second; - } - lpx_set_mat_row(lp, i, length, indices, doubles); - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _getRowCoeffs(int i, - std::vector >& coeffs) { - int mem_length=1+colNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=lpx_get_mat_row(lp, i, indices, doubles); - for (int i=1; i<=length; ++i) { - coeffs.push_back(std::make_pair(indices[i], doubles[i])); - } - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _setColCoeffs(int i, - const std::vector >& coeffs) { - int mem_length=1+rowNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for (std::vector >:: - const_iterator it=coeffs.begin(); it!=coeffs.end(); ++it) { - ++length; - indices[length]=it->first; - doubles[length]=it->second; - } - lpx_set_mat_col(lp, i, length, indices, doubles); - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _getColCoeffs(int i, - std::vector >& coeffs) { - int mem_length=1+rowNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=lpx_get_mat_col(lp, i, indices, doubles); - for (int i=1; i<=length; ++i) { - coeffs.push_back(std::make_pair(indices[i], doubles[i])); - } - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _eraseCol(int i) { - int cols[2]; - cols[1]=i; - lpx_del_cols(lp, 1, cols); - } - virtual void _eraseRow(int i) { - int rows[2]; - rows[1]=i; - lpx_del_rows(lp, 1, rows); - } - - void _setCoeff(int row, int col, double value) { - ///FIXME Of course this is not efficient at all, but GLPK knows not more. - /// First approach: get one row, apply changes and set it again - - int mem_length=1+colNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - - - int length=lpx_get_mat_row(lp, i, indices, doubles); - - //The following code does not suppose that the elements of the array indices are sorted - int i=1; - bool found=false; - while (i <= length && !found){ - if (indices[i]=col){ - found = true; - doubles[i]=value; - } - ++i; - } - if (!found){ - ++length; - indices[length]=col; - doubles[length]=value; - } - -// This is a piece of code that assumes that the array 'indices' is sorted. -// Not ready, I suppose. -// //We need another arrays to put the data back, anyway -// int* new_indices = new int[length+1]; -// double* new_doubles = new double[length+1]; -// int offset; - -// int i=1; -// while (i <= length && indices[i]length || indices[i]>col){ -// //Ha atugrottuk, vagy a vegen van -// new_indices[i]=col; -// new_doubles[i]=value; -// offset = 1; -// } -// else{ -// //I.e.: indices[i]=col -// new_doubles[i]=value; -// offset = 0; -// ++i; -// } -// while (i <= length){ -// new_indices[i+offset]=indices[i]; -// new_values[i+offset]=values[i]; -// } - - lpx_set_mat_row(lp, row, length, indices, doubles); - delete [] indices; - delete [] doubles; - -// lpx_set_mat_row(lp, row, length+offset, new_indices, new_doubles); -// delete [] new_indices; -// delete [] new_doubles; - - - } - double _getCoeff(int col, int row) { - /// FIXME not yet implemented - return 0.0; - } - virtual void _setColLowerBound(int i, double lo) { - if (lo==INF) { - //FIXME error - } - int b=lpx_get_col_type(lp, i); - double up=lpx_get_col_ub(lp, i); - if (lo==-INF) { - switch (b) { - case LPX_FR: - case LPX_LO: - lpx_set_col_bnds(lp, i, LPX_FR, lo, up); - break; - case LPX_UP: - break; - case LPX_DB: - case LPX_FX: - lpx_set_col_bnds(lp, i, LPX_UP, lo, up); - break; - default: ; - //FIXME error - } - } else { - switch (b) { - case LPX_FR: - case LPX_LO: - lpx_set_col_bnds(lp, i, LPX_LO, lo, up); - break; - case LPX_UP: - case LPX_DB: - case LPX_FX: - if (lo==up) - lpx_set_col_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_col_bnds(lp, i, LPX_DB, lo, up); - break; - default: ; - //FIXME error - } - } - } - virtual double _getColLowerBound(int i) { - int b=lpx_get_col_type(lp, i); - switch (b) { - case LPX_FR: - return -INF; - case LPX_LO: - return lpx_get_col_lb(lp, i); - case LPX_UP: - return -INF; - case LPX_DB: - case LPX_FX: - return lpx_get_col_lb(lp, i); - default: ; - //FIXME error - return 0.0; - } - } - virtual void _setColUpperBound(int i, double up) { - if (up==-INF) { - //FIXME error - } - int b=lpx_get_col_type(lp, i); - double lo=lpx_get_col_lb(lp, i); - if (up==INF) { - switch (b) { - case LPX_FR: - case LPX_LO: - break; - case LPX_UP: - lpx_set_col_bnds(lp, i, LPX_FR, lo, up); - break; - case LPX_DB: - case LPX_FX: - lpx_set_col_bnds(lp, i, LPX_LO, lo, up); - break; - default: ; - //FIXME error - } - } else { - switch (b) { - case LPX_FR: - lpx_set_col_bnds(lp, i, LPX_UP, lo, up); - case LPX_LO: - if (lo==up) - lpx_set_col_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_col_bnds(lp, i, LPX_DB, lo, up); - break; - case LPX_UP: - lpx_set_col_bnds(lp, i, LPX_UP, lo, up); - break; - case LPX_DB: - case LPX_FX: - if (lo==up) - lpx_set_col_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_col_bnds(lp, i, LPX_DB, lo, up); - break; - default: ; - //FIXME error - } - } - } - virtual double _getColUpperBound(int i) { - int b=lpx_get_col_type(lp, i); - switch (b) { - case LPX_FR: - case LPX_LO: - return INF; - case LPX_UP: - case LPX_DB: - case LPX_FX: - return lpx_get_col_ub(lp, i); - default: ; - //FIXME error - return 0.0; - } - } - virtual void _setRowLowerBound(int i, double lo) { - if (lo==INF) { - //FIXME error - } - int b=lpx_get_row_type(lp, i); - double up=lpx_get_row_ub(lp, i); - if (lo==-INF) { - switch (b) { - case LPX_FR: - case LPX_LO: - lpx_set_row_bnds(lp, i, LPX_FR, lo, up); - break; - case LPX_UP: - break; - case LPX_DB: - case LPX_FX: - lpx_set_row_bnds(lp, i, LPX_UP, lo, up); - break; - default: ; - //FIXME error - } - } else { - switch (b) { - case LPX_FR: - case LPX_LO: - lpx_set_row_bnds(lp, i, LPX_LO, lo, up); - break; - case LPX_UP: - case LPX_DB: - case LPX_FX: - if (lo==up) - lpx_set_row_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_row_bnds(lp, i, LPX_DB, lo, up); - break; - default: ; - //FIXME error - } - } - } - virtual double _getRowLowerBound(int i) { - int b=lpx_get_row_type(lp, i); - switch (b) { - case LPX_FR: - return -INF; - case LPX_LO: - return lpx_get_row_lb(lp, i); - case LPX_UP: - return -INF; - case LPX_DB: - case LPX_FX: - return lpx_get_row_lb(lp, i); - default: ; - //FIXME error - return 0.0; - } - } - virtual void _setRowUpperBound(int i, double up) { - if (up==-INF) { - //FIXME error - } - int b=lpx_get_row_type(lp, i); - double lo=lpx_get_row_lb(lp, i); - if (up==INF) { - switch (b) { - case LPX_FR: - case LPX_LO: - break; - case LPX_UP: - lpx_set_row_bnds(lp, i, LPX_FR, lo, up); - break; - case LPX_DB: - case LPX_FX: - lpx_set_row_bnds(lp, i, LPX_LO, lo, up); - break; - default: ; - //FIXME error - } - } else { - switch (b) { - case LPX_FR: - lpx_set_row_bnds(lp, i, LPX_UP, lo, up); - case LPX_LO: - if (lo==up) - lpx_set_row_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_row_bnds(lp, i, LPX_DB, lo, up); - break; - case LPX_UP: - lpx_set_row_bnds(lp, i, LPX_UP, lo, up); - break; - case LPX_DB: - case LPX_FX: - if (lo==up) - lpx_set_row_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_row_bnds(lp, i, LPX_DB, lo, up); - break; - default: ; - //FIXME error - } - } - } - virtual double _getRowUpperBound(int i) { - int b=lpx_get_row_type(lp, i); - switch (b) { - case LPX_FR: - case LPX_LO: - return INF; - case LPX_UP: - case LPX_DB: - case LPX_FX: - return lpx_get_row_ub(lp, i); - default: ; - //FIXME error - return 0.0; - } - } - /// \e - virtual double _getObjCoeff(int i) { - return lpx_get_obj_coef(lp, i); - } - /// \e - virtual void _setObjCoeff(int i, double obj_coef) { - lpx_set_obj_coef(lp, i, obj_coef); - } - - protected: - virtual double _getPrimal(int i) { - return lpx_get_col_prim(lp, i); - } - - //MIP - protected: - /// \e - void _setColCont(int i) { lpx_set_col_kind(lp, i, LPX_CV); } - /// \e - void _setColInt(int i) { lpx_set_col_kind(lp, i, LPX_IV); } - /// \e - double _getMIPPrimal(int i) { return lpx_mip_col_val(lp, i); } - - -// public: -// /// \e -// void solveSimplex() { lpx_simplex(lp); } -// /// \e -// void solvePrimalSimplex() { lpx_simplex(lp); } -// /// \e -// void solveDualSimplex() { lpx_simplex(lp); } -// /// \e -// double getObjVal() { return lpx_get_obj_val(lp); } -// /// \e -// int warmUp() { return lpx_warm_up(lp); } -// /// \e -// void printWarmUpStatus(int i) { -// switch (i) { -// case LPX_E_OK: cout << "LPX_E_OK" << endl; break; -// case LPX_E_EMPTY: cout << "LPX_E_EMPTY" << endl; break; -// case LPX_E_BADB: cout << "LPX_E_BADB" << endl; break; -// case LPX_E_SING: cout << "LPX_E_SING" << endl; break; -// } -// } -// /// \e -// int getPrimalStatus() { return lpx_get_prim_stat(lp); } -// /// \e -// void printPrimalStatus(int i) { -// switch (i) { -// case LPX_P_UNDEF: cout << "LPX_P_UNDEF" << endl; break; -// case LPX_P_FEAS: cout << "LPX_P_FEAS" << endl; break; -// case LPX_P_INFEAS: cout << "LPX_P_INFEAS" << endl; break; -// case LPX_P_NOFEAS: cout << "LPX_P_NOFEAS" << endl; break; -// } -// } -// /// \e -// int getDualStatus() { return lpx_get_dual_stat(lp); } -// /// \e -// void printDualStatus(int i) { -// switch (i) { -// case LPX_D_UNDEF: cout << "LPX_D_UNDEF" << endl; break; -// case LPX_D_FEAS: cout << "LPX_D_FEAS" << endl; break; -// case LPX_D_INFEAS: cout << "LPX_D_INFEAS" << endl; break; -// case LPX_D_NOFEAS: cout << "LPX_D_NOFEAS" << endl; break; -// } -// } -// /// Returns the status of the slack variable assigned to row \c row. -// int getRowStat(const Row& row) { -// return lpx_get_row_stat(lp, row_iter_map[row]); -// } -// /// \e -// void printRowStatus(int i) { -// switch (i) { -// case LPX_BS: cout << "LPX_BS" << endl; break; -// case LPX_NL: cout << "LPX_NL" << endl; break; -// case LPX_NU: cout << "LPX_NU" << endl; break; -// case LPX_NF: cout << "LPX_NF" << endl; break; -// case LPX_NS: cout << "LPX_NS" << endl; break; -// } -// } -// /// Returns the status of the variable assigned to column \c col. -// int getColStat(const Col& col) { -// return lpx_get_col_stat(lp, col_iter_map[col]); -// } -// /// \e -// void printColStatus(int i) { -// switch (i) { -// case LPX_BS: cout << "LPX_BS" << endl; break; -// case LPX_NL: cout << "LPX_NL" << endl; break; -// case LPX_NU: cout << "LPX_NU" << endl; break; -// case LPX_NF: cout << "LPX_NF" << endl; break; -// case LPX_NS: cout << "LPX_NS" << endl; break; -// } -// } - -// // MIP -// /// \e -// void solveBandB() { lpx_integer(lp); } -// /// \e -// void setLP() { lpx_set_class(lp, LPX_LP); } -// /// \e -// void setMIP() { lpx_set_class(lp, LPX_MIP); } - - - - }; - - /// @} - -} //namespace lemon - -#endif //LEMON_LP_SOLVER_GLPK_H diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp/lp_test_cplex.cc --- a/src/work/athos/lp/lp_test_cplex.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,185 +0,0 @@ -#include"lp_solver_skeleton.h" -#include"lp_cplex.h" -#include - -using namespace lemon; - -void lpTest(LpSolverBase & lp) -{ - typedef LpSolverBase LP; - - std::vector x; - for(int i=0;i<10;i++) x.push_back(lp.addCol()); - - std::vector y(10); - lp.addColSet(y); - - std::map z; - - z.insert(std::make_pair(12,INVALID)); - z.insert(std::make_pair(2,INVALID)); - z.insert(std::make_pair(7,INVALID)); - z.insert(std::make_pair(5,INVALID)); - - lp.addColSet(z); - - - LP::Expr e,f,g; - LP::Col p1,p2,p3,p4,p5; - LP::Constr c; - - e[p1]=2; - e.constComp()=12; - e[p1]+=2; - e.constComp()+=12; - e[p1]-=2; - e.constComp()-=12; - - e=2; - e=2.2; - e=p1; - e=f; - - e+=2; - e+=2.2; - e+=p1; - e+=f; - - e-=2; - e-=2.2; - e-=p1; - e-=f; - - e*=2; - e*=2.2; - e/=2; - e/=2.2; - - e=((p1+p2)+(p1-p2)+(p1+12)+(12+p1)+(p1-12)+(12-p1)+ - (f+12)+(12+f)+(p1+f)+(f+p1)+(f+g)+ - (f-12)+(12-f)+(p1-f)+(f-p1)+(f-g)+ - 2.2*f+f*2.2+f/2.2+ - 2*f+f*2+f/2+ - 2.2*p1+p1*2.2+p1/2.2+ - 2*p1+p1*2+p1/2 - ); - - - c = (e <= f ); - c = (e <= 2.2); - c = (e <= 2 ); - c = (e <= p1 ); - c = (2.2<= f ); - c = (2 <= f ); - c = (p1 <= f ); - c = (p1 <= p2 ); - c = (p1 <= 2.2); - c = (p1 <= 2 ); - c = (2.2<= p2 ); - c = (2 <= p2 ); - - c = (e >= f ); - c = (e >= 2.2); - c = (e >= 2 ); - c = (e >= p1 ); - c = (2.2>= f ); - c = (2 >= f ); - c = (p1 >= f ); - c = (p1 >= p2 ); - c = (p1 >= 2.2); - c = (p1 >= 2 ); - c = (2.2>= p2 ); - c = (2 >= p2 ); - - c = (e == f ); - c = (e == 2.2); - c = (e == 2 ); - c = (e == p1 ); - c = (2.2== f ); - c = (2 == f ); - c = (p1 == f ); - //c = (p1 == p2 ); - c = (p1 == 2.2); - c = (p1 == 2 ); - c = (2.2== p2 ); - c = (2 == p2 ); - - c = (2 <= e <= 3); - c = (2 <= p1<= 3); - - c = (2 >= e >= 3); - c = (2 >= p1>= 3); - - e[x[3]]=2; - e[x[3]]=4; - e[x[3]]=1; - e.constComp()=12; - - lp.addRow(LP::INF,e,23); - lp.addRow(LP::INF,3.0*(p1+p2)-p3,23); - lp.addRow(LP::INF,3.0*(x[1]+x[2]/2)-x[3],23); - lp.addRow(LP::INF,3.0*(p1+p2*2-5*p3+12-p4/3)+2*p4-4,23); - lp.addRow(LP::INF,3.0*(x[1]+x[2]*2-5*x[3]+12-x[4]/3)+2*x[4]-4,23); - - lp.addRow(x[1]+x[3]<=x[5]-3); - lp.addRow(-7<=x[1]+x[3]-12<=3); - //lp.addRow(x[1]<=x[5]); - -} - - -template -double maxFlow(const G &g,const C &cap,typename G::Node s,typename G::Node t) -{ - LpGlpk lp; - - typedef G Graph; - typedef typename G::Node Node; - typedef typename G::NodeIt NodeIt; - typedef typename G::Edge Edge; - typedef typename G::EdgeIt EdgeIt; - typedef typename G::OutEdgeIt OutEdgeIt; - typedef typename G::InEdgeIt InEdgeIt; - - typename G::EdgeMap x(g); - lp.addColSet(x); - //for(EdgeIt e(g);e!=INVALID;++e) x[e]=lp.addCol(); - - for(EdgeIt e(g);e!=INVALID;++e) { - lp.setColUpperBound(x[e],cap[e]); - lp.setColLowerBound(x[e],0); - } - - for(NodeIt n(g);n!=INVALID;++n) if(n!=s&&n!=t) { - LpGlpk::Expr ex; - for(InEdgeIt e(g,n);e!=INVALID;++e) ex+=x[e]; - for(OutEdgeIt e(g,n);e!=INVALID;++e) ex-=x[e]; - lp.addRow(0,ex,0); - } - { - LpGlpk::Expr ex; - for(InEdgeIt e(g,t);e!=INVALID;++e) ex+=x[e]; - for(OutEdgeIt e(g,t);e!=INVALID;++e) ex-=x[e]; - lp.setObj(ex); - } - - lp.solve(); - - return 0; -} - -int main() -{ - LpSolverSkeleton lp_skel; - LpGlpk lp_glpk; - LpCplex lp_cplex; - - lpTest(lp_skel); - lpTest(lp_cplex); - - ListGraph g; - ListGraph::EdgeMap cap(g); - - maxFlow(g,cap,ListGraph::NodeIt(g),ListGraph::NodeIt(g)); - -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp_old/expression.h --- a/src/work/athos/lp_old/expression.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,197 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_EXPRESSION_H -#define LEMON_EXPRESSION_H - -#include -#include -#include - -namespace lemon { - - /*! \brief Linear expression - - \c Expr<_Col,_Value> implements a class of linear expressions with the - operations of addition and multiplication with scalar. - - \author Marton Makai - */ - template - class Expr; - - template - class Expr { -// protected: - public: - typedef - typename std::map<_Col, _Value> Data; - Data data; - public: - void simplify() { - for (typename Data::iterator i=data.begin(); - i!=data.end(); ++i) { - if ((*i).second==0) data.erase(i); - } - } - Expr() { } - Expr(_Col _col) { - data.insert(std::make_pair(_col, 1)); - } - Expr& operator*=(_Value _value) { - for (typename Data::iterator i=data.begin(); - i!=data.end(); ++i) { - (*i).second *= _value; - } - simplify(); - return *this; - } - Expr& operator+=(const Expr<_Col, _Value>& expr) { - for (typename Data::const_iterator j=expr.data.begin(); - j!=expr.data.end(); ++j) { - typename Data::iterator i=data.find((*j).first); - if (i==data.end()) { - data.insert(std::make_pair((*j).first, (*j).second)); - } else { - (*i).second+=(*j).second; - } - } - simplify(); - return *this; - } - Expr& operator-=(const Expr<_Col, _Value>& expr) { - for (typename Data::const_iterator j=expr.data.begin(); - j!=expr.data.end(); ++j) { - typename Data::iterator i=data.find((*j).first); - if (i==data.end()) { - data.insert(std::make_pair((*j).first, -(*j).second)); - } else { - (*i).second+=-(*j).second; - } - } - simplify(); - return *this; - } - template - friend std::ostream& operator<<(std::ostream& os, - const Expr<_C, _V>& expr); - }; - - template - Expr<_Col, _Value> operator*(_Value _value, _Col _col) { - Expr<_Col, _Value> tmp(_col); - tmp*=_value; - tmp.simplify(); - return tmp; - } - - template - Expr<_Col, _Value> operator*(_Value _value, - const Expr<_Col, _Value>& expr) { - Expr<_Col, _Value> tmp(expr); - tmp*=_value; - tmp.simplify(); - return tmp; - } - - template - Expr<_Col, _Value> operator+(const Expr<_Col, _Value>& expr1, - const Expr<_Col, _Value>& expr2) { - Expr<_Col, _Value> tmp(expr1); - tmp+=expr2; - tmp.simplify(); - return tmp; - } - - template - Expr<_Col, _Value> operator-(const Expr<_Col, _Value>& expr1, - const Expr<_Col, _Value>& expr2) { - Expr<_Col, _Value> tmp(expr1); - tmp-=expr2; - tmp.simplify(); - return tmp; - } - - template - std::ostream& operator<<(std::ostream& os, - const Expr<_Col, _Value>& expr) { - for (typename Expr<_Col, _Value>::Data::const_iterator i= - expr.data.begin(); - i!=expr.data.end(); ++i) { - os << (*i).second << "*" << (*i).first << " "; - } - return os; - } - - template - class LConstr { - // protected: - public: - Expr<_Col, _Value> expr; - _Value lo; - public: - LConstr(const Expr<_Col, _Value>& _expr, _Value _lo) : - expr(_expr), lo(_lo) { } - }; - - template - LConstr<_Col, _Value> - operator<=(_Value lo, const Expr<_Col, _Value>& expr) { - return LConstr<_Col, _Value>(expr, lo); - } - - template - class UConstr { - // protected: - public: - Expr<_Col, _Value> expr; - _Value up; - public: - UConstr(const Expr<_Col, _Value>& _expr, _Value _up) : - expr(_expr), up(_up) { } - }; - - template - UConstr<_Col, _Value> - operator<=(const Expr<_Col, _Value>& expr, _Value up) { - return UConstr<_Col, _Value>(expr, up); - } - - template - class Constr { - // protected: - public: - Expr<_Col, _Value> expr; - _Value lo, up; - public: - Constr(const Expr<_Col, _Value>& _expr, _Value _lo, _Value _up) : - expr(_expr), lo(_lo), up(_up) { } - Constr(const LConstr<_Col, _Value>& _lconstr) : - expr(_lconstr.expr), - lo(_lconstr.lo), - up(std::numeric_limits<_Value>::infinity()) { } - Constr(const UConstr<_Col, _Value>& _uconstr) : - expr(_uconstr.expr), - lo(-std::numeric_limits<_Value>::infinity()), - up(_uconstr.up) { } - }; - - template - Constr<_Col, _Value> - operator<=(const LConstr<_Col, _Value>& lconstr, _Value up) { - return Constr<_Col, _Value>(lconstr.expr, lconstr.lo, up); - } - - template - Constr<_Col, _Value> - operator<=(_Value lo, const UConstr<_Col, _Value>& uconstr) { - return Constr<_Col, _Value>(uconstr.expr, lo, uconstr.up); - } - - template - Constr<_Col, _Value> - operator==(const Expr<_Col, _Value>& expr, _Value value) { - return Constr<_Col, _Value>(expr, value, value); - } - -} //namespace lemon - -#endif //LEMON_EXPRESSION_H diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp_old/expression_test.cc --- a/src/work/athos/lp_old/expression_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -#include -#include -#include - -using std::cout; -using std::endl; -using std::string; -using namespace lemon; - -int main() { - Expr b; - cout << b << endl; - Expr c("f"); - cout << c << endl; - Expr d=8.0*string("g"); - cout << d << endl; - c*=5; - cout << c << endl; - Expr e=c; - e+=8.9*9.0*string("l"); - cout << e << endl; - cout << c+d << endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp_old/lp_solver_base.h --- a/src/work/athos/lp_old/lp_solver_base.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,639 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_LP_SOLVER_BASE_H -#define LEMON_LP_SOLVER_BASE_H - -///\ingroup misc -///\file - -// #include -#include -#include -#include -#include -// #include -//#include - -#include -#include -#include -#include -#include -#include - -#include -#include -//#include -//#include -//#include -//#include - -using std::cout; -using std::cin; -using std::endl; - -namespace lemon { - - /// \addtogroup misc - /// @{ - - /// \brief A partitioned vector with iterable classes. - /// - /// This class implements a container in which the data is stored in an - /// stl vector, the range is partitioned into sets and each set is - /// doubly linked in a list. - /// That is, each class is iterable by lemon iterators, and any member of - /// the vector can bo moved to an other class. - template - class IterablePartition { - protected: - struct Node { - T data; - int prev; //invalid az -1 - int next; - }; - std::vector nodes; - struct Tip { - int first; - int last; - }; - std::vector tips; - public: - /// The classes are indexed by integers from \c 0 to \c classNum()-1. - int classNum() const { return tips.size(); } - /// This lemon style iterator iterates through a class. - class Class; - /// Constructor. The number of classes is to be given which is fixed - /// over the life of the container. - /// The partition classes are indexed from 0 to class_num-1. - IterablePartition(int class_num) { - for (int i=0; inext(*this); - return *this; - } - }; - - }; - - - /*! \e - \todo kellenene uj iterable structure bele, mert ez nem az igazi - \todo A[x,y]-t cserel. Jobboldal, baloldal csere. - \todo LEKERDEZESEK!!! - \todo DOKSI!!!! Doxygen group!!! - The aim of this class is to give a general surface to different - solvers, i.e. it makes possible to write algorithms using LP's, - in which the solver can be changed to an other one easily. - \nosubgrouping - */ - template - class LpSolverBase { - - /*! @name Uncategorized functions and types (public members) - */ - //@{ - public: - - //UNCATEGORIZED - - /// \e - typedef IterablePartition Rows; - /// \e - typedef IterablePartition Cols; - /// \e - typedef _Value Value; - /// \e - typedef Rows::Class Row; - /// \e - typedef Cols::Class Col; - public: - /// \e - IterablePartition row_iter_map; - /// \e - IterablePartition col_iter_map; - /// \e - std::vector int_row_map; - /// \e - std::vector int_col_map; - /// \e - const int VALID_CLASS; - /// \e - const int INVALID_CLASS; - /// \e - static const Value INF; - public: - /// \e - LpSolverBase() : row_iter_map(2), - col_iter_map(2), - VALID_CLASS(0), INVALID_CLASS(1) { } - /// \e - virtual ~LpSolverBase() { } - //@} - - /*! @name Medium level interface (public members) - These functions appear in the low level and also in the high level - interfaces thus these each of these functions have to be implemented - only once in the different interfaces. - This means that these functions have to be reimplemented for all of the - different lp solvers. These are basic functions, and have the same - parameter lists in the low and high level interfaces. - */ - //@{ - public: - - //UNCATEGORIZED FUNCTIONS - - /// \e - virtual void setMinimize() = 0; - /// \e - virtual void setMaximize() = 0; - - //SOLVER FUNCTIONS - - /// \e - virtual void solveSimplex() = 0; - /// \e - virtual void solvePrimalSimplex() = 0; - /// \e - virtual void solveDualSimplex() = 0; - - //SOLUTION RETRIEVING - - /// \e - virtual Value getObjVal() = 0; - - //OTHER FUNCTIONS - - /// \e - virtual int rowNum() const = 0; - /// \e - virtual int colNum() const = 0; - /// \e - virtual int warmUp() = 0; - /// \e - virtual void printWarmUpStatus(int i) = 0; - /// \e - virtual int getPrimalStatus() = 0; - /// \e - virtual void printPrimalStatus(int i) = 0; - /// \e - virtual int getDualStatus() = 0; - /// \e - virtual void printDualStatus(int i) = 0; - /// Returns the status of the slack variable assigned to row \c row. - virtual int getRowStat(const Row& row) = 0; - /// \e - virtual void printRowStatus(int i) = 0; - /// Returns the status of the variable assigned to column \c col. - virtual int getColStat(const Col& col) = 0; - /// \e - virtual void printColStatus(int i) = 0; - - //@} - - /*! @name Low level interface (protected members) - Problem manipulating functions in the low level interface - */ - //@{ - protected: - - //MATRIX MANIPULATING FUNCTIONS - - /// \e - virtual int _addCol() = 0; - /// \e - virtual int _addRow() = 0; - /// \e - virtual void _eraseCol(int i) = 0; - /// \e - virtual void _eraseRow(int i) = 0; - /// \e - virtual void _setRowCoeffs(int i, - const std::vector >& coeffs) = 0; - /// \e - /// This routine modifies \c coeffs only by the \c push_back method. - virtual void _getRowCoeffs(int i, - std::vector >& coeffs) = 0; - /// \e - virtual void _setColCoeffs(int i, - const std::vector >& coeffs) = 0; - /// \e - /// This routine modifies \c coeffs only by the \c push_back method. - virtual void _getColCoeffs(int i, - std::vector >& coeffs) = 0; - /// \e - virtual void _setCoeff(int col, int row, Value value) = 0; - /// \e - virtual Value _getCoeff(int col, int row) = 0; - // public: - // /// \e - // enum Bound { FREE, LOWER, UPPER, DOUBLE, FIXED }; - protected: - /// \e - /// The lower bound of a variable (column) have to be given by an - /// extended number of type Value, i.e. a finite number of type - /// Value or -INF. - virtual void _setColLowerBound(int i, Value value) = 0; - /// \e - /// The lower bound of a variable (column) is an - /// extended number of type Value, i.e. a finite number of type - /// Value or -INF. - virtual Value _getColLowerBound(int i) = 0; - /// \e - /// The upper bound of a variable (column) have to be given by an - /// extended number of type Value, i.e. a finite number of type - /// Value or INF. - virtual void _setColUpperBound(int i, Value value) = 0; - /// \e - /// The upper bound of a variable (column) is an - /// extended number of type Value, i.e. a finite number of type - /// Value or INF. - virtual Value _getColUpperBound(int i) = 0; - /// \e - /// The lower bound of a linear expression (row) have to be given by an - /// extended number of type Value, i.e. a finite number of type - /// Value or -INF. - virtual void _setRowLowerBound(int i, Value value) = 0; - /// \e - /// The lower bound of a linear expression (row) is an - /// extended number of type Value, i.e. a finite number of type - /// Value or -INF. - virtual Value _getRowLowerBound(int i) = 0; - /// \e - /// The upper bound of a linear expression (row) have to be given by an - /// extended number of type Value, i.e. a finite number of type - /// Value or INF. - virtual void _setRowUpperBound(int i, Value value) = 0; - /// \e - /// The upper bound of a linear expression (row) is an - /// extended number of type Value, i.e. a finite number of type - /// Value or INF. - virtual Value _getRowUpperBound(int i) = 0; - /// \e - virtual void _setObjCoeff(int i, Value obj_coef) = 0; - /// \e - virtual Value _getObjCoeff(int i) = 0; - - //SOLUTION RETRIEVING - - /// \e - virtual Value _getPrimal(int i) = 0; - //@} - - /*! @name High level interface (public members) - Problem manipulating functions in the high level interface - */ - //@{ - public: - - //MATRIX MANIPULATING FUNCTIONS - - /// \e - Col addCol() { - int i=_addCol(); - Col col; - col_iter_map.first(col, INVALID_CLASS); - if (col_iter_map.valid(col)) { //van hasznalhato hely - col_iter_map.set(col, INVALID_CLASS, VALID_CLASS); - col_iter_map[col]=i; - } else { //a cucc vegere kell inzertalni mert nincs szabad hely - col=col_iter_map.push_back(i, VALID_CLASS); - } - int_col_map.push_back(col); - return col; - } - /// \e - Row addRow() { - int i=_addRow(); - Row row; - row_iter_map.first(row, INVALID_CLASS); - if (row_iter_map.valid(row)) { //van hasznalhato hely - row_iter_map.set(row, INVALID_CLASS, VALID_CLASS); - row_iter_map[row]=i; - } else { //a cucc vegere kell inzertalni mert nincs szabad hely - row=row_iter_map.push_back(i, VALID_CLASS); - } - int_row_map.push_back(row); - return row; - } - /// \e - void eraseCol(const Col& col) { - col_iter_map.set(col, VALID_CLASS, INVALID_CLASS); - int cols[2]; - cols[1]=col_iter_map[col]; - _eraseCol(cols[1]); - col_iter_map[col]=0; //glpk specifikus, de kell ez?? - Col it; - for (col_iter_map.first(it, VALID_CLASS); - col_iter_map.valid(it); col_iter_map.next(it)) { - if (col_iter_map[it]>cols[1]) --col_iter_map[it]; - } - int_col_map.erase(int_col_map.begin()+cols[1]); - } - /// \e - void eraseRow(const Row& row) { - row_iter_map.set(row, VALID_CLASS, INVALID_CLASS); - int rows[2]; - rows[1]=row_iter_map[row]; - _eraseRow(rows[1]); - row_iter_map[row]=0; //glpk specifikus, de kell ez?? - Row it; - for (row_iter_map.first(it, VALID_CLASS); - row_iter_map.valid(it); row_iter_map.next(it)) { - if (row_iter_map[it]>rows[1]) --row_iter_map[it]; - } - int_row_map.erase(int_row_map.begin()+rows[1]); - } - /// \e - void setCoeff(Col col, Row row, Value value) { - _setCoeff(col_iter_map[col], row_iter_map[row], value); - } - /// \e - Value getCoeff(Col col, Row row) { - return _getCoeff(col_iter_map[col], row_iter_map[row], value); - } - /// \e - void setColLowerBound(Col col, Value lo) { - _setColLowerBound(col_iter_map[col], lo); - } - /// \e - Value getColLowerBound(Col col) { - return _getColLowerBound(col_iter_map[col]); - } - /// \e - void setColUpperBound(Col col, Value up) { - _setColUpperBound(col_iter_map[col], up); - } - /// \e - Value getColUpperBound(Col col) { - return _getColUpperBound(col_iter_map[col]); - } - /// \e - void setRowLowerBound(Row row, Value lo) { - _setRowLowerBound(row_iter_map[row], lo); - } - /// \e - Value getRowLowerBound(Row row) { - return _getRowLowerBound(row_iter_map[row]); - } - /// \e - void setRowUpperBound(Row row, Value up) { - _setRowUpperBound(row_iter_map[row], up); - } - /// \e - Value getRowUpperBound(Row row) { - return _getRowUpperBound(row_iter_map[row]); - } - /// \e - void setObjCoeff(const Col& col, Value obj_coef) { - _setObjCoeff(col_iter_map[col], obj_coef); - } - /// \e - Value getObjCoeff(const Col& col) { - return _getObjCoeff(col_iter_map[col]); - } - - //SOLUTION RETRIEVING FUNCTIONS - - /// \e - Value getPrimal(const Col& col) { - return _getPrimal(col_iter_map[col]); - } - - //@} - - /*! @name User friend interface - Problem manipulating functions in the user friend interface - */ - //@{ - - //EXPRESSION TYPES - - /// \e - typedef Expr Expression; - /// \e - typedef Expr DualExpression; - /// \e - typedef Constr Constraint; - - //MATRIX MANIPULATING FUNCTIONS - - /// \e - void setRowCoeffs(Row row, const Expression& expr) { - std::vector > row_coeffs; - for(typename Expression::Data::const_iterator i=expr.data.begin(); - i!=expr.data.end(); ++i) { - row_coeffs.push_back(std::make_pair - (col_iter_map[(*i).first], (*i).second)); - } - _setRowCoeffs(row_iter_map[row], row_coeffs); - } - /// \e - void setRow(Row row, const Constraint& constr) { - setRowCoeffs(row, constr.expr); - setRowLowerBound(row, constr.lo); - setRowUpperBound(row, constr.up); - } - /// \e - Row addRow(const Constraint& constr) { - Row row=addRow(); - setRowCoeffs(row, constr.expr); - setRowLowerBound(row, constr.lo); - setRowUpperBound(row, constr.up); - return row; - } - /// \e - /// This routine modifies \c expr by only adding to it. - void getRowCoeffs(Row row, Expression& expr) { - std::vector > row_coeffs; - _getRowCoeffs(row_iter_map[row], row_coeffs); - for(typename std::vector >::const_iterator - i=row_coeffs.begin(); i!=row_coeffs.end(); ++i) { - expr+= (*i).second*int_col_map[(*i).first]; - } - } - /// \e - void setColCoeffs(Col col, const DualExpression& expr) { - std::vector > col_coeffs; - for(typename DualExpression::Data::const_iterator i=expr.data.begin(); - i!=expr.data.end(); ++i) { - col_coeffs.push_back(std::make_pair - (row_iter_map[(*i).first], (*i).second)); - } - _setColCoeffs(col_iter_map[col], col_coeffs); - } - /// \e - /// This routine modifies \c expr by only adding to it. - void getColCoeffs(Col col, DualExpression& expr) { - std::vector > col_coeffs; - _getColCoeffs(col_iter_map[col], col_coeffs); - for(typename std::vector >::const_iterator - i=col_coeffs.begin(); i!=col_coeffs.end(); ++i) { - expr+= (*i).second*int_row_map[(*i).first]; - } - } - /// \e - void setObjCoeffs(const Expression& expr) { - // writing zero everywhere - for(Cols::ClassIt it(col_iter_map, VALID_CLASS); it!=INVALID; ++it) - setObjCoeff(it, 0.0); - // writing the data needed - for(typename Expression::Data::const_iterator i=expr.data.begin(); - i!=expr.data.end(); ++i) { - setObjCoeff((*i).first, (*i).second); - } - } - /// \e - /// This routine modifies \c expr by only adding to it. - void getObjCoeffs(Expression& expr) { - for(Cols::ClassIt it(col_iter_map, VALID_CLASS); it!=INVALID; ++it) - expr+=getObjCoeff(it)*it; - } - //@} - - - /*! @name MIP functions and types (public members) - */ - //@{ - public: - /// \e - virtual void solveBandB() = 0; - /// \e - virtual void setLP() = 0; - /// \e - virtual void setMIP() = 0; - protected: - /// \e - virtual void _setColCont(int i) = 0; - /// \e - virtual void _setColInt(int i) = 0; - /// \e - virtual Value _getMIPPrimal(int i) = 0; - public: - /// \e - void setColCont(Col col) { - _setColCont(col_iter_map[col]); - } - /// \e - void setColInt(Col col) { - _setColInt(col_iter_map[col]); - } - /// \e - Value getMIPPrimal(Col col) { - return _getMIPPrimal(col_iter_map[col]); - } - //@} - }; - -} //namespace lemon - -#endif //LEMON_LP_SOLVER_BASE_H diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp_old/lp_solver_glpk.h --- a/src/work/athos/lp_old/lp_solver_glpk.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,545 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_LP_SOLVER_GLPK_H -#define LEMON_LP_SOLVER_GLPK_H - -///\ingroup misc -///\file - -// #include -/* #include */ -/* #include */ -/* #include */ -/* #include */ -// #include -//#include -extern "C" { -#include "glpk.h" -} - -/* #include */ -/* #include */ -/* #include */ -/* #include */ -/* #include */ -/* #include */ - -//#include -//#include -#include -//#include -//#include -//#include -//#include - -using std::cout; -using std::cin; -using std::endl; - -namespace lemon { - - - template - const Value LpSolverBase::INF=std::numeric_limits::infinity(); - - - /// \brief Wrapper for GLPK solver - /// - /// This class implements a lemon wrapper for GLPK. - class LpGlpk : public LpSolverBase { - public: - typedef LpSolverBase Parent; - - public: - /// \e - LPX* lp; - - public: - /// \e - LpGlpk() : Parent(), - lp(lpx_create_prob()) { - int_row_map.push_back(Row()); - int_col_map.push_back(Col()); - lpx_set_int_parm(lp, LPX_K_DUAL, 1); - } - /// \e - ~LpGlpk() { - lpx_delete_prob(lp); - } - - //MATRIX INDEPEDENT MANIPULATING FUNCTIONS - - /// \e - void setMinimize() { - lpx_set_obj_dir(lp, LPX_MIN); - } - /// \e - void setMaximize() { - lpx_set_obj_dir(lp, LPX_MAX); - } - - //LOW LEVEL INTERFACE, MATRIX MANIPULATING FUNCTIONS - - protected: - /// \e - int _addCol() { - int i=lpx_add_cols(lp, 1); - _setColLowerBound(i, -INF); - _setColUpperBound(i, INF); - return i; - } - /// \e - int _addRow() { - int i=lpx_add_rows(lp, 1); - return i; - } - /// \e - virtual void _setRowCoeffs(int i, - const std::vector >& coeffs) { - int mem_length=1+colNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for (std::vector >:: - const_iterator it=coeffs.begin(); it!=coeffs.end(); ++it) { - ++length; - indices[length]=it->first; - doubles[length]=it->second; - } - lpx_set_mat_row(lp, i, length, indices, doubles); - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _getRowCoeffs(int i, - std::vector >& coeffs) { - int mem_length=1+colNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=lpx_get_mat_row(lp, i, indices, doubles); - for (int i=1; i<=length; ++i) { - coeffs.push_back(std::make_pair(indices[i], doubles[i])); - } - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _setColCoeffs(int i, - const std::vector >& coeffs) { - int mem_length=1+rowNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for (std::vector >:: - const_iterator it=coeffs.begin(); it!=coeffs.end(); ++it) { - ++length; - indices[length]=it->first; - doubles[length]=it->second; - } - lpx_set_mat_col(lp, i, length, indices, doubles); - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _getColCoeffs(int i, - std::vector >& coeffs) { - int mem_length=1+rowNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=lpx_get_mat_col(lp, i, indices, doubles); - for (int i=1; i<=length; ++i) { - coeffs.push_back(std::make_pair(indices[i], doubles[i])); - } - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _eraseCol(int i) { - int cols[2]; - cols[1]=i; - lpx_del_cols(lp, 1, cols); - } - virtual void _eraseRow(int i) { - int rows[2]; - rows[1]=i; - lpx_del_rows(lp, 1, rows); - } - void _setCoeff(int col, int row, double value) { - ///FIXME Of course this is not efficient at all, but GLPK knows not more. - int change_this; - bool get_set_row; - //The only thing we can do is optimize on whether working with a row - //or a coloumn - int row_num = rowNum(); - int col_num = colNum(); - if (col_num -#include -// #include -//#include -extern "C" { -#include "glpk.h" -} - -#include -#include -#include -#include -#include -#include - -//#include -//#include -//#include -#include -//#include -//#include -//#include -//#include -//#include - -using std::cout; -using std::cin; -using std::endl; - -namespace lemon { - - - /// \addtogroup misc - /// @{ - - /// \brief A partitioned vector with iterable classes. - /// - /// This class implements a container in which the data is stored in an - /// stl vector, the range is partitioned into sets and each set is - /// doubly linked in a list. - /// That is, each class is iterable by lemon iterators, and any member of - /// the vector can bo moved to an other class. - template - class IterablePartition { - protected: - struct Node { - T data; - int prev; //invalid az -1 - int next; - }; - std::vector nodes; - struct Tip { - int first; - int last; - }; - std::vector tips; - public: - /// The classes are indexed by integers from \c 0 to \c classNum()-1. - int classNum() const { return tips.size(); } - /// This lemon style iterator iterates through a class. - class ClassIt; - /// Constructor. The number of classes is to be given which is fixed - /// over the life of the container. - /// The partition classes are indexed from 0 to class_num-1. - IterablePartition(int class_num) { - for (int i=0; i::ClassIt RowIt; - ///. - IterablePartition row_iter_map; - ///. - typedef IterablePartition::ClassIt ColIt; - ///. - IterablePartition col_iter_map; - //std::vector row_id_to_lp_row_id; - //std::vector col_id_to_lp_col_id; - ///. - const int VALID_ID; - ///. - const int INVALID_ID; - - public: - ///. - LPSolverWrapper() : lp(lpx_create_prob()), - row_iter_map(2), - col_iter_map(2), - //row_id_to_lp_row_id(), col_id_to_lp_col_id(), - VALID_ID(0), INVALID_ID(1) { - lpx_set_int_parm(lp, LPX_K_DUAL, 1); - } - ///. - ~LPSolverWrapper() { - lpx_delete_prob(lp); - } - ///. - void setMinimize() { - lpx_set_obj_dir(lp, LPX_MIN); - } - ///. - void setMaximize() { - lpx_set_obj_dir(lp, LPX_MAX); - } - ///. - ColIt addCol() { - int i=lpx_add_cols(lp, 1); - ColIt col_it; - col_iter_map.first(col_it, INVALID_ID); - if (col_iter_map.valid(col_it)) { //van hasznalhato hely - col_iter_map.set(col_it, INVALID_ID, VALID_ID); - col_iter_map[col_it]=i; - //col_id_to_lp_col_id[col_iter_map[col_it]]=i; - } else { //a cucc vegere kell inzertalni mert nincs szabad hely - //col_id_to_lp_col_id.push_back(i); - //int j=col_id_to_lp_col_id.size()-1; - col_it=col_iter_map.push_back(i, VALID_ID); - } -// edge_index_map.set(e, i); -// lpx_set_col_bnds(lp, i, LPX_DB, 0.0, 1.0); -// lpx_set_obj_coef(lp, i, cost[e]); - return col_it; - } - ///. - RowIt addRow() { - int i=lpx_add_rows(lp, 1); - RowIt row_it; - row_iter_map.first(row_it, INVALID_ID); - if (row_iter_map.valid(row_it)) { //van hasznalhato hely - row_iter_map.set(row_it, INVALID_ID, VALID_ID); - row_iter_map[row_it]=i; - } else { //a cucc vegere kell inzertalni mert nincs szabad hely - row_it=row_iter_map.push_back(i, VALID_ID); - } - return row_it; - } - //pair-bol kell megadni egy std range-et - ///. - template - void setColCoeffs(const ColIt& col_it, - Begin begin, End end) { - int mem_length=1+lpx_get_num_rows(lp); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for ( ; begin!=end; ++begin) { - ++length; - indices[length]=row_iter_map[begin->first]; - doubles[length]=begin->second; - } - lpx_set_mat_col(lp, col_iter_map[col_it], length, indices, doubles); - delete [] indices; - delete [] doubles; - } - //pair-bol kell megadni egy std range-et - ///. - template - void setRowCoeffs(const RowIt& row_it, - Begin begin, End end) { - int mem_length=1+lpx_get_num_cols(lp); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for ( ; begin!=end; ++begin) { - ++length; - indices[length]=col_iter_map[begin->first]; - doubles[length]=begin->second; - } - lpx_set_mat_row(lp, row_iter_map[row_it], length, indices, doubles); - delete [] indices; - delete [] doubles; - } - ///. - void eraseCol(const ColIt& col_it) { - col_iter_map.set(col_it, VALID_ID, INVALID_ID); - int cols[2]; - cols[1]=col_iter_map[col_it]; - lpx_del_cols(lp, 1, cols); - col_iter_map[col_it]=0; //glpk specifikus - ColIt it; - for (col_iter_map.first(it, VALID_ID); - col_iter_map.valid(it); col_iter_map.next(it)) { - if (col_iter_map[it]>cols[1]) --col_iter_map[it]; - } - } - ///. - void eraseRow(const RowIt& row_it) { - row_iter_map.set(row_it, VALID_ID, INVALID_ID); - int rows[2]; - rows[1]=row_iter_map[row_it]; - lpx_del_rows(lp, 1, rows); - row_iter_map[row_it]=0; //glpk specifikus - RowIt it; - for (row_iter_map.first(it, VALID_ID); - row_iter_map.valid(it); row_iter_map.next(it)) { - if (row_iter_map[it]>rows[1]) --row_iter_map[it]; - } - } - ///. - void setColBounds(const ColIt& col_it, int bound_type, - double lo, double up) { - lpx_set_col_bnds(lp, col_iter_map[col_it], bound_type, lo, up); - } - ///. - double getObjCoef(const ColIt& col_it) { - return lpx_get_obj_coef(lp, col_iter_map[col_it]); - } - ///. - void setRowBounds(const RowIt& row_it, int bound_type, - double lo, double up) { - lpx_set_row_bnds(lp, row_iter_map[row_it], bound_type, lo, up); - } - ///. - void setObjCoef(const ColIt& col_it, double obj_coef) { - lpx_set_obj_coef(lp, col_iter_map[col_it], obj_coef); - } - ///. - void solveSimplex() { lpx_simplex(lp); } - ///. - void solvePrimalSimplex() { lpx_simplex(lp); } - ///. - void solveDualSimplex() { lpx_simplex(lp); } - ///. - double getPrimal(const ColIt& col_it) { - return lpx_get_col_prim(lp, col_iter_map[col_it]); - } - ///. - double getObjVal() { return lpx_get_obj_val(lp); } - ///. - int rowNum() const { return lpx_get_num_rows(lp); } - ///. - int colNum() const { return lpx_get_num_cols(lp); } - ///. - int warmUp() { return lpx_warm_up(lp); } - ///. - void printWarmUpStatus(int i) { - switch (i) { - case LPX_E_OK: cout << "LPX_E_OK" << endl; break; - case LPX_E_EMPTY: cout << "LPX_E_EMPTY" << endl; break; - case LPX_E_BADB: cout << "LPX_E_BADB" << endl; break; - case LPX_E_SING: cout << "LPX_E_SING" << endl; break; - } - } - ///. - int getPrimalStatus() { return lpx_get_prim_stat(lp); } - ///. - void printPrimalStatus(int i) { - switch (i) { - case LPX_P_UNDEF: cout << "LPX_P_UNDEF" << endl; break; - case LPX_P_FEAS: cout << "LPX_P_FEAS" << endl; break; - case LPX_P_INFEAS: cout << "LPX_P_INFEAS" << endl; break; - case LPX_P_NOFEAS: cout << "LPX_P_NOFEAS" << endl; break; - } - } - ///. - int getDualStatus() { return lpx_get_dual_stat(lp); } - ///. - void printDualStatus(int i) { - switch (i) { - case LPX_D_UNDEF: cout << "LPX_D_UNDEF" << endl; break; - case LPX_D_FEAS: cout << "LPX_D_FEAS" << endl; break; - case LPX_D_INFEAS: cout << "LPX_D_INFEAS" << endl; break; - case LPX_D_NOFEAS: cout << "LPX_D_NOFEAS" << endl; break; - } - } - /// Returns the status of the slack variable assigned to row \c row_it. - int getRowStat(const RowIt& row_it) { - return lpx_get_row_stat(lp, row_iter_map[row_it]); - } - ///. - void printRowStatus(int i) { - switch (i) { - case LPX_BS: cout << "LPX_BS" << endl; break; - case LPX_NL: cout << "LPX_NL" << endl; break; - case LPX_NU: cout << "LPX_NU" << endl; break; - case LPX_NF: cout << "LPX_NF" << endl; break; - case LPX_NS: cout << "LPX_NS" << endl; break; - } - } - /// Returns the status of the variable assigned to column \c col_it. - int getColStat(const ColIt& col_it) { - return lpx_get_col_stat(lp, col_iter_map[col_it]); - } - ///. - void printColStatus(int i) { - switch (i) { - case LPX_BS: cout << "LPX_BS" << endl; break; - case LPX_NL: cout << "LPX_NL" << endl; break; - case LPX_NU: cout << "LPX_NU" << endl; break; - case LPX_NF: cout << "LPX_NF" << endl; break; - case LPX_NS: cout << "LPX_NS" << endl; break; - } - } - }; - - /// @} - -} //namespace lemon - -#endif //LEMON_LP_SOLVER_WRAPPER_H diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp_old/magic_square.cc --- a/src/work/athos/lp_old/magic_square.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,99 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -#include - -using std::cout; -using std::endl; -using namespace lemon; - -/* - On an 1537Mhz PC, the run times with - glpk are the following. - for n=3,4, some secondes - for n=5, 25 hours - */ - -int main(int, char **) { - const int n=3; - const double row_sum=(1.0+n*n)*n/2; - Timer ts; - ts.reset(); - typedef LpGlpk LPSolver; - typedef LPSolver::Col Col; - LPSolver lp; - typedef std::map, Col> Coords; - Coords x; - // we create a new variable for each entry - // of the magic square - for (int i=1; i<=n; ++i) { - for (int j=1; j<=n; ++j) { - Col col=lp.addCol(); - x[std::make_pair(i,j)]=col; - lp.setColLowerBound(col, 1.0); - lp.setColUpperBound(col, double(n*n)); - } - } - LPSolver::Expression expr3, expr4; - for (int i=1; i<=n; ++i) { - LPSolver::Expression expr1, expr2; - for (int j=1; j<=n; ++j) { - expr1+=x[std::make_pair(i, j)]; - expr2+=x[std::make_pair(j, i)]; - } - - // sum of rows and columns - lp.addRow(expr1==row_sum); - lp.addRow(expr2==row_sum); - cout <<"Expr1: "<0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - -// { -// std::cout << "preflow ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// max_flow_test.preflow(Preflow, Graph::EdgeMap >::GEN_FLOW); -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - -// { -// std::cout << "wrapped preflow ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// pre_flow_res.run(); -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "flow value: "<< pre_flow_test.flowValue() << std::endl; -// } - - { - std::cout << "physical blocking flow augmentation ..." << std::endl; - for (EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - - for (EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - -// { -// std::cout << "faster physical blocking flow augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (max_flow_test.augmentOnBlockingFlow1()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; -// } - - { - std::cout << "on-the-fly blocking flow augmentation ..." << std::endl; - for (EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow2()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - - for (EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - -// { -// std::cout << "on-the-fly shortest path augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (augmenting_flow_test.augmentOnShortestPath()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - -// { -// std::cout << "on-the-fly shortest path augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (augmenting_flow_test.augmentOnShortestPath2()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - - ts.reset(); - - Edge e=g.addEdge(t, s); - Graph::EdgeMap cost(g, 0); - cost.set(e, -1); - cap.set(e, 10000); - typedef ConstMap Excess; - Excess excess(0); - typedef ConstMap LCap; - LCap lcap(0); - - MinCostGenFlow - min_cost(g, excess, lcap, cap, flow, cost); - min_cost.feasible(); - min_cost.runByLP(); - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< flow[e] << std::endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp_old/max_flow_expression.cc --- a/src/work/athos/lp_old/max_flow_expression.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -#include -#include -#include -#include -#include - -using std::cout; -using std::endl; -using namespace lemon; - -template -class PrimalMap { -protected: - LpGlpk* lp; - EdgeIndexMap* edge_index_map; -public: - PrimalMap(LpGlpk& _lp, EdgeIndexMap& _edge_index_map) : - lp(&_lp), edge_index_map(&_edge_index_map) { } - double operator[](Edge e) const { - return lp->getPrimal((*edge_index_map)[e]); - } -}; - -// Use a DIMACS max flow file as stdin. -// max_flow_expresion < dimacs_max_flow_file - -int main(int, char **) { - - typedef ListGraph Graph; - typedef Graph::Node Node; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - - Graph g; - - Node s, t; - Graph::EdgeMap cap(g); - readDimacs(std::cin, g, cap, s, t); - Timer ts; - - typedef LpGlpk LPSolver; - LPSolver lp; - lp.setMaximize(); - typedef LPSolver::Col Col; - typedef LPSolver::Row Row; - typedef Graph::EdgeMap EdgeIndexMap; - typedef Graph::NodeMap NodeIndexMap; - EdgeIndexMap edge_index_map(g); - NodeIndexMap node_index_map(g); - PrimalMap flow(lp, edge_index_map); - - // nonnegativity of flow and capacity function - for (Graph::EdgeIt e(g); e!=INVALID; ++e) { - Col col=lp.addCol(); - edge_index_map.set(e, col); - // interesting property in GLPK: - // if you change the order of the following two lines, the - // two runs of GLPK are extremely different - lp.setColLowerBound(col, 0); - lp.setColUpperBound(col, cap[e]); - } - - for (Graph::NodeIt n(g); n!=INVALID; ++n) { - LPSolver::Expression expr; - for (Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) - expr+=edge_index_map[e]; - for (Graph::InEdgeIt e(g, n); e!=INVALID; ++e) - expr-=edge_index_map[e]; - // cost function - if (n==s) { - lp.setObjCoeffs(expr); - } - // flow conservation constraints - if ((n!=s) && (n!=t)) { - node_index_map.set(n, lp.addRow(expr == 0.0)); - } - } - lp.solveSimplex(); - cout << "elapsed time: " << ts << endl; -// cout << "rows:" << endl; -// for ( -// LPSolver::Rows::ClassIt i(lp.row_iter_map, 0); -// i!=INVALID; -// ++i) { -// cout << i << " "; -// } -// cout << endl; -// cout << "cols:" << endl; -// for ( -// LPSolver::Cols::ClassIt i(lp.col_iter_map, 0); -// i!=INVALID; -// ++i) { -// cout << i << " "; -// } -// cout << endl; - lp.setMIP(); - cout << "elapsed time: " << ts << endl; - for (LPSolver::Cols::ClassIt it(lp.col_iter_map ,1); it!=INVALID; ++it) { - lp.setColInt(it); - } - cout << "elapsed time: " << ts << endl; - lp.solveBandB(); - cout << "elapsed time: " << ts << endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/lp_old/min_cost_gen_flow.h --- a/src/work/athos/lp_old/min_cost_gen_flow.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,268 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_MIN_COST_GEN_FLOW_H -#define LEMON_MIN_COST_GEN_FLOW_H -#include -//#include - -#include -#include -//#include -//#include -//#include -#include -#include -//#include -//#include -#include -#include - -namespace lemon { - - template - class PrimalMap { - protected: - LPGLPK* lp; - EdgeIndexMap* edge_index_map; - public: - PrimalMap(LPGLPK& _lp, EdgeIndexMap& _edge_index_map) : - lp(&_lp), edge_index_map(&_edge_index_map) { } - double operator[](Edge e) const { - return lp->getPrimal((*edge_index_map)[e]); - } - }; - - // excess: rho-delta egyelore csak =0-ra. - template , - typename LCapMap=typename Graph::template EdgeMap, - typename CapMap=typename Graph::template EdgeMap, - typename FlowMap=typename Graph::template EdgeMap, - typename CostMap=typename Graph::template EdgeMap > - class MinCostGenFlow { - protected: - const Graph& g; - const Excess& excess; - const LCapMap& lcapacity; - const CapMap& capacity; - FlowMap& flow; - const CostMap& cost; - public: - MinCostGenFlow(const Graph& _g, const Excess& _excess, - const LCapMap& _lcapacity, const CapMap& _capacity, - FlowMap& _flow, - const CostMap& _cost) : - g(_g), excess(_excess), lcapacity(_lcapacity), - capacity(_capacity), flow(_flow), cost(_cost) { } - bool feasible() { - // std::cout << "making new vertices..." << std::endl; - typedef ListGraph Graph2; - Graph2 g2; - typedef MergeEdgeGraphWrapper GW; - // std::cout << "merging..." << std::endl; - GW gw(g, g2); - typename GW::Node s(INVALID, g2.addNode(), true); - typename GW::Node t(INVALID, g2.addNode(), true); - typedef SmartGraph Graph3; - // std::cout << "making extender graph..." << std::endl; - typedef NewEdgeSetGraphWrapper2 GWW; -// { -// checkConcept(); -// } - GWW gww(gw); - typedef AugmentingGraphWrapper GWWW; - GWWW gwww(gw, gww); - - // std::cout << "making new edges..." << std::endl; - typename GWWW::template EdgeMap translated_cap(gwww); - - for (typename GW::EdgeIt e(gw); e!=INVALID; ++e) { - translated_cap.set(typename GWWW::Edge(e,INVALID,false), - capacity[e]-lcapacity[e]); - // cout << "t_cap " << gw.id(e) << " " - // << translated_cap[typename GWWW::Edge(e,INVALID,false)] << endl; - } - - Num expected=0; - - // std::cout << "making new edges 2..." << std::endl; - for (typename Graph::NodeIt n(g); n!=INVALID; ++n) { - Num a=0; - for (typename Graph::InEdgeIt e(g, n); e!=INVALID; ++e) - a+=lcapacity[e]; - for (typename Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) - a-=lcapacity[e]; - if (excess[n]>a) { - typename GWW::Edge e= - gww.addEdge(typename GW::Node(n,INVALID,false), t); - translated_cap.set(typename GWWW::Edge(INVALID, e, true), - excess[n]-a); - // std::cout << g.id(n) << "->t " << excess[n]-a << std::endl; - } - if (excess[n]" << g.id(n) << " "<< a-excess[n] < translated_flow(gwww, 0); - Preflow preflow(gwww, s, t, - translated_cap, translated_flow); - preflow.run(); - // std::cout << "fv: " << preflow.flowValue() << std::endl; - // std::cout << "expected: " << expected << std::endl; - - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - typename GW::Edge ew(e, INVALID, false); - typename GWWW::Edge ewww(ew, INVALID, false); - flow.set(e, translated_flow[ewww]+lcapacity[e]); - } - return (preflow.flowValue()>=expected); - } - // for nonnegative costs - bool run() { - // std::cout << "making new vertices..." << std::endl; - typedef ListGraph Graph2; - Graph2 g2; - typedef MergeEdgeGraphWrapper GW; - // std::cout << "merging..." << std::endl; - GW gw(g, g2); - typename GW::Node s(INVALID, g2.addNode(), true); - typename GW::Node t(INVALID, g2.addNode(), true); - typedef SmartGraph Graph3; - // std::cout << "making extender graph..." << std::endl; - typedef NewEdgeSetGraphWrapper2 GWW; -// { -// checkConcept(); -// } - GWW gww(gw); - typedef AugmentingGraphWrapper GWWW; - GWWW gwww(gw, gww); - - // std::cout << "making new edges..." << std::endl; - typename GWWW::template EdgeMap translated_cap(gwww); - - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - typename GW::Edge ew(e, INVALID, false); - typename GWWW::Edge ewww(ew, INVALID, false); - translated_cap.set(ewww, capacity[e]-lcapacity[e]); - // cout << "t_cap " << g.id(e) << " " - // << translated_cap[ewww] << endl; - } - - Num expected=0; - - // std::cout << "making new edges 2..." << std::endl; - for (typename Graph::NodeIt n(g); n!=INVALID; ++n) { - // std::cout << "node: " << g.id(n) << std::endl; - Num a=0; - for (typename Graph::InEdgeIt e(g, n); e!=INVALID; ++e) { - a+=lcapacity[e]; - // std::cout << "bee: " << g.id(e) << " " << lcapacity[e] << std::endl; - } - for (typename Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) { - a-=lcapacity[e]; - // std::cout << "kie: " << g.id(e) << " " << lcapacity[e] << std::endl; - } - // std::cout << "excess " << g.id(n) << ": " << a << std::endl; - if (0>a) { - typename GWW::Edge e= - gww.addEdge(typename GW::Node(n,INVALID,false), t); - translated_cap.set(typename GWWW::Edge(INVALID, e, true), - -a); - // std::cout << g.id(n) << "->t " << -a << std::endl; - } - if (0" << g.id(n) << " "<< a < translated_cost(gwww, 0); - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - translated_cost.set(typename GWWW::Edge( - typename GW::Edge(e, INVALID, false), INVALID, false), cost[e]); - } - // typename GWWW::template EdgeMap translated_flow(gwww, 0); - MinCostFlow, - typename GWWW::template EdgeMap > - min_cost_flow(gwww, translated_cost, translated_cap, - s, t); - while (min_cost_flow.augment()) { } - std::cout << "fv: " << min_cost_flow.flowValue() << std::endl; - std::cout << "expected: " << expected << std::endl; - - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - typename GW::Edge ew(e, INVALID, false); - typename GWWW::Edge ewww(ew, INVALID, false); - // std::cout << g.id(e) << " " << flow[e] << std::endl; - flow.set(e, lcapacity[e]+ - min_cost_flow.getFlow()[ewww]); - } - return (min_cost_flow.flowValue()>=expected); - } - void runByLP() { - typedef LPGLPK LPSolver; - LPSolver lp; - lp.setMinimize(); - typedef LPSolver::ColIt ColIt; - typedef LPSolver::RowIt RowIt; - typedef typename Graph::template EdgeMap EdgeIndexMap; - EdgeIndexMap edge_index_map(g); - PrimalMap lp_flow(lp, edge_index_map); - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - ColIt col_it=lp.addCol(); - edge_index_map.set(e, col_it); - if (lcapacity[e]==capacity[e]) - lp.setColBounds(col_it, LPSolver::FIXED, lcapacity[e], capacity[e]); - else - lp.setColBounds(col_it, LPSolver::DOUBLE, lcapacity[e], capacity[e]); - lp.setObjCoef(col_it, cost[e]); - } - LPSolver::ColIt col_it; - for (lp.col_iter_map.first(col_it, lp.VALID_CLASS); - lp.col_iter_map.valid(col_it); - lp.col_iter_map.next(col_it)) { -// std::cout << "ize " << lp.col_iter_map[col_it] << std::endl; - } - for (typename Graph::NodeIt n(g); n!=INVALID; ++n) { - typename Graph::template EdgeMap coeffs(g, 0); - for (typename Graph::InEdgeIt e(g, n); e!=INVALID; ++e) - coeffs.set(e, coeffs[e]+1); - for (typename Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) - coeffs.set(e, coeffs[e]-1); - RowIt row_it=lp.addRow(); - typename std::vector< std::pair > row; - //std::cout << "node:" < -//#include "test_tools.h" -#include -#include -//#include -//#include - -using namespace std; -using namespace lemon; - - - -bool passed = true; - -void check(bool rc, char *msg="") { - passed = passed && rc; - if(!rc) { - std::cerr << "Test failed! ("<< msg << ")" << std::endl; \ - - - } -} - - - -int main() -{ - - typedef ListGraph::Node Node; - typedef ListGraph::Edge Edge; - - ListGraph graph; - - //Ahuja könyv példája - - Node s=graph.addNode(); - Node v1=graph.addNode(); - Node v2=graph.addNode(); - Node v3=graph.addNode(); - Node v4=graph.addNode(); - Node v5=graph.addNode(); - Node t=graph.addNode(); - - ListGraph::NodeMap supply_demand(graph); - - supply_demand.set(s, 2); - supply_demand.set(v1, 3); - supply_demand.set(v3, -1); - supply_demand.set(t, -4); - - Edge s_v1=graph.addEdge(s, v1); - Edge v1_v2=graph.addEdge(v1, v2); - Edge s_v3=graph.addEdge(s, v3); - Edge v2_v4=graph.addEdge(v2, v4); - Edge v2_v5=graph.addEdge(v2, v5); - Edge v3_v5=graph.addEdge(v3, v5); - Edge v4_t=graph.addEdge(v4, t); - Edge v5_t=graph.addEdge(v5, t); - - - ListGraph::EdgeMap cost(graph); - - cost.set(s_v1, 6); - cost.set(v1_v2, 4); - cost.set(s_v3, 10); - cost.set(v2_v4, 5); - cost.set(v2_v5, 1); - cost.set(v3_v5, 4); - cost.set(v4_t, 8); - cost.set(v5_t, 8); - - /* - ListGraph::EdgeMap capacity(graph); - - capacity.set(s_v1, 2); - capacity.set(v1_v2, 2); - capacity.set(s_v3, 1); - capacity.set(v2_v4, 1); - capacity.set(v2_v5, 1); - capacity.set(v3_v5, 1); - capacity.set(v4_t, 1); - capacity.set(v5_t, 2); - */ - - // ConstMap const1map(1); - std::cout << "Enhanced capacity scaling algorithm test (for the mincostflow problem)..." << std::endl; - - MinCostFlow< ListGraph, ListGraph::EdgeMap, ListGraph::NodeMap > - min_cost_flow_test(graph, cost, supply_demand); - - min_cost_flow_test.run(); - //int k=1; - check(min_cost_flow_test.checkOptimality(), "Is the primal-dual solution pair really optimal?"); - - /* - check( min_cost_flow_test.run(s,t,k) == 1 && min_cost_flow_test.totalLength() == 19,"One path, total cost should be 19"); - - check(min_cost_flow_test.checkComplementarySlackness(), "Is the primal-dual solution pair really optimal?"); - - k=2; - - check( min_cost_flow_test.run(s,t,k) == 2 && min_cost_flow_test.totalLength() == 41,"Two paths, total cost should be 41"); - - check(min_cost_flow_test.checkComplementarySlackness(), "Is the primal-dual solution pair really optimal?"); - - - k=4; - - check( min_cost_flow_test.run(s,t,k) == 3 && min_cost_flow_test.totalLength() == 64,"Three paths, total cost should be 64"); - - check(min_cost_flow_test.checkComplementarySlackness(), "Is the primal-dual solution pair really optimal?"); - - */ - cout << (passed ? "All tests passed." : "Some of the tests failed!!!") - << endl; - - return passed ? 0 : 1; - -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/mincostflow.h --- a/src/work/athos/mincostflow.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,513 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_MINCOSTFLOW_H -#define LEMON_MINCOSTFLOW_H - -///\ingroup galgs -///\file -///\brief An algorithm for finding the minimum cost flow of given value in an uncapacitated network - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -namespace lemon { - -/// \addtogroup galgs -/// @{ - - ///\brief Implementation of an algorithm for solving the minimum cost general - /// flow problem in an uncapacitated network - /// - /// - /// The class \ref lemon::MinCostFlow "MinCostFlow" implements - /// an algorithm for solving the following general minimum cost flow problem> - /// - /// - /// - /// \warning It is assumed here that the problem has a feasible solution - /// - /// The range of the cost (weight) function is nonnegative reals but - /// the range of capacity function is the set of nonnegative integers. - /// It is not a polinomial time algorithm for counting the minimum cost - /// maximal flow, since it counts the minimum cost flow for every value 0..M - /// where \c M is the value of the maximal flow. - /// - ///\author Attila Bernath - template - class MinCostFlow { - - typedef typename CostMap::Value Cost; - - - typedef typename SupplyDemandMap::Value SupplyDemand; - - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::template EdgeMap FlowMap; - typedef ConstMap ConstEdgeMap; - - // typedef ConstMap ConstMap; - - typedef ResGraphWrapper ResGraph; - typedef typename ResGraph::Edge ResGraphEdge; - - class ModCostMap { - //typedef typename ResGraph::template NodeMap NodeMap; - typedef typename Graph::template NodeMap NodeMap; - const ResGraph& res_graph; - // const EdgeIntMap& rev; - const CostMap &ol; - const NodeMap &pot; - public : - typedef typename CostMap::Key Key; - typedef typename CostMap::Value Value; - - Value operator[](typename ResGraph::Edge e) const { - if (res_graph.forward(e)) - return ol[e]-(pot[res_graph.target(e)]-pot[res_graph.source(e)]); - else - return -ol[e]-(pot[res_graph.target(e)]-pot[res_graph.source(e)]); - } - - ModCostMap(const ResGraph& _res_graph, - const CostMap &o, const NodeMap &p) : - res_graph(_res_graph), /*rev(_rev),*/ ol(o), pot(p){}; - };//ModCostMap - - - protected: - - //Input - const Graph& graph; - const CostMap& cost; - const SupplyDemandMap& supply_demand;//supply or demand of nodes - - - //auxiliary variables - - //To store the flow - FlowMap flow; - //To store the potential (dual variables) - typedef typename Graph::template NodeMap PotentialMap; - PotentialMap potential; - - - Cost total_cost; - - - public : - - - MinCostFlow(Graph& _graph, CostMap& _cost, SupplyDemandMap& _supply_demand): - graph(_graph), - cost(_cost), - supply_demand(_supply_demand), - flow(_graph), - potential(_graph){ } - - - ///Runs the algorithm. - - ///Runs the algorithm. - - ///\todo May be it does make sense to be able to start with a nonzero - /// feasible primal-dual solution pair as well. - void run() { - - //To store excess-deficit values - SupplyDemandMap excess_deficit(graph); - - //Resetting variables from previous runs - //total_cost = 0; - - - typedef typename Graph::template NodeMap HeapMap; - typedef BinHeap< Node, SupplyDemand, typename Graph::template NodeMap, - std::greater > HeapType; - - //A heap for the excess nodes - HeapMap excess_nodes_map(graph,-1); - HeapType excess_nodes(excess_nodes_map); - - //A heap for the deficit nodes - HeapMap deficit_nodes_map(graph,-1); - HeapType deficit_nodes(deficit_nodes_map); - - //A container to store nonabundant arcs - std::list nonabundant_arcs; - - - FOR_EACH_LOC(typename Graph::EdgeIt, e, graph){ - flow.set(e,0); - nonabundant_arcs.push_back(e); - } - - //Initial value for delta - SupplyDemand delta = 0; - - typedef UnionFindEnum UFE; - - //A union-find structure to store the abundant components - typename UFE::MapType abund_comp_map(graph); - UFE abundant_components(abund_comp_map); - - - - FOR_EACH_LOC(typename Graph::NodeIt, n, graph){ - excess_deficit.set(n,supply_demand[n]); - //A supply node - if (excess_deficit[n] > 0){ - excess_nodes.push(n,excess_deficit[n]); - } - //A demand node - if (excess_deficit[n] < 0){ - deficit_nodes.push(n, - excess_deficit[n]); - } - //Finding out starting value of delta - if (delta < abs(excess_deficit[n])){ - delta = abs(excess_deficit[n]); - } - //Initialize the copy of the Dijkstra potential to zero - potential.set(n,0); - //Every single point is an abundant component initially - abundant_components.insert(n); - } - - //It'll be allright as an initial value, though this value - //can be the maximum deficit here - SupplyDemand max_excess = delta; - - ///\bug This is a serious cheat here, before we have an uncapacitated ResGraph - ConstEdgeMap const_inf_map(MAXINT); - - //We need a residual graph which is uncapacitated - ResGraph res_graph(graph, const_inf_map, flow); - - //An EdgeMap to tell which arcs are abundant - typename Graph::template EdgeMap abundant_arcs(graph); - - //Let's construct the sugraph consisting only of the abundant edges - typedef ConstMap< typename Graph::Node, bool > ConstNodeMap; - - ConstNodeMap const_true_map(true); - typedef SubGraphWrapper< const Graph, ConstNodeMap, - typename Graph::template EdgeMap > - AbundantGraph; - AbundantGraph abundant_graph(graph, const_true_map, abundant_arcs ); - - //Let's construct the residual graph for the abundant graph - typedef ResGraphWrapper - ResAbGraph; - //Again uncapacitated - ResAbGraph res_ab_graph(abundant_graph, const_inf_map, flow); - - //We need things for the bfs - typename ResAbGraph::template NodeMap bfs_reached(res_ab_graph); - typename ResAbGraph::template NodeMap - bfs_pred(res_ab_graph); - NullMap bfs_dist_dummy; - //Teszt celbol: - //BfsIterator > - //izebize(res_ab_graph, bfs_reached); - //We want to run bfs-es (more) on this graph 'res_ab_graph' - Bfs < const ResAbGraph , - typename ResAbGraph::template NodeMap, - typename ResAbGraph::template NodeMap, - NullMap > - bfs(res_ab_graph, bfs_reached, bfs_pred, bfs_dist_dummy); - /*This is what Marci wants for a bfs - template , - typename PredMap - =typename Graph::template NodeMap, - typename DistMap=typename Graph::template NodeMap > - class Bfs : public BfsIterator { - - */ - - ModCostMap mod_cost(res_graph, cost, potential); - - Dijkstra dijkstra(res_graph, mod_cost); - - //We will use the number of the nodes of the graph often - int number_of_nodes = graph.nodeNum(); - - while (max_excess > 0){ - - //Reset delta if still too big - if (8*number_of_nodes*max_excess <= delta){ - delta = max_excess; - - } - - /* - * Beginning of the delta scaling phase - */ - //Merge and stuff - { - SupplyDemand buf=8*number_of_nodes*delta; - typename std::list::iterator i = nonabundant_arcs.begin(); - while ( i != nonabundant_arcs.end() ){ - if (flow[*i]>=buf){ - Node a = abundant_components.find(res_graph.target(*i)); - Node b = abundant_components.find(res_graph.source(*i)); - //Merge - if (a != b){ - abundant_components.join(a,b); - //We want to push the smaller - //Which has greater absolut value excess/deficit - Node root=(abs(excess_deficit[a])>abs(excess_deficit[b]))?a:b; - //Which is the other - Node non_root = ( a == root ) ? b : a ; - abundant_components.makeRep(root); - SupplyDemand qty_to_augment = abs(excess_deficit[non_root]); - //Push the positive value - if (excess_deficit[non_root] < 0) - swap(root, non_root); - //If the non_root node has excess/deficit at all - if (qty_to_augment>0){ - //Find path and augment - bfs.run(typename AbundantGraph::Node(non_root)); - //root should be reached - - //Augmenting on the found path - Node n=root; - ResGraphEdge e; - while (n!=non_root){ - e = bfs_pred[n]; - n = res_graph.source(e); - res_graph.augment(e,qty_to_augment); - } - - //We know that non_root had positive excess - excess_nodes.set(non_root, - excess_nodes[non_root] - qty_to_augment); - //But what about root node - //It might have been positive and so became larger - if (excess_deficit[root]>0){ - excess_nodes.set(root, - excess_nodes[root] + qty_to_augment); - } - else{ - //Or negative but not turned into positive - deficit_nodes.set(root, - deficit_nodes[root] - qty_to_augment); - } - - //Update the excess_deficit map - excess_deficit[non_root] -= qty_to_augment; - excess_deficit[root] += qty_to_augment; - - - } - } - //What happens to i? - //Marci and Zsolt says I shouldn't do such things - nonabundant_arcs.erase(i++); - abundant_arcs[*i] = true; - } - else - ++i; - } - } - - - Node s = excess_nodes.top(); - max_excess = excess_nodes[s]; - Node t = deficit_nodes.top(); - if (max_excess < deficit_nodes[t]){ - max_excess = deficit_nodes[t]; - } - - - while(max_excess > (number_of_nodes-1)*delta/number_of_nodes){ - - - //s es t valasztasa - - //Dijkstra part - dijkstra.run(s); - - /*We know from theory that t can be reached - if (!dijkstra.reached(t)){ - //There are no k paths from s to t - break; - }; - */ - - //We have to change the potential - FOR_EACH_LOC(typename ResGraph::NodeIt, n, res_graph){ - potential[n] += dijkstra.distMap()[n]; - } - - - //Augmenting on the sortest path - Node n=t; - ResGraphEdge e; - while (n!=s){ - e = dijkstra.pred(n); - n = dijkstra.predNode(n); - res_graph.augment(e,delta); - /* - //Let's update the total cost - if (res_graph.forward(e)) - total_cost += cost[e]; - else - total_cost -= cost[e]; - */ - } - - //Update the excess_deficit map - excess_deficit[s] -= delta; - excess_deficit[t] += delta; - - - //Update the excess_nodes heap - if (delta > excess_nodes[s]){ - if (delta > excess_nodes[s]) - deficit_nodes.push(s,delta - excess_nodes[s]); - excess_nodes.pop(); - - } - else{ - excess_nodes.set(s, excess_nodes[s] - delta); - } - //Update the deficit_nodes heap - if (delta > deficit_nodes[t]){ - if (delta > deficit_nodes[t]) - excess_nodes.push(t,delta - deficit_nodes[t]); - deficit_nodes.pop(); - - } - else{ - deficit_nodes.set(t, deficit_nodes[t] - delta); - } - //Dijkstra part ends here - - //Choose s and t again - s = excess_nodes.top(); - max_excess = excess_nodes[s]; - t = deficit_nodes.top(); - if (max_excess < deficit_nodes[t]){ - max_excess = deficit_nodes[t]; - } - - } - - /* - * End of the delta scaling phase - */ - - //Whatever this means - delta = delta / 2; - - /*This is not necessary here - //Update the max_excess - max_excess = 0; - FOR_EACH_LOC(typename Graph::NodeIt, n, graph){ - if (max_excess < excess_deficit[n]){ - max_excess = excess_deficit[n]; - } - } - */ - - - }//while(max_excess > 0) - - - //return i; - } - - - - - ///This function gives back the total cost of the found paths. - ///Assumes that \c run() has been run and nothing changed since then. - Cost totalCost(){ - return total_cost; - } - - ///Returns a const reference to the EdgeMap \c flow. \pre \ref run() must - ///be called before using this function. - const FlowMap &getFlow() const { return flow;} - - ///Returns a const reference to the NodeMap \c potential (the dual solution). - /// \pre \ref run() must be called before using this function. - const PotentialMap &getPotential() const { return potential;} - - ///This function checks, whether the given solution is optimal - ///Running after a \c run() should return with true - ///In this "state of the art" this only checks optimality, doesn't bother with feasibility - /// - ///\todo Is this OK here? - bool checkComplementarySlackness(){ - Cost mod_pot; - Cost fl_e; - FOR_EACH_LOC(typename Graph::EdgeIt, e, graph){ - //C^{\Pi}_{i,j} - mod_pot = cost[e]-potential[graph.target(e)]+potential[graph.source(e)]; - fl_e = flow[e]; - // std::cout << fl_e << std::endl; - if (mod_pot > 0 && fl_e != 0) - return false; - - } - return true; - } - - /* - //For testing purposes only - //Lists the node_properties - void write_property_vector(const SupplyDemandMap& a, - char* prop_name="property"){ - FOR_EACH_LOC(typename Graph::NodeIt, i, graph){ - cout<<"Node id.: "< -#include - -#include -#include -#include -#include "minlengthpaths.h" -//#include - -using namespace lemon; - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo < dimacs_max_flow_file -int main(int argc, char ** argv) { - typedef ListGraph Graph; - - typedef Graph::Node Node; - //typedef Graph::EachEdgeIt EachEdgeIt; - - Graph G; - Node s, t; - Graph::EdgeMap cap(G); - readDimacs(std::cin, G, cap, s, t); - - std::cout << "Minlengthpaths demo (ATHOS)..." << std::endl; - //Graph::EdgeMap flow(G); //0 flow - - // double pre_time=currTime(); - - int k=1; - if (argc>1) - k = atoi(argv[1]); - MinLengthPaths > - surb_test(G,cap); - Timer ts; - ts.reset(); - std::cout << "Number of found paths: " << surb_test.run(s,t,k) << std::endl; - std::cout << "elapsed time: " << ts << std::endl; - - std::cout << "Total length of found paths: " << surb_test.totalLength() << std::endl; - //std::cout << (surb_test.checkComplementarySlackness() ? "OK (compl. slackn.)." : "Problem (compl. slackn.)!!!") << std::endl; - - //preflow_push max_flow_test(G, s, t, cap); - //int flow_value=max_flow_test.run(); - - //double post_time=currTime(); - - //std::cout << "elapsed time: " << post_time-pre_time << " sec"<< std::endl; - //std::cout << "flow value: "<< flow_value << std::endl; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/munkaido --- a/src/work/athos/munkaido Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,12 +0,0 @@ -III. - IV.1. -pentek: Megbeszélés 3 óra - megbeszeltuk Alpárral, hogy hogyan mûködjön a Suurballe 1 óra -Hétfõ: Suurballe 4 óra -Kedd: Suurballe 5 óra -Csüt.: Suurballe 2 óra - Wiki beszámoló 1 óra -Eredmény: Félkész Suurballe - -IV.2. - IV.9. -pentek: Megbeszélés 3 óra -Hétfõ: Suurballe 4 óra diff -r ee5959aa4410 -r c280de819a73 src/work/athos/old/minlengthpaths.h --- a/src/work/athos/old/minlengthpaths.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,202 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_MINLENGTHPATHS_H -#define LEMON_MINLENGTHPATHS_H - -///\ingroup galgs -///\file -///\brief An algorithm for finding k paths of minimal total length. - -#include -#include -#include -#include -#include - - -namespace lemon { - -/// \addtogroup galgs -/// @{ - - ///\brief Implementation of an algorithm for finding k paths between 2 nodes - /// of minimal total length - /// - /// The class \ref lemon::MinLengthPaths "MinLengthPaths" implements - /// an algorithm for finding k edge-disjoint paths - /// from a given source node to a given target node in an - /// edge-weighted directed graph having minimal total weigth (length). - /// - ///\author Attila Bernath - template - class MinLengthPaths { - - typedef typename LengthMap::Value Length; - - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::template EdgeMap EdgeIntMap; - - typedef ConstMap ConstMap; - - typedef ResGraphWrapper ResGraphType; - - class ModLengthMap { - typedef typename ResGraphType::template NodeMap NodeMap; - const ResGraphType& G; - const EdgeIntMap& rev; - const LengthMap &ol; - const NodeMap &pot; - public : - typedef typename LengthMap::Key Key; - typedef typename LengthMap::Value Value; - - Value operator[](typename ResGraphType::Edge e) const { - //if ( (1-2*rev[e])*ol[e]-(pot[G.target(e)]-pot[G.source(e)] ) <0 ){ - // std::cout<<"Negative length!!"< > paths; - //typedef DirPath DPath; - //DPath paths; - - - Length total_length; - - public : - - - MinLengthPaths(Graph& _G, LengthMap& _length) : G(_G), - length(_length), reversed(_G)/*, dijkstra_dist(_G)*/{ } - - - ///Runs the algorithm. - - ///Runs the algorithm. - ///Returns k if there are at least k edge-disjoint paths from s to t. - ///Otherwise it returns the number of found edge-disjoint paths from s to t. - int run(Node s, Node t, int k) { - ConstMap const1map(1); - - - //We need a residual graph, in which some of the edges are reversed - ResGraphType res_graph(G, const1map, reversed); - - //Initialize the copy of the Dijkstra potential to zero - typename ResGraphType::template NodeMap dijkstra_dist(res_graph); - ModLengthMap mod_length(res_graph, reversed, length, dijkstra_dist); - - Dijkstra dijkstra(res_graph, mod_length); - - int i; - for (i=0; i - void getPath(DirPath& p, int j){ - p.clear(); - typename DirPath::Builder B(p); - for(typename std::vector::iterator i=paths[j].begin(); - i!=paths[j].end(); ++i ){ - B.pushBack(*i); - } - - B.commit(); - } - - }; //class MinLengthPaths - - ///@} - -} //namespace lemon - -#endif //LEMON_MINLENGTHPATHS_H diff -r ee5959aa4410 -r c280de819a73 src/work/athos/pf_demo.cc --- a/src/work/athos/pf_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,104 +0,0 @@ -#include -#include -#include - -#include "list_graph.h" -//#include "marci_graph_traits.hh" -//#include "marci_property_vector.hh" -#include "preflow_push.hh" - -using namespace lemon; - - -int main (int, char*[]) -{ - - typedef ListGraph::Node Node; - typedef ListGraph::Edge Edge; - - ListGraph graph; - - /* - //Marci példája - - - NodeIt s=graph.addNode(); - NodeIt v1=graph.addNode(); - NodeIt v2=graph.addNode(); - NodeIt v3=graph.addNode(); - NodeIt v4=graph.addNode(); - NodeIt t=graph.addNode(); - - - EdgeIt s_v1=graph.addEdge(s, v1); - EdgeIt s_v2=graph.addEdge(s, v2); - EdgeIt v1_v2=graph.addEdge(v1, v2); - EdgeIt v2_v1=graph.addEdge(v2, v1); - EdgeIt v1_v3=graph.addEdge(v1, v3); - EdgeIt v3_v2=graph.addEdge(v3, v2); - EdgeIt v2_v4=graph.addEdge(v2, v4); - EdgeIt v4_v3=graph.addEdge(v4, v3); - EdgeIt v3_t=graph.addEdge(v3, t); - EdgeIt v4_t=graph.addEdge(v4, t); - - ListGraph::EdgeMap length(graph); - - length.set(s_v1, 16); - length.set(s_v2, 13); - length.set(v1_v2, 10); - length.set(v2_v1, 4); - length.set(v1_v3, 12); - length.set(v3_v2, 9); - length.set(v2_v4, 14); - length.set(v4_v3, 7); - length.set(v3_t, 20); - length.set(v4_t, 4); - */ - - - //Ahuja könyv példája - - Node s=graph.addNode(); - Node v2=graph.addNode(); - Node v3=graph.addNode(); - Node v4=graph.addNode(); - Node v5=graph.addNode(); - Node t=graph.addNode(); - - Edge s_v2=graph.addEdge(s, v2); - Edge s_v3=graph.addEdge(s, v3); - Edge v2_v4=graph.addEdge(v2, v4); - Edge v2_v5=graph.addEdge(v2, v5); - Edge v3_v5=graph.addEdge(v3, v5); - Edge v4_t=graph.addEdge(v4, t); - Edge v5_t=graph.addEdge(v5, t); - - //Kis modositas - //edge_iterator v2_s=graph.add_edge(v2, s); - - ListGraph::EdgeMap length(graph); - - length.set(s_v2, 10); - length.set(s_v3, 10); - length.set(v2_v4, 5); - length.set(v2_v5, 8); - length.set(v3_v5, 5); - length.set(v4_t, 8); - length.set(v5_t, 8); - - //Kis modositas - //length.put(v2_s, 100); - - - - std::cout << "preflow-push algorithm test..." << std::endl; - - - preflow_push preflow_push_test(graph, s, t, length); - cout << preflow_push_test.run()< -#include -#include -#include -//#include "pf_hiba.hh" -//#include -//#include -#include -//#include - -using namespace std; - -namespace lemon { - - template - class preflow_push { - - //Useful typedefs - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - - - //--------------------------------------------- - //Parameters of the algorithm - //--------------------------------------------- - //Fully examine an active node until excess becomes 0 - enum node_examination_t {examine_full, examine_to_relabel}; - //No more implemented yet:, examine_only_one_edge}; - node_examination_t node_examination; - //Which implementation to be used - enum implementation_t {impl_fifo, impl_highest_label}; - //No more implemented yet:}; - implementation_t implementation; - //--------------------------------------------- - //Parameters of the algorithm - //--------------------------------------------- - - private: - //input - Graph& G; - Node s; - Node t; - typename Graph::EdgeMap &capacity; - - //output - typename Graph::EdgeMap preflow; - T maxflow_value; - - //auxiliary variables for computation - //The number of the nodes - int number_of_nodes; - //A nodemap for the level - typename Graph::NodeMap level; - //A nodemap for the excess - typename Graph::NodeMap excess; - - //Number of nodes on each level - vector num_of_nodes_on_level; - - //For the FIFO implementation - list fifo_nodes; - //For 'highest label' implementation - int highest_active; - //int second_highest_active; - vector< list > active_nodes; - - public: - - //Constructing the object using the graph, source, sink and capacity vector - preflow_push( - Graph& _G, - Node _s, - Node _t, - typename Graph::EdgeMap & _capacity) - : G(_G), s(_s), t(_t), - capacity(_capacity), - preflow(_G), - //Counting the number of nodes - //number_of_nodes(count(G.first())), - number_of_nodes(G.nodeNum()), - - level(_G), - excess(_G)//, - // Default constructor: active_nodes() - { - //Simplest parameter settings - node_examination = examine_full;//examine_to_relabel;// - //Which implementation to be usedexamine_full - implementation = impl_highest_label;//impl_fifo; - - // - num_of_nodes_on_level.resize(2*number_of_nodes-1); - num_of_nodes_on_level.clear(); - - switch(implementation){ - case impl_highest_label :{ - active_nodes.clear(); - active_nodes.resize(2*number_of_nodes-1); - - break; - } - default: - break; - } - - } - - //Returns the value of a maximal flow - T run(); - - typename Graph::EdgeMap getmaxflow(){ - return preflow; - } - - - private: - //For testing purposes only - //Lists the node_properties - void write_property_vector(typename Graph::NodeMap a, - //node_property_vector a, - char* prop_name="property"){ - for(NodeIt i=G.template first(); G.valid(i); G.next(i)) { - cout<<"Node id.: "<=0 && active_nodes[highest_active].empty() ){ - --highest_active; - } - - if( highest_active>=0) { - - - Node a=active_nodes[highest_active].front(); - active_nodes[highest_active].pop_front(); - - return a; - } - else { - return INVALID; - } - - break; - - } - case impl_fifo : { - - if( ! fifo_nodes.empty() ) { - Node a=fifo_nodes.front(); - fifo_nodes.pop_front(); - return a; - } - else { - return INVALID; - } - break; - } - } - // - return INVALID; - } - - //Puts node 'a' among the active nodes - void make_active(const Node& a){ - //s and t never become active - if (a!=s && a!= t){ - switch(implementation){ - case impl_highest_label : - active_nodes[level[a]].push_back(a); - break; - case impl_fifo : - fifo_nodes.push_back(a); - break; - } - - } - - //Update highest_active label - if (highest_active(); G.valid(i); G.next(i)) { - level.set(i,0); - excess.set(i,0); - for(OutEdgeIt j=G.template first(i); G.valid(j); G.next(j)) - preflow.set(j, 0); - } - num_of_nodes_on_level[0]=number_of_nodes; - highest_active=0; - //--------------------------------------- - //Initialize parameters - //--------------------------------------- - - - //------------------------------------ - //This is the only part that uses BFS - //------------------------------------ - - /*Reverse_bfs from t, to find the starting level.*/ - //Copyright: Jacint - change_level_to(t,0); - - std::queue bfs_queue; - bfs_queue.push(t); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(G.first(e,v); G.valid(e); G.next(e)) { - Node w=G.source(e); - if ( level[w] == number_of_nodes && w != s ) { - bfs_queue.push(w); - //Node first=level_list[l]; - //if ( G.valid(first) ) left.set(first,w); - //right.set(w,first); - //level_list[l]=w; - change_level_to(w, l); - //level.set(w, l); - } - } - } - change_level_to(s,number_of_nodes); - //level.set(s,number_of_nodes); - - /* - //Setting starting level values using reverse bfs - reverse_bfs rev_bfs(G,t); - rev_bfs.run(); - //write_property_vector(rev_bfs.dist,"rev_bfs"); - for(NodeIt i=G.template first(); G.valid(i); G.next(i)) { - change_level_to(i,rev_bfs.dist(i)); - //level.put(i,rev_bfs.dist.get(i)); - } - */ - //------------------------------------ - //This is the only part that uses BFS - //------------------------------------ - - - //Starting level of s - change_level_to(s,number_of_nodes); - //level.put(s,number_of_nodes); - - - //we push as much preflow from s as possible to start with - for(OutEdgeIt j=G.template first(s); G.valid(j); G.next(j)){ - modify_preflow(j,capacity[j] ); - make_active(G.target(j)); - int lev=level[G.target(j)]; - if(highest_activepreflow[j]){ - if(level[G.source(j)]==level[G.target(j)]+1){ - return true; - } - else{ - if (level[G.target(j)] < new_level) - new_level=level[G.target(j)]; - } - } - return false; - } - - //If the preflow is greater than 0 on the given edge - //then the edge reversd is an edge in the residual graph - bool is_admissible_backward_edge(Edge j, int& new_level){ - - if (0 - T preflow_push::run() { - - preprocess(); - //write_property_vector(level,"level"); - T e,v; - Node a; - while (a=get_active_node(), G.valid(a)){ - - //cout<(a); - while (G.valid(j) && e){ - - if (is_admissible_forward_edge(j,new_level)){ - v=min(e,capacity[j] - preflow[j]); - e -= v; - //New node might become active - if (excess[G.target(j)]==0){ - make_active(G.target(j)); - } - modify_preflow(j,v); - } - G.next(j); - } - } - //In edges to node a - { - InEdgeIt j=G.template first(a); - while (G.valid(j) && e){ - if (is_admissible_backward_edge(j,new_level)){ - v=min(e,preflow[j]); - e -= v; - //New node might become active - if (excess[G.source(j)]==0){ - make_active(G.source(j)); - } - modify_preflow(j,-v); - } - G.next(j); - } - } - - //if (G.id(a)==999) - //cout< -//#include -//#include - -#include -#include - -using namespace lemon; - - -int main() -{ - - - typedef ListGraph::Node Node; - typedef ListGraph::Edge Edge; - - ListGraph graph; - - /* - //Marci példája - - - NodeIt s=graph.addNode(); - NodeIt v1=graph.addNode(); - NodeIt v2=graph.addNode(); - NodeIt v3=graph.addNode(); - NodeIt v4=graph.addNode(); - NodeIt t=graph.addNode(); - - - EdgeIt s_v1=graph.addEdge(s, v1); - EdgeIt s_v2=graph.addEdge(s, v2); - EdgeIt v1_v2=graph.addEdge(v1, v2); - EdgeIt v2_v1=graph.addEdge(v2, v1); - EdgeIt v1_v3=graph.addEdge(v1, v3); - EdgeIt v3_v2=graph.addEdge(v3, v2); - EdgeIt v2_v4=graph.addEdge(v2, v4); - EdgeIt v4_v3=graph.addEdge(v4, v3); - EdgeIt v3_t=graph.addEdge(v3, t); - EdgeIt v4_t=graph.addEdge(v4, t); - - ListGraph::EdgeMap length(graph); - - length.set(s_v1, 16); - length.set(s_v2, 13); - length.set(v1_v2, 10); - length.set(v2_v1, 4); - length.set(v1_v3, 12); - length.set(v3_v2, 9); - length.set(v2_v4, 14); - length.set(v4_v3, 7); - length.set(v3_t, 20); - length.set(v4_t, 4); - */ - - - //Ahuja könyv példája - - Node s=graph.addNode(); - Node v2=graph.addNode(); - Node v3=graph.addNode(); - Node v4=graph.addNode(); - Node v5=graph.addNode(); - Node t=graph.addNode(); - - Edge s_v2=graph.addEdge(s, v2); - Edge s_v3=graph.addEdge(s, v3); - Edge v2_v4=graph.addEdge(v2, v4); - Edge v2_v5=graph.addEdge(v2, v5); - Edge v3_v5=graph.addEdge(v3, v5); - Edge v4_t=graph.addEdge(v4, t); - Edge v5_t=graph.addEdge(v5, t); - - //Kis modositas - //edge_iterator v2_s=graph.add_edge(v2, s); - - ListGraph::EdgeMap length(graph); - - length.set(s_v2, 10); - length.set(s_v3, 10); - length.set(v2_v4, 5); - length.set(v2_v5, 8); - length.set(v3_v5, 5); - length.set(v4_t, 8); - length.set(v5_t, 8); - - //Kis modositas - //length.put(v2_s, 100); - - - - - /*Egyszerû példa - NodeIt s=flow_test.add_node(); - NodeIt v1=flow_test.add_node(); - NodeIt v2=flow_test.add_node(); - NodeIt t=flow_test.add_node(); - - node_property_vector node_name(flow_test); - node_name.put(s, "s"); - node_name.put(v1, "v1"); - node_name.put(v2, "v2"); - node_name.put(t, "t"); - - edge_iterator s_v1=flow_test.add_edge(s, v1); - edge_iterator v1_v2=flow_test.add_edge(v1, v2); - edge_iterator v2_t=flow_test.add_edge(v2, t); - - edge_property_vector length(flow_test); - - length.put(s_v1, 16); - length.put(v1_v2, 10); - length.put(v2_t, 4); - */ - - std::cout << "Suurballe algorithm test..." << std::endl; - - - int k=3; - MinLengthPaths > - surb_test(graph, length); - std::cout << surb_test.run(s,t,k) << std::endl; - - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/uf_demo.cc --- a/src/work/athos/uf_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,48 +0,0 @@ -//This is just a simple example program to test my union-find structure - -//#include -#include -#include -#include -using namespace lemon; -using namespace std; - -int main (int, char*[]) -{ - typedef ListGraph::NodeIt NodeIt; - typedef ListGraph::EachNodeIt EachNodeIt; - typedef ListGraph::EdgeIt EdgeIt; - - ListGraph flowG; - - - //Marci példája - - - - NodeIt s=flowG.addNode(); - NodeIt v1=flowG.addNode(); - NodeIt v2=flowG.addNode(); - NodeIt v3=flowG.addNode(); - NodeIt v4=flowG.addNode(); - NodeIt t=flowG.addNode(); - - ListGraph::NodeMap component(flowG); - - component.set(s, -1); - component.set(v1, -1); - component.set(v2, -1); - component.set(v3, -1); - component.set(v4, -1); - component.set(t, -1); - - UnionFind< NodeIt, ListGraph::NodeMap > uf(component); - cout<<"Merge s and v1: "<(); i.valid(); ++i) { - - cout<<"Az "< -//#include - - -namespace lemon { - - template - class UnionFind { - KeyIntMap& pointmap; - struct VectorElementType { - int boss; - int count; - VectorElementType(int _boss, int _count){ - boss = _boss; - count = _count; - } - }; - std::vector container; - public: - - UnionFind(KeyIntMap& _pointmap): pointmap(_pointmap){ - - } - - //Give a component of one point to the structure - int addPoint(Key u){ - int _index = container.size(); - VectorElementType buf(_index,1); - container.push_back(buf); - return _index; - } - - - //Finds the big boss of u - int find(Key u){ - if (pointmap.get(u)==-1){ - int whoami = addPoint(u); - pointmap.set(u, whoami); - return whoami; - } - else{ - int emp = pointmap.get(u); - int boss = container[emp].boss; - while(emp != boss){ - emp = boss; - boss = container[emp].boss; - } - return boss; - } - } - - //Finds u and v in the structures and merges the comopnents, if not equal - bool findAndMerge(Key u,Key v){ - int bu = find(u); - int bv = find(v); - if (bu != bv){ - unio(bu,bv); - return true; - } - else{ - return false; - } - } - - //Merges a into b - void mergeInto(int a, int b){ - container[a].boss = b; - container[b].count += container[a].count; - } - - //Makes the union - void unio(int b1, int b2){ - if (container[b1].count>container[b2].count){ - mergeInto(b2,b1); - } - else{ - mergeInto(b1,b2); - } - }//unio - }; - -}//namespace lemon -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/athos/xy/boundingbox.cc --- a/src/work/athos/xy/boundingbox.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -#include - -#include -using namespace std; -using namespace lemon; -int main() -{ - xy z; - cout << "A teszt a következõ: elõször beolvasunk 2 síkvektort, elkészítjük hozzá a határoló dobozt. Azután további síkvektorokat olvasunk be, amiket egy másik bounding boxhoz adogatunk hozzá. Mindig kiírjuk, hogy a megadott új pont benne volt e, majd hozzáadás után a doboz aktuális állapotát. Ezt a második beolvasást CTRL-D-vel lehet megszakítani: ezután a két dobozt összeadjuk." << endl; - - cout << "Kerek elõször 2 sikvektort (az elsõ dobozhoz)." << endl; - BoundingBox doboz1; - cin >> z; - doboz1 += z; - cin >> z; - doboz1 += z; - cout << "Az elsõ határoló doboz aktualisan: " << endl; - cout << "Bal alsó sarok: " << doboz1.bottomLeft() << endl; - cout << "Jobb felsõ sarok: " << doboz1.topRight() << endl; - - - - cout << "Kerek sok sikvektort." << endl; - - BoundingBox doboz; - - vector< xy > v; - - while(cin >> z) { - v.push_back(z); - if (doboz.inside(z)){ - cout << "Ez most belül van." << endl; - } - else{ - cout << "Ez most kívül van." << endl; - } - - doboz += z; - cout << "A második határoló doboz aktualisan: " << endl; - cout << "Bal alsó sarok: " << doboz.bottomLeft() << endl; - cout << "Jobb felsõ sarok: " << doboz.topRight() << endl; - } - - doboz += doboz1; - cout << "A két doboz összege: " << endl; - cout << "Bal alsó sarok: " << doboz.bottomLeft() << endl; - cout << "Jobb felsõ sarok: " << doboz.topRight() << endl; - - /* - cout << "A kovetkezo szamokat szoroztam ossze:" << endl; - for(unsigned int i=0; i1){ - cout << "Az elsö kettö szorzata: " << v[0]*v[1] << endl; - } - */ - cout << "Eleg nehez volt." << endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/athos/xy/xy.cc --- a/src/work/athos/xy/xy.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,42 +0,0 @@ -#include -#include -#include -using namespace std; -using namespace lemon; - - -int main() -{ - - cout << "Kérek szépen egy egész számot!" << endl; - int s; - cin >> s; - - cout << "Kerek sok sikvektort." << endl; - - xy osszeg; - xy kul; - xy z; - - vector< xy > v; - - while(cin >> z) { - v.push_back(z); - osszeg += z; - kul -= z; - cout << "Az összeg aktualisan: " << osszeg << endl; - cout << "A különbség aktualisan: " << kul << endl; - } - - cout << "A kovetkezo szamokat szoroztam ossze:" << endl; - for(unsigned int i=0; i1){ - cout << "Az elsö kettö szorzata: " << v[0]*v[1] << endl; - } - - cout << "Eleg nehez volt." << endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/bfsdemo.cc --- a/src/work/bfsdemo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,128 +0,0 @@ -#include -#include -#include - -using namespace NEGRO; -using namespace std; - -class IGraph -{ -public: - - // struct NodeType {bfs_node_data bfs;}; - struct NodeType {bool isVis;}; - - vector nodes; - - class NodeIterator - { - public: - IGraph *G; - int n; - NodeIterator &operator ++() { n++; return *this;} - NodeType &operator *() const { return G->nodes[n];} - NodeType *operator ->() const { return &(G->nodes[n]);} - bool isValid() const {return n<=5000;} - int Index() {return n;} //csak a kiirashoz kell - - NodeIterator() {} - NodeIterator(IGraph &Gr) {G=&Gr;n=1;} //Bfs class prefer this. - }; - - void GetFirst(NodeIterator &i) {i.G=this;i.n=1;} - - class OutEdgeIterator - { - public: - IGraph *G; - int f,t; - int gcd() { int a=f;int b=t;int c;while((c=a%b)) {a=b;b=c;} ; return b;} - OutEdgeIterator &operator ++() {while(++t<=5000&&gcd()==1);return *this;} - bool isValid() const {return t<=5000;} - NodeIterator From() const {NodeIterator i; i.G=G;i.n=f;return i;} - NodeIterator To() const {NodeIterator i; i.G=G;i.n=t;return i;} - NodeIterator Anode() const {return From();} - NodeIterator Bnode() const {return To();} - - OutEdgeIterator() {} - OutEdgeIterator(IGraph &Gr,NodeIterator &n) //Bfs class prefer this. - {G=&Gr;f=n.n;t=0;operator++();} - }; - - typedef OutEdgeIterator EdgeIterator; - void GetFirst(OutEdgeIterator &i,const NodeIterator &n) - {i.G=this;i.f=n.n;i.t=0;++i;} - - IGraph() : nodes(5001) {} -}; - -class IMaps_t -{ -public: -// class_element_map visited; - struct _visited_map_t { - typedef bool value_type; - void Put(const IGraph::NodeIterator &n,const value_type &t) { n->isVis=t; } - value_type Get(const IGraph::NodeIterator &n) const { return n->isVis; } - void SetG(IGraph &G) {} - } visited; - struct _tree_map_t { - typedef IGraph::EdgeIterator value_type; - void Put(const IGraph::NodeIterator &n,const value_type &t) - { cout << t.From().Index() << "->" << t.To().Index() << '\n'; } - void SetG(IGraph &G) {} - } tree; - do_nothing_map dist; //node->int (W) - do_nothing_map priority; //node->int (W) -}; - -// New style bfs traits -class BFS_T -{ -public: - - typedef IGraph Graph; - typedef IGraph::OutEdgeIterator SearchEdgeIterator; - - struct visited_map_t { - typedef bool value_type; - void Put(const IGraph::NodeIterator &n,const value_type &t) { n->isVis=t; } - value_type Get(const IGraph::NodeIterator &n) const { return n->isVis; } - void SetG(IGraph &G) {} - }; - struct tree_map_t { - typedef IGraph::EdgeIterator value_type; - void Put(const IGraph::NodeIterator &n,const value_type &t) - { cout << t.From().Index() << "->" << t.To().Index() << '\n'; } - void SetG(IGraph &G) {} - }; - typedef do_nothing_map dist_map_t; //node->int (W) - typedef do_nothing_map priority_map_t; //node->int (W) -}; - - -int main() -{ - IGraph IG; - -// //Function-syte calling -// IMaps_t IMaps; - -// IGraph::NodeIterator in; -// IG.GetFirst(in); -// ++in; -// bfs_fn(IG,in,IMaps); - - //Class-style calling: - - IGraph::NodeIterator in; - IG.GetFirst(in); - ++in; - Bfs bfs; - bfs.SetG(IG); - bfs.Init(in); - bfs.Run(); -} diff -r ee5959aa4410 -r c280de819a73 src/work/bfsdemo2.cc --- a/src/work/bfsdemo2.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -#include -#include -#include - -using namespace NEGRO; -using namespace std; - -typedef Graph TestGraph; - -int gcd(int a,int b) {int c; while((c=a%b)) {a=b;b=c;} ; return b;} - -int main() -{ - TestGraph G; - - TestGraph::NodeIterator tn,n2; - - cout << "Create nodes\n"; - - for(int i=1;i<=500;i++) - { - *(tn=G.AddNode())=i; - if(i==2) n2=tn; - } - - cout << "Create Edges\n"; - - for(TestGraph::NodeIterator n(G);n.isValid();++n) - for(TestGraph::NodeIterator m(G);m.isValid();++m) if(n!=m) - if(gcd(*n,*m)>1) G.AddEdge(n,m); - - - cout << "Run BFS\n"; - - Bfs > bfs; - - bfs.SetG(G); - bfs.Init(n2); - bfs.Run(); - - for(TestGraph::NodeIterator n(G);n.isValid();++n) - if((*n)!=2) - cout << (Get(bfs.dist_map,n)) << '\n'; - - for(TestGraph::NodeIterator n(G);n.isValid();++n) - if(Get(bfs.dist_map,n)) - cout << *(Get(bfs.tree_map,n).From()) << "->" - << *(Get(bfs.tree_map,n).To()) - << '\n'; -} diff -r ee5959aa4410 -r c280de819a73 src/work/bin_heap_demo.cc --- a/src/work/bin_heap_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,114 +0,0 @@ -#include -#include -#include - -#include - -using namespace lemon; -using namespace std; - -class string_int_map; - -// Egy binaris kupac, ami stringekhez rendelt double ertekeket tarol, -// azaz mindig az a string van a tetejen, amihez a legkisebb szam tartozik. -// A kupac egy string_int_map tipusu property_map segitsegevel tarolja -// a stringek aktualis helyet sajatmagan belul. -// Egy olyan stringhez, ami meg nincsen a kupac -1 -et kell rendelnunk. -typedef BinHeap StrDoubleHeap; - -class string_int_map : public map { - typedef map parent; -public: - int get(const string &s) { - // Bocs, ez igy gaaaany, de nem volt kedvem utananezni, hogy - // hogy is mukodik ez a map :) - if( count(s) == 0 ) { - parent::operator[](s) = StrDoubleHeap::PRE_HEAP; - } - return parent::operator[](s); - } - int operator[](const string &s) { - return get(s); - } - void set(const string &s, int i) { - parent::operator[](s) = i; - } -}; - - -int main() -{ - string_int_map sim; - - - cout << "testing string_int_map default value:\n"; - cout << " sim.get(\"alma\"): " << sim.get("alma") << endl; - cout << " sim[\"alma\"]: " << sim["alma"] << endl; - - cout << "creating the heap\n"; - StrDoubleHeap heap(sim); - - cout << "heap.push(\"alma\", 15);\n"; - heap.push("alma", 15); - - cout << "heap.set(\"korte\", 3.4);\n"; - heap.set("korte", 3.4); - - cout << "heap[\"alma\"] = " - << heap["alma"] - << endl; - - cout << "heap.top() = " - << heap.top() << endl; - cout << "heap.prio() = " - << heap.prio() << endl; - - cout << "heap.decrease(\"alma\", 1.2);\n"; - heap.set("alma", 1.2); - - cout << "heap.top() = " - << heap.top() << endl; - cout << "heap.prio() = " - << heap.prio() << endl; - - cout << "heap.set(\"alma\", 22);\n"; - heap.set("alma", 22); - - cout << "heap.top() = " - << heap.top() << endl; - cout << "heap.prio() = " - << heap.prio() << endl; - - cout << "heap.size() = " - << heap.size() << endl; - cout << "heap.pop();\n"; - heap.pop(); - - cout << "heap.top() = " - << heap.top() << endl; - cout << "heap.prio() = " - << heap.prio() << endl; - - cout << "heap.state(\"szilva\") = " - << heap.state("szilva") << endl; - cout << "heap.set(\"szilva\", 0.5);\n"; - heap.set("szilva", 0.5); - cout << "heap.state(\"szilva\") = " - << heap.state("szilva") << endl; - cout << "heap.top() = " - << heap.top() << endl; - cout << "heap.pop();\n"; - heap.pop(); - cout << "heap.state(\"szilva\") = " - << heap.state("szilva") << endl; - - cout << "heap.size() = " - << heap.size() << endl; - cout << "heap.pop();\n"; - heap.pop(); - - cout << "heap.size() = " - << heap.size() << endl; - cout << "heap.empty() = " - << (heap.empty()?"true":"false") << endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/deba/array_map_factory.h --- a/src/work/deba/array_map_factory.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,355 +0,0 @@ -// -*- c++ -*- -#ifndef ARRAY_MAP_H -#define ARRAY_MAP_H - -#include - -#include "extended_pair.h" - -namespace lemon { - - template class ArrayMapFactory { - - public: - - typedef typename MapRegistry::Graph Graph; - typedef typename MapRegistry::Key Key; - typedef typename MapRegistry::KeyIt KeyIt; - - typedef typename MapRegistry::MapBase MapBase; - - template > - class Map : public MapBase { - - public: - - typedef V Value; - typedef A Allocator; - - - Map() : values(0), capacity(0) {} - - Map(const Graph& g, MapRegistry& r) : MapBase(g, r) { - allocate_memory(); - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - int id = getGraph()->id(it); - allocator.construct(&(values[id]), Value()); - } - } - - Map(const Graph& g, MapRegistry& r, const Value& v) : MapBase(g, r) { - allocate_memory(); - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - int id = getGraph()->id(it); - allocator.construct(&(values[id]), v); - } - } - - Map(const Map& copy) : MapBase(*copy.graph, *copy.registry) { - capacity = copy.capacity; - if (capacity == 0) return; - values = allocator.allocate(capacity); - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - int id = getGraph()->id(it); - allocator.construct(&(values[id]), copy.values[id]); - } - } - - template Map(const CMap& copy) - : capacity(0), values(0), MapBase(copy) { - if (getGraph()) { - allocate_memory(); - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - set(it, copy[it]); - } - } - } - - Map& operator=(const Map& copy) { - if (© == this) return; - if (capacity != 0) { - destroy(); - allocator.deallocate(values, capacity); - } - capacity = copy.capacity; - if (capacity == 0) return; - values = allocator.allocate(capacity); - for (KeyIt it(getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - int id = getGraph()->id(it); - allocator.construct(&(values[id]), copy.values[id]); - } - } - - template Map& operator=(const CMap& copy) { - if (getGraph()) { - destroy(); - } - this->MapBase::operator=(copy); - if (getGraph()) { - allocate_memory(); - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - set(it, copy[it]); - } - } - } - - virtual ~Map() { - if (capacity != 0) { - destroy(); - allocator.deallocate(values, capacity); - } - } - - - Value& operator[](const Key& key) { - int id = getGraph()->id(key); - return values[id]; - } - - const Value& operator[](const Key& key) const { - int id = getGraph()->id(key); - return values[id]; - } - - const Value& get(const Key& key) const { - int id = getGraph()->id(key); - return values[id]; - } - - void set(const Key& key, const Value& val) { - int id = getGraph()->id(key); - values[id] = val; - } - - void add(const Key& key) { - int id = getGraph()->id(key); - if (id >= capacity) { - int new_capacity = (capacity == 0 ? 1 : capacity); - while (new_capacity <= id) { - new_capacity <<= 1; - } - Value* new_values = allocator.allocate(new_capacity);; - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - int jd = getGraph()->id(it); - if (id != jd) { - allocator.construct(&(new_values[jd]), values[jd]); - allocator.destroy(&(values[jd])); - } - } - if (capacity != 0) allocator.deallocate(values, capacity); - values = new_values; - capacity = new_capacity; - } - allocator.construct(&(values[id]), Value()); - } - - void erase(const Key& key) { - int id = getGraph()->id(key); - allocator.destroy(&(values[id])); - } - - class iterator { - friend class Map; - friend class const_iterator; - private: - - /** Private constructor to initalize the the iterators returned - * by the begin() and end(). - */ - iterator (Map& pmap, const KeyIt& pit) : map(&pmap), it(pit) {} - - public: - - /** Default constructor. - */ - iterator() {} - - typedef extended_pair Reference; - - /** Dereference operator for map. - */ - Reference operator*() { - return Reference(it, (*map)[it]); - } - - class Pointer { - friend class iterator; - private: - Reference data; - Pointer(const Key& key, Value& val) : data(key, val) {} - public: - Reference* operator->() {return &data;} - }; - - /** Arrow operator for map. - */ - Pointer operator->() { - return Pointer(it, ((*map)[it])); - } - - /** The pre increment operator of the map. - */ - iterator& operator++() { - map->getGraph()->next(it); - return *this; - } - - /** The post increment operator of the map. - */ - iterator operator++(int) { - iterator tmp(it); - map.getGraph()->next(it); - return tmp; - } - - /** The equality operator of the map. - */ - bool operator==(const_iterator p_it) { - return p_it.it == it; - } - - /** The not-equality operator of the map. - */ - bool operator!=(const_iterator p_it) { - return !(*this == p_it); - } - - - private: - Map* map; - KeyIt it; - }; - - /** Returns the begin iterator of the map. - */ - iterator begin() { - return iterator(*this, KeyIt(*getGraph())); - } - - /** Returns the end iterator of the map. - */ - iterator end() { - return iterator(*this, INVALID); - } - - class const_iterator { - friend class Map; - friend class iterator; - private: - - /** Private constructor to initalize the the iterators returned - * by the begin() and end(). - */ - const_iterator (const Map& pmap, const KeyIt& pit) - : map(&pmap), it(pit) {} - - public: - - /** Default constructor. - */ - const_iterator() {} - - /** Constructor to convert iterator to const_iterator. - */ - const_iterator(iterator p_it) : map(p_it.map), it(p_it.it) {} - - typedef extended_pair Reference; - - /** Dereference operator for map. - */ - Reference operator*() { - return Reference(it, (*map)[it]); - } - - - class Pointer { - friend class const_iterator; - private: - Reference data; - Pointer(const Key& key, const Value& val) : data(key, val) {} - public: - Reference* operator->() {return &data;} - }; - - /** Arrow operator for map. - */ - Pointer operator->() { - return Pointer(it, ((*map)[it])); - } - - /** The pre increment operator of the map. - */ - const_iterator& operator++() { - map->getGraph()->next(it); - return *this; - } - - /** The post increment operator of the map. - */ - const_iterator operator++(int) { - const_iterator tmp(it); - map->getGraph()->next(it); - return tmp; - } - - /** The equality operator of the map. - */ - bool operator==(const_iterator p_it) { - return p_it.it == it; - } - - /** The not-equality operator of the map. - */ - bool operator!=(const_iterator p_it) { - return !(*this == p_it); - } - - - private: - const Map* map; - KeyIt it; - }; - - /** Returns the begin const_iterator of the map. - */ - const_iterator begin() const { - return const_iterator(*this, KeyIt(*getGraph())); - } - - /** Returns the end const_iterator of the map. - */ - const_iterator end() const { - return const_iterator(*this, INVALID); - } - - private: - - void allocate_memory() { - int max_id = -1; - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - int id = getGraph()->id(it); - if (id > max_id) { - max_id = id; - } - } - if (max_id == -1) { - capacity = 0; - values = 0; - return; - } - capacity = 1; - while (capacity <= max_id) { - capacity <<= 1; - } - values = allocator.allocate(capacity); - } - int capacity; - Value* values; - Allocator allocator; - }; - }; -} - -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/deba/bin_heap.h --- a/src/work/deba/bin_heap.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -// -*- C++ -*- // - -/* FIXME: Copyright ... - * - * This implementation is heavily based on STL's heap functions and - * the similar class by Alpar Juttner in IKTA... - */ - -/****** - * - * BinHeap - * - * Ez az osztaly item-prioritas parok tarolasara alkalmas binaris kupacot - * valosit meg. - * A kupacban legfolul mindig az a par talalhato, amiben a prioritas a - * legkisebb. (Gondolj a Dijkstra pont-tavolsag kupacara; igazabol ahhoz - * lett keszitve...) - * - * Megjegyzes: a kupacos temakorokben a prioritast kulcsnak szoktak nevezni, - * de mivel ez zavaro tud lenni a property-map-es kulcs-ertek szohasznalata - * miatt, megprobaltunk valami semleges elnevezeseket kitalalni. - * - * A hasznalatahoz szukseg van egy irhato/olvashato property_map-re, ami - * az itemekhez egy int-et tud tarolni (ezzel tudom megkeresni az illeto - * elemet a kupacban a csokkentes es hasonlo muveletekhez). - * A map-re csak referenciat tarol, ugy hogy a kupac elete folyan a map-nek - * is elnie kell. (???) - * - * Ketfele modon hasznalhato: - * Lusta mod: - * set(Item, Prio) metodussal pakolunk a kupacba, - * aztan o majd eldonti, hogy ez az elem mar benne van-e es ha igen, akkor - * csokkentettunk-e rajta, vagy noveltunk. - * Ehhez nagyon fontos, hogy az atadott property map inicializalva legyen - * minden szobajovo kulcs ertekre, -1 -es ertekkel! - * Es ilyen esetben a kulcsokrol lekerdezheto az allapotuk a state metodussal: - * (nem jart meg a kupacban PRE_HEAP=-1, epp a kupacban van IN_HEAP=0, - * mar kikerult a kupacbol POST_HEAP=-2). - * Szoval ebben a modban a kupac nagyjabol hasznalhato property_map-kent, csak - * meg meg tudja mondani a "legkisebb" prioritasu elemet. De csak nagyjabol, - * hiszen a kupacbol kikerult elemeknek elvesz az ertekuk... - * - * Kozvetlen mod: - * push(Item, Prio) metodussal belerakunk a kupacba (ha az illeto kulcs mar - * benn volt, akkor gaz). - * increase/decrease(Item i, Prio new_prio) metodusokkal lehet - * novelni/csokkenteni az illeto elemhez tartozo prioritast. (Ha nem volt - * megbenne a kupacban az illeto elem, vagy nem abba az iranyba valtoztattad - * az erteket, amerre mondtad -- gaz). - * - * Termeszetesen a fenti ket modot ertelemszeruen lehet keverni. - * Ja es mindig nagyon gaz, ha belepiszkalsz a map-be, amit a kupac - * hasznal. :-)) - * - * - * Bocs, most faradt vagyok, majd egyszer leforditom. (Misi) - * - */ - - -#ifndef LEMON_BIN_HEAP_H -#define LEMON_BIN_HEAP_H - -///\ingroup auxdat -///\file -///\brief Binary Heap implementation. - -#include -#include -#include - -namespace lemon { - - /// \addtogroup auxdat - /// @{ - - /// A Binary Heap implementation. - template > - class BinHeap { - - public: - typedef Item ItemType; - // FIXME: stl-ben nem ezt hivjak value_type -nak, hanem a kovetkezot... - typedef Prio PrioType; - typedef std::pair PairType; - typedef ItemIntMap ItemIntMapType; - typedef Compare PrioCompare; - - /** - * Each Item element have a state associated to it. It may be "in heap", - * "pre heap" or "post heap". The later two are indifferent from the - * heap's point of view, but may be useful to the user. - * - * The ItemIntMap _should_ be initialized in such way, that it maps - * PRE_HEAP (-1) to any element to be put in the heap... - */ - ///\todo it is used nowhere - /// - enum state_enum { - IN_HEAP = 0, - PRE_HEAP = -1, - POST_HEAP = -2 - }; - - private: - std::vector data; - Compare comp; - // FIXME: jo ez igy??? - ItemIntMap &iim; - - public: - BinHeap(ItemIntMap &_iim) : iim(_iim) {} - BinHeap(ItemIntMap &_iim, const Compare &_comp) : comp(_comp), iim(_iim) {} - - - int size() const { return data.size(); } - bool empty() const { return data.empty(); } - - private: - static int parent(int i) { return (i-1)/2; } - static int second_child(int i) { return 2*i+2; } - bool less(const PairType &p1, const PairType &p2) const { - return comp(p1.second, p2.second); - } - - int bubble_up(int hole, PairType p); - int bubble_down(int hole, PairType p, int length); - - void move(const PairType &p, int i) { - data[i] = p; - iim.set(p.first, i); - } - - void rmidx(int h) { - int n = data.size()-1; - if( h>=0 && h<=n ) { - iim.set(data[h].first, POST_HEAP); - if ( h=0 ) - s=0; - return state_enum(s); - } - - }; // class BinHeap - - - template - int BinHeap::bubble_up(int hole, PairType p) { - int par = parent(hole); - while( hole>0 && less(p,data[par]) ) { - move(data[par],hole); - hole = par; - par = parent(hole); - } - move(p, hole); - return hole; - } - - template - int BinHeap::bubble_down(int hole, PairType p, int length) { - int child = second_child(hole); - while(child < length) { - if( less(data[child-1], data[child]) ) { - --child; - } - if( !less(data[child], p) ) - goto ok; - move(data[child], hole); - hole = child; - child = second_child(hole); - } - child--; - if( child -#include - -namespace lemon { - -/// \addtogroup galgs -/// @{ - - ///%Dijkstra algorithm class. - - ///This class provides an efficient implementation of %Dijkstra algorithm. - ///The edge lengths are passed to the algorithm using a - ///\ref ReadMap "readable map", - ///so it is easy to change it to any kind of length. - /// - ///The type of the length is determined by the \c Value of the length map. - /// - ///It is also possible to change the underlying priority heap. - /// - ///\param GR The graph type the algorithm runs on. - ///\param LM This read-only - ///EdgeMap - ///determines the - ///lengths of the edges. It is read once for each edge, so the map - ///may involve in relatively time consuming process to compute the edge - ///length if it is necessary. The default map type is - ///\ref Graph::EdgeMap "Graph::EdgeMap" - ///\param Heap The heap type used by the %Dijkstra - ///algorithm. The default - ///is using \ref BinHeap "binary heap". - /// - ///\author Jacint Szabo and Alpar Juttner - ///\todo We need a typedef-names should be standardized. (-: - -#ifdef DOXYGEN - template -#else - template , - template class Heap = BinHeap > -#endif - class Dijkstra{ - public: - ///The type of the underlying graph. - typedef GR Graph; - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - - ///The type of the length of the edges. - typedef typename LM::Value Value; - ///The type of the map that stores the edge lengths. - typedef LM LengthMap; - ///\brief The type of the map that stores the last - ///edges of the shortest paths. - typedef typename Graph::template NodeMap PredMap; - ///\brief The type of the map that stores the last but one - ///nodes of the shortest paths. - typedef typename Graph::template NodeMap PredNodeMap; - ///The type of the map that stores the dists of the nodes. - typedef typename Graph::template NodeMap DistMap; - - private: - const Graph *G; - const LM *length; - // bool local_length; - PredMap *predecessor; - bool local_predecessor; - PredNodeMap *pred_node; - bool local_pred_node; - DistMap *distance; - bool local_distance; - - ///Initialize maps - - ///\todo Error if \c G or are \c NULL. What about \c length? - ///\todo Better memory allocation (instead of new). - void init_maps() - { -// if(!length) { -// local_length = true; -// length = new LM(G); -// } - if(!predecessor) { - local_predecessor = true; - predecessor = new PredMap(*G); - } - if(!pred_node) { - local_pred_node = true; - pred_node = new PredNodeMap(*G); - } - if(!distance) { - local_distance = true; - distance = new DistMap(*G); - } - } - - public : - - Dijkstra(const Graph& _G, const LM& _length) : - G(&_G), length(&_length), - predecessor(NULL), pred_node(NULL), distance(NULL), - local_predecessor(false), local_pred_node(false), local_distance(false) - { } - - ~Dijkstra() - { - // if(local_length) delete length; - if(local_predecessor) delete predecessor; - if(local_pred_node) delete pred_node; - if(local_distance) delete distance; - } - - ///Sets the graph the algorithm will run on. - - ///Sets the graph the algorithm will run on. - ///\return (*this) - Dijkstra &setGraph(const Graph &_G) - { - G = &_G; - return *this; - } - ///Sets the length map. - - ///Sets the length map. - ///\return (*this) - Dijkstra &setLengthMap(const LM &m) - { -// if(local_length) { -// delete length; -// local_length=false; -// } - length = &m; - return *this; - } - - ///Sets the map storing the predecessor edges. - - ///Sets the map storing the predecessor edges. - ///If you don't use this function before calling \ref run(), - ///it will allocate one. The destuctor deallocates this - ///automatically allocated map, of course. - ///\return (*this) - Dijkstra &setPredMap(PredMap &m) - { - if(local_predecessor) { - delete predecessor; - local_predecessor=false; - } - predecessor = &m; - return *this; - } - - ///Sets the map storing the predecessor nodes. - - ///Sets the map storing the predecessor nodes. - ///If you don't use this function before calling \ref run(), - ///it will allocate one. The destuctor deallocates this - ///automatically allocated map, of course. - ///\return (*this) - Dijkstra &setPredNodeMap(PredNodeMap &m) - { - if(local_pred_node) { - delete pred_node; - local_pred_node=false; - } - pred_node = &m; - return *this; - } - - ///Sets the map storing the distances calculated by the algorithm. - - ///Sets the map storing the distances calculated by the algorithm. - ///If you don't use this function before calling \ref run(), - ///it will allocate one. The destuctor deallocates this - ///automatically allocated map, of course. - ///\return (*this) - Dijkstra &setDistMap(DistMap &m) - { - if(local_distance) { - delete distance; - local_distance=false; - } - distance = &m; - return *this; - } - - ///Runs %Dijkstra algorithm from node \c s. - - ///This method runs the %Dijkstra algorithm from a root node \c s - ///in order to - ///compute the - ///shortest path to each node. The algorithm computes - ///- The shortest path tree. - ///- The distance of each node from the root. - - void run(Node s) { - - init_maps(); - - for ( NodeIt u(*G) ; G->valid(u) ; G->next(u) ) { - predecessor->set(u,INVALID); - pred_node->set(u,INVALID); - } - - typename GR::template NodeMap heap_map(*G,-1); - - typedef Heap, - std::less > - HeapType; - - HeapType heap(heap_map); - - heap.push(s,0); - - while ( !heap.empty() ) { - - Node v=heap.top(); - Value oldvalue=heap[v]; - heap.pop(); - distance->set(v, oldvalue); - - - for(OutEdgeIt e(*G,v); G->valid(e); G->next(e)) { - Node w=G->bNode(e); - - switch(heap.state(w)) { - case HeapType::PRE_HEAP: - heap.push(w,oldvalue+(*length)[e]); - predecessor->set(w,e); - pred_node->set(w,v); - break; - case HeapType::IN_HEAP: - if ( oldvalue+(*length)[e] < heap[w] ) { - heap.decrease(w, oldvalue+(*length)[e]); - predecessor->set(w,e); - pred_node->set(w,v); - } - break; - case HeapType::POST_HEAP: - break; - } - } - } - } - - ///The distance of a node from the root. - - ///Returns the distance of a node from the root. - ///\pre \ref run() must be called before using this function. - ///\warning If node \c v in unreachable from the root the return value - ///of this funcion is undefined. - Value dist(Node v) const { return (*distance)[v]; } - - ///Returns the 'previous edge' of the shortest path tree. - - ///For a node \c v it returns the 'previous edge' of the shortest path tree, - ///i.e. it returns the last edge from a shortest path from the root to \c - ///v. It is \ref INVALID - ///if \c v is unreachable from the root or if \c v=s. The - ///shortest path tree used here is equal to the shortest path tree used in - ///\ref predNode(Node v). \pre \ref run() must be called before using - ///this function. - Edge pred(Node v) const { return (*predecessor)[v]; } - - ///Returns the 'previous node' of the shortest path tree. - - ///For a node \c v it returns the 'previous node' of the shortest path tree, - ///i.e. it returns the last but one node from a shortest path from the - ///root to \c /v. It is INVALID if \c v is unreachable from the root or if - ///\c v=s. The shortest path tree used here is equal to the shortest path - ///tree used in \ref pred(Node v). \pre \ref run() must be called before - ///using this function. - Node predNode(Node v) const { return (*pred_node)[v]; } - - ///Returns a reference to the NodeMap of distances. - - ///Returns a reference to the NodeMap of distances. \pre \ref run() must - ///be called before using this function. - const DistMap &distMap() const { return *distance;} - - ///Returns a reference to the shortest path tree map. - - ///Returns a reference to the NodeMap of the edges of the - ///shortest path tree. - ///\pre \ref run() must be called before using this function. - const PredMap &predMap() const { return *predecessor;} - - ///Returns a reference to the map of nodes of shortest paths. - - ///Returns a reference to the NodeMap of the last but one nodes of the - ///shortest path tree. - ///\pre \ref run() must be called before using this function. - const PredNodeMap &predNodeMap() const { return *pred_node;} - - ///Checks if a node is reachable from the root. - - ///Returns \c true if \c v is reachable from the root. - ///\warning the root node is reported to be unreached! - ///\todo Is this what we want? - ///\pre \ref run() must be called before using this function. - /// - bool reached(Node v) { return G->valid((*predecessor)[v]); } - - }; - - - // ********************************************************************** - // IMPLEMENTATIONS - // ********************************************************************** - -/// @} - -} //END OF NAMESPACE LEMON - -#endif - - diff -r ee5959aa4410 -r c280de819a73 src/work/deba/dijkstra_test_generator.cpp --- a/src/work/deba/dijkstra_test_generator.cpp Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,41 +0,0 @@ -#include -#include - -#include -#include - -#include -#include - -using namespace lemon; -using namespace std; - -int main(int argc, const char *argv[]) { - typedef SmartGraph Graph; - typedef Graph::Node Node; - typedef Graph::Edge Edge; - - typedef Graph::EdgeMap CapacityMap; - - const int n = argc > 1 ? atoi(argv[1]) : 1000; - const int e = argc > 2 ? atoi(argv[2]) : (int)(n * log(n)); - const int m = argc > 3 ? atoi(argv[3]) : 100; - - Graph graph; - CapacityMap capacity(graph); - vector nodes; - - for (int i = 0; i < n; ++i) { - nodes.push_back(graph.addNode()); - } - for (int i = 0; i < e; ++i) { - int s = (int)(n * (double)rand() / (RAND_MAX + 1.0)); - int t = (int)(n * (double)rand() / (RAND_MAX + 1.0)); - int c = (int)(m * (double)rand() / (RAND_MAX + 1.0)); - Edge edge = graph.addEdge(nodes[s], nodes[t]); - capacity[edge] = c; - } - int start = (int)(n * (double)rand() / (RAND_MAX + 1.0)); - writeGraph(cout, graph, capacity, nodes[start]); - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/deba/extended_pair.h --- a/src/work/deba/extended_pair.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,65 +0,0 @@ -// -*- c++ -*- -#ifndef EXTENDED_PAIR_H -#define EXTENDED_PAIR_H - -template -struct extended_pair { - typedef T1 first_type; - typedef T2 second_type; - - extended_pair() : first(), second() {} - - extended_pair(A1 f, A2 s) : first(f), second(s) {} - - template - extended_pair(const Pair& pair) : first(pair.first), second(pair.second) {} - - T1 first; - T2 second; -}; - -template -bool operator==(const extended_pair& left, - const extended_pair& right) { - return left.first == right.first && left.second == right.second; -} - -template -bool operator!=(const extended_pair& left, - const extended_pair& right) { - return !(left == right); -} - -template -bool operator<(const extended_pair& left, - const extended_pair& right) { - if (left.first == right.first) return left.second == right.second; - return left.first < right.first; -} - -template -bool operator>(const extended_pair& left, - const extended_pair& right) { - return right < left; -} - -template -bool operator<=(const extended_pair& left, - const extended_pair& right) { - return !(right > left); -} - -template -bool operator>=(const extended_pair& left, - const extended_pair& right) { - return !(right < left); -} - - -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/deba/graph_io_test.cc --- a/src/work/deba/graph_io_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ -#include - -#include - -#include -#include - -#include -#include - -using namespace std; -using namespace lemon; - -int main() { - ifstream input("test.lgf"); - SmartGraph graph; - GraphReader reader(input, graph); - - SmartGraph::NodeMap id(graph); - reader.addNodeMap("id", id); - - SmartGraph::NodeMap cost(graph); - reader.addNodeMap("cost", cost); - - SmartGraph::NodeMap color(graph); - reader.addNodeMap("color", color); - - SmartGraph::NodeMap description(graph); - reader.addNodeMap("description", description); - - SmartGraph::EdgeMap mmap(graph); - reader.addEdgeMap("mmap", mmap); - - reader.skipEdgeMap("description"); - - SmartGraph::Node source; - reader.addNode("source", source); - - SmartGraph::Edge newedge; - reader.addEdge("newedge", newedge); - - try { - reader.run(); - } catch (IOError& e) { - cerr << e.what() << endl; - } catch (Exception e) { - cerr << e.what() << endl; - } - - for (SmartGraph::NodeIt it(graph); it != INVALID; ++it) { - cout << cost[it] << ' ' << color[it] << ' ' << description[it] << endl; - } - - for (SmartGraph::EdgeIt it(graph); it != INVALID; ++it) { - cout << mmap[it] << ' ' << id[graph.source(it)] << ' ' << - id[graph.target(it)] << endl; - } - - cout << id[source] << ' ' << cost[source] << ' ' << - color[source] << ' ' << description[source] << endl; - cout << mmap[newedge] << ' ' << id[graph.source(newedge)] << - ' ' << id[graph.target(newedge)] << endl; - - ofstream output("copy.lgf"); - GraphWriter writer(output, graph); - - DescriptorMap > - node_ids(graph); - - writer.addNodeMap("id", node_ids); - writer.addNodeMap("format", description); - - IdMap edge_ids(graph); - - writer.addEdgeMap("id", edge_ids); - writer.addEdgeMap("chars", mmap); - - writer.addNode("source", node_ids.inverse()[3]); - // writer.addEdge("elek", edge_ids.inverse()[6]); - writer.run(); - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/deba/invalid.h --- a/src/work/deba/invalid.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -// -*- mode:C++ -*- - -#ifndef LEMON_INVALID_H -#define LEMON_INVALID_H - -///\file -///\brief Definition of INVALID. - -namespace lemon { - - /// Dummy type to make it easier to make invalid iterators. - - /// See \ref INVALID, how to use it. - - struct Invalid { - public: - bool operator==(Invalid) { return true; } - bool operator!=(Invalid) { return false; } - bool operator< (Invalid) { return false; } - }; - - /// Invalid iterators. - - /// \ref Invalid is a global type that converts to each iterator - /// in such a way that the value of the target iterator will be invalid. - - // It is also used to convert the \c INVALID constant to the - // node iterator that makes is possible to write - - //extern Invalid INVALID; - - //const Invalid &INVALID = *(Invalid *)0; - const Invalid INVALID = Invalid(); - -} //namespace lemon - -#endif - diff -r ee5959aa4410 -r c280de819a73 src/work/deba/iterator_test.cpp --- a/src/work/deba/iterator_test.cpp Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace std; -using namespace lemon; - -template -struct unary_compose { - typedef typename G::argument_type argument_type; - typedef typename F::result_type result_type; - - unary_compose(const F& _f, const G& _g) : f(_f), g(_g) {} - - result_type operator()(const argument_type& x) { - return f(g(x)); - } - -private: - F f; - G g; -}; - -template -unary_compose compose1(const F& f, const G& g) { - return unary_compose(f, g); -} - - - - -template -struct Second { - typedef T argument_type; - typedef typename T::second_type result_type; - - typename T::second_type operator()(const T& t) const { - return t.second; - } -}; - -template -struct First { - typedef T argument_type; - typedef typename T::first_type result_type; - typename T::first_type operator()(const T& t) const { - return t.first; - } -}; - - -int main() { - - typedef ListGraph Graph; - - typedef Graph::Edge Edge; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::NodeIt NodeIt; - typedef Graph::EdgeMap LengthMap; - - typedef IdMap EdgeIdMap; - - Graph graph; - LengthMap length(graph); - - readGraph(std::cin, graph, length); - - const LengthMap& constLength = length; - - copy(length.valueSet().begin(), length.valueSet().end(), - ostream_iterator(cout, " ")); - cout << endl; - - - copy(constLength.valueSet().begin(), constLength.valueSet().end(), - ostream_iterator(cout, " ")); - cout << endl; - - - transform(constLength.keySet().begin(), constLength.keySet().end(), - ostream_iterator(cout, " "), - MapFunctor(EdgeIdMap(graph))); - cout << endl; - - - transform(constLength.mapSet().begin(), constLength.mapSet().end(), - ostream_iterator(cout, " "), - Second()); - cout << endl; - - transform(constLength.mapSet().begin(), constLength.mapSet().end(), - ostream_iterator(cout, " "), - compose1(MapFunctor(EdgeIdMap(graph)), - First() )); - cout << endl; - - transform(length.mapSet().begin(), length.mapSet().end(), - ostream_iterator(cout, " "), - Second()); - cout << endl; - - transform(length.mapSet().begin(), length.mapSet().end(), - ostream_iterator(cout, " "), - compose1(MapFunctor(EdgeIdMap(graph)), - First() )); - cout << endl; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/deba/list_graph.h --- a/src/work/deba/list_graph.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,399 +0,0 @@ -// -*- mode:C++ -*- - -#ifndef LEMON_LIST_GRAPH_H -#define LEMON_LIST_GRAPH_H - -///\ingroup graphs -///\file -///\brief ListGraph, SymListGraph, NodeSet and EdgeSet classes. - -#include -#include - -#include "invalid.h" - -#include "array_map_factory.h" -#include "map_registry.h" - -#include "map_defines.h" - -namespace lemon { - -/// \addtogroup graphs -/// @{ - - ///A list graph class. - - ///This is a simple and fast erasable graph implementation. - /// - ///It conforms to the graph interface documented under - ///the description of \ref Graph. - ///\sa \ref Graph. - class ListGraph { - - //Nodes are double linked. - //The free nodes are only single linked using the "next" field. - struct NodeT - { - int first_in,first_out; - int prev, next; - // NodeT() {} - }; - //Edges are double linked. - //The free edges are only single linked using the "next_in" field. - struct EdgeT - { - int target, source; - int prev_in, prev_out; - int next_in, next_out; - //FIXME: is this necessary? - // EdgeT() : next_in(-1), next_out(-1) prev_in(-1), prev_out(-1) {} - }; - - std::vector nodes; - //The first node - int first_node; - //The first free node - int first_free_node; - std::vector edges; - //The first free edge - int first_free_edge; - - protected: - - public: - - class Node; - class Edge; - - typedef ListGraph Graph; - - public: - - class NodeIt; - class EdgeIt; - class OutEdgeIt; - class InEdgeIt; - - CREATE_MAP_REGISTRIES; - CREATE_MAPS(ArrayMapFactory); - public: - - ListGraph() : nodes(), first_node(-1), - first_free_node(-1), edges(), first_free_edge(-1) {} - ListGraph(const ListGraph &_g) : nodes(_g.nodes), first_node(_g.first_node), - first_free_node(_g.first_free_node), - edges(_g.edges), - first_free_edge(_g.first_free_edge) {} - - - int nodeNum() const { return nodes.size(); } //FIXME: What is this? - int edgeNum() const { return edges.size(); } //FIXME: What is this? - - ///Set the expected number of edges - - ///With this function, it is possible to set the expected number of edges. - ///The use of this fasten the building of the graph and makes - ///it possible to avoid the superfluous memory allocation. - void reserveEdge(int n) { edges.reserve(n); }; - - ///\bug This function does something different than - ///its name would suggests... - int maxNodeId() const { return nodes.size(); } //FIXME: What is this? - ///\bug This function does something different than - ///its name would suggests... - int maxEdgeId() const { return edges.size(); } //FIXME: What is this? - - Node source(Edge e) const { return edges[e.n].source; } - Node target(Edge e) const { return edges[e.n].target; } - - Node aNode(OutEdgeIt e) const { return edges[e.n].source; } - Node aNode(InEdgeIt e) const { return edges[e.n].target; } - - Node bNode(OutEdgeIt e) const { return edges[e.n].target; } - Node bNode(InEdgeIt e) const { return edges[e.n].source; } - - NodeIt& first(NodeIt& v) const { - v=NodeIt(*this); return v; } - EdgeIt& first(EdgeIt& e) const { - e=EdgeIt(*this); return e; } - OutEdgeIt& first(OutEdgeIt& e, const Node v) const { - e=OutEdgeIt(*this,v); return e; } - InEdgeIt& first(InEdgeIt& e, const Node v) const { - e=InEdgeIt(*this,v); return e; } - -// template< typename It > -// It first() const { It e; first(e); return e; } - -// template< typename It > -// It first(Node v) const { It e; first(e,v); return e; } - - bool valid(Edge e) const { return e.n!=-1; } - bool valid(Node n) const { return n.n!=-1; } - - void setInvalid(Edge &e) { e.n=-1; } - void setInvalid(Node &n) { n.n=-1; } - - template It getNext(It it) const - { It tmp(it); return next(tmp); } - - NodeIt& next(NodeIt& it) const { - it.n=nodes[it.n].next; - return it; - } - OutEdgeIt& next(OutEdgeIt& it) const - { it.n=edges[it.n].next_out; return it; } - InEdgeIt& next(InEdgeIt& it) const - { it.n=edges[it.n].next_in; return it; } - EdgeIt& next(EdgeIt& it) const { - if(edges[it.n].next_in!=-1) { - it.n=edges[it.n].next_in; - } - else { - int n; - for(n=nodes[edges[it.n].target].next; - n!=-1 && nodes[n].first_in == -1; - n = nodes[n].next) ; - it.n = (n==-1)?-1:nodes[n].first_in; - } - return it; - } - - int id(Node v) const { return v.n; } - int id(Edge e) const { return e.n; } - - /// Adds a new node to the graph. - - /// \todo It adds the nodes in a reversed order. - /// (i.e. the lastly added node becomes the first.) - Node addNode() { - int n; - - if(first_free_node==-1) - { - n = nodes.size(); - nodes.push_back(NodeT()); - } - else { - n = first_free_node; - first_free_node = nodes[n].next; - } - - nodes[n].next = first_node; - if(first_node != -1) nodes[first_node].prev = n; - first_node = n; - nodes[n].prev = -1; - - nodes[n].first_in = nodes[n].first_out = -1; - - Node nn; nn.n=n; - - //Update dynamic maps - node_maps.add(nn); - - return nn; - } - - Edge addEdge(Node u, Node v) { - int n; - - if(first_free_edge==-1) - { - n = edges.size(); - edges.push_back(EdgeT()); - } - else { - n = first_free_edge; - first_free_edge = edges[n].next_in; - } - - edges[n].source = u.n; edges[n].target = v.n; - - edges[n].next_out = nodes[u.n].first_out; - if(nodes[u.n].first_out != -1) edges[nodes[u.n].first_out].prev_out = n; - edges[n].next_in = nodes[v.n].first_in; - if(nodes[v.n].first_in != -1) edges[nodes[v.n].first_in].prev_in = n; - edges[n].prev_in = edges[n].prev_out = -1; - - nodes[u.n].first_out = nodes[v.n].first_in = n; - - Edge e; e.n=n; - - //Update dynamic maps - edge_maps.add(e); - - return e; - } - - private: - void eraseEdge(int n) { - - if(edges[n].next_in!=-1) - edges[edges[n].next_in].prev_in = edges[n].prev_in; - if(edges[n].prev_in!=-1) - edges[edges[n].prev_in].next_in = edges[n].next_in; - else nodes[edges[n].target].first_in = edges[n].next_in; - - if(edges[n].next_out!=-1) - edges[edges[n].next_out].prev_out = edges[n].prev_out; - if(edges[n].prev_out!=-1) - edges[edges[n].prev_out].next_out = edges[n].next_out; - else nodes[edges[n].source].first_out = edges[n].next_out; - - edges[n].next_in = first_free_edge; - first_free_edge = n; - - //Update dynamic maps - Edge e; e.n=n; - } - - public: - - void erase(Node nn) { - int n=nn.n; - - int m; - while((m=nodes[n].first_in)!=-1) eraseEdge(m); - while((m=nodes[n].first_out)!=-1) eraseEdge(m); - - if(nodes[n].next != -1) nodes[nodes[n].next].prev = nodes[n].prev; - if(nodes[n].prev != -1) nodes[nodes[n].prev].next = nodes[n].next; - else first_node = nodes[n].next; - - nodes[n].next = first_free_node; - first_free_node = n; - - //Update dynamic maps - node_maps.erase(nn); - } - - void erase(Edge e) { - edge_maps.erase(e); - eraseEdge(e.n); - } - - ///\bug Dynamic maps must be updated! - /// - void clear() { - nodes.clear();edges.clear(); - first_node=first_free_node=first_free_edge=-1; - } - - class Node { - friend class ListGraph; - template friend class NodeMap; - - friend class Edge; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class SymEdge; - - protected: - int n; - friend int ListGraph::id(Node v) const; - Node(int nn) {n=nn;} - public: - Node() {} - Node (Invalid) { n=-1; } - bool operator==(const Node i) const {return n==i.n;} - bool operator!=(const Node i) const {return n!=i.n;} - bool operator<(const Node i) const {return n NodeIt. - NodeIt(const ListGraph& G, const Node &n) : Node(n) { } - }; - - class Edge { - friend class ListGraph; - template friend class EdgeMap; - - //template friend class SymListGraph::SymEdgeMap; - //friend Edge SymListGraph::opposite(Edge) const; - - friend class Node; - friend class NodeIt; - protected: - int n; - friend int ListGraph::id(Edge e) const; - - Edge(int nn) {n=nn;} - public: - Edge() { } - Edge (Invalid) { n=-1; } - bool operator==(const Edge i) const {return n==i.n;} - bool operator!=(const Edge i) const {return n!=i.n;} - bool operator<(const Edge i) const {return n -#include -#include "list_graph.h" - -using namespace std; -using namespace lemon; - - - -int main() { - ListGraph g; - for (int i = 0; i < 10; ++i) { - ListGraph::Node node = g.addNode(); - } - ListGraph::NodeMap map(g, 10); - for (int i = 0; i < 10; ++i) { - ListGraph::Node node = g.addNode(); - map[node] = rand()%100; - } - for (ListGraph::NodeIt it(g); g.valid(it); g.next(it)) { - cout << map[it] << endl; - } - ListGraph::NodeMap::iterator pit; - for (pit = map.begin(); pit != map.end(); ++pit) { - cout << g.id(pit->first) << ' ' << pit->second << endl; - (*pit).second = g.id(pit->first); - cout << g.id((*pit).first) << ' ' << (*pit).second << endl; - } - const ListGraph::NodeMap const_map = map; - ListGraph::NodeMap::const_iterator cit; - for (cit = const_map.begin(); cit != const_map.end(); ++cit) { - cerr << g.id(cit->first) << ' ' << cit->second << endl; - cerr << g.id((*cit).first) << ' ' << (*cit).second << endl; - } - return 0; -} - diff -r ee5959aa4410 -r c280de819a73 src/work/deba/map_defines.h --- a/src/work/deba/map_defines.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102 +0,0 @@ -// -*- c++ -*- -#ifndef MAP_DEFINES_H -#define MAP_DEFINES_H - -/** Creates the EdgeMapRegistry type an declare a mutable instance - * named edge_maps. - */ -#define CREATE_EDGE_MAP_REGISTRY \ -typedef MapRegistry EdgeMapRegistry; \ -mutable EdgeMapRegistry edge_maps; - -/** Creates the NodeMapRegistry type an declare a mutable instance - * named node_maps. - */ -#define CREATE_NODE_MAP_REGISTRY \ -typedef MapRegistry NodeMapRegistry; \ -mutable NodeMapRegistry node_maps; - -/** Creates both map registries. - */ -#define CREATE_MAP_REGISTRIES \ -CREATE_NODE_MAP_REGISTRY \ -CREATE_EDGE_MAP_REGISTRY - -/** Creates a map a concrete factory type from a template map - * factory to use as node map factory. - */ -#define CREATE_NODE_MAP_FACTORY(TemplateFactory) \ -typedef TemplateFactory NodeMapFactory; - -/** Creates a map a concrete factory type from a template map - * factory to use as edge map factory. - */ -#define CREATE_EDGE_MAP_FACTORY(TemplateFactory) \ -typedef TemplateFactory EdgeMapFactory; - -/** Creates both map factories. - */ -#define CREATE_MAP_FACTORIES(TemplateFactory) \ -CREATE_NODE_MAP_FACTORY(TemplateFactory) \ -CREATE_EDGE_MAP_FACTORY(TemplateFactory) - -/** Import a map from a concrete map factory. The import method is - * an overloading of the map type. - * The reason to use these macro is that the c++ does not support - * the template typedefs. If a future release of the c++ - * supports this feature it should be fixed. - */ -#define IMPORT_NODE_MAP(Factory) \ -template \ -class NodeMap : public Factory::Map { \ -public: \ -NodeMap() {} \ -NodeMap(const Graph& g) : Factory::Map(&g, &(g.node_maps)) {} \ -NodeMap(const Graph& g, const V& v) : Factory::Map(g, g.node_maps, v) {} \ -NodeMap(const NodeMap& copy) \ - : Factory::Map(static_cast&>(copy)) {} \ -template NodeMap(const CMap& copy) : Factory::Map(copy) {} \ -NodeMap& operator=(const NodeMap& copy) { \ - this->Factory::Map::operator=(static_cast&>(copy)); \ - return *this; \ -} \ -template NodeMap& operator=(const CMap& copy) { \ - this->Factory::Map::operator=(static_cast&>(copy));\ - return *this; \ -} \ -}; - -/** Import a map from a concrete map factory. The import method is - * an overloading of the map type. - * The reason to use these macro is that the c++ does not support - * the template typedefs. If a future release of the c++ - * supports this feature it should be fixed. - */ -#define IMPORT_EDGE_MAP(Factory) \ -template \ -class EdgeMap : public Factory::Map { \ -public: \ -EdgeMap() {} \ -EdgeMap(const Graph& g) : Factory::Map(g, g.edge_maps) {} \ -EdgeMap(const Graph& g, const V& v) : Factory::Map(g, g.node_maps, v) {} \ -EdgeMap(const EdgeMap& copy) \ - : Factory::Map(static_cast&>(copy)) {} \ -template EdgeMap(const CMap& copy) : Factory::Map(copy) {} \ -EdgeMap& operator=(const EdgeMap& copy) { \ - this->Factory::Map::operator=(static_cast&>(copy)); \ - return *this; \ -} \ -template EdgeMap& operator=(const CMap& copy) { \ - this->Factory::Map::operator=(static_cast&>(copy));\ - return *this; \ -} \ -}; - -/** This macro creates both map factories and imports both maps. - */ -#define CREATE_MAPS(TemplateFactory) \ -CREATE_MAP_FACTORIES(TemplateFactory) \ -IMPORT_NODE_MAP(NodeMapFactory) \ -IMPORT_EDGE_MAP(EdgeMapFactory) - -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/deba/map_registry.h --- a/src/work/deba/map_registry.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,246 +0,0 @@ -#ifndef MAP_REGISTRY_H -#define MAP_REGISTRY_H - -#include - -using namespace std; - -namespace lemon { - -/** - * Registry class to register edge or node maps into the graph. The - * registry helps you to implement an observer pattern. If you add - * or erase an edge or node you must notify all the maps about the - * event. -*/ - template - class MapRegistry { - public: - typedef G Graph; - typedef K Key; - typedef KIt KeyIt; - - - - /** - * MapBase is the base class of the registered maps. - * It defines the core modification operations on the maps and - * implements some helper functions. - */ - class MapBase { - public: - typedef G Graph; - typedef MapRegistry Registry; - typedef K Key; - typedef KIt KeyIt; - - friend class Registry; - - /** - * Default constructor for MapBase. - */ - - MapBase() : graph(0), registry(0) {} - - /** - * Simple constructor to register into a graph registry. - */ - - MapBase(const Graph& g, Registry& r) : graph(&g), registry(0) { - r.attach(*this); - } - - /** - * Copy constructor to register into the registry. - */ - - MapBase(const MapBase& copy) : registry(0), graph(copy.graph) { - if (copy.registry) { - copy.registry->attach(*this); - } - } - - /** - * Assign operator. - */ - - const MapBase& operator=(const MapBase& copy) { - if (registry) { - registry->detach(*this); - } - graph = copy.graph; - if (copy.registry) { - copy.registry->attach(*this); - } - } - - - /** - * Destructor. - */ - - virtual ~MapBase() { - if (registry) { - registry->detach(*this); - } - } - - /* - * Returns the graph that the map belongs to. - */ - - const Graph* getGraph() const { return graph; } - - protected: - - const Graph* graph; - Registry* registry; - - int registry_index; - - protected: - - /** - Helper function to implement constructors in the subclasses. - */ - - virtual void init() { - for (KeyIt it(*graph); graph->valid(it); graph->next(it)) { - add(it); - } - } - - /** - Helper function to implement the destructor in the subclasses. - */ - - virtual void destroy() { - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - erase(it); - } - } - - /** - The add member function should be overloaded in the subclasses. - \e Add extends the map with the new node. - */ - - virtual void add(const Key&) = 0; - /** - The erase member function should be overloaded in the subclasses. - \e Erase removes the node from the map. - */ - - virtual void erase(const Key&) = 0; - - /** - Exception class to throw at unsupported operation. - */ - - class NotSupportedOperationException {}; - - }; - - protected: - - /** - * The container type of the maps. - */ - typedef std::vector Container; - - /** - * The container of the registered maps. - */ - Container container; - - - public: - - /** - * Default Constructor of the MapRegistry. It creates an empty registry. - */ - MapRegistry() {} - - /** - * Copy Constructor of the MapRegistry. The new registry does not steal - * the maps from the right value. The new registry will be an empty. - */ - MapRegistry(const MapRegistry&) {} - - /** - * Assign operator. The left value does not steal the maps - * from the right value. The left value will be an empty registry. - */ - MapRegistry& operator=(const MapRegistry&) { - for (it = container.begin(); it != container.end(); ++it) { - (*it)->destroy(); - (*it)->graph = 0; - (*it)->registry = 0; - } - } - - /** - * Destructor of the MapRegistry. - */ - ~MapRegistry() { - typename Container::iterator it; - for (it = container.begin(); it != container.end(); ++it) { - (*it)->destroy(); - (*it)->registry = 0; - (*it)->graph = 0; - } - } - - - public: - - /** - * Attach a map into thr registry. If the map has been attached - * into an other registry it is detached from that automaticly. - */ - void attach(MapBase& map) { - if (map.registry) { - map.registry->detach(map); - } - container.push_back(&map); - map.registry = this; - map.registry_index = container.size()-1; - } - - /** - * Detach the map from the registry. - */ - void detach(MapBase& map) { - container.back()->registry_index = map.registry_index; - container[map.registry_index] = container.back(); - container.pop_back(); - map.registry = 0; - map.graph = 0; - } - - - /** - * Notify all the registered maps about a Key added. - */ - virtual void add(Key& key) { - typename Container::iterator it; - for (it = container.begin(); it != container.end(); ++it) { - (*it)->add(key); - } - } - - /** - * Notify all the registered maps about a Key erased. - */ - virtual void erase(Key& key) { - typename Container::iterator it; - for (it = container.begin(); it != container.end(); ++it) { - (*it)->erase(key); - } - } - - }; - -} - -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/deba/pac_map_factory.h --- a/src/work/deba/pac_map_factory.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -#ifndef PAC_MAP_FACTORY_H -#define PAC_MAP_FACTORY_H - -#include "map_base.h" - -/** - Converter class to use the standard template - libary's pair associative containers as a graph map. -*/ - -namespace lemon { - - template class PAC> - class PacMapFactory { - - - public: - - typedef G Graph; - typedef K Key; - typedef KIt KeyIt; - - template - class Map : public MapBase { - public: - typedef V Value; - - Map() {} - - Map(Graph& g, MapRegistry& r) - : MapBase(g, r) { - init(); - } - - virtual ~Map() { - destroy(); - } - - - V& operator[](const K& key) { - return container.find(key)->second; - } - - const V& operator[](const K& key) const { - return container.find(key)->second; - } - - const V& get(const K& key) const { - return container.find(key)->second; - } - - void set(const K& key, const V& value) { - container.find(key)->second = value; - } - - void add(const K& key) { - container.insert(key); - } - - void erase(const K& key) { - container.erase(key); - } - - private: - typedef PAC Container; - - Container container; - }; - - }; -} - -#endif \ No newline at end of file diff -r ee5959aa4410 -r c280de819a73 src/work/deba/reader.h --- a/src/work/deba/reader.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,135 +0,0 @@ -#include -#include - -/// Beolvaso osztaly terve: - -// beolvaso es wrappelo bazis osztaly -class MapReader { -public: - virtual void read(typename Map::Key& key, istream& is) = 0; -}; - -// a default beolvaso osztaly egy maphez -// elboldogul olyan mappel is, amelyben valamilyen specialis tipus van -template -class DefaultReader : public MapReader { -public: - typedef _Map Map; - - DefaultReader(Map& _map) : map(_map) {} - - virtual void read(typename Map::Key& key, istream& is) { - typename Map::Value val; - is >> val; - map.set(key, val); - } -private: - Map& map; -}; - -// egy adott tipusu elemet beolvas, de nem irja mapbe -template -class SkipReader : public MapReader { -public: - - virtual void read(typename Map::Key&, istream& is) { - _Type val; - is >> val; - } -}; - -// majd olyan stringeket lehet olvasni, ami idezojelek kozott van -template -class QuotedStringReader { -public: - typedef _Map Map; - - QuotedStringReader(Map& _map) : map(_map) {} - - virtual void read(typename Map::Key&, istream& is) { - char c; - is >> c; - } - -}; - - -// a beolvaso -template class _SkipReader = SkipReader > -class GraphReader { - - GraphReader(istream& _is) : is(_is) {} - - template > - void readMap(std::string& name, _Map& _map) { - readers.push_back(_Reader(_map)); - } - - template <_Type, typename _Reader = SkipReader<_Map> > - void skipMap(std::string& name) { - readers.push_back(_Reader()); - } - - void read() { - ... - vector index; - // egy sor olvasasa - for (int i = 0; i < index.size(); ++i) { - if (index[i] != -1) { - readers[index[i]].read(item, is); - } else { - _SkipReader().read(item, is); - } - } - ... - } - - -private: - istream& is; - vector readers; -}; - -// Ennek az implementacionak az elonye: -// - altalanosabban mukodik a beolvasas -// - konnyebb specialis beolvasasokat megvalositani -// - ugyanolyan tipusu maphez ket kulonbozo beolvasasi modszert is alkalmazhatunk -// - Megengedi, whitespace-t tartalmazo stringek beolvasasat is (?) - -// Hatranya -// - Ha whitespace-t hasznalunk egy mapben, de nem olvassuk ki, akkor meg kell -// hivni a skipMap fuggvenyt az aktualis tipussal /a ws-eket ezt ellenjavalhatjuk a doksiban/ - -// Fejlesztesi lehetoseg: -// A GraphReader osztalynak nem a SkipReader lenne a parametere, hanem a kovetkezo tipusu osztaly: - -class TypeReaderTraits { -public: - class DefaultSkipReader { - ... - }; - - template - class MapReader { - ... - }; - - template - class SkipReader { - ... - }; -}; - -// Ezt le lehetne cserelni peldaul DelimetedReaderTraits-re cserelni, amivel be lehetne spacekkel, vagy -// mas elvalasztojelekkel generalt file-t olvasni. - -// Kerdes -// Ugy ertelmeztem, hogy fontos az hogy kozos beolvaso interface legyen a kulonbozo -// tipusu beolvasasokhoz/file, adatbazis.../. -// Szerintem ez annyira nem fontos, mivel sem szarmaztatott viszonyban nem allnak -// a beolvaso interfacek, es annak sem latom ertelmet, hogy template parameter legyen -// a beolvaso osztaly. -// Ezert szerintem nem kell kozos interfacce! -// -// Azonban celszeru kozel azonos szintaktikat kialakitani a beolvasokhoz, -// hogy egyszeru legyen hasznalni. diff -r ee5959aa4410 -r c280de819a73 src/work/deba/test.cpp --- a/src/work/deba/test.cpp Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -#include - -using namespace std; - -#include - -using namespace lemon; -/* -struct _EmptyList { - void write() const {} -}; - -template -struct _AddNode { - typedef _Next Next; - typedef _Item Item; - - const Item item; - const Next& next; - - _AddNode(const Item& _item, const Next& _next) - : item(_item), next(_next) {} - - void write() const { - next.write(); - cout << item << ' '; - } -}; - -template -struct _Writer { - typedef _List List; - - const List list; - - _Writer(const List& _list = List()) : list(_list) {} - - - template _Writer<_AddNode > add(Item item) const { - return _Writer<_AddNode >(_AddNode(item, list)); - } - - void write() const { - list.write(); - cout << endl; - } -}; - - -typedef _Writer<> Writer; - -int main() { - Writer().add(3).add("alpha").add(4.53).write(); -} -*/ - -class A { -public: - typedef int X; - typedef True XD; -}; - -class C { -}; - - -template -class B { -public: - static const bool state = false; -}; - -template -class B<_A, typename enable_if::type> { -public: - static const bool state = true; -}; - - -int main() { - printf("%s\n", B::state ? "true" : "false"); - printf("%s\n", B::state ? "true" : "false"); - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/deba/test.lgf --- a/src/work/deba/test.lgf Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,38 +0,0 @@ -@nodeset -id cost color description mmap -1 1 green "A -> B \t: 10" a -2 2 blue "A -> B \t: 10" b -# hatalom dicsoseg "A -> B \t: 10" c -3 1 red "A -> B \t: 10" d #adjkhj -a4 2 red "A -> B \t: 10" e -5 1 green "A -> B \t: 10" f -10 1 green "A -> B \t: 10" g - # hello - bello csucsok "A -> B \t: 10" -6 2 blue "A -> B \t: 10" h -7 1 blue "A -> B \t: 10" i -8 2 red "A -> B \t: 10" j -9 1 green "A -> B \t: 10" k - -@edgeset - id weight description mmap -1 4 1 10 "A -> B \t: 101" a -3 5 5 29 "A -> B \t: 10q" b -3 4 2 92 "A -> B \t: 10a" c -2 3 6 92 "A -> B \t: 10d" d -6 5 9 49 "A -> B \t: 10c" e -10 4 3 40 "A -> B \t: 10v" f -1 3 8 84 "A -> B \t: 10g" g - # - # kajla -6 7 4 83 "A -> B \t: 10h" h -8 9 7 37 "A -> B \t: 10j" i -7 8 10 12 "A -> B \t: 10g" j - -@nodes -source 1 -target 7 - -@edges -newedge 7 - -@end diff -r ee5959aa4410 -r c280de819a73 src/work/deba/vector_map_factory.h --- a/src/work/deba/vector_map_factory.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,332 +0,0 @@ -// -*- c++ -*- -#ifndef VECTOR_MAP_H -#define VECTOR_MAP_H - -#include - -#include "extended_pair.h" - -namespace lemon { - - /** The VectorMapFactory template class is a factory class - * to create maps for the edge and nodes. This map factory - * use the std::vector to implement the container function. - * - * The template parameter is the MapRegistry that the maps - * will belong to. - */ - - template - class VectorMapFactory { - public: - - /// The graph type of the maps. - typedef typename MapRegistry::Graph Graph; - /// The key type of the maps. - typedef typename MapRegistry::Key Key; - /// The iterator to iterate on the keys. - typedef typename MapRegistry::KeyIt KeyIt; - - /// The MapBase of the Map which imlements the core regisitry function. - typedef typename MapRegistry::MapBase MapBase; - - - /** The template Map type. - */ - template - class Map : public MapBase { - public: - - /// The value type of the map. - typedef V Value; - - typedef std::vector Container; - - /** Default constructor for the map. - */ - Map() {} - - /** Graph and Registry initialized map constructor. - */ - Map(const Graph& g, MapRegistry& r) : MapBase(g, r) { - init(); - } - - /** Constructor to use default value to initialize the map. - */ - Map(const Graph& g, MapRegistry& r, const Value& v) : MapBase(g, r) { - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - int id = getGraph->id(it); - if (id >= container.size) { - container.resize(id + 1); - } - set(it, v); - } - } - - /** Constructor to copy a map of an other map type. - */ - template Map(const CMap& copy) : MapBase(copy) { - if (getGraph()) { - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - int id = getGraph->id(it); - if (id >= container.size) { - container.resize(id + 1); - } - set(it, copy[it]); - } - } - } - - /** Assign operator to copy a map an other map type. - */ - template Map& operator=(const CMap& copy) { - if (getGraph()) { - destroy(); - } - this->MapBase::operator=(copy); - if (getGraph()) { - for (KeyIt it(*getGraph()); getGraph()->valid(it); getGraph()->next(it)) { - int id = getGraph->id(it); - if (id >= container.size) { - container.resize(id + 1); - } - set(it, copy[it]); - } - } - } - - /** The destructor of the map. - */ - virtual ~Map() { - } - - /** - * The subscript operator. The map can be subscripted by the - * actual keys of the graph. - */ - typename Container::reference operator[](const Key& key) { - int id = getGraph()->id(key); - return container[id]; - } - - /** - * The const subscript operator. The map can be subscripted by the - * actual keys of the graph. - */ - typename Container::const_reference operator[](const Key& key) const { - int id = getGraph()->id(key); - return container[id]; - } - - /** Setter function of the map. Equivalent with map[key] = val. - * This is a compatibility feature with the not dereferable maps. - */ - void set(const Key& key, const Value& val) { - int id = getGraph()->id(key); - container[id] = val; - } - - /** Add a new key to the map. It called by the map registry. - */ - void add(const Key& key) { - int id = getGraph()->id(key); - if (id >= container.size()) { - container.resize(id + 1); - } - } - - /** Erease a key from the map. It called by the map registry. - */ - void erase(const Key& key) {} - - /** Compatible iterator with the stl maps' iterators. - * It iterates on pairs of a key and a value. - */ - class iterator { - friend class Map; - friend class const_iterator; - private: - - /** Private constructor to initalize the the iterators returned - * by the begin() and end(). - */ - iterator (Map& pmap, const KeyIt& pit) : map(&pmap), it(pit) {} - - public: - - /** Default constructor. - */ - iterator() {} - - typedef extended_pair Reference; - - /** Dereference operator for map. - */ - Reference operator*() { - return Reference(it, (*map)[it]); - } - - class Pointer { - friend class iterator; - private: - Reference data; - Pointer(const Key& key, Value& val) : data(key, val) {} - public: - Reference* operator->() {return &data;} - }; - - /** Arrow operator for map. - */ - Pointer operator->() { - return Pointer(it, ((*map)[it])); - } - - /** The pre increment operator of the map. - */ - iterator& operator++() { - map->getGraph()->next(it); - return *this; - } - - /** The post increment operator of the map. - */ - iterator operator++(int) { - iterator tmp(it); - map.getGraph()->next(it); - return tmp; - } - - /** The equality operator of the map. - */ - bool operator==(const_iterator p_it) { - return p_it.it == it; - } - - /** The not-equality operator of the map. - */ - bool operator!=(const_iterator p_it) { - return !(*this == p_it); - } - - - private: - Map* map; - KeyIt it; - }; - - /** Returns the begin iterator of the map. - */ - iterator begin() { - return iterator(*this, KeyIt(*getGraph())); - } - - /** Returns the end iterator of the map. - */ - iterator end() { - return iterator(*this, INVALID); - } - - class const_iterator { - friend class Map; - friend class iterator; - private: - - /** Private constructor to initalize the the iterators returned - * by the begin() and end(). - */ - const_iterator (const Map& pmap, const KeyIt& pit) - : map(&pmap), it(pit) {} - - public: - - /** Default constructor. - */ - const_iterator() {} - - /** Constructor to convert iterator to const_iterator. - */ - const_iterator(iterator p_it) : map(p_it.map), it(p_it.it) {} - - typedef extended_pair Reference; - - /** Dereference operator for map. - */ - Reference operator*() { - return Reference(it, (*map)[it]); - } - - - class Pointer { - friend class const_iterator; - private: - Reference data; - Pointer(const Key& key, const Value& val) : data(key, val) {} - public: - Reference* operator->() {return &data;} - }; - - /** Arrow operator for map. - */ - Pointer operator->() { - return Pointer(it, ((*map)[it])); - } - - /** The pre increment operator of the map. - */ - const_iterator& operator++() { - map->getGraph()->next(it); - return *this; - } - - /** The post increment operator of the map. - */ - const_iterator operator++(int) { - const_iterator tmp(it); - map->getGraph()->next(it); - return tmp; - } - - /** The equality operator of the map. - */ - bool operator==(const_iterator p_it) { - return p_it.it == it; - } - - /** The not-equality operator of the map. - */ - bool operator!=(const_iterator p_it) { - return !(*this == p_it); - } - - - private: - const Map* map; - KeyIt it; - }; - - /** Returns the begin const_iterator of the map. - */ - const_iterator begin() const { - return const_iterator(*this, KeyIt(*getGraph())); - } - - /** Returns the end const_iterator of the map. - */ - const_iterator end() const { - return const_iterator(*this, INVALID); - } - - private: - - Container container; - - }; - - }; - -} - -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/graph_concept.txt --- a/src/work/graph_concept.txt Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,189 +0,0 @@ -ETIK-OL-NOLIB-NEGRES full feature graph minimum concept. - - Regota filozunk rajta hogy hogy is kene kinezni a fent emlitett concept-nek, -most 1 egesz konkret javaslatot irnek. A fo cel, hogy lenyegeben -minden operaciot a graf vegezzen, es az iteratorok csak vmi leiro szerepet -toltsenek be. Azt is megfigyeltuk, hogy a fo technikai nehezseg, hogy a c++ -nem tud a visszateresi ertek alapjan megkulonboztetni fuggvenyeket. Ennek -megfeleloen 2 javaslatot irok most. Az egyikben a fv altal kiszamolt erteket -az egyik operandusban kapjuk vissza, a masikban egy tag-template specializacip -eredmenyekent balra adja vissza a cuccot. Nehol referencia van irva ahol nem -kell, ezen ne tessek fonnakadni. - -class Graph; - -class NodeIt; -trivialis node iterator, csak cimezni lehet vele, pl property vectort -class EachNodeIt; -node iterator a graf pontjainak bejarasara, NodeIt-e konvertalhato - -class EdgeIt; -trivialis edge iterator, csak cimezni lehet vele, pl property vectort -class EachEdgeIt; -edge iterator a graf osszes elenek bejarasara -class OutEdgeIt; -edge iterator 1 pont ki eleinek bejarasara, EdgeIt-e konvertalhato -class InEdgeIt; -edge iterator 1 pont be eleinek bejarasara, EdgeIt-e konvertalhato -class SymEdgeIt; -edge iterator 1 pont be es ki eleinek bejarasara, EdgeIt-e konvertalhato - -Az iteratorok ures konstruktorai invalid iteratort konstrualnak. - -template class NodeMap; -template class EdgeMap; - -Graph(); -default constructor - -A kovetkezo cuccokbol kell valasztani: - -NodeIt tail(const EdgeIt) const; -NodeIt head(const EdgeIt) const; - -NodeIt aNode(const OutEdgeIt) const; -NodeIt aNode(const InEdgeIt) const; -NodeIt aNode(const SymEdgeIt) const; -az out, in or sym edge iterator rogzitett pontjara ad 1 NodeIt-t - -NodeIt bNode(const OutEdgeIt) const; -NodeIt bNode(const InEdgeIt) const; -NodeIt bNode(const SymEdgeIt) const; -az out, in or sym edge iterator nem rogzitett pontjara ad 1 NodeIt-t - -EachNodeIt first() const; -EachEdgeIt first() const; -OutEdgeIt first(const NodeIt) const; -InEdgeIt first(const NodeIt) const; -SymEdgeIt first(const NodeIt) const; -EachNodeIt get(const NodeIt) const; ??? konverzio miatt -EachEdgeIt get(const EdgeIt) const; ??? konverzio miatt -OutEdgeIt get(const NodeIt, const EdgeIt) const; ??? konverzio miatt -InEdgeIt get(const NodeIt, const EdgeIt) const; ??? konverzio miatt -SymEdgeIt get(const NodeIt, const EdgeIt) const; ??? konverzio miatt - -A masik lehetoseg pedig: - -void getTail(NodeIt&, const EdgeIt) const; -void getHead(NodeIt&, const EdgeIt) const; - -void getANode(NodeIt&, const OutEdgeIt) const; -void getANode(NodeIt&, const InEdgeIt) const; -void getANode(NodeIt&, const SymEdgeIt) const; - -void getBNode(NodeIt&, const OutEdgeIt) const; -void getBNode(NodeIt&, const InEdgeIt) const; -void getBNode(NodeIt&, const SymEdgeIt) const; - -void getFirst(EachNodeIt&) const; -void getFirst(EachEdgeIt&) const; -void getFirst(OutEdgeIt&, const NodeIt) const; -void getFirst(InEdgeIt&, const NodeIt) const; -void getFirst(SymEdgeIt&, const NodeIt) const; -void get(EachNodeIt&, const NodeIt) const; ??? konverzio miatt -void get(EachEdgeIt&, const EdgeIt) const; ??? konverzio miatt -void get(OutEdgeIt&, const NodeIt, const EdgeIt) const; ??? konverzio miatt -void get(InEdgeIt&, const NodeIt, const EdgeIt) const; ??? konverzio miatt -void get(SymEdgeIt&, const NodeIt, const EdgeIt) const; ??? konverzio miatt - -Itt er veget az alternativ ize. - -Pontok azonositasara de meginkabb property vectorokhoz: - -int id(const NodeIt&) const; -int id(const EdgeIt&) const; - -int nodeNum() const; -int edgeNum() const; - -Pontok es elek hozzaadasanak metodusai: - -NodeIt addNode(); -EdgeIt addEdge(const NodeIt, const NodeIt); - -void deleteNode(const NodeIt); -void deleteEdge(const EdgeIt); - -void setTail(const NodeIt); vagy void setTail(NodeIt); nem tom -void setHead(const NodeIt); vagy void setHead(NodeIt); nem tom - -Hogy konnyebb legyen a progikat tesztelni, nehany stream utasitas: -ezek nem a ListGraph metodusai - -friend std::ostream& operator<<(std::ostream&, const NodeIt&); -friend std::ostream& operator<<(std::ostream&, const EdgeIt&); - -AZ iteratorok leptetesere ket lehetoseg van, az iterator ++ operatora, a -masik pedig -It G.next(It) const; -const G.next(const It) const; -It& G.setNext(It&) const; G.goNext(It&) const; G.moveNext(It&) const; mi a jobb szo? - -Kerdes: A bool valid()-nak ki kell-e jelenteni magarol, hogy const?? -NodeIt metodusai: -NodeIt(); -bool valid() const; -ezek nem tagfuggvenyek: -friend bool operator==(const NodeIt&, const NodeIt&); -friend bool operator!=(const NodeIt&, const NodeIt&); - -EachNodeIt metodusai: -ez publikusan szarmazik a NodeIt-bol, tehat a fentiek is. -EachNodeIt(); -EachNodeIt& operator++(); - -EdgeIt metodusai: -EdgeIt(); -bool valid() const; -ezek nem tagfvek: -friend bool operator==(const EdgeIt&, const EdgeIt&); -friend bool operator!=(const EdgeIt&, const EdgeIt&); -ujra tagfv-ek. - -EachEdgeIt metodusai: -EdgeIt-bol szarmazik -EachEdgeIt(); -EachEdgeIt& operator++(); - -OutEdgeIt metodusai: -EdgeIt-bol szarmazik -OutEdgeIt(); -OutEdgeIt& operator++(); - -InEdgeIt metodusai: -EdgeIt-bol szarmazik -InEdgeIt(); -InEdgeIt& operator++(); - -SymEdgeIt metodusai: -EdgeIt-bol szarmazik -SymEdgeIt(); -SymEdgeIt& operator++(); - -Ami itt kovetkezik az mar nem lenyeg, sot valtozni fog. - -Node propery array-okrol: - -template -class NodeMap; - -metodusok: - -NodeMap(const Graph&); -NodeMap(const Graph&, const ValueType); -void set(Graph::NodeIt, const ValueType); -//void put(Graph::NodeIt, const ValueType); -ValueType get(Graph::NodeIt) const; - -Ugyanez edge_property_array-okkal - -template -class EdgeMap; - -EdgeMap(const Graph&); -EdgeMap(const Graph&, const ValueType); -void set(Graph::EdgeIt, const ValueType); -//void put(Graph::EdgeIt, const ValueType); -ValueType get(Graph::EdgeIt) const; - -marci@cs.elte.hu \ No newline at end of file diff -r ee5959aa4410 -r c280de819a73 src/work/graphdemo.cc --- a/src/work/graphdemo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,137 +0,0 @@ -#include -#include -#include - -using namespace NEGRO; -using namespace std; - -class NodeData; -class EdgeData; - -typedef Graph TestGraph; - -class NodeData -{ -public: - int id; - bool isVis; - bfs_node_data bfs; -}; - -class EdgeData -{ -public: - int id; -}; - -typedef Graph TestGraph; - -int main() -{ - TestGraph G; - TestGraph::NodeIterator n,m; - TestGraph::OutEdgeIterator e; - int i; - - - //for(i=1;i<=10;i++) G.AddNode().n=i; //Ez nagyon rossz!!!!!!!! - for(i=1;i<=10;i++) G.AddNode()->id=i; //Ez a jo!!!!!!!! - - //n=G.AddNode(); - - //for(i=1;i<=10;i++) cout << (G.AddNode()->n=i) << ' '; - //cout << '\n'; - - i=0; - for(G.GetFirst(n);n.Valid();n++) - for(G.GetFirst(m);m.Valid();++m) - if(n!=m) G.AddEdge(n,m)->id=++i; - - cout << "Number of edges: " << i << "\n\n"; - - TestGraph::AllEdgeIterator a; - for(G.GetFirst(a);a.Valid();++a) - cout << a->id << ":" << a.From()->id << "->" << a.To()->id << " "; - - cout << "\n\n\n"; - - for(G.GetFirst(n);n.Valid();++n) - { - cout << n->id << "->"; - for(G.GetFirst(e,n);e.Valid();++e) - cout << e->id << ":" << e.To()->id << ' '; - cout << '\n'; - } - - cout << "\n\n\n\nB-verzio:\n\n\n"; - - G.Clean(); - - for(i=1;i<=10;i++) G.AddNode()->id=i; - - i=0; - for(n=G.First();n.Valid();n++) - for(m=G.First();m.Valid();++m) - if(n!=m) G.AddEdge(n,m)->id=++i; - - ; - for(n=G.First();n.Valid();++n) //Demo - { - e=G.First(n); - while(e.Valid()) - if((e->id)%2) G.Delete(e++); //it may be nice to have a postfix ++ - else ++e; - } - - // cout << "Number of edges: " << i << "\n\n"; - - for(a=G.First();a.Valid();++a) - cout << a->id << ": " << a.From()->id << "->" << a.To()->id << " "; - - cout << "\n\n\n"; - - for(n=G.First();n.Valid();++n) - { - cout << n->id << "->"; - for(e=G.First(n);e.Valid();++e) - cout << e->id << ":" << e.To()->id << ' '; - cout << '\n'; - } - - // For Marci's sake - - { - G.Clean(); - - for(int i=1;i<=10;i++) G.AddNode()->id=i; - - - { //I would'n say I'm really happy with this. - int i=0; - for(TestGraph::NodeIterator n(G);n.Valid();n++) - for(TestGraph::NodeIterator m(G);m.Valid();++m) - if(n!=m) G.AddEdge(n,m)->id=++i; - } - - for(TestGraph::NodeIterator n(G);n.Valid();++n) //Demo - { - TestGraph::OutEdgeIterator e(G,n); - while(e.Valid()) - if((e->id)%2) G.Delete(e++); //it may be nice to have a postfix ++ - else ++e; - } - - for(TestGraph::AllEdgeIterator a(G);a.Valid();++a) - cout << a->id << ": " << a.From()->id << "->" << a.To()->id << " "; - - cout << "\n\n\n"; - - for(TestGraph::NodeIterator n(G);n.Valid();++n) - { - cout << n->id << "->"; - for(TestGraph::OutEdgeIterator e(G,n);e.Valid();++e) - cout << e->id << ":" << e.To()->id << ' '; - cout << '\n'; - } - } -} diff -r ee5959aa4410 -r c280de819a73 src/work/iterator_bfs_dfs_demo.cc --- a/src/work/iterator_bfs_dfs_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,319 +0,0 @@ -#include -#include -#include - -#include -#include - -using namespace lemon; - -int main (int, char*[]) -{ - typedef ListGraph::NodeIt NodeIt; - typedef ListGraph::EdgeIt EdgeIt; - typedef ListGraph::EachNodeIt EachNodeIt; - typedef ListGraph::EachEdgeIt EachEdgeIt; - typedef ListGraph::OutEdgeIt OutEdgeIt; - typedef ListGraph::InEdgeIt InEdgeIt; - typedef ListGraph::SymEdgeIt SymEdgeIt; - - ListGraph G; - - NodeIt s=G.addNode(); - NodeIt v1=G.addNode(); - NodeIt v2=G.addNode(); - NodeIt v3=G.addNode(); - NodeIt v4=G.addNode(); - NodeIt t=G.addNode(); - - G.addEdge(s, v1); - G.addEdge(s, v2); - G.addEdge(v1, v2); - G.addEdge(v2, v1); - G.addEdge(v1, v3); - G.addEdge(v3, v2); - G.addEdge(v2, v4); - G.addEdge(v4, v3); - G.addEdge(v3, t); - G.addEdge(v4, t); - - std::cout << "bfs and dfs demo on the directed graph" << std::endl; - for(EachNodeIt i=G.first(); i.valid(); ++i) { - std::cout << i << ": "; - std::cout << "out edges: "; - for(OutEdgeIt j=G.first(i); j.valid(); ++j) - std::cout << j << " "; - std::cout << "in edges: "; - for(InEdgeIt j=G.first(i); j.valid(); ++j) - std::cout << j << " "; - std::cout << std::endl; - } - - //std::cout << std::endl; - //EachNodeIt u1=G.first(); - //EachEdgeIt u=G.first(); - //OutEdgeIt u=G.first(s); - //InEdgeIt u=G.first(s); - //SymEdgeIt u=G.first(s); - //OutEdgeIt u=G.first(s); - //EachNodeIt u=G.first(); - //EachEdgeIt u=G.first(); - //OutEdgeIt u=G.first(s); - //InEdgeIt u=G.first(s); - //SymEdgeIt u=G.first(s); - //u=G.first(s); - //u=G.first_ize(s, OutEdgeIt()); - //std::cout << "ize " << u << std::endl; - - /* - { - std::cout << "iterator bfs demo..." << std::endl; - NodePropertyVector reached(G, false); - reached.set(s, true); - std::queue bfs_queue; - bfs_queue.push(G.firstOutEdge(G.firstNode())); - BfsIterator< ListGraph, ListGraph::OutEdgeIt, NodePropertyVector > bfs(G, bfs_queue, reached); - for ( ; !bfs.finished(); ++bfs) { - if (OutEdgeIt(bfs).valid()) { - std::cout << "OutEdgeIt: " << bfs; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << G.bNode(bfs) << " "; - } else { - std::cout << "OutEdgeIt: " << "invalid"; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << "invalid" << " "; - } - if (bfs.bNodeIsNewlyReached()) { - std::cout << "bNodeIsNewlyReached "; - } else { - std::cout << "bNodeIsNotNewlyReached "; - } - if (bfs.aNodeIsExamined()) { - std::cout << "aNodeIsExamined "; - } else { - std::cout << "aNodeIsNotExamined "; - } - std::cout< reached(G, false); - reached.set(s, true); - std::stack dfs_stack; - dfs_stack.push(G.firstOutEdge(G.firstNode())); - DfsIterator< ListGraph, ListGraph::OutEdgeIt, NodePropertyVector > dfs(G, dfs_stack, reached); - for(; !dfs.finished(); ++dfs) { - if (OutEdgeIt(dfs).valid()) { - std::cout << "OutEdgeIt: " << dfs; - std::cout << " aNode: " << G.aNode(dfs); - std::cout << " bNode: " << G.bNode(dfs) << " "; - } else { - std::cout << "OutEdgeIt: " << "invalid"; - std::cout << " aNode: " << G.aNode(dfs); - std::cout << " bNode: " << "invalid" << " "; - } - if (dfs.bNodeIsNewlyReached()) { - std::cout << "bNodeIsNewlyReached "; - } else { - std::cout << "bNodeIsNotNewlyReached "; - } - if (dfs.aNodeIsLeaved()) { - std::cout << "aNodeIsLeaved "; - } else { - std::cout << "aNodeIsNotLeaved "; - } - std::cout< reached(G, false); - reached.set(s, true); - std::queue bfs_queue; - bfs_queue.push(G.first(s)); - BfsIterator1< ListGraph, ListGraph::OutEdgeIt, ListGraph::NodeMap > bfs(G, bfs_queue, reached); - while (!bfs.finished()) { - if (OutEdgeIt(bfs).valid()) { - std::cout << "OutEdgeIt: " << bfs; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << G.bNode(bfs) << " "; - } else { - std::cout << "OutEdgeIt: " << "invalid"; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << "invalid" << " "; - } - if (bfs.bNodeIsNewlyReached()) { - std::cout << "bNodeIsNewlyReached "; - } else { - std::cout << "bNodeIsNotNewlyReached "; - } - if (bfs.aNodeIsExamined()) { - std::cout << "aNodeIsExamined "; - } else { - std::cout << "aNodeIsNotExamined "; - } - std::cout< reached(G, false); - //reached.set(s, true); - //std::queue bfs_queue; - //bfs_queue.push(G.first(s)); - BfsIterator2< ListGraph, ListGraph::OutEdgeIt, ListGraph::NodeMap > bfs(G); - bfs.pushAndSetReached(s); - while (!bfs.finished()) { - if (OutEdgeIt(bfs).valid()) { - std::cout << "OutEdgeIt: " << bfs; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << G.bNode(bfs) << " "; - } else { - std::cout << "OutEdgeIt: " << "invalid"; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << "invalid" << " "; - } - if (bfs.isBNodeNewlyReached()) { - std::cout << "bNodeIsNewlyReached "; - } else { - std::cout << "bNodeIsNotNewlyReached "; - } - if (bfs.isANodeExamined()) { - std::cout << "aNodeIsExamined "; - } else { - std::cout << "aNodeIsNotExamined "; - } - std::cout< reached(G, false); - reached.set(s, true); - std::stack dfs_stack; - dfs_stack.push(G.first(s)); - DfsIterator1< ListGraph, ListGraph::OutEdgeIt, ListGraph::NodeMap > dfs(G, dfs_stack, reached); - do { - dfs.next(); - if (OutEdgeIt(dfs).valid()) { - std::cout << "OutEdgeIt: " << dfs; - std::cout << " aNode: " << G.aNode(dfs); - std::cout << " bNode: " << G.bNode(dfs) << " "; - } else { - std::cout << "OutEdgeIt: " << "invalid"; - std::cout << " aNode: " << G.aNode(dfs); - std::cout << " bNode: " << "invalid" << " "; - } - if (dfs.bNodeIsNewlyReached()) { - std::cout << "bNodeIsNewlyReached "; - } else { - std::cout << "bNodeIsNotNewlyReached "; - } - if (dfs.aNodeIsLeaved()) { - std::cout << "aNodeIsLeaved "; - } else { - std::cout << "aNodeIsNotLeaved "; - } - std::cout< reached(G, false); - reached.set(t, true); - std::queue bfs_queue; - bfs_queue.push(G.first(t)); - BfsIterator1< ListGraph, ListGraph::InEdgeIt, ListGraph::NodeMap > bfs(G, bfs_queue, reached); - while (!bfs.finished()) { - if (InEdgeIt(bfs).valid()) { - std::cout << "InEdgeIt: " << bfs; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << G.bNode(bfs) << " "; - } else { - std::cout << "InEdgeIt: " << "invalid"; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << "invalid" << " "; - } - if (bfs.bNodeIsNewlyReached()) { - std::cout << "bNodeIsNewlyReached "; - } else { - std::cout << "bNodeIsNotNewlyReached "; - } - if (bfs.aNodeIsExamined()) { - std::cout << "aNodeIsExamined "; - } else { - std::cout << "aNodeIsNotExamined "; - } - std::cout< reached(G, false); - reached.set(t, true); - std::queue bfs_queue; - bfs_queue.push(G.first(t)); - BfsIterator1< ListGraph, ListGraph::SymEdgeIt, ListGraph::NodeMap > bfs(G, bfs_queue, reached); - while (!bfs.finished()) { - if (SymEdgeIt(bfs).valid()) { - std::cout << "SymEdgeIt: " << bfs; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << G.bNode(bfs) << " "; - } else { - std::cout << "SymEdgeIt: " << "invalid"; - std::cout << " aNode: " << G.aNode(bfs); - std::cout << " bNode: " << "invalid" << " "; - } - if (bfs.bNodeIsNewlyReached()) { - std::cout << "bNodeIsNewlyReached "; - } else { - std::cout << "bNodeIsNotNewlyReached "; - } - if (bfs.aNodeIsExamined()) { - std::cout << "aNodeIsExamined "; - } else { - std::cout << "aNodeIsNotExamined "; - } - std::cout< -#include -#include -#include - -#include -#include -#include -#include - -using namespace lemon; -using namespace std; - - -int main() { - - typedef UndirSmartGraph Graph; - - typedef Graph::Edge Edge; - typedef Graph::UndirEdgeIt UndirEdgeIt; - typedef Graph::IncEdgeIt IncEdgeIt; - typedef Graph::NodeIt NodeIt; - typedef Graph::Node Node; - - typedef Graph::OutEdgeIt OutEdgeIt; - - Graph G; - - // G.clear(); - std::vector nodes; - for (int i=0; i<5; ++i) - nodes.push_back(G.addNode()); - G.addEdge(nodes[0], nodes[0]); - G.addEdge(nodes[0], nodes[1]); - G.addEdge(nodes[0], nodes[2]); - G.addEdge(nodes[0], nodes[4]); - G.addEdge(nodes[2], nodes[3]); - G.addEdge(nodes[1], nodes[2]); - G.addEdge(nodes[2], nodes[4]); - - for(UndirEdgeIt e(G); e!=INVALID; ++e) { - std::cout< max_matching(G); - max_matching.runEdmonds(0); - - return 0; -} - diff -r ee5959aa4410 -r c280de819a73 src/work/jacint/graph_gen.h --- a/src/work/jacint/graph_gen.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,120 +0,0 @@ -// -*- c++ -*- -#include -#include - -// ///\ingroup gwrappers -///\file -///\brief Graph generator functions. -/// -///This file contains several graph generator functions. -/// -// ///\author Marton Makai - -namespace lemon { - - - /** - * Inicializalja a veletlenszamgeneratort. - * Figyelem, ez nem jo igazi random szamokhoz, - * erre ne bizzad a titkaidat! - */ - void random_init() - { - unsigned int seed = getpid(); - seed |= seed << 15; - seed ^= time(0); - - srand(seed); - } - - - /** - * Egy veletlen int-et ad vissza 0 es m-1 kozott. - */ - int random(int m) - { - return int( double(m) * rand() / (RAND_MAX + 1.0) ); - } - - - /// Generates a random graph with n nodes and m edges. - /// Before generating the random graph, \c g.clear() is called. - template - void randomGraph(Graph& g, int n, int m) { - g.clear(); - std::vector nodes; - for (int i=0; i - void randomBipartiteGraph(Graph& g, int a, int b, int m) { - g.clear(); - std::vector s_nodes; - std::vector t_nodes; - for (int i=0; i - void completeGraph(Graph& g, int n) { - g.clear(); - std::vector nodes; - for (int i=0; i - void completeBidirectedGraph(Graph& g, int n) { - g.clear(); - std::vector nodes; - for (int i=0; i - void completeBipartiteGraph(Graph& g, int a, int b) { - g.clear(); - std::vector s_nodes; - std::vector t_nodes; - for (int i=0; i -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -// /** -// * Inicializalja a veletlenszamgeneratort. -// * Figyelem, ez nem jo igazi random szamokhoz, -// * erre ne bizzad a titkaidat! -// */ -// void random_init() -// { -// unsigned int seed = getpid(); -// seed |= seed << 15; -// seed ^= time(0); - -// srand(seed); -// } - -// /** -// * Egy veletlen int-et ad vissza 0 es m-1 kozott. -// */ -// int random(int m) -// { -// return int( double(m) * rand() / (RAND_MAX + 1.0) ); -// } - -using namespace lemon; - -int main() { - - //for leda graph - leda::graph lg; - //lg.make_undirected(); - typedef LedaGraphWrapper Graph; - Graph g(lg); - - //for UndirListGraph - //typedef UndirListGraph Graph; - //Graph g; - - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - - std::vector s_nodes; - std::vector t_nodes; - - int n; - std::cout << "Number of nodes="; - std::cin >> n; - int m; - std::cout << "number of edges="; - std::cin >> m; - std::cout << std::endl; - - random_graph(lg, n, m); - - Timer ts; - - // writeDimacs(std::cout, g); //for check - - MaxMatching max_matching(g); - std::cout << - "Running the edmonds algorithm run()... " - < mate(g,INVALID); - max_matching.writeNMapNode(mate); - NodeIt v; - for(g.first(v); g.valid(v); g.next(v) ) { - if ( g.valid(mate[v]) ) { - ++s; - } - } - int size=(int)s/2; //size will be used as the size of a maxmatching - std::cout << size << " is the size of the matching found by run(),"< ml=MAX_CARD_MATCHING(lg); - std::cout << "LEDA max matching algorithm." << std::endl - << "Size of matching: " - << ml.size() << std::endl; - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "\n"; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/jacint/matching.h --- a/src/work/jacint/matching.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,608 +0,0 @@ -// -*- C++ -*- -#ifndef LEMON_MAX_MATCHING_H -#define LEMON_MAX_MATCHING_H - -///\ingroup galgs -///\file -///\brief Maximum matching algorithm. - -#include - - -#include - - - -#include -#include -#include - -namespace lemon { - - /// \addtogroup galgs - /// @{ - - ///Maximum matching algorithms class. - - ///This class provides Edmonds' alternating forest matching - ///algorithm. The starting matching (if any) can be passed to the - ///algorithm using read-in functions \ref readNMapNode, \ref - ///readNMapEdge or \ref readEMapBool depending on the container. The - ///resulting maximum matching can be attained by write-out functions - ///\ref writeNMapNode, \ref writeNMapEdge or \ref writeEMapBool - ///depending on the preferred container. - /// - ///The dual side of a mathcing is a map of the nodes to - ///MaxMatching::pos_enum, having values D, A and C showing the - ///Gallai-Edmonds decomposition of the graph. The nodes in D induce - ///a graph with factor-critical components, the nodes in A form the - ///barrier, and the nodes in C induce a graph having a perfect - ///matching. This decomposition can be attained by calling \ref - ///writePos after running the algorithm. Before subsequent runs, - ///the function \ref resetPos() must be called. - /// - ///\param Graph The undirected graph type the algorithm runs on. - /// - ///\author Jacint Szabo - template - class MaxMatching { - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::UndirEdgeIt UndirEdgeIt; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::IncEdgeIt IncEdgeIt; - - typedef UnionFindEnum UFE; - - public: - - ///Indicates the Gallai-Edmonds decomposition of the graph. - - ///Indicates the Gallai-Edmonds decomposition of the graph, which - ///shows an upper bound on the size of a maximum matching. The - ///nodes with pos_enum \c D induce a graph with factor-critical - ///components, the nodes in \c A form the canonical barrier, and the - ///nodes in \c C induce a graph having a perfect matching. - enum pos_enum { - D=0, - A=1, - C=2 - }; - - private: - - static const int HEUR_density=2; - const Graph& g; - typename Graph::template NodeMap mate; - typename Graph::template NodeMap position; - - public: - - MaxMatching(const Graph& _g) : g(_g), mate(_g,INVALID), position(_g,C) {} - - ///Runs Edmonds' algorithm. - - ///Runs Edmonds' algorithm for sparse graphs (countEdges <= - ///2*countNodes), and a heuristical Edmonds' algorithm with a - ///heuristic of postponing shrinks for dense graphs. \pre Before - ///the subsequent calls \ref resetPos must be called. - inline void run(); - - ///Runs Edmonds' algorithm. - - ///If heur=0 it runs Edmonds' algorithm. If heur=1 it runs - ///Edmonds' algorithm with a heuristic of postponing shrinks, - ///giving a faster algorithm for dense graphs. \pre Before the - ///subsequent calls \ref resetPos must be called. - void runEdmonds( int heur ); - - ///Finds a greedy matching starting from the actual matching. - - ///Starting form the actual matching stored, it finds a maximal - ///greedy matching. - void greedyMatching(); - - ///Returns the size of the actual matching stored. - - ///Returns the size of the actual matching stored. After \ref - ///run() it returns the size of a maximum matching in the graph. - int size () const; - - ///Resets the map storing the Gallai-Edmonds decomposition. - - ///Resets the map storing the Gallai-Edmonds decomposition of the - ///graph, making it possible to run the algorithm. Must be called - ///before all runs of the Edmonds algorithm, except for the first - ///run. - void resetPos(); - - ///Resets the actual matching to the empty matching. - - ///Resets the actual matching to the empty matching. - /// - void resetMatching(); - - ///Reads a matching from a \c Node map of \c Nodes. - - ///Reads a matching from a \c Node map of \c Nodes. This map must be \e - ///symmetric, i.e. if \c map[u]=v then \c map[v]=u must hold, and - ///\c uv will be an edge of the matching. - template - void readNMapNode(NMapN& map) { - for(NodeIt v(g); v!=INVALID; ++v) { - mate.set(v,map[v]); - } - } - - ///Writes the stored matching to a \c Node map of \c Nodes. - - ///Writes the stored matching to a \c Node map of \c Nodes. The - ///resulting map will be \e symmetric, i.e. if \c map[u]=v then \c - ///map[v]=u will hold, and now \c uv is an edge of the matching. - template - void writeNMapNode (NMapN& map) const { - for(NodeIt v(g); v!=INVALID; ++v) { - map.set(v,mate[v]); - } - } - - ///Reads a matching from a \c Node map of \c Edges. - - ///Reads a matching from a \c Node map of incident \c Edges. This - ///map must have the property that if \c G.target(map[u])=v then \c - ///G.target(map[v])=u must hold, and now this edge is an edge of - ///the matching. - template - void readNMapEdge(NMapE& map) { - for(NodeIt v(g); v!=INVALID; ++v) { - Edge e=map[v]; - if ( g.valid(e) ) - g.source(e) == v ? mate.set(v,g.target(e)) : mate.set(v,g.source(e)); - } - } - - ///Writes the matching stored to a \c Node map of \c Edges. - - ///Writes the stored matching to a \c Node map of incident \c - ///Edges. This map will have the property that if \c - ///g.target(map[u])=v then \c g.target(map[v])=u holds, and now this - ///edge is an edge of the matching. - template - void writeNMapEdge (NMapE& map) const { - typename Graph::template NodeMap todo(g,true); - for(NodeIt v(g); v!=INVALID; ++v) { - if ( todo[v] && mate[v]!=INVALID ) { - Node u=mate[v]; - for(IncEdgeIt e(g,v); e!=INVALID; ++e) { - if ( g.target(e) == u ) { - map.set(u,e); - map.set(v,e); - todo.set(u,false); - todo.set(v,false); - break; - } - } - } - } - } - - - ///Reads a matching from an \c Edge map of \c bools. - - ///Reads a matching from an \c Edge map of \c bools. This map must - ///have the property that there are no two adjacent edges \c e, \c - ///f with \c map[e]=map[f]=true. The edges \c e with \c - ///map[e]=true form the matching. - template - void readEMapBool(EMapB& map) { - for(UndirEdgeIt e(g); e!=INVALID; ++e) { - if ( map[e] ) { - Node u=g.source(e); - Node v=g.target(e); - mate.set(u,v); - mate.set(v,u); - } - } - } - //iterable boolmap? - - - ///Writes the matching stored to an \c Edge map of \c bools. - - ///Writes the matching stored to an \c Edge map of \c bools. This - ///map will have the property that there are no two adjacent edges - ///\c e, \c f with \c map[e]=map[f]=true. The edges \c e with \c - ///map[e]=true form the matching. - template - void writeEMapBool (EMapB& map) const { - for(UndirEdgeIt e(g); e!=INVALID; ++e) map.set(e,false); - - typename Graph::template NodeMap todo(g,true); - for(NodeIt v(g); v!=INVALID; ++v) { - if ( todo[v] && mate[v]!=INVALID ) { - Node u=mate[v]; - for(IncEdgeIt e(g,v); e!=INVALID; ++e) { - if ( g.target(e) == u ) { - map.set(e,true); - todo.set(u,false); - todo.set(v,false); - break; - } - } - } - } - } - - - ///Writes the canonical decomposition of the graph after running - ///the algorithm. - - ///After calling any run methods of the class, and before calling - ///\ref resetPos(), it writes the Gallai-Edmonds canonical - ///decomposition of the graph. \c map must be a node map - ///of \ref pos_enum 's. - template - void writePos (NMapEnum& map) const { - for(NodeIt v(g); v!=INVALID; ++v) map.set(v,position[v]); - } - - private: - - void lateShrink(Node v, typename Graph::template NodeMap& ear, - UFE& blossom, UFE& tree); - - void normShrink(Node v, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree); - - bool noShrinkStep(Node x, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree, std::queue& Q); - - void shrinkStep(Node& top, Node& middle, Node& bottom, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree, std::queue& Q); - - void augment(Node x, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree); - }; - - - // ********************************************************************** - // IMPLEMENTATIONS - // ********************************************************************** - - - template - void MaxMatching::run() { - if ( countUndirEdges(g) < HEUR_density*countNodes(g) ) { - greedyMatching(); - runEdmonds(1); - } else runEdmonds(0); - } - - - template - void MaxMatching::runEdmonds( int heur=1 ) { - - std::cout<<"Entering runEdmonds"< ear(g,INVALID); - //undefined for the base nodes of the blossoms (i.e. for the - //representative elements of UFE blossom) and for the nodes in C - - typename UFE::MapType blossom_base(g); - UFE blossom(blossom_base); - typename UFE::MapType tree_base(g); - UFE tree(tree_base); - - for(NodeIt v(g); v!=INVALID; ++v) { - if ( position[v]==C && mate[v]==INVALID ) { - blossom.insert(v); - tree.insert(v); - position.set(v,D); - if ( heur == 1 ) lateShrink( v, ear, blossom, tree ); - else normShrink( v, ear, blossom, tree ); - } - } - - - std::cout<<" runEdmonds end"< - void MaxMatching::lateShrink(Node v, typename Graph::template NodeMap& ear, - UFE& blossom, UFE& tree) { - - - std::cout<<"Entering lateShrink"< Q; //queue of the totally unscanned nodes - Q.push(v); - std::queue R; - //queue of the nodes which must be scanned for a possible shrink - - while ( !Q.empty() ) { - Node x=Q.front(); - Q.pop(); - if ( noShrinkStep( x, ear, blossom, tree, Q ) ) return; - else R.push(x); - } - - while ( !R.empty() ) { - Node x=R.front(); - R.pop(); - - for( IncEdgeIt e(g,x); e!=INVALID ; ++e ) { - Node y=g.target(e); - - if ( position[y] == D && blossom.find(x) != blossom.find(y) ) { - //x and y must be in the same tree//biztos? az oddbol d-belive lettek is? - - typename Graph::template NodeMap path(g,false); - - Node b=blossom.find(x); - path.set(b,true); - b=mate[b]; - while ( b!=INVALID ) { - b=blossom.find(ear[b]); - path.set(b,true); - b=mate[b]; - } //going till the root - - Node top=y; - Node middle=blossom.find(top); - Node bottom=x; - while ( !path[middle] ) - shrinkStep(top, middle, bottom, ear, blossom, tree, Q); - - Node base=middle; - top=x; - middle=blossom.find(top); - bottom=y; - Node blossom_base=blossom.find(base); - while ( middle!=blossom_base ) - shrinkStep(top, middle, bottom, ear, blossom, tree, Q); - - blossom.makeRep(base); - } // if shrink is needed - - //most nehany odd node is d-beli lett, es rajuk az is megnezendo hogy mely d-beliekkel szonszedosak mas faban - - while ( !Q.empty() ) { - Node x=Q.front(); - Q.pop(); - if ( noShrinkStep(x, ear, blossom, tree, Q) ) return; - else R.push(x); - } - } //for e - } // while ( !R.empty() ) - } - - - template - void MaxMatching::normShrink(Node v, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree) { - - - std::cout<<"Entering normShrink with node "< Q; //queue of the unscanned nodes - Q.push(v); - while ( !Q.empty() ) { - - std::cout<<"beginning of norm while"< - void MaxMatching::greedyMatching() { - for(NodeIt v(g); v!=INVALID; ++v) - if ( mate[v]==INVALID ) { - for( IncEdgeIt e(g,v); e!=INVALID ; ++e ) { - Node y=g.target(e); - if ( mate[y]==INVALID && y!=v ) { - mate.set(v,y); - mate.set(y,v); - break; - } - } - } - } - - template - int MaxMatching::size() const { - int s=0; - for(NodeIt v(g); v!=INVALID; ++v) { - if ( mate[v]!=INVALID ) { - ++s; - } - } - return (int)s/2; - } - - template - void MaxMatching::resetPos() { - for(NodeIt v(g); v!=INVALID; ++v) - position.set(v,C); - } - - template - void MaxMatching::resetMatching() { - for(NodeIt v(g); v!=INVALID; ++v) - mate.set(v,INVALID); - } - - template - bool MaxMatching::noShrinkStep(Node x, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree, std::queue& Q) { - for( IncEdgeIt e(g,x); e!= INVALID; ++e ) { - Node y=g.target(e); - - if ( position[y]==C ) { - if ( mate[y]!=INVALID ) { //grow - ear.set(y,x); - Node w=mate[y]; - blossom.insert(w); - position.set(y,A); - position.set(w,D); - tree.insert(y); - tree.insert(w); - tree.join(y,blossom.find(x)); - tree.join(w,y); - Q.push(w); - } else { //augment - augment(x, ear, blossom, tree); - mate.set(x,y); - mate.set(y,x); - return true; - } - } - } - return false; - } - - template - void MaxMatching::shrinkStep(Node& top, Node& middle, Node& bottom, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree, std::queue& Q) { - ear.set(top,bottom); - Node t=top; - while ( t!=middle ) { - Node u=mate[t]; - t=ear[u]; - ear.set(t,u); - } - bottom=mate[middle]; - position.set(bottom,D); - Q.push(bottom); - top=ear[bottom]; - Node oldmiddle=middle; - middle=blossom.find(top); - tree.erase(bottom); - tree.erase(oldmiddle); - blossom.insert(bottom); - blossom.join(bottom, oldmiddle); - blossom.join(top, oldmiddle); - } - - template - void MaxMatching::augment(Node x, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree) { - Node v=mate[x]; - while ( v!=INVALID ) { - - Node u=ear[v]; - mate.set(v,u); - Node tmp=v; - v=mate[u]; - mate.set(u,tmp); - } - typename UFE::ItemIt it; - for (tree.first(it,blossom.find(x)); tree.valid(it); tree.next(it)) { - if ( position[it] == D ) { - typename UFE::ItemIt b_it; - for (blossom.first(b_it,it); blossom.valid(b_it); blossom.next(b_it)) { - position.set( b_it ,C); - } - blossom.eraseClass(it); - } else position.set( it ,C); - } - tree.eraseClass(x); - - } - - /// @} - -} //END OF NAMESPACE LEMON - -#endif //EDMONDS_H diff -r ee5959aa4410 -r c280de819a73 src/work/jacint/max_flow.h --- a/src/work/jacint/max_flow.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1269 +0,0 @@ -// -*- C++ -*- -#ifndef LEMON_MAX_FLOW_H -#define LEMON_MAX_FLOW_H - -#include -#include -#include - -#include -#include -#include -#include -#include - -/// \file -/// \brief Maximum flow algorithms. -/// \ingroup galgs - -namespace lemon { - - /// \addtogroup galgs - /// @{ - ///Maximum flow algorithms class. - - ///This class provides various algorithms for finding a flow of - ///maximum value in a directed graph. The \e source node, the \e - ///target node, the \e capacity of the edges and the \e starting \e - ///flow value of the edges should be passed to the algorithm through the - ///constructor. It is possible to change these quantities using the - ///functions \ref resetSource, \ref resetTarget, \ref resetCap and - ///\ref resetFlow. Before any subsequent runs of any algorithm of - ///the class \ref resetFlow should be called. - - ///After running an algorithm of the class, the actual flow value - ///can be obtained by calling \ref flowValue(). The minimum - ///value cut can be written into a \c node map of \c bools by - ///calling \ref minCut. (\ref minMinCut and \ref maxMinCut writes - ///the inclusionwise minimum and maximum of the minimum value - ///cuts, resp.) - ///\param Graph The directed graph type the algorithm runs on. - ///\param Num The number type of the capacities and the flow values. - ///\param CapMap The capacity map type. - ///\param FlowMap The flow map type. - ///\author Marton Makai, Jacint Szabo - template , - typename FlowMap=typename Graph::template EdgeMap > - class MaxFlow { - protected: - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - - typedef typename std::vector > VecStack; - typedef typename Graph::template NodeMap NNMap; - typedef typename std::vector VecNode; - - const Graph* g; - Node s; - Node t; - const CapMap* capacity; - FlowMap* flow; - int n; //the number of nodes of G - typedef ResGraphWrapper ResGW; - //typedef ExpResGraphWrapper ResGW; - typedef typename ResGW::OutEdgeIt ResGWOutEdgeIt; - typedef typename ResGW::Edge ResGWEdge; - //typedef typename ResGW::template NodeMap ReachedMap; - typedef typename Graph::template NodeMap ReachedMap; - - - //level works as a bool map in augmenting path algorithms and is - //used by bfs for storing reached information. In preflow, it - //shows the levels of nodes. - ReachedMap level; - - //excess is needed only in preflow - typename Graph::template NodeMap excess; - - //fixme -// protected: - // MaxFlow() { } - // void set(const Graph& _G, Node _s, Node _t, const CapMap& _capacity, - // FlowMap& _flow) - // { - // g=&_G; - // s=_s; - // t=_t; - // capacity=&_capacity; - // flow=&_flow; - // n=_G.nodeNum; - // level.set (_G); //kellene vmi ilyesmi fv - // excess(_G,0); //itt is - // } - - // constants used for heuristics - static const int H0=20; - static const int H1=1; - - public: - - ///Indicates the property of the starting flow. - - ///Indicates the property of the starting flow. The meanings are as follows: - ///- \c ZERO_FLOW: constant zero flow - ///- \c GEN_FLOW: any flow, i.e. the sum of the in-flows equals to - ///the sum of the out-flows in every node except the \e source and - ///the \e target. - ///- \c PRE_FLOW: any preflow, i.e. the sum of the in-flows is at - ///least the sum of the out-flows in every node except the \e source. - ///- \c NO_FLOW: indicates an unspecified edge map. \ref flow will be - ///set to the constant zero flow in the beginning of the algorithm in this case. - enum FlowEnum{ - ZERO_FLOW, - GEN_FLOW, - PRE_FLOW, - NO_FLOW - }; - - enum StatusEnum { - AFTER_NOTHING, - AFTER_AUGMENTING, - AFTER_FAST_AUGMENTING, - AFTER_PRE_FLOW_PHASE_1, - AFTER_PRE_FLOW_PHASE_2 - }; - - /// Don not needle this flag only if necessary. - StatusEnum status; - int number_of_augmentations; - - - template - class TrickyReachedMap { - protected: - IntMap* map; - int* number_of_augmentations; - public: - TrickyReachedMap(IntMap& _map, int& _number_of_augmentations) : - map(&_map), number_of_augmentations(&_number_of_augmentations) { } - void set(const Node& n, bool b) { - if (b) - map->set(n, *number_of_augmentations); - else - map->set(n, *number_of_augmentations-1); - } - bool operator[](const Node& n) const { - return (*map)[n]==*number_of_augmentations; - } - }; - - ///Constructor - - ///\todo Document, please. - /// - MaxFlow(const Graph& _G, Node _s, Node _t, const CapMap& _capacity, - FlowMap& _flow) : - g(&_G), s(_s), t(_t), capacity(&_capacity), - flow(&_flow), n(_G.nodeNum()), level(_G), excess(_G,0), - status(AFTER_NOTHING), number_of_augmentations(0) { } - - ///Runs a maximum flow algorithm. - - ///Runs a preflow algorithm, which is the fastest maximum flow - ///algorithm up-to-date. The default for \c fe is ZERO_FLOW. - ///\pre The starting flow must be - /// - a constant zero flow if \c fe is \c ZERO_FLOW, - /// - an arbitary flow if \c fe is \c GEN_FLOW, - /// - an arbitary preflow if \c fe is \c PRE_FLOW, - /// - any map if \c fe is NO_FLOW. - void run(FlowEnum fe=ZERO_FLOW) { - preflow(fe); - } - - - ///Runs a preflow algorithm. - - ///Runs a preflow algorithm. The preflow algorithms provide the - ///fastest way to compute a maximum flow in a directed graph. - ///\pre The starting flow must be - /// - a constant zero flow if \c fe is \c ZERO_FLOW, - /// - an arbitary flow if \c fe is \c GEN_FLOW, - /// - an arbitary preflow if \c fe is \c PRE_FLOW, - /// - any map if \c fe is NO_FLOW. - /// - ///\todo NO_FLOW should be the default flow. - void preflow(FlowEnum fe) { - preflowPhase1(fe); - preflowPhase2(); - } - // Heuristics: - // 2 phase - // gap - // list 'level_list' on the nodes on level i implemented by hand - // stack 'active' on the active nodes on level i - // runs heuristic 'highest label' for H1*n relabels - // runs heuristic 'bound decrease' for H0*n relabels, starts with 'highest label' - // Parameters H0 and H1 are initialized to 20 and 1. - - ///Runs the first phase of the preflow algorithm. - - ///The preflow algorithm consists of two phases, this method runs the - ///first phase. After the first phase the maximum flow value and a - ///minimum value cut can already be computed, though a maximum flow - ///is net yet obtained. So after calling this method \ref flowValue - ///and \ref actMinCut gives proper results. - ///\warning: \ref minCut, \ref minMinCut and \ref maxMinCut do not - ///give minimum value cuts unless calling \ref preflowPhase2. - ///\pre The starting flow must be - /// - a constant zero flow if \c fe is \c ZERO_FLOW, - /// - an arbitary flow if \c fe is \c GEN_FLOW, - /// - an arbitary preflow if \c fe is \c PRE_FLOW, - /// - any map if \c fe is NO_FLOW. - void preflowPhase1(FlowEnum fe); - - ///Runs the second phase of the preflow algorithm. - - ///The preflow algorithm consists of two phases, this method runs - ///the second phase. After calling \ref preflowPhase1 and then - ///\ref preflowPhase2 the methods \ref flowValue, \ref minCut, - ///\ref minMinCut and \ref maxMinCut give proper results. - ///\pre \ref preflowPhase1 must be called before. - void preflowPhase2(); - - /// Starting from a flow, this method searches for an augmenting path - /// according to the Edmonds-Karp algorithm - /// and augments the flow on if any. - /// The return value shows if the augmentation was succesful. - bool augmentOnShortestPath(); - bool augmentOnShortestPath2(); - - /// Starting from a flow, this method searches for an augmenting blocking - /// flow according to Dinits' algorithm and augments the flow on if any. - /// The blocking flow is computed in a physically constructed - /// residual graph of type \c Mutablegraph. - /// The return value show sif the augmentation was succesful. - template bool augmentOnBlockingFlow(); - - /// The same as \c augmentOnBlockingFlow but the - /// residual graph is not constructed physically. - /// The return value shows if the augmentation was succesful. - bool augmentOnBlockingFlow2(); - - /// Returns the maximum value of a flow. - - /// Returns the maximum value of a flow, by counting the - /// over-flow of the target node \ref t. - /// It can be called already after running \ref preflowPhase1. - Num flowValue() const { - Num a=0; - FOR_EACH_INC_LOC(InEdgeIt, e, *g, t) a+=(*flow)[e]; - FOR_EACH_INC_LOC(OutEdgeIt, e, *g, t) a-=(*flow)[e]; - return a; - //marci figyu: excess[t] epp ezt adja preflow 1. fazisa utan - } - - ///Returns a minimum value cut after calling \ref preflowPhase1. - - ///After the first phase of the preflow algorithm the maximum flow - ///value and a minimum value cut can already be computed. This - ///method can be called after running \ref preflowPhase1 for - ///obtaining a minimum value cut. - /// \warning Gives proper result only right after calling \ref - /// preflowPhase1. - /// \todo We have to make some status variable which shows the - /// actual state - /// of the class. This enables us to determine which methods are valid - /// for MinCut computation - template - void actMinCut(_CutMap& M) const { - NodeIt v; - switch (status) { - case AFTER_PRE_FLOW_PHASE_1: - for(g->first(v); g->valid(v); g->next(v)) { - if (level[v] < n) { - M.set(v, false); - } else { - M.set(v, true); - } - } - break; - case AFTER_PRE_FLOW_PHASE_2: - case AFTER_NOTHING: - minMinCut(M); - break; - case AFTER_AUGMENTING: - for(g->first(v); g->valid(v); g->next(v)) { - if (level[v]) { - M.set(v, true); - } else { - M.set(v, false); - } - } - break; - case AFTER_FAST_AUGMENTING: - for(g->first(v); g->valid(v); g->next(v)) { - if (level[v]==number_of_augmentations) { - M.set(v, true); - } else { - M.set(v, false); - } - } - break; - } - } - - ///Returns the inclusionwise minimum of the minimum value cuts. - - ///Sets \c M to the characteristic vector of the minimum value cut - ///which is inclusionwise minimum. It is computed by processing - ///a bfs from the source node \c s in the residual graph. - ///\pre M should be a node map of bools initialized to false. - ///\pre \c flow must be a maximum flow. - template - void minMinCut(_CutMap& M) const { - std::queue queue; - - M.set(s,true); - queue.push(s); - - while (!queue.empty()) { - Node w=queue.front(); - queue.pop(); - - OutEdgeIt e; - for(g->first(e,w) ; g->valid(e); g->next(e)) { - Node v=g->target(e); - if (!M[v] && (*flow)[e] < (*capacity)[e] ) { - queue.push(v); - M.set(v, true); - } - } - - InEdgeIt f; - for(g->first(f,w) ; g->valid(f); g->next(f)) { - Node v=g->source(f); - if (!M[v] && (*flow)[f] > 0 ) { - queue.push(v); - M.set(v, true); - } - } - } - } - - ///Returns the inclusionwise maximum of the minimum value cuts. - - ///Sets \c M to the characteristic vector of the minimum value cut - ///which is inclusionwise maximum. It is computed by processing a - ///backward bfs from the target node \c t in the residual graph. - ///\pre M should be a node map of bools initialized to false. - ///\pre \c flow must be a maximum flow. - template - void maxMinCut(_CutMap& M) const { - - NodeIt v; - for(g->first(v) ; g->valid(v); g->next(v)) { - M.set(v, true); - } - - std::queue queue; - - M.set(t,false); - queue.push(t); - - while (!queue.empty()) { - Node w=queue.front(); - queue.pop(); - - InEdgeIt e; - for(g->first(e,w) ; g->valid(e); g->next(e)) { - Node v=g->source(e); - if (M[v] && (*flow)[e] < (*capacity)[e] ) { - queue.push(v); - M.set(v, false); - } - } - - OutEdgeIt f; - for(g->first(f,w) ; g->valid(f); g->next(f)) { - Node v=g->target(f); - if (M[v] && (*flow)[f] > 0 ) { - queue.push(v); - M.set(v, false); - } - } - } - } - - ///Returns a minimum value cut. - - ///Sets \c M to the characteristic vector of a minimum value cut. - ///\pre M should be a node map of bools initialized to false. - ///\pre \c flow must be a maximum flow. - template - void minCut(CutMap& M) const { minMinCut(M); } - - ///Resets the source node to \c _s. - - ///Resets the source node to \c _s. - /// - void resetSource(Node _s) { s=_s; status=AFTER_NOTHING; } - - ///Resets the target node to \c _t. - - ///Resets the target node to \c _t. - /// - void resetTarget(Node _t) { t=_t; status=AFTER_NOTHING; } - - /// Resets the edge map of the capacities to _cap. - - /// Resets the edge map of the capacities to _cap. - /// - void resetCap(const CapMap& _cap) { capacity=&_cap; status=AFTER_NOTHING; } - - /// Resets the edge map of the flows to _flow. - - /// Resets the edge map of the flows to _flow. - /// - void resetFlow(FlowMap& _flow) { flow=&_flow; status=AFTER_NOTHING; } - - - private: - - int push(Node w, VecStack& active) { - - int lev=level[w]; - Num exc=excess[w]; - int newlevel=n; //bound on the next level of w - - OutEdgeIt e; - for(g->first(e,w); g->valid(e); g->next(e)) { - - if ( (*flow)[e] >= (*capacity)[e] ) continue; - Node v=g->target(e); - - if( lev > level[v] ) { //Push is allowed now - - if ( excess[v]<=0 && v!=t && v!=s ) { - int lev_v=level[v]; - active[lev_v].push(v); - } - - Num cap=(*capacity)[e]; - Num flo=(*flow)[e]; - Num remcap=cap-flo; - - if ( remcap >= exc ) { //A nonsaturating push. - - flow->set(e, flo+exc); - excess.set(v, excess[v]+exc); - exc=0; - break; - - } else { //A saturating push. - flow->set(e, cap); - excess.set(v, excess[v]+remcap); - exc-=remcap; - } - } else if ( newlevel > level[v] ) newlevel = level[v]; - } //for out edges wv - - if ( exc > 0 ) { - InEdgeIt e; - for(g->first(e,w); g->valid(e); g->next(e)) { - - if( (*flow)[e] <= 0 ) continue; - Node v=g->source(e); - - if( lev > level[v] ) { //Push is allowed now - - if ( excess[v]<=0 && v!=t && v!=s ) { - int lev_v=level[v]; - active[lev_v].push(v); - } - - Num flo=(*flow)[e]; - - if ( flo >= exc ) { //A nonsaturating push. - - flow->set(e, flo-exc); - excess.set(v, excess[v]+exc); - exc=0; - break; - } else { //A saturating push. - - excess.set(v, excess[v]+flo); - exc-=flo; - flow->set(e,0); - } - } else if ( newlevel > level[v] ) newlevel = level[v]; - } //for in edges vw - - } // if w still has excess after the out edge for cycle - - excess.set(w, exc); - - return newlevel; - } - - - void preflowPreproc(FlowEnum fe, VecStack& active, - VecNode& level_list, NNMap& left, NNMap& right) - { - std::queue bfs_queue; - - switch (fe) { - case NO_FLOW: //flow is already set to const zero in this case - case ZERO_FLOW: - { - //Reverse_bfs from t, to find the starting level. - level.set(t,0); - bfs_queue.push(t); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(g->first(e,v); g->valid(e); g->next(e)) { - Node w=g->source(e); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( g->valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - } - - //the starting flow - OutEdgeIt e; - for(g->first(e,s); g->valid(e); g->next(e)) - { - Num c=(*capacity)[e]; - if ( c <= 0 ) continue; - Node w=g->target(e); - if ( level[w] < n ) { - if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); - flow->set(e, c); - excess.set(w, excess[w]+c); - } - } - break; - } - - case GEN_FLOW: - case PRE_FLOW: - { - //Reverse_bfs from t in the residual graph, - //to find the starting level. - level.set(t,0); - bfs_queue.push(t); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(g->first(e,v); g->valid(e); g->next(e)) { - if ( (*capacity)[e] <= (*flow)[e] ) continue; - Node w=g->source(e); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( g->valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - - OutEdgeIt f; - for(g->first(f,v); g->valid(f); g->next(f)) { - if ( 0 >= (*flow)[f] ) continue; - Node w=g->target(f); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( g->valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - } - - - //the starting flow - OutEdgeIt e; - for(g->first(e,s); g->valid(e); g->next(e)) - { - Num rem=(*capacity)[e]-(*flow)[e]; - if ( rem <= 0 ) continue; - Node w=g->target(e); - if ( level[w] < n ) { - if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); - flow->set(e, (*capacity)[e]); - excess.set(w, excess[w]+rem); - } - } - - InEdgeIt f; - for(g->first(f,s); g->valid(f); g->next(f)) - { - if ( (*flow)[f] <= 0 ) continue; - Node w=g->source(f); - if ( level[w] < n ) { - if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); - excess.set(w, excess[w]+(*flow)[f]); - flow->set(f, 0); - } - } - break; - } //case PRE_FLOW - } - } //preflowPreproc - - - - void relabel(Node w, int newlevel, VecStack& active, - VecNode& level_list, NNMap& left, - NNMap& right, int& b, int& k, bool what_heur ) - { - - Num lev=level[w]; - - Node right_n=right[w]; - Node left_n=left[w]; - - //unlacing starts - if ( g->valid(right_n) ) { - if ( g->valid(left_n) ) { - right.set(left_n, right_n); - left.set(right_n, left_n); - } else { - level_list[lev]=right_n; - left.set(right_n, INVALID); - } - } else { - if ( g->valid(left_n) ) { - right.set(left_n, INVALID); - } else { - level_list[lev]=INVALID; - } - } - //unlacing ends - - if ( !g->valid(level_list[lev]) ) { - - //gapping starts - for (int i=lev; i!=k ; ) { - Node v=level_list[++i]; - while ( g->valid(v) ) { - level.set(v,n); - v=right[v]; - } - level_list[i]=INVALID; - if ( !what_heur ) { - while ( !active[i].empty() ) { - active[i].pop(); //FIXME: ezt szebben kene - } - } - } - - level.set(w,n); - b=lev-1; - k=b; - //gapping ends - - } else { - - if ( newlevel == n ) level.set(w,n); - else { - level.set(w,++newlevel); - active[newlevel].push(w); - if ( what_heur ) b=newlevel; - if ( k < newlevel ) ++k; //now k=newlevel - Node first=level_list[newlevel]; - if ( g->valid(first) ) left.set(first,w); - right.set(w,first); - left.set(w,INVALID); - level_list[newlevel]=w; - } - } - - } //relabel - - - template - class DistanceMap { - protected: - const MapGraphWrapper* g; - typename MapGraphWrapper::template NodeMap dist; - public: - DistanceMap(MapGraphWrapper& _g) : g(&_g), dist(*g, g->nodeNum()) { } - void set(const typename MapGraphWrapper::Node& n, int a) { - dist.set(n, a); - } - int operator[](const typename MapGraphWrapper::Node& n) const { - return dist[n]; - } - // int get(const typename MapGraphWrapper::Node& n) const { - // return dist[n]; } - // bool get(const typename MapGraphWrapper::Edge& e) const { - // return (dist.get(g->source(e))target(e))); } - bool operator[](const typename MapGraphWrapper::Edge& e) const { - return (dist[g->source(e)]target(e)]); - } - }; - - }; - - - template - void MaxFlow::preflowPhase1(FlowEnum fe) - { - - int heur0=(int)(H0*n); //time while running 'bound decrease' - int heur1=(int)(H1*n); //time while running 'highest label' - int heur=heur1; //starting time interval (#of relabels) - int numrelabel=0; - - bool what_heur=1; - //It is 0 in case 'bound decrease' and 1 in case 'highest label' - - bool end=false; - //Needed for 'bound decrease', true means no active nodes are above bound - //b. - - int k=n-2; //bound on the highest level under n containing a node - int b=k; //bound on the highest level under n of an active node - - VecStack active(n); - - NNMap left(*g, INVALID); - NNMap right(*g, INVALID); - VecNode level_list(n,INVALID); - //List of the nodes in level ifirst(v); g->valid(v); g->next(v)) level.set(v,n); - //setting each node to level n - - if ( fe == NO_FLOW ) { - EdgeIt e; - for(g->first(e); g->valid(e); g->next(e)) flow->set(e,0); - } - - switch (fe) { //computing the excess - case PRE_FLOW: - { - NodeIt v; - for(g->first(v); g->valid(v); g->next(v)) { - Num exc=0; - - InEdgeIt e; - for(g->first(e,v); g->valid(e); g->next(e)) exc+=(*flow)[e]; - OutEdgeIt f; - for(g->first(f,v); g->valid(f); g->next(f)) exc-=(*flow)[f]; - - excess.set(v,exc); - - //putting the active nodes into the stack - int lev=level[v]; - if ( exc > 0 && lev < n && v != t ) active[lev].push(v); - } - break; - } - case GEN_FLOW: - { - NodeIt v; - for(g->first(v); g->valid(v); g->next(v)) excess.set(v,0); - - Num exc=0; - InEdgeIt e; - for(g->first(e,t); g->valid(e); g->next(e)) exc+=(*flow)[e]; - OutEdgeIt f; - for(g->first(f,t); g->valid(f); g->next(f)) exc-=(*flow)[f]; - excess.set(t,exc); - break; - } - case ZERO_FLOW: - case NO_FLOW: - { - NodeIt v; - for(g->first(v); g->valid(v); g->next(v)) excess.set(v,0); - break; - } - } - - preflowPreproc(fe, active, level_list, left, right); - //End of preprocessing - - - //Push/relabel on the highest level active nodes. - while ( true ) { - if ( b == 0 ) { - if ( !what_heur && !end && k > 0 ) { - b=k; - end=true; - } else break; - } - - if ( active[b].empty() ) --b; - else { - end=false; - Node w=active[b].top(); - active[b].pop(); - int newlevel=push(w,active); - if ( excess[w] > 0 ) relabel(w, newlevel, active, level_list, - left, right, b, k, what_heur); - - ++numrelabel; - if ( numrelabel >= heur ) { - numrelabel=0; - if ( what_heur ) { - what_heur=0; - heur=heur0; - end=false; - } else { - what_heur=1; - heur=heur1; - b=k; - } - } - } - } - - status=AFTER_PRE_FLOW_PHASE_1; - } - - - - template - void MaxFlow::preflowPhase2() - { - - int k=n-2; //bound on the highest level under n containing a node - int b=k; //bound on the highest level under n of an active node - - VecStack active(n); - level.set(s,0); - std::queue bfs_queue; - bfs_queue.push(s); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(g->first(e,v); g->valid(e); g->next(e)) { - if ( (*capacity)[e] <= (*flow)[e] ) continue; - Node u=g->source(e); - if ( level[u] >= n ) { - bfs_queue.push(u); - level.set(u, l); - if ( excess[u] > 0 ) active[l].push(u); - } - } - - OutEdgeIt f; - for(g->first(f,v); g->valid(f); g->next(f)) { - if ( 0 >= (*flow)[f] ) continue; - Node u=g->target(f); - if ( level[u] >= n ) { - bfs_queue.push(u); - level.set(u, l); - if ( excess[u] > 0 ) active[l].push(u); - } - } - } - b=n-2; - - while ( true ) { - - if ( b == 0 ) break; - - if ( active[b].empty() ) --b; - else { - Node w=active[b].top(); - active[b].pop(); - int newlevel=push(w,active); - - //relabel - if ( excess[w] > 0 ) { - level.set(w,++newlevel); - active[newlevel].push(w); - b=newlevel; - } - } // if stack[b] is nonempty - } // while(true) - - status=AFTER_PRE_FLOW_PHASE_2; - } - - - - template - bool MaxFlow::augmentOnShortestPath() - { - ResGW res_graph(*g, *capacity, *flow); - bool _augment=false; - - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - bfs.pushAndSetReached(s); - - typename ResGW::template NodeMap pred(res_graph); - pred.set(s, INVALID); - - typename ResGW::template NodeMap free(res_graph); - - //searching for augmenting path - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - Node v=res_graph.source(e); - Node w=res_graph.target(e); - pred.set(w, e); - if (res_graph.valid(pred[v])) { - free.set(w, std::min(free[v], res_graph.resCap(e))); - } else { - free.set(w, res_graph.resCap(e)); - } - if (res_graph.target(e)==t) { _augment=true; break; } - } - - ++bfs; - } //end of searching augmenting path - - if (_augment) { - Node n=t; - Num augment_value=free[t]; - while (res_graph.valid(pred[n])) { - ResGWEdge e=pred[n]; - res_graph.augment(e, augment_value); - n=res_graph.source(e); - } - } - - status=AFTER_AUGMENTING; - return _augment; - } - - - template - bool MaxFlow::augmentOnShortestPath2() - { - ResGW res_graph(*g, *capacity, *flow); - bool _augment=false; - - if (status!=AFTER_FAST_AUGMENTING) { - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - number_of_augmentations=1; - } else { - ++number_of_augmentations; - } - TrickyReachedMap - tricky_reached_map(level, number_of_augmentations); - //ReachedMap level(res_graph); -// FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator > - bfs(res_graph, tricky_reached_map); - bfs.pushAndSetReached(s); - - typename ResGW::template NodeMap pred(res_graph); - pred.set(s, INVALID); - - typename ResGW::template NodeMap free(res_graph); - - //searching for augmenting path - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - Node v=res_graph.source(e); - Node w=res_graph.target(e); - pred.set(w, e); - if (res_graph.valid(pred[v])) { - free.set(w, std::min(free[v], res_graph.resCap(e))); - } else { - free.set(w, res_graph.resCap(e)); - } - if (res_graph.target(e)==t) { _augment=true; break; } - } - - ++bfs; - } //end of searching augmenting path - - if (_augment) { - Node n=t; - Num augment_value=free[t]; - while (res_graph.valid(pred[n])) { - ResGWEdge e=pred[n]; - res_graph.augment(e, augment_value); - n=res_graph.source(e); - } - } - - status=AFTER_FAST_AUGMENTING; - return _augment; - } - - - template - template - bool MaxFlow::augmentOnBlockingFlow() - { - typedef MutableGraph MG; - bool _augment=false; - - ResGW res_graph(*g, *capacity, *flow); - - //bfs for distances on the residual graph - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - bfs.pushAndSetReached(s); - typename ResGW::template NodeMap - dist(res_graph); //filled up with 0's - - //F will contain the physical copy of the residual graph - //with the set of edges which are on shortest paths - MG F; - typename ResGW::template NodeMap - res_graph_to_F(res_graph); - { - typename ResGW::NodeIt n; - for(res_graph.first(n); res_graph.valid(n); res_graph.next(n)) { - res_graph_to_F.set(n, F.addNode()); - } - } - - typename MG::Node sF=res_graph_to_F[s]; - typename MG::Node tF=res_graph_to_F[t]; - typename MG::template EdgeMap original_edge(F); - typename MG::template EdgeMap residual_capacity(F); - - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e)) { - if (bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); - typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], - res_graph_to_F[res_graph.target(e)]); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } else { - if (dist[res_graph.target(e)]==(dist[res_graph.source(e)]+1)) { - typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], - res_graph_to_F[res_graph.target(e)]); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } - } - } - ++bfs; - } //computing distances from s in the residual graph - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - DfsIterator< MG, typename MG::template NodeMap > dfs(F); - typename MG::template NodeMap pred(F); - pred.set(sF, INVALID); - //invalid iterators for sources - - typename MG::template NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) { - if (dfs.isBNodeNewlyReached()) { - typename MG::Node v=F.aNode(dfs); - typename MG::Node w=F.bNode(dfs); - pred.set(w, dfs); - if (F.valid(pred[v])) { - free.set(w, std::min(free[v], residual_capacity[dfs])); - } else { - free.set(w, residual_capacity[dfs]); - } - if (w==tF) { - __augment=true; - _augment=true; - break; - } - - } else { - F.erase(/*typename MG::OutEdgeIt*/(dfs)); - } - } - } - - if (__augment) { - typename MG::Node n=tF; - Num augment_value=free[tF]; - while (F.valid(pred[n])) { - typename MG::Edge e=pred[n]; - res_graph.augment(original_edge[e], augment_value); - n=F.source(e); - if (residual_capacity[e]==augment_value) - F.erase(e); - else - residual_capacity.set(e, residual_capacity[e]-augment_value); - } - } - - } - - status=AFTER_AUGMENTING; - return _augment; - } - - - - - template - bool MaxFlow::augmentOnBlockingFlow2() - { - bool _augment=false; - - ResGW res_graph(*g, *capacity, *flow); - - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - - bfs.pushAndSetReached(s); - DistanceMap dist(res_graph); - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); - } - ++bfs; - } //computing distances from s in the residual graph - - //Subgraph containing the edges on some shortest paths - ConstMap true_map(true); - typedef SubGraphWrapper, - DistanceMap > FilterResGW; - FilterResGW filter_res_graph(res_graph, true_map, dist); - - //Subgraph, which is able to delete edges which are already - //met by the dfs - typename FilterResGW::template NodeMap - first_out_edges(filter_res_graph); - typename FilterResGW::NodeIt v; - for(filter_res_graph.first(v); filter_res_graph.valid(v); - filter_res_graph.next(v)) - { - typename FilterResGW::OutEdgeIt e; - filter_res_graph.first(e, v); - first_out_edges.set(v, e); - } - typedef ErasingFirstGraphWrapper > ErasingResGW; - ErasingResGW erasing_res_graph(filter_res_graph, first_out_edges); - - bool __augment=true; - - while (__augment) { - - __augment=false; - //computing blocking flow with dfs - DfsIterator< ErasingResGW, - typename ErasingResGW::template NodeMap > - dfs(erasing_res_graph); - typename ErasingResGW:: - template NodeMap - pred(erasing_res_graph); - pred.set(s, INVALID); - //invalid iterators for sources - - typename ErasingResGW::template NodeMap - free1(erasing_res_graph); - - dfs.pushAndSetReached - ///\bug lemon 0.2 - (typename ErasingResGW::Node - (typename FilterResGW::Node - (typename ResGW::Node(s) - ) - ) - ); - while (!dfs.finished()) { - ++dfs; - if (erasing_res_graph.valid(typename ErasingResGW::OutEdgeIt(dfs))) - { - if (dfs.isBNodeNewlyReached()) { - - typename ErasingResGW::Node v=erasing_res_graph.aNode(dfs); - typename ErasingResGW::Node w=erasing_res_graph.bNode(dfs); - - pred.set(w, /*typename ErasingResGW::OutEdgeIt*/(dfs)); - if (erasing_res_graph.valid(pred[v])) { - free1.set - (w, std::min(free1[v], res_graph.resCap - (typename ErasingResGW::OutEdgeIt(dfs)))); - } else { - free1.set - (w, res_graph.resCap - (typename ErasingResGW::OutEdgeIt(dfs))); - } - - if (w==t) { - __augment=true; - _augment=true; - break; - } - } else { - erasing_res_graph.erase(dfs); - } - } - } - - if (__augment) { - typename ErasingResGW::Node - n=typename FilterResGW::Node(typename ResGW::Node(t)); - // typename ResGW::NodeMap a(res_graph); - // typename ResGW::Node b; - // Num j=a[b]; - // typename FilterResGW::NodeMap a1(filter_res_graph); - // typename FilterResGW::Node b1; - // Num j1=a1[b1]; - // typename ErasingResGW::NodeMap a2(erasing_res_graph); - // typename ErasingResGW::Node b2; - // Num j2=a2[b2]; - Num augment_value=free1[n]; - while (erasing_res_graph.valid(pred[n])) { - typename ErasingResGW::OutEdgeIt e=pred[n]; - res_graph.augment(e, augment_value); - n=erasing_res_graph.source(e); - if (res_graph.resCap(e)==0) - erasing_res_graph.erase(e); - } - } - - } //while (__augment) - - status=AFTER_AUGMENTING; - return _augment; - } - - -} //namespace lemon - -#endif //LEMON_MAX_FLOW_H - - - - diff -r ee5959aa4410 -r c280de819a73 src/work/jacint/max_flow_bug.cc --- a/src/work/jacint/max_flow_bug.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,163 +0,0 @@ -#include - -//#include -#include -#include -#include -//#include -#include - -using namespace lemon; - -int main(int, char **) { - -// typedef ListGraph Graph; - typedef SageGraph Graph; - - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph G; - Node s, t; - Graph::EdgeMap cap(G); - Graph::EdgeMap flow(G,0); - - readDimacs(std::cin, G, cap, s, t, flow); - Timer ts; - - std::cout << - "\n Running max_flow.h on a graph with " << - G.nodeNum() << " nodes and " << G.edgeNum() << " edges..." - << std::endl< max_flow_test_no_stack(G, s, t, cap, flow); - ts.reset(); - max_flow_test_no_stack.preflowPhase1(MaxFlow::PRE_FLOW); - std::cout << "Elapsed time of run() without stack: " << std::endl - < mincut(G); - max_flow_test_no_stack.minMinCut(mincut); - int min_min_cut_value=0; - EdgeIt e; - for(G.first(e); G.valid(e); G.next(e)) { - if (mincut[G.source(e)] && !mincut[G.target(e)]) min_min_cut_value+=cap[e]; - } - - Graph::NodeMap cut(G); - max_flow_test_no_stack.minCut(cut); - int min_cut_value=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (cut[G.source(e)] && !cut[G.target(e)]) - min_cut_value+=cap[e]; - } - - Graph::NodeMap maxcut(G); - max_flow_test_no_stack.maxMinCut(maxcut); - int max_min_cut_value=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (maxcut[G.source(e)] && !maxcut[G.target(e)]) - max_min_cut_value+=cap[e]; - } - - std::cout << "\n Checking the result without stack: " < flow2(G,0); - std::cout << "Calling setFlow() " << std::endl - << ts << std::endl; - max_flow_test.setFlow(flow2); - ts.reset(); - max_flow_test.preflow(max_flow_test.PRE_FLOW); - std::cout << "Elapsed time of preflow(PRE_FLOW) starting from the zero flow: " << std::endl - << ts << std::endl; - - Graph::NodeMap mincut2(G); - max_flow_test.minMinCut(mincut2); - int min_min_cut_value2=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (mincut2[G.source(e)] && !mincut2[G.target(e)]) min_min_cut_value2+=cap[e]; - } - - Graph::NodeMap cut2(G); - max_flow_test.minCut(cut2); - int min_cut_value2=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (cut2[G.source(e)] && !cut2[G.target(e)]) - min_cut_value2+=cap[e]; - } - - Graph::NodeMap maxcut2(G); - max_flow_test.maxMinCut(maxcut2); - int max_min_cut_value2=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (maxcut2[G.source(e)] && !maxcut2[G.target(e)]) - max_min_cut_value2+=cap[e]; - } - - std::cout << "\n Checking the result: " < max_flow_test3(G, s, t, cap, flow2); - max_flow_test3.run(max_flow_test3.GEN_FLOW); - std::cout << "Calling run(GEN_FLOW) from the max flow found before. " < mincut3(G); - max_flow_test3.minMinCut(mincut3); - int min_min_cut_value3=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (mincut3[G.source(e)] && !mincut3[G.target(e)]) min_min_cut_value3+=cap[e]; - } - - Graph::NodeMap cut3(G); - max_flow_test3.minCut(cut3); - int min_cut_value3=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (cut3[G.source(e)] && !cut3[G.target(e)]) - min_cut_value3+=cap[e]; - } - - Graph::NodeMap maxcut3(G); - max_flow_test3.maxMinCut(maxcut3); - int max_min_cut_value3=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (maxcut3[G.source(e)] && !maxcut3[G.target(e)]) - max_min_cut_value3+=cap[e]; - } - - std::cout << "\n Checking the result: " < - -#include -#include -#include -#include -#include - -using namespace lemon; - -int main(int, char **) { - - typedef ListGraph Graph; - - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph G; - Node s, t; - Graph::EdgeMap cap(G); - readDimacs(std::cin, G, cap, s, t); - Timer ts; - - std::cout << - "\n Running max_flow.h on a graph with " << - G.nodeNum() << " nodes and " << G.edgeNum() << " edges..." - << std::endl< flowstack(G,0); - MaxFlow max_flow_test(G, s, t, cap, flowstack); - ts.reset(); - max_flow_test.run(); - std::cout << "Elapsed time of run() with stl stack: " << std::endl - < flow(G,0); - MaxFlowNoStack max_flow_test_no_stack(G, s, t, cap, flow); - ts.reset(); - max_flow_test_no_stack.run(); - std::cout << "Elapsed time of run() without stack: " << std::endl - < mincut(G); - max_flow_test_no_stack.minMinCut(mincut); - int min_min_cut_value=0; - EdgeIt e; - for(G.first(e); G.valid(e); G.next(e)) { - if (mincut[G.source(e)] && !mincut[G.target(e)]) min_min_cut_value+=cap[e]; - } - - Graph::NodeMap cut(G); - max_flow_test_no_stack.minCut(cut); - int min_cut_value=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (cut[G.source(e)] && !cut[G.target(e)]) - min_cut_value+=cap[e]; - } - - Graph::NodeMap maxcut(G); - max_flow_test_no_stack.maxMinCut(maxcut); - int max_min_cut_value=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (maxcut[G.source(e)] && !maxcut[G.target(e)]) - max_min_cut_value+=cap[e]; - } - - std::cout << "\n Checking the result without stack: " < flow2(G,0); - std::cout << "Calling resetFlow() " << std::endl - << ts << std::endl; - max_flow_test.setFlow(flow2); - ts.reset(); - max_flow_test.preflow(max_flow_test.PRE_FLOW); - std::cout << "Elapsed time of preflow(PRE_FLOW) starting from the zero flow: " << std::endl - << ts << std::endl; - - Graph::NodeMap mincut2(G); - max_flow_test.minMinCut(mincut2); - int min_min_cut_value2=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (mincut2[G.source(e)] && !mincut2[G.target(e)]) min_min_cut_value2+=cap[e]; - } - - Graph::NodeMap cut2(G); - max_flow_test.minCut(cut2); - int min_cut_value2=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (cut2[G.source(e)] && !cut2[G.target(e)]) - min_cut_value2+=cap[e]; - } - - Graph::NodeMap maxcut2(G); - max_flow_test.maxMinCut(maxcut2); - int max_min_cut_value2=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (maxcut2[G.source(e)] && !maxcut2[G.target(e)]) - max_min_cut_value2+=cap[e]; - } - - std::cout << "\n Checking the result: " < max_flow_test3(G, s, t, cap, flow2); - max_flow_test3.run(max_flow_test3.GEN_FLOW); - std::cout << "Calling run(GEN_FLOW) from the max flow found before. " < mincut3(G); - max_flow_test3.minMinCut(mincut3); - int min_min_cut_value3=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (mincut3[G.source(e)] && !mincut3[G.target(e)]) min_min_cut_value3+=cap[e]; - } - - Graph::NodeMap cut3(G); - max_flow_test3.minCut(cut3); - int min_cut_value3=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (cut3[G.source(e)] && !cut3[G.target(e)]) - min_cut_value3+=cap[e]; - } - - Graph::NodeMap maxcut3(G); - max_flow_test3.maxMinCut(maxcut3); - int max_min_cut_value3=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (maxcut3[G.source(e)] && !maxcut3[G.target(e)]) - max_min_cut_value3+=cap[e]; - } - - std::cout << "\n Checking the result: " < -#include -#include - -#include -#include -#include -#include -#include -#include - -using namespace lemon; - -int main(int, char **) { - - typedef UndirGraph UGW; - typedef UGW::Edge Edge; - typedef UGW::EdgeIt EdgeIt; - typedef UGW::OutEdgeIt OutEdgeIt; - typedef UGW::NodeIt NodeIt; - typedef UGW::Node Node; - - UGW G; - - // random_init(); //If you want to use a random graph with a random - // number of edges and nodes. - - int i; - int j; - std::cout<<"Number of nodes: "; - std::cin >> i; - std::cout<<"Number of edges: "; - std::cin >> j; - - // readDimacs(std::cin, G); - randomGraph(G, i, j ); - - Timer ts; - bool noerror=true; - - std::cout << - "\n Testing max_matching.h on a random graph with " << - G.nodeNum() << " nodes and " << G.edgeNum() << " edges...\n" - << std::endl; - MaxMatching max_matching(G); - - - std::cout << - "Running the plain edmonds algorithm runEdmonds(0) using no heuristic... " - < mate(G,INVALID); - max_matching.writeNMapNode(mate); - NodeIt v; - for(G.first(v); G.valid(v); G.next(v) ) { - if ( G.valid(mate[v]) ) { - ++s; - } - } - int size=(int)s/2; //size will be used as the size of a maxmatching - std::cout << size << " is the size of the matching found by runEdmonds(0),"<::pos_enum> pos0(G); - max_matching.writePos(pos0); - std::cout << "OK" << std::endl; - - - std::cout << "Resetting the matching and the position by calling"<< std::endl; - std::cout<<"resetPos() and resetMatching()..."; - max_matching.resetPos(); - max_matching.resetMatching(); - std::cout <<"OK" << std::endl; - - - std::cout << "\nRunning runEdmonds(1) using the 'postpone shrink' heuristic ... " <::pos_enum> pos1(G); - max_matching.writePos(pos1); - - - std::cout << "\nStarting run() from the matching given by runEdmonds(1)... " <::pos_enum> pos2(G); - max_matching.writePos(pos2); - - - std::cout << "\nCalling resetPos() and resetMatching()..."; - max_matching.resetPos(); - max_matching.resetMatching(); - std::cout<<"OK"<::pos_enum> pos(G); - max_matching.writePos(pos); - - - std::cout<<"\nChecking if the output is a matching..."; - bool ismatching=true; - for(G.first(v); G.valid(v); G.next(v) ) - if ( G.valid(mate[v]) ) { - Node u=mate[v]; - if (mate[u]!=v) ismatching=false; - } - if ( ismatching ) std::cout<<"OK"< todo(G,true); - int num_comp=0; - for(G.first(v); G.valid(v); G.next(v) ) { - if ( pos[v]==max_matching.D && todo[v] ) { - int comp_size=1; - ++num_comp; - std::queue Q; - Q.push(v); - todo.set(v,false); - while (!Q.empty()) { - Node w=Q.front(); - Q.pop(); - OutEdgeIt e; - for(G.first(e,w); G.valid(e); G.next(e)) { - Node u=G.bNode(e); - if ( pos[u]==max_matching.D && todo[u] ) { - ++comp_size; - Q.push(u); - todo.set(u,false); - } - } - } - if ( !(comp_size % 2) ) oddcomp=false; - } - } - std::cout << "\n found " << num_comp << " component(s) of G[D],"; - if ( oddcomp ) std::cout<<" each is odd."< - -#include -#include - -namespace lemon { - - /// \addtogroup galgs - /// @{ - - ///Maximum matching algorithms class. - - ///This class provides Edmonds' alternating forest matching - ///algorithm. The starting matching (if any) can be passed to the - ///algorithm using read-in functions \ref readNMapNode, \ref - ///readNMapEdge or \ref readEMapBool depending on the container. The - ///resulting maximum matching can be attained by write-out functions - ///\ref writeNMapNode, \ref writeNMapEdge or \ref writeEMapBool - ///depending on the preferred container. - /// - ///The dual side of a mathcing is a map of the nodes to - ///MaxMatching::pos_enum, having values D, A and C showing the - ///Gallai-Edmonds decomposition of the graph. The nodes in D induce - ///a graph with factor-critical components, the nodes in A form the - ///barrier, and the nodes in C induce a graph having a perfect - ///matching. This decomposition can be attained by calling \ref - ///writePos after running the algorithm. Before subsequent runs, - ///the function \ref resetPos() must be called. - /// - ///\param Graph The undirected graph type the algorithm runs on. - /// - ///\author Jacint Szabo - template - class MaxMatching { - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - - typedef UnionFindEnum UFE; - - public: - - ///Indicates the Gallai-Edmonds decomposition of the graph. - - ///Indicates the Gallai-Edmonds decomposition of the graph, which - ///shows an upper bound on the size of a maximum matching. The - ///nodes with pos_enum \c D induce a graph with factor-critical - ///components, the nodes in \c A form the canonical barrier, and the - ///nodes in \c C induce a graph having a perfect matching. - enum pos_enum { - D=0, - A=1, - C=2 - }; - - private: - - const Graph& G; - typename Graph::template NodeMap mate; - typename Graph::template NodeMap position; - - public: - - MaxMatching(const Graph& _G) : G(_G), mate(_G,INVALID), position(_G,C) {} - - ///Runs Edmonds' algorithm. - - ///Runs Edmonds' algorithm for sparse graphs (edgeNum >= - ///2*nodeNum), and a heuristical Edmonds' algorithm with a - ///heuristic of postponing shrinks for dense graphs. \pre Before - ///the subsequent calls \ref resetPos must be called. - inline void run(); - - ///Runs Edmonds' algorithm. - - ///If heur=0 it runs Edmonds' algorithm. If heur=1 it runs - ///Edmonds' algorithm with a heuristic of postponing shrinks, - ///giving a faster algorithm for dense graphs. \pre Before the - ///subsequent calls \ref resetPos must be called. - void runEdmonds( int heur ); - - ///Finds a greedy matching starting from the actual matching. - - ///Starting form the actual matching stored, it finds a maximal - ///greedy matching. - void greedyMatching(); - - ///Returns the size of the actual matching stored. - - ///Returns the size of the actual matching stored. After \ref - ///run() it returns the size of a maximum matching in the graph. - int size () const; - - ///Resets the map storing the Gallai-Edmonds decomposition. - - ///Resets the map storing the Gallai-Edmonds decomposition of the - ///graph, making it possible to run the algorithm. Must be called - ///before all runs of the Edmonds algorithm, except for the first - ///run. - void resetPos(); - - ///Resets the actual matching to the empty matching. - - ///Resets the actual matching to the empty matching. - /// - void resetMatching(); - - ///Reads a matching from a \c Node map of \c Nodes. - - ///Reads a matching from a \c Node map of \c Nodes. This map must be \e - ///symmetric, i.e. if \c map[u]=v then \c map[v]=u must hold, and - ///now \c uv is an edge of the matching. - template - void readNMapNode(NMapN& map) { - NodeIt v; - for( G.first(v); G.valid(v); G.next(v)) { - mate.set(v,map[v]); - } - } - - ///Writes the stored matching to a \c Node map of \c Nodes. - - ///Writes the stored matching to a \c Node map of \c Nodes. The - ///resulting map will be \e symmetric, i.e. if \c map[u]=v then \c - ///map[v]=u will hold, and now \c uv is an edge of the matching. - template - void writeNMapNode (NMapN& map) const { - NodeIt v; - for( G.first(v); G.valid(v); G.next(v)) { - map.set(v,mate[v]); - } - } - - ///Reads a matching from a \c Node map of \c Edges. - - ///Reads a matching from a \c Node map of incident \c Edges. This - ///map must have the property that if \c G.bNode(map[u])=v then \c - ///G.bNode(map[v])=u must hold, and now this edge is an edge of - ///the matching. - template - void readNMapEdge(NMapE& map) { - NodeIt v; - for( G.first(v); G.valid(v); G.next(v)) { - Edge e=map[v]; - if ( G.valid(e) ) - G.source(e) == v ? mate.set(v,G.target(e)) : mate.set(v,G.source(e)); - } - } - - ///Writes the matching stored to a \c Node map of \c Edges. - - ///Writes the stored matching to a \c Node map of incident \c - ///Edges. This map will have the property that if \c - ///G.bNode(map[u])=v then \c G.bNode(map[v])=u holds, and now this - ///edge is an edge of the matching. - template - void writeNMapEdge (NMapE& map) const { - typename Graph::template NodeMap todo(G,false); - NodeIt v; - for( G.first(v); G.valid(v); G.next(v)) { - if ( mate[v]!=INVALID ) todo.set(v,true); - } - NodeIt e; - for( G.first(e); G.valid(e); G.next(e)) { - if ( todo[G.target(e)] && todo[G.source(e)] ) { - Node u=G.source(e); - Node v=G.target(e); - if ( mate[u]=v && mate[v]=u ) { - map.set(u,e); - map.set(v,e); - todo.set(u,false); - todo.set(v,false); - } - } - } - } - - ///Reads a matching from an \c Edge map of \c bools. - - ///Reads a matching from an \c Edge map of \c bools. This map must - ///have the property that there are no two adjacent edges \c e, \c - ///f with \c map[e]=map[f]=true. The edges \c e with \c - ///map[e]=true form the matching. - template - void readEMapBool(EMapB& map) { - EdgeIt e; - for( G.first(e); G.valid(e); G.next(e)) { - if ( G.valid(e) ) { - Node u=G.source(e); - Node v=G.target(e); - mate.set(u,v); - mate.set(v,u); - } - } - } - - - ///Writes the matching stored to an \c Edge map of \c bools. - - ///Writes the matching stored to an \c Edge map of \c bools. This - ///map will have the property that there are no two adjacent edges - ///\c e, \c f with \c map[e]=map[f]=true. The edges \c e with \c - ///map[e]=true form the matching. - template - void writeEMapBool (EMapB& map) const { - typename Graph::template NodeMap todo(G,false); - NodeIt v; - for( G.first(v); G.valid(v); G.next(v)) { - if ( mate[v]!=INVALID ) todo.set(v,true); - } - - NodeIt e; - for( G.first(e); G.valid(e); G.next(e)) { - map.set(e,false); - if ( todo[G.target(e)] && todo[G.source(e)] ) { - Node u=G.source(e); - Node v=G.target(e); - if ( mate[u]=v && mate[v]=u ) { - map.set(e,true); - todo.set(u,false); - todo.set(v,false); - } - } - } - } - - ///Writes the canonical decomposition of the graph after running - ///the algorithm. - - ///After calling any run methods of the class, and before calling - ///\ref resetPos(), it writes the Gallai-Edmonds canonical - ///decomposition of the graph. \c map must be a node map - ///of \ref pos_enum 's. - template - void writePos (NMapEnum& map) const { - NodeIt v; - for( G.first(v); G.valid(v); G.next(v)) map.set(v,position[v]); - } - - private: - - void lateShrink(Node v, typename Graph::template NodeMap& ear, - UFE& blossom, UFE& tree); - - void normShrink(Node v, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree); - - bool noShrinkStep(Node x, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree, std::queue& Q); - - void shrinkStep(Node& top, Node& middle, Node& bottom, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree, std::queue& Q); - - void augment(Node x, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree); - - }; - - - // ********************************************************************** - // IMPLEMENTATIONS - // ********************************************************************** - - - template - void MaxMatching::run() { - if ( G.edgeNum() > 2*G.nodeNum() ) { - greedyMatching(); - runEdmonds(1); - } else runEdmonds(0); - } - - template - void MaxMatching::runEdmonds( int heur=1 ) { - - typename Graph::template NodeMap ear(G,INVALID); - //undefined for the base nodes of the blossoms (i.e. for the - //representative elements of UFE blossom) and for the nodes in C - - typename UFE::MapType blossom_base(G); - UFE blossom(blossom_base); - typename UFE::MapType tree_base(G); - UFE tree(tree_base); - - NodeIt v; - for( G.first(v); G.valid(v); G.next(v) ) { - if ( position[v]==C && mate[v]==INVALID ) { - blossom.insert(v); - tree.insert(v); - position.set(v,D); - if ( heur == 1 ) lateShrink( v, ear, blossom, tree ); - else normShrink( v, ear, blossom, tree ); - } - } - } - - template - void MaxMatching::lateShrink(Node v, typename Graph::template NodeMap& ear, - UFE& blossom, UFE& tree) { - - std::queue Q; //queue of the totally unscanned nodes - Q.push(v); - std::queue R; - //queue of the nodes which must be scanned for a possible shrink - - while ( !Q.empty() ) { - Node x=Q.front(); - Q.pop(); - if ( noShrinkStep( x, ear, blossom, tree, Q ) ) return; - else R.push(x); - } - - while ( !R.empty() ) { - Node x=R.front(); - R.pop(); - - OutEdgeIt e; - for( G.first(e,x); G.valid(e); G.next(e) ) { - Node y=G.bNode(e); - - if ( position[y] == D && blossom.find(x) != blossom.find(y) ) { - //x and y must be in the same tree - - typename Graph::template NodeMap path(G,false); - - Node b=blossom.find(x); - path.set(b,true); - b=mate[b]; - while ( b!=INVALID ) { - b=blossom.find(ear[b]); - path.set(b,true); - b=mate[b]; - } //going till the root - - Node top=y; - Node middle=blossom.find(top); - Node bottom=x; - while ( !path[middle] ) - shrinkStep(top, middle, bottom, ear, blossom, tree, Q); - - Node base=middle; - top=x; - middle=blossom.find(top); - bottom=y; - Node blossom_base=blossom.find(base); - while ( middle!=blossom_base ) - shrinkStep(top, middle, bottom, ear, blossom, tree, Q); - - blossom.makeRep(base); - } // if shrink is needed - - while ( !Q.empty() ) { - Node x=Q.front(); - Q.pop(); - if ( noShrinkStep(x, ear, blossom, tree, Q) ) return; - else R.push(x); - } - } //for e - } // while ( !R.empty() ) - } - - template - void MaxMatching::normShrink(Node v, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree) { - - std::queue Q; //queue of the unscanned nodes - Q.push(v); - while ( !Q.empty() ) { - Node x=Q.front(); - Q.pop(); - - OutEdgeIt e; - for( G.first(e,x); G.valid(e); G.next(e) ) { - Node y=G.bNode(e); - - switch ( position[y] ) { - case D: //x and y must be in the same tree - if ( blossom.find(x) != blossom.find(y) ) { //shrink - typename Graph::template NodeMap path(G,false); - - Node b=blossom.find(x); - path.set(b,true); - b=mate[b]; - while ( b!=INVALID ) { - b=blossom.find(ear[b]); - path.set(b,true); - b=mate[b]; - } //going till the root - - Node top=y; - Node middle=blossom.find(top); - Node bottom=x; - while ( !path[middle] ) - shrinkStep(top, middle, bottom, ear, blossom, tree, Q); - - Node base=middle; - top=x; - middle=blossom.find(top); - bottom=y; - Node blossom_base=blossom.find(base); - while ( middle!=blossom_base ) - shrinkStep(top, middle, bottom, ear, blossom, tree, Q); - - blossom.makeRep(base); - } - break; - case C: - if ( mate[y]!=INVALID ) { //grow - ear.set(y,x); - Node w=mate[y]; - blossom.insert(w); - position.set(y,A); - position.set(w,D); - tree.insert(y); - tree.insert(w); - tree.join(y,blossom.find(x)); - tree.join(w,y); - Q.push(w); - } else { //augment - augment(x, ear, blossom, tree); - mate.set(x,y); - mate.set(y,x); - return; - } //if - break; - default: break; - } - } - } - } - - template - void MaxMatching::greedyMatching() { - NodeIt v; - for( G.first(v); G.valid(v); G.next(v) ) - if ( mate[v]==INVALID ) { - OutEdgeIt e; - for( G.first(e,v); G.valid(e); G.next(e) ) { - Node y=G.bNode(e); - if ( mate[y]==INVALID && y!=v ) { - mate.set(v,y); - mate.set(y,v); - break; - } - } - } - } - - template - int MaxMatching::size() const { - int s=0; - NodeIt v; - for(G.first(v); G.valid(v); G.next(v) ) { - if ( G.valid(mate[v]) ) { - ++s; - } - } - return (int)s/2; - } - - template - void MaxMatching::resetPos() { - NodeIt v; - for( G.first(v); G.valid(v); G.next(v)) - position.set(v,C); - } - - template - void MaxMatching::resetMatching() { - NodeIt v; - for( G.first(v); G.valid(v); G.next(v)) - mate.set(v,INVALID); - } - - template - bool MaxMatching::noShrinkStep(Node x, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree, std::queue& Q) { - OutEdgeIt e; - for( G.first(e,x); G.valid(e); G.next(e) ) { - Node y=G.bNode(e); - - if ( position[y]==C ) { - if ( mate[y]!=INVALID ) { //grow - ear.set(y,x); - Node w=mate[y]; - blossom.insert(w); - position.set(y,A); - position.set(w,D); - tree.insert(y); - tree.insert(w); - tree.join(y,blossom.find(x)); - tree.join(w,y); - Q.push(w); - } else { //augment - augment(x, ear, blossom, tree); - mate.set(x,y); - mate.set(y,x); - return true; - } - } - } - return false; - } - - template - void MaxMatching::shrinkStep(Node& top, Node& middle, Node& bottom, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree, std::queue& Q) { - ear.set(top,bottom); - Node t=top; - while ( t!=middle ) { - Node u=mate[t]; - t=ear[u]; - ear.set(t,u); - } - bottom=mate[middle]; - position.set(bottom,D); - Q.push(bottom); - top=ear[bottom]; - Node oldmiddle=middle; - middle=blossom.find(top); - tree.erase(bottom); - tree.erase(oldmiddle); - blossom.insert(bottom); - blossom.join(bottom, oldmiddle); - blossom.join(top, oldmiddle); - } - - template - void MaxMatching::augment(Node x, typename Graph::NodeMap& ear, - UFE& blossom, UFE& tree) { - Node v=mate[x]; - while ( G.valid(v) ) { - - Node u=ear[v]; - mate.set(v,u); - Node tmp=v; - v=mate[u]; - mate.set(u,tmp); - } - typename UFE::ItemIt it; - for (tree.first(it,blossom.find(x)); tree.valid(it); tree.next(it)) { - if ( position[it] == D ) { - typename UFE::ItemIt b_it; - for (blossom.first(b_it,it); blossom.valid(b_it); blossom.next(b_it)) { - position.set( b_it ,C); - } - blossom.eraseClass(it); - } else position.set( it ,C); - } - tree.eraseClass(x); - } - - - - /// @} - -} //END OF NAMESPACE LEMON - -#endif //EDMONDS_H diff -r ee5959aa4410 -r c280de819a73 src/work/jacint/max_save.h --- a/src/work/jacint/max_save.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1136 +0,0 @@ -// -*- C++ -*- -#ifndef LEMON_MAX_FLOW_H -#define LEMON_MAX_FLOW_H - -///\ingroup galgs -///\file -///\brief Maximum flow algorithm. - -#define H0 20 -#define H1 1 - -#include -#include -#include - -#include -#include -#include -#include -#include - -/// \file -/// \brief Dimacs file format reader. - -namespace lemon { - - /// \addtogroup galgs - /// @{ - - ///Maximum flow algorithms class. - - ///This class provides various algorithms for finding a flow of - ///maximum value in a directed graph. The \e source node, the \e - ///target node, the \e capacity of the edges and the \e starting \e - ///flow value of the edges can be passed to the algorithm by the - ///constructor. It is possible to change these quantities using the - ///functions \ref resetSource, \ref resetTarget, \ref resetCap and - ///\ref resetFlow. Before any subsequent runs of any algorithm of - ///the class \ref resetFlow should be called, otherwise it will - ///start from a maximum flow. - - ///After running an algorithm of the class, the maximum value of a - ///value can be obtained by calling \ref flowValue(). The minimum - ///value cut can be written into a \c node map of \c bools by - ///calling \ref minCut. (\ref minMinCut and \ref maxMinCut writes - ///the inclusionwise minimum and maximum of the minimum value - ///cuts, resp.) - - ///\param Graph The undirected graph type the algorithm runs on. - ///\param Num The number type of the capacities and the flow values. - ///\param The type of the capacity map. - ///\param The type of the flow map. - - ///\author Marton Makai, Jacint Szabo - template , - typename FlowMap=typename Graph::template EdgeMap > - class MaxFlow { - - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - - typedef typename std::vector > VecStack; - typedef typename Graph::template NodeMap NNMap; - typedef typename std::vector VecNode; - - typedef ResGraphWrapper ResGW; - typedef typename ResGW::OutEdgeIt ResGWOutEdgeIt; - typedef typename ResGW::Edge ResGWEdge; - //typedef typename ResGW::template NodeMap ReachedMap; //fixme - typedef typename Graph::template NodeMap ReachedMap; - - const Graph* g; - Node s; - Node t; - const CapMap* capacity; - FlowMap* flow; - int n; //the number of nodes of G - - //level works as a bool map in augmenting path algorithms and is - //used by bfs for storing reached information. In preflow, it - //shows the levels of nodes. - ReachedMap level; - - //excess is needed only in preflow - typename Graph::template NodeMap excess; - - - //fixme - // protected: - // MaxFlow() { } - // void set(const Graph& _G, Node _s, Node _t, const CapMap& _capacity, - // FlowMap& _flow) - // { - // g=&_G; - // s=_s; - // t=_t; - // capacity=&_capacity; - // flow=&_flow; - // n=_G.nodeNum; - // level.set (_G); //kellene vmi ilyesmi fv - // excess(_G,0); //itt is - // } - - public: - - ///Indicates the property of the starting flow. - - ///Indicates the property of the starting flow. The meanings: - ///- \c ZERO_FLOW: constant zero flow - ///- \c GEN_FLOW: any flow, i.e. the sum of the in-flows equals to - ///the sum of the out-flows in every node except the source and - ///the target. - ///- \c PRE_FLOW: any preflow, i.e. the sum of the in-flows is at - ///least the sum of the out-flows in every node except the source. - enum flowEnum{ - ZERO_FLOW=0, - GEN_FLOW=1, - PRE_FLOW=2 - }; - - MaxFlow(const Graph& _G, Node _s, Node _t, const CapMap& _capacity, - FlowMap& _flow) : - g(&_G), s(_s), t(_t), capacity(&_capacity), - flow(&_flow), n(_G.nodeNum()), level(_G), excess(_G,0) {} - - ///Runs a maximum flow algorithm. - - ///Runs a preflow algorithm, which is the fastest maximum flow - ///algorithm up-to-date. The default for \c fe is ZERO_FLOW. - ///\pre The starting flow must be a - /// - constant zero flow if \c fe is \c ZERO_FLOW, - /// - an arbitary flow if \c fe is \c GEN_FLOW, - /// - an arbitary preflow if \c fe is \c PRE_FLOW. - void run( flowEnum fe=ZERO_FLOW ) { - preflow(fe); - } - - ///Runs a preflow algorithm. - - ///Runs a preflow algorithm. The preflow algorithms provide the - ///fastest way to compute a maximum flow in a directed graph. - ///\pre The starting flow must be a - /// - constant zero flow if \c fe is \c ZERO_FLOW, - /// - an arbitary flow if \c fe is \c GEN_FLOW, - /// - an arbitary preflow if \c fe is \c PRE_FLOW. - void preflow(flowEnum fe) { - preflowPhase1(fe); - preflowPhase2(); - } - // Heuristics: - // 2 phase - // gap - // list 'level_list' on the nodes on level i implemented by hand - // stack 'active' on the active nodes on level i - // runs heuristic 'highest label' for H1*n relabels - // runs heuristic 'bound decrease' for H0*n relabels, starts with 'highest label' - // Parameters H0 and H1 are initialized to 20 and 1. - - ///Runs the first phase of the preflow algorithm. - - ///The preflow algorithm consists of two phases, this method runs the - ///first phase. After the first phase the maximum flow value and a - ///minimum value cut can already be computed, though a maximum flow - ///is net yet obtained. So after calling this method \ref flowValue - ///and \ref actMinCut gives proper results. - ///\warning: \ref minCut, \ref minMinCut and \ref maxMinCut do not - ///give minimum value cuts unless calling \ref preflowPhase2. - ///\pre The starting flow must be a - /// - constant zero flow if \c fe is \c ZERO_FLOW, - /// - an arbitary flow if \c fe is \c GEN_FLOW, - /// - an arbitary preflow if \c fe is \c PRE_FLOW. - void preflowPhase1( flowEnum fe ); - - ///Runs the second phase of the preflow algorithm. - - ///The preflow algorithm consists of two phases, this method runs - ///the second phase. After calling \ref preflowPhase1 and then - ///\ref preflowPhase2 the methods \ref flowValue, \ref minCut, - ///\ref minMinCut and \ref maxMinCut give proper results. - ///\pre \ref preflowPhase1 must be called before. - void preflowPhase2(); - - /// Starting from a flow, this method searches for an augmenting path - /// according to the Edmonds-Karp algorithm - /// and augments the flow on if any. - /// The return value shows if the augmentation was successful. - bool augmentOnShortestPath(); - - /// Starting from a flow, this method searches for an augmenting blockin - /// flow according to Dinits' algorithm and augments the flow on if any. - /// The blocking flow is computed in a physically constructed - /// residual graph of type \c Mutablegraph. - /// The return value show sif the augmentation was succesful. - template bool augmentOnBlockingFlow(); - - /// The same as \c augmentOnBlockingFlow but the - /// residual graph is not constructed physically. - /// The return value shows if the augmentation was succesful. - bool augmentOnBlockingFlow2(); - - /// Returns the actual flow value. - /// More precisely, it returns the negative excess of s, thus - /// this works also for preflows. - ///Can be called already after \ref preflowPhase1. - - Num flowValue() { - Num a=0; - FOR_EACH_INC_LOC(OutEdgeIt, e, *g, s) a+=(*flow)[e]; - FOR_EACH_INC_LOC(InEdgeIt, e, *g, s) a-=(*flow)[e]; - return a; - //marci figyu: excess[t] epp ezt adja preflow 0. fazisa utan - } - - ///Returns a minimum value cut after calling \ref preflowPhase1. - - ///After the first phase of the preflow algorithm the maximum flow - ///value and a minimum value cut can already be computed. This - ///method can be called after running \ref preflowPhase1 for - ///obtaining a minimum value cut. - ///\warning: Gives proper result only right after calling \ref - ///preflowPhase1. - ///\todo We have to make some status variable which shows the actual state - /// of the class. This enables us to determine which methods are valid - /// for MinCut computation - template - void actMinCut(_CutMap& M) { - NodeIt v; - for(g->first(v); g->valid(v); g->next(v)) { - if ( level[v] < n ) { - M.set(v,false); - } else { - M.set(v,true); - } - } - } - - ///Returns the inclusionwise minimum of the minimum value cuts. - - ///Sets \c M to the characteristic vector of the minimum value cut - ///which is inclusionwise minimum. It is computed by processing - ///a bfs from the source node \c s in the residual graph. - ///\pre M should be a node map of bools initialized to false. - ///\pre \c flow must be a maximum flow. - template - void minMinCut(_CutMap& M) { - - std::queue queue; - - M.set(s,true); - queue.push(s); - - while (!queue.empty()) { - Node w=queue.front(); - queue.pop(); - - OutEdgeIt e; - for(g->first(e,w) ; g->valid(e); g->next(e)) { - Node v=g->target(e); - if (!M[v] && (*flow)[e] < (*capacity)[e] ) { - queue.push(v); - M.set(v, true); - } - } - - InEdgeIt f; - for(g->first(f,w) ; g->valid(f); g->next(f)) { - Node v=g->source(f); - if (!M[v] && (*flow)[f] > 0 ) { - queue.push(v); - M.set(v, true); - } - } - } - } - - - ///Returns the inclusionwise maximum of the minimum value cuts. - - ///Sets \c M to the characteristic vector of the minimum value cut - ///which is inclusionwise maximum. It is computed by processing a - ///backward bfs from the target node \c t in the residual graph. - ///\pre M should be a node map of bools initialized to false. - ///\pre \c flow must be a maximum flow. - template - void maxMinCut(_CutMap& M) { - - NodeIt v; - for(g->first(v) ; g->valid(v); g->next(v)) { - M.set(v, true); - } - - std::queue queue; - - M.set(t,false); - queue.push(t); - - while (!queue.empty()) { - Node w=queue.front(); - queue.pop(); - - - InEdgeIt e; - for(g->first(e,w) ; g->valid(e); g->next(e)) { - Node v=g->source(e); - if (M[v] && (*flow)[e] < (*capacity)[e] ) { - queue.push(v); - M.set(v, false); - } - } - - OutEdgeIt f; - for(g->first(f,w) ; g->valid(f); g->next(f)) { - Node v=g->target(f); - if (M[v] && (*flow)[f] > 0 ) { - queue.push(v); - M.set(v, false); - } - } - } - } - - - ///Returns a minimum value cut. - - ///Sets \c M to the characteristic vector of a minimum value cut. - ///\pre M should be a node map of bools initialized to false. - ///\pre \c flow must be a maximum flow. - template - void minCut(CutMap& M) { minMinCut(M); } - - ///Resets the source node to \c _s. - - ///Resets the source node to \c _s. - /// - void resetSource(Node _s) { s=_s; } - - - ///Resets the target node to \c _t. - - ///Resets the target node to \c _t. - /// - void resetTarget(Node _t) { t=_t; } - - /// Resets the edge map of the capacities to _cap. - - /// Resets the edge map of the capacities to _cap. - /// - void resetCap(const CapMap& _cap) { capacity=&_cap; } - - /// Resets the edge map of the flows to _flow. - - /// Resets the edge map of the flows to _flow. - /// - void resetFlow(FlowMap& _flow) { flow=&_flow; } - - - private: - - int push(Node w, VecStack& active) { - - int lev=level[w]; - Num exc=excess[w]; - int newlevel=n; //bound on the next level of w - - OutEdgeIt e; - for(g->first(e,w); g->valid(e); g->next(e)) { - - if ( (*flow)[e] >= (*capacity)[e] ) continue; - Node v=g->target(e); - - if( lev > level[v] ) { //Push is allowed now - - if ( excess[v]<=0 && v!=t && v!=s ) { - int lev_v=level[v]; - active[lev_v].push(v); - } - - Num cap=(*capacity)[e]; - Num flo=(*flow)[e]; - Num remcap=cap-flo; - - if ( remcap >= exc ) { //A nonsaturating push. - - flow->set(e, flo+exc); - excess.set(v, excess[v]+exc); - exc=0; - break; - - } else { //A saturating push. - flow->set(e, cap); - excess.set(v, excess[v]+remcap); - exc-=remcap; - } - } else if ( newlevel > level[v] ) newlevel = level[v]; - } //for out edges wv - - if ( exc > 0 ) { - InEdgeIt e; - for(g->first(e,w); g->valid(e); g->next(e)) { - - if( (*flow)[e] <= 0 ) continue; - Node v=g->source(e); - - if( lev > level[v] ) { //Push is allowed now - - if ( excess[v]<=0 && v!=t && v!=s ) { - int lev_v=level[v]; - active[lev_v].push(v); - } - - Num flo=(*flow)[e]; - - if ( flo >= exc ) { //A nonsaturating push. - - flow->set(e, flo-exc); - excess.set(v, excess[v]+exc); - exc=0; - break; - } else { //A saturating push. - - excess.set(v, excess[v]+flo); - exc-=flo; - flow->set(e,0); - } - } else if ( newlevel > level[v] ) newlevel = level[v]; - } //for in edges vw - - } // if w still has excess after the out edge for cycle - - excess.set(w, exc); - - return newlevel; - } - - - void preflowPreproc ( flowEnum fe, VecStack& active, - VecNode& level_list, NNMap& left, NNMap& right ) { - - std::queue bfs_queue; - - switch ( fe ) { - case ZERO_FLOW: - { - //Reverse_bfs from t, to find the starting level. - level.set(t,0); - bfs_queue.push(t); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(g->first(e,v); g->valid(e); g->next(e)) { - Node w=g->source(e); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( g->valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - } - - //the starting flow - OutEdgeIt e; - for(g->first(e,s); g->valid(e); g->next(e)) - { - Num c=(*capacity)[e]; - if ( c <= 0 ) continue; - Node w=g->target(e); - if ( level[w] < n ) { - if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); - flow->set(e, c); - excess.set(w, excess[w]+c); - } - } - break; - } - - case GEN_FLOW: - case PRE_FLOW: - { - //Reverse_bfs from t in the residual graph, - //to find the starting level. - level.set(t,0); - bfs_queue.push(t); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(g->first(e,v); g->valid(e); g->next(e)) { - if ( (*capacity)[e] <= (*flow)[e] ) continue; - Node w=g->source(e); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( g->valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - - OutEdgeIt f; - for(g->first(f,v); g->valid(f); g->next(f)) { - if ( 0 >= (*flow)[f] ) continue; - Node w=g->target(f); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( g->valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - } - - - //the starting flow - OutEdgeIt e; - for(g->first(e,s); g->valid(e); g->next(e)) - { - Num rem=(*capacity)[e]-(*flow)[e]; - if ( rem <= 0 ) continue; - Node w=g->target(e); - if ( level[w] < n ) { - if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); - flow->set(e, (*capacity)[e]); - excess.set(w, excess[w]+rem); - } - } - - InEdgeIt f; - for(g->first(f,s); g->valid(f); g->next(f)) - { - if ( (*flow)[f] <= 0 ) continue; - Node w=g->source(f); - if ( level[w] < n ) { - if ( excess[w] <= 0 && w!=t ) active[level[w]].push(w); - excess.set(w, excess[w]+(*flow)[f]); - flow->set(f, 0); - } - } - break; - } //case PRE_FLOW - } - } //preflowPreproc - - - - void relabel(Node w, int newlevel, VecStack& active, - VecNode& level_list, NNMap& left, - NNMap& right, int& b, int& k, bool what_heur ) - { - - Num lev=level[w]; - - Node right_n=right[w]; - Node left_n=left[w]; - - //unlacing starts - if ( g->valid(right_n) ) { - if ( g->valid(left_n) ) { - right.set(left_n, right_n); - left.set(right_n, left_n); - } else { - level_list[lev]=right_n; - left.set(right_n, INVALID); - } - } else { - if ( g->valid(left_n) ) { - right.set(left_n, INVALID); - } else { - level_list[lev]=INVALID; - } - } - //unlacing ends - - if ( !g->valid(level_list[lev]) ) { - - //gapping starts - for (int i=lev; i!=k ; ) { - Node v=level_list[++i]; - while ( g->valid(v) ) { - level.set(v,n); - v=right[v]; - } - level_list[i]=INVALID; - if ( !what_heur ) { - while ( !active[i].empty() ) { - active[i].pop(); //FIXME: ezt szebben kene - } - } - } - - level.set(w,n); - b=lev-1; - k=b; - //gapping ends - - } else { - - if ( newlevel == n ) level.set(w,n); - else { - level.set(w,++newlevel); - active[newlevel].push(w); - if ( what_heur ) b=newlevel; - if ( k < newlevel ) ++k; //now k=newlevel - Node first=level_list[newlevel]; - if ( g->valid(first) ) left.set(first,w); - right.set(w,first); - left.set(w,INVALID); - level_list[newlevel]=w; - } - } - - } //relabel - - - template - class DistanceMap { - protected: - const MapGraphWrapper* g; - typename MapGraphWrapper::template NodeMap dist; - public: - DistanceMap(MapGraphWrapper& _g) : g(&_g), dist(*g, g->nodeNum()) { } - void set(const typename MapGraphWrapper::Node& n, int a) { - dist.set(n, a); - } - int operator[](const typename MapGraphWrapper::Node& n) - { return dist[n]; } - // int get(const typename MapGraphWrapper::Node& n) const { - // return dist[n]; } - // bool get(const typename MapGraphWrapper::Edge& e) const { - // return (dist.get(g->source(e))target(e))); } - bool operator[](const typename MapGraphWrapper::Edge& e) const { - return (dist[g->source(e)]target(e)]); - } - }; - - }; - - - template - void MaxFlow::preflowPhase1( flowEnum fe ) - { - - int heur0=(int)(H0*n); //time while running 'bound decrease' - int heur1=(int)(H1*n); //time while running 'highest label' - int heur=heur1; //starting time interval (#of relabels) - int numrelabel=0; - - bool what_heur=1; - //It is 0 in case 'bound decrease' and 1 in case 'highest label' - - bool end=false; - //Needed for 'bound decrease', true means no active nodes are above bound b. - - int k=n-2; //bound on the highest level under n containing a node - int b=k; //bound on the highest level under n of an active node - - VecStack active(n); - - NNMap left(*g, INVALID); - NNMap right(*g, INVALID); - VecNode level_list(n,INVALID); - //List of the nodes in level ifirst(v); g->valid(v); g->next(v)) level.set(v,n); - //setting each node to level n - - switch ( fe ) { - case PRE_FLOW: - { - //counting the excess - NodeIt v; - for(g->first(v); g->valid(v); g->next(v)) { - Num exc=0; - - InEdgeIt e; - for(g->first(e,v); g->valid(e); g->next(e)) exc+=(*flow)[e]; - OutEdgeIt f; - for(g->first(f,v); g->valid(f); g->next(f)) exc-=(*flow)[f]; - - excess.set(v,exc); - - //putting the active nodes into the stack - int lev=level[v]; - if ( exc > 0 && lev < n && v != t ) active[lev].push(v); - } - break; - } - case GEN_FLOW: - { - //Counting the excess of t - Num exc=0; - - InEdgeIt e; - for(g->first(e,t); g->valid(e); g->next(e)) exc+=(*flow)[e]; - OutEdgeIt f; - for(g->first(f,t); g->valid(f); g->next(f)) exc-=(*flow)[f]; - - excess.set(t,exc); - - break; - } - default: - break; - } - - preflowPreproc( fe, active, level_list, left, right ); - //End of preprocessing - - - //Push/relabel on the highest level active nodes. - while ( true ) { - if ( b == 0 ) { - if ( !what_heur && !end && k > 0 ) { - b=k; - end=true; - } else break; - } - - if ( active[b].empty() ) --b; - else { - end=false; - Node w=active[b].top(); - active[b].pop(); - int newlevel=push(w,active); - if ( excess[w] > 0 ) relabel(w, newlevel, active, level_list, - left, right, b, k, what_heur); - - ++numrelabel; - if ( numrelabel >= heur ) { - numrelabel=0; - if ( what_heur ) { - what_heur=0; - heur=heur0; - end=false; - } else { - what_heur=1; - heur=heur1; - b=k; - } - } - } - } - } - - - - template - void MaxFlow::preflowPhase2() - { - - int k=n-2; //bound on the highest level under n containing a node - int b=k; //bound on the highest level under n of an active node - - VecStack active(n); - level.set(s,0); - std::queue bfs_queue; - bfs_queue.push(s); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(g->first(e,v); g->valid(e); g->next(e)) { - if ( (*capacity)[e] <= (*flow)[e] ) continue; - Node u=g->source(e); - if ( level[u] >= n ) { - bfs_queue.push(u); - level.set(u, l); - if ( excess[u] > 0 ) active[l].push(u); - } - } - - OutEdgeIt f; - for(g->first(f,v); g->valid(f); g->next(f)) { - if ( 0 >= (*flow)[f] ) continue; - Node u=g->target(f); - if ( level[u] >= n ) { - bfs_queue.push(u); - level.set(u, l); - if ( excess[u] > 0 ) active[l].push(u); - } - } - } - b=n-2; - - while ( true ) { - - if ( b == 0 ) break; - - if ( active[b].empty() ) --b; - else { - Node w=active[b].top(); - active[b].pop(); - int newlevel=push(w,active); - - //relabel - if ( excess[w] > 0 ) { - level.set(w,++newlevel); - active[newlevel].push(w); - b=newlevel; - } - } // if stack[b] is nonempty - } // while(true) - } - - - - template - bool MaxFlow::augmentOnShortestPath() - { - ResGW res_graph(*g, *capacity, *flow); - bool _augment=false; - - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - bfs.pushAndSetReached(s); - - typename ResGW::template NodeMap pred(res_graph); - pred.set(s, INVALID); - - typename ResGW::template NodeMap free(res_graph); - - //searching for augmenting path - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - Node v=res_graph.source(e); - Node w=res_graph.target(e); - pred.set(w, e); - if (res_graph.valid(pred[v])) { - free.set(w, std::min(free[v], res_graph.resCap(e))); - } else { - free.set(w, res_graph.resCap(e)); - } - if (res_graph.target(e)==t) { _augment=true; break; } - } - - ++bfs; - } //end of searching augmenting path - - if (_augment) { - Node n=t; - Num augment_value=free[t]; - while (res_graph.valid(pred[n])) { - ResGWEdge e=pred[n]; - res_graph.augment(e, augment_value); - n=res_graph.source(e); - } - } - - return _augment; - } - - - - - - - - - - template - template - bool MaxFlow::augmentOnBlockingFlow() - { - typedef MutableGraph MG; - bool _augment=false; - - ResGW res_graph(*g, *capacity, *flow); - - //bfs for distances on the residual graph - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - bfs.pushAndSetReached(s); - typename ResGW::template NodeMap - dist(res_graph); //filled up with 0's - - //F will contain the physical copy of the residual graph - //with the set of edges which are on shortest paths - MG F; - typename ResGW::template NodeMap - res_graph_to_F(res_graph); - { - typename ResGW::NodeIt n; - for(res_graph.first(n); res_graph.valid(n); res_graph.next(n)) { - res_graph_to_F.set(n, F.addNode()); - } - } - - typename MG::Node sF=res_graph_to_F[s]; - typename MG::Node tF=res_graph_to_F[t]; - typename MG::template EdgeMap original_edge(F); - typename MG::template EdgeMap residual_capacity(F); - - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e)) { - if (bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); - typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], res_graph_to_F[res_graph.target(e)]); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } else { - if (dist[res_graph.target(e)]==(dist[res_graph.source(e)]+1)) { - typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], res_graph_to_F[res_graph.target(e)]); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } - } - } - ++bfs; - } //computing distances from s in the residual graph - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - DfsIterator< MG, typename MG::template NodeMap > dfs(F); - typename MG::template NodeMap pred(F); - pred.set(sF, INVALID); - //invalid iterators for sources - - typename MG::template NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) { - if (dfs.isBNodeNewlyReached()) { - typename MG::Node v=F.aNode(dfs); - typename MG::Node w=F.bNode(dfs); - pred.set(w, dfs); - if (F.valid(pred[v])) { - free.set(w, std::min(free[v], residual_capacity[dfs])); - } else { - free.set(w, residual_capacity[dfs]); - } - if (w==tF) { - __augment=true; - _augment=true; - break; - } - - } else { - F.erase(/*typename MG::OutEdgeIt*/(dfs)); - } - } - } - - if (__augment) { - typename MG::Node n=tF; - Num augment_value=free[tF]; - while (F.valid(pred[n])) { - typename MG::Edge e=pred[n]; - res_graph.augment(original_edge[e], augment_value); - n=F.source(e); - if (residual_capacity[e]==augment_value) - F.erase(e); - else - residual_capacity.set(e, residual_capacity[e]-augment_value); - } - } - - } - - return _augment; - } - - - - - - - template - bool MaxFlow::augmentOnBlockingFlow2() - { - bool _augment=false; - - ResGW res_graph(*g, *capacity, *flow); - - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - - bfs.pushAndSetReached(s); - DistanceMap dist(res_graph); - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); - } - ++bfs; - } //computing distances from s in the residual graph - - //Subgraph containing the edges on some shortest paths - ConstMap true_map(true); - typedef SubGraphWrapper, - DistanceMap > FilterResGW; - FilterResGW filter_res_graph(res_graph, true_map, dist); - - //Subgraph, which is able to delete edges which are already - //met by the dfs - typename FilterResGW::template NodeMap - first_out_edges(filter_res_graph); - typename FilterResGW::NodeIt v; - for(filter_res_graph.first(v); filter_res_graph.valid(v); - filter_res_graph.next(v)) - { - typename FilterResGW::OutEdgeIt e; - filter_res_graph.first(e, v); - first_out_edges.set(v, e); - } - typedef ErasingFirstGraphWrapper > ErasingResGW; - ErasingResGW erasing_res_graph(filter_res_graph, first_out_edges); - - bool __augment=true; - - while (__augment) { - - __augment=false; - //computing blocking flow with dfs - DfsIterator< ErasingResGW, - typename ErasingResGW::template NodeMap > - dfs(erasing_res_graph); - typename ErasingResGW:: - template NodeMap - pred(erasing_res_graph); - pred.set(s, INVALID); - //invalid iterators for sources - - typename ErasingResGW::template NodeMap - free1(erasing_res_graph); - - dfs.pushAndSetReached( - typename ErasingResGW::Node( - typename FilterResGW::Node( - typename ResGW::Node(s) - ) - ) - ); - while (!dfs.finished()) { - ++dfs; - if (erasing_res_graph.valid( - typename ErasingResGW::OutEdgeIt(dfs))) - { - if (dfs.isBNodeNewlyReached()) { - - typename ErasingResGW::Node v=erasing_res_graph.aNode(dfs); - typename ErasingResGW::Node w=erasing_res_graph.bNode(dfs); - - pred.set(w, /*typename ErasingResGW::OutEdgeIt*/(dfs)); - if (erasing_res_graph.valid(pred[v])) { - free1.set(w, std::min(free1[v], res_graph.resCap( - typename ErasingResGW::OutEdgeIt(dfs)))); - } else { - free1.set(w, res_graph.resCap( - typename ErasingResGW::OutEdgeIt(dfs))); - } - - if (w==t) { - __augment=true; - _augment=true; - break; - } - } else { - erasing_res_graph.erase(dfs); - } - } - } - - if (__augment) { - typename ErasingResGW::Node n=typename FilterResGW::Node(typename ResGW::Node(t)); - // typename ResGW::NodeMap a(res_graph); - // typename ResGW::Node b; - // Num j=a[b]; - // typename FilterResGW::NodeMap a1(filter_res_graph); - // typename FilterResGW::Node b1; - // Num j1=a1[b1]; - // typename ErasingResGW::NodeMap a2(erasing_res_graph); - // typename ErasingResGW::Node b2; - // Num j2=a2[b2]; - Num augment_value=free1[n]; - while (erasing_res_graph.valid(pred[n])) { - typename ErasingResGW::OutEdgeIt e=pred[n]; - res_graph.augment(e, augment_value); - n=erasing_res_graph.source(e); - if (res_graph.resCap(e)==0) - erasing_res_graph.erase(e); - } - } - - } //while (__augment) - - return _augment; - } - - - - /// @} - -} //END OF NAMESPACE LEMON - -#endif //LEMON_MAX_FLOW_H - - - - diff -r ee5959aa4410 -r c280de819a73 src/work/jacint/preflow.cc --- a/src/work/jacint/preflow.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,264 +0,0 @@ -#include - -#include -#include -#include -#include - -using namespace lemon; - -int main(int, char **) { - - typedef SmartGraph Graph; - - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph G; - Node s, t; - Graph::EdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - Timer ts; - bool error=false; - - std::cout << - "\n Testing preflow.h on a graph with " << - G.nodeNum() << " nodes and " << G.edgeNum() << " edges..." - << std::endl; - - - Graph::EdgeMap flow(G,0); - Preflow preflow_test(G, s, t, cap, flow); - std::cout << "\nCalling run() (flow must be constant zero)..."< mincut(G); - preflow_test.minMinCut(mincut); - int min_min_cut_value=0; - Graph::NodeMap cut(G); - preflow_test.minCut(cut); - int min_cut_value=0; - Graph::NodeMap maxcut(G); - preflow_test.maxMinCut(maxcut); - int max_min_cut_value=0; - EdgeIt e; - for(G.first(e); G.valid(e); G.next(e)) { - int c=cap[e]; - if (mincut[G.source(e)] && !mincut[G.target(e)]) min_min_cut_value+=c; - if (cut[G.source(e)] && !cut[G.target(e)]) min_cut_value+=c; - if (maxcut[G.source(e)] && !maxcut[G.target(e)]) max_min_cut_value+=c; - } - - std::cout << "\nChecking the result: " < preflow_test2(G, s, t, cap, flow); - std::cout << "\n\nCalling preflow(GEN_FLOW) with the given maximum flow..."< mincut2(G); - preflow_test.minMinCut(mincut2); - int min_min_cut2_value=0; - Graph::NodeMap cut2(G); - preflow_test.minCut(cut2); - int min_cut2_value=0; - Graph::NodeMap maxcut2(G); - preflow_test.maxMinCut(maxcut2); - int max_min_cut2_value=0; - for(G.first(e); G.valid(e); G.next(e)) { - int c=cap[e]; - if (mincut2[G.source(e)] && !mincut2[G.target(e)]) min_min_cut2_value+=c; - if (cut2[G.source(e)] && !cut2[G.target(e)]) min_cut2_value+=c; - if (maxcut2[G.source(e)] && !maxcut2[G.target(e)]) max_min_cut2_value+=c; - } - - std::cout << "\nThe given flow value is " - << preflow_test2.flowValue(); - - if ( preflow_test2.flowValue() == min_cut2_value && - min_cut2_value == min_min_cut2_value && - min_min_cut2_value == max_min_cut2_value ) - std::cout <<", which is equal to all three min cut values." - < flow3(G,0); - Preflow preflow_test3(G, s, t, cap, flow3); - std::cout << "\n\nCalling preflowPhase0(PREFLOW) on the constant zero flow..."< actcut3(G); - std::cout << "\nCalling actMinCut()..."< mincut3(G); - preflow_test.minMinCut(mincut3); - int min_min_cut3_value=0; - - Graph::NodeMap cut3(G); - preflow_test.minCut(cut3); - int min_cut3_value=0; - - Graph::NodeMap maxcut3(G); - preflow_test.maxMinCut(maxcut3); - int max_min_cut3_value=0; - - for(G.first(e); G.valid(e); G.next(e)) { - int c=cap[e]; - if (mincut3[G.source(e)] && !mincut3[G.target(e)]) min_min_cut3_value+=c; - if (cut3[G.source(e)] && !cut3[G.target(e)]) min_cut3_value+=c; - if (maxcut3[G.source(e)] && !maxcut3[G.target(e)]) max_min_cut3_value+=c; - if (actcut3[G.source(e)] && !actcut3[G.target(e)]) act_min_cut3_value+=c; - } - - std::cout << "\nThe min cut value given by actMinCut() after phase 0 is "<< - act_min_cut3_value; - - if ( preflow_test3.flowValue() == min_cut3_value && - min_cut3_value == min_min_cut3_value && - min_min_cut3_value == max_min_cut3_value && - max_min_cut3_value == act_min_cut3_value ) { - std::cout << - ", which is equal to the given flow value and to all three min cut values after phase 1." - < flow4(G,0); - Preflow preflow_test4(G, s, t, cap, flow4); - std::cout << - "\n\nCalling preflow(PREFLOW) with the constant 0 flow, the result is f..." - < mincut4(G); - preflow_test4.minMinCut(mincut4); - int min_min_cut4_value=0; - Graph::NodeMap cut4(G); - preflow_test4.minCut(cut4); - int min_cut4_value=0; - Graph::NodeMap maxcut4(G); - preflow_test4.maxMinCut(maxcut4); - int max_min_cut4_value=0; - for(G.first(e); G.valid(e); G.next(e)) { - int c=cap[e]; - if (mincut4[G.source(e)] && !mincut4[G.target(e)]) min_min_cut4_value+=c; - if (cut4[G.source(e)] && !cut4[G.target(e)]) min_cut4_value+=c; - if (maxcut4[G.source(e)] && !maxcut4[G.target(e)]) max_min_cut4_value+=c; - } - - std::cout << "\nThe given flow value is " - << preflow_test4.flowValue(); - - if ( preflow_test4.flowValue() == min_cut4_value && - min_cut4_value == min_min_cut4_value && - min_min_cut4_value == max_min_cut4_value ) - std::cout <<", which is equal to all three min cut values." - < flow5(G,0); - std::cout << "Resetting the stored flow to constant zero, by calling resetFlow..." - < mincut5(G); - preflow_test4.minMinCut(mincut5); - int min_min_cut5_value=0; - Graph::NodeMap cut5(G); - preflow_test4.minCut(cut5); - int min_cut5_value=0; - Graph::NodeMap maxcut5(G); - preflow_test4.maxMinCut(maxcut5); - int max_min_cut5_value=0; - for(G.first(e); G.valid(e); G.next(e)) { - int c=cap[e]; - if (mincut5[G.source(e)] && !mincut5[G.target(e)]) min_min_cut5_value+=c; - if (cut5[G.source(e)] && !cut5[G.target(e)]) min_cut5_value+=c; - if (maxcut5[G.source(e)] && !maxcut5[G.target(e)]) max_min_cut5_value+=c; - } - - std::cout << "\nThe given flow value is " - << preflow_test4.flowValue(); - - if ( preflow_test4.flowValue() == min_cut5_value && - min_cut5_value == min_min_cut5_value && - min_min_cut5_value == max_min_cut5_value ) - std::cout <<", which is equal to all three min cut values." - < -#include -#include - -namespace lemon { - - template , - typename FlowMap=typename Graph::template EdgeMap > - class Preflow { - - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - - const Graph& G; - Node s; - Node t; - const CapMap& capacity; - FlowMap& flow; - T value; - bool constzero; - bool isflow; - - public: - Preflow(Graph& _G, Node _s, Node _t, CapMap& _capacity, - FlowMap& _flow, bool _constzero, bool _isflow ) : - G(_G), s(_s), t(_t), capacity(_capacity), flow(_flow), constzero(_constzero), isflow(_isflow) {} - - - void run() { - - value=0; //for the subsequent runs - - bool phase=0; //phase 0 is the 1st phase, phase 1 is the 2nd - int n=G.nodeNum(); - int heur0=(int)(H0*n); //time while running 'bound decrease' - int heur1=(int)(H1*n); //time while running 'highest label' - int heur=heur1; //starting time interval (#of relabels) - bool what_heur=1; - /* - what_heur is 0 in case 'bound decrease' - and 1 in case 'highest label' - */ - bool end=false; - /* - Needed for 'bound decrease', 'true' - means no active nodes are above bound b. - */ - int relabel=0; - int k=n-2; //bound on the highest level under n containing a node - int b=k; //bound on the highest level under n of an active node - - typename Graph::template NodeMap level(G,n); - typename Graph::template NodeMap excess(G); - - std::vector > active(n); - /* std::vector active(n-1,INVALID); - typename Graph::template NodeMap next(G,INVALID); - //Stack of the active nodes in level i < n. - //We use it in both phases.*/ - - typename Graph::template NodeMap left(G,INVALID); - typename Graph::template NodeMap right(G,INVALID); - std::vector level_list(n,INVALID); - /* - List of the nodes in level i bfs_queue; - bfs_queue.push(t); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(G.first(e,v); G.valid(e); G.next(e)) { - Node w=G.source(e); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( G.valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - } - - //the starting flow - OutEdgeIt e; - for(G.first(e,s); G.valid(e); G.next(e)) - { - T c=capacity[e]; - if ( c == 0 ) continue; - Node w=G.target(e); - if ( level[w] < n ) { - if ( excess[w] == 0 && w!=t ) active[level[w]].push(w); - flow.set(e, c); - excess.set(w, excess[w]+c); - } - } - } - else - { - - /* - Reverse_bfs from t in the residual graph, - to find the starting level. - */ - level.set(t,0); - std::queue bfs_queue; - bfs_queue.push(t); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(G.first(e,v); G.valid(e); G.next(e)) { - if ( capacity[e] == flow[e] ) continue; - Node w=G.source(e); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( G.valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - - OutEdgeIt f; - for(G.first(f,v); G.valid(f); G.next(f)) { - if ( 0 == flow[f] ) continue; - Node w=G.target(f); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( G.valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - } - - - /* - Counting the excess - */ - - if ( !isflow ) { - NodeIt v; - for(G.first(v); G.valid(v); G.next(v)) { - T exc=0; - - InEdgeIt e; - for(G.first(e,v); G.valid(e); G.next(e)) exc+=flow[e]; - OutEdgeIt f; - for(G.first(f,v); G.valid(f); G.next(f)) exc-=flow[f]; - - excess.set(v,exc); - - //putting the active nodes into the stack - int lev=level[v]; - if ( exc > 0 && lev < n && v != t ) active[lev].push(v); - } - } else { - T exc=0; - - InEdgeIt e; - for(G.first(e,t); G.valid(e); G.next(e)) exc+=flow[e]; - OutEdgeIt f; - for(G.first(f,t); G.valid(f); G.next(f)) exc-=flow[f]; - - excess.set(t,exc); - } - - - //the starting flow - OutEdgeIt e; - for(G.first(e,s); G.valid(e); G.next(e)) - { - T rem=capacity[e]-flow[e]; - if ( rem == 0 ) continue; - Node w=G.target(e); - if ( level[w] < n ) { - if ( excess[w] == 0 && w!=t ) active[level[w]].push(w); - flow.set(e, capacity[e]); - excess.set(w, excess[w]+rem); - } - } - - InEdgeIt f; - for(G.first(f,s); G.valid(f); G.next(f)) - { - if ( flow[f] == 0 ) continue; - Node w=G.source(f); - if ( level[w] < n ) { - if ( excess[w] == 0 && w!=t ) active[level[w]].push(w); - excess.set(w, excess[w]+flow[f]); - flow.set(f, 0); - } - } - } - - - - - /* - End of preprocessing - */ - - - - /* - Push/relabel on the highest level active nodes. - */ - while ( true ) { - - if ( b == 0 ) { - if ( phase ) break; - - if ( !what_heur && !end && k > 0 ) { - b=k; - end=true; - } else { - phase=1; - level.set(s,0); - std::queue bfs_queue; - bfs_queue.push(s); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - InEdgeIt e; - for(G.first(e,v); G.valid(e); G.next(e)) { - if ( capacity[e] == flow[e] ) continue; - Node u=G.source(e); - if ( level[u] >= n ) { - bfs_queue.push(u); - level.set(u, l); - if ( excess[u] > 0 ) active[l].push(u); - } - } - - OutEdgeIt f; - for(G.first(f,v); G.valid(f); G.next(f)) { - if ( 0 == flow[f] ) continue; - Node u=G.target(f); - if ( level[u] >= n ) { - bfs_queue.push(u); - level.set(u, l); - if ( excess[u] > 0 ) active[l].push(u); - } - } - } - b=n-2; - } - - } - - - /// - if ( active[b].empty() ) --b; - else { - end=false; - - Node w=active[b].top(); - active[b].pop(); - int lev=level[w]; - T exc=excess[w]; - int newlevel=n; //bound on the next level of w - - OutEdgeIt e; - for(G.first(e,w); G.valid(e); G.next(e)) { - - if ( flow[e] == capacity[e] ) continue; - Node v=G.target(e); - //e=wv - - if( lev > level[v] ) { - /*Push is allowed now*/ - - if ( excess[v]==0 && v!=t && v!=s ) { - int lev_v=level[v]; - active[lev_v].push(v); - } - - T cap=capacity[e]; - T flo=flow[e]; - T remcap=cap-flo; - - if ( remcap >= exc ) { - /*A nonsaturating push.*/ - - flow.set(e, flo+exc); - excess.set(v, excess[v]+exc); - exc=0; - break; - - } else { - /*A saturating push.*/ - - flow.set(e, cap); - excess.set(v, excess[v]+remcap); - exc-=remcap; - } - } else if ( newlevel > level[v] ){ - newlevel = level[v]; - } - - } //for out edges wv - - - if ( exc > 0 ) { - InEdgeIt e; - for(G.first(e,w); G.valid(e); G.next(e)) { - - if( flow[e] == 0 ) continue; - Node v=G.source(e); - //e=vw - - if( lev > level[v] ) { - /*Push is allowed now*/ - - if ( excess[v]==0 && v!=t && v!=s ) { - int lev_v=level[v]; - active[lev_v].push(v); - } - - T flo=flow[e]; - - if ( flo >= exc ) { - /*A nonsaturating push.*/ - - flow.set(e, flo-exc); - excess.set(v, excess[v]+exc); - exc=0; - break; - } else { - /*A saturating push.*/ - - excess.set(v, excess[v]+flo); - exc-=flo; - flow.set(e,0); - } - } else if ( newlevel > level[v] ) { - newlevel = level[v]; - } - } //for in edges vw - - } // if w still has excess after the out edge for cycle - - excess.set(w, exc); - /// push - - - /* - Relabel - */ - - - if ( exc > 0 ) { - //now 'lev' is the old level of w - - if ( phase ) { - level.set(w,++newlevel); - active[newlevel].push(w); - b=newlevel; - } else { - //unlacing starts - Node right_n=right[w]; - Node left_n=left[w]; - - if ( G.valid(right_n) ) { - if ( G.valid(left_n) ) { - right.set(left_n, right_n); - left.set(right_n, left_n); - } else { - level_list[lev]=right_n; - left.set(right_n, INVALID); - } - } else { - if ( G.valid(left_n) ) { - right.set(left_n, INVALID); - } else { - level_list[lev]=INVALID; - } - } - //unlacing ends - - if ( !G.valid(level_list[lev]) ) { - - //gapping starts - for (int i=lev; i!=k ; ) { - Node v=level_list[++i]; - while ( G.valid(v) ) { - level.set(v,n); - v=right[v]; - } - level_list[i]=INVALID; - if ( !what_heur ) { - while ( !active[i].empty() ) { - active[i].pop(); //FIXME: ezt szebben kene - } - } - } - - level.set(w,n); - b=lev-1; - k=b; - //gapping ends - - } else { - - if ( newlevel == n ) level.set(w,n); - else { - level.set(w,++newlevel); - active[newlevel].push(w); - if ( what_heur ) b=newlevel; - if ( k < newlevel ) ++k; //now k=newlevel - Node first=level_list[newlevel]; - if ( G.valid(first) ) left.set(first,w); - right.set(w,first); - left.set(w,INVALID); - level_list[newlevel]=w; - } - } - - - ++relabel; - if ( relabel >= heur ) { - relabel=0; - if ( what_heur ) { - what_heur=0; - heur=heur0; - end=false; - } else { - what_heur=1; - heur=heur1; - b=k; - } - } - } //phase 0 - - - } // if ( exc > 0 ) - - - } // if stack[b] is nonempty - - } // while(true) - - - value = excess[t]; - /*Max flow value.*/ - - } //void run() - - - - - - /* - Returns the maximum value of a flow. - */ - - T flowValue() { - return value; - } - - - FlowMap Flow() { - return flow; - } - - - void Flow(FlowMap& _flow ) { - NodeIt v; - for(G.first(v) ; G.valid(v); G.next(v)) - _flow.set(v,flow[v]); - } - - - - /* - Returns the minimum min cut, by a bfs from s in the residual graph. - */ - - template - void minMinCut(_CutMap& M) { - - std::queue queue; - - M.set(s,true); - queue.push(s); - - while (!queue.empty()) { - Node w=queue.front(); - queue.pop(); - - OutEdgeIt e; - for(G.first(e,w) ; G.valid(e); G.next(e)) { - Node v=G.target(e); - if (!M[v] && flow[e] < capacity[e] ) { - queue.push(v); - M.set(v, true); - } - } - - InEdgeIt f; - for(G.first(f,w) ; G.valid(f); G.next(f)) { - Node v=G.source(f); - if (!M[v] && flow[f] > 0 ) { - queue.push(v); - M.set(v, true); - } - } - } - } - - - - /* - Returns the maximum min cut, by a reverse bfs - from t in the residual graph. - */ - - template - void maxMinCut(_CutMap& M) { - - std::queue queue; - - M.set(t,true); - queue.push(t); - - while (!queue.empty()) { - Node w=queue.front(); - queue.pop(); - - - InEdgeIt e; - for(G.first(e,w) ; G.valid(e); G.next(e)) { - Node v=G.source(e); - if (!M[v] && flow[e] < capacity[e] ) { - queue.push(v); - M.set(v, true); - } - } - - OutEdgeIt f; - for(G.first(f,w) ; G.valid(f); G.next(f)) { - Node v=G.target(f); - if (!M[v] && flow[f] > 0 ) { - queue.push(v); - M.set(v, true); - } - } - } - - NodeIt v; - for(G.first(v) ; G.valid(v); G.next(v)) { - M.set(v, !M[v]); - } - - } - - - - template - void minCut(CutMap& M) { - minMinCut(M); - } - - - void resetTarget (Node _t) {t=_t;} - void resetSource (Node _s) {s=_s;} - - void resetCap (CapMap _cap) {capacity=_cap;} - - void resetFlow (FlowMap _flow, bool _constzero) { - flow=_flow; - constzero=_constzero; - } - - - - }; - -} //namespace lemon - -#endif //PREFLOW_H - - - - diff -r ee5959aa4410 -r c280de819a73 src/work/jacint/preflow_excess_test.cc --- a/src/work/jacint/preflow_excess_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,179 +0,0 @@ -/* -The only difference between preflow.h and preflow_res.h is that the latter -uses the ResGraphWrapper, while the first does not. (Bfs is implemented by -hand in both.) This test program runs Preflow and PreflowRes on the same -graph, tests the result of these implementations and writes the running time -of them. */ -#include - -#include -#include -#include -#include - -using namespace lemon; - -int main(int, char **) { - - typedef SmartGraph Graph; - - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph G; - Node s, t; - Graph::EdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - Timer ts; - - std::cout << - "\n Are we slower?" - < flow(G,0); - Preflow max_flow_test(G, s, t, cap, flow, 0 , 0); - ts.reset(); - max_flow_test.run(); - std::cout << "Elapsed time from a preflow: " << std::endl - < mincut(G); - max_flow_test.minMinCut(mincut); - int min_min_cut_value=0; - EdgeIt e; - for(G.first(e); G.valid(e); G.next(e)) { - if (mincut[G.source(e)] && !mincut[G.target(e)]) min_min_cut_value+=cap[e]; - } - - Graph::NodeMap cut(G); - max_flow_test.minCut(cut); - int min_cut_value=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (cut[G.source(e)] && !cut[G.target(e)]) - min_cut_value+=cap[e]; - } - - Graph::NodeMap maxcut(G); - max_flow_test.maxMinCut(maxcut); - int max_min_cut_value=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (maxcut[G.source(e)] && !maxcut[G.target(e)]) - max_min_cut_value+=cap[e]; - } - - std::cout << "\n Checking the result: " < flow2(G,0); - Preflow max_flow_test2(G, s, t, cap, flow2, 0 , 1); - ts.reset(); - max_flow_test2.run(); - std::cout << "Elapsed time from a flow: " << std::endl - << ts << std::endl; - - Graph::NodeMap mincut2(G); - max_flow_test2.minMinCut(mincut2); - int min_min_cut_value2=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (mincut2[G.source(e)] && !mincut2[G.target(e)]) min_min_cut_value2+=cap[e]; - } - - Graph::NodeMap cut2(G); - max_flow_test2.minCut(cut2); - int min_cut_value2=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (cut2[G.source(e)] && !cut2[G.target(e)]) - min_cut_value2+=cap[e]; - } - - Graph::NodeMap maxcut2(G); - max_flow_test2.maxMinCut(maxcut2); - int max_min_cut_value2=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (maxcut2[G.source(e)] && !maxcut2[G.target(e)]) - max_min_cut_value2+=cap[e]; - } - - std::cout << "\n Checking the result: " < flow3(G,0); - Preflow max_flow_test3(G, s, t, cap, flow3, 1 , 1); - ts.reset(); - max_flow_test3.run(); - std::cout << "Elapsed time from a const zero flow: " << std::endl - < mincut3(G); - max_flow_test3.minMinCut(mincut3); - int min_min_cut_value3=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (mincut3[G.source(e)] && !mincut3[G.target(e)]) min_min_cut_value3+=cap[e]; - } - - Graph::NodeMap cut3(G); - max_flow_test3.minCut(cut3); - int min_cut_value3=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (cut3[G.source(e)] && !cut3[G.target(e)]) - min_cut_value3+=cap[e]; - } - - Graph::NodeMap maxcut3(G); - max_flow_test3.maxMinCut(maxcut3); - int max_min_cut_value3=0; - for(G.first(e); G.valid(e); G.next(e)) { - if (maxcut3[G.source(e)] && !maxcut3[G.target(e)]) - max_min_cut_value3+=cap[e]; - } - - std::cout << "\n Checking the result: " < -#include -#include - -#include - -namespace lemon { - - template , - typename FlowMap=typename Graph::template EdgeMap > - class PreflowRes { - - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - - const Graph& G; - Node s; - Node t; - const CapMap& capacity; - FlowMap& flow; - T value; - bool constzero; - - typedef ResGraphWrapper ResGW; - typedef typename ResGW::OutEdgeIt ResOutEdgeIt; - typedef typename ResGW::InEdgeIt ResInEdgeIt; - typedef typename ResGW::Edge ResEdge; - - public: - PreflowRes(Graph& _G, Node _s, Node _t, CapMap& _capacity, - FlowMap& _flow, bool _constzero ) : - G(_G), s(_s), t(_t), capacity(_capacity), flow(_flow), constzero(_constzero) {} - - - void run() { - - ResGW res_graph(G, capacity, flow); - - value=0; //for the subsequent runs - - bool phase=0; //phase 0 is the 1st phase, phase 1 is the 2nd - int n=G.nodeNum(); - int heur0=(int)(H0*n); //time while running 'bound decrease' - int heur1=(int)(H1*n); //time while running 'highest label' - int heur=heur1; //starting time interval (#of relabels) - bool what_heur=1; - /* - what_heur is 0 in case 'bound decrease' - and 1 in case 'highest label' - */ - bool end=false; - /* - Needed for 'bound decrease', 'true' - means no active nodes are above bound b. - */ - int relabel=0; - int k=n-2; //bound on the highest level under n containing a node - int b=k; //bound on the highest level under n of an active node - - typename Graph::template NodeMap level(G,n); - typename Graph::template NodeMap excess(G); - - std::vector active(n-1,INVALID); - typename Graph::template NodeMap next(G,INVALID); - //Stack of the active nodes in level i < n. - //We use it in both phases. - - typename Graph::template NodeMap left(G,INVALID); - typename Graph::template NodeMap right(G,INVALID); - std::vector level_list(n,INVALID); - /* - List of the nodes in level i bfs_queue; - bfs_queue.push(t); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - ResInEdgeIt e; - for(res_graph.first(e,v); res_graph.valid(e); - res_graph.next(e)) { - Node w=res_graph.source(e); - if ( level[w] == n && w != s ) { - bfs_queue.push(w); - Node first=level_list[l]; - if ( G.valid(first) ) left.set(first,w); - right.set(w,first); - level_list[l]=w; - level.set(w, l); - } - } - } - - - if ( !constzero ) { - /* - Counting the excess - */ - NodeIt v; - for(G.first(v); G.valid(v); G.next(v)) { - T exc=0; - - InEdgeIt e; - for(G.first(e,v); G.valid(e); G.next(e)) exc+=flow[e]; - OutEdgeIt f; - for(G.first(f,v); G.valid(f); G.next(f)) exc-=flow[f]; - - excess.set(v,exc); - - //putting the active nodes into the stack - int lev=level[v]; - if ( exc > 0 && lev < n ) { - next.set(v,active[lev]); - active[lev]=v; - } - } - } - - - - //the starting flow - ResOutEdgeIt e; - for(res_graph.first(e,s); res_graph.valid(e); - res_graph.next(e)) { - Node w=res_graph.target(e); - if ( level[w] < n ) { - if ( excess[w] == 0 && w!=t ) { - next.set(w,active[level[w]]); - active[level[w]]=w; - } - T rem=res_graph.resCap(e); - excess.set(w, excess[w]+rem); - res_graph.augment(e, rem ); - } - } - - - /* - End of preprocessing - */ - - - - /* - Push/relabel on the highest level active nodes. - */ - while ( true ) { - - if ( b == 0 ) { - if ( phase ) break; - - if ( !what_heur && !end && k > 0 ) { - b=k; - end=true; - } else { - phase=1; - level.set(s,0); - std::queue bfs_queue; - bfs_queue.push(s); - - while (!bfs_queue.empty()) { - - Node v=bfs_queue.front(); - bfs_queue.pop(); - int l=level[v]+1; - - ResInEdgeIt e; - for(res_graph.first(e,v); - res_graph.valid(e); res_graph.next(e)) { - Node u=res_graph.source(e); - if ( level[u] >= n ) { - bfs_queue.push(u); - level.set(u, l); - if ( excess[u] > 0 ) { - next.set(u,active[l]); - active[l]=u; - } - } - } - - } - b=n-2; - } - - } - - - if ( !G.valid(active[b]) ) --b; - else { - end=false; - - Node w=active[b]; - active[b]=next[w]; - int lev=level[w]; - T exc=excess[w]; - int newlevel=n; //bound on the next level of w - - ResOutEdgeIt e; - for(res_graph.first(e,w); res_graph.valid(e); res_graph.next(e)) { - - Node v=res_graph.target(e); - if( lev > level[v] ) { - /*Push is allowed now*/ - - if ( excess[v]==0 && v!=t && v!=s ) { - int lev_v=level[v]; - next.set(v,active[lev_v]); - active[lev_v]=v; - } - - T remcap=res_graph.resCap(e); - - if ( remcap >= exc ) { - /*A nonsaturating push.*/ - res_graph.augment(e, exc); - excess.set(v, excess[v]+exc); - exc=0; - break; - - } else { - /*A saturating push.*/ - - res_graph.augment(e, remcap); - excess.set(v, excess[v]+remcap); - exc-=remcap; - } - } else if ( newlevel > level[v] ){ - newlevel = level[v]; - } - - } - - excess.set(w, exc); - - /* - Relabel - */ - - - if ( exc > 0 ) { - //now 'lev' is the old level of w - - if ( phase ) { - level.set(w,++newlevel); - next.set(w,active[newlevel]); - active[newlevel]=w; - b=newlevel; - } else { - //unlacing starts - Node right_n=right[w]; - Node left_n=left[w]; - - if ( G.valid(right_n) ) { - if ( G.valid(left_n) ) { - right.set(left_n, right_n); - left.set(right_n, left_n); - } else { - level_list[lev]=right_n; - left.set(right_n, INVALID); - } - } else { - if ( G.valid(left_n) ) { - right.set(left_n, INVALID); - } else { - level_list[lev]=INVALID; - } - } - //unlacing ends - - if ( !G.valid(level_list[lev]) ) { - - //gapping starts - for (int i=lev; i!=k ; ) { - Node v=level_list[++i]; - while ( G.valid(v) ) { - level.set(v,n); - v=right[v]; - } - level_list[i]=INVALID; - if ( !what_heur ) active[i]=INVALID; - } - - level.set(w,n); - b=lev-1; - k=b; - //gapping ends - - } else { - - if ( newlevel == n ) level.set(w,n); - else { - level.set(w,++newlevel); - next.set(w,active[newlevel]); - active[newlevel]=w; - if ( what_heur ) b=newlevel; - if ( k < newlevel ) ++k; //now k=newlevel - Node first=level_list[newlevel]; - if ( G.valid(first) ) left.set(first,w); - right.set(w,first); - left.set(w,INVALID); - level_list[newlevel]=w; - } - } - - - ++relabel; - if ( relabel >= heur ) { - relabel=0; - if ( what_heur ) { - what_heur=0; - heur=heur0; - end=false; - } else { - what_heur=1; - heur=heur1; - b=k; - } - } - } //phase 0 - - - } // if ( exc > 0 ) - - - } // if stack[b] is nonempty - - } // while(true) - - - value = excess[t]; - /*Max flow value.*/ - - } //void run() - - - - - - /* - Returns the maximum value of a flow. - */ - - T flowValue() { - return value; - } - - - FlowMap Flow() { - return flow; - } - - - - void Flow(FlowMap& _flow ) { - NodeIt v; - for(G.first(v) ; G.valid(v); G.next(v)) - _flow.set(v,flow[v]); - } - - - - /* - Returns the minimum min cut, by a bfs from s in the residual graph. - */ - - template - void minMinCut(_CutMap& M) { - - std::queue queue; - - M.set(s,true); - queue.push(s); - - while (!queue.empty()) { - Node w=queue.front(); - queue.pop(); - - OutEdgeIt e; - for(G.first(e,w) ; G.valid(e); G.next(e)) { - Node v=G.target(e); - if (!M[v] && flow[e] < capacity[e] ) { - queue.push(v); - M.set(v, true); - } - } - - InEdgeIt f; - for(G.first(f,w) ; G.valid(f); G.next(f)) { - Node v=G.source(f); - if (!M[v] && flow[f] > 0 ) { - queue.push(v); - M.set(v, true); - } - } - } - } - - - - /* - Returns the maximum min cut, by a reverse bfs - from t in the residual graph. - */ - - template - void maxMinCut(_CutMap& M) { - - std::queue queue; - - M.set(t,true); - queue.push(t); - - while (!queue.empty()) { - Node w=queue.front(); - queue.pop(); - - - InEdgeIt e; - for(G.first(e,w) ; G.valid(e); G.next(e)) { - Node v=G.source(e); - if (!M[v] && flow[e] < capacity[e] ) { - queue.push(v); - M.set(v, true); - } - } - - OutEdgeIt f; - for(G.first(f,w) ; G.valid(f); G.next(f)) { - Node v=G.target(f); - if (!M[v] && flow[f] > 0 ) { - queue.push(v); - M.set(v, true); - } - } - } - - NodeIt v; - for(G.first(v) ; G.valid(v); G.next(v)) { - M.set(v, !M[v]); - } - - } - - - - template - void minCut(CutMap& M) { - minMinCut(M); - } - - - - void resetTarget (Node _t) {t=_t;} - void resetSource (Node _s) {s=_s;} - - void resetCap (CapMap _cap) {capacity=_cap;} - - void resetFlow (FlowMap _flow, bool _constzero) { - flow=_flow; - constzero=_constzero; - } - - - }; - -} //namespace lemon - -#endif //LEMON_PREFLOW_RES_H - - - - diff -r ee5959aa4410 -r c280de819a73 src/work/jacint/prim.cc --- a/src/work/jacint/prim.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,50 +0,0 @@ -#include -#include - -#include -#include -#include -#include -#include - -#include -#include - -using namespace lemon; - -int main(int, char **) { - typedef SmartGraph::Node Node; - - SmartGraph G; - Node s, t; - SmartGraph::EdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - - std::cout << "prim demo ..." << std::endl; - - double pre_time=currTime(); - Prim > > prim_test(G, cap); - prim_test.run(); - double post_time=currTime(); - - std::cout << "running time with fib_heap: " - << post_time-pre_time << " sec"<< std::endl; - - pre_time=currTime(); - Prim > > prim_test2(G, cap); - prim_test2.run(); - post_time=currTime(); - - std::cout << "running time with bin_heap: " - << post_time-pre_time << " sec"<< std::endl; - - std::cout<<"A minimalis feszitofa sulya fib kupaccal: "<< prim_test.weight() < > - * - *Constructor: - * - *Prim(Graph G, LengthMap weight) - * - * - *Methods: - * - *void run() : Runs the Prim-algorithm from a random node - * - *void run(Node r) : Runs the Prim-algorithm from node s - * - *T weight() : After run(r) was run, it returns the minimum - * weight of a spanning tree of the component of the root. - * - *Edge tree(Node v) : After run(r) was run, it returns the - * first edge in the path from v to the root. Returns - * INVALID if v=r or v is not reachable from the root. - * - *bool conn() : After run(r) was run, it is true iff G is connected - * - *bool reached(Node v) : After run(r) was run, it is true - * iff v is in the same component as the root - * - *Node root() : returns the root - * - */ - -#ifndef LEMON_PRIM_H -#define LEMON_PRIM_H - -#include -#include - -namespace lemon { - - template >, - typename LengthMap=typename Graph::EdgeMap > - class Prim{ - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - - const Graph& G; - const LengthMap& edge_weight; - typename Graph::NodeMap tree_edge; - typename Graph::NodeMap min_weight; - typename Graph::NodeMap reach; - - public : - - Prim(Graph& _G, LengthMap& _edge_weight) : - G(_G), edge_weight(_edge_weight), - tree_edge(_G,INVALID), min_weight(_G), reach(_G, false) { } - - - void run() { - NodeIt _r; - G.first(_r); - run(_r); - } - - - void run(Node r) { - - NodeIt u; - for ( G.first(u) ; G.valid(u) ; G.next(u) ) { - tree_edge.set(u,INVALID); - min_weight.set(u,0); - reach.set(u,false); - } - - - typename Graph::NodeMap scanned(G, false); - typename Graph::NodeMap heap_map(G,-1); - - Heap heap(heap_map); - - heap.push(r,0); - reach.set(r, true); - - while ( !heap.empty() ) { - - Node v=heap.top(); - min_weight.set(v, heap.get(v)); - heap.pop(); - scanned.set(v,true); - - OutEdgeIt e; - for( G.first(e,v); G.valid(e); G.next(e)) { - Node w=G.target(e); - - if ( !scanned[w] ) { - if ( !reach[w] ) { - reach.set(w,true); - heap.push(w, edge_weight[e]); - tree_edge.set(w,e); - } else if ( edge_weight[e] < heap.get(w) ) { - tree_edge.set(w,e); - heap.decrease(w, edge_weight[e]); - } - } - } - - InEdgeIt f; - for( G.first(f,v); G.valid(f); G.next(f)) { - Node w=G.source(f); - - if ( !scanned[w] ) { - if ( !reach[w] ) { - reach.set(w,true); - heap.push(w, edge_weight[f]); - tree_edge.set(w,f); - } else if ( edge_weight[f] < heap.get(w) ) { - tree_edge.set(w,f); - heap.decrease(w, edge_weight[f]); - } - } - } - } - } - - - T weight() { - T w=0; - NodeIt u; - for ( G.first(u) ; G.valid(u) ; G.next(u) ) w+=min_weight[u]; - return w; - } - - - Edge tree(Node v) { - return tree_edge[v]; - } - - - bool conn() { - bool c=true; - NodeIt u; - for ( G.first(u) ; G.valid(u) ; G.next(u) ) - if ( !reached[u] ) { - c=false; - break; - } - return c; - } - - - bool reached(Node v) { - return reached[v]; - } - - - Node root() { - return r; - } - - }; - -} - -#endif - - diff -r ee5959aa4410 -r c280de819a73 src/work/johanna/Makefile --- a/src/work/johanna/Makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -BINARIES = kruskal_test ma_order_test -INCLUDEDIRS= -I. -I.. -I../../include -I../{marci,jacint,alpar,klao,akos} -include ../makefile - diff -r ee5959aa4410 -r c280de819a73 src/work/johanna/contract_wrapper.h --- a/src/work/johanna/contract_wrapper.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,36 +0,0 @@ -// -*- C++ -*- // - -#ifndef LEMON_CONTRACT_WRAPPER -#define LEMON_CONTRACT_WRAPPER - -#include - -namespace lemon { - - template - class ConractWrapper : public GraphWrapper { - - public: - typedef typename Parent::NodeMap NodeMap; - class Node; - - private: - typedef GraphWrapper Parent; - - - UnionFindEnum parts; - - public: - - ConractWrapper(const Graph& _graph) : Parent(_graph) { } - - - - - - }; - - - -} -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/johanna/ma_order.h --- a/src/work/johanna/ma_order.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,87 +0,0 @@ -// -*- C++ -*- // - -#ifndef LEMON_MA_ORDER_H -#define LEMON_MA_ORDER_H - -#include -#include -#include - -namespace lemon { - - template , - std::greater >, - typename OrderVect = std::vector > - class MAOrder { - - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::NodeMap NodeMapInt; - - const Graph& G; - - OrderVect& order; - - - public: - - MAOrder(const Graph& _G, OrderVect& _order) : G(_G), order(_order) {} - - void run() - { - Node first; - G.first(first); - run(first); - } - - void run(Node first) - { - NodeMapInt heapMap(G, -1); - Heap heap(heapMap); - - heap.push(first, 0); - - NodeIt n; - G.first(n); - while ( G.valid(n) ) { - - while(!heap.empty()) { - Node a = heap.top(); - heap.pop(); - order.push_back(a); - - OutEdgeIt e; - G.first(e,a); - for (;G.valid(e);G.next(e)) { - Node v = G.target(e); // hmm - if (heap.state(v) == Heap::IN_HEAP ) { - heap.decrease(v, heap[v]+1); - } - else if (heap.state(v) == Heap::PRE_HEAP) { - heap.push(v, 1); - } - } - - } - - while( G.valid(n) ) { - if (heap.state(n) == Heap::PRE_HEAP) { - heap.push(n,0); - break; - } - G.next(n); - } - } - - } - - - }; - -} // namespace lemon - -#endif // LEMON_MA_ORDER_H diff -r ee5959aa4410 -r c280de819a73 src/work/johanna/ma_order_test.cc --- a/src/work/johanna/ma_order_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,57 +0,0 @@ -#include -#include -#include -#include - -#include -#include - - -using namespace std; -using namespace lemon; - -int main() { - - typedef ListGraph::Node Node; - typedef ListGraph::Edge Edge; - typedef ListGraph::NodeIt NodeIt; - typedef ListGraph::EdgeIt EdgeIt; - - ListGraph G; - - Node v3=G.addNode(); - Node v5=G.addNode(); - Node v2=G.addNode(); - Node v0=G.addNode(); - Node v4=G.addNode(); - Node v1=G.addNode(); - - G.addEdge(v0, v1);G.addEdge(v0, v1);G.addEdge(v0, v1); - G.addEdge(v0, v2); - G.addEdge(v0, v3);G.addEdge(v0, v3); - G.addEdge(v1, v2);G.addEdge(v1, v2); - G.addEdge(v2, v4); - G.addEdge(v3, v4); - G.addEdge(v4, v5); - - G.addEdge(v1, v0);G.addEdge(v1, v0);G.addEdge(v1, v0); - G.addEdge(v2, v0); - G.addEdge(v3, v0);G.addEdge(v3, v0); - G.addEdge(v2, v1);G.addEdge(v2, v1); - G.addEdge(v4, v2); - G.addEdge(v4, v3); - G.addEdge(v5, v4); - - - vector ma_order; - MAOrder mao(G,ma_order); - mao.run(v0); - vector::iterator i; - for (i = ma_order.begin(); i!=ma_order.end(); ++i) { - cout << *i << " "; - } - cout << endl; - cout << v0 << " " << v1 << " " << v2 << " " << v3 << " " << v4 << " " - << v5 << endl; - -} diff -r ee5959aa4410 -r c280de819a73 src/work/klao/Makefile --- a/src/work/klao/Makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -BINARIES = error_test -INCLUDEDIRS= -I. -I.. -I../.. -I../{marci,jacint,alpar,johanna,athos,akos} -I$(HOME)/boost -include ../makefile - -CXXFLAGS += $(C) diff -r ee5959aa4410 -r c280de819a73 src/work/klao/TODO --- a/src/work/klao/TODO Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -full_graph.h -t atnez(et)ni! - -megcsinalni, hogy mukodjon a kereses a doksiban diff -r ee5959aa4410 -r c280de819a73 src/work/klao/cpp_hianyok --- a/src/work/klao/cpp_hianyok Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,17 +0,0 @@ -"rebind" - -Egy dologrol le lehessen kerdezni a tipusat forditasi idoben (es hasznalni). -[ a.iterator i = a.begin(); ... problema ] - -template typedef - -egy neven tobb kulonbozo parameterszamu template - -typedef/using dolgok. Ne insztancialjanak, felcserelhetoseg. - - - ---- -Gyanusak: - -(valahova nem lehet typedef-et irni...) diff -r ee5959aa4410 -r c280de819a73 src/work/klao/debug.h --- a/src/work/klao/debug.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,56 +0,0 @@ -// -*- C++ -*- // - -#ifndef LEMON_DEBUG_H -#define LEMON_DEBUG_H - -//! \file -//! \brief Basic definitions for debug control. - -namespace lemon { - - //! Debug mode for testing/debugging - - //! Use this debug mode if you want exhaustive range and consistency checks. - //! It also produces verbose debug messages. - struct DebugOn { - //! Example: check whether the edges added to a path are adjacent - static const bool consistensy_check = true; - - static const bool range_check = true; - - //! Examples: initialize maps with some value; - //! after deleting an item from UnionFindEnum set its value in the - //! corresponding map to NULL... - static const bool ensure_safe_state = true; - - static const int verbose = 5; - }; - - //! Debug mode for turning off debug aids. - - //! This debud mode switches off all range and consistency checks, - //! as well as the debug messages. - //! - struct DebugOff { - static const bool consistensy_check = false; - static const bool range_check = false; - static const bool ensure_safe_state = false; - static const int verbose = 0; - }; - -#ifdef DEBUG - //! The default debug mode. - - //! The default debug mode. - //! - typedef DebugOn DefaultDebugMode; -#else - //! The default debug mode. - - //! The default debug mode. - //! - typedef DebugOff DefaultDebugMode; -#endif - -} -#endif // LEMON_DEBUG_H diff -r ee5959aa4410 -r c280de819a73 src/work/klao/error2_test.cc --- a/src/work/klao/error2_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,68 +0,0 @@ -#include -#include - -#include - -using namespace std; - -class Ex : public exception { - - typedef exception Parent; - - mutable - auto_ptr uz; -public: - - // boost::shared_ptr uz; - - Ex(const Ex &e) : Parent(e), uz(e.uz) {} - - explicit - Ex(const char *msg = 0) { - if( msg ) { - try { - uz.reset(new string); - *uz = msg; - } - catch(...) { - uz.reset(); - } - } - } - - virtual - const char* what() const throw() { - if( uz.get() ) - return uz->c_str(); - return "Kivetel"; - } - - virtual ~Ex() throw() {} -}; - -static void fn1() { - Ex e("alma"); - throw e; -} - -static -void fn2() { - throw Ex("korte"); -} - -int main() { - try { - fn1(); - } - catch(exception const &e) { - cerr << "Hiba: " << e.what() << endl; - } - - try { - fn2(); - } - catch(exception const &e) { - cerr << "Hiba: " << e.what() << endl; - } - -} diff -r ee5959aa4410 -r c280de819a73 src/work/klao/error_test.cc --- a/src/work/klao/error_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,76 +0,0 @@ -#include -#include - -#define LEMON_ASSERT_ABORT 0 -#include - -using namespace std; - -void parse_line() { - throw lemon::DataFormatError("Syntax error"); -} - -void parse_file(string fn) { - try { - parse_line(); - } - catch(lemon::DataFormatError &e) { - e.file(fn); - e.line(5); - throw; - } -} - -void fail_assert(); - -int main() { - try { - parse_file("input.txt"); - } - catch(lemon::Exception &e) { - cerr << "Exception '" << e.exceptionName() - << "' caught: " << endl; - cerr << e.what() << endl; - } - catch(exception &e) { - cerr << "Exception caught: " << endl; - cerr << e.what() << endl; - } - - try { - throw lemon::LogicError(); - } - catch(lemon::Exception &e) { - cerr << "Exception '" << e.exceptionName() - << "' caught: " << endl; - cerr << e.what() << endl; - } - - try { - fail_assert(); - } - catch(lemon::Exception &e) { - cerr << "Exception '" << e.exceptionName() - << "' caught: " << endl; - cerr << e.what() << endl; - } - catch(exception &e) { - cerr << "Exception caught: " << endl; - cerr << e.what() << endl; - } - - cerr << endl; - - // assert(1==0); - LEMON_ASSERT(1==0, "Ellentmondas"); - LEMON_FIXME("Nincs kesz"); -} - -#undef LEMON_ASSERT_HANDLER -#define LEMON_ASSERT_EXCEPTION - -#include - -void fail_assert() { - LEMON_ASSERT(2*2==5, "Marson vagyunk"); -} diff -r ee5959aa4410 -r c280de819a73 src/work/klao/iter_map.h --- a/src/work/klao/iter_map.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,172 +0,0 @@ -// -*- c++ -*- // - -#ifndef LEMON_ITER_MAP -#define LEMON_ITER_MAP - -#include -#include -// for uint8_t -#include -// for memset -#include - -#include - -namespace lemon { - - /// \brief A map with "small integers" as value set which can enumarate it - /// value classes - - /// \todo Decide whether we need all the range checkings!!! - - /// \todo Implement dynamic map behaviour. Is it necessary? Yes it is. - - template - class IterableMap { - public: - - typedef typename KeyIntMap::Key Key; - typedef Val Value; - - typedef typename std::vector::const_iterator iterator; - - protected: - KeyIntMap &base; - std::vector data; - size_t bounds[N]; - Val def_val; - - Val find(size_t a) const { - for(uint8_t n=0; n a) - return n; - } - return def_val; - } - - void half_swap(size_t &a, size_t b) { - if(a != b) { - base.set(data[b],a); - data[a] = data[b]; - a = b; - } - } - - size_t move(size_t a, uint8_t m, uint8_t n) { - if(m != n) { - size_t orig_a = a; - Key orig_key = data[a]; - while(m > n) { - --m; - half_swap(a, bounds[m]++); - } - // FIXME: range check ide? - while(m < n) { - half_swap(a, --bounds[m]); - ++m; - } - if(a != orig_a) { - base.set(orig_key, a); - data[a]=orig_key; - } - } - return a; - } - - public: - - IterableMap(KeyIntMap &_base, Val d = N+1) : base(_base), def_val(d) { - memset(bounds, 0, sizeof(bounds)); - // for(int i=0; i - class IterableBoolMap : public IterableMap { - typedef IterableMap Parent; - - public: - IterableBoolMap(KeyIntMap &_base, bool d = false) : Parent(_base, d) {} - }; - -} -#endif diff -r ee5959aa4410 -r c280de819a73 src/work/klao/iter_map_test.cc --- a/src/work/klao/iter_map_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,233 +0,0 @@ -#include -#include - -#include - -using namespace lemon; -using namespace std; - -const int N = 3; - -typedef StdMap BaseMap; -typedef IterableMap TestMap; -typedef IterableBoolMap TestBoolMap; - - -template -void print(TM const& m, int N = 3) { - cout << "Size of the map: " << m.size() << endl; - for(int i=0; i BaseMap2; -typedef IterableBoolMap TestBoolMap2; - - -int main() { - - { - BaseMap base(344); - TestMap test(base); - - - print(test); - - cout << "Inserting 12 to class 2...\n"; - test.insert(12,2); - print(test); - - - cout << "Inserting 22 to class 2...\n"; - test.insert(22,2); - print(test); - - cout << "Testing some map values:\n"; - cout << " 12: " << int(test[12]) << endl; - - cout << "Inserting 10 to class 0...\n"; - test.insert(10,0); - print(test); - - cout << "Testing some map values:\n"; - cout << " 12: " << int(test[12]) << endl; - - cout << "Inserting 11 to class 1...\n"; - test.insert(11,1); - print(test); - - cout << "Testing some map values:\n"; - cout << " 12: " << int(test[12]) << endl; - cout << " 22: " << int(test[22]) << endl; - cout << " 10: " << int(test[10]) << endl; - cout << " 11: " << int(test[11]) << endl; - cout << " 42: " << int(test[42]) << endl; - - cout << "Inserting 21 to class 1...\n"; - test.insert(21,1); - print(test); - - cout << "Inserting 20 to class 1...\n"; - test.insert(20,0); - print(test); - - cout << "Testing some map values:\n"; - cout << " 12: " << int(test[12]) << endl; - cout << " 22: " << int(test[22]) << endl; - cout << " 10: " << int(test[10]) << endl; - cout << " 20: " << int(test[20]) << endl; - cout << " 11: " << int(test[11]) << endl; - cout << " 21: " << int(test[21]) << endl; - cout << " 42: " << int(test[42]) << endl; - - cout << "Setting 20 to class 2...\n"; - test.set(20,2); - print(test); - - cout << "Setting 10 to class 1...\n"; - test.set(10,1); - print(test); - - cout << "Setting 11 to class 1...\n"; - test.set(11,1); - print(test); - - cout << "Setting 12 to class 1...\n"; - test.set(12,1); - print(test); - - cout << "Setting 21 to class 2...\n"; - test.set(21,2); - print(test); - - cout << "Setting 22 to class 2...\n"; - test.set(22,2); - print(test); - - cout << "Testing some map values:\n"; - cout << " 12: " << int(test[12]) << endl; - cout << " 22: " << int(test[22]) << endl; - cout << " 10: " << int(test[10]) << endl; - cout << " 20: " << int(test[20]) << endl; - cout << " 11: " << int(test[11]) << endl; - cout << " 21: " << int(test[21]) << endl; - cout << " 42: " << int(test[42]) << endl; - } - - { - cout << "\n\n\nTesting the IterableBoolMap...\n"; - - BaseMap base(344); - TestBoolMap test(base,true); - - - print(test,2); - - cout << "Inserting 12 to class true...\n"; - test.insert(12,true); - print(test,2); - - - cout << "Inserting 22 to class true...\n"; - test.insert(22,true); - print(test,2); - - cout << "Testing some map values:\n"; - cout << " 12: " << test[12] << endl; - - cout << "Inserting 10 to class false...\n"; - test.insert(10,false); - print(test,2); - - cout << "Testing some map values:\n"; - cout << " 12: " << test[12] << endl; - - cout << "Inserting 11 to class false...\n"; - test.insert(11,false); - print(test,2); - - cout << "Testing some map values:\n"; - cout << " 12: " << test[12] << endl; - cout << " 22: " << test[22] << endl; - cout << " 10: " << test[10] << endl; - cout << " 11: " << test[11] << endl; - cout << " 42: " << test[42] << endl; - - cout << "Setting 10 to class true...\n"; - test.set(10,true); - print(test,2); - - cout << "Setting 11 to class true...\n"; - test.set(11,1); - print(test,2); - - cout << "Setting 12 to class false...\n"; - test.set(12,false); - print(test,2); - - cout << "Setting 22 to class false...\n"; - test.set(22,false); - print(test,2); - - cout << "Testing some map values:\n"; - cout << " 12: " << test[12] << endl; - cout << " 22: " << test[22] << endl; - cout << " 10: " << test[10] << endl; - cout << " 11: " << test[11] << endl; - cout << " 42: " << test[42] << endl; - - } - - { - cout << "\n\n\nTest a masikfele iteralasra:\n"; - - BaseMap2 base(344); - TestBoolMap2 test(base,false); - - cout << "Inserting 12 to class true...\n"; - test.insert(12,true); - print(test,2); - - cout << "Inserting 22 to class true...\n"; - test.insert(22,true); - print(test,2); - - cout << "Inserting 10 to class false...\n"; - test.insert(10,false); - print(test,2); - - cout << "Testing some map values:\n"; - cout << " 12: " << test[12] << endl; - cout << " 22: " << test[22] << endl; - cout << " 10: " << test[10] << endl; - cout << " 42: " << test[42] << endl; - - cout << "The elements of the \"true\" class: "; - Int a; - for(test.first(a, true); a.valid(); test.next(a)) { - cout << " " << a; - } - cout << endl; - - cout << "Removing 10 from the map...\n"; - test.remove(10); - print(test,2); - } -} diff -r ee5959aa4410 -r c280de819a73 src/work/klao/jegyzetek --- a/src/work/klao/jegyzetek Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -Ugyes interaktiv kalkulator es jo vegtelen-pontossagu LGPL library: -apt-cache show apcalc (calc a program neve) - - -Boost: felteteles template-fv definialas. Fontos! -http://www.boost.org/libs/utility/enable_if.html - - -Boost: variant. Olyasmi, mint ami nekunk kell. -http://www.boost.org/doc/html/variant.html - - -Boost: egy "barmit" tartalmazni tudo tipus. -(Kis futasideju overhead, futasideju tipus ellenorzes (?)) -http://www.boost.org/doc/html/class.boost.any.html diff -r ee5959aa4410 -r c280de819a73 src/work/klao/map_test.cc --- a/src/work/klao/map_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -#include - -#include - -using namespace std; -using namespace lemon; - -int main() -{ - ConstMap a('#'); - - cout << "sizeof ConstMap = " << sizeof a << endl; - cout << "a[5] = " << a[5] << endl; - - StdMap b('$'); - cout << "sizeof ConstMap = " << sizeof b << endl; - cout << "sizeof std::map = " - << sizeof(std::map) << endl; - cout << "b[5] = " << b[5] << endl; - - b[5]='l'; - cout << "b[5] = " << b[5] << endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/klao/tag_demo.cc --- a/src/work/klao/tag_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,95 +0,0 @@ -#include -#include - -using namespace std; -using namespace boost; - -struct True { - static const bool value = true; -}; -struct False { - static const bool value = false; -}; - -// Here are some graph structures. Some of them define the type "OneTag" -// to True or False, some does not. Not defining a tag is (or at least -// should be) equivalent to defining it to "False". -struct Graph1 {}; -struct Graph2 { - typedef True OneTag; -}; -struct Graph3 { - typedef False OneTag; -}; - - -/**************** The first method to use tags ****************/ - -template -struct HasOneTag { - typedef False TheTag; -}; - -// specialization for those graphs which defined the tag to be true: -template -struct HasOneTag::type > { - typedef True TheTag; -}; - -template -int cn1(const Graph &, False) { - return 0; -} - -template -int cn1(const Graph &, True) { - return 1; -} - -template -int cn1(const Graph &g) { - return cn1(g, typename HasOneTag::TheTag()); -} - -/**************** The second method ****************/ - -// An artificial type to provoke a conversion to avoid ambuguity... -template -struct Wrap { - const T &value; - Wrap(const T &t) : value(t) {} -}; - -template -typename enable_if::type -_cn2(const Graph &) { - return 1; -} - -template -int _cn2(Wrap) { - return 0; -} - -template -int cn2(const Graph& g) { - return _cn2(g); -} - - -int main() { - Graph1 g1; - Graph2 g2; - Graph3 g3; - - cout << "The first method:\n"; - cout << "G1: " << cn1(g1) << endl; - cout << "G2: " << cn1(g2) << endl; - cout << "G3: " << cn1(g3) << endl; - - cout << "The second method:\n"; - cout << "G1: " << cn2(g1) << endl; - cout << "G2: " << cn2(g2) << endl; - cout << "G3: " << cn2(g3) << endl; - -} diff -r ee5959aa4410 -r c280de819a73 src/work/makefile --- a/src/work/makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,43 +0,0 @@ -INCLUDEDIRS ?= -I.. -I. -I./{marci,jacint,alpar,klao,akos} -CXXFLAGS += -g -O2 -W -Wall $(INCLUDEDIRS) -ansi -pedantic - -BINARIES ?= bin_heap_demo - -# Hat, ez elismerem, hogy nagyon ronda, de mukodik minden altalam -# ismert rendszeren :-) (Misi) -ifdef GCCVER -CXX := g++-$(GCCVER) -else -CXX := $(shell type -p g++-3.3 || type -p g++-3.2 || type -p g++-3.0 || type -p g++-3 || echo g++) -endif - -ifdef DEBUG -CXXFLAGS += -DDEBUG -endif - -CC := $(CXX) - - -all: $(BINARIES) - -################ -# Minden binarishoz egy sor, felsorolva, hogy mely object file-okbol -# all elo. -# Kiveve ha siman file.cc -> file esetrol van szo, amikor is nem kell -# irni semmit. - -#proba: proba.o seged.o - -################ - - -.depend dep depend: - -$(CXX) $(CXXFLAGS) -M $(BINARIES:=.cc) > .depend - -makefile: .depend -sinclude .depend - -clean: - $(RM) *.o $(BINARIES) .depend - -.PHONY: all clean dep depend diff -r ee5959aa4410 -r c280de819a73 src/work/marci/augmenting_flow.h --- a/src/work/marci/augmenting_flow.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,605 +0,0 @@ -// -*- C++ -*- -#ifndef LEMON_AUGMENTING_FLOW_H -#define LEMON_AUGMENTING_FLOW_H - -#include -#include - -#include -//#include -#include -#include -#include -#include - -/// \file -/// \brief Maximum flow algorithms. -/// \ingroup galgs - -namespace lemon { - using lemon::marci::BfsIterator; - using lemon::marci::DfsIterator; - - /// \addtogroup galgs - /// @{ - /// Class for augmenting path flow algorithms. - - /// This class provides various algorithms for finding a flow of - /// maximum value in a directed graph. The \e source node, the \e - /// target node, the \e capacity of the edges and the \e starting \e - /// flow value of the edges should be passed to the algorithm through the - /// constructor. -// /// It is possible to change these quantities using the -// /// functions \ref resetSource, \ref resetTarget, \ref resetCap and -// /// \ref resetFlow. Before any subsequent runs of any algorithm of -// /// the class \ref resetFlow should be called. - - /// After running an algorithm of the class, the actual flow value - /// can be obtained by calling \ref flowValue(). The minimum - /// value cut can be written into a \c node map of \c bools by - /// calling \ref minCut. (\ref minMinCut and \ref maxMinCut writes - /// the inclusionwise minimum and maximum of the minimum value - /// cuts, resp.) - ///\param Graph The directed graph type the algorithm runs on. - ///\param Num The number type of the capacities and the flow values. - ///\param CapMap The capacity map type. - ///\param FlowMap The flow map type. - ///\author Marton Makai - template , - typename FlowMap=typename Graph::template EdgeMap > - class AugmentingFlow { - protected: - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - - const Graph* g; - Node s; - Node t; - const CapMap* capacity; - FlowMap* flow; -// int n; //the number of nodes of G - typedef ResGraphWrapper ResGW; - //typedef ExpResGraphWrapper ResGW; - typedef typename ResGW::OutEdgeIt ResGWOutEdgeIt; - typedef typename ResGW::Edge ResGWEdge; - //typedef typename ResGW::template NodeMap ReachedMap; - typedef typename Graph::template NodeMap ReachedMap; - - //level works as a bool map in augmenting path algorithms and is - //used by bfs for storing reached information. In preflow, it - //shows the levels of nodes. - ReachedMap level; - - public: - ///Indicates the property of the starting flow. - - ///Indicates the property of the starting flow. The meanings are as follows: - ///- \c ZERO_FLOW: constant zero flow - ///- \c GEN_FLOW: any flow, i.e. the sum of the in-flows equals to - ///the sum of the out-flows in every node except the \e source and - ///the \e target. - ///- \c PRE_FLOW: any preflow, i.e. the sum of the in-flows is at - ///least the sum of the out-flows in every node except the \e source. - ///- \c NO_FLOW: indicates an unspecified edge map. \ref flow will be - ///set to the constant zero flow in the beginning of the algorithm in this case. - enum FlowEnum{ - ZERO_FLOW, - GEN_FLOW, - PRE_FLOW, - NO_FLOW - }; - - enum StatusEnum { - AFTER_NOTHING, - AFTER_AUGMENTING, - AFTER_FAST_AUGMENTING, - AFTER_PRE_FLOW_PHASE_1, - AFTER_PRE_FLOW_PHASE_2 - }; - - /// Don not needle this flag only if necessary. - StatusEnum status; - int number_of_augmentations; - - - template - class TrickyReachedMap { - protected: - IntMap* map; - int* number_of_augmentations; - public: - typedef Node Key; - typedef bool Value; - TrickyReachedMap(IntMap& _map, int& _number_of_augmentations) : - map(&_map), number_of_augmentations(&_number_of_augmentations) { } - void set(const Node& n, bool b) { - if (b) - map->set(n, *number_of_augmentations); - else - map->set(n, *number_of_augmentations-1); - } - bool operator[](const Node& n) const { - return (*map)[n]==*number_of_augmentations; - } - }; - - AugmentingFlow(const Graph& _G, Node _s, Node _t, const CapMap& _capacity, - FlowMap& _flow) : - g(&_G), s(_s), t(_t), capacity(&_capacity), - flow(&_flow), //n(_G.nodeNum()), - level(_G), //excess(_G,0), - status(AFTER_NOTHING), number_of_augmentations(0) { } - - /// Starting from a flow, this method searches for an augmenting path - /// according to the Edmonds-Karp algorithm - /// and augments the flow on if any. - /// The return value shows if the augmentation was succesful. - bool augmentOnShortestPath(); - bool augmentOnShortestPath2(); - - /// Starting from a flow, this method searches for an augmenting blocking - /// flow according to Dinits' algorithm and augments the flow on if any. - /// The blocking flow is computed in a physically constructed - /// residual graph of type \c Mutablegraph. - /// The return value show sif the augmentation was succesful. - template bool augmentOnBlockingFlow(); - - /// The same as \c augmentOnBlockingFlow but the - /// residual graph is not constructed physically. - /// The return value shows if the augmentation was succesful. - bool augmentOnBlockingFlow2(); - - template - void actMinCut(_CutMap& M) const { - NodeIt v; - switch (status) { - case AFTER_PRE_FLOW_PHASE_1: -// std::cout << "AFTER_PRE_FLOW_PHASE_1" << std::endl; -// for(g->first(v); g->valid(v); g->next(v)) { -// if (level[v] < n) { -// M.set(v, false); -// } else { -// M.set(v, true); -// } -// } - break; - case AFTER_PRE_FLOW_PHASE_2: -// std::cout << "AFTER_PRE_FLOW_PHASE_2" << std::endl; - break; - case AFTER_NOTHING: -// std::cout << "AFTER_NOTHING" << std::endl; - minMinCut(M); - break; - case AFTER_AUGMENTING: -// std::cout << "AFTER_AUGMENTING" << std::endl; - for(g->first(v); v!=INVALID; ++v) { - if (level[v]) { - M.set(v, true); - } else { - M.set(v, false); - } - } - break; - case AFTER_FAST_AUGMENTING: -// std::cout << "AFTER_FAST_AUGMENTING" << std::endl; - for(g->first(v); v!=INVALID; ++v) { - if (level[v]==number_of_augmentations) { - M.set(v, true); - } else { - M.set(v, false); - } - } - break; - } - } - - template - void minMinCut(_CutMap& M) const { - std::queue queue; - - M.set(s,true); - queue.push(s); - - while (!queue.empty()) { - Node w=queue.front(); - queue.pop(); - - OutEdgeIt e; - for(g->first(e,w) ; e!=INVALID; ++e) { - Node v=g->target(e); - if (!M[v] && (*flow)[e] < (*capacity)[e] ) { - queue.push(v); - M.set(v, true); - } - } - - InEdgeIt f; - for(g->first(f,w) ; f!=INVALID; ++f) { - Node v=g->source(f); - if (!M[v] && (*flow)[f] > 0 ) { - queue.push(v); - M.set(v, true); - } - } - } - } - - template - void minMinCut2(_CutMap& M) const { - ResGW res_graph(*g, *capacity, *flow); - BfsIterator bfs(res_graph, M); - bfs.pushAndSetReached(s); - while (!bfs.finished()) ++bfs; - } - - Num flowValue() const { - Num a=0; - for (InEdgeIt e(*g, t); e!=INVALID; ++e) a+=(*flow)[e]; - for (OutEdgeIt e(*g, t); e!=INVALID; ++e) a-=(*flow)[e]; - return a; - //marci figyu: excess[t] epp ezt adja preflow 1. fazisa utan - } - - }; - - - - template - bool AugmentingFlow::augmentOnShortestPath() - { - ResGW res_graph(*g, *capacity, *flow); - typename ResGW::ResCap res_cap(res_graph); - - bool _augment=false; - - //ReachedMap level(res_graph); - for (typename Graph::NodeIt n(*g); n!=INVALID; ++n) level.set(n, 0); - BfsIterator bfs(res_graph, level); - bfs.pushAndSetReached(s); - - typename ResGW::template NodeMap pred(res_graph); - pred.set(s, INVALID); - - typename ResGW::template NodeMap free(res_graph); - - //searching for augmenting path - while ( !bfs.finished() ) { - ResGWEdge e=bfs; - if (e!=INVALID && bfs.isBNodeNewlyReached()) { - Node v=res_graph.source(e); - Node w=res_graph.target(e); - pred.set(w, e); - if (pred[v]!=INVALID) { - free.set(w, std::min(free[v], res_cap[e])); - } else { - free.set(w, res_cap[e]); - } - if (res_graph.target(e)==t) { _augment=true; break; } - } - - ++bfs; - } //end of searching augmenting path - - if (_augment) { - Node n=t; - Num augment_value=free[t]; - while (pred[n]!=INVALID) { - ResGWEdge e=pred[n]; - res_graph.augment(e, augment_value); - n=res_graph.source(e); - } - } - - status=AFTER_AUGMENTING; - return _augment; - } - - template - bool AugmentingFlow::augmentOnShortestPath2() - { - ResGW res_graph(*g, *capacity, *flow); - typename ResGW::ResCap res_cap(res_graph); - - bool _augment=false; - - if (status!=AFTER_FAST_AUGMENTING) { - for (typename Graph::NodeIt n(*g); n!=INVALID; ++n) level.set(n, 0); - number_of_augmentations=1; - } else { - ++number_of_augmentations; - } - TrickyReachedMap - tricky_reached_map(level, number_of_augmentations); - //ReachedMap level(res_graph); -// FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator > - bfs(res_graph, tricky_reached_map); - bfs.pushAndSetReached(s); - - typename ResGW::template NodeMap pred(res_graph); - pred.set(s, INVALID); - - typename ResGW::template NodeMap free(res_graph); - - //searching for augmenting path - while ( !bfs.finished() ) { - ResGWEdge e=bfs; - if (e!=INVALID && bfs.isBNodeNewlyReached()) { - Node v=res_graph.source(e); - Node w=res_graph.target(e); - pred.set(w, e); - if (pred[v]!=INVALID) { - free.set(w, std::min(free[v], res_cap[e])); - } else { - free.set(w, res_cap[e]); - } - if (res_graph.target(e)==t) { _augment=true; break; } - } - - ++bfs; - } //end of searching augmenting path - - if (_augment) { - Node n=t; - Num augment_value=free[t]; - while (pred[n]!=INVALID) { - ResGWEdge e=pred[n]; - res_graph.augment(e, augment_value); - n=res_graph.source(e); - } - } - - status=AFTER_FAST_AUGMENTING; - return _augment; - } - - - template - template - bool AugmentingFlow::augmentOnBlockingFlow() - { - typedef MutableGraph MG; - bool _augment=false; - - ResGW res_graph(*g, *capacity, *flow); - typename ResGW::ResCap res_cap(res_graph); - - //bfs for distances on the residual graph - //ReachedMap level(res_graph); - for (typename Graph::NodeIt n(*g); n!=INVALID; ++n) level.set(n, 0); - BfsIterator bfs(res_graph, level); - bfs.pushAndSetReached(s); - typename ResGW::template NodeMap - dist(res_graph); //filled up with 0's - - //F will contain the physical copy of the residual graph - //with the set of edges which are on shortest paths - MG F; - typename ResGW::template NodeMap - res_graph_to_F(res_graph); - { - for(typename ResGW::NodeIt n(res_graph); n!=INVALID; ++n) - res_graph_to_F.set(n, F.addNode()); - } - - typename MG::Node sF=res_graph_to_F[s]; - typename MG::Node tF=res_graph_to_F[t]; - typename MG::template EdgeMap original_edge(F); - typename MG::template EdgeMap residual_capacity(F); - - while ( !bfs.finished() ) { - ResGWEdge e=bfs; - if (e!=INVALID) { - if (bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); - typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], - res_graph_to_F[res_graph.target(e)]); - //original_edge.update(); - original_edge.set(f, e); - //residual_capacity.update(); - residual_capacity.set(f, res_cap[e]); - } else { - if (dist[res_graph.target(e)]==(dist[res_graph.source(e)]+1)) { - typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], - res_graph_to_F[res_graph.target(e)]); - //original_edge.update(); - original_edge.set(f, e); - //residual_capacity.update(); - residual_capacity.set(f, res_cap[e]); - } - } - } - ++bfs; - } //computing distances from s in the residual graph - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - DfsIterator< MG, typename MG::template NodeMap > dfs(F); - typename MG::template NodeMap pred(F); - pred.set(sF, INVALID); - //invalid iterators for sources - - typename MG::template NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (typename MG::Edge(dfs)!=INVALID) { - if (dfs.isBNodeNewlyReached()) { - typename MG::Node v=F.source(dfs); - typename MG::Node w=F.target(dfs); - pred.set(w, dfs); - if (pred[v]!=INVALID) { - free.set(w, std::min(free[v], residual_capacity[dfs])); - } else { - free.set(w, residual_capacity[dfs]); - } - if (w==tF) { - __augment=true; - _augment=true; - break; - } - - } else { - F.erase(typename MG::Edge(dfs)); - } - } - } - - if (__augment) { - typename MG::Node n=tF; - Num augment_value=free[tF]; - while (pred[n]!=INVALID) { - typename MG::Edge e=pred[n]; - res_graph.augment(original_edge[e], augment_value); - n=F.source(e); - if (residual_capacity[e]==augment_value) - F.erase(e); - else - residual_capacity.set(e, residual_capacity[e]-augment_value); - } - } - - } - - status=AFTER_AUGMENTING; - return _augment; - } - - /// Blocking flow augmentation without constructing the layered - /// graph physically in which the blocking flow is computed. - template - bool AugmentingFlow::augmentOnBlockingFlow2() - { - bool _augment=false; - - ResGW res_graph(*g, *capacity, *flow); - typename ResGW::ResCap res_cap(res_graph); - - //Potential map, for distances from s - typename ResGW::template NodeMap potential(res_graph, 0); - typedef ConstMap Const1Map; - Const1Map const_1_map(1); - TightEdgeFilterMap, - Const1Map> tight_edge_filter(res_graph, potential, const_1_map); - - for (typename Graph::NodeIt n(*g); n!=INVALID; ++n) level.set(n, 0); - BfsIterator bfs(res_graph, level); - bfs.pushAndSetReached(s); - - //computing distances from s in the residual graph - while ( !bfs.finished() ) { - ResGWEdge e=bfs; - if (e!=INVALID && bfs.isBNodeNewlyReached()) - potential.set(res_graph.target(e), potential[res_graph.source(e)]+1); - ++bfs; - } - - //Subgraph containing the edges on some shortest paths - //(i.e. tight edges) - ConstMap true_map(true); - typedef SubGraphWrapper, - TightEdgeFilterMap, - Const1Map> > FilterResGW; - FilterResGW filter_res_graph(res_graph, true_map, tight_edge_filter); - - //Subgraph, which is able to delete edges which are already - //met by the dfs - typename FilterResGW::template NodeMap - first_out_edges(filter_res_graph); - for (typename FilterResGW::NodeIt v(filter_res_graph); v!=INVALID; ++v) - first_out_edges.set - (v, typename FilterResGW::OutEdgeIt(filter_res_graph, v)); - - typedef ErasingFirstGraphWrapper > ErasingResGW; - ErasingResGW erasing_res_graph(filter_res_graph, first_out_edges); - - bool __augment=true; - - while (__augment) { - - __augment=false; - //computing blocking flow with dfs - DfsIterator< ErasingResGW, - typename ErasingResGW::template NodeMap > - dfs(erasing_res_graph); - typename ErasingResGW:: - template NodeMap pred(erasing_res_graph); - pred.set(s, INVALID); - //invalid iterators for sources - - typename ErasingResGW::template NodeMap - free1(erasing_res_graph); - - dfs.pushAndSetReached - /// \bug lemon 0.2 - (typename ErasingResGW::Node - (typename FilterResGW::Node - (typename ResGW::Node(s) - ) - ) - ); - - while (!dfs.finished()) { - ++dfs; - if (typename ErasingResGW::Edge(dfs)!=INVALID) { - if (dfs.isBNodeNewlyReached()) { - - typename ErasingResGW::Node v=erasing_res_graph.source(dfs); - typename ErasingResGW::Node w=erasing_res_graph.target(dfs); - - pred.set(w, typename ErasingResGW::Edge(dfs)); - if (pred[v]!=INVALID) { - free1.set - (w, std::min(free1[v], res_cap - [typename ErasingResGW::Edge(dfs)])); - } else { - free1.set - (w, res_cap - [typename ErasingResGW::Edge(dfs)]); - } - - if (w==t) { - __augment=true; - _augment=true; - break; - } - } else { - erasing_res_graph.erase(dfs); - } - } - } - - if (__augment) { - typename ErasingResGW::Node - n=typename FilterResGW::Node(typename ResGW::Node(t)); - Num augment_value=free1[n]; - while (pred[n]!=INVALID) { - typename ErasingResGW::Edge e=pred[n]; - res_graph.augment(e, augment_value); - n=erasing_res_graph.source(e); - if (res_cap[e]==0) - erasing_res_graph.erase(e); - } - } - - } //while (__augment) - - status=AFTER_AUGMENTING; - return _augment; - } - - -} //namespace lemon - -#endif //LEMON_AUGMENTING_FLOW_H - - diff -r ee5959aa4410 -r c280de819a73 src/work/marci/bfs_dfs.h --- a/src/work/marci/bfs_dfs.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,348 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_BFS_DFS_H -#define LEMON_BFS_DFS_H - -/// \ingroup galgs -/// \file -/// \brief Bfs and dfs iterators. -/// -/// This file contains bfs and dfs iterator classes. -/// -// /// \author Marton Makai - -#include -#include -#include - -#include - -namespace lemon { - - /// Bfs searches for the nodes wich are not marked in - /// \c reached_map - /// Reached have to be a read-write bool node-map. - /// \ingroup galgs - template */ > - class BfsIterator { - protected: - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - const Graph* graph; - std::queue bfs_queue; - ReachedMap& reached; - bool b_node_newly_reached; - Edge actual_edge; - bool own_reached_map; - public: - /// In that constructor \c _reached have to be a reference - /// for a bool bode-map. The algorithm will search for the - /// initially \c false nodes - /// in a bfs order. - BfsIterator(const Graph& _graph, ReachedMap& _reached) : - graph(&_graph), reached(_reached), - own_reached_map(false) { } - /// The same as above, but the map storing the reached nodes - /// is constructed dynamically to everywhere false. - /// \deprecated - BfsIterator(const Graph& _graph) : - graph(&_graph), reached(*(new ReachedMap(*graph /*, false*/))), - own_reached_map(true) { } - /// The map storing the reached nodes have to be destroyed if - /// it was constructed dynamically - ~BfsIterator() { if (own_reached_map) delete &reached; } - /// This method markes \c s reached. - /// If the queue is empty, then \c s is pushed in the bfs queue - /// and the first out-edge is processed. - /// If the queue is not empty, then \c s is simply pushed. - BfsIterator& pushAndSetReached(Node s) { - reached.set(s, true); - if (bfs_queue.empty()) { - bfs_queue.push(s); - actual_edge=OutEdgeIt(*graph, s); - //graph->first(actual_edge, s); - if (actual_edge!=INVALID) { - Node w=graph->target(actual_edge); - if (!reached[w]) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.push(s); - } - return *this; - } - /// As \c BfsIterator works as an edge-iterator, - /// its \c operator++() iterates on the edges in a bfs order. - BfsIterator& - operator++() { - if (actual_edge!=INVALID) { - actual_edge=++OutEdgeIt(*graph, actual_edge); - //++actual_edge; - if (actual_edge!=INVALID) { - Node w=graph->target(actual_edge); - if (!reached[w]) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - if (!bfs_queue.empty()) { - actual_edge=OutEdgeIt(*graph, bfs_queue.front()); - //graph->first(actual_edge, bfs_queue.front()); - if (actual_edge!=INVALID) { - Node w=graph->target(actual_edge); - if (!reached[w]) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - } - return *this; - } - /// Returns true iff the algorithm is finished. - bool finished() const { return bfs_queue.empty(); } - /// The conversion operator makes for converting the bfs-iterator - /// to an \c out-edge-iterator. - ///\bug Edge have to be in LEMON 0.2 - operator Edge() const { return actual_edge; } - /// Returns if b-node has been reached just now. - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - /// Returns if a-node is examined. - bool isANodeExamined() const { return actual_edge==INVALID; } - /// Returns a-node of the actual edge, so does if the edge is invalid. - Node source() const { return bfs_queue.front(); } - /// \pre The actual edge have to be valid. - Node target() const { return graph->target(actual_edge); } - /// Guess what? - /// \deprecated - const ReachedMap& getReachedMap() const { return reached; } - /// Guess what? - /// \deprecated - const std::queue& getBfsQueue() const { return bfs_queue; } - }; - - /// Bfs searches for the nodes wich are not marked in - /// \c reached_map - /// Reached have to work as a read-write bool Node-map, - /// Pred is a write edge node-map and - /// Dist is a read-write node-map of integral value, have to be. - /// \ingroup galgs - template , - typename PredMap - =typename Graph::template NodeMap, - typename DistMap=typename Graph::template NodeMap > - class Bfs : public BfsIterator { - typedef BfsIterator Parent; - protected: - typedef typename Parent::Node Node; - PredMap& pred; - DistMap& dist; - public: - /// The algorithm will search in a bfs order for - /// the nodes which are \c false initially. - /// The constructor makes no initial changes on the maps. - Bfs(const Graph& _graph, ReachedMap& _reached, PredMap& _pred, DistMap& _dist) : - BfsIterator(_graph, _reached), - pred(_pred), dist(_dist) { } - /// \c s is marked to be reached and pushed in the bfs queue. - /// If the queue is empty, then the first out-edge is processed. - /// If \c s was not marked previously, then - /// in addition its pred is set to be \c INVALID, and dist to \c 0. - /// if \c s was marked previuosly, then it is simply pushed. - Bfs& push(Node s) { - if (this->reached[s]) { - Parent::pushAndSetReached(s); - } else { - Parent::pushAndSetReached(s); - pred.set(s, INVALID); - dist.set(s, 0); - } - return *this; - } - /// A bfs is processed from \c s. - Bfs& run(Node s) { - push(s); - while (!this->finished()) this->operator++(); - return *this; - } - /// Beside the bfs iteration, \c pred and \dist are saved in a - /// newly reached node. - Bfs& operator++() { - Parent::operator++(); - if (this->graph->valid(this->actual_edge) && this->b_node_newly_reached) - { - pred.set(this->target(), this->actual_edge); - dist.set(this->target(), dist[this->source()]); - } - return *this; - } - /// Guess what? - /// \deprecated - const PredMap& getPredMap() const { return pred; } - /// Guess what? - /// \deprecated - const DistMap& getDistMap() const { return dist; } - }; - - /// Dfs searches for the nodes wich are not marked in - /// \c reached_map - /// Reached have to be a read-write bool Node-map. - /// \ingroup galgs - template */ > - class DfsIterator { - protected: - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - const Graph* graph; - std::stack dfs_stack; - bool b_node_newly_reached; - Edge actual_edge; - Node actual_node; - ReachedMap& reached; - bool own_reached_map; - public: - /// In that constructor \c _reached have to be a reference - /// for a bool node-map. The algorithm will search in a dfs order for - /// the nodes which are \c false initially - DfsIterator(const Graph& _graph, ReachedMap& _reached) : - graph(&_graph), reached(_reached), - own_reached_map(false) { } - /// The same as above, but the map of reached nodes is - /// constructed dynamically - /// to everywhere false. - DfsIterator(const Graph& _graph) : - graph(&_graph), reached(*(new ReachedMap(*graph /*, false*/))), - own_reached_map(true) { } - ~DfsIterator() { if (own_reached_map) delete &reached; } - /// This method markes s reached and first out-edge is processed. - DfsIterator& pushAndSetReached(Node s) { - actual_node=s; - reached.set(s, true); - OutEdgeIt e(*graph, s); - //graph->first(e, s); - dfs_stack.push(e); - return *this; - } - /// As \c DfsIterator works as an edge-iterator, - /// its \c operator++() iterates on the edges in a dfs order. - DfsIterator& - operator++() { - actual_edge=dfs_stack.top(); - if (actual_edge!=INVALID/*.valid()*/) { - Node w=graph->target(actual_edge); - actual_node=w; - if (!reached[w]) { - OutEdgeIt e(*graph, w); - //graph->first(e, w); - dfs_stack.push(e); - reached.set(w, true); - b_node_newly_reached=true; - } else { - actual_node=graph->source(actual_edge); - ++dfs_stack.top(); - b_node_newly_reached=false; - } - } else { - //actual_node=G.aNode(dfs_stack.top()); - dfs_stack.pop(); - } - return *this; - } - /// Returns true iff the algorithm is finished. - bool finished() const { return dfs_stack.empty(); } - /// The conversion operator makes for converting the bfs-iterator - /// to an \c out-edge-iterator. - ///\bug Edge have to be in LEMON 0.2 - operator Edge() const { return actual_edge; } - /// Returns if b-node has been reached just now. - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - /// Returns if a-node is examined. - bool isANodeExamined() const { return actual_edge==INVALID; } - /// Returns a-node of the actual edge, so does if the edge is invalid. - Node source() const { return actual_node; /*FIXME*/} - /// Returns b-node of the actual edge. - /// \pre The actual edge have to be valid. - Node target() const { return graph->target(actual_edge); } - /// Guess what? - /// \deprecated - const ReachedMap& getReachedMap() const { return reached; } - /// Guess what? - /// \deprecated - const std::stack& getDfsStack() const { return dfs_stack; } - }; - - /// Dfs searches for the nodes wich are not marked in - /// \c reached_map - /// Reached is a read-write bool node-map, - /// Pred is a write node-map, have to be. - /// \ingroup galgs - template , - typename PredMap - =typename Graph::template NodeMap > - class Dfs : public DfsIterator { - typedef DfsIterator Parent; - protected: - typedef typename Parent::Node Node; - PredMap& pred; - public: - /// The algorithm will search in a dfs order for - /// the nodes which are \c false initially. - /// The constructor makes no initial changes on the maps. - Dfs(const Graph& _graph, ReachedMap& _reached, PredMap& _pred) : DfsIterator(_graph, _reached), pred(_pred) { } - /// \c s is marked to be reached and pushed in the bfs queue. - /// If the queue is empty, then the first out-edge is processed. - /// If \c s was not marked previously, then - /// in addition its pred is set to be \c INVALID. - /// if \c s was marked previuosly, then it is simply pushed. - Dfs& push(Node s) { - if (this->reached[s]) { - Parent::pushAndSetReached(s); - } else { - Parent::pushAndSetReached(s); - pred.set(s, INVALID); - } - return *this; - } - /// A bfs is processed from \c s. - Dfs& run(Node s) { - push(s); - while (!this->finished()) this->operator++(); - return *this; - } - /// Beside the dfs iteration, \c pred is saved in a - /// newly reached node. - Dfs& operator++() { - Parent::operator++(); - if (this->graph->valid(this->actual_edge) && this->b_node_newly_reached) - { - pred.set(this->target(), this->actual_edge); - } - return *this; - } - /// Guess what? - /// \deprecated - const PredMap& getPredMap() const { return pred; } - }; - - -} // namespace lemon - -#endif //LEMON_BFS_DFS_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/bfs_dfs_misc.h --- a/src/work/marci/bfs_dfs_misc.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,97 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_BFS_DFS_MISC_H -#define LEMON_BFS_DFS_MISC_H - -/// \ingroup galgs -/// \file -/// \brief Miscellaneous algorithms using bfs and dfs. -/// -/// This file contains several algorithms using bfs and dfs. -/// -// ///\author Marton Makai - -#include -#include - -namespace lemon { - - /// This function eats a read-write \c BoolMap& bool_map, - /// which have to work well up - /// to its \c set and \c operator[]() method. Thus we have to deal - /// very carefully with an uninitialized \c IterableBoolMap. - /// \ingroup galgs - template - bool isBipartite(const Graph& g, BoolMap& bool_map) { - typedef typename Graph::template NodeMap ReachedMap; - ReachedMap reached(g/*, false*/); - BfsIterator bfs(g, reached); - FOR_EACH_LOC(typename Graph::NodeIt, n, g) { - if (!reached[n]) { - bfs.pushAndSetReached(n); - bool_map.set(n, false); - while (!bfs.finished()) { - if (bfs.isBNodeNewlyReached()) { - bool_map.set(bfs.bNode())=!bfs.aNode(); - } else { - if (bool_map[bfs.bNode()]==bool_map[bfs.aNode()]) { - return false; - } - } - ++bfs; - } - } - } - - return true; - } - - /// experimental topsort, - /// I think the final version will work as an iterator - /// if the graph is not a acyclic, the na pre-topological order is obtained - /// (see Schrijver's book). - /// PredMap have to be a writtable node-map. - /// If the graph is directed and not acyclic, - /// then going back from the returned node via the pred information, a - /// cycle is obtained. - /// \ingroup galgs - template - typename Graph::Node - topSort(const Graph& g, std::list& l, - PredMap& pred) { - l.clear(); - typedef typename Graph::template NodeMap ReachedMap; - typedef typename Graph::template NodeMap ExaminedMap; - ReachedMap reached(g/*, false*/); - ExaminedMap examined(g/*, false*/); - DfsIterator dfs(g, reached); - FOR_EACH_LOC(typename Graph::NodeIt, n, g) { - if (!reached[n]) { - dfs.pushAndSetReached(n); - pred.set(n, INVALID); - while (!dfs.finished()) { - ++dfs; - if (dfs.isBNodeNewlyReached()) { - ///\bug lemon 0.2-ben Edge kell - pred.set(dfs.aNode(), typename Graph::OutEdgeIt(dfs)); - } else { - ///\bug ugyanaz - if (g.valid(typename Graph::OutEdgeIt(dfs)) && - !examined[dfs.bNode()]) { - ///\bug lemon 0.2-ben Edge kell - pred.set(dfs.bNode(), typename Graph::OutEdgeIt(dfs)); - return dfs.aNode(); - } - } - if (dfs.isANodeExamined()) { - l.push_back(dfs.aNode()); - examined.set(dfs.aNode(), true); - } - } - } - } - return INVALID; - } - -} //namespace lemon - -#endif //LEMON_BFS_DFS_MISC_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/bfs_mm.h --- a/src/work/marci/bfs_mm.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,559 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_BFS_DFS_H -#define LEMON_BFS_DFS_H - -/// \ingroup galgs -/// \file -/// \brief Bfs and dfs iterators. -/// -/// This file contains bfs and dfs iterator classes. -/// -// /// \author Marton Makai - -#include -#include -#include - -#include - -namespace lemon { - namespace marci { - - /// Bfs searches for the nodes wich are not marked in - /// \c reached_map - /// RM have to be a read-write bool node-map. - /// \ingroup galgs - template */ > - class BfsIterator { - public: - typedef RM ReachedMap; - protected: - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - const Graph* graph; - std::queue bfs_queue; - ReachedMap* reached_map; - bool b_node_newly_reached; - //OutEdgeIt actual_edge; - Edge actual_edge; - /// \e - BfsIterator(const Graph& _graph) : graph(&_graph), reached_map(0) { } - /// RM have to be set before any bfs operation. - BfsIterator& setReached(RM& _reached_map) { - reached_map=&_reached_map; - } - public: - /// In that constructor \c _reached_map have to be a reference - /// for a bool bode-map. The algorithm will search for the - /// initially \c false nodes - /// in a bfs order. - BfsIterator(const Graph& _graph, ReachedMap& _reached_map) : - graph(&_graph), reached_map(&_reached_map) { } - /// The same as above, but the map storing the reached nodes - /// is constructed dynamically to everywhere false. - /// \deprecated -// BfsIterator(const Graph& _graph) : -// graph(&_graph), reached_map(new ReachedMap(*graph /*, false*/)), -// own_reached_map(true) { } -// /// The map storing the reached nodes have to be destroyed if -// /// it was constructed dynamically -// ~BfsIterator() { if (own_reached_map) delete reached_map; } - /// This method markes \c s reached. - /// If the queue is empty, then \c s is pushed in the bfs queue - /// and the first out-edge is processed. - /// If the queue is not empty, then \c s is simply pushed. - BfsIterator& pushAndSetReached(Node s) { - reached_map->set(s, true); - if (bfs_queue.empty()) { - bfs_queue.push(s); - actual_edge=OutEdgeIt(*graph, s); - //graph->first(actual_edge, s); - if (actual_edge!=INVALID) { - Node w=graph->target(actual_edge); - if (!(*reached_map)[w]) { - bfs_queue.push(w); - reached_map->set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.push(s); - } - return *this; - } - /// As \c BfsIterator works as an edge-iterator, - /// its \c operator++() iterates on the edges in a bfs order. - BfsIterator& - operator++() { - if (actual_edge!=INVALID) { - actual_edge=++OutEdgeIt(*graph, actual_edge); - //++actual_edge; - if (actual_edge!=INVALID) { - Node w=graph->target(actual_edge); - if (!(*reached_map)[w]) { - bfs_queue.push(w); - reached_map->set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - if (!bfs_queue.empty()) { - actual_edge=OutEdgeIt(*graph, bfs_queue.front()); - //graph->first(actual_edge, bfs_queue.front()); - if (actual_edge!=INVALID) { - Node w=graph->target(actual_edge); - if (!(*reached_map)[w]) { - bfs_queue.push(w); - reached_map->set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - } - return *this; - } - /// Returns true iff the algorithm is finished. - bool finished() const { return bfs_queue.empty(); } - /// The conversion operator makes for converting the bfs-iterator - /// to an \c out-edge-iterator. - ///\bug Edge have to be in LEMON 0.2 - operator Edge() const { return actual_edge; } - /// Returns if b-node has been reached just now. - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - /// Returns if a-node is examined. - bool isANodeExamined() const { return actual_edge==INVALID; } - /// Returns a-node of the actual edge, so does if the edge is invalid. - Node source() const { return bfs_queue.front(); } - /// \pre The actual edge have to be valid. - Node target() const { return graph->target(actual_edge); } - /// Guess what? - /// \deprecated - const ReachedMap& reachedMap() const { return *reached_map; } - /// Guess what? - /// \deprecated - typename ReachedMap::Value reached(const Node& n) const { - return (*reached_map)[n]; - } - /// Guess what? - /// \deprecated - const std::queue& getBfsQueue() const { return bfs_queue; } - }; - - /// Bfs searches for the nodes wich are not marked in - /// \c reached_map - /// RM have to work as a read-write bool Node-map, - /// PM is a write edge node-map and - /// PNM is a write node node-map and - /// DM is a read-write node-map of integral value, have to be. - /// \ingroup galgs - template , - typename PM - =typename Graph::template NodeMap, - typename PNM - =typename Graph::template NodeMap, - typename DM=typename Graph::template NodeMap > - class Bfs : public BfsIterator { - typedef BfsIterator Parent; - public: - typedef RM ReachedMap; - typedef PM PredMap; - typedef PNM PredNodeMap; - typedef DM DistMap; - protected: - typedef typename Parent::Node Node; - PredMap* pred_map; - PredNodeMap* pred_node_map; - DistMap* dist_map; - /// \e - Bfs - (const Graph& _graph) : BfsIterator(_graph) { } - /// PM have to be set before any bfs operation. - Bfs& - setPredMap(PredMap& _pred_map) { - pred_map=&_pred_map; - } - /// PredNodeMap have to be set before any bfs operation. - Bfs& - setPredNodeMap(PredNodeMap& _pred_node_map) { - pred_node_map=&_pred_node_map; - } - /// DistMap have to be set before any bfs operation. - Bfs& - setDistMap(DistMap& _dist_map) { - dist_map=&_dist_map; - } - public: - /// The algorithm will search in a bfs order for - /// the nodes which are \c false initially. - /// The constructor makes no initial changes on the maps. - Bfs - (const Graph& _graph, ReachedMap& _reached_map, - PredMap& _pred_map, PredNodeMap& _pred_node_map, - DistMap& _dist_map) : BfsIterator(_graph, _reached_map), - pred_map(&_pred_map), pred_node_map(&_pred_node_map), - dist_map(&_dist_map) { } - /// \c s is marked to be reached and pushed in the bfs queue. - /// If the queue is empty, then the first out-edge is processed. - /// If \c s was not marked previously, then - /// in addition its pred_map is set to be \c INVALID, - /// and dist_map to \c 0. - /// if \c s was marked previuosly, then it is simply pushed. - Bfs& push(Node s) { - if ((*(this->reached_map))[s]) { - Parent::pushAndSetReached(s); - } else { - Parent::pushAndSetReached(s); - pred_map->set(s, INVALID); - pred_node_map->set(s, INVALID); - dist_map->set(s, 0); - } - return *this; - } - /// A bfs is processed from \c s. - Bfs& run(Node s) { - push(s); - while (!this->finished()) this->operator++(); - return *this; - } - /// Beside the bfs iteration, \c pred_map and \dist_map are saved in a - /// newly reached node. - Bfs& operator++() { - Parent::operator++(); - if ((this->actual_edge)!=INVALID && this->b_node_newly_reached) - { - pred_map->set(this->target(), this->actual_edge); - pred_node_map->set(this->target(), this->source()); - dist_map->set(this->target(), (*dist_map)[this->source()]); - } - return *this; - } - /// Guess what? - /// \deprecated - const PredMap& predMap() const { return *pred_map; } - /// Guess what? - /// \deprecated - typename PredMap::Value pred(const Node& n) const { - return (*pred_map)[n]; - } - /// Guess what? - /// \deprecated - const PredNodeMap& predNodeMap() const { return *pred_node_map; } - /// Guess what? - /// \deprecated - typename PredNodeMap::Value predNode(const Node& n) const { - return (*pred_node_map)[n]; - } - /// Guess what? - /// \deprecated - const DistMap& distMap() const { return *dist_map; } - /// Guess what? - /// \deprecated - typename DistMap::Value dist(const Node& n) const { - return (*dist_map)[n]; - } - }; - -// template , -// typename PM -// =typename Graph::template NodeMap, -// typename PredNodeMap -// =typename Graph::template NodeMap, -// typename DistMap=typename Graph::template NodeMap > -// class BfsWizard : public Bfs { -// public: -// typedef Bfs Parent; -// protected: -// typedef typename Parent::Node Node; -// bool own_reached_map; -// bool own_pred_map; -// bool own_pred_node_map; -// bool own_dist_map; - -// BfsWizard& -// makeRreached() { -// own_reached_map=true; -// reached=new ReachedMap(*graph, false); -// } -// BfsWizard& -// deleteReachedMap() { -// own_reached_map=false; -// delete reached; -// } - -// BfsWizard& -// makePM() { -// own_pred_map=true; -// pred_map=new PM(*graph, INVALID); -// } -// BfsWizard& -// deletePM() { -// own_pred_map=false; -// delete pred_map; -// } - -// BfsWizard& -// makePredNodeMap() { -// own_pred_node_map=true; -// pred_node_map=new PredNodeMap(*graph, INVALID); -// } -// BfsWizard& -// deletePredNodeMap() { -// own_pred_node_map=false; -// delete pred_node_map; -// } - -// BfsWizard& -// makeDistMap() { -// own_dist_map=true; -// dist_map=new DistMap(*graph, 0); -// } -// BfsWizard& -// deleteDistMap() { -// own_dist_map=false; -// delete dist_map; -// } - -// public: -// /// User friendly Bfs class. -// /// The maps which are not explicitly given by the user are -// /// constructed with false, INVALID, INVALID and 0 values. -// /// For the user defined maps, the values are not modified, and -// /// the bfs is processed without any preset on maps. Therefore, -// /// the bfs will search only the nodes which are set false previously -// /// in reached, and in the nodes wich are not newly reached by the -// /// search, the map values are not modified. -// BfsWizard -// (const Graph& _graph) : -// own_reached_map(false), -// own_pred_map(false), -// own_pred_node_map(false), -// own_dist_map(false) { -// } - -// /// \e -// ~BfsWizard() { -// if (own_reached_map) deleteReachedMap(); -// if (own_pred_map) deletePM(); -// if (own_pred_node_map) deletePredNodeMap(); -// if (own_dist_map) deleteDistMap(); -// } - -// /// \e -// BfsWizard& -// setReachedMap(ReachedMap& _reached) { -// if (own_reached_map) deleteReachedMap(); -// Parent::setReachedMap(_reached); -// } -// /// \e -// BfsWizard& -// setPM(PM& _pred) { -// if (own_pred_map) deletePM(); -// Parent::setPM(_pred); -// } -// /// \e -// BfsWizard& -// setPredNodeMap(PredNodeMap& _pred_node) { -// if (own_pred_node_map) deletePredNodeMap(); -// Parent::setPredNodeMap(_pred_node); -// } -// /// \e -// BfsWizard& -// setDistMap(DistMap& _dist) { -// if (own_dist_map) deleteDistMap(); -// Parent::setDistMap(_dist); -// } - -// /// \e -// BfsWizard& -// push(Node s) { -// if (!reached) makeReachedMap(); -// if (!pred_map) makePMMap(); -// if (!pred_node_map) makePredNodeMap(); -// if (!dist_map) makeDistMap(); -// push(s); -// return *this; -// } - -// /// \e -// BfsWizard& -// operator++() { -// if (!reached) makeRM(); -// if (!pred_map) makePMMap(); -// if (!pred_node_map) makePredNodeMap(); -// if (!dist_map) makeDistMap(); -// ++(*this); -// return *this; -// } - -// /// \e -// BfsWizard& -// run(Node s) { -// if (!reached) makeRM(); -// if (!pred_map) makePMMap(); -// if (!pred_node_map) makePredNodeMap(); -// if (!dist_map) makeDistMap(); -// run(s); -// return *this; -// } - -// }; - - - /// Dfs searches for the nodes wich are not marked in - /// \c reached_map - /// Reached have to be a read-write bool Node-map. - /// \ingroup galgs - template */ > - class DfsIterator { - protected: - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::OutEdgeIt OutEdgeIt; - const Graph* graph; - std::stack dfs_stack; - bool b_node_newly_reached; - Edge actual_edge; - Node actual_node; - ReachedMap& reached; - bool own_reached_map; - public: - /// In that constructor \c _reached have to be a reference - /// for a bool node-map. The algorithm will search in a dfs order for - /// the nodes which are \c false initially - DfsIterator(const Graph& _graph, ReachedMap& _reached) : - graph(&_graph), reached(_reached), - own_reached_map(false) { } - /// The same as above, but the map of reached nodes is - /// constructed dynamically - /// to everywhere false. - DfsIterator(const Graph& _graph) : - graph(&_graph), reached(*(new ReachedMap(*graph /*, false*/))), - own_reached_map(true) { } - ~DfsIterator() { if (own_reached_map) delete &reached; } - /// This method markes s reached and first out-edge is processed. - DfsIterator& pushAndSetReached(Node s) { - actual_node=s; - reached.set(s, true); - OutEdgeIt e(*graph, s); - //graph->first(e, s); - dfs_stack.push(e); - return *this; - } - /// As \c DfsIterator works as an edge-iterator, - /// its \c operator++() iterates on the edges in a dfs order. - DfsIterator& - operator++() { - actual_edge=dfs_stack.top(); - if (actual_edge!=INVALID/*.valid()*/) { - Node w=graph->target(actual_edge); - actual_node=w; - if (!reached[w]) { - OutEdgeIt e(*graph, w); - //graph->first(e, w); - dfs_stack.push(e); - reached.set(w, true); - b_node_newly_reached=true; - } else { - actual_node=graph->source(actual_edge); - ++dfs_stack.top(); - b_node_newly_reached=false; - } - } else { - //actual_node=G.aNode(dfs_stack.top()); - dfs_stack.pop(); - } - return *this; - } - /// Returns true iff the algorithm is finished. - bool finished() const { return dfs_stack.empty(); } - /// The conversion operator makes for converting the bfs-iterator - /// to an \c out-edge-iterator. - ///\bug Edge have to be in LEMON 0.2 - operator Edge() const { return actual_edge; } - /// Returns if b-node has been reached just now. - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - /// Returns if a-node is examined. - bool isANodeExamined() const { return actual_edge==INVALID; } - /// Returns a-node of the actual edge, so does if the edge is invalid. - Node source() const { return actual_node; /*FIXME*/} - /// Returns b-node of the actual edge. - /// \pre The actual edge have to be valid. - Node target() const { return graph->target(actual_edge); } - /// Guess what? - /// \deprecated - const ReachedMap& getReachedMap() const { return reached; } - /// Guess what? - /// \deprecated - const std::stack& getDfsStack() const { return dfs_stack; } - }; - - /// Dfs searches for the nodes wich are not marked in - /// \c reached_map - /// Reached is a read-write bool node-map, - /// Pred is a write node-map, have to be. - /// \ingroup galgs - template , - typename PredMap - =typename Graph::template NodeMap > - class Dfs : public DfsIterator { - typedef DfsIterator Parent; - protected: - typedef typename Parent::Node Node; - PredMap& pred; - public: - /// The algorithm will search in a dfs order for - /// the nodes which are \c false initially. - /// The constructor makes no initial changes on the maps. - Dfs(const Graph& _graph, ReachedMap& _reached, PredMap& _pred) : DfsIterator(_graph, _reached), pred(_pred) { } - /// \c s is marked to be reached and pushed in the bfs queue. - /// If the queue is empty, then the first out-edge is processed. - /// If \c s was not marked previously, then - /// in addition its pred is set to be \c INVALID. - /// if \c s was marked previuosly, then it is simply pushed. - Dfs& push(Node s) { - if (this->reached[s]) { - Parent::pushAndSetReached(s); - } else { - Parent::pushAndSetReached(s); - pred.set(s, INVALID); - } - return *this; - } - /// A bfs is processed from \c s. - Dfs& run(Node s) { - push(s); - while (!this->finished()) this->operator++(); - return *this; - } - /// Beside the dfs iteration, \c pred is saved in a - /// newly reached node. - Dfs& operator++() { - Parent::operator++(); - if (this->graph->valid(this->actual_edge) && this->b_node_newly_reached) - { - pred.set(this->target(), this->actual_edge); - } - return *this; - } - /// Guess what? - /// \deprecated - const PredMap& getPredMap() const { return pred; } - }; - - } // namespace marci -} // namespace lemon - -#endif //LEMON_BFS_DFS_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/bfs_mm_test.cc --- a/src/work/marci/bfs_mm_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,114 +0,0 @@ -/* -*- C++ -*- - * src/test/bfs_test.cc - Part of LEMON, a generic C++ optimization library - * - * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport - * (Egervary Research Group on Combinatorial Optimization, EGRES). - * - * Permission to use, modify and distribute this software is granted - * provided that this copyright notice appears in all copies. For - * precise terms see the accompanying LICENSE file. - * - * This software is provided "AS IS" with no warranty of any kind, - * express or implied, and with no claim as to its suitability for any - * purpose. - * - */ - -#include -#include -#include -#include - -using namespace lemon; - -const int PET_SIZE =5; - - -void check_Bfs_Compile() -{ - typedef concept::StaticGraph Graph; - - typedef Graph::Edge Edge; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::NodeIt NodeIt; - - typedef marci::Bfs BType; - - Graph G; - Node n; - Edge e; - int l; - bool b; - BType::DistMap d(G); - BType::PredMap p(G); - BType::PredNodeMap pn(G); - - Graph::NodeMap reached(G); - Graph::NodeMap pred(G); - Graph::NodeMap pred_node(G); - Graph::NodeMap dist(G); - BType bfs_test(G, reached, pred, pred_node, dist); - - bfs_test.run(n); - - l = bfs_test.dist(n); - e = bfs_test.pred(n); - n = bfs_test.predNode(n); - d = bfs_test.distMap(); - p = bfs_test.predMap(); - pn = bfs_test.predNodeMap(); - b = bfs_test.reached(n); - -} - -int main() -{ - - typedef SmartGraph Graph; - - typedef Graph::Edge Edge; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::NodeIt NodeIt; - typedef Graph::EdgeMap LengthMap; - - Graph G; - Node s, t; - PetStruct ps = addPetersen(G,PET_SIZE); - - s=ps.outer[2]; - t=ps.inner[0]; - - Graph::NodeMap reached(G); - Graph::NodeMap pred(G); - Graph::NodeMap pred_node(G); - Graph::NodeMap dist(G); - marci::Bfs bfs_test(G, reached, pred, pred_node, dist); - bfs_test.run(s); - -// check(bfs_test.dist(t)==3,"Bfs found a wrong path. " << bfs_test.dist(t)); - - -// for(EdgeIt e(G); e==INVALID; ++e) { -// Node u=G.source(e); -// Node v=G.target(e); -// check( !bfs_test.reached(u) || -// (bfs_test.dist(v) > bfs_test.dist(u)+1), -// "Wrong output."); -// } - -// for(NodeIt v(G); v==INVALID; ++v) { -// check(bfs_test.reached(v),"Each node should be reached."); -// if ( bfs_test.pred(v)!=INVALID ) { -// Edge e=bfs_test.pred(v); -// Node u=G.source(e); -// check(u==bfs_test.predNode(v),"Wrong tree."); -// check(bfs_test.dist(v) - bfs_test.dist(u) == 1, -// "Wrong distance. Difference: " -// << std::abs(bfs_test.dist(v) - bfs_test.dist(u) -// - 1)); -// } -// } -} - diff -r ee5959aa4410 -r c280de819a73 src/work/marci/bfsit_vs_byhand.cc --- a/src/work/marci/bfsit_vs_byhand.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -// -*- c++ -*- -#include -#include - -//#include -#include -#include -#include -#include -//#include -#include -#include - -using namespace lemon; - -using std::cout; -using std::endl; - -int main() { - // typedef SageGraph Graph; - typedef SmartGraph Graph ; - //typedef ListGraph Graph; - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - - Graph g; - readDimacs(std::cin, g); - NodeIt s(g); - - cout << g.nodeNum() << endl; - cout << g.edgeNum() << endl; - - Graph::NodeMap pred(g); - cout << "iteration time of bfs written by hand..." << endl; - Timer ts; - ts.reset(); - for (int i=0; i<100; ++i) - { - Graph::NodeMap reached(g); - reached.set(s, true); - pred.set(s, INVALID); - std::queue bfs_queue; - bfs_queue.push(s); - while (!bfs_queue.empty()) { - Node v=bfs_queue.front(); - bfs_queue.pop(); - for(OutEdgeIt e(g,v); e!=INVALID; ++e) { - Node w=g.target(e); - if (!reached[w]) { - bfs_queue.push(w); - reached.set(w, true); - pred.set(w, e); - } - } - } - } - std::cout << ts << std::endl; - - cout << "iteration time with bfs iterator..." << endl; - ts.reset(); - for (int i=0; i<100; ++i) - { - Graph::NodeMap reached(g); - marci::BfsIterator< Graph, Graph::NodeMap > bfs(g, reached); - bfs.pushAndSetReached(s); - pred.set(s, INVALID); - while (!bfs.finished()) { - ++bfs; - if (Graph::Edge(bfs)!=INVALID && bfs.isBNodeNewlyReached()) - pred.set(bfs.target(), Graph::Edge(bfs)); - } - } - std::cout << ts << std::endl; - - cout << "iteration time with bfs aplar..." << endl; - ts.reset(); - for (int i=0; i<100; ++i) - { - Bfs bfs(g); - bfs.setPredMap(pred); - bfs.run(s); - } - std::cout << ts << std::endl; - - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/bipartite_graph_wrapper.h --- a/src/work/marci/bipartite_graph_wrapper.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,933 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_BIPARTITE_GRAPH_WRAPPER_H -#define LEMON_BIPARTITE_GRAPH_WRAPPER_H - -///\ingroup gwrappers -///\file -///\brief Several graph wrappers. -/// -///This file contains several useful graph wrapper functions. -/// -///\author Marton Makai - -#include -#include -#include -#include - -namespace lemon { - - /// \brief A wrapper for composing a bipartite graph from a graph - /// and from a node-map showing for any node which color class it belongs to. - /// - /// A wrapper for composing a bipartite graph. - /// \c _graph have to be a reference to a graph of type \c Graph - /// and \c _s_false_t_true_map is an \c IterableBoolMap - /// reference containing the elements for the - /// color classes S and T. \c _graph is to be referred to an undirected - /// graph or a directed graph with edges oriented from S to T. - /// - /// \author Marton Makai - template - class BipartiteGraphWrapper : public GraphWrapper { - public: - typedef IterableBoolMap< typename Graph::template NodeMap > - SFalseTTrueMap; - protected: - SFalseTTrueMap* s_false_t_true_map; - - BipartiteGraphWrapper() : GraphWrapper()/*, - S_CLASS(false), T_CLASS(true)*/ { } - void setSFalseTTrueMap(SFalseTTrueMap& _s_false_t_true_map) { - s_false_t_true_map=&_s_false_t_true_map; - } - - public: - //marci - //FIXME vhogy igy kellene, csak az en forditom nem eszi meg - static const bool S_CLASS; - static const bool T_CLASS; - - /// This method is to reach the iterable maps of the bipartite graph or - /// bipartite graph wrapper. - const SFalseTTrueMap& sFalseTTrueMap() const { - return *s_false_t_true_map; - } - - //bool S_CLASS; - //bool T_CLASS; - - BipartiteGraphWrapper(Graph& _graph, SFalseTTrueMap& _s_false_t_true_map) - : GraphWrapper(_graph), - s_false_t_true_map(&_s_false_t_true_map)/*, - S_CLASS(false), T_CLASS(true)*/ { } - typedef typename GraphWrapper::Node Node; - //using GraphWrapper::NodeIt; - typedef typename GraphWrapper::Edge Edge; - //using GraphWrapper::EdgeIt; - class ClassNodeIt; - friend class ClassNodeIt; - class OutEdgeIt; - friend class OutEdgeIt; - class InEdgeIt; - friend class InEdgeIt; - class ClassNodeIt : public Node { - friend class BipartiteGraphWrapper; - protected: - const BipartiteGraphWrapper* gw; - public: - ClassNodeIt() { } - ClassNodeIt(Invalid i) : Node(i) { } - ClassNodeIt(const BipartiteGraphWrapper& _gw, bool _class) : - Node(), gw(&_gw) { - _gw.s_false_t_true_map->first(*this, _class); - } - //FIXME needed in new concept, important here - ClassNodeIt(const BipartiteGraphWrapper& _gw, const Node& n) : - Node(n), gw(&_gw) { } - ClassNodeIt& operator++() { - gw->s_false_t_true_map->next(*this); - return *this; - } - }; -// class SNodeIt { -// Node n; -// public: -// SNodeIt() { } -// SNodeIt(const Invalid& i) : n(i) { } -// SNodeIt(const BipartiteGraphWrapper& _G) { -// _G.s_false_t_true_map->first(n, false); -// } -// operator Node() const { return n; } -// }; -// class TNodeIt { -// Node n; -// public: -// TNodeIt() { } -// TNodeIt(const Invalid& i) : n(i) { } -// TNodeIt(const BipartiteGraphWrapper& _G) { -// _G.s_false_t_true_map->first(n, true); -// } -// operator Node() const { return n; } -// }; -// class OutEdgeIt { -// friend class BipartiteGraphWrapper; -// protected: -// typename Graph::OutEdgeIt e; -// public: -// OutEdgeIt() { } -// OutEdgeIt(const Invalid& i) : e(i) { } -// OutEdgeIt(const BipartiteGraphWrapper& _G, const Node& _n) { -// if (!(*(_G.s_false_t_true_map))[_n]) -// e=typename Graph::OutEdgeIt(*(_G.graph), typename Graph::Node(_n)); -// else -// e=INVALID; -// } -// operator Edge() const { return Edge(typename Graph::Edge(e)); } -// }; -// class InEdgeIt { -// friend class BipartiteGraphWrapper; -// protected: -// typename Graph::InEdgeIt e; -// public: -// InEdgeIt() { } -// InEdgeIt(const Invalid& i) : e(i) { } -// InEdgeIt(const BipartiteGraphWrapper& _G, const Node& _n) { -// if ((*(_G.s_false_t_true_map))[_n]) -// e=typename Graph::InEdgeIt(*(_G.graph), typename Graph::Node(_n)); -// else -// e=INVALID; -// } -// operator Edge() const { return Edge(typename Graph::Edge(e)); } -// }; - - using GraphWrapper::first; - ClassNodeIt& first(ClassNodeIt& n, bool _class) const { - n=ClassNodeIt(*this, _class); return n; - } -// SNodeIt& first(SNodeIt& n) const { n=SNodeIt(*this); return n; } -// TNodeIt& first(TNodeIt& n) const { n=TNodeIt(*this); return n; } -// OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { -// i=OutEdgeIt(*this, p); return i; -// } -// InEdgeIt& first(InEdgeIt& i, const Node& p) const { -// i=InEdgeIt(*this, p); return i; -// } - -// using GraphWrapper::next; -// ClassNodeIt& next(ClassNodeIt& n) const { -// this->s_false_t_true_map->next(n.n); return n; -// } -// SNodeIt& next(SNodeIt& n) const { -// this->s_false_t_true_map->next(n); return n; -// } -// TNodeIt& next(TNodeIt& n) const { -// this->s_false_t_true_map->next(n); return n; -// } -// OutEdgeIt& next(OutEdgeIt& i) const { this->graph->next(i.e); return i; } -// InEdgeIt& next(InEdgeIt& i) const { this->graph->next(i.e); return i; } - -// Node source(const Edge& e) { -// if (!(*(this->s_false_t_true_map))[this->graph->source(e)]) -// return Node(this->graph->source(e)); -// else -// return Node(this->graph->target(e)); -// } -// Node target(const Edge& e) { -// if (!(*(this->s_false_t_true_map))[this->graph->source(e)]) -// return Node(this->graph->target(e)); -// else -// return Node(this->graph->source(e)); -// } - -// Node aNode(const OutEdgeIt& e) const { -// return Node(this->graph->aNode(e.e)); -// } -// Node aNode(const InEdgeIt& e) const { -// return Node(this->graph->aNode(e.e)); -// } -// Node bNode(const OutEdgeIt& e) const { -// return Node(this->graph->bNode(e.e)); -// } -// Node bNode(const InEdgeIt& e) const { -// return Node(this->graph->bNode(e.e)); -// } - - /// Returns true iff \c n is in S. - bool inSClass(const Node& n) const { - return !(*(this->s_false_t_true_map))[n]; - } - - /// Returns true iff \c n is in T. - bool inTClass(const Node& n) const { - return (*(this->s_false_t_true_map))[n]; - } - }; - - - template - const bool BipartiteGraphWrapper::S_CLASS=false; - template - const bool BipartiteGraphWrapper::T_CLASS=true; - - /// \brief A bipartite graph template class - /// - /// This class composes a bipartite graph over a directed or undirected - /// graph structure of type \c Graph. - /// \c _graph have to be a reference to a graph of type \c Graph - /// and \c _s_false_t_true_map is an \c IterableBoolMap - /// reference containing the elements for the - /// color classes S and T. \c _graph is to be referred to an undirected - /// graph or a directed graph with edges oriented from S to T. - /// - ///\bug experimental. Do not use this while the bipartitemap augmentation - /// does not work well. - template - class BipartiteGraph : public BipartiteGraphWrapper { -// typedef IterableBoolMap< typename Graph::template NodeMap > -// SFalseTTrueMap; - typedef BipartiteGraphWrapper Parent; - protected: - Graph gr; - typename Graph::template NodeMap bipartite_map; - typename Parent::SFalseTTrueMap s_false_t_true_map; - public: - typedef typename Parent::Node Node; - typedef typename Parent::Edge Edge; - BipartiteGraph() : BipartiteGraphWrapper(), - gr(), bipartite_map(gr, -1), - s_false_t_true_map(bipartite_map) { - Parent::setGraph(gr); - Parent::setSFalseTTrueMap(s_false_t_true_map); - } - - /// the \c bool parameter which can be \c S_Class or \c T_Class shows - /// the color class where the new node is to be inserted. - Node addNode(bool b) { - Node n=Parent::graph->addNode(); - bipartite_map.update(); - //bipartite_map.set(n, -1); - s_false_t_true_map.insert(n, b); - return n; - } - - /// A new edge is inserted. - ///\pre \c source have to be in \c S_Class and \c target in \c T_Class. - Edge addEdge(const Node& source, const Node& target) { - return Parent::graph->addEdge(source, target); - } - - void erase(const Node& n) { - s_false_t_true_map.remove(n); - Parent::graph->erase(n); - } - void erase(const Edge& e) { - Parent::graph->erase(e); - } - - void clear() { - FOR_EACH_LOC(typename Parent::EdgeIt, e, *this) erase(e); - FOR_EACH_LOC(typename Parent::NodeIt, n, *this) erase(n); - } - }; - - template - class stGraphWrapper; - - /// Easier stuff for bipartite graphs. - template - class stBipartiteGraphWrapper : public - stGraphWrapper { - public: - typedef stGraphWrapper Parent; - stBipartiteGraphWrapper(Graph& _graph) : - Parent(_graph, _graph.sFalseTTrueMap(), _graph.sFalseTTrueMap()) { } - }; - -// template -// std::ostream& -// operator<<(std::ostream& os, const typename stGraphWrapper::Node& i) { -// os << "(node: " << typename Graph::Node(i) << " spec: " << i.spec <<")"; -// return os; -// } -// template -// std::ostream& -// operator<<(std::ostream& os, const typename stGraphWrapper::Edge& i) { -// os << "(edge: " << typename Graph::Edge(i) << " spec: " << i.spec << -// " node: " << i.n << ")"; -// return os; -// } - - /// \brief A wrapper for adding extra nodes s and t to a bipartite graph - /// and edges from s to each node of S and form each node of T to t. - /// - /// A wrapper for adding extra nodes s and t to a bipartite graph - /// and edges from s to each node of S and form each node of T to t. - /// This class is very useful to reduce some matching or more - /// generally, capacitataed b-matching problem to a flow problem. - /// According to the bipartite graph concepts the bipartite - /// graph have to be oriented from S to T. - /// - /// \author Marton Makai - template - class stGraphWrapper : public GraphWrapper { - protected: - const sIterableMap* s_iterable_map; - const tIterableMap* t_iterable_map; - public: - class Node; - friend class Node; -//GN, int -//0 normalis, 1 s, 2 t, ez az iteralasi sorrend, -//es a vege a false azaz (invalid, 3) - class NodeIt; - friend class NodeIt; -//GNI, int - class Edge; - friend class Edge; -//GE, int, GN -//0 normalis, 1 s->vmi, 2 vmi->t, ez a sorrend, -//invalid: (invalid, 3, invalid) - class OutEdgeIt; - friend class OutEdgeIt; -//GO, int, GNI -//normalis pontbol (first, 0, invalid), ..., (invalid, 2, vmi), ... (invalid, 3, invalid) -//s-bol (invalid, 1, first), ... (invalid, 3, invalid) -//t-bol (invalid, 3, invalid) - class InEdgeIt; - friend class InEdgeIt; -//GI, int, GNI -//normalis pontbol (first, 0, invalid), ..., (invalid, 1, vmi), ... (invalid, 3, invalid) -//s-be (invalid, 3, invalid) -//t-be (invalid, 2, first), ... (invalid, 3, invalid) - class EdgeIt; - friend class EdgeIt; -//(first, 0, invalid) ... -//(invalid, 1, vmi) -//(invalid, 2, vmi) -//invalid, 3, invalid) - template class NodeMap; - template class EdgeMap; - -// template friend class NodeMap; -// template friend class EdgeMap; - - ///\todo FIXME ezt majd static-ra kell javitani - const Node S_NODE; - const Node T_NODE; - - static const bool S_CLASS=false; - static const bool T_CLASS=true; - - // \bug not too nice constructor. - stGraphWrapper(Graph& _graph, - const sIterableMap& _s_iterable_map, - const tIterableMap& _t_iterable_map) : - GraphWrapper(_graph), - s_iterable_map(&_s_iterable_map), - t_iterable_map(&_t_iterable_map), - S_NODE(INVALID, 1), - T_NODE(INVALID, 2) { } - - -// std::ostream& -// operator<<(std::ostream& os, const /*typename stGraphWrapper::*/Node& i); -// friend std::ostream& -// operator<<(std::ostream& os, const /*typename stGraphWrapper::*/Node& i); -// friend std::ostream& -// operator<<(std::ostream& os, const /*typename stGraphWrapper::*/Edge& i); - - class Node : public Graph::Node { - protected: - friend class GraphWrapper; - friend class stGraphWrapper; - template friend class NodeMap; - friend class Edge; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class EdgeIt; - int spec; - public: - Node() { } - Node(const typename Graph::Node& _n, int _spec=0) : - Graph::Node(_n), spec(_spec) { } - Node(const Invalid& i) : Graph::Node(i), spec(3) { } - friend bool operator==(const Node& u, const Node& v) { - return (u.spec==v.spec && - static_cast(u)== - static_cast(v)); - } - friend bool operator!=(const Node& u, const Node& v) { - return (v.spec!=u.spec || - static_cast(u)!= - static_cast(v)); - } -// template -// friend std::ostream& -// operator<<(std::ostream& os, const typename stGraphWrapper::Node& i); - friend std::ostream& operator<< (std::ostream& os, const Node& i); - int getSpec() const { return spec; } - }; - - class NodeIt { - friend class GraphWrapper; - friend class stGraphWrapper; - typename Graph::NodeIt n; - int spec; - public: - NodeIt() { } - NodeIt(const typename Graph::NodeIt& _n, int _spec) : - n(_n), spec(_spec) { } - NodeIt(const Invalid& i) : n(i), spec(3) { } - NodeIt(const stGraphWrapper& _G) - : n(*(_G.graph)), spec(0) { - if (!_G.graph->valid(n)) spec=1; - } - operator Node() const { return Node(n, spec); } - }; - - class Edge : public Graph::Edge { - friend class GraphWrapper; - friend class stGraphWrapper; - template friend class EdgeMap; - int spec; - typename Graph::Node n; - public: - Edge() { } - Edge(const typename Graph::Edge& _e, int _spec, - const typename Graph::Node& _n) : - Graph::Edge(_e), spec(_spec), n(_n) { - } - Edge(const Invalid& i) : Graph::Edge(i), spec(3), n(i) { } - friend bool operator==(const Edge& u, const Edge& v) { - return (u.spec==v.spec && - static_cast(u)== - static_cast(v) && - u.n==v.n); - } - friend bool operator!=(const Edge& u, const Edge& v) { - return (v.spec!=u.spec || - static_cast(u)!= - static_cast(v) || - u.n!=v.n); - } -// template -// friend std::ostream& -// operator<<(std::ostream& os, const typename stGraphWrapper::Edge& i); - friend std::ostream& operator<< (std::ostream& os, const Edge& i); - int getSpec() const { return spec; } - typename Graph::Node getNode() const { return n; } - }; - - class OutEdgeIt { - friend class GraphWrapper; - friend class stGraphWrapper; - typename Graph::OutEdgeIt e; - int spec; - typename Graph::ClassNodeIt n; - public: - OutEdgeIt() { } - OutEdgeIt(const typename Graph::OutEdgeIt& _e, int _spec, - const typename Graph::ClassNodeIt& _n) : - e(_e), spec(_spec), n(_n) { - } - OutEdgeIt(const Invalid& i) : e(i), spec(3), n(i) { } - OutEdgeIt(const stGraphWrapper& _G, - const Node& _n) { - switch (_n.spec) { - case 0 : - if (_G.graph->inSClass(_n)) { //S, van normalis kiel - e=typename Graph::OutEdgeIt(*(_G.graph), - typename Graph::Node(_n)); - spec=0; - n=INVALID; - if (!_G.graph->valid(e)) spec=3; - } else { //T, specko kiel van - e=INVALID; - spec=2; - n=_n; - } - break; - case 1: - e=INVALID; - spec=1; - _G.graph->first(n, S_CLASS); //s->vmi; - if (!_G.graph->valid(n)) spec=3; //Ha S ures - break; - case 2: - e=INVALID; - spec=3; - n=INVALID; - break; - } - } - operator Edge() const { return Edge(e, spec, n); } - }; - - class InEdgeIt { - friend class GraphWrapper; - friend class stGraphWrapper; - typename Graph::InEdgeIt e; - int spec; - typename Graph::ClassNodeIt n; - public: - InEdgeIt() { } - InEdgeIt(const typename Graph::InEdgeIt& _e, int _spec, - const typename Graph::ClassNodeIt& _n) : - e(_e), spec(_spec), n(_n) { - } - InEdgeIt(const Invalid& i) : e(i), spec(3), n(i) { } - InEdgeIt(const stGraphWrapper& _G, - const Node& _n) { - switch (_n.spec) { - case 0 : - if (_G.graph->inTClass(_n)) { //T, van normalis beel - e=typename Graph::InEdgeIt(*(_G.graph), - typename Graph::Node(_n)); - spec=0; - n=INVALID; - if (!_G.graph->valid(e)) spec=3; - } else { //S, specko beel van - e=INVALID; - spec=1; - n=_n; - } - break; - case 1: - e=INVALID; - spec=3; - n=INVALID; - break; - case 2: - e=INVALID; - spec=2; - _G.graph->first(n, T_CLASS); //vmi->t; - if (!_G.graph->valid(n)) spec=3; //Ha T ures - break; - } - } - operator Edge() const { return Edge(e, spec, n); } - }; - - class EdgeIt { - friend class GraphWrapper; - friend class stGraphWrapper; - typename Graph::EdgeIt e; - int spec; - typename Graph::ClassNodeIt n; - public: - EdgeIt() { } - EdgeIt(const typename Graph::EdgeIt& _e, int _spec, - const typename Graph::ClassNodeIt& _n) : - e(_e), spec(_spec), n(_n) { } - EdgeIt(const Invalid& i) : e(i), spec(3), n(i) { } - EdgeIt(const stGraphWrapper& _G) : - e(*(_G.graph)), spec(0), n(INVALID) { - if (!_G.graph->valid(e)) { - spec=1; - _G.graph->first(n, S_CLASS); - if (!_G.graph->valid(n)) { //Ha S ures - spec=2; - _G.graph->first(n, T_CLASS); - if (!_G.graph->valid(n)) { //Ha T ures - spec=3; - } - } - } - } - operator Edge() const { return Edge(e, spec, n); } - }; - - NodeIt& first(NodeIt& i) const { - i=NodeIt(*this); return i; - } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); return i; - } - EdgeIt& first(EdgeIt& i) const { - i=EdgeIt(*this); return i; - } - - NodeIt& next(NodeIt& i) const { - switch (i.spec) { - case 0: - this->graph->next(i.n); - if (!this->graph->valid(i.n)) { - i.spec=1; - } - break; - case 1: - i.spec=2; - break; - case 2: - i.spec=3; - break; - } - return i; - } - OutEdgeIt& next(OutEdgeIt& i) const { - typename Graph::Node v; - switch (i.spec) { - case 0: //normal edge - v=this->graph->aNode(i.e); - this->graph->next(i.e); - if (!this->graph->valid(i.e)) { //Az igazi elek vegere ertunk - if (this->graph->inSClass(v)) { //S, nincs kiel - i.spec=3; - i.n=INVALID; - } else { //T, van kiel - i.spec=2; - i.n=v; - } - } - break; - case 1: //s->vmi - this->graph->next(i.n); - if (!this->graph->valid(i.n)) i.spec=3; - break; - case 2: //vmi->t - i.spec=3; - i.n=INVALID; - break; - } - return i; - } - InEdgeIt& next(InEdgeIt& i) const { - typename Graph::Node v; - switch (i.spec) { - case 0: //normal edge - v=this->graph->aNode(i.e); - this->graph->next(i.e); - if (!this->graph->valid(i.e)) { //Az igazi elek vegere ertunk - if (this->graph->inTClass(v)) { //S, nincs beel - i.spec=3; - i.n=INVALID; - } else { //S, van beel - i.spec=1; - i.n=v; - } - } - break; - case 1: //s->vmi - i.spec=3; - i.n=INVALID; - break; - case 2: //vmi->t - this->graph->next(i.n); - if (!this->graph->valid(i.n)) i.spec=3; - break; - } - return i; - } - - EdgeIt& next(EdgeIt& i) const { - switch (i.spec) { - case 0: - this->graph->next(i.e); - if (!this->graph->valid(i.e)) { - i.spec=1; - this->graph->first(i.n, S_CLASS); - if (!this->graph->valid(i.n)) { - i.spec=2; - this->graph->first(i.n, T_CLASS); - if (!this->graph->valid(i.n)) i.spec=3; - } - } - break; - case 1: - this->graph->next(i.n); - if (!this->graph->valid(i.n)) { - i.spec=2; - this->graph->first(i.n, T_CLASS); - if (!this->graph->valid(i.n)) i.spec=3; - } - break; - case 2: - this->graph->next(i.n); - if (!this->graph->valid(i.n)) i.spec=3; - break; - } - return i; - } - - Node source(const Edge& e) const { - switch (e.spec) { - case 0: - return Node(this->graph->source(e)); - break; - case 1: - return S_NODE; - break; - case 2: - default: - return Node(e.n); - break; - } - } - Node target(const Edge& e) const { - switch (e.spec) { - case 0: - return Node(this->graph->target(e)); - break; - case 1: - return Node(e.n); - break; - case 2: - default: - return T_NODE; - break; - } - } - - bool valid(const Node& n) const { return (n.spec<3); } - bool valid(const Edge& e) const { return (e.spec<3); } - - int nodeNum() const { return this->graph->nodeNum()+2; } - int edgeNum() const { - return this->graph->edgeNum()+this->graph->nodeNum(); - } - - Node aNode(const OutEdgeIt& e) const { return source(e); } - Node aNode(const InEdgeIt& e) const { return target(e); } - Node bNode(const OutEdgeIt& e) const { return target(e); } - Node bNode(const InEdgeIt& e) const { return source(e); } - - void addNode() const { } - void addEdge() const { } - -// Node addNode() const { return Node(this->graph->addNode()); } -// Edge addEdge(const Node& source, const Node& target) const { -// return Edge(this->graph->addEdge(source, target)); } - -// void erase(const Node& i) const { this->graph->erase(i); } -// void erase(const Edge& i) const { this->graph->erase(i); } - -// void clear() const { this->graph->clear(); } - - template class NodeMap : public GraphWrapper::template NodeMap { - typedef typename GraphWrapper::template NodeMap Parent; - protected: - T s_value, t_value; - public: - NodeMap(const stGraphWrapper& _G) : - Parent(_G), - s_value(), - t_value() { } - NodeMap(const stGraphWrapper& _G, T a) - : Parent(_G, a), - s_value(a), - t_value(a) { } - T operator[](const Node& n) const { - switch (n.spec) { - case 0: - return Parent::operator[](n); - case 1: - return s_value; - case 2: - default: - return t_value; - } - } - void set(const Node& n, T t) { - switch (n.spec) { - case 0: - GraphWrapper::template NodeMap::set(n, t); - break; - case 1: - s_value=t; - break; - case 2: - default: - t_value=t; - break; - } - } - }; - - /// This class is to wrap a node-map of \c Graph and two variables - /// storing values for \c S_NODE and \c T_NODE to a node-map of - /// stGraphWrapper. - template class NodeMapWrapper { - public: - typedef Node Key; - typedef typename NM::Value Value; - protected: - NM* nm; - Value* s_value, t_value; - public: - NodeMapWrapper(NM& _nm, Value& _s_value, Value& _t_value) : - nm(&_nm), s_value(&_s_value), t_value(&_t_value) { } - Value operator[](const Node& n) const { - switch (n.getSpec()) { - case 0: - return (*nm)[n]; - case 1: - return *s_value; - case 2: - default: - return *t_value; - } - } - void set(const Node& n, Value t) { - switch (n.getSpec()) { - case 0: - nm->set(n, t); - break; - case 1: - *s_value=t; - break; - case 2: - default: - *t_value=t; - break; - } - } - }; - - template - class EdgeMap : public GraphWrapper::template EdgeMap { - typedef typename GraphWrapper::template EdgeMap Parent; - protected: - typename GraphWrapper::template NodeMap node_value; - public: - EdgeMap(const stGraphWrapper& _G) - : Parent(_G), - node_value(_G) { } - EdgeMap(const stGraphWrapper& _G, T a) - : Parent(_G, a), - node_value(_G, a) { } - T operator[](const Edge& e) const { - switch (e.spec) { - case 0: - return Parent::operator[](e); - case 1: - return node_value[e.n]; - case 2: - default: - return node_value[e.n]; - } - } - void set(const Edge& e, T t) { - switch (e.spec) { - case 0: - Parent::set(e, t); - break; - case 1: - node_value.set(e.n, t); - break; - case 2: - default: - node_value.set(e.n, t); - break; - } - } - }; - - /// This class is to wrap an edge-map and a node-map of \c Graph - /// to an edge-map of stGraphWrapper. - template - class EdgeMapWrapper { - public: - typedef Edge Key; - typedef typename EM::Value Value; - protected: - EM* em; - NM* nm; - public: - EdgeMapWrapper(EM& _em, NM& _nm) : em(&_em), nm(&_nm) { } - Value operator[](const Edge& e) const { - switch (e.getSpec()) { - case 0: - return (*em)[e]; - case 1: - return (*nm)[e.getNode()]; - case 2: - default: - return (*nm)[e.getNode()]; - } - } - void set(const Edge& e, Value t) { - switch (e.getSpec()) { - case 0: - em->set(e, t); - break; - case 1: - nm->set(e.getNode(), t); - break; - case 2: - default: - nm->set(e.getNode(), t); - break; - } - } - }; - - -// template - friend std::ostream& - operator<<(std::ostream& os, const /*typename stGraphWrapper::*/Node& i) { - os << "(node: " << typename Graph::Node(i) << " spec: " << i.spec <<")"; - return os; - } -// template - friend std::ostream& - operator<<(std::ostream& os, const /*typename stGraphWrapper::*/Edge& i) { - os << "(edge: " << typename Graph::Edge(i) << " spec: " << i.spec << - " node: " << i.n << ")"; - return os; - } - - }; - - ///@} - -} //namespace lemon - - -#endif //LEMON_BIPARTITE_GRAPH_WRAPPER_H - diff -r ee5959aa4410 -r c280de819a73 src/work/marci/bipartite_graph_wrapper_test.cc --- a/src/work/marci/bipartite_graph_wrapper_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ -// -*- c++ -*- -#include -#include -#include - -//#include -#include -//#include -#include -//#include -#include -#include -#include -#include -#include -#include - -using std::cout; -using std::endl; - -using namespace lemon; - -int main() { - //typedef UndirSageGraph Graph; - typedef SmartGraph Graph; - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - - Graph g; -// std::vector s_nodes; -// std::vector t_nodes; -// for (int i=0; i<3; ++i) s_nodes.push_back(g.addNode()); -// for (int i=0; i<3; ++i) t_nodes.push_back(g.addNode()); -// g.addEdge(s_nodes[0], t_nodes[2]); -// g.addEdge(t_nodes[1], s_nodes[2]); -// g.addEdge(s_nodes[0], t_nodes[1]); - -// Graph::NodeMap ref_map(g, -1); -// IterableBoolMap< Graph::NodeMap > bipartite_map(ref_map); -// for (int i=0; i<3; ++i) bipartite_map.insert(s_nodes[i], false); -// for (int i=0; i<3; ++i) bipartite_map.insert(t_nodes[i], true); - - std::vector nodes; - for (int i=0; i<3; ++i) nodes.push_back(g.addNode()); - for (int i=3; i<6; ++i) nodes.push_back(g.addNode()); - g.addEdge(nodes[0], nodes[3+2]); - g.addEdge(nodes[3+1], nodes[2]); - g.addEdge(nodes[0], nodes[3+1]); - - Graph::NodeMap ref_map(g, -1); - IterableBoolMap< Graph::NodeMap > bipartite_map(ref_map); - for (int i=0; i<3; ++i) bipartite_map.insert(nodes[i], false); - for (int i=3; i<6; ++i) bipartite_map.insert(nodes[i], true); - - Graph::Node u; - cout << "These nodes will be in S:" << endl; - //FIXME azert kellene ++, es invalid vizsgalat u-bol, hogy ezt le lehessen - //irni 1etlen FOR_EACH-csel. - for (bipartite_map.first(u, false); u!=INVALID; bipartite_map.next(u)) - cout << g.id(u) << " "; - cout << endl; - cout << "These nodes will be in T:" << endl; - for (bipartite_map.first(u, true); u!=INVALID; bipartite_map.next(u)) - cout << g.id(u) << " "; - cout << endl; - - typedef BipartiteGraphWrapper BGW; - BGW bgw(g, bipartite_map); - - cout << "Nodes by NodeIt:" << endl; - for (BGW::NodeIt n(bgw); n!=INVALID; ++n) - cout << g.id(n) << " "; - cout << endl; - - cout << "Nodes in S by ClassNodeIt:" << endl; - for (BGW::ClassNodeIt n(bgw, bgw.S_CLASS); n!=INVALID; ++n) - cout << g.id(n) << " "; - cout << endl; - - cout << "Nodes in T by ClassNodeIt:" << endl; - for (BGW::ClassNodeIt n(bgw, bgw.T_CLASS); n!=INVALID; ++n) - cout << g.id(n) << " "; - cout << endl; - - cout << "Edges of the bipartite graph:" << endl; - for (BGW::EdgeIt e(bgw); e!=INVALID; ++e) - cout << g.id(bgw.source(e)) << "->" << g.id(bgw.target(e)) << endl; - - BGW::NodeMap dbyj(bgw); - BGW::EdgeMap dbyxcj(bgw); - -// typedef stBipartiteGraphWrapper stGW; -// stGW stgw(bgw); -// ConstMap const1map(1); -// stGW::NodeMap ize(stgw); -// stGW::EdgeMap flow(stgw); - -// BfsIterator< BGW, BGW::NodeMap > bfs(bgw); -// Graph::NodeIt si; -// Graph::Node s; -// s=g.first(si); -// bfs.pushAndSetReached(BGW::Node(s)); -// while (!bfs.finished()) { ++bfs; } - -// FOR_EACH_LOC(stGW::NodeIt, n, stgw) { -// cout << "out-edges of " << n << ":" << endl; -// FOR_EACH_INC_LOC(stGW::OutEdgeIt, e, stgw, n) { -// cout << " " << e << endl; -// cout << " aNode: " << stgw.aNode(e) << endl; -// cout << " bNode: " << stgw.bNode(e) << endl; -// } -// cout << "in-edges of " << n << ":" << endl; -// FOR_EACH_INC_LOC(stGW::InEdgeIt, e, stgw, n) { -// cout << " " << e << endl; -// cout << " aNode: " << stgw.aNode(e) << endl; -// cout << " bNode: " << stgw.bNode(e) << endl; -// } -// } -// cout << "Edges of the stGraphWrapper:" << endl; -// FOR_EACH_LOC(stGW::EdgeIt, n, stgw) { -// cout << " " << n << endl; -// } - -// stGW::NodeMap b(stgw); -// FOR_EACH_LOC(stGW::NodeIt, n, stgw) { -// cout << n << ": " << b[n] << endl; -// } - -// cout << "Bfs from s:" << endl; -// BfsIterator< stGW, stGW::NodeMap > bfs_stgw(stgw); -// bfs_stgw.pushAndSetReached(stgw.S_NODE); -// while (!bfs_stgw.finished()) { -// cout << " " << stGW::OutEdgeIt(bfs_stgw) << endl; -// ++bfs_stgw; -// } - -// AugmentingFlow, stGW::EdgeMap > -// max_flow_test(stgw, stgw.S_NODE, stgw.T_NODE, const1map, flow); -// while (max_flow_test.augmentOnShortestPath()) { } - -// cout << max_flow_test.flowValue() << std::endl; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/bipartite_matching_demo.cc --- a/src/work/marci/bipartite_matching_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -// -*- c++ -*- -#include -#include -#include - -#include -//#include -//#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace lemon; - -using std::cin; -using std::cout; -using std::endl; - -int main() { - //typedef UndirListGraph Graph; - typedef BipartiteGraph Graph; - - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - - Graph g; - - int a; - cout << "number of nodes in the first color class="; - cin >> a; - int b; - cout << "number of nodes in the second color class="; - cin >> b; - int m; - cout << "number of edges="; - cin >> m; - - cout << "Generatig a random bipartite graph..." << endl; - random_init(); - randomBipartiteGraph(g, a, b, m); - -// cout << "Edges of the bipartite graph:" << endl; -// FOR_EACH_LOC(EdgeIt, e, g) cout << e << " "; -// cout << endl; - -// cout << "Nodes:" << endl; -// FOR_EACH_LOC(Graph::NodeIt, v, g) cout << v << " "; -// cout << endl; -// cout << "Nodes in T:" << endl; -// FOR_EACH_INC_LOC(Graph::ClassNodeIt, v, g, Graph::T_CLASS) cout << v << " "; -// cout << endl; -// cout << "Nodes in S:" << endl; -// FOR_EACH_INC_LOC(Graph::ClassNodeIt, v, g, Graph::S_CLASS) cout << v << " "; -// cout << endl; - -// cout << "Erasing the first node..." << endl; -// NodeIt n; -// g.first(n); -// g.erase(n); -// cout << "Nodes of the bipartite graph:" << endl; -// FOR_EACH_GLOB(n, g) cout << n << " "; -// cout << endl; - -// cout << "Nodes in T:" << endl; -// FOR_EACH_INC_LOC(Graph::ClassNodeIt, v, g, Graph::T_CLASS) cout << v << " "; -// cout << endl; -// cout << "Nodes in S:" << endl; -// FOR_EACH_INC_LOC(Graph::ClassNodeIt, v, g, Graph::S_CLASS) cout << v << " "; -// cout << endl; - - typedef stBipartiteGraphWrapper stGW; - stGW stgw(g); - ConstMap const1map(1); - - Timer ts; - cout << "max bipartite matching with stGraphWrapper..." << endl; - ts.reset(); - stGW::EdgeMap flow(stgw); - MaxFlow, stGW::EdgeMap > - max_flow_test(stgw, stgw.S_NODE, stgw.T_NODE, const1map, flow); - max_flow_test.run(); -// while (max_flow_test.augmentOnShortestPath()) { } -// typedef ListGraph MutableGraph; -// while (max_flow_test.augmentOnBlockingFlow1()) { -// while (max_flow_test.augmentOnBlockingFlow2()) { -// cout << max_flow_test.flowValue() << endl; -// } - cout << "matching value: " << max_flow_test.flowValue() << endl; - cout << "elapsed time: " << ts << endl; -// FOR_EACH_LOC(stGW::EdgeIt, e, stgw) { -// if (flow[e]) cout << e << endl; -// } - cout << endl; - - typedef ConstMap EdgeCap; - EdgeCap ge1(1); - typedef ConstMap NodeCap; - NodeCap gn1(1); - typedef Graph::EdgeMap EdgeFlow; - EdgeFlow gef(g); //0 - typedef Graph::NodeMap NodeFlow; - NodeFlow gnf(g); //0 - - typedef stGW::EdgeMapWrapper CapMap; - typedef stGW::EdgeMapWrapper FlowMap; - CapMap cm(ge1, gn1); - FlowMap fm(gef, gnf); - - //Timer ts; - cout << "max bipartite matching with stGraphWrapper..." << endl; - ts.reset(); - //stGW::EdgeMap flow(stgw); - MaxFlow - max_flow_test1(stgw, stgw.S_NODE, stgw.T_NODE, cm, fm); - max_flow_test1.run(); -// while (max_flow_test.augmentOnShortestPath()) { } -// typedef ListGraph MutableGraph; -// while (max_flow_test.augmentOnBlockingFlow1()) { -// while (max_flow_test.augmentOnBlockingFlow2()) { -// cout << max_flow_test.flowValue() << endl; -// } - cout << "matching value: " << max_flow_test1.flowValue() << endl; - cout << "elapsed time: " << ts << endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (gef[e]) cout << e << endl; -// } - cout << endl; - - cout << "max bipartite matching with stGraphWrapper..." << endl; - ts.reset(); - FOR_EACH_LOC(Graph::EdgeIt, e, g) gef.set(e, 0); - FOR_EACH_LOC(Graph::NodeIt, n, g) gnf.set(n, 0); - MaxBipartiteMatching, ConstMap, - Graph::EdgeMap, Graph::NodeMap > - matching_test(g, ge1, gn1, gef, gnf); - matching_test.run(); - - cout << "matching value: " << matching_test.matchingValue() << endl; - cout << "elapsed time: " << ts << endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (gef[e]) cout << e << endl; -// } - cout << endl; - - cout << "max bipartite matching with MaxBipartiteMatching..." << endl; - ts.reset(); - FOR_EACH_LOC(Graph::EdgeIt, e, g) gef.set(e, 0); - //FOR_EACH_LOC(Graph::NodeIt, n, g) gnf.set(n, 0); - typedef MaxBipartiteMatching, - ConstMap, - Graph::EdgeMap, Graph::NodeMap > MaxBipartiteMatching; - MaxBipartiteMatching matching_test_1(g, ge1, gn1, gef/*, gnf*/); - matching_test_1.run(); - - cout << "matching value: " << matching_test_1.matchingValue() << endl; - cout << "elapsed time: " << ts << endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (gef[e]) cout << e << endl; -// } - cout << endl; - - cout << "testing optimality with MaxBipartiteMatching..." << endl; - ts.reset(); - matching_test_1.run(MaxBipartiteMatching::GEN_MATCHING); - cout << "matching value: " << matching_test_1.matchingValue() << endl; - cout << "elapsed time: " << ts << endl; - - cout << "testing optimality with MaxBipartiteMatching..." << endl; - ts.reset(); - matching_test_1.run(MaxBipartiteMatching::GEN_MATCHING_WITH_GOOD_NODE_FLOW); - cout << "matching value: " << matching_test_1.matchingValue() << endl; - cout << "elapsed time: " << ts << endl; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/bug/ansi_pedantic_bug.cc --- a/src/work/marci/bug/ansi_pedantic_bug.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -// -*- c++ -*- -//compile it with -//g++ -ansi -pedantic -//and with -//g++ -//I did with g++ ver 3.0.4, suse 8.0 -//If the template is removed from NodeMap, then it works well. -//athos@cs.elte.hu -//klao@cs.elte.hu -//marci@cs.elte.hu - -class ListGraph { -public: - ListGraph() { } - - template class NodeMap { - const ListGraph& G; - public: - NodeMap(const ListGraph& _G) : G(_G) { } - }; - -}; - -template class GraphWrapper { -protected: - Graph* graph; -public: - GraphWrapper(Graph& _graph) : graph(&_graph) { } - - template class NodeMap : public Graph::template NodeMap { - typedef typename Graph::template NodeMap Parent; - public: - NodeMap(const GraphWrapper& _G) : - Parent(*(_G.graph)) { } - }; -}; - -template -class ResGraphWrapper : public GraphWrapper { -public: - ResGraphWrapper(Graph& _graph) : GraphWrapper(_graph) { } -}; - -template class MaxFlow { - const Graph* g; - typedef ResGraphWrapper ResGW; -public: - MaxFlow(const Graph& _g) : g(&_g) { } - void augmentOnShortestPath() { - ResGW res_graph(*g); - typename ResGW::template NodeMap pred(res_graph); - } -}; - -int main(int, char **) { - ListGraph G; - MaxFlow max_flow_test(G); - max_flow_test.augmentOnShortestPath(); - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/comparison --- a/src/work/marci/comparison Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -./preflow_demo_leda < $1 -./preflow_demo_boost < $1 -./preflow_demo_jacint < $1 -./preflow_demo_athos < $1 -./edmonds_karp_demo < $1 -./edmonds_karp_demo_alpar < $1 -./edmonds_karp_demo_boost < $1 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/comparison_result --- a/src/work/marci/comparison_result Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,26 +0,0 @@ -preflow demo (LEDA)... -elapsed time: 0.510031 sec -flow value: 6068 -preflow demo (BOOST)... -elapsed time: 1.32288 sec -flow value: 6068 -preflow demo (preflow_push_max_flow by JACINT)... -elapsed time: 0.300136 sec -flow value: 6068 -cut value: 6068 -preflow demo (preflow_push_hl by JACINT)... -A is 1 elapsed time: 0.4667 sec -flow value: 6068 -cut value: 6068 -preflow demo (ATHOS)... -elapsed time: 0.150702 sec -flow value: 415 -edmonds karp demo... -elapsed time: 62.3518 sec -flow value: 6068 -edmonds karp demo (ALPAR)... -elapsed time: 58.7259 sec -flow value: 6068 -edmonds karp demo (BOOST)... -elapsed time: 185.794 sec -flow value: 6068 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/const_map_time.cc --- a/src/work/marci/const_map_time.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,46 +0,0 @@ -// Use a DIMACS max flow file as stdin. -// const_map_time < dimacs_max_flow_file - -#include - -#include -#include -#include -#include -#include - -using namespace lemon; - -int main() { - - typedef SmartGraph Graph; - typedef Graph::Node Node; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - - Graph g; - - Node s, t; - NullMap cap; - readDimacs(std::cin, g, cap, s, t); - //typedef ConstMap > CN1; CN1 cn1; - typedef ConstMap CN1; CN1 cn1; - typedef ConstMap CN2; CN2 cn2(true); - // typedef ConstMap > CE1; CE1 ce1; - typedef ConstMap CE1; CE1 ce1; - typedef ConstMap CE2; CE2 ce2(true); - typedef SubGraphWrapper SB1; SB1 sb1(g, cn1, ce1); - typedef SubGraphWrapper SB2; SB2 sb2(g, cn2, ce2); - Timer ts; - cout << "specialized (compile-time) const map time:" << endl; - ts.reset(); - for (SB1::NodeIt n(sb1); n!=INVALID; ++n) - for (SB1::EdgeIt e(sb1); e!=INVALID; ++e) { } - cout << ts << endl; - ts.reset(); - cout << "generic const map time:" << endl; - for (SB2::NodeIt n(sb2); n!=INVALID; ++n) - for (SB2::EdgeIt e(sb2); e!=INVALID; ++e) { } - cout << ts << endl; - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/dereferalas_lenyeg --- a/src/work/marci/dereferalas_lenyeg Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,84 +0,0 @@ -A tovabbiakban az optimalizalas -O-t jelent, a nelkul pedig -O0-t jelent -Az en gepemen, kb Celeron 600, 193 MB Ram, vmi ilyesmi: - -marci@linux:~/etik-ol/src/demo/marci> ./gw_vs_not < flow-1.dim -Optimalizalassal dereferalas nelkul: -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.85s, s: 0s, cu: 0s, cs: 0s, real: 0.853216s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.58s, s: 0.01s, cu: 0s, cs: 0s, real: 0.596862s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.84s, s: 0s, cu: 0s, cs: 0s, real: 0.842828s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 66.05s, s: 0.06s, cu: 0s, cs: 0s, real: 67.2388s -Optimalizalassal 10 dereferalassal: -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.92s, s: 0s, cu: 0s, cs: 0s, real: 0.976928s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.65s, s: 0s, cu: 0s, cs: 0s, real: 0.676874s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.88s, s: 0s, cu: 0s, cs: 0s, real: 0.891846s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 64.87s, s: 0.11s, cu: 0s, cs: 0s, real: 112.369s - -Optimalizalas nelkul dereferalas nelkul: -marci@linux:~/etik-ol/src/demo/marci> ./gw_vs_not < flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 3.03s, s: 0s, cu: 0s, cs: 0s, real: 3.02742s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 2.22s, s: 0.01s, cu: 0s, cs: 0s, real: 2.22656s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 2.83s, s: 0s, cu: 0s, cs: 0s, real: 2.83153s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 201.59s, s: 0.01s, cu: 0s, cs: 0s, real: 201.769s -Optimalizalas nelkul 10 dereferalassal: -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 4.93s, s: 0.02s, cu: 0s, cs: 0s, real: 4.94956s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 3.4s, s: 0.02s, cu: 0s, cs: 0s, real: 3.44515s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 4.65s, s: 0.01s, cu: 0s, cs: 0s, real: 4.66487s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 343.84s, s: 0.29s, cu: 0s, cs: 0s, real: 349.499s - -Ugyanez a karp-on: - -marci@karp:~/etik-ol/src/demo/marci$ ./gw_vs_not -#include - -#include -#include -#include -#include -#include - -#include - -// Use a DIMACS network flow file as stdin. -// max_flow < max_flow.dat -int main() -{ - using namespace boost; - - typedef adjacency_list_traits Traits; - typedef adjacency_list, - property > > - > Graph; - - Graph g; - - property_map::type - capacity = get(edge_capacity, g); - property_map::type - rev = get(edge_reverse, g); - property_map::type - residual_capacity = get(edge_residual_capacity, g); - - Traits::vertex_descriptor s, t; - read_dimacs_max_flow(g, capacity, rev, s, t); - - std::cout << "edmonds karp demo (BOOST)..." << endl; - double pre_time=currTime(); - long flow = edmunds_karp_max_flow(g, s, t); - double post_time=currTime(); - - //std::cout << "maximum flow: " << std::endl; - //graph_traits::vertex_iterator u_iter, u_end; - //graph_traits::out_edge_iterator ei, e_end; - //for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) - // for (tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei) - // if (capacity[*ei] > 0) - // std::cout << "f " << *u_iter << " " << target(*ei, g) << " " - // << (capacity[*ei] - residual_capacity[*ei]) << std::endl; - // - //std::cout << std::endl; - std::cout << "elapsed time: " << post_time-pre_time << " sec"<< std::endl; - std::cout << "flow value: " << flow << std::endl; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/bfs_iterator.h --- a/src/work/marci/experiment/bfs_iterator.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,841 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_BFS_ITERATOR_H -#define LEMON_BFS_ITERATOR_H - -#include -#include -#include -#include - -namespace lemon { - -// template -// struct bfs { -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::NodeIt NodeIt; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// Graph& G; -// Node s; -// typename Graph::NodeMap reached; -// typename Graph::NodeMap pred; -// typename Graph::NodeMap dist; -// std::queue bfs_queue; -// bfs(Graph& _G, Node _s) : G(_G), s(_s), reached(_G), pred(_G), dist(_G) { -// bfs_queue.push(s); -// for(NodeIt i=G.template first(); i.valid(); ++i) -// reached.set(i, false); -// reached.set(s, true); -// dist.set(s, 0); -// } - -// void run() { -// while (!bfs_queue.empty()) { -// Node v=bfs_queue.front(); -// OutEdgeIt e=G.template first(v); -// bfs_queue.pop(); -// for( ; e.valid(); ++e) { -// Node w=G.bNode(e); -// std::cout << "scan node " << G.id(w) << " from node " << G.id(v) << std::endl; -// if (!reached.get(w)) { -// std::cout << G.id(w) << " is newly reached :-)" << std::endl; -// bfs_queue.push(w); -// dist.set(w, dist.get(v)+1); -// pred.set(w, e); -// reached.set(w, true); -// } else { -// std::cout << G.id(w) << " is already reached" << std::endl; -// } -// } -// } -// } -// }; - -// template -// struct bfs_visitor { -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// Graph& G; -// bfs_visitor(Graph& _G) : G(_G) { } -// void at_previously_reached(OutEdgeIt& e) { -// //Node v=G.aNode(e); -// Node w=G.bNode(e); -// std::cout << G.id(w) << " is already reached" << std::endl; -// } -// void at_newly_reached(OutEdgeIt& e) { -// //Node v=G.aNode(e); -// Node w=G.bNode(e); -// std::cout << G.id(w) << " is newly reached :-)" << std::endl; -// } -// }; - -// template -// struct bfs_iterator { -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// Graph& G; -// std::queue& bfs_queue; -// ReachedMap& reached; -// visitor_type& visitor; -// void process() { -// while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// if (bfs_queue.empty()) return; -// OutEdgeIt e=bfs_queue.front(); -// //Node v=G.aNode(e); -// Node w=G.bNode(e); -// if (!reached.get(w)) { -// visitor.at_newly_reached(e); -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// } else { -// visitor.at_previously_reached(e); -// } -// } -// bfs_iterator(Graph& _G, std::queue& _bfs_queue, ReachedMap& _reached, visitor_type& _visitor) : G(_G), bfs_queue(_bfs_queue), reached(_reached), visitor(_visitor) { -// //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// valid(); -// } -// bfs_iterator& operator++() { -// //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// //if (bfs_queue.empty()) return *this; -// if (!valid()) return *this; -// ++(bfs_queue.front()); -// //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// valid(); -// return *this; -// } -// //void next() { -// // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// // if (bfs_queue.empty()) return; -// // ++(bfs_queue.front()); -// // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// //} -// bool valid() { -// while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// if (bfs_queue.empty()) return false; else return true; -// } -// //bool finished() { -// // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// // if (bfs_queue.empty()) return true; else return false; -// //} -// operator Edge () { return bfs_queue.front(); } - -// }; - -// template -// struct bfs_iterator1 { -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// Graph& G; -// std::queue& bfs_queue; -// ReachedMap& reached; -// bool _newly_reached; -// bfs_iterator1(Graph& _G, std::queue& _bfs_queue, ReachedMap& _reached) : G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// valid(); -// if (!bfs_queue.empty() && bfs_queue.front().valid()) { -// OutEdgeIt e=bfs_queue.front(); -// Node w=G.bNode(e); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// _newly_reached=true; -// } else { -// _newly_reached=false; -// } -// } -// } -// bfs_iterator1& operator++() { -// if (!valid()) return *this; -// ++(bfs_queue.front()); -// valid(); -// if (!bfs_queue.empty() && bfs_queue.front().valid()) { -// OutEdgeIt e=bfs_queue.front(); -// Node w=G.bNode(e); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// _newly_reached=true; -// } else { -// _newly_reached=false; -// } -// } -// return *this; -// } -// bool valid() { -// while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// if (bfs_queue.empty()) return false; else return true; -// } -// operator OutEdgeIt() { return bfs_queue.front(); } -// //ize -// bool newly_reached() { return _newly_reached; } - -// }; - -// template -// struct BfsIterator { -// typedef typename Graph::Node Node; -// Graph& G; -// std::queue& bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// BfsIterator(Graph& _G, -// std::queue& _bfs_queue, -// ReachedMap& _reached) : -// G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// BfsIterator& -// operator++() { -// if (bfs_queue.front().valid()) { -// ++(bfs_queue.front()); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// return *this; -// } -// bool finished() { return bfs_queue.empty(); } -// operator OutEdgeIt () { return actual_edge; } -// bool bNodeIsNewlyReached() { return b_node_newly_reached; } -// bool aNodeIsExamined() { return !(actual_edge.valid()); } -// }; - - -// template -// struct DfsIterator { -// typedef typename Graph::Node Node; -// Graph& G; -// std::stack& bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// DfsIterator(Graph& _G, -// std::stack& _bfs_queue, -// ReachedMap& _reached) : -// G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// actual_edge=bfs_queue.top(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// ++(bfs_queue.top()); -// b_node_newly_reached=false; -// } -// } else { -// bfs_queue.pop(); -// } -// } -// DfsIterator& -// operator++() { -// actual_edge=bfs_queue.top(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// ++(bfs_queue.top()); -// b_node_newly_reached=false; -// } -// } else { -// bfs_queue.pop(); -// } -// return *this; -// } -// bool finished() { return bfs_queue.empty(); } -// operator OutEdgeIt () { return actual_edge; } -// bool bNodeIsNewlyReached() { return b_node_newly_reached; } -// bool aNodeIsExamined() { return !(actual_edge.valid()); } -// }; - -// template -// struct BfsIterator1 { -// typedef typename Graph::Node Node; -// Graph& G; -// std::queue& bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// BfsIterator1(Graph& _G, -// std::queue& _bfs_queue, -// ReachedMap& _reached) : -// G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(OutEdgeIt(G, w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// void next() { -// if (bfs_queue.front().valid()) { -// ++(bfs_queue.front()); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(OutEdgeIt(G, w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(OutEdgeIt(G, w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// //return *this; -// } -// bool finished() { return bfs_queue.empty(); } -// operator OutEdgeIt () { return actual_edge; } -// bool bNodeIsNewlyReached() { return b_node_newly_reached; } -// bool aNodeIsExamined() { return !(actual_edge.valid()); } -// }; - - -// template -// struct DfsIterator1 { -// typedef typename Graph::Node Node; -// Graph& G; -// std::stack& bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// DfsIterator1(Graph& _G, -// std::stack& _bfs_queue, -// ReachedMap& _reached) : -// G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// //actual_edge=bfs_queue.top(); -// //if (actual_edge.valid()) { -// // Node w=G.bNode(actual_edge); -// //if (!reached.get(w)) { -// // bfs_queue.push(OutEdgeIt(G, w)); -// // reached.set(w, true); -// // b_node_newly_reached=true; -// //} else { -// // ++(bfs_queue.top()); -// // b_node_newly_reached=false; -// //} -// //} else { -// // bfs_queue.pop(); -// //} -// } -// void next() { -// actual_edge=bfs_queue.top(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(OutEdgeIt(G, w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// ++(bfs_queue.top()); -// b_node_newly_reached=false; -// } -// } else { -// bfs_queue.pop(); -// } -// //return *this; -// } -// bool finished() { return bfs_queue.empty(); } -// operator OutEdgeIt () { return actual_edge; } -// bool bNodeIsNewlyReached() { return b_node_newly_reached; } -// bool aNodeIsLeaved() { return !(actual_edge.valid()); } -// }; - -// template -// class BfsIterator2 { -// typedef typename Graph::Node Node; -// const Graph& G; -// std::queue bfs_queue; -// ReachedMap reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// public: -// BfsIterator2(const Graph& _G) : G(_G), reached(G, false) { } -// void pushAndSetReached(Node s) { -// reached.set(s, true); -// if (bfs_queue.empty()) { -// bfs_queue.push(G.template first(s)); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } //else { -// //} -// } else { -// bfs_queue.push(G.template first(s)); -// } -// } -// BfsIterator2& -// operator++() { -// if (bfs_queue.front().valid()) { -// ++(bfs_queue.front()); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// if (!bfs_queue.empty()) { -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// } -// return *this; -// } -// bool finished() const { return bfs_queue.empty(); } -// operator OutEdgeIt () const { return actual_edge; } -// bool isBNodeNewlyReached() const { return b_node_newly_reached; } -// bool isANodeExamined() const { return !(actual_edge.valid()); } -// const ReachedMap& getReachedMap() const { return reached; } -// const std::queue& getBfsQueue() const { return bfs_queue; } -// }; - - -// template -// class BfsIterator3 { -// typedef typename Graph::Node Node; -// const Graph& G; -// std::queue< std::pair > bfs_queue; -// ReachedMap reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// public: -// BfsIterator3(const Graph& _G) : G(_G), reached(G, false) { } -// void pushAndSetReached(Node s) { -// reached.set(s, true); -// if (bfs_queue.empty()) { -// bfs_queue.push(std::pair(s, G.template first(s))); -// actual_edge=bfs_queue.front().second; -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(std::pair(w, G.template first(w))); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } //else { -// //} -// } else { -// bfs_queue.push(std::pair(s, G.template first(s))); -// } -// } -// BfsIterator3& -// operator++() { -// if (bfs_queue.front().second.valid()) { -// ++(bfs_queue.front().second); -// actual_edge=bfs_queue.front().second; -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(std::pair(w, G.template first(w))); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// if (!bfs_queue.empty()) { -// actual_edge=bfs_queue.front().second; -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(std::pair(w, G.template first(w))); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// } -// return *this; -// } -// bool finished() const { return bfs_queue.empty(); } -// operator OutEdgeIt () const { return actual_edge; } -// bool isBNodeNewlyReached() const { return b_node_newly_reached; } -// bool isANodeExamined() const { return !(actual_edge.valid()); } -// Node aNode() const { return bfs_queue.front().first; } -// Node bNode() const { return G.bNode(actual_edge); } -// const ReachedMap& getReachedMap() const { return reached; } -// //const std::queue< std::pair >& getBfsQueue() const { return bfs_queue; } -// }; - - -// template */ > -// class BfsIterator4 { -// typedef typename Graph::Node Node; -// const Graph& G; -// std::queue bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// bool own_reached_map; -// public: -// BfsIterator4(const Graph& _G, ReachedMap& _reached) : -// G(_G), reached(_reached), -// own_reached_map(false) { } -// BfsIterator4(const Graph& _G) : -// G(_G), reached(*(new ReachedMap(G /*, false*/))), -// own_reached_map(true) { } -// ~BfsIterator4() { if (own_reached_map) delete &reached; } -// void pushAndSetReached(Node s) { -// //std::cout << "mimi" << &reached << std::endl; -// reached.set(s, true); -// //std::cout << "mumus" << std::endl; -// if (bfs_queue.empty()) { -// //std::cout << "bibi1" << std::endl; -// bfs_queue.push(s); -// //std::cout << "zizi" << std::endl; -// G./*getF*/first(actual_edge, s); -// //std::cout << "kiki" << std::endl; -// if (G.valid(actual_edge)/*.valid()*/) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(w); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// //std::cout << "bibi2" << std::endl; -// bfs_queue.push(s); -// } -// } -// BfsIterator4& -// operator++() { -// if (G.valid(actual_edge)/*.valid()*/) { -// /*++*/G.next(actual_edge); -// if (G.valid(actual_edge)/*.valid()*/) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(w); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// if (!bfs_queue.empty()) { -// G./*getF*/first(actual_edge, bfs_queue.front()); -// if (G.valid(actual_edge)/*.valid()*/) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(w); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// } -// return *this; -// } -// bool finished() const { return bfs_queue.empty(); } -// operator OutEdgeIt () const { return actual_edge; } -// bool isBNodeNewlyReached() const { return b_node_newly_reached; } -// bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } -// Node aNode() const { return bfs_queue.front(); } -// Node bNode() const { return G.bNode(actual_edge); } -// const ReachedMap& getReachedMap() const { return reached; } -// const std::queue& getBfsQueue() const { return bfs_queue; } -// }; - - - template */ > - class BfsIterator5 { - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; - GraphWrapper G; - std::queue bfs_queue; - ReachedMap& reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - bool own_reached_map; - public: - BfsIterator5(const GraphWrapper& _G, ReachedMap& _reached) : - G(_G), reached(_reached), - own_reached_map(false) { } - BfsIterator5(const GraphWrapper& _G) : - G(_G), reached(*(new ReachedMap(G /*, false*/))), - own_reached_map(true) { } -// BfsIterator5(const typename GraphWrapper::BaseGraph& _G, -// ReachedMap& _reached) : -// G(_G), reached(_reached), -// own_reached_map(false) { } -// BfsIterator5(const typename GraphWrapper::BaseGraph& _G) : -// G(_G), reached(*(new ReachedMap(G /*, false*/))), -// own_reached_map(true) { } - ~BfsIterator5() { if (own_reached_map) delete &reached; } - void pushAndSetReached(Node s) { - reached.set(s, true); - if (bfs_queue.empty()) { - bfs_queue.push(s); - G./*getF*/first(actual_edge, s); - if (G.valid(actual_edge)/*.valid()*/) { - Node w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.push(s); - } - } - BfsIterator5& - operator++() { - if (G.valid(actual_edge)/*.valid()*/) { - /*++*/G.next(actual_edge); - if (G.valid(actual_edge)/*.valid()*/) { - Node w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - if (!bfs_queue.empty()) { - G./*getF*/first(actual_edge, bfs_queue.front()); - if (G.valid(actual_edge)/*.valid()*/) { - Node w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - } - return *this; - } - bool finished() const { return bfs_queue.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } - Node aNode() const { return bfs_queue.front(); } - Node bNode() const { return G.bNode(actual_edge); } - const ReachedMap& getReachedMap() const { return reached; } - const std::queue& getBfsQueue() const { return bfs_queue; } - }; - -// template */ > -// class DfsIterator4 { -// typedef typename Graph::Node Node; -// const Graph& G; -// std::stack dfs_stack; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// Node actual_node; -// ReachedMap& reached; -// bool own_reached_map; -// public: -// DfsIterator4(const Graph& _G, ReachedMap& _reached) : -// G(_G), reached(_reached), -// own_reached_map(false) { } -// DfsIterator4(const Graph& _G) : -// G(_G), reached(*(new ReachedMap(G /*, false*/))), -// own_reached_map(true) { } -// ~DfsIterator4() { if (own_reached_map) delete &reached; } -// void pushAndSetReached(Node s) { -// actual_node=s; -// reached.set(s, true); -// dfs_stack.push(G.template first(s)); -// } -// DfsIterator4& -// operator++() { -// actual_edge=dfs_stack.top(); -// //actual_node=G.aNode(actual_edge); -// if (G.valid(actual_edge)/*.valid()*/) { -// Node w=G.bNode(actual_edge); -// actual_node=w; -// if (!reached.get(w)) { -// dfs_stack.push(G.template first(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// actual_node=G.aNode(actual_edge); -// /*++*/G.next(dfs_stack.top()); -// b_node_newly_reached=false; -// } -// } else { -// //actual_node=G.aNode(dfs_stack.top()); -// dfs_stack.pop(); -// } -// return *this; -// } -// bool finished() const { return dfs_stack.empty(); } -// operator OutEdgeIt () const { return actual_edge; } -// bool isBNodeNewlyReached() const { return b_node_newly_reached; } -// bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } -// Node aNode() const { return actual_node; /*FIXME*/} -// Node bNode() const { return G.bNode(actual_edge); } -// const ReachedMap& getReachedMap() const { return reached; } -// const std::stack& getDfsStack() const { return dfs_stack; } -// }; - - template */ > - class DfsIterator5 { - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; - GraphWrapper G; - std::stack dfs_stack; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - Node actual_node; - ReachedMap& reached; - bool own_reached_map; - public: - DfsIterator5(const GraphWrapper& _G, ReachedMap& _reached) : - G(_G), reached(_reached), - own_reached_map(false) { } - DfsIterator5(const GraphWrapper& _G) : - G(_G), reached(*(new ReachedMap(G /*, false*/))), - own_reached_map(true) { } - ~DfsIterator5() { if (own_reached_map) delete &reached; } - void pushAndSetReached(Node s) { - actual_node=s; - reached.set(s, true); - OutEdgeIt e; - G.first(e, s); - dfs_stack.push(e); - } - DfsIterator5& - operator++() { - actual_edge=dfs_stack.top(); - //actual_node=G.aNode(actual_edge); - if (G.valid(actual_edge)/*.valid()*/) { - Node w=G.bNode(actual_edge); - actual_node=w; - if (!reached.get(w)) { - OutEdgeIt e; - G.first(e, w); - dfs_stack.push(e); - reached.set(w, true); - b_node_newly_reached=true; - } else { - actual_node=G.aNode(actual_edge); - /*++*/G.next(dfs_stack.top()); - b_node_newly_reached=false; - } - } else { - //actual_node=G.aNode(dfs_stack.top()); - dfs_stack.pop(); - } - return *this; - } - bool finished() const { return dfs_stack.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } - Node aNode() const { return actual_node; /*FIXME*/} - Node bNode() const { return G.bNode(actual_edge); } - const ReachedMap& getReachedMap() const { return reached; } - const std::stack& getDfsStack() const { return dfs_stack; } - }; - - - -} // namespace lemon - -#endif //LEMON_BFS_ITERATOR_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/bfs_iterator_1.h --- a/src/work/marci/experiment/bfs_iterator_1.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,836 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_BFS_ITERATOR_H -#define LEMON_BFS_ITERATOR_H - -#include -#include -#include -#include - -namespace lemon { - -// template -// struct bfs { -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::NodeIt NodeIt; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// Graph& G; -// Node s; -// typename Graph::NodeMap reached; -// typename Graph::NodeMap pred; -// typename Graph::NodeMap dist; -// std::queue bfs_queue; -// bfs(Graph& _G, Node _s) : G(_G), s(_s), reached(_G), pred(_G), dist(_G) { -// bfs_queue.push(s); -// for(NodeIt i=G.template first(); i.valid(); ++i) -// reached.set(i, false); -// reached.set(s, true); -// dist.set(s, 0); -// } - -// void run() { -// while (!bfs_queue.empty()) { -// Node v=bfs_queue.front(); -// OutEdgeIt e=G.template first(v); -// bfs_queue.pop(); -// for( ; e.valid(); ++e) { -// Node w=G.bNode(e); -// std::cout << "scan node " << G.id(w) << " from node " << G.id(v) << std::endl; -// if (!reached.get(w)) { -// std::cout << G.id(w) << " is newly reached :-)" << std::endl; -// bfs_queue.push(w); -// dist.set(w, dist.get(v)+1); -// pred.set(w, e); -// reached.set(w, true); -// } else { -// std::cout << G.id(w) << " is already reached" << std::endl; -// } -// } -// } -// } -// }; - -// template -// struct bfs_visitor { -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// Graph& G; -// bfs_visitor(Graph& _G) : G(_G) { } -// void at_previously_reached(OutEdgeIt& e) { -// //Node v=G.aNode(e); -// Node w=G.bNode(e); -// std::cout << G.id(w) << " is already reached" << std::endl; -// } -// void at_newly_reached(OutEdgeIt& e) { -// //Node v=G.aNode(e); -// Node w=G.bNode(e); -// std::cout << G.id(w) << " is newly reached :-)" << std::endl; -// } -// }; - -// template -// struct bfs_iterator { -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// Graph& G; -// std::queue& bfs_queue; -// ReachedMap& reached; -// visitor_type& visitor; -// void process() { -// while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// if (bfs_queue.empty()) return; -// OutEdgeIt e=bfs_queue.front(); -// //Node v=G.aNode(e); -// Node w=G.bNode(e); -// if (!reached.get(w)) { -// visitor.at_newly_reached(e); -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// } else { -// visitor.at_previously_reached(e); -// } -// } -// bfs_iterator(Graph& _G, std::queue& _bfs_queue, ReachedMap& _reached, visitor_type& _visitor) : G(_G), bfs_queue(_bfs_queue), reached(_reached), visitor(_visitor) { -// //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// valid(); -// } -// bfs_iterator& operator++() { -// //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// //if (bfs_queue.empty()) return *this; -// if (!valid()) return *this; -// ++(bfs_queue.front()); -// //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// valid(); -// return *this; -// } -// //void next() { -// // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// // if (bfs_queue.empty()) return; -// // ++(bfs_queue.front()); -// // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// //} -// bool valid() { -// while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// if (bfs_queue.empty()) return false; else return true; -// } -// //bool finished() { -// // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// // if (bfs_queue.empty()) return true; else return false; -// //} -// operator Edge () { return bfs_queue.front(); } - -// }; - -// template -// struct bfs_iterator1 { -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// Graph& G; -// std::queue& bfs_queue; -// ReachedMap& reached; -// bool _newly_reached; -// bfs_iterator1(Graph& _G, std::queue& _bfs_queue, ReachedMap& _reached) : G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// valid(); -// if (!bfs_queue.empty() && bfs_queue.front().valid()) { -// OutEdgeIt e=bfs_queue.front(); -// Node w=G.bNode(e); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// _newly_reached=true; -// } else { -// _newly_reached=false; -// } -// } -// } -// bfs_iterator1& operator++() { -// if (!valid()) return *this; -// ++(bfs_queue.front()); -// valid(); -// if (!bfs_queue.empty() && bfs_queue.front().valid()) { -// OutEdgeIt e=bfs_queue.front(); -// Node w=G.bNode(e); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// _newly_reached=true; -// } else { -// _newly_reached=false; -// } -// } -// return *this; -// } -// bool valid() { -// while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } -// if (bfs_queue.empty()) return false; else return true; -// } -// operator OutEdgeIt() { return bfs_queue.front(); } -// //ize -// bool newly_reached() { return _newly_reached; } - -// }; - -// template -// struct BfsIterator { -// typedef typename Graph::Node Node; -// Graph& G; -// std::queue& bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// BfsIterator(Graph& _G, -// std::queue& _bfs_queue, -// ReachedMap& _reached) : -// G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// BfsIterator& -// operator++() { -// if (bfs_queue.front().valid()) { -// ++(bfs_queue.front()); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// return *this; -// } -// bool finished() { return bfs_queue.empty(); } -// operator OutEdgeIt () { return actual_edge; } -// bool bNodeIsNewlyReached() { return b_node_newly_reached; } -// bool aNodeIsExamined() { return !(actual_edge.valid()); } -// }; - - -// template -// struct DfsIterator { -// typedef typename Graph::Node Node; -// Graph& G; -// std::stack& bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// DfsIterator(Graph& _G, -// std::stack& _bfs_queue, -// ReachedMap& _reached) : -// G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// actual_edge=bfs_queue.top(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// ++(bfs_queue.top()); -// b_node_newly_reached=false; -// } -// } else { -// bfs_queue.pop(); -// } -// } -// DfsIterator& -// operator++() { -// actual_edge=bfs_queue.top(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.firstOutEdge(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// ++(bfs_queue.top()); -// b_node_newly_reached=false; -// } -// } else { -// bfs_queue.pop(); -// } -// return *this; -// } -// bool finished() { return bfs_queue.empty(); } -// operator OutEdgeIt () { return actual_edge; } -// bool bNodeIsNewlyReached() { return b_node_newly_reached; } -// bool aNodeIsExamined() { return !(actual_edge.valid()); } -// }; - -// template -// struct BfsIterator1 { -// typedef typename Graph::Node Node; -// Graph& G; -// std::queue& bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// BfsIterator1(Graph& _G, -// std::queue& _bfs_queue, -// ReachedMap& _reached) : -// G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(OutEdgeIt(G, w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// void next() { -// if (bfs_queue.front().valid()) { -// ++(bfs_queue.front()); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(OutEdgeIt(G, w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(OutEdgeIt(G, w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// //return *this; -// } -// bool finished() { return bfs_queue.empty(); } -// operator OutEdgeIt () { return actual_edge; } -// bool bNodeIsNewlyReached() { return b_node_newly_reached; } -// bool aNodeIsExamined() { return !(actual_edge.valid()); } -// }; - - -// template -// struct DfsIterator1 { -// typedef typename Graph::Node Node; -// Graph& G; -// std::stack& bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// DfsIterator1(Graph& _G, -// std::stack& _bfs_queue, -// ReachedMap& _reached) : -// G(_G), bfs_queue(_bfs_queue), reached(_reached) { -// //actual_edge=bfs_queue.top(); -// //if (actual_edge.valid()) { -// // Node w=G.bNode(actual_edge); -// //if (!reached.get(w)) { -// // bfs_queue.push(OutEdgeIt(G, w)); -// // reached.set(w, true); -// // b_node_newly_reached=true; -// //} else { -// // ++(bfs_queue.top()); -// // b_node_newly_reached=false; -// //} -// //} else { -// // bfs_queue.pop(); -// //} -// } -// void next() { -// actual_edge=bfs_queue.top(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(OutEdgeIt(G, w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// ++(bfs_queue.top()); -// b_node_newly_reached=false; -// } -// } else { -// bfs_queue.pop(); -// } -// //return *this; -// } -// bool finished() { return bfs_queue.empty(); } -// operator OutEdgeIt () { return actual_edge; } -// bool bNodeIsNewlyReached() { return b_node_newly_reached; } -// bool aNodeIsLeaved() { return !(actual_edge.valid()); } -// }; - -// template -// class BfsIterator2 { -// typedef typename Graph::Node Node; -// const Graph& G; -// std::queue bfs_queue; -// ReachedMap reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// public: -// BfsIterator2(const Graph& _G) : G(_G), reached(G, false) { } -// void pushAndSetReached(Node s) { -// reached.set(s, true); -// if (bfs_queue.empty()) { -// bfs_queue.push(G.template first(s)); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } //else { -// //} -// } else { -// bfs_queue.push(G.template first(s)); -// } -// } -// BfsIterator2& -// operator++() { -// if (bfs_queue.front().valid()) { -// ++(bfs_queue.front()); -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// if (!bfs_queue.empty()) { -// actual_edge=bfs_queue.front(); -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(G.template first(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// } -// return *this; -// } -// bool finished() const { return bfs_queue.empty(); } -// operator OutEdgeIt () const { return actual_edge; } -// bool isBNodeNewlyReached() const { return b_node_newly_reached; } -// bool isANodeExamined() const { return !(actual_edge.valid()); } -// const ReachedMap& getReachedMap() const { return reached; } -// const std::queue& getBfsQueue() const { return bfs_queue; } -// }; - - -// template -// class BfsIterator3 { -// typedef typename Graph::Node Node; -// const Graph& G; -// std::queue< std::pair > bfs_queue; -// ReachedMap reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// public: -// BfsIterator3(const Graph& _G) : G(_G), reached(G, false) { } -// void pushAndSetReached(Node s) { -// reached.set(s, true); -// if (bfs_queue.empty()) { -// bfs_queue.push(std::pair(s, G.template first(s))); -// actual_edge=bfs_queue.front().second; -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(std::pair(w, G.template first(w))); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } //else { -// //} -// } else { -// bfs_queue.push(std::pair(s, G.template first(s))); -// } -// } -// BfsIterator3& -// operator++() { -// if (bfs_queue.front().second.valid()) { -// ++(bfs_queue.front().second); -// actual_edge=bfs_queue.front().second; -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(std::pair(w, G.template first(w))); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// if (!bfs_queue.empty()) { -// actual_edge=bfs_queue.front().second; -// if (actual_edge.valid()) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(std::pair(w, G.template first(w))); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// } -// return *this; -// } -// bool finished() const { return bfs_queue.empty(); } -// operator OutEdgeIt () const { return actual_edge; } -// bool isBNodeNewlyReached() const { return b_node_newly_reached; } -// bool isANodeExamined() const { return !(actual_edge.valid()); } -// Node aNode() const { return bfs_queue.front().first; } -// Node bNode() const { return G.bNode(actual_edge); } -// const ReachedMap& getReachedMap() const { return reached; } -// //const std::queue< std::pair >& getBfsQueue() const { return bfs_queue; } -// }; - - -// template */ > -// class BfsIterator4 { -// typedef typename Graph::Node Node; -// const Graph& G; -// std::queue bfs_queue; -// ReachedMap& reached; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// bool own_reached_map; -// public: -// BfsIterator4(const Graph& _G, ReachedMap& _reached) : -// G(_G), reached(_reached), -// own_reached_map(false) { } -// BfsIterator4(const Graph& _G) : -// G(_G), reached(*(new ReachedMap(G /*, false*/))), -// own_reached_map(true) { } -// ~BfsIterator4() { if (own_reached_map) delete &reached; } -// void pushAndSetReached(Node s) { -// //std::cout << "mimi" << &reached << std::endl; -// reached.set(s, true); -// //std::cout << "mumus" << std::endl; -// if (bfs_queue.empty()) { -// //std::cout << "bibi1" << std::endl; -// bfs_queue.push(s); -// //std::cout << "zizi" << std::endl; -// G./*getF*/first(actual_edge, s); -// //std::cout << "kiki" << std::endl; -// if (G.valid(actual_edge)/*.valid()*/) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(w); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// //std::cout << "bibi2" << std::endl; -// bfs_queue.push(s); -// } -// } -// BfsIterator4& -// operator++() { -// if (G.valid(actual_edge)/*.valid()*/) { -// /*++*/G.next(actual_edge); -// if (G.valid(actual_edge)/*.valid()*/) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(w); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } else { -// bfs_queue.pop(); -// if (!bfs_queue.empty()) { -// G./*getF*/first(actual_edge, bfs_queue.front()); -// if (G.valid(actual_edge)/*.valid()*/) { -// Node w=G.bNode(actual_edge); -// if (!reached.get(w)) { -// bfs_queue.push(w); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// b_node_newly_reached=false; -// } -// } -// } -// } -// return *this; -// } -// bool finished() const { return bfs_queue.empty(); } -// operator OutEdgeIt () const { return actual_edge; } -// bool isBNodeNewlyReached() const { return b_node_newly_reached; } -// bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } -// Node aNode() const { return bfs_queue.front(); } -// Node bNode() const { return G.bNode(actual_edge); } -// const ReachedMap& getReachedMap() const { return reached; } -// const std::queue& getBfsQueue() const { return bfs_queue; } -// }; - - - template */ > - class BfsIterator5 { - protected: - typedef typename Graph::Node Node; - typedef typename Graph::OutEdgeIt OutEdgeIt; - const Graph* graph; - std::queue bfs_queue; - ReachedMap& reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - bool own_reached_map; - public: - BfsIterator5(const Graph& _graph, ReachedMap& _reached) : - graph(&_graph), reached(_reached), - own_reached_map(false) { } - BfsIterator5(const Graph& _graph) : - graph(&_graph), reached(*(new ReachedMap(*graph /*, false*/))), - own_reached_map(true) { } - ~BfsIterator5() { if (own_reached_map) delete &reached; } - void pushAndSetReached(Node s) { - reached.set(s, true); - if (bfs_queue.empty()) { - bfs_queue.push(s); - graph->first(actual_edge, s); - if (graph->valid(actual_edge)) { - Node w=graph->bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.push(s); - } - } - BfsIterator5& - operator++() { - if (graph->valid(actual_edge)) { - graph->next(actual_edge); - if (graph->valid(actual_edge)) { - Node w=graph->bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - if (!bfs_queue.empty()) { - graph->first(actual_edge, bfs_queue.front()); - if (graph->valid(actual_edge)) { - Node w=graph->bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - } - return *this; - } - bool finished() const { return bfs_queue.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(graph->valid(actual_edge)); } - Node aNode() const { return bfs_queue.front(); } - Node bNode() const { return graph->bNode(actual_edge); } - const ReachedMap& getReachedMap() const { return reached; } - const std::queue& getBfsQueue() const { return bfs_queue; } - }; - -// template */ > -// class DfsIterator4 { -// typedef typename Graph::Node Node; -// const Graph& G; -// std::stack dfs_stack; -// bool b_node_newly_reached; -// OutEdgeIt actual_edge; -// Node actual_node; -// ReachedMap& reached; -// bool own_reached_map; -// public: -// DfsIterator4(const Graph& _G, ReachedMap& _reached) : -// G(_G), reached(_reached), -// own_reached_map(false) { } -// DfsIterator4(const Graph& _G) : -// G(_G), reached(*(new ReachedMap(G /*, false*/))), -// own_reached_map(true) { } -// ~DfsIterator4() { if (own_reached_map) delete &reached; } -// void pushAndSetReached(Node s) { -// actual_node=s; -// reached.set(s, true); -// dfs_stack.push(G.template first(s)); -// } -// DfsIterator4& -// operator++() { -// actual_edge=dfs_stack.top(); -// //actual_node=G.aNode(actual_edge); -// if (G.valid(actual_edge)/*.valid()*/) { -// Node w=G.bNode(actual_edge); -// actual_node=w; -// if (!reached.get(w)) { -// dfs_stack.push(G.template first(w)); -// reached.set(w, true); -// b_node_newly_reached=true; -// } else { -// actual_node=G.aNode(actual_edge); -// /*++*/G.next(dfs_stack.top()); -// b_node_newly_reached=false; -// } -// } else { -// //actual_node=G.aNode(dfs_stack.top()); -// dfs_stack.pop(); -// } -// return *this; -// } -// bool finished() const { return dfs_stack.empty(); } -// operator OutEdgeIt () const { return actual_edge; } -// bool isBNodeNewlyReached() const { return b_node_newly_reached; } -// bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } -// Node aNode() const { return actual_node; /*FIXME*/} -// Node bNode() const { return G.bNode(actual_edge); } -// const ReachedMap& getReachedMap() const { return reached; } -// const std::stack& getDfsStack() const { return dfs_stack; } -// }; - - template */ > - class DfsIterator5 { - protected: - typedef typename Graph::Node Node; - typedef typename Graph::OutEdgeIt OutEdgeIt; - const Graph* graph; - std::stack dfs_stack; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - Node actual_node; - ReachedMap& reached; - bool own_reached_map; - public: - DfsIterator5(const Graph& _graph, ReachedMap& _reached) : - graph(&_graph), reached(_reached), - own_reached_map(false) { } - DfsIterator5(const Graph& _graph) : - graph(&_graph), reached(*(new ReachedMap(*graph /*, false*/))), - own_reached_map(true) { } - ~DfsIterator5() { if (own_reached_map) delete &reached; } - void pushAndSetReached(Node s) { - actual_node=s; - reached.set(s, true); - OutEdgeIt e; - graph->first(e, s); - dfs_stack.push(e); - } - DfsIterator5& - operator++() { - actual_edge=dfs_stack.top(); - //actual_node=G.aNode(actual_edge); - if (graph->valid(actual_edge)/*.valid()*/) { - Node w=graph->bNode(actual_edge); - actual_node=w; - if (!reached.get(w)) { - OutEdgeIt e; - graph->first(e, w); - dfs_stack.push(e); - reached.set(w, true); - b_node_newly_reached=true; - } else { - actual_node=graph->aNode(actual_edge); - graph->next(dfs_stack.top()); - b_node_newly_reached=false; - } - } else { - //actual_node=G.aNode(dfs_stack.top()); - dfs_stack.pop(); - } - return *this; - } - bool finished() const { return dfs_stack.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(graph->valid(actual_edge)); } - Node aNode() const { return actual_node; /*FIXME*/} - Node bNode() const { return G.bNode(actual_edge); } - const ReachedMap& getReachedMap() const { return reached; } - const std::stack& getDfsStack() const { return dfs_stack; } - }; - - - -} // namespace lemon - -#endif //LEMON_BFS_ITERATOR_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/deref_vs_optimization --- a/src/work/marci/experiment/deref_vs_optimization Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,147 +0,0 @@ --O0: - -marci@karp:~/etik-ol/src/demo/marci/experiment$ ./edmonds_karp_demo < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 1.11s, s: 0.02s, cu: 0s, cs: 0s, real: 1.23456s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.78s, s: 0s, cu: 0s, cs: 0s, real: 0.851246s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 1.02s, s: 0s, cu: 0s, cs: 0s, real: 1.12829s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 76.09s, s: 0.77s, cu: 0s, cs: 0s, real: 127.892s -number of augmentation phases: 1854 -flow value: 6068 - -marci@karp:~/etik-ol/src/demo/marci/experiment$ ./edmonds_karp_demo_1 < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 1.04s, s: 0.01s, cu: 0s, cs: 0s, real: 1.1643s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.73s, s: 0s, cu: 0s, cs: 0s, real: 1.29574s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.96s, s: 0.01s, cu: 0s, cs: 0s, real: 1.05265s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 72.65s, s: 0.67s, cu: 0s, cs: 0s, real: 79.8199s -number of augmentation phases: 1854 -flow value: 6068 - -marci@linux:~/etik-ol/src/demo/marci/experiment> ./edmonds_karp_demo < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 3.04s, s: 0.01s, cu: 0s, cs: 0s, real: 3.09736s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 2.22s, s: 0.02s, cu: 0s, cs: 0s, real: 2.26504s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 2.88s, s: 0.01s, cu: 0s, cs: 0s, real: 3.03116s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 201.69s, s: 0.08s, cu: 0s, cs: 0s, real: 203.99s -number of augmentation phases: 1854 -flow value: 6068 - -marci@linux:~/etik-ol/src/demo/marci/experiment> ./edmonds_karp_demo_1 < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 3s, s: 0.04s, cu: 0s, cs: 0s, real: 3.19728s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 2.21s, s: 0.03s, cu: 0s, cs: 0s, real: 2.25725s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 2.82s, s: 0s, cu: 0s, cs: 0s, real: 2.83294s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 203.39s, s: 0.07s, cu: 0s, cs: 0s, real: 204.401s -number of augmentation phases: 1854 -flow value: 6068 - --03: - -marci@karp:~/etik-ol/src/demo/marci/experiment$ ./edmonds_karp_demo < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.36s, s: 0.01s, cu: 0s, cs: 0s, real: 1.13854s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.23s, s: 0s, cu: 0s, cs: 0s, real: 0.243452s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.32s, s: 0.01s, cu: 0s, cs: 0s, real: 0.339224s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 26.98s, s: 0.29s, cu: 0s, cs: 0s, real: 32.2458s -number of augmentation phases: 1854 -flow value: 6068 - -marci@karp:~/etik-ol/src/demo/marci/experiment$ ./edmonds_karp_demo_1 < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.37s, s: 0.01s, cu: 0s, cs: 0s, real: 0.402523s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.22s, s: 0s, cu: 0s, cs: 0s, real: 0.244878s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.32s, s: 0.01s, cu: 0s, cs: 0s, real: 0.353093s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 27.02s, s: 0.34s, cu: 0s, cs: 0s, real: 30.0516s -number of augmentation phases: 1854 -flow value: 6068 - -marci@linux:~/etik-ol/src/demo/marci/experiment> ./edmonds_karp_demo < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.91s, s: 0.01s, cu: 0s, cs: 0s, real: 0.938415s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.61s, s: 0.01s, cu: 0s, cs: 0s, real: 0.62244s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.88s, s: 0s, cu: 0s, cs: 0s, real: 0.914984s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 66.55s, s: 0.09s, cu: 0s, cs: 0s, real: 67.5525s -number of augmentation phases: 1854 -flow value: 6068 - -marci@linux:~/etik-ol/src/demo/marci/experiment> ./edmonds_karp_demo_1 < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.85s, s: 0s, cu: 0s, cs: 0s, real: 0.858786s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.58s, s: 0.03s, cu: 0s, cs: 0s, real: 0.61541s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.85s, s: 0s, cu: 0s, cs: 0s, real: 0.85847s -number of augmentation phases: 3 -flow value: 6068 -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 66.71s, s: 0.06s, cu: 0s, cs: 0s, real: 68.0292s -number of augmentation phases: 1854 -flow value: 6068 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/deref_vs_optimization_lenyeg --- a/src/work/marci/experiment/deref_vs_optimization_lenyeg Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,83 +0,0 @@ --O0: - -marci@karp:~/etik-ol/src/demo/marci/experiment$ ./edmonds_karp_demo < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 1.11s, s: 0.02s, cu: 0s, cs: 0s, real: 1.23456s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.78s, s: 0s, cu: 0s, cs: 0s, real: 0.851246s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 1.02s, s: 0s, cu: 0s, cs: 0s, real: 1.12829s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 76.09s, s: 0.77s, cu: 0s, cs: 0s, real: 127.892s - -marci@karp:~/etik-ol/src/demo/marci/experiment$ ./edmonds_karp_demo_1 < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 1.04s, s: 0.01s, cu: 0s, cs: 0s, real: 1.1643s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.73s, s: 0s, cu: 0s, cs: 0s, real: 1.29574s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.96s, s: 0.01s, cu: 0s, cs: 0s, real: 1.05265s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 72.65s, s: 0.67s, cu: 0s, cs: 0s, real: 79.8199s - -marci@linux:~/etik-ol/src/demo/marci/experiment> ./edmonds_karp_demo < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 3.04s, s: 0.01s, cu: 0s, cs: 0s, real: 3.09736s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 2.22s, s: 0.02s, cu: 0s, cs: 0s, real: 2.26504s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 2.88s, s: 0.01s, cu: 0s, cs: 0s, real: 3.03116s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 201.69s, s: 0.08s, cu: 0s, cs: 0s, real: 203.99s - -marci@linux:~/etik-ol/src/demo/marci/experiment> ./edmonds_karp_demo_1 < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 3s, s: 0.04s, cu: 0s, cs: 0s, real: 3.19728s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 2.21s, s: 0.03s, cu: 0s, cs: 0s, real: 2.25725s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 2.82s, s: 0s, cu: 0s, cs: 0s, real: 2.83294s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 203.39s, s: 0.07s, cu: 0s, cs: 0s, real: 204.401s - --03: - -marci@karp:~/etik-ol/src/demo/marci/experiment$ ./edmonds_karp_demo < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.36s, s: 0.01s, cu: 0s, cs: 0s, real: 1.13854s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.23s, s: 0s, cu: 0s, cs: 0s, real: 0.243452s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.32s, s: 0.01s, cu: 0s, cs: 0s, real: 0.339224s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 26.98s, s: 0.29s, cu: 0s, cs: 0s, real: 32.2458s - -marci@karp:~/etik-ol/src/demo/marci/experiment$ ./edmonds_karp_demo_1 < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.37s, s: 0.01s, cu: 0s, cs: 0s, real: 0.402523s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.22s, s: 0s, cu: 0s, cs: 0s, real: 0.244878s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.32s, s: 0.01s, cu: 0s, cs: 0s, real: 0.353093s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 27.02s, s: 0.34s, cu: 0s, cs: 0s, real: 30.0516s - -marci@linux:~/etik-ol/src/demo/marci/experiment> ./edmonds_karp_demo < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.91s, s: 0.01s, cu: 0s, cs: 0s, real: 0.938415s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.61s, s: 0.01s, cu: 0s, cs: 0s, real: 0.62244s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.88s, s: 0s, cu: 0s, cs: 0s, real: 0.914984s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 66.55s, s: 0.09s, cu: 0s, cs: 0s, real: 67.5525s - -marci@linux:~/etik-ol/src/demo/marci/experiment> ./edmonds_karp_demo_1 < ../flow-1.dim -edmonds karp demo (physical blocking flow augmentation)... -elapsed time: u: 0.85s, s: 0s, cu: 0s, cs: 0s, real: 0.858786s -edmonds karp demo (physical blocking flow 1 augmentation)... -elapsed time: u: 0.58s, s: 0.03s, cu: 0s, cs: 0s, real: 0.61541s -edmonds karp demo (on-the-fly blocking flow augmentation)... -elapsed time: u: 0.85s, s: 0s, cu: 0s, cs: 0s, real: 0.85847s -edmonds karp demo (on-the-fly shortest path augmentation)... -elapsed time: u: 66.71s, s: 0.06s, cu: 0s, cs: 0s, real: 68.0292s diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/edmonds_karp.h --- a/src/work/marci/experiment/edmonds_karp.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1238 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_EDMONDS_KARP_H -#define LEMON_EDMONDS_KARP_H - -#include -#include -#include - -#include -#include - -namespace lemon { - - template - class ResGraph { - public: - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - private: - typedef typename Graph::SymEdgeIt OldSymEdgeIt; - const Graph& G; - FlowMap& flow; - const CapacityMap& capacity; - public: - ResGraph(const Graph& _G, FlowMap& _flow, - const CapacityMap& _capacity) : - G(_G), flow(_flow), capacity(_capacity) { } - - class Edge; - class OutEdgeIt; - friend class Edge; - friend class OutEdgeIt; - - class Edge { - friend class ResGraph; - protected: - const ResGraph* resG; - OldSymEdgeIt sym; - public: - Edge() { } - //Edge(const Edge& e) : resG(e.resG), sym(e.sym) { } - Number free() const { - if (resG->G.aNode(sym)==resG->G.source(sym)) { - return (resG->capacity.get(sym)-resG->flow.get(sym)); - } else { - return (resG->flow.get(sym)); - } - } - bool valid() const { return sym.valid(); } - void augment(Number a) const { - if (resG->G.aNode(sym)==resG->G.source(sym)) { - resG->flow.set(sym, resG->flow.get(sym)+a); - //resG->flow[sym]+=a; - } else { - resG->flow.set(sym, resG->flow.get(sym)-a); - //resG->flow[sym]-=a; - } - } - }; - - class OutEdgeIt : public Edge { - friend class ResGraph; - public: - OutEdgeIt() { } - //OutEdgeIt(const OutEdgeIt& e) { resG=e.resG; sym=e.sym; } - private: - OutEdgeIt(const ResGraph& _resG, Node v) { - resG=&_resG; - sym=resG->G.template first(v); - while( sym.valid() && !(free()>0) ) { ++sym; } - } - public: - OutEdgeIt& operator++() { - ++sym; - while( sym.valid() && !(free()>0) ) { ++sym; } - return *this; - } - }; - - void /*getF*/first(OutEdgeIt& e, Node v) const { - e=OutEdgeIt(*this, v); - } - void /*getF*/first(NodeIt& v) const { G./*getF*/first(v); } - - template< typename It > - It first() const { - It e; - /*getF*/first(e); - return e; - } - - template< typename It > - It first(Node v) const { - It e; - /*getF*/first(e, v); - return e; - } - - Node source(Edge e) const { return G.aNode(e.sym); } - Node target(Edge e) const { return G.bNode(e.sym); } - - Node aNode(OutEdgeIt e) const { return G.aNode(e.sym); } - Node bNode(OutEdgeIt e) const { return G.bNode(e.sym); } - - int id(Node v) const { return G.id(v); } - - template - class NodeMap { - typename Graph::NodeMap node_map; - public: - NodeMap(const ResGraph& _G) : node_map(_G.G) { } - NodeMap(const ResGraph& _G, S a) : node_map(_G.G, a) { } - void set(Node nit, S a) { node_map.set(nit, a); } - S get(Node nit) const { return node_map.get(nit); } - S& operator[](Node nit) { return node_map[nit]; } - const S& operator[](Node nit) const { return node_map[nit]; } - }; - - }; - - - template - class ResGraph2 { - public: - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - private: - //typedef typename Graph::SymEdgeIt OldSymEdgeIt; - typedef typename Graph::OutEdgeIt OldOutEdgeIt; - typedef typename Graph::InEdgeIt OldInEdgeIt; - - const Graph& G; - FlowMap& flow; - const CapacityMap& capacity; - public: - ResGraph2(const Graph& _G, FlowMap& _flow, - const CapacityMap& _capacity) : - G(_G), flow(_flow), capacity(_capacity) { } - - class Edge; - class OutEdgeIt; - friend class Edge; - friend class OutEdgeIt; - - class Edge { - friend class ResGraph2; - protected: - const ResGraph2* resG; - //OldSymEdgeIt sym; - OldOutEdgeIt out; - OldInEdgeIt in; - bool out_or_in; //true, iff out - public: - Edge() : out_or_in(true) { } - Number free() const { - if (out_or_in) { - return (resG->capacity.get(out)-resG->flow.get(out)); - } else { - return (resG->flow.get(in)); - } - } - bool valid() const { - return out_or_in && out.valid() || in.valid(); } - void augment(Number a) const { - if (out_or_in) { - resG->flow.set(out, resG->flow.get(out)+a); - } else { - resG->flow.set(in, resG->flow.get(in)-a); - } - } - }; - - class OutEdgeIt : public Edge { - friend class ResGraph2; - public: - OutEdgeIt() { } - private: - OutEdgeIt(const ResGraph2& _resG, Node v) { - resG=&_resG; - out=resG->G.template first(v); - while( out.valid() && !(free()>0) ) { ++out; } - if (!out.valid()) { - out_or_in=0; - in=resG->G.template first(v); - while( in.valid() && !(free()>0) ) { ++in; } - } - } - public: - OutEdgeIt& operator++() { - if (out_or_in) { - Node v=resG->G.aNode(out); - ++out; - while( out.valid() && !(free()>0) ) { ++out; } - if (!out.valid()) { - out_or_in=0; - in=resG->G.template first(v); - while( in.valid() && !(free()>0) ) { ++in; } - } - } else { - ++in; - while( in.valid() && !(free()>0) ) { ++in; } - } - return *this; - } - }; - - void /*getF*/first(OutEdgeIt& e, Node v) const { - e=OutEdgeIt(*this, v); - } - void /*getF*/first(NodeIt& v) const { G./*getF*/first(v); } - - template< typename It > - It first() const { - It e; - /*getF*/first(e); - return e; - } - - template< typename It > - It first(Node v) const { - It e; - /*getF*/first(e, v); - return e; - } - - Node source(Edge e) const { - return ((e.out_or_in) ? G.aNode(e.out) : G.aNode(e.in)); } - Node target(Edge e) const { - return ((e.out_or_in) ? G.bNode(e.out) : G.bNode(e.in)); } - - Node aNode(OutEdgeIt e) const { - return ((e.out_or_in) ? G.aNode(e.out) : G.aNode(e.in)); } - Node bNode(OutEdgeIt e) const { - return ((e.out_or_in) ? G.bNode(e.out) : G.bNode(e.in)); } - - int id(Node v) const { return G.id(v); } - - template - class NodeMap { - typename Graph::NodeMap node_map; - public: - NodeMap(const ResGraph2& _G) : node_map(_G.G) { } - NodeMap(const ResGraph2& _G, S a) : node_map(_G.G, a) { } - void set(Node nit, S a) { node_map.set(nit, a); } - S get(Node nit) const { return node_map.get(nit); } - }; - }; - - - template - class MaxFlow { - protected: - typedef GraphWrapper GW; - typedef typename GW::Node Node; - typedef typename GW::Edge Edge; - typedef typename GW::EdgeIt EdgeIt; - typedef typename GW::OutEdgeIt OutEdgeIt; - typedef typename GW::InEdgeIt InEdgeIt; - //const Graph* G; - GW gw; - Node s; - Node t; - FlowMap* flow; - const CapacityMap* capacity; - typedef ResGraphWrapper ResGW; - typedef typename ResGW::OutEdgeIt ResGWOutEdgeIt; - typedef typename ResGW::Edge ResGWEdge; - public: - - MaxFlow(const GW& _gw, Node _s, Node _t, FlowMap& _flow, const CapacityMap& _capacity) : - gw(_gw), s(_s), t(_t), flow(&_flow), capacity(&_capacity) { } - - bool augmentOnShortestPath() { - ResGW res_graph(gw, *flow, *capacity); - bool _augment=false; - - typedef typename ResGW::NodeMap ReachedMap; - BfsIterator5< ResGW, ReachedMap > bfs(res_graph); - bfs.pushAndSetReached(s); - - typename ResGW::NodeMap pred(res_graph); - pred.set(s, INVALID); - - typename ResGW::NodeMap free(res_graph); - - //searching for augmenting path - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - Node v=res_graph.source(e); - Node w=res_graph.target(e); - pred.set(w, e); - if (res_graph.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), res_graph.resCap(e))); - } else { - free.set(w, res_graph.resCap(e)); - } - if (res_graph.target(e)==t) { _augment=true; break; } - } - - ++bfs; - } //end of searching augmenting path - - if (_augment) { - Node n=t; - Number augment_value=free.get(t); - while (res_graph.valid(pred.get(n))) { - ResGWEdge e=pred.get(n); - res_graph.augment(e, augment_value); - n=res_graph.source(e); - } - } - - return _augment; - } - - template - class DistanceMap { - protected: - MapGraphWrapper gw; - typename MapGraphWrapper::NodeMap dist; - public: - DistanceMap(MapGraphWrapper& _gw) : gw(_gw), dist(_gw, _gw.nodeNum()) { } - void set(const typename MapGraphWrapper::Node& n, int a) { dist[n]=a; } - int get(const typename MapGraphWrapper::Node& n) const { return dist[n]; } - bool get(const typename MapGraphWrapper::Edge& e) const { - return (dist.get(gw.source(e)) bool augmentOnBlockingFlow() { - typedef MutableGraph MG; - bool _augment=false; - - ResGW res_graph(gw, *flow, *capacity); - - typedef typename ResGW::NodeMap ReachedMap; - BfsIterator5< ResGW, ReachedMap > bfs(res_graph); - - bfs.pushAndSetReached(s); - //typename ResGW::NodeMap dist(res_graph); //filled up with 0's - DistanceMap dist(res_graph); - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); - } - ++bfs; - } //computing distances from s in the residual graph - - MG F; - typedef SubGraphWrapper > FilterResGW; - FilterResGW filter_res_graph(res_graph, dist); - typename ResGW::NodeMap res_graph_to_F(res_graph); - { - typename ResGW::NodeIt n; - for(res_graph.first(n); res_graph.valid(n); res_graph.next(n)) { - res_graph_to_F.set(n, F.addNode()); - } - } - - typename MG::Node sF=res_graph_to_F.get(s); - typename MG::Node tF=res_graph_to_F.get(t); - typename MG::EdgeMap original_edge(F); - typename MG::EdgeMap residual_capacity(F); - - //Making F to the graph containing the edges of the residual graph - //which are in some shortest paths - { - typename FilterResGW::EdgeIt e; - for(filter_res_graph.first(e); filter_res_graph.valid(e); filter_res_graph.next(e)) { - //if (dist.get(res_graph.target(e))==dist.get(res_graph.source(e))+1) { - typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - //} - } - } - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - typedef typename TrivGraphWrapper::NodeMap BlockingReachedMap; - DfsIterator5< TrivGraphWrapper, BlockingReachedMap > dfs(F); - typename MG::NodeMap pred(F); - pred.set(sF, INVALID); - //invalid iterators for sources - - typename MG::NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) { - if (dfs.isBNodeNewlyReached()) { - typename MG::Node v=F.aNode(dfs); - typename MG::Node w=F.bNode(dfs); - pred.set(w, dfs); - if (F.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), residual_capacity.get(dfs))); - } else { - free.set(w, residual_capacity.get(dfs)); - } - if (w==tF) { - __augment=true; - _augment=true; - break; - } - - } else { - F.erase(/*typename MG::OutEdgeIt*/(dfs)); - } - } - } - - if (__augment) { - typename MG::Node n=tF; - Number augment_value=free.get(tF); - while (F.valid(pred.get(n))) { - typename MG::Edge e=pred.get(n); - res_graph.augment(original_edge.get(e), augment_value); - n=F.source(e); - if (residual_capacity.get(e)==augment_value) - F.erase(e); - else - residual_capacity.set(e, residual_capacity.get(e)-augment_value); - } - } - - } - - return _augment; - } - - template bool augmentOnBlockingFlow1() { - typedef MutableGraph MG; - bool _augment=false; - - ResGW res_graph(gw, *flow, *capacity); - - //bfs for distances on the residual graph - typedef typename ResGW::NodeMap ReachedMap; - BfsIterator5< ResGW, ReachedMap > bfs(res_graph); - bfs.pushAndSetReached(s); - typename ResGW::NodeMap dist(res_graph); //filled up with 0's - - //F will contain the physical copy of the residual graph - //with the set of edges which are on shortest paths - MG F; - typename ResGW::NodeMap res_graph_to_F(res_graph); - { - typename ResGW::NodeIt n; - for(res_graph.first(n); res_graph.valid(n); res_graph.next(n)) { - res_graph_to_F.set(n, F.addNode()); - } - } - - typename MG::Node sF=res_graph_to_F.get(s); - typename MG::Node tF=res_graph_to_F.get(t); - typename MG::EdgeMap original_edge(F); - typename MG::EdgeMap residual_capacity(F); - - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e)) { - if (bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); - typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } else { - if (dist.get(res_graph.target(e))==(dist.get(res_graph.source(e))+1)) { - typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } - } - } - ++bfs; - } //computing distances from s in the residual graph - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - typedef typename TrivGraphWrapper::NodeMap BlockingReachedMap; - DfsIterator5< TrivGraphWrapper, BlockingReachedMap > dfs(F); - typename MG::NodeMap pred(F); - pred.set(sF, INVALID); - //invalid iterators for sources - - typename MG::NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) { - if (dfs.isBNodeNewlyReached()) { - typename MG::Node v=F.aNode(dfs); - typename MG::Node w=F.bNode(dfs); - pred.set(w, dfs); - if (F.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), residual_capacity.get(dfs))); - } else { - free.set(w, residual_capacity.get(dfs)); - } - if (w==tF) { - __augment=true; - _augment=true; - break; - } - - } else { - F.erase(/*typename MG::OutEdgeIt*/(dfs)); - } - } - } - - if (__augment) { - typename MG::Node n=tF; - Number augment_value=free.get(tF); - while (F.valid(pred.get(n))) { - typename MG::Edge e=pred.get(n); - res_graph.augment(original_edge.get(e), augment_value); - n=F.source(e); - if (residual_capacity.get(e)==augment_value) - F.erase(e); - else - residual_capacity.set(e, residual_capacity.get(e)-augment_value); - } - } - - } - - return _augment; - } - - bool augmentOnBlockingFlow2() { - bool _augment=false; - - ResGW res_graph(gw, *flow, *capacity); - - typedef typename ResGW::NodeMap ReachedMap; - BfsIterator5< ResGW, ReachedMap > bfs(res_graph); - - bfs.pushAndSetReached(s); - DistanceMap dist(res_graph); - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); - } - ++bfs; - } //computing distances from s in the residual graph - - //Subgraph containing the edges on some shortest paths - typedef SubGraphWrapper > FilterResGW; - FilterResGW filter_res_graph(res_graph, dist); - - //Subgraph, which is able to delete edges which are already - //met by the dfs - typename FilterResGW::NodeMap - first_out_edges(filter_res_graph); - typename FilterResGW::NodeIt v; - for(filter_res_graph.first(v); filter_res_graph.valid(v); - filter_res_graph.next(v)) - { - typename FilterResGW::OutEdgeIt e; - filter_res_graph.first(e, v); - first_out_edges.set(v, e); - } - typedef ErasingFirstGraphWrapper > ErasingResGW; - ErasingResGW erasing_res_graph(filter_res_graph, first_out_edges); - - bool __augment=true; - - while (__augment) { - - __augment=false; - //computing blocking flow with dfs - typedef typename ErasingResGW::NodeMap BlockingReachedMap; - DfsIterator5< ErasingResGW, BlockingReachedMap > - dfs(erasing_res_graph); - typename ErasingResGW::NodeMap - pred(erasing_res_graph); - pred.set(s, INVALID); - //invalid iterators for sources - - typename ErasingResGW::NodeMap free(erasing_res_graph); - - dfs.pushAndSetReached(s); - while (!dfs.finished()) { - ++dfs; - if (erasing_res_graph.valid( - /*typename ErasingResGW::OutEdgeIt*/(dfs))) - { - if (dfs.isBNodeNewlyReached()) { - - typename ErasingResGW::Node v=erasing_res_graph.aNode(dfs); - typename ErasingResGW::Node w=erasing_res_graph.bNode(dfs); - - pred.set(w, /*typename ErasingResGW::OutEdgeIt*/(dfs)); - if (erasing_res_graph.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), res_graph.resCap(dfs))); - } else { - free.set(w, res_graph.resCap(dfs)); - } - - if (w==t) { - __augment=true; - _augment=true; - break; - } - } else { - erasing_res_graph.erase(dfs); - } - } - } - - if (__augment) { - typename ErasingResGW::Node n=t; - Number augment_value=free.get(n); - while (erasing_res_graph.valid(pred.get(n))) { - typename ErasingResGW::OutEdgeIt e=pred.get(n); - res_graph.augment(e, augment_value); - n=erasing_res_graph.source(e); - if (res_graph.resCap(e)==0) - erasing_res_graph.erase(e); - } - } - - } //while (__augment) - - return _augment; - } - -// bool augmentOnBlockingFlow2() { -// bool _augment=false; - -// //typedef ErasingResGraphWrapper EAugGraph; -// typedef FilterGraphWrapper< ErasingResGraphWrapper > EAugGraph; -// typedef typename EAugGraph::OutEdgeIt EAugOutEdgeIt; -// typedef typename EAugGraph::Edge EAugEdge; - -// EAugGraph res_graph(*G, *flow, *capacity); - -// //typedef typename EAugGraph::NodeMap ReachedMap; -// BfsIterator5< -// ErasingResGraphWrapper, -// /*typename ErasingResGraphWrapper::OutEdgeIt,*/ -// ErasingResGraphWrapper::NodeMap > bfs(res_graph); - -// bfs.pushAndSetReached(s); - -// typename ErasingResGraphWrapper:: -// NodeMap& dist=res_graph.dist; - -// while ( !bfs.finished() ) { -// typename ErasingResGraphWrapper::OutEdgeIt e=bfs; -// if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); -// } -// ++bfs; -// } //computing distances from s in the residual graph - -// bool __augment=true; - -// while (__augment) { - -// __augment=false; -// //computing blocking flow with dfs -// typedef typename EAugGraph::NodeMap BlockingReachedMap; -// DfsIterator5< EAugGraph/*, EAugOutEdgeIt*/, BlockingReachedMap > -// dfs(res_graph); -// typename EAugGraph::NodeMap pred(res_graph); -// pred.set(s, EAugEdge(INVALID)); -// //invalid iterators for sources - -// typename EAugGraph::NodeMap free(res_graph); - -// dfs.pushAndSetReached(s); -// while (!dfs.finished()) { -// ++dfs; -// if (res_graph.valid(EAugOutEdgeIt(dfs))) { -// if (dfs.isBNodeNewlyReached()) { - -// typename EAugGraph::Node v=res_graph.aNode(dfs); -// typename EAugGraph::Node w=res_graph.bNode(dfs); - -// pred.set(w, EAugOutEdgeIt(dfs)); -// if (res_graph.valid(pred.get(v))) { -// free.set(w, std::min(free.get(v), res_graph.free(dfs))); -// } else { -// free.set(w, res_graph.free(dfs)); -// } - -// if (w==t) { -// __augment=true; -// _augment=true; -// break; -// } -// } else { -// res_graph.erase(dfs); -// } -// } - -// } - -// if (__augment) { -// typename EAugGraph::Node n=t; -// Number augment_value=free.get(t); -// while (res_graph.valid(pred.get(n))) { -// EAugEdge e=pred.get(n); -// res_graph.augment(e, augment_value); -// n=res_graph.source(e); -// if (res_graph.free(e)==0) -// res_graph.erase(e); -// } -// } - -// } - -// return _augment; -// } - - void run() { - //int num_of_augmentations=0; - while (augmentOnShortestPath()) { - //while (augmentOnBlockingFlow()) { - //std::cout << ++num_of_augmentations << " "; - //std::cout< void run() { - //int num_of_augmentations=0; - //while (augmentOnShortestPath()) { - while (augmentOnBlockingFlow()) { - //std::cout << ++num_of_augmentations << " "; - //std::cout<get(e); - } - return a; - } - - }; - - -// template -// class MaxMatching { -// public: -// typedef typename Graph::Node Node; -// typedef typename Graph::NodeIt NodeIt; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::EdgeIt EdgeIt; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// typedef typename Graph::InEdgeIt InEdgeIt; - -// typedef typename Graph::NodeMap SMap; -// typedef typename Graph::NodeMap TMap; -// private: -// const Graph* G; -// SMap* S; -// TMap* T; -// //Node s; -// //Node t; -// FlowMap* flow; -// const CapacityMap* capacity; -// typedef ResGraphWrapper AugGraph; -// typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; -// typedef typename AugGraph::Edge AugEdge; -// typename Graph::NodeMap used; //0 - -// public: -// MaxMatching(const Graph& _G, SMap& _S, TMap& _T, FlowMap& _flow, const CapacityMap& _capacity) : -// G(&_G), S(&_S), T(&_T), flow(&_flow), capacity(&_capacity), used(_G) { } -// bool augmentOnShortestPath() { -// AugGraph res_graph(*G, *flow, *capacity); -// bool _augment=false; - -// typedef typename AugGraph::NodeMap ReachedMap; -// BfsIterator5< AugGraph, /*AugOutEdgeIt,*/ ReachedMap > bfs(res_graph); -// typename AugGraph::NodeMap pred(res_graph); -// for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// if ((S->get(s)) && (used.get(s)<1) ) { -// //Number u=0; -// //for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// //u+=flow->get(e); -// //if (u<1) { -// bfs.pushAndSetReached(s); -// pred.set(s, AugEdge(INVALID)); -// //} -// } -// } - -// typename AugGraph::NodeMap free(res_graph); - -// Node n; -// //searching for augmenting path -// while ( !bfs.finished() ) { -// AugOutEdgeIt e=bfs; -// if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// Node v=res_graph.source(e); -// Node w=res_graph.target(e); -// pred.set(w, e); -// if (res_graph.valid(pred.get(v))) { -// free.set(w, std::min(free.get(v), res_graph.free(e))); -// } else { -// free.set(w, res_graph.free(e)); -// } -// n=res_graph.target(e); -// if (T->get(n) && (used.get(n)<1) ) { -// //Number u=0; -// //for(InEdgeIt f=G->template first(n); G->valid(f); G->next(f)) -// //u+=flow->get(f); -// //if (u<1) { -// _augment=true; -// break; -// //} -// } -// } - -// ++bfs; -// } //end of searching augmenting path - -// if (_augment) { -// //Node n=t; -// used.set(n, 1); //mind2 vegen jav -// Number augment_value=free.get(n); -// while (res_graph.valid(pred.get(n))) { -// AugEdge e=pred.get(n); -// res_graph.augment(e, augment_value); -// n=res_graph.source(e); -// } -// used.set(n, 1); //mind2 vegen jav -// } - -// return _augment; -// } - -// // template bool augmentOnBlockingFlow() { -// // bool _augment=false; - -// // AugGraph res_graph(*G, *flow, *capacity); - -// // typedef typename AugGraph::NodeMap ReachedMap; -// // BfsIterator4< AugGraph, AugOutEdgeIt, ReachedMap > bfs(res_graph); - - - - - -// // //typename AugGraph::NodeMap pred(res_graph); -// // for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// // if (S->get(s)) { -// // Number u=0; -// // for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// // u+=flow->get(e); -// // if (u<1) { -// // bfs.pushAndSetReached(s); -// // //pred.set(s, AugEdge(INVALID)); -// // } -// // } -// // } - - - - -// // //bfs.pushAndSetReached(s); -// // typename AugGraph::NodeMap dist(res_graph); //filled up with 0's -// // while ( !bfs.finished() ) { -// // AugOutEdgeIt e=bfs; -// // if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// // dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); -// // } - -// // ++bfs; -// // } //computing distances from s in the residual graph - -// // MutableGraph F; -// // typename AugGraph::NodeMap -// // res_graph_to_F(res_graph); -// // for(typename AugGraph::NodeIt n=res_graph.template first(); res_graph.valid(n); res_graph.next(n)) { -// // res_graph_to_F.set(n, F.addNode()); -// // } - -// // typename MutableGraph::Node sF=res_graph_to_F.get(s); -// // typename MutableGraph::Node tF=res_graph_to_F.get(t); - -// // typename MutableGraph::EdgeMap original_edge(F); -// // typename MutableGraph::EdgeMap residual_capacity(F); - -// // //Making F to the graph containing the edges of the residual graph -// // //which are in some shortest paths -// // for(typename AugGraph::EdgeIt e=res_graph.template first(); res_graph.valid(e); res_graph.next(e)) { -// // if (dist.get(res_graph.target(e))==dist.get(res_graph.source(e))+1) { -// // typename MutableGraph::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); -// // original_edge.update(); -// // original_edge.set(f, e); -// // residual_capacity.update(); -// // residual_capacity.set(f, res_graph.free(e)); -// // } -// // } - -// // bool __augment=true; - -// // while (__augment) { -// // __augment=false; -// // //computing blocking flow with dfs -// // typedef typename MutableGraph::NodeMap BlockingReachedMap; -// // DfsIterator4< MutableGraph, typename MutableGraph::OutEdgeIt, BlockingReachedMap > dfs(F); -// // typename MutableGraph::NodeMap pred(F); -// // pred.set(sF, typename MutableGraph::Edge(INVALID)); -// // //invalid iterators for sources - -// // typename MutableGraph::NodeMap free(F); - -// // dfs.pushAndSetReached(sF); -// // while (!dfs.finished()) { -// // ++dfs; -// // if (F.valid(typename MutableGraph::OutEdgeIt(dfs))) { -// // if (dfs.isBNodeNewlyReached()) { -// // typename MutableGraph::Node v=F.aNode(dfs); -// // typename MutableGraph::Node w=F.bNode(dfs); -// // pred.set(w, dfs); -// // if (F.valid(pred.get(v))) { -// // free.set(w, std::min(free.get(v), residual_capacity.get(dfs))); -// // } else { -// // free.set(w, residual_capacity.get(dfs)); -// // } -// // if (w==tF) { -// // __augment=true; -// // _augment=true; -// // break; -// // } - -// // } else { -// // F.erase(typename MutableGraph::OutEdgeIt(dfs)); -// // } -// // } -// // } - -// // if (__augment) { -// // typename MutableGraph::Node n=tF; -// // Number augment_value=free.get(tF); -// // while (F.valid(pred.get(n))) { -// // typename MutableGraph::Edge e=pred.get(n); -// // res_graph.augment(original_edge.get(e), augment_value); -// // n=F.source(e); -// // if (residual_capacity.get(e)==augment_value) -// // F.erase(e); -// // else -// // residual_capacity.set(e, residual_capacity.get(e)-augment_value); -// // } -// // } - -// // } - -// // return _augment; -// // } -// bool augmentOnBlockingFlow2() { -// bool _augment=false; - -// //typedef ErasingResGraphWrapper EAugGraph; -// typedef FilterGraphWrapper< ErasingResGraphWrapper > EAugGraph; -// typedef typename EAugGraph::OutEdgeIt EAugOutEdgeIt; -// typedef typename EAugGraph::Edge EAugEdge; - -// EAugGraph res_graph(*G, *flow, *capacity); - -// //typedef typename EAugGraph::NodeMap ReachedMap; -// BfsIterator5< -// ErasingResGraphWrapper, -// /*typename ErasingResGraphWrapper::OutEdgeIt,*/ -// ErasingResGraphWrapper::NodeMap > bfs(res_graph); - - -// //typename AugGraph::NodeMap pred(res_graph); -// for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// if (S->get(s)) { -// Number u=0; -// for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// u+=flow->get(e); -// if (u<1) { -// bfs.pushAndSetReached(s); -// //pred.set(s, AugEdge(INVALID)); -// } -// } -// } - - -// //bfs.pushAndSetReached(s); - -// typename ErasingResGraphWrapper:: -// NodeMap& dist=res_graph.dist; - -// while ( !bfs.finished() ) { -// typename ErasingResGraphWrapper::OutEdgeIt e=bfs; -// if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); -// } -// ++bfs; -// } //computing distances from s in the residual graph - -// bool __augment=true; - -// while (__augment) { - -// __augment=false; -// //computing blocking flow with dfs -// typedef typename EAugGraph::NodeMap BlockingReachedMap; -// DfsIterator5< EAugGraph/*, EAugOutEdgeIt*/, BlockingReachedMap > -// dfs(res_graph); -// typename EAugGraph::NodeMap pred(res_graph, INVALID); -// //pred.set(s, EAugEdge(INVALID)); -// //invalid iterators for sources - -// typename EAugGraph::NodeMap free(res_graph); - - -// //typename AugGraph::NodeMap pred(res_graph); -// for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// if (S->get(s)) { -// Number u=0; -// for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// u+=flow->get(e); -// if (u<1) { -// dfs.pushAndSetReached(s); -// //pred.set(s, AugEdge(INVALID)); -// } -// } -// } - - - -// //dfs.pushAndSetReached(s); -// typename EAugGraph::Node n; -// while (!dfs.finished()) { -// ++dfs; -// if (res_graph.valid(EAugOutEdgeIt(dfs))) { -// if (dfs.isBNodeNewlyReached()) { - -// typename EAugGraph::Node v=res_graph.aNode(dfs); -// typename EAugGraph::Node w=res_graph.bNode(dfs); - -// pred.set(w, EAugOutEdgeIt(dfs)); -// if (res_graph.valid(pred.get(v))) { -// free.set(w, std::min(free.get(v), res_graph.free(dfs))); -// } else { -// free.set(w, res_graph.free(dfs)); -// } - -// n=w; -// if (T->get(w)) { -// Number u=0; -// for(InEdgeIt f=G->template first(n); G->valid(f); G->next(f)) -// u+=flow->get(f); -// if (u<1) { -// __augment=true; -// _augment=true; -// break; -// } -// } -// } else { -// res_graph.erase(dfs); -// } -// } - -// } - -// if (__augment) { -// // typename EAugGraph::Node n=t; -// Number augment_value=free.get(n); -// while (res_graph.valid(pred.get(n))) { -// EAugEdge e=pred.get(n); -// res_graph.augment(e, augment_value); -// n=res_graph.source(e); -// if (res_graph.free(e)==0) -// res_graph.erase(e); -// } -// } - -// } - -// return _augment; -// } -// void run() { -// //int num_of_augmentations=0; -// while (augmentOnShortestPath()) { -// //while (augmentOnBlockingFlow()) { -// //std::cout << ++num_of_augmentations << " "; -// //std::cout< void run() { -// // //int num_of_augmentations=0; -// // //while (augmentOnShortestPath()) { -// // while (augmentOnBlockingFlow()) { -// // //std::cout << ++num_of_augmentations << " "; -// // //std::cout</*getF*/first(e); G->valid(e); G->next(e)) { -// a+=flow->get(e); -// } -// return a; -// } -// }; - - - - - - -// // template -// // class MaxFlow2 { -// // public: -// // typedef typename Graph::Node Node; -// // typedef typename Graph::Edge Edge; -// // typedef typename Graph::EdgeIt EdgeIt; -// // typedef typename Graph::OutEdgeIt OutEdgeIt; -// // typedef typename Graph::InEdgeIt InEdgeIt; -// // private: -// // const Graph& G; -// // std::list& S; -// // std::list& T; -// // FlowMap& flow; -// // const CapacityMap& capacity; -// // typedef ResGraphWrapper AugGraph; -// // typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; -// // typedef typename AugGraph::Edge AugEdge; -// // typename Graph::NodeMap SMap; -// // typename Graph::NodeMap TMap; -// // public: -// // MaxFlow2(const Graph& _G, std::list& _S, std::list& _T, FlowMap& _flow, const CapacityMap& _capacity) : G(_G), S(_S), T(_T), flow(_flow), capacity(_capacity), SMap(_G), TMap(_G) { -// // for(typename std::list::const_iterator i=S.begin(); -// // i!=S.end(); ++i) { -// // SMap.set(*i, true); -// // } -// // for (typename std::list::const_iterator i=T.begin(); -// // i!=T.end(); ++i) { -// // TMap.set(*i, true); -// // } -// // } -// // bool augment() { -// // AugGraph res_graph(G, flow, capacity); -// // bool _augment=false; -// // Node reached_t_node; - -// // typedef typename AugGraph::NodeMap ReachedMap; -// // BfsIterator4< AugGraph, AugOutEdgeIt, ReachedMap > bfs(res_graph); -// // for(typename std::list::const_iterator i=S.begin(); -// // i!=S.end(); ++i) { -// // bfs.pushAndSetReached(*i); -// // } -// // //bfs.pushAndSetReached(s); - -// // typename AugGraph::NodeMap pred(res_graph); -// // //filled up with invalid iterators - -// // typename AugGraph::NodeMap free(res_graph); - -// // //searching for augmenting path -// // while ( !bfs.finished() ) { -// // AugOutEdgeIt e=/*AugOutEdgeIt*/(bfs); -// // if (e.valid() && bfs.isBNodeNewlyReached()) { -// // Node v=res_graph.source(e); -// // Node w=res_graph.target(e); -// // pred.set(w, e); -// // if (pred.get(v).valid()) { -// // free.set(w, std::min(free.get(v), e.free())); -// // } else { -// // free.set(w, e.free()); -// // } -// // if (TMap.get(res_graph.target(e))) { -// // _augment=true; -// // reached_t_node=res_graph.target(e); -// // break; -// // } -// // } - -// // ++bfs; -// // } //end of searching augmenting path - -// // if (_augment) { -// // Node n=reached_t_node; -// // Number augment_value=free.get(reached_t_node); -// // while (pred.get(n).valid()) { -// // AugEdge e=pred.get(n); -// // e.augment(augment_value); -// // n=res_graph.source(e); -// // } -// // } - -// // return _augment; -// // } -// // void run() { -// // while (augment()) { } -// // } -// // Number flowValue() { -// // Number a=0; -// // for(typename std::list::const_iterator i=S.begin(); -// // i!=S.end(); ++i) { -// // for(OutEdgeIt e=G.template first(*i); e.valid(); ++e) { -// // a+=flow.get(e); -// // } -// // for(InEdgeIt e=G.template first(*i); e.valid(); ++e) { -// // a-=flow.get(e); -// // } -// // } -// // return a; -// // } -// // }; - - -} // namespace lemon - -#endif //LEMON_EDMONDS_KARP_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/edmonds_karp_1.h --- a/src/work/marci/experiment/edmonds_karp_1.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1148 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_EDMONDS_KARP_H -#define LEMON_EDMONDS_KARP_H - -#include -#include -#include - -#include -#include -#include - -namespace lemon { - - template - class ResGraph { - public: - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - private: - typedef typename Graph::SymEdgeIt OldSymEdgeIt; - const Graph& G; - FlowMap& flow; - const CapacityMap& capacity; - public: - ResGraph(const Graph& _G, FlowMap& _flow, - const CapacityMap& _capacity) : - G(_G), flow(_flow), capacity(_capacity) { } - - class Edge; - class OutEdgeIt; - friend class Edge; - friend class OutEdgeIt; - - class Edge { - friend class ResGraph; - protected: - const ResGraph* resG; - OldSymEdgeIt sym; - public: - Edge() { } - //Edge(const Edge& e) : resG(e.resG), sym(e.sym) { } - Number free() const { - if (resG->G.aNode(sym)==resG->G.source(sym)) { - return (resG->capacity.get(sym)-resG->flow.get(sym)); - } else { - return (resG->flow.get(sym)); - } - } - bool valid() const { return sym.valid(); } - void augment(Number a) const { - if (resG->G.aNode(sym)==resG->G.source(sym)) { - resG->flow.set(sym, resG->flow.get(sym)+a); - //resG->flow[sym]+=a; - } else { - resG->flow.set(sym, resG->flow.get(sym)-a); - //resG->flow[sym]-=a; - } - } - }; - - class OutEdgeIt : public Edge { - friend class ResGraph; - public: - OutEdgeIt() { } - //OutEdgeIt(const OutEdgeIt& e) { resG=e.resG; sym=e.sym; } - private: - OutEdgeIt(const ResGraph& _resG, Node v) { - resG=&_resG; - sym=resG->G.template first(v); - while( sym.valid() && !(free()>0) ) { ++sym; } - } - public: - OutEdgeIt& operator++() { - ++sym; - while( sym.valid() && !(free()>0) ) { ++sym; } - return *this; - } - }; - - void /*getF*/first(OutEdgeIt& e, Node v) const { - e=OutEdgeIt(*this, v); - } - void /*getF*/first(NodeIt& v) const { G./*getF*/first(v); } - - template< typename It > - It first() const { - It e; - /*getF*/first(e); - return e; - } - - template< typename It > - It first(Node v) const { - It e; - /*getF*/first(e, v); - return e; - } - - Node source(Edge e) const { return G.aNode(e.sym); } - Node target(Edge e) const { return G.bNode(e.sym); } - - Node aNode(OutEdgeIt e) const { return G.aNode(e.sym); } - Node bNode(OutEdgeIt e) const { return G.bNode(e.sym); } - - int id(Node v) const { return G.id(v); } - - template - class NodeMap { - typename Graph::NodeMap node_map; - public: - NodeMap(const ResGraph& _G) : node_map(_G.G) { } - NodeMap(const ResGraph& _G, S a) : node_map(_G.G, a) { } - void set(Node nit, S a) { node_map.set(nit, a); } - S get(Node nit) const { return node_map.get(nit); } - S& operator[](Node nit) { return node_map[nit]; } - const S& operator[](Node nit) const { return node_map[nit]; } - }; - - }; - - - template - class ResGraph2 { - public: - typedef typename Graph::Node Node; - typedef typename Graph::NodeIt NodeIt; - private: - //typedef typename Graph::SymEdgeIt OldSymEdgeIt; - typedef typename Graph::OutEdgeIt OldOutEdgeIt; - typedef typename Graph::InEdgeIt OldInEdgeIt; - - const Graph& G; - FlowMap& flow; - const CapacityMap& capacity; - public: - ResGraph2(const Graph& _G, FlowMap& _flow, - const CapacityMap& _capacity) : - G(_G), flow(_flow), capacity(_capacity) { } - - class Edge; - class OutEdgeIt; - friend class Edge; - friend class OutEdgeIt; - - class Edge { - friend class ResGraph2; - protected: - const ResGraph2* resG; - //OldSymEdgeIt sym; - OldOutEdgeIt out; - OldInEdgeIt in; - bool out_or_in; //true, iff out - public: - Edge() : out_or_in(true) { } - Number free() const { - if (out_or_in) { - return (resG->capacity.get(out)-resG->flow.get(out)); - } else { - return (resG->flow.get(in)); - } - } - bool valid() const { - return out_or_in && out.valid() || in.valid(); } - void augment(Number a) const { - if (out_or_in) { - resG->flow.set(out, resG->flow.get(out)+a); - } else { - resG->flow.set(in, resG->flow.get(in)-a); - } - } - }; - - class OutEdgeIt : public Edge { - friend class ResGraph2; - public: - OutEdgeIt() { } - private: - OutEdgeIt(const ResGraph2& _resG, Node v) { - resG=&_resG; - out=resG->G.template first(v); - while( out.valid() && !(free()>0) ) { ++out; } - if (!out.valid()) { - out_or_in=0; - in=resG->G.template first(v); - while( in.valid() && !(free()>0) ) { ++in; } - } - } - public: - OutEdgeIt& operator++() { - if (out_or_in) { - Node v=resG->G.aNode(out); - ++out; - while( out.valid() && !(free()>0) ) { ++out; } - if (!out.valid()) { - out_or_in=0; - in=resG->G.template first(v); - while( in.valid() && !(free()>0) ) { ++in; } - } - } else { - ++in; - while( in.valid() && !(free()>0) ) { ++in; } - } - return *this; - } - }; - - void /*getF*/first(OutEdgeIt& e, Node v) const { - e=OutEdgeIt(*this, v); - } - void /*getF*/first(NodeIt& v) const { G./*getF*/first(v); } - - template< typename It > - It first() const { - It e; - /*getF*/first(e); - return e; - } - - template< typename It > - It first(Node v) const { - It e; - /*getF*/first(e, v); - return e; - } - - Node source(Edge e) const { - return ((e.out_or_in) ? G.aNode(e.out) : G.aNode(e.in)); } - Node target(Edge e) const { - return ((e.out_or_in) ? G.bNode(e.out) : G.bNode(e.in)); } - - Node aNode(OutEdgeIt e) const { - return ((e.out_or_in) ? G.aNode(e.out) : G.aNode(e.in)); } - Node bNode(OutEdgeIt e) const { - return ((e.out_or_in) ? G.bNode(e.out) : G.bNode(e.in)); } - - int id(Node v) const { return G.id(v); } - - template - class NodeMap { - typename Graph::NodeMap node_map; - public: - NodeMap(const ResGraph2& _G) : node_map(_G.G) { } - NodeMap(const ResGraph2& _G, S a) : node_map(_G.G, a) { } - void set(Node nit, S a) { node_map.set(nit, a); } - S get(Node nit) const { return node_map.get(nit); } - }; - }; - - - template - class MaxFlow { - protected: - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - const Graph* g; - Node s; - Node t; - FlowMap* flow; - const CapacityMap* capacity; - typedef ResGraphWrapper ResGW; - typedef typename ResGW::OutEdgeIt ResGWOutEdgeIt; - typedef typename ResGW::Edge ResGWEdge; - public: - - MaxFlow(const Graph& _g, Node _s, Node _t, FlowMap& _flow, const CapacityMap& _capacity) : - g(&_g), s(_s), t(_t), flow(&_flow), capacity(&_capacity) { } - - bool augmentOnShortestPath() { - ResGW res_graph(*g, *flow, *capacity); - bool _augment=false; - - typedef typename ResGW::NodeMap ReachedMap; - BfsIterator5< ResGW, ReachedMap > bfs(res_graph); - bfs.pushAndSetReached(s); - - typename ResGW::NodeMap pred(res_graph); - pred.set(s, INVALID); - - typename ResGW::NodeMap free(res_graph); - - //searching for augmenting path - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - Node v=res_graph.source(e); - Node w=res_graph.target(e); - pred.set(w, e); - if (res_graph.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), res_graph.resCap(e))); - } else { - free.set(w, res_graph.resCap(e)); - } - if (res_graph.target(e)==t) { _augment=true; break; } - } - - ++bfs; - } //end of searching augmenting path - - if (_augment) { - Node n=t; - Number augment_value=free.get(t); - while (res_graph.valid(pred.get(n))) { - ResGWEdge e=pred.get(n); - res_graph.augment(e, augment_value); - n=res_graph.source(e); - } - } - - return _augment; - } - - template - class DistanceMap { - protected: - const MapGraphWrapper* g; - typename MapGraphWrapper::NodeMap dist; - public: - DistanceMap(MapGraphWrapper& _g) : g(&_g), dist(*g, g->nodeNum()) { } - void set(const typename MapGraphWrapper::Node& n, int a) { dist[n]=a; } - int get(const typename MapGraphWrapper::Node& n) const { return dist[n]; } - bool get(const typename MapGraphWrapper::Edge& e) const { - return (dist.get(g->source(e))target(e))); - } - }; - - template bool augmentOnBlockingFlow() { - typedef MutableGraph MG; - bool _augment=false; - - ResGW res_graph(*g, *flow, *capacity); - - typedef typename ResGW::NodeMap ReachedMap; - BfsIterator5< ResGW, ReachedMap > bfs(res_graph); - - bfs.pushAndSetReached(s); - //typename ResGW::NodeMap dist(res_graph); //filled up with 0's - DistanceMap dist(res_graph); - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); - } - ++bfs; - } //computing distances from s in the residual graph - - MG F; - typedef SubGraphWrapper > FilterResGW; - FilterResGW filter_res_graph(res_graph, dist); - typename ResGW::NodeMap res_graph_to_F(res_graph); - { - typename ResGW::NodeIt n; - for(res_graph.first(n); res_graph.valid(n); res_graph.next(n)) { - res_graph_to_F.set(n, F.addNode()); - } - } - - typename MG::Node sF=res_graph_to_F.get(s); - typename MG::Node tF=res_graph_to_F.get(t); - typename MG::EdgeMap original_edge(F); - typename MG::EdgeMap residual_capacity(F); - - //Making F to the graph containing the edges of the residual graph - //which are in some shortest paths - { - typename FilterResGW::EdgeIt e; - for(filter_res_graph.first(e); filter_res_graph.valid(e); filter_res_graph.next(e)) { - //if (dist.get(res_graph.target(e))==dist.get(res_graph.source(e))+1) { - typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - //} - } - } - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - typedef typename TrivGraphWrapper::NodeMap BlockingReachedMap; - DfsIterator5< TrivGraphWrapper, BlockingReachedMap > dfs(F); - typename MG::NodeMap pred(F); - pred.set(sF, INVALID); - //invalid iterators for sources - - typename MG::NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) { - if (dfs.isBNodeNewlyReached()) { - typename MG::Node v=F.aNode(dfs); - typename MG::Node w=F.bNode(dfs); - pred.set(w, dfs); - if (F.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), residual_capacity.get(dfs))); - } else { - free.set(w, residual_capacity.get(dfs)); - } - if (w==tF) { - __augment=true; - _augment=true; - break; - } - - } else { - F.erase(/*typename MG::OutEdgeIt*/(dfs)); - } - } - } - - if (__augment) { - typename MG::Node n=tF; - Number augment_value=free.get(tF); - while (F.valid(pred.get(n))) { - typename MG::Edge e=pred.get(n); - res_graph.augment(original_edge.get(e), augment_value); - n=F.source(e); - if (residual_capacity.get(e)==augment_value) - F.erase(e); - else - residual_capacity.set(e, residual_capacity.get(e)-augment_value); - } - } - - } - - return _augment; - } - - template bool augmentOnBlockingFlow1() { - typedef MutableGraph MG; - bool _augment=false; - - ResGW res_graph(*g, *flow, *capacity); - - //bfs for distances on the residual graph - typedef typename ResGW::NodeMap ReachedMap; - BfsIterator5< ResGW, ReachedMap > bfs(res_graph); - bfs.pushAndSetReached(s); - typename ResGW::NodeMap dist(res_graph); //filled up with 0's - - //F will contain the physical copy of the residual graph - //with the set of edges which are on shortest paths - MG F; - typename ResGW::NodeMap res_graph_to_F(res_graph); - { - typename ResGW::NodeIt n; - for(res_graph.first(n); res_graph.valid(n); res_graph.next(n)) { - res_graph_to_F.set(n, F.addNode()); - } - } - - typename MG::Node sF=res_graph_to_F.get(s); - typename MG::Node tF=res_graph_to_F.get(t); - typename MG::EdgeMap original_edge(F); - typename MG::EdgeMap residual_capacity(F); - - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e)) { - if (bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); - typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } else { - if (dist.get(res_graph.target(e))==(dist.get(res_graph.source(e))+1)) { - typename MG::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } - } - } - ++bfs; - } //computing distances from s in the residual graph - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - typedef typename TrivGraphWrapper::NodeMap BlockingReachedMap; - DfsIterator5< TrivGraphWrapper, BlockingReachedMap > dfs(F); - typename MG::NodeMap pred(F); - pred.set(sF, INVALID); - //invalid iterators for sources - - typename MG::NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) { - if (dfs.isBNodeNewlyReached()) { - typename MG::Node v=F.aNode(dfs); - typename MG::Node w=F.bNode(dfs); - pred.set(w, dfs); - if (F.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), residual_capacity.get(dfs))); - } else { - free.set(w, residual_capacity.get(dfs)); - } - if (w==tF) { - __augment=true; - _augment=true; - break; - } - - } else { - F.erase(/*typename MG::OutEdgeIt*/(dfs)); - } - } - } - - if (__augment) { - typename MG::Node n=tF; - Number augment_value=free.get(tF); - while (F.valid(pred.get(n))) { - typename MG::Edge e=pred.get(n); - res_graph.augment(original_edge.get(e), augment_value); - n=F.source(e); - if (residual_capacity.get(e)==augment_value) - F.erase(e); - else - residual_capacity.set(e, residual_capacity.get(e)-augment_value); - } - } - - } - - return _augment; - } - - bool augmentOnBlockingFlow2() { - bool _augment=false; - - ResGW res_graph(*g, *flow, *capacity); - - typedef typename ResGW::NodeMap ReachedMap; - BfsIterator5< ResGW, ReachedMap > bfs(res_graph); - - bfs.pushAndSetReached(s); - DistanceMap dist(res_graph); - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); - } - ++bfs; - } //computing distances from s in the residual graph - - //Subgraph containing the edges on some shortest paths - typedef SubGraphWrapper > FilterResGW; - FilterResGW filter_res_graph(res_graph, dist); - - //Subgraph, which is able to delete edges which are already - //met by the dfs - typename FilterResGW::NodeMap - first_out_edges(filter_res_graph); - typename FilterResGW::NodeIt v; - for(filter_res_graph.first(v); filter_res_graph.valid(v); - filter_res_graph.next(v)) - { - typename FilterResGW::OutEdgeIt e; - filter_res_graph.first(e, v); - first_out_edges.set(v, e); - } - typedef ErasingFirstGraphWrapper > ErasingResGW; - ErasingResGW erasing_res_graph(filter_res_graph, first_out_edges); - - bool __augment=true; - - while (__augment) { - - __augment=false; - //computing blocking flow with dfs - typedef typename ErasingResGW::NodeMap BlockingReachedMap; - DfsIterator5< ErasingResGW, BlockingReachedMap > - dfs(erasing_res_graph); - typename ErasingResGW::NodeMap - pred(erasing_res_graph); - pred.set(s, INVALID); - //invalid iterators for sources - - typename ErasingResGW::NodeMap free(erasing_res_graph); - - dfs.pushAndSetReached(s); - while (!dfs.finished()) { - ++dfs; - if (erasing_res_graph.valid( - /*typename ErasingResGW::OutEdgeIt*/(dfs))) - { - if (dfs.isBNodeNewlyReached()) { - - typename ErasingResGW::Node v=erasing_res_graph.aNode(dfs); - typename ErasingResGW::Node w=erasing_res_graph.bNode(dfs); - - pred.set(w, /*typename ErasingResGW::OutEdgeIt*/(dfs)); - if (erasing_res_graph.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), res_graph.resCap(dfs))); - } else { - free.set(w, res_graph.resCap(dfs)); - } - - if (w==t) { - __augment=true; - _augment=true; - break; - } - } else { - erasing_res_graph.erase(dfs); - } - } - } - - if (__augment) { - typename ErasingResGW::Node n=t; - Number augment_value=free.get(n); - while (erasing_res_graph.valid(pred.get(n))) { - typename ErasingResGW::OutEdgeIt e=pred.get(n); - res_graph.augment(e, augment_value); - n=erasing_res_graph.source(e); - if (res_graph.resCap(e)==0) - erasing_res_graph.erase(e); - } - } - - } //while (__augment) - - return _augment; - } - - void run() { - //int num_of_augmentations=0; - while (augmentOnShortestPath()) { - //while (augmentOnBlockingFlow()) { - //std::cout << ++num_of_augmentations << " "; - //std::cout< void run() { - //int num_of_augmentations=0; - //while (augmentOnShortestPath()) { - while (augmentOnBlockingFlow()) { - //std::cout << ++num_of_augmentations << " "; - //std::cout<first(e, s); g->valid(e); g->next(e)) { - a+=flow->get(e); - } - return a; - } - - }; - - -// template -// class MaxMatching { -// public: -// typedef typename Graph::Node Node; -// typedef typename Graph::NodeIt NodeIt; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::EdgeIt EdgeIt; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// typedef typename Graph::InEdgeIt InEdgeIt; - -// typedef typename Graph::NodeMap SMap; -// typedef typename Graph::NodeMap TMap; -// private: -// const Graph* G; -// SMap* S; -// TMap* T; -// //Node s; -// //Node t; -// FlowMap* flow; -// const CapacityMap* capacity; -// typedef ResGraphWrapper AugGraph; -// typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; -// typedef typename AugGraph::Edge AugEdge; -// typename Graph::NodeMap used; //0 - -// public: -// MaxMatching(const Graph& _G, SMap& _S, TMap& _T, FlowMap& _flow, const CapacityMap& _capacity) : -// G(&_G), S(&_S), T(&_T), flow(&_flow), capacity(&_capacity), used(_G) { } -// bool augmentOnShortestPath() { -// AugGraph res_graph(*G, *flow, *capacity); -// bool _augment=false; - -// typedef typename AugGraph::NodeMap ReachedMap; -// BfsIterator5< AugGraph, /*AugOutEdgeIt,*/ ReachedMap > bfs(res_graph); -// typename AugGraph::NodeMap pred(res_graph); -// for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// if ((S->get(s)) && (used.get(s)<1) ) { -// //Number u=0; -// //for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// //u+=flow->get(e); -// //if (u<1) { -// bfs.pushAndSetReached(s); -// pred.set(s, AugEdge(INVALID)); -// //} -// } -// } - -// typename AugGraph::NodeMap free(res_graph); - -// Node n; -// //searching for augmenting path -// while ( !bfs.finished() ) { -// AugOutEdgeIt e=bfs; -// if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// Node v=res_graph.source(e); -// Node w=res_graph.target(e); -// pred.set(w, e); -// if (res_graph.valid(pred.get(v))) { -// free.set(w, std::min(free.get(v), res_graph.free(e))); -// } else { -// free.set(w, res_graph.free(e)); -// } -// n=res_graph.target(e); -// if (T->get(n) && (used.get(n)<1) ) { -// //Number u=0; -// //for(InEdgeIt f=G->template first(n); G->valid(f); G->next(f)) -// //u+=flow->get(f); -// //if (u<1) { -// _augment=true; -// break; -// //} -// } -// } - -// ++bfs; -// } //end of searching augmenting path - -// if (_augment) { -// //Node n=t; -// used.set(n, 1); //mind2 vegen jav -// Number augment_value=free.get(n); -// while (res_graph.valid(pred.get(n))) { -// AugEdge e=pred.get(n); -// res_graph.augment(e, augment_value); -// n=res_graph.source(e); -// } -// used.set(n, 1); //mind2 vegen jav -// } - -// return _augment; -// } - -// // template bool augmentOnBlockingFlow() { -// // bool _augment=false; - -// // AugGraph res_graph(*G, *flow, *capacity); - -// // typedef typename AugGraph::NodeMap ReachedMap; -// // BfsIterator4< AugGraph, AugOutEdgeIt, ReachedMap > bfs(res_graph); - - - - - -// // //typename AugGraph::NodeMap pred(res_graph); -// // for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// // if (S->get(s)) { -// // Number u=0; -// // for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// // u+=flow->get(e); -// // if (u<1) { -// // bfs.pushAndSetReached(s); -// // //pred.set(s, AugEdge(INVALID)); -// // } -// // } -// // } - - - - -// // //bfs.pushAndSetReached(s); -// // typename AugGraph::NodeMap dist(res_graph); //filled up with 0's -// // while ( !bfs.finished() ) { -// // AugOutEdgeIt e=bfs; -// // if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// // dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); -// // } - -// // ++bfs; -// // } //computing distances from s in the residual graph - -// // MutableGraph F; -// // typename AugGraph::NodeMap -// // res_graph_to_F(res_graph); -// // for(typename AugGraph::NodeIt n=res_graph.template first(); res_graph.valid(n); res_graph.next(n)) { -// // res_graph_to_F.set(n, F.addNode()); -// // } - -// // typename MutableGraph::Node sF=res_graph_to_F.get(s); -// // typename MutableGraph::Node tF=res_graph_to_F.get(t); - -// // typename MutableGraph::EdgeMap original_edge(F); -// // typename MutableGraph::EdgeMap residual_capacity(F); - -// // //Making F to the graph containing the edges of the residual graph -// // //which are in some shortest paths -// // for(typename AugGraph::EdgeIt e=res_graph.template first(); res_graph.valid(e); res_graph.next(e)) { -// // if (dist.get(res_graph.target(e))==dist.get(res_graph.source(e))+1) { -// // typename MutableGraph::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); -// // original_edge.update(); -// // original_edge.set(f, e); -// // residual_capacity.update(); -// // residual_capacity.set(f, res_graph.free(e)); -// // } -// // } - -// // bool __augment=true; - -// // while (__augment) { -// // __augment=false; -// // //computing blocking flow with dfs -// // typedef typename MutableGraph::NodeMap BlockingReachedMap; -// // DfsIterator4< MutableGraph, typename MutableGraph::OutEdgeIt, BlockingReachedMap > dfs(F); -// // typename MutableGraph::NodeMap pred(F); -// // pred.set(sF, typename MutableGraph::Edge(INVALID)); -// // //invalid iterators for sources - -// // typename MutableGraph::NodeMap free(F); - -// // dfs.pushAndSetReached(sF); -// // while (!dfs.finished()) { -// // ++dfs; -// // if (F.valid(typename MutableGraph::OutEdgeIt(dfs))) { -// // if (dfs.isBNodeNewlyReached()) { -// // typename MutableGraph::Node v=F.aNode(dfs); -// // typename MutableGraph::Node w=F.bNode(dfs); -// // pred.set(w, dfs); -// // if (F.valid(pred.get(v))) { -// // free.set(w, std::min(free.get(v), residual_capacity.get(dfs))); -// // } else { -// // free.set(w, residual_capacity.get(dfs)); -// // } -// // if (w==tF) { -// // __augment=true; -// // _augment=true; -// // break; -// // } - -// // } else { -// // F.erase(typename MutableGraph::OutEdgeIt(dfs)); -// // } -// // } -// // } - -// // if (__augment) { -// // typename MutableGraph::Node n=tF; -// // Number augment_value=free.get(tF); -// // while (F.valid(pred.get(n))) { -// // typename MutableGraph::Edge e=pred.get(n); -// // res_graph.augment(original_edge.get(e), augment_value); -// // n=F.source(e); -// // if (residual_capacity.get(e)==augment_value) -// // F.erase(e); -// // else -// // residual_capacity.set(e, residual_capacity.get(e)-augment_value); -// // } -// // } - -// // } - -// // return _augment; -// // } -// bool augmentOnBlockingFlow2() { -// bool _augment=false; - -// //typedef ErasingResGraphWrapper EAugGraph; -// typedef FilterGraphWrapper< ErasingResGraphWrapper > EAugGraph; -// typedef typename EAugGraph::OutEdgeIt EAugOutEdgeIt; -// typedef typename EAugGraph::Edge EAugEdge; - -// EAugGraph res_graph(*G, *flow, *capacity); - -// //typedef typename EAugGraph::NodeMap ReachedMap; -// BfsIterator5< -// ErasingResGraphWrapper, -// /*typename ErasingResGraphWrapper::OutEdgeIt,*/ -// ErasingResGraphWrapper::NodeMap > bfs(res_graph); - - -// //typename AugGraph::NodeMap pred(res_graph); -// for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// if (S->get(s)) { -// Number u=0; -// for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// u+=flow->get(e); -// if (u<1) { -// bfs.pushAndSetReached(s); -// //pred.set(s, AugEdge(INVALID)); -// } -// } -// } - - -// //bfs.pushAndSetReached(s); - -// typename ErasingResGraphWrapper:: -// NodeMap& dist=res_graph.dist; - -// while ( !bfs.finished() ) { -// typename ErasingResGraphWrapper::OutEdgeIt e=bfs; -// if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); -// } -// ++bfs; -// } //computing distances from s in the residual graph - -// bool __augment=true; - -// while (__augment) { - -// __augment=false; -// //computing blocking flow with dfs -// typedef typename EAugGraph::NodeMap BlockingReachedMap; -// DfsIterator5< EAugGraph/*, EAugOutEdgeIt*/, BlockingReachedMap > -// dfs(res_graph); -// typename EAugGraph::NodeMap pred(res_graph, INVALID); -// //pred.set(s, EAugEdge(INVALID)); -// //invalid iterators for sources - -// typename EAugGraph::NodeMap free(res_graph); - - -// //typename AugGraph::NodeMap pred(res_graph); -// for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// if (S->get(s)) { -// Number u=0; -// for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// u+=flow->get(e); -// if (u<1) { -// dfs.pushAndSetReached(s); -// //pred.set(s, AugEdge(INVALID)); -// } -// } -// } - - - -// //dfs.pushAndSetReached(s); -// typename EAugGraph::Node n; -// while (!dfs.finished()) { -// ++dfs; -// if (res_graph.valid(EAugOutEdgeIt(dfs))) { -// if (dfs.isBNodeNewlyReached()) { - -// typename EAugGraph::Node v=res_graph.aNode(dfs); -// typename EAugGraph::Node w=res_graph.bNode(dfs); - -// pred.set(w, EAugOutEdgeIt(dfs)); -// if (res_graph.valid(pred.get(v))) { -// free.set(w, std::min(free.get(v), res_graph.free(dfs))); -// } else { -// free.set(w, res_graph.free(dfs)); -// } - -// n=w; -// if (T->get(w)) { -// Number u=0; -// for(InEdgeIt f=G->template first(n); G->valid(f); G->next(f)) -// u+=flow->get(f); -// if (u<1) { -// __augment=true; -// _augment=true; -// break; -// } -// } -// } else { -// res_graph.erase(dfs); -// } -// } - -// } - -// if (__augment) { -// // typename EAugGraph::Node n=t; -// Number augment_value=free.get(n); -// while (res_graph.valid(pred.get(n))) { -// EAugEdge e=pred.get(n); -// res_graph.augment(e, augment_value); -// n=res_graph.source(e); -// if (res_graph.free(e)==0) -// res_graph.erase(e); -// } -// } - -// } - -// return _augment; -// } -// void run() { -// //int num_of_augmentations=0; -// while (augmentOnShortestPath()) { -// //while (augmentOnBlockingFlow()) { -// //std::cout << ++num_of_augmentations << " "; -// //std::cout< void run() { -// // //int num_of_augmentations=0; -// // //while (augmentOnShortestPath()) { -// // while (augmentOnBlockingFlow()) { -// // //std::cout << ++num_of_augmentations << " "; -// // //std::cout</*getF*/first(e); G->valid(e); G->next(e)) { -// a+=flow->get(e); -// } -// return a; -// } -// }; - - - - - - -// // template -// // class MaxFlow2 { -// // public: -// // typedef typename Graph::Node Node; -// // typedef typename Graph::Edge Edge; -// // typedef typename Graph::EdgeIt EdgeIt; -// // typedef typename Graph::OutEdgeIt OutEdgeIt; -// // typedef typename Graph::InEdgeIt InEdgeIt; -// // private: -// // const Graph& G; -// // std::list& S; -// // std::list& T; -// // FlowMap& flow; -// // const CapacityMap& capacity; -// // typedef ResGraphWrapper AugGraph; -// // typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; -// // typedef typename AugGraph::Edge AugEdge; -// // typename Graph::NodeMap SMap; -// // typename Graph::NodeMap TMap; -// // public: -// // MaxFlow2(const Graph& _G, std::list& _S, std::list& _T, FlowMap& _flow, const CapacityMap& _capacity) : G(_G), S(_S), T(_T), flow(_flow), capacity(_capacity), SMap(_G), TMap(_G) { -// // for(typename std::list::const_iterator i=S.begin(); -// // i!=S.end(); ++i) { -// // SMap.set(*i, true); -// // } -// // for (typename std::list::const_iterator i=T.begin(); -// // i!=T.end(); ++i) { -// // TMap.set(*i, true); -// // } -// // } -// // bool augment() { -// // AugGraph res_graph(G, flow, capacity); -// // bool _augment=false; -// // Node reached_t_node; - -// // typedef typename AugGraph::NodeMap ReachedMap; -// // BfsIterator4< AugGraph, AugOutEdgeIt, ReachedMap > bfs(res_graph); -// // for(typename std::list::const_iterator i=S.begin(); -// // i!=S.end(); ++i) { -// // bfs.pushAndSetReached(*i); -// // } -// // //bfs.pushAndSetReached(s); - -// // typename AugGraph::NodeMap pred(res_graph); -// // //filled up with invalid iterators - -// // typename AugGraph::NodeMap free(res_graph); - -// // //searching for augmenting path -// // while ( !bfs.finished() ) { -// // AugOutEdgeIt e=/*AugOutEdgeIt*/(bfs); -// // if (e.valid() && bfs.isBNodeNewlyReached()) { -// // Node v=res_graph.source(e); -// // Node w=res_graph.target(e); -// // pred.set(w, e); -// // if (pred.get(v).valid()) { -// // free.set(w, std::min(free.get(v), e.free())); -// // } else { -// // free.set(w, e.free()); -// // } -// // if (TMap.get(res_graph.target(e))) { -// // _augment=true; -// // reached_t_node=res_graph.target(e); -// // break; -// // } -// // } - -// // ++bfs; -// // } //end of searching augmenting path - -// // if (_augment) { -// // Node n=reached_t_node; -// // Number augment_value=free.get(reached_t_node); -// // while (pred.get(n).valid()) { -// // AugEdge e=pred.get(n); -// // e.augment(augment_value); -// // n=res_graph.source(e); -// // } -// // } - -// // return _augment; -// // } -// // void run() { -// // while (augment()) { } -// // } -// // Number flowValue() { -// // Number a=0; -// // for(typename std::list::const_iterator i=S.begin(); -// // i!=S.end(); ++i) { -// // for(OutEdgeIt e=G.template first(*i); e.valid(); ++e) { -// // a+=flow.get(e); -// // } -// // for(InEdgeIt e=G.template first(*i); e.valid(); ++e) { -// // a-=flow.get(e); -// // } -// // } -// // return a; -// // } -// // }; - - -} // namespace lemon - -#endif //LEMON_EDMONDS_KARP_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/edmonds_karp_demo.cc --- a/src/work/marci/experiment/edmonds_karp_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -#include -#include -#include -#include -#include - -class CM { -public: - template int get(T) const {return 1;} -}; - -using namespace lemon; - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo < dimacs_max_flow_file - - -// struct Ize { -// }; - -// struct Mize { -// Ize bumm; -// }; - -// template -// class Huha { -// public: -// int u; -// B brr; -// }; - - -int main(int, char **) { - - typedef ListGraph MutableGraph; - - //typedef SmartGraph Graph; - typedef ListGraph Graph; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - -// Mize mize[10]; -// Mize bize[0]; -// Mize zize; -// typedef Mize Tize[0]; - -// std::cout << &zize << " " << sizeof(mize) << sizeof(Tize) << std::endl; -// std::cout << sizeof(bize) << std::endl; - - -// Huha k; -// std::cout << sizeof(k) << std::endl; - - -// struct Bumm { -// //int a; -// bool b; -// }; - -// std::cout << sizeof(Bumm) << std::endl; - - - Graph G; - Node s, t; - Graph::EdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - -// typedef TrivGraphWrapper TGW; -// TGW gw(G); -// TGW::NodeIt sw; -// gw./*getF*/first(sw); -// std::cout << "p1:" << gw.nodeNum() << std::endl; -// gw.erase(sw); -// std::cout << "p2:" << gw.nodeNum() << std::endl; - -// typedef const Graph cLG; -// typedef TrivGraphWrapper CTGW; -// CTGW cgw(G); -// CTGW::NodeIt csw; -// cgw./*getF*/first(csw); -// std::cout << "p1:" << cgw.nodeNum() << std::endl; -// //cgw.erase(csw); -// std::cout << "p2:" << cgw.nodeNum() << std::endl; - - - { - typedef TrivGraphWrapper GW; - GW gw(G); - std::cout << "edmonds karp demo (physical blocking flow augmentation)..." << std::endl; - GW::EdgeMap flow(gw); //0 flow - - Timer ts; - ts.reset(); - - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - MaxFlow, EMW > max_flow_test(gw, s, t, flow, cw); - int i=0; - while (max_flow_test.augmentOnBlockingFlow()) { -// for(EdgeIt e=G.template first(); e.valid(); ++e) { -// std::cout<<"("<"<(); e.valid(); ++e) { -// std::cout<<"("<"< GW; - GW gw(G); - std::cout << "edmonds karp demo (physical blocking flow 1 augmentation)..." << std::endl; - GW::EdgeMap flow(gw); //0 flow - - Timer ts; - ts.reset(); - - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - MaxFlow, EMW > max_flow_test(gw, s, t, flow, cw); - int i=0; - while (max_flow_test.augmentOnBlockingFlow1()) { -// for(EdgeIt e=G.template first(); e.valid(); ++e) { -// std::cout<<"("<"<(); e.valid(); ++e) { -// std::cout<<"("<"< GW; - GW gw(G); - std::cout << "edmonds karp demo (on-the-fly blocking flow augmentation)..." << std::endl; - GW::EdgeMap flow(gw); //0 flow - - Timer ts; - ts.reset(); - - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - MaxFlow, EMW > max_flow_test(gw, s, t, flow, cw); - int i=0; - while (max_flow_test.augmentOnBlockingFlow2()) { -// for(EdgeIt e=G.template first(); e.valid(); ++e) { -// std::cout<<"("<"<(); e.valid(); ++e) { -// std::cout<<"("<"< GW; - GW gw(G); - std::cout << "edmonds karp demo (on-the-fly shortest path augmentation)..." << std::endl; - GW::EdgeMap flow(gw); //0 flow - - Timer ts; - ts.reset(); - - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - MaxFlow, EMW> max_flow_test(gw, s, t, flow, cw); - int i=0; - while (max_flow_test.augmentOnShortestPath()) { -// for(EdgeIt e=G.template first(); e.valid(); ++e) { -// std::cout<<"("<"<(); e.valid(); ++e) { -// std::cout<<"("<"< -#include - -#include -//#include -#include -#include -#include -#include - -class CM { -public: - template int get(T) const {return 1;} -}; - -using namespace lemon; - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo < dimacs_max_flow_file - - -// struct Ize { -// }; - -// struct Mize { -// Ize bumm; -// }; - -// template -// class Huha { -// public: -// int u; -// B brr; -// }; - - -int main(int, char **) { - - typedef ListGraph MutableGraph; - - //typedef SmartGraph Graph; - typedef ListGraph Graph; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - -// Mize mize[10]; -// Mize bize[0]; -// Mize zize; -// typedef Mize Tize[0]; - -// std::cout << &zize << " " << sizeof(mize) << sizeof(Tize) << std::endl; -// std::cout << sizeof(bize) << std::endl; - - -// Huha k; -// std::cout << sizeof(k) << std::endl; - - -// struct Bumm { -// //int a; -// bool b; -// }; - -// std::cout << sizeof(Bumm) << std::endl; - - - Graph G; - Node s, t; - Graph::EdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - -// typedef TrivGraphWrapper TGW; -// TGW gw(G); -// TGW::NodeIt sw; -// gw./*getF*/first(sw); -// std::cout << "p1:" << gw.nodeNum() << std::endl; -// gw.erase(sw); -// std::cout << "p2:" << gw.nodeNum() << std::endl; - -// typedef const Graph cLG; -// typedef TrivGraphWrapper CTGW; -// CTGW cgw(G); -// CTGW::NodeIt csw; -// cgw./*getF*/first(csw); -// std::cout << "p1:" << cgw.nodeNum() << std::endl; -// //cgw.erase(csw); -// std::cout << "p2:" << cgw.nodeNum() << std::endl; - - - { - typedef TrivGraphWrapper GW; - GW gw(G); - std::cout << "edmonds karp demo (physical blocking flow augmentation)..." << std::endl; - GW::EdgeMap flow(gw); //0 flow - - Timer ts; - ts.reset(); - - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - MaxFlow, EMW > max_flow_test(gw, s, t, flow, cw); - int i=0; - while (max_flow_test.augmentOnBlockingFlow()) { -// for(EdgeIt e=G.template first(); e.valid(); ++e) { -// std::cout<<"("<"<(); e.valid(); ++e) { -// std::cout<<"("<"< GW; - GW gw(G); - std::cout << "edmonds karp demo (physical blocking flow 1 augmentation)..." << std::endl; - GW::EdgeMap flow(gw); //0 flow - - Timer ts; - ts.reset(); - - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - MaxFlow, EMW > max_flow_test(gw, s, t, flow, cw); - int i=0; - while (max_flow_test.augmentOnBlockingFlow1()) { -// for(EdgeIt e=G.template first(); e.valid(); ++e) { -// std::cout<<"("<"<(); e.valid(); ++e) { -// std::cout<<"("<"< GW; - GW gw(G); - std::cout << "edmonds karp demo (on-the-fly blocking flow augmentation)..." << std::endl; - GW::EdgeMap flow(gw); //0 flow - - Timer ts; - ts.reset(); - - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - MaxFlow, EMW > max_flow_test(gw, s, t, flow, cw); - int i=0; - while (max_flow_test.augmentOnBlockingFlow2()) { -// for(EdgeIt e=G.template first(); e.valid(); ++e) { -// std::cout<<"("<"<(); e.valid(); ++e) { -// std::cout<<"("<"< GW; - GW gw(G); - std::cout << "edmonds karp demo (on-the-fly shortest path augmentation)..." << std::endl; - GW::EdgeMap flow(gw); //0 flow - - Timer ts; - ts.reset(); - - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - MaxFlow, EMW> max_flow_test(gw, s, t, flow, cw); - int i=0; - while (max_flow_test.augmentOnShortestPath()) { -// for(EdgeIt e=G.template first(); e.valid(); ++e) { -// std::cout<<"("<"<(); e.valid(); ++e) { -// std::cout<<"("<"< - -namespace lemon { - - template - class TrivGraphWrapper { - protected: - Graph* graph; - - public: - typedef Graph BaseGraph; - - typedef typename Graph::Node Node; - class NodeIt : public Graph::NodeIt { - public: - NodeIt() { } - NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { } - NodeIt(const Invalid& i) : Graph::NodeIt(i) { } - NodeIt(const TrivGraphWrapper& _G) : - Graph::NodeIt(*(_G.graph)) { } - }; - typedef typename Graph::Edge Edge; - //typedef typename Graph::OutEdgeIt OutEdgeIt; - class OutEdgeIt : public Graph::OutEdgeIt { - public: - OutEdgeIt() { } - OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { } - OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { } - OutEdgeIt(const TrivGraphWrapper& _G, const Node& n) : - Graph::OutEdgeIt(*(_G.graph), n) { } - }; - //typedef typename Graph::InEdgeIt InEdgeIt; - class InEdgeIt : public Graph::InEdgeIt { - public: - InEdgeIt() { } - InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { } - InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { } - InEdgeIt(const TrivGraphWrapper& _G, const Node& n) : - Graph::InEdgeIt(*(_G.graph), n) { } - }; - //typedef typename Graph::SymEdgeIt SymEdgeIt; - //typedef typename Graph::EdgeIt EdgeIt; - class EdgeIt : public Graph::EdgeIt { - public: - EdgeIt() { } - EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { } - EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { } - EdgeIt(const TrivGraphWrapper& _G) : - Graph::EdgeIt(*(_G.graph)) { } - }; - - //TrivGraphWrapper() : graph(0) { } - TrivGraphWrapper(Graph& _graph) : graph(&_graph) { } - -// void setGraph(Graph& _graph) { graph = &_graph; } -// Graph& getGraph() const { return (*graph); } - - NodeIt& first(NodeIt& i) const { - i=NodeIt(*this); - return i; - } - EdgeIt& first(EdgeIt& i) const { - i=EdgeIt(*this); - return i; - } -// template I& first(I& i) const { -// //return graph->first(i); -// i=I(*this); -// return i; -// } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); - return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); - return i; - } -// template I& first(I& i, const P& p) const { -// //return graph->first(i, p); -// i=I(*this, p); -// return i; -// } - -// template I getNext(const I& i) const { -// return graph->getNext(i); } - template I& next(I &i) const { graph->next(i); return i; } - - template< typename It > It first() const { - It e; first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; first(e, v); return e; } - - Node target(const Edge& e) const { return graph->target(e); } - Node source(const Edge& e) const { return graph->source(e); } - - template bool valid(const I& i) const - { return graph->valid(i); } - - //template void setInvalid(const I &i); - //{ return graph->setInvalid(i); } - - int nodeNum() const { return graph->nodeNum(); } - int edgeNum() const { return graph->edgeNum(); } - - template Node aNode(const I& e) const { - return graph->aNode(e); } - template Node bNode(const I& e) const { - return graph->bNode(e); } - - Node addNode() const { return graph->addNode(); } - Edge addEdge(const Node& source, const Node& target) const { - return graph->addEdge(source, target); } - - template void erase(const I& i) const { graph->erase(i); } - - void clear() const { graph->clear(); } - - template class NodeMap : public Graph::NodeMap { - public: - NodeMap(const TrivGraphWrapper& _G) : - Graph::NodeMap(*(_G.graph)) { } - NodeMap(const TrivGraphWrapper& _G, T a) : - Graph::NodeMap(*(_G.graph), a) { } - }; - - template class EdgeMap : public Graph::EdgeMap { - public: - EdgeMap(const TrivGraphWrapper& _G) : - Graph::EdgeMap(*(_G.graph)) { } - EdgeMap(const TrivGraphWrapper& _G, T a) : - Graph::EdgeMap(*(_G.graph), a) { } - }; - - template class NodeMapWrapper { - protected: - Map* map; - public: - NodeMapWrapper(Map& _map) : map(&_map) { } - //template - void set(Node n, T a) { map->set(n, a); } - //template - T get(Node n) const { return map->get(n); } - }; - - template class EdgeMapWrapper { - protected: - Map* map; - public: - EdgeMapWrapper(Map& _map) : map(&_map) { } - //template - void set(Edge n, T a) { map->set(n, a); } - //template - T get(Edge n) const { return map->get(n); } - }; - }; - - template - class GraphWrapper { - protected: - GraphWrapper gw; - - public: - //typedef typename GraphWrapper::BaseGraph BaseGraph; - -// typedef typename GraphWrapper::Node Node; -// typedef typename GraphWrapper::NodeIt NodeIt; - -// typedef typename GraphWrapper::Edge Edge; -// typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; -// typedef typename GraphWrapper::InEdgeIt InEdgeIt; -// //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt; -// typedef typename GraphWrapper::EdgeIt EdgeIt; - - typedef typename GraphWrapper::Node Node; - class NodeIt : public GraphWrapper::NodeIt { - public: - NodeIt() { } - NodeIt(const typename GraphWrapper::NodeIt& n) : - GraphWrapper::NodeIt(n) { } - NodeIt(const Invalid& i) : GraphWrapper::NodeIt(i) { } - NodeIt(const GraphWrapper& _G) : - GraphWrapper::NodeIt(_G.gw) { } - }; - typedef typename GraphWrapper::Edge Edge; - //typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; - class OutEdgeIt : public GraphWrapper::OutEdgeIt { - public: - OutEdgeIt() { } - OutEdgeIt(const typename GraphWrapper::OutEdgeIt& e) : - GraphWrapper::OutEdgeIt(e) { } - OutEdgeIt(const Invalid& i) : GraphWrapper::OutEdgeIt(i) { } - OutEdgeIt(const GraphWrapper& _G, const Node& n) : - GraphWrapper::OutEdgeIt(_G.gw, n) { } - }; - //typedef typename GraphWrapper::InEdgeIt InEdgeIt; - class InEdgeIt : public GraphWrapper::InEdgeIt { - public: - InEdgeIt() { } - InEdgeIt(const typename GraphWrapper::InEdgeIt& e) : - GraphWrapper::InEdgeIt(e) { } - InEdgeIt(const Invalid& i) : GraphWrapper::InEdgeIt(i) { } - InEdgeIt(const GraphWrapper& _G, const Node& n) : - GraphWrapper::InEdgeIt(_G.gw, n) { } - }; - //typedef typename GraphWrapper::SymEdgeIt SymEdgeIt; - //typedef typename GraphWrapper::EdgeIt EdgeIt; - class EdgeIt : public GraphWrapper::EdgeIt { - public: - EdgeIt() { } - EdgeIt(const typename GraphWrapper::EdgeIt& e) : - GraphWrapper::EdgeIt(e) { } - EdgeIt(const Invalid& i) : GraphWrapper::EdgeIt(i) { } - EdgeIt(const GraphWrapper& _G) : - GraphWrapper::EdgeIt(_G.gw) { } - }; - - - //GraphWrapper() : gw() { } - GraphWrapper(GraphWrapper _gw) : gw(_gw) { } - - //void setGraph(BaseGraph& _graph) { gw.setGraph(_graph); } - //BaseGraph& getGraph() const { return gw.getGraph(); } - - template I& first(I& i) const { - i=I(*this); - return i; - } - template I& first(I& i, const P& p) const { - i=I(*this, p); - return i; - } - -// template I getNext(const I& i) const { return gw.getNext(i); } - template I& next(I &i) const { gw.next(i); return i; } - - template< typename It > It first() const { - It e; this->first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; this->first(e, v); return e; } - - Node target(const Edge& e) const { return gw.target(e); } - Node source(const Edge& e) const { return gw.source(e); } - - template bool valid(const I& i) const { return gw.valid(i); } - - //template void setInvalid(const I &i); - //{ return graph->setInvalid(i); } - - int nodeNum() const { return gw.nodeNum(); } - int edgeNum() const { return gw.edgeNum(); } - - template Node aNode(const I& e) const { return gw.aNode(e); } - template Node bNode(const I& e) const { return gw.bNode(e); } - - Node addNode() const { return gw.addNode(); } - Edge addEdge(const Node& source, const Node& target) const { - return gw.addEdge(source, target); } - - template void erase(const I& i) const { gw.erase(i); } - - void clear() const { gw.clear(); } - - template class NodeMap : public GraphWrapper::NodeMap { - public: - NodeMap(const GraphWrapper& _G) : - GraphWrapper::NodeMap(_G.gw) { } - NodeMap(const GraphWrapper& _G, T a) : - GraphWrapper::NodeMap(_G.gw, a) { } - }; - - template class EdgeMap : public GraphWrapper::EdgeMap { - public: - EdgeMap(const GraphWrapper& _G) : - GraphWrapper::EdgeMap(_G.gw) { } - EdgeMap(const GraphWrapper& _G, T a) : - GraphWrapper::EdgeMap(_G.gw, a) { } - }; - }; - -// template -// class RevGraphWrapper -// { -// protected: -// Graph* graph; - -// public: -// typedef Graph BaseGraph; - -// typedef typename Graph::Node Node; -// typedef typename Graph::NodeIt NodeIt; - -// typedef typename Graph::Edge Edge; -// typedef typename Graph::OutEdgeIt InEdgeIt; -// typedef typename Graph::InEdgeIt OutEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// typedef typename Graph::EdgeIt EdgeIt; - -// //RevGraphWrapper() : graph(0) { } -// RevGraphWrapper(Graph& _graph) : graph(&_graph) { } - -// void setGraph(Graph& _graph) { graph = &_graph; } -// Graph& getGraph() const { return (*graph); } - -// template I& first(I& i) const { return graph->first(i); } -// template I& first(I& i, const P& p) const { -// return graph->first(i, p); } - -// template I getNext(const I& i) const { -// return graph->getNext(i); } -// template I& next(I &i) const { return graph->next(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(const Node& v) const { -// It e; first(e, v); return e; } - -// Node target(const Edge& e) const { return graph->source(e); } -// Node source(const Edge& e) const { return graph->target(e); } - -// template bool valid(const I& i) const -// { return graph->valid(i); } - -// //template void setInvalid(const I &i); -// //{ return graph->setInvalid(i); } - -// template Node aNode(const I& e) const { -// return graph->aNode(e); } -// template Node bNode(const I& e) const { -// return graph->bNode(e); } - -// Node addNode() const { return graph->addNode(); } -// Edge addEdge(const Node& source, const Node& target) const { -// return graph->addEdge(source, target); } - -// int nodeNum() const { return graph->nodeNum(); } -// int edgeNum() const { return graph->edgeNum(); } - -// template void erase(const I& i) const { graph->erase(i); } - -// void clear() const { graph->clear(); } - -// template class NodeMap : public Graph::NodeMap { -// public: -// NodeMap(const RevGraphWrapper& _G) : -// Graph::NodeMap(_G.getGraph()) { } -// NodeMap(const RevGraphWrapper& _G, T a) : -// Graph::NodeMap(_G.getGraph(), a) { } -// }; - -// template class EdgeMap : public Graph::EdgeMap { -// public: -// EdgeMap(const RevGraphWrapper& _G) : -// Graph::EdgeMap(_G.getGraph()) { } -// EdgeMap(const RevGraphWrapper& _G, T a) : -// Graph::EdgeMap(_G.getGraph(), a) { } -// }; -// }; - -// template*/ > -// class RevGraphWrapper : -// public GraphWrapper/*GraphWrapper< TrivGraphWrapper >*/ { -// protected: -// //Graph* graph; - -// public: -// //typedef Graph BaseGraph; - -// //typedef typename Graph::Node Node; -// //typedef typename Graph::NodeIt NodeIt; - -// //typedef typename Graph::Edge Edge; -// typedef typename GraphWrapper/*typename GraphWrapper< TrivGraphWrapper >*/::OutEdgeIt InEdgeIt; -// typedef typename GraphWrapper/*typename GraphWrapper< TrivGraphWrapper >*/::InEdgeIt OutEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// //typedef typename Graph::EdgeIt EdgeIt; - -// //RevGraphWrapper() : graph(0) { } -// RevGraphWrapper(GraphWrapper _gw/*BaseGraph& _graph*/) : GraphWrapper/*GraphWrapper< TrivGraphWrapper >*/(_gw/*TrivGraphWrapper(_graph)*/) { } - -// //void setGraph(Graph& _graph) { graph = &_graph; } -// //Graph& getGraph() const { return (*graph); } - -// //template I& first(I& i) const { return graph->first(i); } -// //template I& first(I& i, const P& p) const { -// // return graph->first(i, p); } - -// //template I getNext(const I& i) const { -// // return graph->getNext(i); } -// //template I& next(I &i) const { return graph->next(i); } - -// //template< typename It > It first() const { -// // It e; first(e); return e; } - -// //template< typename It > It first(const Node& v) const { -// // It e; first(e, v); return e; } - -// //Node target(const Edge& e) const { return graph->source(e); } -// //Node source(const Edge& e) const { return graph->target(e); } - -// //template bool valid(const I& i) const -// // { return graph->valid(i); } - -// //template void setInvalid(const I &i); -// //{ return graph->setInvalid(i); } - -// //template Node aNode(const I& e) const { -// // return graph->aNode(e); } -// //template Node bNode(const I& e) const { -// // return graph->bNode(e); } - -// //Node addNode() const { return graph->addNode(); } -// //Edge addEdge(const Node& source, const Node& target) const { -// // return graph->addEdge(source, target); } - -// //int nodeNum() const { return graph->nodeNum(); } -// //int edgeNum() const { return graph->edgeNum(); } - -// //template void erase(const I& i) const { graph->erase(i); } - -// //void clear() const { graph->clear(); } - -// template class NodeMap : -// public GraphWrapper/*< TrivGraphWrapper >*/::NodeMap -// { -// public: -// NodeMap(const RevGraphWrapper& _gw) : -// GraphWrapper/*< TrivGraphWrapper >*/::NodeMap(_gw) { } -// NodeMap(const RevGraphWrapper& _gw, T a) : -// GraphWrapper/*< TrivGraphWrapper >*/::NodeMap(_gw, a) { } -// }; - -// template class EdgeMap : -// public GraphWrapper/*< TrivGraphWrapper >*/::EdgeMap { -// public: -// EdgeMap(const RevGraphWrapper& _gw) : -// GraphWrapper/*< TrivGraphWrapper >*/::EdgeMap(_gw) { } -// EdgeMap(const RevGraphWrapper& _gw, T a) : -// GraphWrapper/*< TrivGraphWrapper >*/::EdgeMap(_gw, a) { } -// }; -// }; - - template - class RevGraphWrapper : public GraphWrapper { - public: - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::Edge Edge; - //FIXME - //If GraphWrapper::OutEdgeIt is not defined - //and we do not want to use RevGraphWrapper::InEdgeIt, - //this won't work, because of typedef - //OR - //graphs have to define their non-existing iterators to void - //Unfortunately all the typedefs are instantiated in templates, - //unlike other stuff - typedef typename GraphWrapper::OutEdgeIt InEdgeIt; - typedef typename GraphWrapper::InEdgeIt OutEdgeIt; - - RevGraphWrapper(GraphWrapper _gw) : - GraphWrapper(_gw) { } - - Node target(const Edge& e) const - { return GraphWrapper::source(e); } - Node source(const Edge& e) const - { return GraphWrapper::target(e); } - }; - - //Subgraph on the same node-set and partial edge-set - template - class SubGraphWrapper : public GraphWrapper { - protected: - EdgeFilterMap* filter_map; - public: - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - typedef typename GraphWrapper::Edge Edge; - typedef typename GraphWrapper::EdgeIt EdgeIt; - typedef typename GraphWrapper::InEdgeIt InEdgeIt; - typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; - - SubGraphWrapper(GraphWrapper _gw, EdgeFilterMap& _filter_map) : - GraphWrapper(_gw), filter_map(&_filter_map) { } - - template I& first(I& i) const { - gw.first(i); - while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } - return i; - } - template I& first(I& i, const P& p) const { - gw.first(i, p); - while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } - return i; - } - - //template I getNext(const I& i) const { - // return gw.getNext(i); - //} - template I& next(I &i) const { - gw.next(i); - while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } - return i; - } - - template< typename It > It first() const { - It e; this->first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; this->first(e, v); return e; } - }; - -// template -// class UndirGraphWrapper { -// protected: -// //Graph* graph; -// GraphWrapper gw; - -// public: -// typedef GraphWrapper BaseGraph; - -// typedef typename GraphWrapper::Node Node; -// typedef typename GraphWrapper::NodeIt NodeIt; - -// //typedef typename Graph::Edge Edge; -// //typedef typename Graph::OutEdgeIt OutEdgeIt; -// //typedef typename Graph::InEdgeIt InEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// //typedef typename Graph::EdgeIt EdgeIt; - -// //private: -// typedef typename GraphWrapper::Edge GraphEdge; -// typedef typename GraphWrapper::OutEdgeIt GraphOutEdgeIt; -// typedef typename GraphWrapper::InEdgeIt GraphInEdgeIt; -// //public: - -// //UndirGraphWrapper() : graph(0) { } -// UndirGraphWrapper(GraphWrapper _gw) : gw(_gw) { } - -// //void setGraph(Graph& _graph) { graph = &_graph; } -// //Graph& getGraph() const { return (*graph); } - -// class Edge { -// friend class UndirGraphWrapper; -// bool out_or_in; //true iff out -// GraphOutEdgeIt out; -// GraphInEdgeIt in; -// public: -// Edge() : out_or_in(), out(), in() { } -// Edge(const Invalid& i) : out_or_in(false), out(), in(i) { } -// operator GraphEdge() const { -// if (out_or_in) return(out); else return(in); -// } -// friend bool operator==(const Edge& u, const Edge& v) { -// if (v.out_or_in) -// return (u.out_or_in && u.out==v.out); -// else -// return (!u.out_or_in && u.in==v.in); -// } -// friend bool operator!=(const Edge& u, const Edge& v) { -// if (v.out_or_in) -// return (!u.out_or_in || u.out!=v.out); -// else -// return (u.out_or_in || u.in!=v.in); -// } -// }; - -// class OutEdgeIt : public Edge { -// friend class UndirGraphWrapper; -// public: -// OutEdgeIt() : Edge() { } -// OutEdgeIt(const Invalid& i) : Edge(i) { } -// OutEdgeIt(const UndirGraphWrapper& _G, const Node& n) -// : Edge() { -// out_or_in=true; -// _G.gw.first(out, n); -// if (!(_G.gw.valid(out))) { -// out_or_in=false; -// _G.gw.first(in, n); -// } -// } -// }; - -// OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { -// e.out_or_in=true; -// gw.first(e.out, n); -// if (!(gw.valid(e.out))) { -// e.out_or_in=false; -// gw.first(e.in, n); -// } -// return e; -// } - -// OutEdgeIt& next(OutEdgeIt& e) const { -// if (e.out_or_in) { -// Node n=gw.source(e.out); -// gw.next(e.out); -// if (!gw.valid(e.out)) { -// e.out_or_in=false; -// gw.first(e.in, n); -// } -// } else { -// gw.next(e.in); -// } -// return e; -// } - -// Node aNode(const OutEdgeIt& e) const { -// if (e.out_or_in) return gw.source(e); else return gw.target(e); } -// Node bNode(const OutEdgeIt& e) const { -// if (e.out_or_in) return gw.target(e); else return gw.source(e); } - -// typedef OutEdgeIt InEdgeIt; - -// template I& first(I& i) const { return gw.first(i); } -// // template I& first(I& i, const P& p) const { -// // return graph->first(i, p); } - -// template I getNext(const I& i) const { -// return gw.getNext(i); } -// template I& next(I &i) const { return gw.next(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(const Node& v) const { -// It e; first(e, v); return e; } - -// Node target(const Edge& e) const { return gw.target(e); } -// Node source(const Edge& e) const { return gw.source(e); } - -// template bool valid(const I& i) const -// { return gw.valid(i); } - -// //template void setInvalid(const I &i); -// //{ return graph->setInvalid(i); } - -// int nodeNum() const { return gw.nodeNum(); } -// int edgeNum() const { return gw.edgeNum(); } - -// // template Node aNode(const I& e) const { -// // return graph->aNode(e); } -// // template Node bNode(const I& e) const { -// // return graph->bNode(e); } - -// Node addNode() const { return gw.addNode(); } -// // FIXME: ez igy nem jo, mert nem -// // Edge addEdge(const Node& source, const Node& target) const { -// // return graph->addEdge(source, target); } - -// template void erase(const I& i) const { gw.erase(i); } - -// void clear() const { gw.clear(); } - -// template class NodeMap : public GraphWrapper::NodeMap { -// public: -// NodeMap(const UndirGraphWrapper& _G) : -// GraphWrapper::NodeMap(_G.gw) { } -// NodeMap(const UndirGraphWrapper& _G, T a) : -// GraphWrapper::NodeMap(_G.gw, a) { } -// }; - -// template class EdgeMap : public GraphWrapper::EdgeMap { -// public: -// EdgeMap(const UndirGraphWrapper& _G) : -// GraphWrapper::EdgeMap(_G.gw) { } -// EdgeMap(const UndirGraphWrapper& _G, T a) : -// GraphWrapper::EdgeMap(_G.gw, a) { } -// }; -// }; - - - template - class UndirGraphWrapper : public GraphWrapper { - protected: -// GraphWrapper gw; - - public: - //typedef GraphWrapper BaseGraph; - - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - - //private: - //FIXME ezeknek valojaban a GraphWrapper megfelelo dolgai kellene hogy - //legyenek, at kell irni - typedef typename /*GraphWrapper*/ - GraphWrapper::Edge GraphEdge; - typedef typename /*GraphWrapper*/ - GraphWrapper::OutEdgeIt GraphOutEdgeIt; - typedef typename /*GraphWrapper*/ - GraphWrapper::InEdgeIt GraphInEdgeIt; - //public: - - //UndirGraphWrapper() : graph(0) { } - UndirGraphWrapper(GraphWrapper _gw) : - GraphWrapper(_gw) { } - - //UndirGraphWrapper(GraphWrapper _gw) : gw(_gw) { } - - //void setGraph(Graph& _graph) { graph = &_graph; } - //Graph& getGraph() const { return (*graph); } - - class Edge { - friend class UndirGraphWrapper; - protected: - bool out_or_in; //true iff out - GraphOutEdgeIt out; - GraphInEdgeIt in; - public: - Edge() : out_or_in(), out(), in() { } - Edge(const Invalid& i) : out_or_in(false), out(), in(i) { } - operator GraphEdge() const { - if (out_or_in) return(out); else return(in); - } -//FIXME -//2 edges are equal if they "refer" to the same physical edge -//is it good? - friend bool operator==(const Edge& u, const Edge& v) { - if (v.out_or_in) - if (u.out_or_in) return (u.out==v.out); else return (u.out==v.in); - //return (u.out_or_in && u.out==v.out); - else - if (u.out_or_in) return (u.out==v.in); else return (u.in==v.in); - //return (!u.out_or_in && u.in==v.in); - } - friend bool operator!=(const Edge& u, const Edge& v) { - if (v.out_or_in) - if (u.out_or_in) return (u.out!=v.out); else return (u.out!=v.in); - //return (!u.out_or_in || u.out!=v.out); - else - if (u.out_or_in) return (u.out!=v.in); else return (u.in!=v.in); - //return (u.out_or_in || u.in!=v.in); - } - }; - - class OutEdgeIt : public Edge { - friend class UndirGraphWrapper; - public: - OutEdgeIt() : Edge() { } - OutEdgeIt(const Invalid& i) : Edge(i) { } - OutEdgeIt(const UndirGraphWrapper& _G, const Node& n) - : Edge() { - out_or_in=true; _G.gw.first(out, n); - if (!(_G.gw.valid(out))) { out_or_in=false; _G.gw.first(in, n); } - } - }; - - typedef OutEdgeIt InEdgeIt; - - class EdgeIt : public Edge { - friend class UndirGraphWrapper; - protected: - NodeIt v; - public: - EdgeIt() : Edge() { } - EdgeIt(const Invalid& i) : Edge(i) { } - EdgeIt(const UndirGraphWrapper& _G) - : Edge() { - out_or_in=true; - //Node v; - _G.first(v); - if (_G.valid(v)) _G.gw.first(out); else out=INVALID; - while (_G.valid(v) && !_G.gw.valid(out)) { - _G.gw.next(v); - if (_G.valid(v)) _G.gw.first(out); - } - } - }; - - OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { - e.out_or_in=true; gw.first(e.out, n); - if (!(gw.valid(e.out))) { e.out_or_in=false; gw.first(e.in, n); } - return e; - } - - EdgeIt& first(EdgeIt& e) const { - e.out_or_in=true; - //NodeIt v; - first(e.v); - if (valid(e.v)) gw.first(e.out, e.v); else e.out=INVALID; - while (valid(e.v) && !gw.valid(e.out)) { - gw.next(e.v); - if (valid(e.v)) gw.first(e.out, e.v); - } - return e; - } - - template I& first(I& i) const { gw.first(i); return i; } - template I& first(I& i, const P& p) const { - gw.first(i, p); return i; } - - OutEdgeIt& next(OutEdgeIt& e) const { - if (e.out_or_in) { - Node n=gw.source(e.out); - gw.next(e.out); - if (!gw.valid(e.out)) { e.out_or_in=false; gw.first(e.in, n); } - } else { - gw.next(e.in); - } - return e; - } - - EdgeIt& next(EdgeIt& e) const { - //NodeIt v=source(e); - gw.next(e.out); - while (valid(e.v) && !gw.valid(e.out)) { - next(e.v); - if (valid(e.v)) gw.first(e.out, e.v); - } - return e; - } - - template I& next(I &i) const { return gw.next(i); } -// template I getNext(const I& i) const { return gw.getNext(i); } - - template< typename It > It first() const { - It e; first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; first(e, v); return e; } - -// Node target(const Edge& e) const { return gw.target(e); } -// Node source(const Edge& e) const { return gw.source(e); } - -// template bool valid(const I& i) const -// { return gw.valid(i); } - -// int nodeNum() const { return gw.nodeNum(); } -// int edgeNum() const { return gw.edgeNum(); } - -// template Node aNode(const I& e) const { -// return graph->aNode(e); } -// template Node bNode(const I& e) const { -// return graph->bNode(e); } - - Node aNode(const OutEdgeIt& e) const { - if (e.out_or_in) return gw.source(e); else return gw.target(e); } - Node bNode(const OutEdgeIt& e) const { - if (e.out_or_in) return gw.target(e); else return gw.source(e); } - -// Node addNode() const { return gw.addNode(); } - -// FIXME: ez igy nem jo, mert nem -// Edge addEdge(const Node& source, const Node& target) const { -// return graph->addEdge(source, target); } - -// template void erase(const I& i) const { gw.erase(i); } - -// void clear() const { gw.clear(); } - -// template class NodeMap : public GraphWrapper::NodeMap { -// public: -// NodeMap(const UndirGraphWrapper& _G) : -// GraphWrapper::NodeMap(_G.gw) { } -// NodeMap(const UndirGraphWrapper& _G, T a) : -// GraphWrapper::NodeMap(_G.gw, a) { } -// }; - -// template class EdgeMap : -// public GraphWrapper::EdgeMap { -// public: -// EdgeMap(const UndirGraphWrapper& _G) : -// GraphWrapper::EdgeMap(_G.gw) { } -// EdgeMap(const UndirGraphWrapper& _G, T a) : -// GraphWrapper::EdgeMap(_G.gw, a) { } -// }; - }; - - - - - -// template -// class SymGraphWrapper -// { -// Graph* graph; - -// public: -// typedef Graph BaseGraph; - -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; - -// typedef typename Graph::NodeIt NodeIt; - -// //FIXME tag-ekkel megcsinalni, hogy abbol csinaljon -// //iranyitatlant, ami van -// //mert csak 1 dolgot lehet be typedef-elni -// typedef typename Graph::OutEdgeIt SymEdgeIt; -// //typedef typename Graph::InEdgeIt SymEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// typedef typename Graph::EdgeIt EdgeIt; - -// int nodeNum() const { return graph->nodeNum(); } -// int edgeNum() const { return graph->edgeNum(); } - -// template I& first(I& i) const { return graph->first(i); } -// template I& first(I& i, const P& p) const { -// return graph->first(i, p); } -// //template I next(const I i); { return graph->goNext(i); } -// //template I &goNext(I &i); { return graph->goNext(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(Node v) const { -// It e; first(e, v); return e; } - -// Node target(const Edge& e) const { return graph->target(e); } -// Node source(const Edge& e) const { return graph->source(e); } - -// template Node aNode(const I& e) const { -// return graph->aNode(e); } -// template Node bNode(const I& e) const { -// return graph->bNode(e); } - -// //template bool valid(const I i); -// //{ return graph->valid(i); } - -// //template void setInvalid(const I &i); -// //{ return graph->setInvalid(i); } - -// Node addNode() { return graph->addNode(); } -// Edge addEdge(const Node& source, const Node& target) { -// return graph->addEdge(source, target); } - -// template void erase(const I& i) { graph->erase(i); } - -// void clear() { graph->clear(); } - -// template class NodeMap : public Graph::NodeMap { }; -// template class EdgeMap : public Graph::EdgeMap { }; - -// void setGraph(Graph& _graph) { graph = &_graph; } -// Graph& getGraph() { return (*graph); } - -// //SymGraphWrapper() : graph(0) { } -// SymGraphWrapper(Graph& _graph) : graph(&_graph) { } -// }; - - - template - class ResGraphWrapper : public GraphWrapper{ - public: - //typedef Graph BaseGraph; - //typedef TrivGraphWrapper GraphWrapper; - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - private: - typedef typename /*GraphWrapper*/ - GraphWrapper::OutEdgeIt OldOutEdgeIt; - typedef typename /*GraphWrapper*/ - GraphWrapper::InEdgeIt OldInEdgeIt; - protected: - //const Graph* graph; - //GraphWrapper gw; - FlowMap* flow; - const CapacityMap* capacity; - public: - - ResGraphWrapper(const GraphWrapper& _gw, FlowMap& _flow, - const CapacityMap& _capacity) : - GraphWrapper(_gw), - flow(&_flow), capacity(&_capacity) { } - - //void setGraph(const Graph& _graph) { graph = &_graph; } - //const Graph& getGraph() const { return (*graph); } - - class Edge; - class OutEdgeIt; - friend class Edge; - friend class OutEdgeIt; - - class Edge { - friend class ResGraphWrapper; - protected: - bool out_or_in; //true, iff out - OldOutEdgeIt out; - OldInEdgeIt in; - public: - Edge() : out_or_in(true) { } - Edge(const Invalid& i) : out_or_in(false), out(), in(i) { } -// bool valid() const { -// return out_or_in && out.valid() || in.valid(); } - friend bool operator==(const Edge& u, const Edge& v) { - if (v.out_or_in) - return (u.out_or_in && u.out==v.out); - else - return (!u.out_or_in && u.in==v.in); - } - friend bool operator!=(const Edge& u, const Edge& v) { - if (v.out_or_in) - return (!u.out_or_in || u.out!=v.out); - else - return (u.out_or_in || u.in!=v.in); - } - }; - - - class OutEdgeIt : public Edge { - friend class ResGraphWrapper; - public: - OutEdgeIt() { } - //FIXME - OutEdgeIt(const Edge& e) : Edge(e) { } - OutEdgeIt(const Invalid& i) : Edge(i) { } - protected: - OutEdgeIt(const ResGraphWrapper& resG, Node v) : Edge() { - resG.gw.first(out, v); - while( resG.gw.valid(out) && !(resG.resCap(out)>0) ) { resG.gw.next(out); } - if (!resG.gw.valid(out)) { - out_or_in=0; - resG.gw.first(in, v); - while( resG.gw.valid(in) && !(resG.resCap(in)>0) ) { resG.gw.next(in); } - } - } -// public: -// OutEdgeIt& operator++() { -// if (out_or_in) { -// Node v=/*resG->*/G->aNode(out); -// ++out; -// while( out.valid() && !(Edge::resCap()>0) ) { ++out; } -// if (!out.valid()) { -// out_or_in=0; -// G->first(in, v); -// while( in.valid() && !(Edge::resCap()>0) ) { ++in; } -// } -// } else { -// ++in; -// while( in.valid() && !(Edge::resCap()>0) ) { ++in; } -// } -// return *this; -// } - }; - - //FIXME This is just for having InEdgeIt - typedef void InEdgeIt; - - class EdgeIt : public Edge { - friend class ResGraphWrapper; - NodeIt v; - public: - EdgeIt() { } - //EdgeIt(const EdgeIt& e) : Edge(e), v(e.v) { } - EdgeIt(const Invalid& i) : Edge(i) { } - EdgeIt(const ResGraphWrapper& resG) : Edge() { - resG.gw.first(v); - if (resG.gw.valid(v)) resG.gw.first(out, v); else out=INVALID; - while (resG.gw.valid(out) && !(resG.resCap(out)>0) ) { resG.gw.next(out); } - while (resG.gw.valid(v) && !resG.gw.valid(out)) { - resG.gw.next(v); - if (resG.gw.valid(v)) resG.gw.first(out, v); - while (resG.gw.valid(out) && !(resG.resCap(out)>0) ) { resG.gw.next(out); } - } - if (!resG.gw.valid(out)) { - out_or_in=0; - resG.gw.first(v); - if (resG.gw.valid(v)) resG.gw.first(in, v); else in=INVALID; - while (resG.gw.valid(in) && !(resG.resCap(in)>0) ) { resG.gw.next(in); } - while (resG.gw.valid(v) && !resG.gw.valid(in)) { - resG.gw.next(v); - if (resG.gw.valid(v)) resG.gw.first(in, v); - while (resG.gw.valid(in) && !(resG.resCap(in)>0) ) { resG.gw.next(in); } - } - } - } -// EdgeIt& operator++() { -// if (out_or_in) { -// ++out; -// while (out.valid() && !(Edge::resCap()>0) ) { ++out; } -// while (v.valid() && !out.valid()) { -// ++v; -// if (v.valid()) G->first(out, v); -// while (out.valid() && !(Edge::resCap()>0) ) { ++out; } -// } -// if (!out.valid()) { -// out_or_in=0; -// G->first(v); -// if (v.valid()) G->first(in, v); else in=OldInEdgeIt(); -// while (in.valid() && !(Edge::resCap()>0) ) { ++in; } -// while (v.valid() && !in.valid()) { -// ++v; -// if (v.valid()) G->first(in, v); -// while (in.valid() && !(Edge::resCap()>0) ) { ++in; } -// } -// } -// } else { -// ++in; -// while (in.valid() && !(Edge::resCap()>0) ) { ++in; } -// while (v.valid() && !in.valid()) { -// ++v; -// if (v.valid()) G->first(in, v); -// while (in.valid() && !(Edge::resCap()>0) ) { ++in; } -// } -// } -// return *this; -// } - }; - - NodeIt& first(NodeIt& v) const { gw.first(v); return v; } - OutEdgeIt& first(OutEdgeIt& e, Node v) const { - e=OutEdgeIt(*this, v); - return e; - } - EdgeIt& first(EdgeIt& e) const { - e=EdgeIt(*this); - return e; - } - - NodeIt& next(NodeIt& n) const { return gw.next(n); } - - OutEdgeIt& next(OutEdgeIt& e) const { - if (e.out_or_in) { - Node v=gw.aNode(e.out); - gw.next(e.out); - while( gw.valid(e.out) && !(resCap(e.out)>0) ) { gw.next(e.out); } - if (!gw.valid(e.out)) { - e.out_or_in=0; - gw.first(e.in, v); - while( gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); } - } - } else { - gw.next(e.in); - while( gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); } - } - return e; - } - - EdgeIt& next(EdgeIt& e) const { - if (e.out_or_in) { - gw.next(e.out); - while (gw.valid(e.out) && !(resCap(e.out)>0) ) { gw.next(e.out); } - while (gw.valid(e.v) && !gw.valid(e.out)) { - gw.next(e.v); - if (gw.valid(e.v)) gw.first(e.out, e.v); - while (gw.valid(e.out) && !(resCap(e.out)>0) ) { gw.next(e.out); } - } - if (!gw.valid(e.out)) { - e.out_or_in=0; - gw.first(e.v); - if (gw.valid(e.v)) gw.first(e.in, e.v); else e.in=INVALID; - while (gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); } - while (gw.valid(e.v) && !gw.valid(e.in)) { - gw.next(e.v); - if (gw.valid(e.v)) gw.first(e.in, e.v); - while (gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); } - } - } - } else { - gw.next(e.in); - while (gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); } - while (gw.valid(e.v) && !gw.valid(e.in)) { - gw.next(e.v); - if (gw.valid(e.v)) gw.first(e.in, e.v); - while (gw.valid(e.in) && !(resCap(e.in)>0) ) { gw.next(e.in); } - } - } - return e; - } - - - template< typename It > - It first() const { - It e; - first(e); - return e; - } - - template< typename It > - It first(Node v) const { - It e; - first(e, v); - return e; - } - - Node source(Edge e) const { - return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); } - Node target(Edge e) const { - return ((e.out_or_in) ? gw.bNode(e.out) : gw.bNode(e.in)); } - - Node aNode(OutEdgeIt e) const { - return ((e.out_or_in) ? gw.aNode(e.out) : gw.aNode(e.in)); } - Node bNode(OutEdgeIt e) const { - return ((e.out_or_in) ? gw.bNode(e.out) : gw.bNode(e.in)); } - - int nodeNum() const { return gw.nodeNum(); } - //FIXME - //int edgeNum() const { return gw.edgeNum(); } - - - int id(Node v) const { return gw.id(v); } - - bool valid(Node n) const { return gw.valid(n); } - bool valid(Edge e) const { - return e.out_or_in ? gw.valid(e.out) : gw.valid(e.in); } - - void augment(const Edge& e, Number a) const { - if (e.out_or_in) - flow->set(e.out, flow->get(e.out)+a); - else - flow->set(e.in, flow->get(e.in)-a); - } - - Number resCap(const Edge& e) const { - if (e.out_or_in) - return (capacity->get(e.out)-flow->get(e.out)); - else - return (flow->get(e.in)); - } - - Number resCap(OldOutEdgeIt out) const { - return (capacity->get(out)-flow->get(out)); - } - - Number resCap(OldInEdgeIt in) const { - return (flow->get(in)); - } - -// template class NodeMap : public GraphWrapper::NodeMap { -// public: -// NodeMap(const ResGraphWrapper& _G) -// : GraphWrapper::NodeMap(_G.gw) { } -// NodeMap(const ResGraphWrapper& _G, -// T a) : GraphWrapper::NodeMap(_G.gw, a) { } -// }; - -// template -// class NodeMap { -// typename Graph::NodeMap node_map; -// public: -// NodeMap(const ResGraphWrapper& _G) : node_map(*(_G.graph)) { } -// NodeMap(const ResGraphWrapper& _G, T a) : node_map(*(_G.graph), a) { } -// void set(Node nit, T a) { node_map.set(nit, a); } -// T get(Node nit) const { return node_map.get(nit); } -// }; - - template - class EdgeMap { - typename GraphWrapper::EdgeMap forward_map, backward_map; - public: - EdgeMap(const ResGraphWrapper& _G) : forward_map(_G.gw), backward_map(_G.gw) { } - EdgeMap(const ResGraphWrapper& _G, T a) : forward_map(_G.gw, a), backward_map(_G.gw, a) { } - void set(Edge e, T a) { - if (e.out_or_in) - forward_map.set(e.out, a); - else - backward_map.set(e.in, a); - } - T get(Edge e) { - if (e.out_or_in) - return forward_map.get(e.out); - else - return backward_map.get(e.in); - } - }; - }; - - //Subgraph on the same node-set and partial edge-set - template - class ErasingFirstGraphWrapper : public GraphWrapper { - protected: - FirstOutEdgesMap* first_out_edges; - public: - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - typedef typename GraphWrapper::Edge Edge; - typedef typename GraphWrapper::EdgeIt EdgeIt; - typedef typename GraphWrapper::InEdgeIt InEdgeIt; - typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; - - ErasingFirstGraphWrapper(GraphWrapper _gw, FirstOutEdgesMap& _first_out_edges) : - GraphWrapper(_gw), first_out_edges(&_first_out_edges) { } - - template I& first(I& i) const { - gw.first(i); - //while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } - return i; - } - OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { - e=first_out_edges->get(n); - return e; - } - template I& first(I& i, const P& p) const { - gw.first(i, p); - //while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } - return i; - } - - //template I getNext(const I& i) const { - // return gw.getNext(i); - //} - template I& next(I &i) const { - gw.next(i); - //while (gw.valid(i) && !filter_map->get(i)) { gw.next(i); } - return i; - } - - template< typename It > It first() const { - It e; this->first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; this->first(e, v); return e; } - - void erase(const OutEdgeIt& e) const { - OutEdgeIt f=e; - this->next(f); - first_out_edges->set(this->source(e), f); - } - }; - -// template -// class ErasingResGraphWrapper : public ResGraphWrapper { -// protected: -// ResGraphWrapper::NodeMap::OutEdgeIt> first_out_edges; -// //ResGraphWrapper::NodeMap dist; -// public: -// ErasingResGraphWrapper(const Graph& _G, FlowMap& _flow, -// const CapacityMap& _capacity) : -// ResGraphWrapper(_G, _flow, _capacity), -// first_out_edges(*this) /*, dist(*this)*/ { -// for(NodeIt n=this->template first(); this->valid(n); this->next(n)) { -// OutEdgeIt e; -// ResGraphWrapper::first(e, n); -// first_out_edges.set(n, e); -// } -// } - -// //void setGraph(Graph& _graph) { graph = &_graph; } -// //Graph& getGraph() const { return (*graph); } - -// //TrivGraphWrapper() : graph(0) { } -// //ErasingResGraphWrapper(Graph& _graph) : graph(&_graph) { } - -// //typedef Graph BaseGraph; - -// //typedef typename Graph::Node Node; -// //typedef typename Graph::NodeIt NodeIt; - -// //typedef typename Graph::Edge Edge; -// //typedef typename Graph::OutEdgeIt OutEdgeIt; -// //typedef typename Graph::InEdgeIt InEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// //typedef typename Graph::EdgeIt EdgeIt; - -// typedef typename ResGraphWrapper::Node Node; -// typedef typename ResGraphWrapper::NodeIt NodeIt; - -// typedef typename ResGraphWrapper::Edge Edge; -// typedef typename ResGraphWrapper::OutEdgeIt OutEdgeIt; -// //typedef typename ResGraphWrapper::InEdgeIt InEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// //typedef typename ResGraphWrapper::EdgeIt EdgeIt; - -// NodeIt& first(NodeIt& n) const { -// return ResGraphWrapper::first(n); -// } - -// OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { -// e=first_out_edges.get(n); -// return e; -// } - -// //ROSSZ template I& first(I& i) const { return first(i); } -// //ROSSZ template I& first(I& i, const P& p) const { -// // return first(i, p); } - -// //template I getNext(const I& i) const { -// // return gw.getNext(i); } -// //template I& next(I &i) const { return gw.next(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(const Node& v) const { -// It e; first(e, v); return e; } - -// //Node target(const Edge& e) const { return gw.target(e); } -// //Node source(const Edge& e) const { return gw.source(e); } - -// //template bool valid(const I& i) const -// // { return gw.valid(i); } - -// //int nodeNum() const { return gw.nodeNum(); } -// //int edgeNum() const { return gw.edgeNum(); } - -// //template Node aNode(const I& e) const { -// // return gw.aNode(e); } -// //template Node bNode(const I& e) const { -// // return gw.bNode(e); } - -// //Node addNode() const { return gw.addNode(); } -// //Edge addEdge(const Node& source, const Node& target) const { -// // return gw.addEdge(source, target); } - -// //void erase(const OutEdgeIt& e) { -// // first_out_edge(this->source(e))=e; -// //} -// void erase(const Edge& e) { -// OutEdgeIt f(e); -// next(f); -// first_out_edges.set(this->source(e), f); -// } -// //template void erase(const I& i) const { gw.erase(i); } - -// //void clear() const { gw.clear(); } - -// template class NodeMap : public ResGraphWrapper::NodeMap { -// public: -// NodeMap(const ErasingResGraphWrapper& _G) : -// ResGraphWrapper::NodeMap(_G /*_G.getGraph()*/) { } -// NodeMap(const ErasingResGraphWrapper& _G, T a) : -// ResGraphWrapper::NodeMap(_G /*_G.getGraph()*/, a) { } -// }; - -// template class EdgeMap : public ResGraphWrapper::EdgeMap { -// public: -// EdgeMap(const ErasingResGraphWrapper& _G) : -// ResGraphWrapper::EdgeMap(_G /*_G.getGraph()*/) { } -// EdgeMap(const ErasingResGraphWrapper& _G, T a) : -// ResGraphWrapper::EdgeMap(_G /*_G.getGraph()*/, a) { } -// }; -// }; - -// template -// class FilterGraphWrapper { -// }; - -// template -// class FilterGraphWrapper > : public ErasingResGraphWrapper { - -// //Graph* graph; - -// public: -// //typedef Graph BaseGraph; - -// typedef typename ErasingResGraphWrapper::Node Node; -// typedef typename ErasingResGraphWrapper::NodeIt NodeIt; - -// typedef typename ErasingResGraphWrapper::Edge Edge; -// typedef typename ErasingResGraphWrapper::OutEdgeIt OutEdgeIt; -// //typedef typename ErasingResGraphWrapper::InEdgeIt InEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// typedef typename ErasingResGraphWrapper::EdgeIt EdgeIt; - -// //FilterGraphWrapper::NodeMap::OutEdgeIt> first_out_edges; - -// public: -// FilterGraphWrapper(const Graph& _G, FlowMap& _flow, -// const CapacityMap& _capacity) : -// ErasingResGraphWrapper(_G, _flow, _capacity), dist(*this, gw.nodeNum()) { -// } - -// OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { -// ErasingResGraphWrapper::first(e, n); -// while (valid(e) && (dist.get(source(e))/*+1!=*/>=dist.get(target(e)))) -// ErasingResGraphWrapper::next(e); -// return e; -// } - -// NodeIt& next(NodeIt& e) const { -// return ErasingResGraphWrapper::next(e); -// } - -// OutEdgeIt& next(OutEdgeIt& e) const { -// ErasingResGraphWrapper::next(e); -// while (valid(e) && (dist.get(source(e))/*+1!*/>=dist.get(target(e)))) -// ErasingResGraphWrapper::next(e); -// return e; -// } - -// NodeIt& first(NodeIt& n) const { -// return ErasingResGraphWrapper::first(n); -// } - -// void erase(const Edge& e) { -// OutEdgeIt f(e); -// ErasingResGraphWrapper::next(f); -// while (valid(f) && (dist.get(source(f))/*+1!=*/>=dist.get(target(f)))) -// ErasingResGraphWrapper::next(f); -// first_out_edges.set(this->source(e), f); -// } - -// //TrivGraphWrapper() : graph(0) { } -// //TrivGraphWrapper(Graph& _graph) : graph(&_graph) { } - -// //void setGraph(Graph& _graph) { graph = &_graph; } -// //Graph& getGraph() const { return (*graph); } - -// //template I& first(I& i) const { return gw.first(i); } -// //template I& first(I& i, const P& p) const { -// // return gw.first(i, p); } - -// //template I getNext(const I& i) const { -// // return gw.getNext(i); } -// //template I& next(I &i) const { return gw.next(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(const Node& v) const { -// It e; first(e, v); return e; } - -// //Node target(const Edge& e) const { return gw.target(e); } -// //Node source(const Edge& e) const { return gw.source(e); } - -// //template bool valid(const I& i) const -// // { return gw.valid(i); } - -// //template void setInvalid(const I &i); -// //{ return gw.setInvalid(i); } - -// //int nodeNum() const { return gw.nodeNum(); } -// //int edgeNum() const { return gw.edgeNum(); } - -// //template Node aNode(const I& e) const { -// // return gw.aNode(e); } -// //template Node bNode(const I& e) const { -// // return gw.bNode(e); } - -// //Node addNode() const { return gw.addNode(); } -// //Edge addEdge(const Node& source, const Node& target) const { -// // return gw.addEdge(source, target); } - -// //template void erase(const I& i) const { gw.erase(i); } - -// //void clear() const { gw.clear(); } - -// template class NodeMap : public ErasingResGraphWrapper::NodeMap { -// public: -// NodeMap(const FilterGraphWrapper >& _G) : -// ErasingResGraphWrapper::NodeMap(_G /*_G.getGraph()*/) { } -// NodeMap(const FilterGraphWrapper >& _G, T a) : -// ErasingResGraphWrapper::NodeMap(_G /*_G.getGraph()*/, a) { } -// }; - -// template class EdgeMap : public ErasingResGraphWrapper::EdgeMap { -// public: -// EdgeMap(const FilterGraphWrapper >& _G) : -// ErasingResGraphWrapper::EdgeMap(_G /*_G.getGraph()*/) { } -// EdgeMap(const FilterGraphWrapper >& _G, T a) : -// ErasingResGraphWrapper::EdgeMap(_G /*_G.getGraph()*/, a) { } -// }; - -// public: -// ErasingResGraphWrapper::NodeMap dist; - -// }; - - - -// // FIXME: comparison should be made better!!! -// template -// class ResGraphWrapper -// { -// Graph* graph; - -// public: -// typedef Graph BaseGraph; - -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; - -// typedef typename Graph::NodeIt NodeIt; - -// class OutEdgeIt { -// public: -// //Graph::Node n; -// bool out_or_in; -// typename Graph::OutEdgeIt o; -// typename Graph::InEdgeIt i; -// }; -// class InEdgeIt { -// public: -// //Graph::Node n; -// bool out_or_in; -// typename Graph::OutEdgeIt o; -// typename Graph::InEdgeIt i; -// }; -// typedef typename Graph::SymEdgeIt SymEdgeIt; -// typedef typename Graph::EdgeIt EdgeIt; - -// int nodeNum() const { return gw.nodeNum(); } -// int edgeNum() const { return gw.edgeNum(); } - -// Node& first(Node& n) const { return gw.first(n); } - -// // Edge and SymEdge is missing!!!! -// // Edge <-> In/OutEdgeIt conversion is missing!!!! - -// //FIXME -// OutEdgeIt& first(OutEdgeIt& e, const Node& n) const -// { -// e.n=n; -// gw.first(e.o,n); -// while(gw.valid(e.o) && fmap.get(e.o)>=himap.get(e.o)) -// gw.goNext(e.o); -// if(!gw.valid(e.o)) { -// gw.first(e.i,n); -// while(gw.valid(e.i) && fmap.get(e.i)<=lomap.get(e.i)) -// gw.goNext(e.i); -// } -// return e; -// } -// /* -// OutEdgeIt &goNext(OutEdgeIt &e) -// { -// if(gw.valid(e.o)) { -// while(gw.valid(e.o) && fmap.get(e.o)>=himap.get(e.o)) -// gw.goNext(e.o); -// if(gw.valid(e.o)) return e; -// else gw.first(e.i,e.n); -// } -// else { -// while(gw.valid(e.i) && fmap.get(e.i)<=lomap.get(e.i)) -// gw.goNext(e.i); -// return e; -// } -// } -// OutEdgeIt Next(const OutEdgeIt &e) {OutEdgeIt t(e); return goNext(t);} -// */ -// //bool valid(const OutEdgeIt e) { return gw.valid(e.o)||gw.valid(e.i);} - -// //FIXME -// InEdgeIt& first(InEdgeIt& e, const Node& n) const -// { -// e.n=n; -// gw.first(e.i,n); -// while(gw.valid(e.i) && fmap.get(e.i)>=himap.get(e.i)) -// gw.goNext(e.i); -// if(!gw.valid(e.i)) { -// gw.first(e.o,n); -// while(gw.valid(e.o) && fmap.get(e.o)<=lomap.get(e.o)) -// gw.goNext(e.o); -// } -// return e; -// } -// /* -// InEdgeIt &goNext(InEdgeIt &e) -// { -// if(gw.valid(e.i)) { -// while(gw.valid(e.i) && fmap.get(e.i)>=himap.get(e.i)) -// gw.goNext(e.i); -// if(gw.valid(e.i)) return e; -// else gw.first(e.o,e.n); -// } -// else { -// while(gw.valid(e.o) && fmap.get(e.o)<=lomap.get(e.o)) -// gw.goNext(e.o); -// return e; -// } -// } -// InEdgeIt Next(const InEdgeIt &e) {InEdgeIt t(e); return goNext(t);} -// */ -// //bool valid(const InEdgeIt e) { return gw.valid(e.i)||gw.valid(e.o);} - -// //template I &goNext(I &i); { return gw.goNext(i); } -// //template I next(const I i); { return gw.goNext(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(Node v) const { -// It e; first(e, v); return e; } - -// Node target(const Edge& e) const { return gw.target(e); } -// Node source(const Edge& e) const { return gw.source(e); } - -// template Node aNode(const I& e) const { -// return gw.aNode(e); } -// template Node bNode(const I& e) const { -// return gw.bNode(e); } - -// //template bool valid(const I i); -// //{ return gw.valid(i); } - -// //template void setInvalid(const I &i); -// //{ return gw.setInvalid(i); } - -// Node addNode() { return gw.addNode(); } -// Edge addEdge(const Node& source, const Node& target) { -// return gw.addEdge(source, target); } - -// template void erase(const I& i) { gw.erase(i); } - -// void clear() { gw.clear(); } - -// template class NodeMap : public Graph::NodeMap { }; -// template class EdgeMap : public Graph::EdgeMap { }; - -// void setGraph(Graph& _graph) { graph = &_graph; } -// Graph& getGraph() { return (*graph); } - -// //ResGraphWrapper() : graph(0) { } -// ResGraphWrapper(Graph& _graph) : graph(&_graph) { } -// }; - -} //namespace lemon - -#endif //LEMON_GRAPH_WRAPPER_H - diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/graph_wrapper_1.h --- a/src/work/marci/experiment/graph_wrapper_1.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1348 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_GRAPH_WRAPPER_H -#define LEMON_GRAPH_WRAPPER_H - -#include - -namespace lemon { - - template - class TrivGraphWrapper { - protected: - Graph* graph; - - public: - typedef Graph BaseGraph; - -// TrivGraphWrapper() : graph(0) { } - TrivGraphWrapper(Graph& _graph) : graph(&_graph) { } -// void setGraph(Graph& _graph) { graph = &_graph; } -// Graph& getGraph() const { return *graph; } - - typedef typename Graph::Node Node; - class NodeIt : public Graph::NodeIt { - public: - NodeIt() { } - NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { } - NodeIt(const Invalid& i) : Graph::NodeIt(i) { } - NodeIt(const TrivGraphWrapper& _G) : - Graph::NodeIt(*(_G.graph)) { } - }; - typedef typename Graph::Edge Edge; - class OutEdgeIt : public Graph::OutEdgeIt { - public: - OutEdgeIt() { } - OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { } - OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { } - OutEdgeIt(const TrivGraphWrapper& _G, const Node& n) : - Graph::OutEdgeIt(*(_G.graph), n) { } - }; - class InEdgeIt : public Graph::InEdgeIt { - public: - InEdgeIt() { } - InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { } - InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { } - InEdgeIt(const TrivGraphWrapper& _G, const Node& n) : - Graph::InEdgeIt(*(_G.graph), n) { } - }; - //typedef typename Graph::SymEdgeIt SymEdgeIt; - class EdgeIt : public Graph::EdgeIt { - public: - EdgeIt() { } - EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { } - EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { } - EdgeIt(const TrivGraphWrapper& _G) : - Graph::EdgeIt(*(_G.graph)) { } - }; - - NodeIt& first(NodeIt& i) const { - i=NodeIt(*this); - return i; - } - EdgeIt& first(EdgeIt& i) const { - i=EdgeIt(*this); - return i; - } -// template I& first(I& i) const { -// i=I(*this); -// return i; -// } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); - return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); - return i; - } -// template I& first(I& i, const P& p) const { -// i=I(*this, p); -// return i; -// } - -// template I getNext(const I& i) const { -// return graph->getNext(i); } - template I& next(I &i) const { graph->next(i); return i; } - - template< typename It > It first() const { - It e; this->first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; this->first(e, v); return e; } - - Node target(const Edge& e) const { return graph->target(e); } - Node source(const Edge& e) const { return graph->source(e); } - - template bool valid(const I& i) const { - return graph->valid(i); } - - //template void setInvalid(const I &i); - //{ return graph->setInvalid(i); } - - int nodeNum() const { return graph->nodeNum(); } - int edgeNum() const { return graph->edgeNum(); } - - template Node aNode(const I& e) const { - return graph->aNode(e); } - template Node bNode(const I& e) const { - return graph->bNode(e); } - - Node addNode() const { return graph->addNode(); } - Edge addEdge(const Node& source, const Node& target) const { - return graph->addEdge(source, target); } - - template void erase(const I& i) const { graph->erase(i); } - - void clear() const { graph->clear(); } - - template class NodeMap : public Graph::NodeMap { - public: - NodeMap(const TrivGraphWrapper& _G) : - Graph::NodeMap(*(_G.graph)) { } - NodeMap(const TrivGraphWrapper& _G, T a) : - Graph::NodeMap(*(_G.graph), a) { } - }; - - template class EdgeMap : public Graph::EdgeMap { - public: - EdgeMap(const TrivGraphWrapper& _G) : - Graph::EdgeMap(*(_G.graph)) { } - EdgeMap(const TrivGraphWrapper& _G, T a) : - Graph::EdgeMap(*(_G.graph), a) { } - }; - - template class NodeMapWrapper { - protected: - Map* map; - public: - NodeMapWrapper(Map& _map) : map(&_map) { } - void set(Node n, T a) { map->set(n, a); } - T get(Node n) const { return map->get(n); } - }; - - template class EdgeMapWrapper { - protected: - Map* map; - public: - EdgeMapWrapper(Map& _map) : map(&_map) { } - void set(Edge n, T a) { map->set(n, a); } - T get(Edge n) const { return map->get(n); } - }; - }; - - - template - class GraphWrapper { - protected: - Graph* graph; - - public: - typedef Graph BaseGraph; - -// GraphWrapper() : graph(0) { } - GraphWrapper(Graph& _graph) : graph(&_graph) { } -// void setGraph(Graph& _graph) { graph=&_graph; } -// Graph& getGraph() const { return *graph; } - - typedef typename Graph::Node Node; - class NodeIt : public Graph::NodeIt { - public: - NodeIt() { } - NodeIt(const typename Graph::NodeIt& n) : Graph::NodeIt(n) { } - NodeIt(const Invalid& i) : Graph::NodeIt(i) { } - NodeIt(const GraphWrapper& _G) : - Graph::NodeIt(*(_G.graph)) { } - }; - typedef typename Graph::Edge Edge; - class OutEdgeIt : public Graph::OutEdgeIt { - public: - OutEdgeIt() { } - OutEdgeIt(const typename Graph::OutEdgeIt& e) : Graph::OutEdgeIt(e) { } - OutEdgeIt(const Invalid& i) : Graph::OutEdgeIt(i) { } - OutEdgeIt(const GraphWrapper& _G, const Node& n) : - Graph::OutEdgeIt(*(_G.graph), n) { } - }; - class InEdgeIt : public Graph::InEdgeIt { - public: - InEdgeIt() { } - InEdgeIt(const typename Graph::InEdgeIt& e) : Graph::InEdgeIt(e) { } - InEdgeIt(const Invalid& i) : Graph::InEdgeIt(i) { } - InEdgeIt(const GraphWrapper& _G, const Node& n) : - Graph::InEdgeIt(*(_G.graph), n) { } - }; - //typedef typename Graph::SymEdgeIt SymEdgeIt; - class EdgeIt : public Graph::EdgeIt { - public: - EdgeIt() { } - EdgeIt(const typename Graph::EdgeIt& e) : Graph::EdgeIt(e) { } - EdgeIt(const Invalid& i) : Graph::EdgeIt(i) { } - EdgeIt(const GraphWrapper& _G) : - Graph::EdgeIt(*(_G.graph)) { } - }; - - NodeIt& first(NodeIt& i) const { - i=NodeIt(*this); - return i; - } - EdgeIt& first(EdgeIt& i) const { - i=EdgeIt(*this); - return i; - } -// template I& first(I& i) const { -// i=I(*this); -// return i; -// } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); - return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); - return i; - } -// template I& first(I& i, const P& p) const { -// i=I(*this, p); -// return i; -// } - -// template I getNext(const I& i) const { -// return gw.getNext(i); } - template I& next(I &i) const { graph->next(i); return i; } - - template< typename It > It first() const { - It e; this->first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; this->first(e, v); return e; } - - Node target(const Edge& e) const { return graph->target(e); } - Node source(const Edge& e) const { return graph->source(e); } - - template bool valid(const I& i) const { - return graph->valid(i); } - - //template void setInvalid(const I &i); - //{ return graph->setInvalid(i); } - - int nodeNum() const { return graph->nodeNum(); } - int edgeNum() const { return graph->edgeNum(); } - - template Node aNode(const I& e) const { - return graph->aNode(e); } - template Node bNode(const I& e) const { - return graph->bNode(e); } - - Node addNode() const { return graph->addNode(); } - Edge addEdge(const Node& source, const Node& target) const { - return graph->addEdge(source, target); } - - template void erase(const I& i) const { graph->erase(i); } - - void clear() const { graph->clear(); } - - template class NodeMap : public Graph::NodeMap { - public: - NodeMap(const GraphWrapper& _G) : - Graph::NodeMap(*(_G.graph)) { } - NodeMap(const GraphWrapper& _G, T a) : - Graph::NodeMap(*(_G.graph), a) { } - }; - - template class EdgeMap : public Graph::EdgeMap { - public: - EdgeMap(const GraphWrapper& _G) : - Graph::EdgeMap(*(_G.graph)) { } - EdgeMap(const GraphWrapper& _G, T a) : - Graph::EdgeMap(*(_G.graph), a) { } - }; - }; - - -// template -// class RevGraphWrapper -// { -// protected: -// Graph* graph; - -// public: -// typedef Graph BaseGraph; - -// typedef typename Graph::Node Node; -// typedef typename Graph::NodeIt NodeIt; - -// typedef typename Graph::Edge Edge; -// typedef typename Graph::OutEdgeIt InEdgeIt; -// typedef typename Graph::InEdgeIt OutEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// typedef typename Graph::EdgeIt EdgeIt; - -// //RevGraphWrapper() : graph(0) { } -// RevGraphWrapper(Graph& _graph) : graph(&_graph) { } - -// void setGraph(Graph& _graph) { graph = &_graph; } -// Graph& getGraph() const { return (*graph); } - -// template I& first(I& i) const { return graph->first(i); } -// template I& first(I& i, const P& p) const { -// return graph->first(i, p); } - -// template I getNext(const I& i) const { -// return graph->getNext(i); } -// template I& next(I &i) const { return graph->next(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(const Node& v) const { -// It e; first(e, v); return e; } - -// Node target(const Edge& e) const { return graph->source(e); } -// Node source(const Edge& e) const { return graph->target(e); } - -// template bool valid(const I& i) const -// { return graph->valid(i); } - -// //template void setInvalid(const I &i); -// //{ return graph->setInvalid(i); } - -// template Node aNode(const I& e) const { -// return graph->aNode(e); } -// template Node bNode(const I& e) const { -// return graph->bNode(e); } - -// Node addNode() const { return graph->addNode(); } -// Edge addEdge(const Node& source, const Node& target) const { -// return graph->addEdge(source, target); } - -// int nodeNum() const { return graph->nodeNum(); } -// int edgeNum() const { return graph->edgeNum(); } - -// template void erase(const I& i) const { graph->erase(i); } - -// void clear() const { graph->clear(); } - -// template class NodeMap : public Graph::NodeMap { -// public: -// NodeMap(const RevGraphWrapper& _G) : -// Graph::NodeMap(_G.getGraph()) { } -// NodeMap(const RevGraphWrapper& _G, T a) : -// Graph::NodeMap(_G.getGraph(), a) { } -// }; - -// template class EdgeMap : public Graph::EdgeMap { -// public: -// EdgeMap(const RevGraphWrapper& _G) : -// Graph::EdgeMap(_G.getGraph()) { } -// EdgeMap(const RevGraphWrapper& _G, T a) : -// Graph::EdgeMap(_G.getGraph(), a) { } -// }; -// }; - - - template - class RevGraphWrapper : public GraphWrapper { - public: - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::Edge Edge; - //FIXME - //If Graph::OutEdgeIt is not defined - //and we do not want to use RevGraphWrapper::InEdgeIt, - //this won't work, because of typedef - //OR - //graphs have to define their non-existing iterators to void - //Unfortunately all the typedefs are instantiated in templates, - //unlike other stuff - typedef typename GraphWrapper::OutEdgeIt InEdgeIt; - typedef typename GraphWrapper::InEdgeIt OutEdgeIt; - -// RevGraphWrapper() : GraphWrapper() { } - RevGraphWrapper(Graph& _graph) : GraphWrapper(_graph) { } - - Node target(const Edge& e) const - { return GraphWrapper::source(e); } - Node source(const Edge& e) const - { return GraphWrapper::target(e); } - }; - - //Subgraph on the same node-set and partial edge-set - template - class SubGraphWrapper : public GraphWrapper { - protected: - EdgeFilterMap* filter_map; - public: - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - typedef typename GraphWrapper::Edge Edge; - typedef typename GraphWrapper::EdgeIt EdgeIt; - typedef typename GraphWrapper::InEdgeIt InEdgeIt; - typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; - -// SubGraphWrapper() : GraphWrapper(), filter_map(0) { } - SubGraphWrapper(Graph& _graph, EdgeFilterMap& _filter_map) : - GraphWrapper(_graph), filter_map(&_filter_map) { } - - template I& first(I& i) const { - graph->first(i); - while (graph->valid(i) && !filter_map->get(i)) { graph->next(i); } - return i; - } - template I& first(I& i, const P& p) const { - graph->first(i, p); - while (graph->valid(i) && !filter_map->get(i)) { graph->next(i); } - return i; - } - - //template I getNext(const I& i) const { - // return gw.getNext(i); - //} - template I& next(I &i) const { - graph->next(i); - while (graph->valid(i) && !filter_map->get(i)) { graph->next(i); } - return i; - } - - template< typename It > It first() const { - It e; this->first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; this->first(e, v); return e; } - }; - -// template -// class UndirGraphWrapper { -// protected: -// //Graph* graph; -// GraphWrapper gw; - -// public: -// typedef GraphWrapper BaseGraph; - -// typedef typename GraphWrapper::Node Node; -// typedef typename GraphWrapper::NodeIt NodeIt; - -// //typedef typename Graph::Edge Edge; -// //typedef typename Graph::OutEdgeIt OutEdgeIt; -// //typedef typename Graph::InEdgeIt InEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// //typedef typename Graph::EdgeIt EdgeIt; - -// //private: -// typedef typename GraphWrapper::Edge GraphEdge; -// typedef typename GraphWrapper::OutEdgeIt GraphOutEdgeIt; -// typedef typename GraphWrapper::InEdgeIt GraphInEdgeIt; -// //public: - -// //UndirGraphWrapper() : graph(0) { } -// UndirGraphWrapper(GraphWrapper _gw) : gw(_gw) { } - -// //void setGraph(Graph& _graph) { graph = &_graph; } -// //Graph& getGraph() const { return (*graph); } - -// class Edge { -// friend class UndirGraphWrapper; -// bool out_or_in; //true iff out -// GraphOutEdgeIt out; -// GraphInEdgeIt in; -// public: -// Edge() : out_or_in(), out(), in() { } -// Edge(const Invalid& i) : out_or_in(false), out(), in(i) { } -// operator GraphEdge() const { -// if (out_or_in) return(out); else return(in); -// } -// friend bool operator==(const Edge& u, const Edge& v) { -// if (v.out_or_in) -// return (u.out_or_in && u.out==v.out); -// else -// return (!u.out_or_in && u.in==v.in); -// } -// friend bool operator!=(const Edge& u, const Edge& v) { -// if (v.out_or_in) -// return (!u.out_or_in || u.out!=v.out); -// else -// return (u.out_or_in || u.in!=v.in); -// } -// }; - -// class OutEdgeIt : public Edge { -// friend class UndirGraphWrapper; -// public: -// OutEdgeIt() : Edge() { } -// OutEdgeIt(const Invalid& i) : Edge(i) { } -// OutEdgeIt(const UndirGraphWrapper& _G, const Node& n) -// : Edge() { -// out_or_in=true; -// _G.gw.first(out, n); -// if (!(_G.gw.valid(out))) { -// out_or_in=false; -// _G.gw.first(in, n); -// } -// } -// }; - -// OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { -// e.out_or_in=true; -// gw.first(e.out, n); -// if (!(gw.valid(e.out))) { -// e.out_or_in=false; -// gw.first(e.in, n); -// } -// return e; -// } - -// OutEdgeIt& next(OutEdgeIt& e) const { -// if (e.out_or_in) { -// Node n=gw.source(e.out); -// gw.next(e.out); -// if (!gw.valid(e.out)) { -// e.out_or_in=false; -// gw.first(e.in, n); -// } -// } else { -// gw.next(e.in); -// } -// return e; -// } - -// Node aNode(const OutEdgeIt& e) const { -// if (e.out_or_in) return gw.source(e); else return gw.target(e); } -// Node bNode(const OutEdgeIt& e) const { -// if (e.out_or_in) return gw.target(e); else return gw.source(e); } - -// typedef OutEdgeIt InEdgeIt; - -// template I& first(I& i) const { return gw.first(i); } -// // template I& first(I& i, const P& p) const { -// // return graph->first(i, p); } - -// template I getNext(const I& i) const { -// return gw.getNext(i); } -// template I& next(I &i) const { return gw.next(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(const Node& v) const { -// It e; first(e, v); return e; } - -// Node target(const Edge& e) const { return gw.target(e); } -// Node source(const Edge& e) const { return gw.source(e); } - -// template bool valid(const I& i) const -// { return gw.valid(i); } - -// //template void setInvalid(const I &i); -// //{ return graph->setInvalid(i); } - -// int nodeNum() const { return gw.nodeNum(); } -// int edgeNum() const { return gw.edgeNum(); } - -// // template Node aNode(const I& e) const { -// // return graph->aNode(e); } -// // template Node bNode(const I& e) const { -// // return graph->bNode(e); } - -// Node addNode() const { return gw.addNode(); } -// // FIXME: ez igy nem jo, mert nem -// // Edge addEdge(const Node& source, const Node& target) const { -// // return graph->addEdge(source, target); } - -// template void erase(const I& i) const { gw.erase(i); } - -// void clear() const { gw.clear(); } - -// template class NodeMap : public GraphWrapper::NodeMap { -// public: -// NodeMap(const UndirGraphWrapper& _G) : -// GraphWrapper::NodeMap(_G.gw) { } -// NodeMap(const UndirGraphWrapper& _G, T a) : -// GraphWrapper::NodeMap(_G.gw, a) { } -// }; - -// template class EdgeMap : public GraphWrapper::EdgeMap { -// public: -// EdgeMap(const UndirGraphWrapper& _G) : -// GraphWrapper::EdgeMap(_G.gw) { } -// EdgeMap(const UndirGraphWrapper& _G, T a) : -// GraphWrapper::EdgeMap(_G.gw, a) { } -// }; -// }; - - - template - class UndirGraphWrapper : public GraphWrapper { - protected: - typedef typename Graph::Edge GraphEdge; - typedef typename Graph::OutEdgeIt GraphOutEdgeIt; - typedef typename Graph::InEdgeIt GraphInEdgeIt; - public: - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - -// UndirGraphWrapper() : GraphWrapper() { } - UndirGraphWrapper(Graph& _graph) : GraphWrapper(_graph) { } - - class Edge { - friend class UndirGraphWrapper; - protected: - bool out_or_in; //true iff out - GraphOutEdgeIt out; - GraphInEdgeIt in; - public: - Edge() : out_or_in(), out(), in() { } - Edge(const Invalid& i) : out_or_in(false), out(), in(i) { } - operator GraphEdge() const { - if (out_or_in) return(out); else return(in); - } -//FIXME -//2 edges are equal if they "refer" to the same physical edge -//is it good? - friend bool operator==(const Edge& u, const Edge& v) { - if (v.out_or_in) - if (u.out_or_in) return (u.out==v.out); else return (u.out==v.in); - //return (u.out_or_in && u.out==v.out); - else - if (u.out_or_in) return (u.out==v.in); else return (u.in==v.in); - //return (!u.out_or_in && u.in==v.in); - } - friend bool operator!=(const Edge& u, const Edge& v) { - if (v.out_or_in) - if (u.out_or_in) return (u.out!=v.out); else return (u.out!=v.in); - //return (!u.out_or_in || u.out!=v.out); - else - if (u.out_or_in) return (u.out!=v.in); else return (u.in!=v.in); - //return (u.out_or_in || u.in!=v.in); - } - }; - - class OutEdgeIt : public Edge { - friend class UndirGraphWrapper; - public: - OutEdgeIt() : Edge() { } - OutEdgeIt(const Invalid& i) : Edge(i) { } - OutEdgeIt(const UndirGraphWrapper& _G, const Node& n) - : Edge() { - out_or_in=true; _G.graph->first(out, n); - if (!(_G.graph->valid(out))) { out_or_in=false; _G.graph->first(in, n); } - } - }; - - typedef OutEdgeIt InEdgeIt; - - class EdgeIt : public Edge { - friend class UndirGraphWrapper; - protected: - NodeIt v; - public: - EdgeIt() : Edge() { } - EdgeIt(const Invalid& i) : Edge(i) { } - EdgeIt(const UndirGraphWrapper& _G) - : Edge() { - out_or_in=true; - //Node v; - _G.first(v); - if (_G.valid(v)) _G.graph->first(out); else out=INVALID; - while (_G.valid(v) && !_G.graph->valid(out)) { - _G.graph->next(v); - if (_G.valid(v)) _G.graph->first(out); - } - } - }; - - OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { - e.out_or_in=true; graph->first(e.out, n); - if (!(graph->valid(e.out))) { e.out_or_in=false; graph->first(e.in, n); } - return e; - } - - EdgeIt& first(EdgeIt& e) const { - e.out_or_in=true; - //NodeIt v; - first(e.v); - if (valid(e.v)) graph->first(e.out, e.v); else e.out=INVALID; - while (valid(e.v) && !graph->valid(e.out)) { - graph->next(e.v); - if (valid(e.v)) graph->first(e.out, e.v); - } - return e; - } - - template I& first(I& i) const { graph->first(i); return i; } - template I& first(I& i, const P& p) const { - graph->first(i, p); return i; } - - OutEdgeIt& next(OutEdgeIt& e) const { - if (e.out_or_in) { - Node n=graph->source(e.out); - graph->next(e.out); - if (!graph->valid(e.out)) { e.out_or_in=false; graph->first(e.in, n); } - } else { - graph->next(e.in); - } - return e; - } - - EdgeIt& next(EdgeIt& e) const { - //NodeIt v=source(e); - graph->next(e.out); - while (valid(e.v) && !graph->valid(e.out)) { - next(e.v); - if (valid(e.v)) graph->first(e.out, e.v); - } - return e; - } - - template I& next(I &i) const { return graph->next(i); } -// template I getNext(const I& i) const { return gw.getNext(i); } - - template< typename It > It first() const { - It e; this->first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; this->first(e, v); return e; } - -// Node target(const Edge& e) const { return gw.target(e); } -// Node source(const Edge& e) const { return gw.source(e); } - -// template bool valid(const I& i) const -// { return gw.valid(i); } - -// int nodeNum() const { return gw.nodeNum(); } -// int edgeNum() const { return gw.edgeNum(); } - -// template Node aNode(const I& e) const { -// return graph->aNode(e); } -// template Node bNode(const I& e) const { -// return graph->bNode(e); } - - Node aNode(const OutEdgeIt& e) const { - if (e.out_or_in) return graph->source(e); else return graph->target(e); } - Node bNode(const OutEdgeIt& e) const { - if (e.out_or_in) return graph->target(e); else return graph->source(e); } - -// Node addNode() const { return gw.addNode(); } - -// FIXME: ez igy nem jo, mert nem -// Edge addEdge(const Node& source, const Node& target) const { -// return graph->addEdge(source, target); } - -// template void erase(const I& i) const { gw.erase(i); } - -// void clear() const { gw.clear(); } - -// template class NodeMap : public Graph::NodeMap { -// public: -// NodeMap(const UndirGraphWrapper& _G) : -// Graph::NodeMap(_G.gw) { } -// NodeMap(const UndirGraphWrapper& _G, T a) : -// Graph::NodeMap(_G.gw, a) { } -// }; - -// template class EdgeMap : -// public GraphWrapper::EdgeMap { -// public: -// EdgeMap(const UndirGraphWrapper& _G) : -// GraphWrapper::EdgeMap(_G.gw) { } -// EdgeMap(const UndirGraphWrapper& _G, T a) : -// Graph::EdgeMap(_G.gw, a) { } -// }; - }; - - - - - -// template -// class SymGraphWrapper -// { -// Graph* graph; - -// public: -// typedef Graph BaseGraph; - -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; - -// typedef typename Graph::NodeIt NodeIt; - -// //FIXME tag-ekkel megcsinalni, hogy abbol csinaljon -// //iranyitatlant, ami van -// //mert csak 1 dolgot lehet be typedef-elni -// typedef typename Graph::OutEdgeIt SymEdgeIt; -// //typedef typename Graph::InEdgeIt SymEdgeIt; -// //typedef typename Graph::SymEdgeIt SymEdgeIt; -// typedef typename Graph::EdgeIt EdgeIt; - -// int nodeNum() const { return graph->nodeNum(); } -// int edgeNum() const { return graph->edgeNum(); } - -// template I& first(I& i) const { return graph->first(i); } -// template I& first(I& i, const P& p) const { -// return graph->first(i, p); } -// //template I next(const I i); { return graph->goNext(i); } -// //template I &goNext(I &i); { return graph->goNext(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(Node v) const { -// It e; first(e, v); return e; } - -// Node target(const Edge& e) const { return graph->target(e); } -// Node source(const Edge& e) const { return graph->source(e); } - -// template Node aNode(const I& e) const { -// return graph->aNode(e); } -// template Node bNode(const I& e) const { -// return graph->bNode(e); } - -// //template bool valid(const I i); -// //{ return graph->valid(i); } - -// //template void setInvalid(const I &i); -// //{ return graph->setInvalid(i); } - -// Node addNode() { return graph->addNode(); } -// Edge addEdge(const Node& source, const Node& target) { -// return graph->addEdge(source, target); } - -// template void erase(const I& i) { graph->erase(i); } - -// void clear() { graph->clear(); } - -// template class NodeMap : public Graph::NodeMap { }; -// template class EdgeMap : public Graph::EdgeMap { }; - -// void setGraph(Graph& _graph) { graph = &_graph; } -// Graph& getGraph() { return (*graph); } - -// //SymGraphWrapper() : graph(0) { } -// SymGraphWrapper(Graph& _graph) : graph(&_graph) { } -// }; - - - template - class ResGraphWrapper : public GraphWrapper{ - public: - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - protected: - typedef typename Graph::OutEdgeIt OldOutEdgeIt; - typedef typename Graph::InEdgeIt OldInEdgeIt; - FlowMap* flow; - const CapacityMap* capacity; - public: - - ResGraphWrapper(Graph& _graph, FlowMap& _flow, - const CapacityMap& _capacity) : - GraphWrapper(_graph), flow(&_flow), capacity(&_capacity) { } - - class Edge; - class OutEdgeIt; - friend class Edge; - friend class OutEdgeIt; - - class Edge { - friend class ResGraphWrapper; - protected: - bool out_or_in; //true, iff out - OldOutEdgeIt out; - OldInEdgeIt in; - public: - Edge() : out_or_in(true) { } - Edge(const Invalid& i) : out_or_in(false), out(), in(i) { } -// bool valid() const { -// return out_or_in && out.valid() || in.valid(); } - friend bool operator==(const Edge& u, const Edge& v) { - if (v.out_or_in) - return (u.out_or_in && u.out==v.out); - else - return (!u.out_or_in && u.in==v.in); - } - friend bool operator!=(const Edge& u, const Edge& v) { - if (v.out_or_in) - return (!u.out_or_in || u.out!=v.out); - else - return (u.out_or_in || u.in!=v.in); - } - }; - - - class OutEdgeIt : public Edge { - friend class ResGraphWrapper; - public: - OutEdgeIt() { } - //FIXME - OutEdgeIt(const Edge& e) : Edge(e) { } - OutEdgeIt(const Invalid& i) : Edge(i) { } - protected: - OutEdgeIt(const ResGraphWrapper& resG, Node v) : Edge() { - resG.graph->first(out, v); - while( resG.graph->valid(out) && !(resG.resCap(out)>0) ) { resG.graph->next(out); } - if (!resG.graph->valid(out)) { - out_or_in=0; - resG.graph->first(in, v); - while( resG.graph->valid(in) && !(resG.resCap(in)>0) ) { resG.graph->next(in); } - } - } -// public: -// OutEdgeIt& operator++() { -// if (out_or_in) { -// Node v=/*resG->*/G->aNode(out); -// ++out; -// while( out.valid() && !(Edge::resCap()>0) ) { ++out; } -// if (!out.valid()) { -// out_or_in=0; -// G->first(in, v); -// while( in.valid() && !(Edge::resCap()>0) ) { ++in; } -// } -// } else { -// ++in; -// while( in.valid() && !(Edge::resCap()>0) ) { ++in; } -// } -// return *this; -// } - }; - - //FIXME This is just for having InEdgeIt - typedef void InEdgeIt; - - class EdgeIt : public Edge { - friend class ResGraphWrapper; - NodeIt v; - public: - EdgeIt() { } - //EdgeIt(const EdgeIt& e) : Edge(e), v(e.v) { } - EdgeIt(const Invalid& i) : Edge(i) { } - EdgeIt(const ResGraphWrapper& resG) : Edge() { - resG.graph->first(v); - if (resG.graph->valid(v)) resG.graph->first(out, v); else out=INVALID; - while (resG.graph->valid(out) && !(resG.resCap(out)>0) ) { resG.graph->next(out); } - while (resG.graph->valid(v) && !resG.graph->valid(out)) { - resG.graph->next(v); - if (resG.graph->valid(v)) resG.graph->first(out, v); - while (resG.graph->valid(out) && !(resG.resCap(out)>0) ) { resG.graph->next(out); } - } - if (!resG.graph->valid(out)) { - out_or_in=0; - resG.graph->first(v); - if (resG.graph->valid(v)) resG.graph->first(in, v); else in=INVALID; - while (resG.graph->valid(in) && !(resG.resCap(in)>0) ) { resG.graph->next(in); } - while (resG.graph->valid(v) && !resG.graph->valid(in)) { - resG.graph->next(v); - if (resG.graph->valid(v)) resG.graph->first(in, v); - while (resG.graph->valid(in) && !(resG.resCap(in)>0) ) { resG.graph->next(in); } - } - } - } -// EdgeIt& operator++() { -// if (out_or_in) { -// ++out; -// while (out.valid() && !(Edge::resCap()>0) ) { ++out; } -// while (v.valid() && !out.valid()) { -// ++v; -// if (v.valid()) G->first(out, v); -// while (out.valid() && !(Edge::resCap()>0) ) { ++out; } -// } -// if (!out.valid()) { -// out_or_in=0; -// G->first(v); -// if (v.valid()) G->first(in, v); else in=OldInEdgeIt(); -// while (in.valid() && !(Edge::resCap()>0) ) { ++in; } -// while (v.valid() && !in.valid()) { -// ++v; -// if (v.valid()) G->first(in, v); -// while (in.valid() && !(Edge::resCap()>0) ) { ++in; } -// } -// } -// } else { -// ++in; -// while (in.valid() && !(Edge::resCap()>0) ) { ++in; } -// while (v.valid() && !in.valid()) { -// ++v; -// if (v.valid()) G->first(in, v); -// while (in.valid() && !(Edge::resCap()>0) ) { ++in; } -// } -// } -// return *this; -// } - }; - - NodeIt& first(NodeIt& v) const { graph->first(v); return v; } - OutEdgeIt& first(OutEdgeIt& e, Node v) const { - e=OutEdgeIt(*this, v); - return e; - } - EdgeIt& first(EdgeIt& e) const { - e=EdgeIt(*this); - return e; - } - - NodeIt& next(NodeIt& n) const { return graph->next(n); } - - OutEdgeIt& next(OutEdgeIt& e) const { - if (e.out_or_in) { - Node v=graph->aNode(e.out); - graph->next(e.out); - while( graph->valid(e.out) && !(resCap(e.out)>0) ) { graph->next(e.out); } - if (!graph->valid(e.out)) { - e.out_or_in=0; - graph->first(e.in, v); - while( graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } - } - } else { - graph->next(e.in); - while( graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } - } - return e; - } - - EdgeIt& next(EdgeIt& e) const { - if (e.out_or_in) { - graph->next(e.out); - while (graph->valid(e.out) && !(resCap(e.out)>0) ) { graph->next(e.out); } - while (graph->valid(e.v) && !graph->valid(e.out)) { - graph->next(e.v); - if (graph->valid(e.v)) graph->first(e.out, e.v); - while (graph->valid(e.out) && !(resCap(e.out)>0) ) { graph->next(e.out); } - } - if (!graph->valid(e.out)) { - e.out_or_in=0; - graph->first(e.v); - if (graph->valid(e.v)) graph->first(e.in, e.v); else e.in=INVALID; - while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } - while (graph->valid(e.v) && !graph->valid(e.in)) { - graph->next(e.v); - if (graph->valid(e.v)) graph->first(e.in, e.v); - while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } - } - } - } else { - graph->next(e.in); - while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } - while (graph->valid(e.v) && !graph->valid(e.in)) { - graph->next(e.v); - if (graph->valid(e.v)) graph->first(e.in, e.v); - while (graph->valid(e.in) && !(resCap(e.in)>0) ) { graph->next(e.in); } - } - } - return e; - } - - - template< typename It > - It first() const { - It e; - first(e); - return e; - } - - template< typename It > - It first(Node v) const { - It e; - first(e, v); - return e; - } - - Node source(Edge e) const { - return ((e.out_or_in) ? graph->aNode(e.out) : graph->aNode(e.in)); } - Node target(Edge e) const { - return ((e.out_or_in) ? graph->bNode(e.out) : graph->bNode(e.in)); } - - Node aNode(OutEdgeIt e) const { - return ((e.out_or_in) ? graph->aNode(e.out) : graph->aNode(e.in)); } - Node bNode(OutEdgeIt e) const { - return ((e.out_or_in) ? graph->bNode(e.out) : graph->bNode(e.in)); } - - int nodeNum() const { return graph->nodeNum(); } - //FIXME - //int edgeNum() const { return graph->edgeNum(); } - - - int id(Node v) const { return graph->id(v); } - - bool valid(Node n) const { return graph->valid(n); } - bool valid(Edge e) const { - return e.out_or_in ? graph->valid(e.out) : graph->valid(e.in); } - - void augment(const Edge& e, Number a) const { - if (e.out_or_in) - flow->set(e.out, flow->get(e.out)+a); - else - flow->set(e.in, flow->get(e.in)-a); - } - - Number resCap(const Edge& e) const { - if (e.out_or_in) - return (capacity->get(e.out)-flow->get(e.out)); - else - return (flow->get(e.in)); - } - - Number resCap(OldOutEdgeIt out) const { - return (capacity->get(out)-flow->get(out)); - } - - Number resCap(OldInEdgeIt in) const { - return (flow->get(in)); - } - -// template class NodeMap : public Graph::NodeMap { -// public: -// NodeMap(const ResGraphWrapper& _G) -// : Graph::NodeMap(_G.gw) { } -// NodeMap(const ResGraphWrapper& _G, -// T a) : Graph::NodeMap(_G.gw, a) { } -// }; - -// template -// class NodeMap { -// typename Graph::NodeMap node_map; -// public: -// NodeMap(const ResGraphWrapper& _G) : node_map(*(_G.graph)) { } -// NodeMap(const ResGraphWrapper& _G, T a) : node_map(*(_G.graph), a) { } -// void set(Node nit, T a) { node_map.set(nit, a); } -// T get(Node nit) const { return node_map.get(nit); } -// }; - - template - class EdgeMap { - typename Graph::EdgeMap forward_map, backward_map; - public: - EdgeMap(const ResGraphWrapper& _G) : forward_map(*(_G.graph)), backward_map(*(_G.graph)) { } - EdgeMap(const ResGraphWrapper& _G, T a) : forward_map(*(_G.graph), a), backward_map(*(_G.graph), a) { } - void set(Edge e, T a) { - if (e.out_or_in) - forward_map.set(e.out, a); - else - backward_map.set(e.in, a); - } - T get(Edge e) { - if (e.out_or_in) - return forward_map.get(e.out); - else - return backward_map.get(e.in); - } - }; - }; - - //ErasingFirstGraphWrapper for blocking flows - template - class ErasingFirstGraphWrapper : public GraphWrapper { - protected: - FirstOutEdgesMap* first_out_edges; - public: - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - typedef typename GraphWrapper::Edge Edge; - typedef typename GraphWrapper::EdgeIt EdgeIt; - typedef typename GraphWrapper::InEdgeIt InEdgeIt; - typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; - - ErasingFirstGraphWrapper(Graph& _graph, - FirstOutEdgesMap& _first_out_edges) : - GraphWrapper(_graph), first_out_edges(&_first_out_edges) { } - - template I& first(I& i) const { - graph->first(i); - return i; - } - OutEdgeIt& first(OutEdgeIt& e, const Node& n) const { - e=first_out_edges->get(n); - return e; - } - template I& first(I& i, const P& p) const { - graph->first(i, p); - return i; - } - - //template I getNext(const I& i) const { - // return gw.getNext(i); - //} - template I& next(I &i) const { - graph->next(i); - return i; - } - - template< typename It > It first() const { - It e; this->first(e); return e; } - - template< typename It > It first(const Node& v) const { - It e; this->first(e, v); return e; } - - void erase(const OutEdgeIt& e) const { - OutEdgeIt f=e; - this->next(f); - first_out_edges->set(this->source(e), f); - } - }; - -// // FIXME: comparison should be made better!!! -// template -// class ResGraphWrapper -// { -// Graph* graph; - -// public: -// typedef Graph BaseGraph; - -// typedef typename Graph::Node Node; -// typedef typename Graph::Edge Edge; - -// typedef typename Graph::NodeIt NodeIt; - -// class OutEdgeIt { -// public: -// //Graph::Node n; -// bool out_or_in; -// typename Graph::OutEdgeIt o; -// typename Graph::InEdgeIt i; -// }; -// class InEdgeIt { -// public: -// //Graph::Node n; -// bool out_or_in; -// typename Graph::OutEdgeIt o; -// typename Graph::InEdgeIt i; -// }; -// typedef typename Graph::SymEdgeIt SymEdgeIt; -// typedef typename Graph::EdgeIt EdgeIt; - -// int nodeNum() const { return gw.nodeNum(); } -// int edgeNum() const { return gw.edgeNum(); } - -// Node& first(Node& n) const { return gw.first(n); } - -// // Edge and SymEdge is missing!!!! -// // Edge <-> In/OutEdgeIt conversion is missing!!!! - -// //FIXME -// OutEdgeIt& first(OutEdgeIt& e, const Node& n) const -// { -// e.n=n; -// gw.first(e.o,n); -// while(gw.valid(e.o) && fmap.get(e.o)>=himap.get(e.o)) -// gw.goNext(e.o); -// if(!gw.valid(e.o)) { -// gw.first(e.i,n); -// while(gw.valid(e.i) && fmap.get(e.i)<=lomap.get(e.i)) -// gw.goNext(e.i); -// } -// return e; -// } -// /* -// OutEdgeIt &goNext(OutEdgeIt &e) -// { -// if(gw.valid(e.o)) { -// while(gw.valid(e.o) && fmap.get(e.o)>=himap.get(e.o)) -// gw.goNext(e.o); -// if(gw.valid(e.o)) return e; -// else gw.first(e.i,e.n); -// } -// else { -// while(gw.valid(e.i) && fmap.get(e.i)<=lomap.get(e.i)) -// gw.goNext(e.i); -// return e; -// } -// } -// OutEdgeIt Next(const OutEdgeIt &e) {OutEdgeIt t(e); return goNext(t);} -// */ -// //bool valid(const OutEdgeIt e) { return gw.valid(e.o)||gw.valid(e.i);} - -// //FIXME -// InEdgeIt& first(InEdgeIt& e, const Node& n) const -// { -// e.n=n; -// gw.first(e.i,n); -// while(gw.valid(e.i) && fmap.get(e.i)>=himap.get(e.i)) -// gw.goNext(e.i); -// if(!gw.valid(e.i)) { -// gw.first(e.o,n); -// while(gw.valid(e.o) && fmap.get(e.o)<=lomap.get(e.o)) -// gw.goNext(e.o); -// } -// return e; -// } -// /* -// InEdgeIt &goNext(InEdgeIt &e) -// { -// if(gw.valid(e.i)) { -// while(gw.valid(e.i) && fmap.get(e.i)>=himap.get(e.i)) -// gw.goNext(e.i); -// if(gw.valid(e.i)) return e; -// else gw.first(e.o,e.n); -// } -// else { -// while(gw.valid(e.o) && fmap.get(e.o)<=lomap.get(e.o)) -// gw.goNext(e.o); -// return e; -// } -// } -// InEdgeIt Next(const InEdgeIt &e) {InEdgeIt t(e); return goNext(t);} -// */ -// //bool valid(const InEdgeIt e) { return gw.valid(e.i)||gw.valid(e.o);} - -// //template I &goNext(I &i); { return gw.goNext(i); } -// //template I next(const I i); { return gw.goNext(i); } - -// template< typename It > It first() const { -// It e; first(e); return e; } - -// template< typename It > It first(Node v) const { -// It e; first(e, v); return e; } - -// Node target(const Edge& e) const { return gw.target(e); } -// Node source(const Edge& e) const { return gw.source(e); } - -// template Node aNode(const I& e) const { -// return gw.aNode(e); } -// template Node bNode(const I& e) const { -// return gw.bNode(e); } - -// //template bool valid(const I i); -// //{ return gw.valid(i); } - -// //template void setInvalid(const I &i); -// //{ return gw.setInvalid(i); } - -// Node addNode() { return gw.addNode(); } -// Edge addEdge(const Node& source, const Node& target) { -// return gw.addEdge(source, target); } - -// template void erase(const I& i) { gw.erase(i); } - -// void clear() { gw.clear(); } - -// template class NodeMap : public Graph::NodeMap { }; -// template class EdgeMap : public Graph::EdgeMap { }; - -// void setGraph(Graph& _graph) { graph = &_graph; } -// Graph& getGraph() { return (*graph); } - -// //ResGraphWrapper() : graph(0) { } -// ResGraphWrapper(Graph& _graph) : graph(&_graph) { } -// }; - -} //namespace lemon - -#endif //LEMON_GRAPH_WRAPPER_H - diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/graph_wrapper_st_ostream_op.h --- a/src/work/marci/experiment/graph_wrapper_st_ostream_op.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1653 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_GRAPH_WRAPPER_H -#define LEMON_GRAPH_WRAPPER_H - -#include -#include - -namespace lemon { - - // Graph wrappers - - /// \addtogroup gwrappers - /// A main parts of LEMON are the different graph structures, - /// generic graph algorithms, graph concepts which couple these, and - /// graph wrappers. While the previous ones are more or less clear, the - /// latter notion needs further explanation. - /// Graph wrappers are graph classes which serve for considering graph - /// structures in different ways. A short example makes the notion much - /// clearer. - /// Suppose that we have an instance \c g of a directed graph - /// type say \c ListGraph and an algorithm - /// \code template int algorithm(const Graph&); \endcode - /// is needed to run on the reversely oriented graph. - /// It may be expensive (in time or in memory usage) to copy - /// \c g with the reverse orientation. - /// Thus, a wrapper class - /// \code template class RevGraphWrapper; \endcode is used. - /// The code looks as follows - /// \code - /// ListGraph g; - /// RevGraphWrapper rgw(g); - /// int result=algorithm(rgw); - /// \endcode - /// After running the algorithm, the original graph \c g - /// remains untouched. Thus the graph wrapper used above is to consider the - /// original graph with reverse orientation. - /// This techniques gives rise to an elegant code, and - /// based on stable graph wrappers, complex algorithms can be - /// implemented easily. - /// In flow, circulation and bipartite matching problems, the residual - /// graph is of particular importance. Combining a wrapper implementing - /// this, shortest path algorithms and minimum mean cycle algorithms, - /// a range of weighted and cardinality optimization algorithms can be - /// obtained. For lack of space, for other examples, - /// the interested user is referred to the detailed documentation of graph - /// wrappers. - /// The behavior of graph wrappers can be very different. Some of them keep - /// capabilities of the original graph while in other cases this would be - /// meaningless. This means that the concepts that they are a model of depend - /// on the graph wrapper, and the wrapped graph(s). - /// If an edge of \c rgw is deleted, this is carried out by - /// deleting the corresponding edge of \c g. But for a residual - /// graph, this operation has no sense. - /// Let we stand one more example here to simplify your work. - /// wrapper class - /// \code template class RevGraphWrapper; \endcode - /// has constructor - /// RevGraphWrapper(Graph& _g). - /// This means that in a situation, - /// when a const ListGraph& reference to a graph is given, - /// then it have to be instantiated with Graph=const ListGraph. - /// \code - /// int algorithm1(const ListGraph& g) { - /// RevGraphWrapper rgw(g); - /// return algorithm2(rgw); - /// } - /// \endcode - - /// \addtogroup gwrappers - /// @{ - - ///Base type for the Graph Wrappers - - ///This is the base type for the Graph Wrappers. - ///\todo Some more docs... - - template - class GraphWrapper { - protected: - Graph* graph; - - public: - typedef Graph BaseGraph; - typedef Graph ParentGraph; - -// GraphWrapper() : graph(0) { } - GraphWrapper(Graph& _graph) : graph(&_graph) { } -// void setGraph(Graph& _graph) { graph=&_graph; } -// Graph& getGraph() const { return *graph; } - -// typedef typename Graph::Node Node; - class Node : public Graph::Node { - friend class GraphWrapper; - public: - Node() { } - Node(const typename Graph::Node& _n) : Graph::Node(_n) { } - Node(const Invalid& i) : Graph::Node(i) { } - }; - class NodeIt { - friend class GraphWrapper; - typename Graph::NodeIt n; - public: - NodeIt() { } - NodeIt(const typename Graph::NodeIt& _n) : n(_n) { } - NodeIt(const Invalid& i) : n(i) { } - NodeIt(const GraphWrapper& _G) : n(*(_G.graph)) { } - operator Node() const { return Node(typename Graph::Node(n)); } - }; -// typedef typename Graph::Edge Edge; - class Edge : public Graph::Edge { - friend class GraphWrapper; - public: - Edge() { } - Edge(const typename Graph::Edge& _e) : Graph::Edge(_e) { } - Edge(const Invalid& i) : Graph::Edge(i) { } - }; - class OutEdgeIt { - friend class GraphWrapper; - typename Graph::OutEdgeIt e; - public: - OutEdgeIt() { } - OutEdgeIt(const typename Graph::OutEdgeIt& _e) : e(_e) { } - OutEdgeIt(const Invalid& i) : e(i) { } - OutEdgeIt(const GraphWrapper& _G, const Node& _n) : - e(*(_G.graph), typename Graph::Node(_n)) { } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - class InEdgeIt { - friend class GraphWrapper; - typename Graph::InEdgeIt e; - public: - InEdgeIt() { } - InEdgeIt(const typename Graph::InEdgeIt& _e) : e(_e) { } - InEdgeIt(const Invalid& i) : e(i) { } - InEdgeIt(const GraphWrapper& _G, const Node& _n) : - e(*(_G.graph), typename Graph::Node(_n)) { } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - //typedef typename Graph::SymEdgeIt SymEdgeIt; - class EdgeIt { - friend class GraphWrapper; - typename Graph::EdgeIt e; - public: - EdgeIt() { } - EdgeIt(const typename Graph::EdgeIt& _e) : e(_e) { } - EdgeIt(const Invalid& i) : e(i) { } - EdgeIt(const GraphWrapper& _G) : e(*(_G.graph)) { } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - - NodeIt& first(NodeIt& i) const { - i=NodeIt(*this); return i; - } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); return i; - } - EdgeIt& first(EdgeIt& i) const { - i=EdgeIt(*this); return i; - } - - NodeIt& next(NodeIt& i) const { graph->next(i.n); return i; } - OutEdgeIt& next(OutEdgeIt& i) const { graph->next(i.e); return i; } - InEdgeIt& next(InEdgeIt& i) const { graph->next(i.e); return i; } - EdgeIt& next(EdgeIt& i) const { graph->next(i.e); return i; } - - Node source(const Edge& e) const { - return Node(graph->source(static_cast(e))); } - Node target(const Edge& e) const { - return Node(graph->target(static_cast(e))); } - - bool valid(const Node& n) const { - return graph->valid(static_cast(n)); } - bool valid(const Edge& e) const { - return graph->valid(static_cast(e)); } - - int nodeNum() const { return graph->nodeNum(); } - int edgeNum() const { return graph->edgeNum(); } - - Node aNode(const OutEdgeIt& e) const { return Node(graph->aNode(e.e)); } - Node aNode(const InEdgeIt& e) const { return Node(graph->aNode(e.e)); } - Node bNode(const OutEdgeIt& e) const { return Node(graph->bNode(e.e)); } - Node bNode(const InEdgeIt& e) const { return Node(graph->bNode(e.e)); } - - Node addNode() const { return Node(graph->addNode()); } - Edge addEdge(const Node& source, const Node& target) const { - return Edge(graph->addEdge(source, target)); } - - void erase(const Node& i) const { graph->erase(i); } - void erase(const Edge& i) const { graph->erase(i); } - - void clear() const { graph->clear(); } - - template class NodeMap : public Graph::template NodeMap { - typedef typename Graph::template NodeMap Parent; - public: - NodeMap(const GraphWrapper& _G) : Parent(*(_G.graph)) { } - NodeMap(const GraphWrapper& _G, T a) : Parent(*(_G.graph), a) { } - }; - - template class EdgeMap : public Graph::template EdgeMap { - typedef typename Graph::template EdgeMap Parent; - public: - EdgeMap(const GraphWrapper& _G) : Parent(*(_G.graph)) { } - EdgeMap(const GraphWrapper& _G, T a) : Parent(*(_G.graph), a) { } - }; - }; - - /// A graph wrapper which reverses the orientation of the edges. - - /// A graph wrapper which reverses the orientation of the edges. - template - class RevGraphWrapper : public GraphWrapper { - public: - - RevGraphWrapper(Graph& _graph) : GraphWrapper(_graph) { } - - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::Edge Edge; - //If Graph::OutEdgeIt is not defined - //and we do not want to use RevGraphWrapper::InEdgeIt, - //the typdef techinque does not work. - //Unfortunately all the typedefs are instantiated in templates. - //typedef typename GraphWrapper::OutEdgeIt InEdgeIt; - //typedef typename GraphWrapper::InEdgeIt OutEdgeIt; - - class OutEdgeIt { - friend class GraphWrapper; - friend class RevGraphWrapper; - typename Graph::InEdgeIt e; - public: - OutEdgeIt() { } - OutEdgeIt(const typename Graph::InEdgeIt& _e) : e(_e) { } - OutEdgeIt(const Invalid& i) : e(i) { } - OutEdgeIt(const RevGraphWrapper& _G, const Node& _n) : - e(*(_G.graph), typename Graph::Node(_n)) { } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - class InEdgeIt { - friend class GraphWrapper; - friend class RevGraphWrapper; - typename Graph::OutEdgeIt e; - public: - InEdgeIt() { } - InEdgeIt(const typename Graph::OutEdgeIt& _e) : e(_e) { } - InEdgeIt(const Invalid& i) : e(i) { } - InEdgeIt(const RevGraphWrapper& _G, const Node& _n) : - e(*(_G.graph), typename Graph::Node(_n)) { } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - - using GraphWrapper::first; - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); return i; - } - - using GraphWrapper::next; - OutEdgeIt& next(OutEdgeIt& i) const { this->graph->next(i.e); return i; } - InEdgeIt& next(InEdgeIt& i) const { this->graph->next(i.e); return i; } - - Node aNode(const OutEdgeIt& e) const { - return Node(this->graph->aNode(e.e)); } - Node aNode(const InEdgeIt& e) const { - return Node(this->graph->aNode(e.e)); } - Node bNode(const OutEdgeIt& e) const { - return Node(this->graph->bNode(e.e)); } - Node bNode(const InEdgeIt& e) const { - return Node(this->graph->bNode(e.e)); } - - Node source(const Edge& e) const { - return GraphWrapper::target(e); } - Node target(const Edge& e) const { - return GraphWrapper::source(e); } - - }; - - /// Wrapper for hiding nodes and edges from a graph. - - /// This wrapper shows a graph with filtered node-set and - /// edge-set. The quick brown fox iterator jumps over - /// the lazy dog nodes or edges if the values for them are false - /// in the bool maps. - template - class SubGraphWrapper : public GraphWrapper { - protected: - NodeFilterMap* node_filter_map; - EdgeFilterMap* edge_filter_map; - public: - - SubGraphWrapper(Graph& _graph, NodeFilterMap& _node_filter_map, - EdgeFilterMap& _edge_filter_map) : - GraphWrapper(_graph), node_filter_map(&_node_filter_map), - edge_filter_map(&_edge_filter_map) { } - - typedef typename GraphWrapper::Node Node; - class NodeIt { - friend class GraphWrapper; - friend class SubGraphWrapper; - typename Graph::NodeIt n; - public: - NodeIt() { } - NodeIt(const typename Graph::NodeIt& _n) : n(_n) { } - NodeIt(const Invalid& i) : n(i) { } - NodeIt(const SubGraphWrapper& _G) : - n(*(_G.graph)) { - while (_G.graph->valid(n) && !(*(_G.node_filter_map))[n]) - _G.graph->next(n); - } - operator Node() const { return Node(typename Graph::Node(n)); } - }; - typedef typename GraphWrapper::Edge Edge; - class OutEdgeIt { - friend class GraphWrapper; - friend class SubGraphWrapper; - typename Graph::OutEdgeIt e; - public: - OutEdgeIt() { } - OutEdgeIt(const typename Graph::OutEdgeIt& _e) : e(_e) { } - OutEdgeIt(const Invalid& i) : e(i) { } - OutEdgeIt(const SubGraphWrapper& _G, - const Node& _n) : - e(*(_G.graph), typename Graph::Node(_n)) { - while (_G.graph->valid(e) && !(*(_G.edge_filter_map))[e]) - _G.graph->next(e); - } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - class InEdgeIt { - friend class GraphWrapper; - friend class SubGraphWrapper; - typename Graph::InEdgeIt e; - public: - InEdgeIt() { } - InEdgeIt(const typename Graph::InEdgeIt& _e) : e(_e) { } - InEdgeIt(const Invalid& i) : e(i) { } - InEdgeIt(const SubGraphWrapper& _G, - const Node& _n) : - e(*(_G.graph), typename Graph::Node(_n)) { - while (_G.graph->valid(e) && !(*(_G.edge_filter_map))[e]) - _G.graph->next(e); - } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - //typedef typename Graph::SymEdgeIt SymEdgeIt; - class EdgeIt { - friend class GraphWrapper; - friend class SubGraphWrapper; - typename Graph::EdgeIt e; - public: - EdgeIt() { } - EdgeIt(const typename Graph::EdgeIt& _e) : e(_e) { } - EdgeIt(const Invalid& i) : e(i) { } - EdgeIt(const SubGraphWrapper& _G) : - e(*(_G.graph)) { - while (_G.graph->valid(e) && !(*(_G.edge_filter_map))[e]) - _G.graph->next(e); - } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - - NodeIt& first(NodeIt& i) const { - i=NodeIt(*this); return i; - } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); return i; - } - EdgeIt& first(EdgeIt& i) const { - i=EdgeIt(*this); return i; - } - - NodeIt& next(NodeIt& i) const { - this->graph->next(i.n); - while (this->graph->valid(i) && !(*node_filter_map)[i.n]) { - this->graph->next(i.n); } - return i; - } - OutEdgeIt& next(OutEdgeIt& i) const { - this->graph->next(i.e); - while (this->graph->valid(i) && !(*edge_filter_map)[i.e]) { - this->graph->next(i.e); } - return i; - } - InEdgeIt& next(InEdgeIt& i) const { - this->graph->next(i.e); - while (this->graph->valid(i) && !(*edge_filter_map)[i.e]) { - this->graph->next(i.e); } - return i; - } - EdgeIt& next(EdgeIt& i) const { - this->graph->next(i.e); - while (this->graph->valid(i) && !(*edge_filter_map)[i.e]) { - this->graph->next(i.e); } - return i; - } - - Node aNode(const OutEdgeIt& e) const { - return Node(this->graph->aNode(e.e)); } - Node aNode(const InEdgeIt& e) const { - return Node(this->graph->aNode(e.e)); } - Node bNode(const OutEdgeIt& e) const { - return Node(this->graph->bNode(e.e)); } - Node bNode(const InEdgeIt& e) const { - return Node(this->graph->bNode(e.e)); } - - ///\todo - ///Some doki, please. - void hide(const Node& n) const { node_filter_map->set(n, false); } - ///\todo - ///Some doki, please. - void hide(const Edge& e) const { edge_filter_map->set(e, false); } - - ///\todo - ///Some doki, please. - void unHide(const Node& n) const { node_filter_map->set(n, true); } - ///\todo - ///Some doki, please. - void unHide(const Edge& e) const { edge_filter_map->set(e, true); } - - ///\todo - ///Some doki, please. - bool hidden(const Node& n) const { return (*node_filter_map)[n]; } - ///\todo - ///Some doki, please. - bool hidden(const Edge& e) const { return (*edge_filter_map)[e]; } - }; - - /// A wrapper for forgetting the orientation of a graph. - - /// A wrapper for getting an undirected graph by forgetting - /// the orientation of a directed one. - template - class UndirGraphWrapper : public GraphWrapper { - public: - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - typedef typename GraphWrapper::Edge Edge; - typedef typename GraphWrapper::EdgeIt EdgeIt; - - UndirGraphWrapper(Graph& _graph) : GraphWrapper(_graph) { } - - class OutEdgeIt { - friend class UndirGraphWrapper; - bool out_or_in; //true iff out - typename Graph::OutEdgeIt out; - typename Graph::InEdgeIt in; - public: - OutEdgeIt() { } - OutEdgeIt(const Invalid& i) : Edge(i) { } - OutEdgeIt(const UndirGraphWrapper& _G, const Node& _n) { - out_or_in=true; _G.graph->first(out, _n); - if (!(_G.graph->valid(out))) { out_or_in=false; _G.graph->first(in, _n); } - } - operator Edge() const { - if (out_or_in) return Edge(out); else return Edge(in); - } - }; - -//FIXME InEdgeIt - typedef OutEdgeIt InEdgeIt; - - using GraphWrapper::first; -// NodeIt& first(NodeIt& i) const { -// i=NodeIt(*this); return i; -// } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); return i; - } -//FIXME -// InEdgeIt& first(InEdgeIt& i, const Node& p) const { -// i=InEdgeIt(*this, p); return i; -// } -// EdgeIt& first(EdgeIt& i) const { -// i=EdgeIt(*this); return i; -// } - - using GraphWrapper::next; -// NodeIt& next(NodeIt& n) const { -// GraphWrapper::next(n); -// return n; -// } - OutEdgeIt& next(OutEdgeIt& e) const { - if (e.out_or_in) { - typename Graph::Node n=this->graph->source(e.out); - this->graph->next(e.out); - if (!this->graph->valid(e.out)) { - e.out_or_in=false; this->graph->first(e.in, n); } - } else { - this->graph->next(e.in); - } - return e; - } - //FIXME InEdgeIt -// EdgeIt& next(EdgeIt& e) const { -// GraphWrapper::next(n); -// // graph->next(e.e); -// return e; -// } - - Node aNode(const OutEdgeIt& e) const { - if (e.out_or_in) return this->graph->source(e); else - return this->graph->target(e); } - Node bNode(const OutEdgeIt& e) const { - if (e.out_or_in) return this->graph->target(e); else - return this->graph->source(e); } - }; - - /// A wrapper for composing the residual graph for directed flow and circulation problems. - - /// A wrapper for composing the residual graph for directed flow and circulation problems. - template - class ResGraphWrapper : public GraphWrapper { - protected: - const CapacityMap* capacity; - FlowMap* flow; - public: - - ResGraphWrapper(Graph& _graph, const CapacityMap& _capacity, - FlowMap& _flow) : - GraphWrapper(_graph), capacity(&_capacity), flow(&_flow) { } - - class Edge; - class OutEdgeIt; - friend class Edge; - friend class OutEdgeIt; - - typedef typename GraphWrapper::Node Node; - typedef typename GraphWrapper::NodeIt NodeIt; - class Edge : public Graph::Edge { - friend class ResGraphWrapper; - protected: - bool forward; //true, iff forward -// typename Graph::Edge e; - public: - Edge() { } - Edge(const typename Graph::Edge& _e, bool _forward) : - Graph::Edge(_e), forward(_forward) { } - Edge(const Invalid& i) : Graph::Edge(i), forward(false) { } -//the unique invalid iterator - friend bool operator==(const Edge& u, const Edge& v) { - return (v.forward==u.forward && - static_cast(u)== - static_cast(v)); - } - friend bool operator!=(const Edge& u, const Edge& v) { - return (v.forward!=u.forward || - static_cast(u)!= - static_cast(v)); - } - }; - - class OutEdgeIt { - friend class ResGraphWrapper; - protected: - typename Graph::OutEdgeIt out; - typename Graph::InEdgeIt in; - bool forward; - public: - OutEdgeIt() { } - //FIXME -// OutEdgeIt(const Edge& e) : Edge(e) { } - OutEdgeIt(const Invalid& i) : out(i), in(i), forward(false) { } -//the unique invalid iterator - OutEdgeIt(const ResGraphWrapper& resG, Node v) { - forward=true; - resG.graph->first(out, v); - while( resG.graph->valid(out) && !(resG.resCap(*this)>0) ) { resG.graph->next(out); } - if (!resG.graph->valid(out)) { - forward=false; - resG.graph->first(in, v); - while( resG.graph->valid(in) && !(resG.resCap(*this)>0) ) { resG.graph->next(in); } - } - } - operator Edge() const { -// Edge e; -// e.forward=this->forward; -// if (this->forward) e=out; else e=in; -// return e; - if (this->forward) - return Edge(out, this->forward); - else - return Edge(in, this->forward); - } - }; - - class InEdgeIt { - friend class ResGraphWrapper; - protected: - typename Graph::OutEdgeIt out; - typename Graph::InEdgeIt in; - bool forward; - public: - InEdgeIt() { } - //FIXME -// OutEdgeIt(const Edge& e) : Edge(e) { } - InEdgeIt(const Invalid& i) : out(i), in(i), forward(false) { } -//the unique invalid iterator - InEdgeIt(const ResGraphWrapper& resG, Node v) { - forward=true; - resG.graph->first(in, v); - while( resG.graph->valid(in) && !(resG.resCap(*this)>0) ) { resG.graph->next(in); } - if (!resG.graph->valid(in)) { - forward=false; - resG.graph->first(out, v); - while( resG.graph->valid(out) && !(resG.resCap(*this)>0) ) { resG.graph->next(out); } - } - } - operator Edge() const { -// Edge e; -// e.forward=this->forward; -// if (this->forward) e=out; else e=in; -// return e; - if (this->forward) - return Edge(in, this->forward); - else - return Edge(out, this->forward); - } - }; - - class EdgeIt { - friend class ResGraphWrapper; - protected: - typename Graph::EdgeIt e; - bool forward; - public: - EdgeIt() { } - EdgeIt(const Invalid& i) : e(i), forward(false) { } - EdgeIt(const ResGraphWrapper& resG) { - forward=true; - resG.graph->first(e); - while (resG.graph->valid(e) && !(resG.resCap(*this)>0)) resG.graph->next(e); - if (!resG.graph->valid(e)) { - forward=false; - resG.graph->first(e); - while (resG.graph->valid(e) && !(resG.resCap(*this)>0)) resG.graph->next(e); - } - } - operator Edge() const { - return Edge(e, this->forward); - } - }; - - using GraphWrapper::first; -// NodeIt& first(NodeIt& i) const { -// i=NodeIt(*this); return i; -// } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); return i; - } -// FIXME not tested - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); return i; - } - EdgeIt& first(EdgeIt& i) const { - i=EdgeIt(*this); return i; - } - - using GraphWrapper::next; -// NodeIt& next(NodeIt& n) const { GraphWrapper::next(n); return n; } - OutEdgeIt& next(OutEdgeIt& e) const { - if (e.forward) { - Node v=this->graph->aNode(e.out); - this->graph->next(e.out); - while( this->graph->valid(e.out) && !(resCap(e)>0) ) { - this->graph->next(e.out); } - if (!this->graph->valid(e.out)) { - e.forward=false; - this->graph->first(e.in, v); - while( this->graph->valid(e.in) && !(resCap(e)>0) ) { - this->graph->next(e.in); } - } - } else { - this->graph->next(e.in); - while( this->graph->valid(e.in) && !(resCap(e)>0) ) { - this->graph->next(e.in); } - } - return e; - } -// FIXME Not tested - InEdgeIt& next(InEdgeIt& e) const { - if (e.forward) { - Node v=this->graph->aNode(e.in); - this->graph->next(e.in); - while( this->graph->valid(e.in) && !(resCap(e)>0) ) { - this->graph->next(e.in); } - if (!this->graph->valid(e.in)) { - e.forward=false; - this->graph->first(e.out, v); - while( this->graph->valid(e.out) && !(resCap(e)>0) ) { - this->graph->next(e.out); } - } - } else { - this->graph->next(e.out); - while( this->graph->valid(e.out) && !(resCap(e)>0) ) { - this->graph->next(e.out); } - } - return e; - } - EdgeIt& next(EdgeIt& e) const { - if (e.forward) { - this->graph->next(e.e); - while( this->graph->valid(e.e) && !(resCap(e)>0) ) { - this->graph->next(e.e); } - if (!this->graph->valid(e.e)) { - e.forward=false; - this->graph->first(e.e); - while( this->graph->valid(e.e) && !(resCap(e)>0) ) { - this->graph->next(e.e); } - } - } else { - this->graph->next(e.e); - while( this->graph->valid(e.e) && !(resCap(e)>0) ) { - this->graph->next(e.e); } - } - return e; - } - - Node source(Edge e) const { - return ((e.forward) ? this->graph->source(e) : this->graph->target(e)); } - Node target(Edge e) const { - return ((e.forward) ? this->graph->target(e) : this->graph->source(e)); } - - Node aNode(OutEdgeIt e) const { - return ((e.forward) ? this->graph->aNode(e.out) : - this->graph->aNode(e.in)); } - Node bNode(OutEdgeIt e) const { - return ((e.forward) ? this->graph->bNode(e.out) : - this->graph->bNode(e.in)); } - - Node aNode(InEdgeIt e) const { - return ((e.forward) ? this->graph->aNode(e.in) : - this->graph->aNode(e.out)); } - Node bNode(InEdgeIt e) const { - return ((e.forward) ? this->graph->bNode(e.in) : - this->graph->bNode(e.out)); } - -// int nodeNum() const { return graph->nodeNum(); } - //FIXME - void edgeNum() const { } - //int edgeNum() const { return graph->edgeNum(); } - - -// int id(Node v) const { return graph->id(v); } - - bool valid(Node n) const { return GraphWrapper::valid(n); } - bool valid(Edge e) const { - return this->graph->valid(e); - //return e.forward ? graph->valid(e.out) : graph->valid(e.in); - } - - void augment(const Edge& e, Number a) const { - if (e.forward) -// flow->set(e.out, flow->get(e.out)+a); - flow->set(e, (*flow)[e]+a); - else -// flow->set(e.in, flow->get(e.in)-a); - flow->set(e, (*flow)[e]-a); - } - - Number resCap(const Edge& e) const { - if (e.forward) -// return (capacity->get(e.out)-flow->get(e.out)); - return ((*capacity)[e]-(*flow)[e]); - else -// return (flow->get(e.in)); - return ((*flow)[e]); - } - -// Number resCap(typename Graph::OutEdgeIt out) const { -// // return (capacity->get(out)-flow->get(out)); -// return ((*capacity)[out]-(*flow)[out]); -// } - -// Number resCap(typename Graph::InEdgeIt in) const { -// // return (flow->get(in)); -// return ((*flow)[in]); -// } - - template - class EdgeMap { - typename Graph::template EdgeMap forward_map, backward_map; - public: - EdgeMap(const ResGraphWrapper& _G) : forward_map(*(_G.graph)), backward_map(*(_G.graph)) { } - EdgeMap(const ResGraphWrapper& _G, T a) : forward_map(*(_G.graph), a), backward_map(*(_G.graph), a) { } - void set(Edge e, T a) { - if (e.forward) - forward_map.set(e.out, a); - else - backward_map.set(e.in, a); - } - T operator[](Edge e) const { - if (e.forward) - return forward_map[e.out]; - else - return backward_map[e.in]; - } -// T get(Edge e) const { -// if (e.out_or_in) -// return forward_map.get(e.out); -// else -// return backward_map.get(e.in); -// } - }; - }; - - /// ErasingFirstGraphWrapper for blocking flows. - - /// ErasingFirstGraphWrapper for blocking flows. - template - class ErasingFirstGraphWrapper : public GraphWrapper { - protected: - FirstOutEdgesMap* first_out_edges; - public: - ErasingFirstGraphWrapper(Graph& _graph, - FirstOutEdgesMap& _first_out_edges) : - GraphWrapper(_graph), first_out_edges(&_first_out_edges) { } - - typedef typename GraphWrapper::Node Node; -// class NodeIt { -// friend class GraphWrapper; -// friend class ErasingFirstGraphWrapper; -// typename Graph::NodeIt n; -// public: -// NodeIt() { } -// NodeIt(const typename Graph::NodeIt& _n) : n(_n) { } -// NodeIt(const Invalid& i) : n(i) { } -// NodeIt(const ErasingFirstGraphWrapper& _G) : -// n(*(_G.graph)) { } -// operator Node() const { return Node(typename Graph::Node(n)); } -// }; - typedef typename GraphWrapper::Edge Edge; - class OutEdgeIt { - friend class GraphWrapper; - friend class ErasingFirstGraphWrapper; -// typedef typename Graph::OutEdgeIt GraphOutEdgeIt; - typename Graph::OutEdgeIt e; - public: - OutEdgeIt() { } - OutEdgeIt(const typename Graph::OutEdgeIt& _e) : e(_e) { } - OutEdgeIt(const Invalid& i) : e(i) { } - OutEdgeIt(const ErasingFirstGraphWrapper& _G, - const Node& _n) : - e((*_G.first_out_edges)[_n]) { } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - class InEdgeIt { - friend class GraphWrapper; - friend class ErasingFirstGraphWrapper; -// typedef typename Graph::InEdgeIt GraphInEdgeIt; - typename Graph::InEdgeIt e; - public: - InEdgeIt() { } - InEdgeIt(const typename Graph::InEdgeIt& _e) : e(_e) { } - InEdgeIt(const Invalid& i) : e(i) { } - InEdgeIt(const ErasingFirstGraphWrapper& _G, - const Node& _n) : - e(*(_G.graph), typename Graph::Node(_n)) { } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - //typedef typename Graph::SymEdgeIt SymEdgeIt; - class EdgeIt { - friend class GraphWrapper; - friend class ErasingFirstGraphWrapper; -// typedef typename Graph::EdgeIt GraphEdgeIt; - typename Graph::EdgeIt e; - public: - EdgeIt() { } - EdgeIt(const typename Graph::EdgeIt& _e) : e(_e) { } - EdgeIt(const Invalid& i) : e(i) { } - EdgeIt(const ErasingFirstGraphWrapper& _G) : - e(*(_G.graph)) { } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - - using GraphWrapper::first; -// NodeIt& first(NodeIt& i) const { -// i=NodeIt(*this); return i; -// } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); return i; - } - EdgeIt& first(EdgeIt& i) const { - i=EdgeIt(*this); return i; - } - - using GraphWrapper::next; -// NodeIt& next(NodeIt& i) const { graph->next(i.n); return i; } - OutEdgeIt& next(OutEdgeIt& i) const { this->graph->next(i.e); return i; } - InEdgeIt& next(InEdgeIt& i) const { this->graph->next(i.e); return i; } - EdgeIt& next(EdgeIt& i) const { this->graph->next(i.e); return i; } - - Node aNode(const OutEdgeIt& e) const { - return Node(this->graph->aNode(e.e)); } - Node aNode(const InEdgeIt& e) const { - return Node(this->graph->aNode(e.e)); } - Node bNode(const OutEdgeIt& e) const { - return Node(this->graph->bNode(e.e)); } - Node bNode(const InEdgeIt& e) const { - return Node(this->graph->bNode(e.e)); } - - void erase(const OutEdgeIt& e) const { - OutEdgeIt f=e; - this->next(f); - first_out_edges->set(this->source(e), f.e); - } - }; - - /// A wrapper for composing a bipartite graph. - /// \c _graph have to be a reference to a graph of type \c Graph - /// and \c _s_false_t_true_map is an \c IterableBoolMap - /// reference containing the elements for the - /// color classes S and T. \c _graph is to be referred to an undirected - /// graph or a directed graph with edges oriented from S to T. - template - class BipartiteGraphWrapper : public GraphWrapper { - typedef IterableBoolMap< typename Graph::template NodeMap > - SFalseTTrueMap; - SFalseTTrueMap* s_false_t_true_map; - - public: - //marci - //FIXME vhogy igy kellene, csak az en forditom nem eszi meg - //static const bool S_CLASS=false; - //static const bool T_CLASS=true; - - bool S_CLASS; - bool T_CLASS; - - BipartiteGraphWrapper(Graph& _graph, SFalseTTrueMap& _s_false_t_true_map) - : GraphWrapper(_graph), s_false_t_true_map(&_s_false_t_true_map), - S_CLASS(false), T_CLASS(true) { } - typedef typename GraphWrapper::Node Node; - //using GraphWrapper::NodeIt; - typedef typename GraphWrapper::Edge Edge; - //using GraphWrapper::EdgeIt; - class ClassNodeIt; - friend class ClassNodeIt; - class OutEdgeIt; - friend class OutEdgeIt; - class InEdgeIt; - friend class InEdgeIt; - class ClassNodeIt { - friend class BipartiteGraphWrapper; - protected: - Node n; - public: - ClassNodeIt() { } - ClassNodeIt(const Invalid& i) : n(i) { } - ClassNodeIt(const BipartiteGraphWrapper& _G, bool _class) { - _G.s_false_t_true_map->first(n, _class); - } - //FIXME needed in new concept, important here - ClassNodeIt(const Node& _n) : n(_n) { } - operator Node() const { return n; } - }; -// class SNodeIt { -// Node n; -// public: -// SNodeIt() { } -// SNodeIt(const Invalid& i) : n(i) { } -// SNodeIt(const BipartiteGraphWrapper& _G) { -// _G.s_false_t_true_map->first(n, false); -// } -// operator Node() const { return n; } -// }; -// class TNodeIt { -// Node n; -// public: -// TNodeIt() { } -// TNodeIt(const Invalid& i) : n(i) { } -// TNodeIt(const BipartiteGraphWrapper& _G) { -// _G.s_false_t_true_map->first(n, true); -// } -// operator Node() const { return n; } -// }; - class OutEdgeIt { - friend class BipartiteGraphWrapper; - protected: - typename Graph::OutEdgeIt e; - public: - OutEdgeIt() { } - OutEdgeIt(const Invalid& i) : e(i) { } - OutEdgeIt(const BipartiteGraphWrapper& _G, const Node& _n) { - if (!(*(_G.s_false_t_true_map))[_n]) - e=typename Graph::OutEdgeIt(*(_G.graph), typename Graph::Node(_n)); - else - e=INVALID; - } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - class InEdgeIt { - friend class BipartiteGraphWrapper; - protected: - typename Graph::InEdgeIt e; - public: - InEdgeIt() { } - InEdgeIt(const Invalid& i) : e(i) { } - InEdgeIt(const BipartiteGraphWrapper& _G, const Node& _n) { - if ((*(_G.s_false_t_true_map))[_n]) - e=typename Graph::InEdgeIt(*(_G.graph), typename Graph::Node(_n)); - else - e=INVALID; - } - operator Edge() const { return Edge(typename Graph::Edge(e)); } - }; - - using GraphWrapper::first; - ClassNodeIt& first(ClassNodeIt& n, bool _class) const { - n=ClassNodeIt(*this, _class) ; return n; } -// SNodeIt& first(SNodeIt& n) const { n=SNodeIt(*this); return n; } -// TNodeIt& first(TNodeIt& n) const { n=TNodeIt(*this); return n; } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); return i; - } - - using GraphWrapper::next; - ClassNodeIt& next(ClassNodeIt& n) const { - this->s_false_t_true_map->next(n.n); return n; - } -// SNodeIt& next(SNodeIt& n) const { -// this->s_false_t_true_map->next(n); return n; -// } -// TNodeIt& next(TNodeIt& n) const { -// this->s_false_t_true_map->next(n); return n; -// } - OutEdgeIt& next(OutEdgeIt& i) const { this->graph->next(i.e); return i; } - InEdgeIt& next(InEdgeIt& i) const { this->graph->next(i.e); return i; } - - Node source(const Edge& e) { - if (!(*(this->s_false_t_true_map))[this->graph->source(e)]) - return Node(this->graph->source(e)); - else - return Node(this->graph->target(e)); - } - Node target(const Edge& e) { - if (!(*(this->s_false_t_true_map))[this->graph->source(e)]) - return Node(this->graph->target(e)); - else - return Node(this->graph->source(e)); - } - - Node aNode(const OutEdgeIt& e) const { - return Node(this->graph->aNode(e.e)); - } - Node aNode(const InEdgeIt& e) const { - return Node(this->graph->aNode(e.e)); - } - Node bNode(const OutEdgeIt& e) const { - return Node(this->graph->bNode(e.e)); - } - Node bNode(const InEdgeIt& e) const { - return Node(this->graph->bNode(e.e)); - } - - bool inSClass(const Node& n) const { - return !(*(this->s_false_t_true_map))[n]; - } - bool inTClass(const Node& n) const { - return (*(this->s_false_t_true_map))[n]; - } - }; - - - - - /******************** S-T Graph Wrapper ********************/ - - - - - - template class stGraphWrapper; - - template - inline - std::ostream& - operator<<(std::ostream& os, - typename stGraphWrapper::Node const& i) { - os << "(node: " << typename Graph::Node(i) << " spec: " << i.spec <<")"; - return os; - } - - template - inline - std::ostream& - operator<<(std::ostream& os, - typename stGraphWrapper::Edge const& i) { - os << "(edge: " << typename Graph::Edge(i) << " spec: " << i.spec - << " node: " << i.n << ")"; - return os; - } - - - /// experimentral, do not try it. - /// It eats a bipartite graph, oriented from S to T. - /// Such one can be made e.g. by the above wrapper. - template - class stGraphWrapper : public GraphWrapper { - public: - class Node; - friend class Node; -//GN, int -//0 normalis, 1 s, 2, true, ez az iteralasi sorrend, -//es a vege a false azaz (invalid, 3) - class NodeIt; - friend class NodeIt; -//GNI, int - class Edge; - friend class Edge; -//GE, int, GN -//0 normalis, 1 s->vmi, 2 vmi->t, ez a sorrend, -//invalid: (invalid, 3, invalid) - class OutEdgeIt; - friend class OutEdgeIt; -//GO, int, GNI -//normalis pontbol (first, 0, invalid), ..., (invalid, 2, vmi), ... (invalid, 3, invalid) -//s-bol (invalid, 1, first), ... (invalid, 3, invalid) -//t-bol (invalid, 3, invalid) - class InEdgeIt; - friend class InEdgeIt; -//GI, int, GNI -//normalis pontbol (first, 0, invalid), ..., (invalid, 1, vmi), ... (invalid, 3, invalid) -//s-be (invalid, 3, invalid) -//t-be (invalid, 2, first), ... (invalid, 3, invalid) - class EdgeIt; - friend class EdgeIt; -//(first, 0, invalid) ... -//(invalid, 1, vmi) -//(invalid, 2, vmi) -//invalid, 3, invalid) - template class NodeMap; - template class EdgeMap; - -// template friend class NodeMap; -// template friend class EdgeMap; - - const Node S_NODE; - const Node T_NODE; - - static const bool S_CLASS=false; - static const bool T_CLASS=true; - - stGraphWrapper(Graph& _graph) : GraphWrapper(_graph) , - S_NODE(INVALID, 1), - T_NODE(INVALID, 2) { } - - - class Node : public Graph::Node { - protected: - friend class GraphWrapper; - friend class stGraphWrapper; - template friend class NodeMap; - friend class Edge; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class EdgeIt; - int spec; - public: - Node() { } - Node(const typename Graph::Node& _n, int _spec=0) : - Graph::Node(_n), spec(_spec) { } - Node(const Invalid& i) : Graph::Node(i), spec(3) { } - friend bool operator==(const Node& u, const Node& v) { - return (u.spec==v.spec && - static_cast(u)== - static_cast(v)); - } - friend bool operator!=(const Node& u, const Node& v) { - return (v.spec!=u.spec || - static_cast(u)!= - static_cast(v)); - } - friend std::ostream& operator<< (std::ostream& os, const Node& i); - int getSpec() const { return spec; } - }; - - class NodeIt { - friend class GraphWrapper; - friend class stGraphWrapper; - typename Graph::NodeIt n; - int spec; - public: - NodeIt() { } - NodeIt(const typename Graph::NodeIt& _n, int _spec) : - n(_n), spec(_spec) { } - NodeIt(const Invalid& i) : n(i), spec(3) { } - NodeIt(const stGraphWrapper& _G) : n(*(_G.graph)), spec(0) { - if (!_G.graph->valid(n)) spec=1; - } - operator Node() const { return Node(n, spec); } - }; - - typedef NodeIt NodeIt; - typedef Node Node; - - class Edge : public Graph::Edge { - friend class GraphWrapper; - friend class stGraphWrapper; - template friend class EdgeMap; - int spec; - typename Graph::Node n; - public: - Edge() { } - Edge(const typename Graph::Edge& _e, int _spec, - const typename Graph::Node& _n) : - Graph::Edge(_e), spec(_spec), n(_n) { - } - Edge(const Invalid& i) : Graph::Edge(i), spec(3), n(i) { } - friend bool operator==(const Edge& u, const Edge& v) { - return (u.spec==v.spec && - static_cast(u)== - static_cast(v) && - u.n==v.n); - } - friend bool operator!=(const Edge& u, const Edge& v) { - return (v.spec!=u.spec || - static_cast(u)!= - static_cast(v) || - u.n!=v.n); - } - friend std::ostream& operator<< (std::ostream& os, const Edge& i); - int getSpec() const { return spec; } - }; - - class OutEdgeIt { - friend class GraphWrapper; - friend class stGraphWrapper; - typename Graph::OutEdgeIt e; - int spec; - typename Graph::ClassNodeIt n; - public: - OutEdgeIt() { } - OutEdgeIt(const typename Graph::OutEdgeIt& _e, int _spec, - const typename Graph::ClassNodeIt& _n) : - e(_e), spec(_spec), n(_n) { - } - OutEdgeIt(const Invalid& i) : e(i), spec(3), n(i) { } - OutEdgeIt(const stGraphWrapper& _G, const Node& _n) { - switch (_n.spec) { - case 0 : - if (_G.graph->inSClass(_n)) { //S, van normalis kiel - e=typename Graph::OutEdgeIt(*(_G.graph), - typename Graph::Node(_n)); - spec=0; - n=INVALID; - if (!_G.graph->valid(e)) spec=3; - } else { //T, specko kiel van - e=INVALID; - spec=2; - n=_n; - } - break; - case 1: - e=INVALID; - spec=1; - _G.graph->first(n, S_CLASS); //s->vmi; - if (!_G.graph->valid(n)) spec=3; //Ha S ures - break; - case 2: - e=INVALID; - spec=3; - n=INVALID; - break; - } - } - operator Edge() const { return Edge(e, spec, n); } - }; - - class InEdgeIt { - friend class GraphWrapper; - friend class stGraphWrapper; - typename Graph::InEdgeIt e; - int spec; - typename Graph::ClassNodeIt n; - public: - InEdgeIt() { } - InEdgeIt(const typename Graph::InEdgeIt& _e, int _spec, - const typename Graph::ClassNodeIt& _n) : - e(_e), spec(_spec), n(_n) { - } - InEdgeIt(const Invalid& i) : e(i), spec(3), n(i) { } - InEdgeIt(const stGraphWrapper& _G, const Node& _n) { - switch (_n.spec) { - case 0 : - if (_G.graph->inTClass(_n)) { //T, van normalis beel - e=typename Graph::InEdgeIt(*(_G.graph), - typename Graph::Node(_n)); - spec=0; - n=INVALID; - if (!_G.graph->valid(e)) spec=3; - } else { //S, specko beel van - e=INVALID; - spec=1; - n=_n; - } - break; - case 1: - e=INVALID; - spec=3; - n=INVALID; - break; - case 2: - e=INVALID; - spec=2; - _G.graph->first(n, T_CLASS); //vmi->t; - if (!_G.graph->valid(n)) spec=3; //Ha T ures - break; - } - } - operator Edge() const { return Edge(e, spec, n); } - }; - - class EdgeIt { - friend class GraphWrapper; - friend class stGraphWrapper; - typename Graph::EdgeIt e; - int spec; - typename Graph::ClassNodeIt n; - public: - EdgeIt() { } - EdgeIt(const typename Graph::EdgeIt& _e, int _spec, - const typename Graph::ClassNodeIt& _n) : - e(_e), spec(_spec), n(_n) { } - EdgeIt(const Invalid& i) : e(i), spec(3), n(i) { } - EdgeIt(const stGraphWrapper& _G) : - e(*(_G.graph)), spec(0), n(INVALID) { - if (!_G.graph->valid(e)) { - spec=1; - _G.graph->first(n, S_CLASS); - if (!_G.graph->valid(n)) { //Ha S ures - spec=2; - _G.graph->first(n, T_CLASS); - if (!_G.graph->valid(n)) { //Ha T ures - spec=3; - } - } - } - } - operator Edge() const { return Edge(e, spec, n); } - }; - - NodeIt& first(NodeIt& i) const { - i=NodeIt(*this); return i; - } - OutEdgeIt& first(OutEdgeIt& i, const Node& p) const { - i=OutEdgeIt(*this, p); return i; - } - InEdgeIt& first(InEdgeIt& i, const Node& p) const { - i=InEdgeIt(*this, p); return i; - } - EdgeIt& first(EdgeIt& i) const { - i=EdgeIt(*this); return i; - } - - NodeIt& next(NodeIt& i) const { - switch (i.spec) { - case 0: - this->graph->next(i.n); - if (!this->graph->valid(i.n)) { - i.spec=1; - } - break; - case 1: - i.spec=2; - break; - case 2: - i.spec=3; - break; - } - return i; - } - OutEdgeIt& next(OutEdgeIt& i) const { - typename Graph::Node v; - switch (i.spec) { - case 0: //normal edge - v=this->graph->aNode(i.e); - this->graph->next(i.e); - if (!this->graph->valid(i.e)) { //Az igazi elek vegere ertunk - if (this->graph->inSClass(v)) { //S, nincs kiel - i.spec=3; - i.n=INVALID; - } else { //T, van kiel - i.spec=2; - i.n=v; - } - } - break; - case 1: //s->vmi - this->graph->next(i.n); - if (!this->graph->valid(i.n)) i.spec=3; - break; - case 2: //vmi->t - i.spec=3; - i.n=INVALID; - break; - } - return i; - } - InEdgeIt& next(InEdgeIt& i) const { - typename Graph::Node v; - switch (i.spec) { - case 0: //normal edge - v=this->graph->aNode(i.e); - this->graph->next(i.e); - if (!this->graph->valid(i.e)) { //Az igazi elek vegere ertunk - if (this->graph->inTClass(v)) { //S, nincs beel - i.spec=3; - i.n=INVALID; - } else { //S, van beel - i.spec=1; - i.n=v; - } - } - break; - case 1: //s->vmi - i.spec=3; - i.n=INVALID; - break; - case 2: //vmi->t - this->graph->next(i.n); - if (!this->graph->valid(i.n)) i.spec=3; - break; - } - return i; - } - - EdgeIt& next(EdgeIt& i) const { - switch (i.spec) { - case 0: - this->graph->next(i.e); - if (!this->graph->valid(i.e)) { - i.spec=1; - this->graph->first(i.n, S_CLASS); - if (!this->graph->valid(i.n)) { - i.spec=2; - this->graph->first(i.n, T_CLASS); - if (!this->graph->valid(i.n)) i.spec=3; - } - } - break; - case 1: - this->graph->next(i.n); - if (!this->graph->valid(i.n)) { - i.spec=2; - this->graph->first(i.n, T_CLASS); - if (!this->graph->valid(i.n)) i.spec=3; - } - break; - case 2: - this->graph->next(i.n); - if (!this->graph->valid(i.n)) i.spec=3; - break; - } - return i; - } - - Node source(const Edge& e) const { - switch (e.spec) { - case 0: - return Node(this->graph->source(e)); - break; - case 1: - return S_NODE; - break; - case 2: - default: - return Node(e.n); - break; - } - } - Node target(const Edge& e) const { - switch (e.spec) { - case 0: - return Node(this->graph->target(e)); - break; - case 1: - return Node(e.n); - break; - case 2: - default: - return T_NODE; - break; - } - } - - bool valid(const Node& n) const { return (n.spec<3); } - bool valid(const Edge& e) const { return (e.spec<3); } - - int nodeNum() const { return this->graph->nodeNum()+2; } - int edgeNum() const { - return this->graph->edgeNum()+this->graph->nodeNum(); - } - - Node aNode(const OutEdgeIt& e) const { return source(e); } - Node aNode(const InEdgeIt& e) const { return target(e); } - Node bNode(const OutEdgeIt& e) const { return target(e); } - Node bNode(const InEdgeIt& e) const { return source(e); } - - void addNode() const { } - void addEdge() const { } - -// Node addNode() const { return Node(this->graph->addNode()); } -// Edge addEdge(const Node& source, const Node& target) const { -// return Edge(this->graph->addEdge(source, target)); } - -// void erase(const Node& i) const { this->graph->erase(i); } -// void erase(const Edge& i) const { this->graph->erase(i); } - -// void clear() const { this->graph->clear(); } - - template class NodeMap : public GraphWrapper::template NodeMap { - typedef typename GraphWrapper::template NodeMap Parent; - T s_value, t_value; - public: - NodeMap(const stGraphWrapper& _G) : Parent(_G), - s_value(), - t_value() { } - NodeMap(const stGraphWrapper& _G, T a) : Parent(_G, a), - s_value(a), - t_value(a) { } - T operator[](const Node& n) const { - switch (n.spec) { - case 0: - return Parent::operator[](n); - break; - case 1: - return s_value; - break; - case 2: - default: - return t_value; - break; - } - } - void set(const Node& n, T t) { - switch (n.spec) { - case 0: - GraphWrapper::template NodeMap::set(n, t); - break; - case 1: - s_value=t; - break; - case 2: - default: - t_value=t; - break; - } - } - }; - - template::template EdgeMap > - class EdgeMap : public Parent { - //typedef typename GraphWrapper::template EdgeMap Parent; - typename GraphWrapper::template NodeMap node_value; - public: - EdgeMap(const stGraphWrapper& _G) : Parent(_G), - node_value(_G) { } - EdgeMap(const stGraphWrapper& _G, T a) : Parent(_G, a), - node_value(_G, a) { } - T operator[](const Edge& e) const { - switch (e.spec) { - case 0: - return Parent::operator[](e); - break; - case 1: - return node_value[e.n]; - break; - case 2: - default: - return node_value[e.n]; - break; - } - } - void set(const Edge& e, T t) { - switch (e.spec) { - case 0: - Parent::set(e, t); - break; - case 1: - node_value.set(e.n, t); - break; - case 2: - default: - node_value.set(e.n, t); - break; - } - } - }; - -// template class EdgeMap : public GraphWrapper::template EdgeMap { -// typedef typename GraphWrapper::template EdgeMap Parent; -// typename GraphWrapper::template NodeMap node_value; -// public: -// EdgeMap(const stGraphWrapper& _G) : Parent(_G), -// node_value(_G) { } -// EdgeMap(const stGraphWrapper& _G, T a) : Parent(_G, a), -// node_value(_G, a) { } -// T operator[](const Edge& e) const { -// switch (e.spec) { -// case 0: -// return Parent::operator[](e); -// break; -// case 1: -// return node_value[e.n]; -// break; -// case 2: -// default: -// return node_value[e.n]; -// break; -// } -// } -// void set(const Edge& e, T t) { -// switch (e.spec) { -// case 0: -// GraphWrapper::template EdgeMap::set(e, t); -// break; -// case 1: -// node_value.set(e.n, t); -// break; -// case 2: -// default: -// node_value.set(e.n, t); -// break; -// } -// } -// }; - - }; - - ///@} - -} //namespace lemon - - -#endif //LEMON_GRAPH_WRAPPER_H - diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/iterator_bfs_demo.cc --- a/src/work/marci/experiment/iterator_bfs_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,322 +0,0 @@ -// -*- c++ -*- -#include -#include -#include - -#include -//#include -#include -#include - -using namespace lemon; -using std::cout; -using std::endl; -using std::string; - -template -class EdgeNameMap { - Graph& graph; - NodeNameMap& node_name_map; -public: - EdgeNameMap(Graph& _graph, NodeNameMap& _node_name_map) : - graph(_graph), node_name_map(_node_name_map) { } - string get(typename Graph::Edge e) const { - return - (node_name_map.get(graph.source(e))+"->"+node_name_map.get(graph.target(e))); - } -}; - -int main (int, char*[]) -{ - //typedef SmartGraph Graph; - typedef ListGraph Graph; - - typedef Graph::Node Node; - typedef Graph::Edge Edge; - - Graph G; - - Node s=G.addNode(); - Node v1=G.addNode(); - Node v2=G.addNode(); - Node v3=G.addNode(); - Node v4=G.addNode(); - Node t=G.addNode(); - - Graph::NodeMap node_name(G); - node_name.set(s, "s"); - node_name.set(v1, "v1"); - node_name.set(v2, "v2"); - node_name.set(v3, "v3"); - node_name.set(v4, "v4"); - node_name.set(t, "t"); - - G.addEdge(s, v1); - G.addEdge(s, v2); - G.addEdge(v1, v2); - G.addEdge(v2, v1); - G.addEdge(v1, v3); - G.addEdge(v3, v2); - G.addEdge(v2, v4); - G.addEdge(v4, v3); - G.addEdge(v3, t); - G.addEdge(v4, t); - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - -// typedef TrivGraphWrapper CGW; -// CGW gw(G); - -// cout << "bfs and dfs demo on the directed graph" << endl; -// for(CGW::NodeIt n=gw.first(); n.valid(); ++n) { -// cout << n << ": "; -// cout << "out edges: "; -// for(CGW::OutEdgeIt e=gw.first(n); e.valid(); ++e) -// cout << e << " "; -// cout << "in edges: "; -// for(CGW::InEdgeIt e=gw.first(n); e.valid(); ++e) -// cout << e << " "; -// cout << endl; -// } - - { - typedef TrivGraphWrapper GW; - GW gw(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(gw, node_name); - - cout << "bfs and dfs iterator demo on the directed graph" << endl; - for(GW::NodeIt n(gw); gw.valid(n); gw.next(n)) { - cout << node_name.get(n) << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << "in edges: "; - for(GW::InEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << endl; - } - - cout << "bfs from s ..." << endl; - BfsIterator5< GW, GW::NodeMap > bfs(gw); - bfs.pushAndSetReached(s); - while (!bfs.finished()) { - //cout << "edge: "; - if (gw.valid(bfs)) { - cout << edge_name.get(bfs) << /*endl*/", " << - node_name.get(gw.aNode(bfs)) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(bfs)) << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(bfs.aNode()) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from s ..." << endl; - DfsIterator5< GW, GW::NodeMap > dfs(gw); - dfs.pushAndSetReached(s); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (gw.valid(dfs)) { - cout << edge_name.get(dfs) << /*endl*/", " << - node_name.get(gw.aNode(dfs)) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(dfs)) << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(dfs.aNode()) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - } - } - - - { - typedef RevGraphWrapper > GW; - GW gw(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(gw, node_name); - - cout << "bfs and dfs iterator demo on the reversed directed graph" << endl; - for(GW::NodeIt n(gw); gw.valid(n); gw.next(n)) { - cout << node_name.get(n) << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << "in edges: "; - for(GW::InEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << endl; - } - - cout << "bfs from t ..." << endl; - BfsIterator5< GW, GW::NodeMap > bfs(gw); - bfs.pushAndSetReached(t); - while (!bfs.finished()) { - //cout << "edge: "; - if (gw.valid(bfs)) { - cout << edge_name.get(bfs) << /*endl*/", " << - node_name.get(gw.aNode(bfs)) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(bfs)) << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(bfs.aNode()) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from t ..." << endl; - DfsIterator5< GW, GW::NodeMap > dfs(gw); - dfs.pushAndSetReached(t); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (gw.valid(dfs)) { - cout << edge_name.get(dfs) << /*endl*/", " << - node_name.get(gw.aNode(dfs)) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(dfs)) << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(dfs.aNode()) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - } - } - - { - //typedef UndirGraphWrapper GW; - typedef UndirGraphWrapper > GW; - GW gw(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(gw, node_name); - - cout << "bfs and dfs iterator demo on the undirected graph" << endl; - for(GW::NodeIt n(gw); gw.valid(n); gw.next(n)) { - cout << node_name.get(n) << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << "in edges: "; - for(GW::InEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << endl; - } -// for(GW::EdgeIt e=gw.first(); gw.valid(e); gw.next(e)) { -// cout << edge_name.get(e) << " "; -// } -// cout << endl; - - cout << "bfs from t ..." << endl; - BfsIterator5< GW, GW::NodeMap > bfs(gw); - bfs.pushAndSetReached(t); - while (!bfs.finished()) { - //cout << "edge: "; - if (gw.valid(GW::OutEdgeIt(bfs))) { - cout << edge_name.get(GW::OutEdgeIt(bfs)) << /*endl*/", " << - node_name.get(gw.aNode(bfs)) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(bfs)) << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(bfs.aNode()) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from t ..." << endl; - DfsIterator5< GW, GW::NodeMap > dfs(gw); - dfs.pushAndSetReached(t); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (gw.valid(GW::OutEdgeIt(dfs))) { - cout << edge_name.get(GW::OutEdgeIt(dfs)) << /*endl*/", " << - node_name.get(gw.aNode(dfs)) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(dfs)) << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(dfs.aNode()) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - } - } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/iterator_bfs_demo_1.cc --- a/src/work/marci/experiment/iterator_bfs_demo_1.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,322 +0,0 @@ -// -*- c++ -*- -#include -#include -#include - -#include -#include -#include -#include - -using namespace lemon; -using std::cout; -using std::endl; -using std::string; - -template -class EdgeNameMap { - Graph& graph; - NodeNameMap& node_name_map; -public: - EdgeNameMap(Graph& _graph, NodeNameMap& _node_name_map) : - graph(_graph), node_name_map(_node_name_map) { } - string get(typename Graph::Edge e) const { - return - (node_name_map.get(graph.source(e))+"->"+node_name_map.get(graph.target(e))); - } -}; - -int main (int, char*[]) -{ - //typedef SmartGraph Graph; - typedef ListGraph Graph; - - typedef Graph::Node Node; - typedef Graph::Edge Edge; - - Graph G; - - Node s=G.addNode(); - Node v1=G.addNode(); - Node v2=G.addNode(); - Node v3=G.addNode(); - Node v4=G.addNode(); - Node t=G.addNode(); - - Graph::NodeMap node_name(G); - node_name.set(s, "s"); - node_name.set(v1, "v1"); - node_name.set(v2, "v2"); - node_name.set(v3, "v3"); - node_name.set(v4, "v4"); - node_name.set(t, "t"); - - G.addEdge(s, v1); - G.addEdge(s, v2); - G.addEdge(v1, v2); - G.addEdge(v2, v1); - G.addEdge(v1, v3); - G.addEdge(v3, v2); - G.addEdge(v2, v4); - G.addEdge(v4, v3); - G.addEdge(v3, t); - G.addEdge(v4, t); - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - -// typedef TrivGraphWrapper CGW; -// CGW gw(G); - -// cout << "bfs and dfs demo on the directed graph" << endl; -// for(CGW::NodeIt n=gw.first(); n.valid(); ++n) { -// cout << n << ": "; -// cout << "out edges: "; -// for(CGW::OutEdgeIt e=gw.first(n); e.valid(); ++e) -// cout << e << " "; -// cout << "in edges: "; -// for(CGW::InEdgeIt e=gw.first(n); e.valid(); ++e) -// cout << e << " "; -// cout << endl; -// } - - { - typedef TrivGraphWrapper GW; - GW gw(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(gw, node_name); - - cout << "bfs and dfs iterator demo on the directed graph" << endl; - for(GW::NodeIt n(gw); gw.valid(n); gw.next(n)) { - cout << node_name.get(n) << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << "in edges: "; - for(GW::InEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << endl; - } - - cout << "bfs from s ..." << endl; - BfsIterator5< GW, GW::NodeMap > bfs(gw); - bfs.pushAndSetReached(s); - while (!bfs.finished()) { - //cout << "edge: "; - if (gw.valid(bfs)) { - cout << edge_name.get(bfs) << /*endl*/", " << - node_name.get(gw.aNode(bfs)) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(bfs)) << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(bfs.aNode()) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from s ..." << endl; - DfsIterator5< GW, GW::NodeMap > dfs(gw); - dfs.pushAndSetReached(s); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (gw.valid(dfs)) { - cout << edge_name.get(dfs) << /*endl*/", " << - node_name.get(gw.aNode(dfs)) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(dfs)) << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(dfs.aNode()) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - } - } - - - { - typedef RevGraphWrapper > GW; - GW gw(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(gw, node_name); - - cout << "bfs and dfs iterator demo on the reversed directed graph" << endl; - for(GW::NodeIt n(gw); gw.valid(n); gw.next(n)) { - cout << node_name.get(n) << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << "in edges: "; - for(GW::InEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << endl; - } - - cout << "bfs from t ..." << endl; - BfsIterator5< GW, GW::NodeMap > bfs(gw); - bfs.pushAndSetReached(t); - while (!bfs.finished()) { - //cout << "edge: "; - if (gw.valid(bfs)) { - cout << edge_name.get(bfs) << /*endl*/", " << - node_name.get(gw.aNode(bfs)) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(bfs)) << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(bfs.aNode()) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from t ..." << endl; - DfsIterator5< GW, GW::NodeMap > dfs(gw); - dfs.pushAndSetReached(t); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (gw.valid(dfs)) { - cout << edge_name.get(dfs) << /*endl*/", " << - node_name.get(gw.aNode(dfs)) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(dfs)) << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(dfs.aNode()) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - } - } - - { - //typedef UndirGraphWrapper GW; - typedef UndirGraphWrapper > GW; - GW gw(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(gw, node_name); - - cout << "bfs and dfs iterator demo on the undirected graph" << endl; - for(GW::NodeIt n(gw); gw.valid(n); gw.next(n)) { - cout << node_name.get(n) << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << "in edges: "; - for(GW::InEdgeIt e(gw, n); gw.valid(e); gw.next(e)) - cout << edge_name.get(e) << " "; - cout << endl; - } -// for(GW::EdgeIt e=gw.first(); gw.valid(e); gw.next(e)) { -// cout << edge_name.get(e) << " "; -// } -// cout << endl; - - cout << "bfs from t ..." << endl; - BfsIterator5< GW, GW::NodeMap > bfs(gw); - bfs.pushAndSetReached(t); - while (!bfs.finished()) { - //cout << "edge: "; - if (gw.valid(GW::OutEdgeIt(bfs))) { - cout << edge_name.get(GW::OutEdgeIt(bfs)) << /*endl*/", " << - node_name.get(gw.aNode(bfs)) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(bfs)) << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(bfs.aNode()) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from t ..." << endl; - DfsIterator5< GW, GW::NodeMap > dfs(gw); - dfs.pushAndSetReached(t); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (gw.valid(GW::OutEdgeIt(dfs))) { - cout << edge_name.get(GW::OutEdgeIt(dfs)) << /*endl*/", " << - node_name.get(gw.aNode(dfs)) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name.get(gw.bNode(dfs)) << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name.get(dfs.aNode()) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - } - } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/list_graph.h --- a/src/work/marci/experiment/list_graph.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,570 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_LIST_GRAPH_H -#define LEMON_LIST_GRAPH_H - -#include -#include - -#include - -namespace lemon { - - template - int count(It it) { - int i=0; - for( ; it.valid(); ++it) { ++i; } - return i; - } - - class ListGraph { - class node_item; - class edge_item; - public: - class Node; - class NodeIt; - class Edge; - class EdgeIt; - class OutEdgeIt; - class InEdgeIt; - class SymEdgeIt; - template class NodeMap; - template class EdgeMap; - private: - template friend class NodeMap; - template friend class EdgeMap; - - template - class NodeMap { - const ListGraph& G; - std::vector container; - public: - typedef T Value; - typedef Node Key; - NodeMap(const ListGraph& _G) : G(_G), container(G.node_id) { } - NodeMap(const ListGraph& _G, T a) : - G(_G), container(G.node_id, a) { } - void set(Node n, T a) { container[/*G.id(n)*/n.node->id]=a; } - T get(Node n) const { return container[/*G.id(n)*/n.node->id]; } - typename std::vector::reference operator[](Node n) { - return container[/*G.id(n)*/n.node->id]; } - typename std::vector::const_reference operator[](Node n) const { - return container[/*G.id(n)*/n.node->id]; - } - void update() { container.resize(G.node_id); } - void update(T a) { container.resize(G.node_id, a); } - }; - - template - class EdgeMap { - const ListGraph& G; - std::vector container; - public: - typedef T Value; - typedef Edge Key; - EdgeMap(const ListGraph& _G) : G(_G), container(G.edge_id) { } - EdgeMap(const ListGraph& _G, T a) : - G(_G), container(G.edge_id, a) { } - void set(Edge e, T a) { container[/*G.id(e)*/e.edge->id]=a; } - T get(Edge e) const { return container[/*G.id(e)*/e.edge->id]; } - typename std::vector::reference operator[](Edge e) { - return container[/*G.id(e)*/e.edge->id]; } - typename std::vector::const_reference operator[](Edge e) const { - return container[/*G.id(e)*/e.edge->id]; - } - void update() { container.resize(G.edge_id); } - void update(T a) { container.resize(G.edge_id, a); } - }; - - int node_id; - int edge_id; - int _node_num; - int _edge_num; - - node_item* _first_node; - node_item* _last_node; - - class node_item { - friend class ListGraph; - template friend class NodeMap; - - friend class Node; - friend class NodeIt; - friend class Edge; - friend class EdgeIt; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class SymEdgeIt; - friend std::ostream& operator<<(std::ostream& os, const Node& i); - friend std::ostream& operator<<(std::ostream& os, const Edge& i); - //ListGraph* G; - int id; - edge_item* _first_out_edge; - edge_item* _last_out_edge; - edge_item* _first_in_edge; - edge_item* _last_in_edge; - node_item* _next_node; - node_item* _prev_node; - public: - node_item() { } - }; - - class edge_item { - friend class ListGraph; - template friend class EdgeMap; - - friend class Node; - friend class NodeIt; - friend class Edge; - friend class EdgeIt; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class SymEdgeIt; - friend std::ostream& operator<<(std::ostream& os, const Edge& i); - //ListGraph* G; - int id; - node_item* _source; - node_item* _target; - edge_item* _next_out; - edge_item* _prev_out; - edge_item* _next_in; - edge_item* _prev_in; - public: - edge_item() { } - }; - - node_item* _add_node() { - node_item* p=new node_item; - p->id=node_id++; - p->_first_out_edge=0; - p->_last_out_edge=0; - p->_first_in_edge=0; - p->_last_in_edge=0; - p->_prev_node=_last_node; - p->_next_node=0; - if (_last_node) _last_node->_next_node=p; - _last_node=p; - if (!_first_node) _first_node=p; - - ++_node_num; - return p; - } - - edge_item* _add_edge(node_item* _source, node_item* _target) { - edge_item* e=new edge_item; - e->id=edge_id++; - e->_source=_source; - e->_target=_target; - - e->_prev_out=_source->_last_out_edge; - if (_source->_last_out_edge) (_source->_last_out_edge)->_next_out=e; - _source->_last_out_edge=e; - if (!_source->_first_out_edge) _source->_first_out_edge=e; - e->_next_out=0; - - e->_prev_in=_target->_last_in_edge; - if (_target->_last_in_edge) (_target->_last_in_edge)->_next_in=e; - _target->_last_in_edge=e; - if (!_target->_first_in_edge) { _target->_first_in_edge=e; } - e->_next_in=0; - - ++_edge_num; - return e; - } - - //deletes a node which has no out edge and no in edge - void _delete_node(node_item* v) { - if (v->_next_node) (v->_next_node)->_prev_node=v->_prev_node; else - _last_node=v->_prev_node; - if (v->_prev_node) (v->_prev_node)->_next_node=v->_next_node; else - _first_node=v->_next_node; - - delete v; - --_node_num; - } - - void _delete_edge(edge_item* e) { - if (e->_next_out) (e->_next_out)->_prev_out=e->_prev_out; else - (e->_source)->_last_out_edge=e->_prev_out; - if (e->_prev_out) (e->_prev_out)->_next_out=e->_next_out; else - (e->_source)->_first_out_edge=e->_next_out; - if (e->_next_in) (e->_next_in)->_prev_in=e->_prev_in; else - (e->_target)->_last_in_edge=e->_prev_in; - if (e->_prev_in) (e->_prev_in)->_next_in=e->_next_in; else - (e->_target)->_first_in_edge=e->_next_in; - - delete e; - --_edge_num; - } - - void _set_source(edge_item* e, node_item* _source) { - if (e->_next_out) (e->_next_out)->_prev_out=e->_prev_out; else - (e->_source)->_last_out_edge=e->_prev_out; - if (e->_prev_out) (e->_prev_out)->_next_out=e->_next_out; else - (e->_source)->_first_out_edge=e->_next_out; - - e->_source=_source; - - e->_prev_out=_source->_last_out_edge; - if (_source->_last_out_edge) (_source->_last_out_edge)->_next_out=e; - _source->_last_out_edge=e; - if (!_source->_first_out_edge) _source->_first_out_edge=e; - e->_next_out=0; - } - - void _set_target(edge_item* e, node_item* _target) { - if (e->_next_in) (e->_next_in)->_prev_in=e->_prev_in; else - (e->_target)->_last_in_edge=e->_prev_in; - if (e->_prev_in) (e->_prev_in)->_next_in=e->_next_in; else - (e->_target)->_first_in_edge=e->_next_in; - - e->_target=_target; - - e->_prev_in=_target->_last_in_edge; - if (_target->_last_in_edge) (_target->_last_in_edge)->_next_in=e; - _target->_last_in_edge=e; - if (!_target->_first_in_edge) { _target->_first_in_edge=e; } - e->_next_in=0; - } - - public: - - /* default constructor */ - - ListGraph() : node_id(0), edge_id(0), _node_num(0), _edge_num(0), _first_node(0), _last_node(0) { } - - ~ListGraph() { - while (first().valid()) erase(first()); - } - - int nodeNum() const { return _node_num; } - int edgeNum() const { return _edge_num; } - - /* functions to construct iterators from the graph, or from each other */ - - //NodeIt firstNode() const { return NodeIt(*this); } - //EdgeIt firstEdge() const { return EdgeIt(*this); } - - //OutEdgeIt firstOutEdge(const Node v) const { return OutEdgeIt(v); } - //InEdgeIt firstInEdge(const Node v) const { return InEdgeIt(v); } - //SymEdgeIt firstSymEdge(const Node v) const { return SymEdgeIt(v); } - Node source(Edge e) const { return e.sourceNode(); } - Node target(Edge e) const { return e.targetNode(); } - - Node aNode(const OutEdgeIt& e) const { return e.aNode(); } - Node aNode(const InEdgeIt& e) const { return e.aNode(); } - Node aNode(const SymEdgeIt& e) const { return e.aNode(); } - - Node bNode(const OutEdgeIt& e) const { return e.bNode(); } - Node bNode(const InEdgeIt& e) const { return e.bNode(); } - Node bNode(const SymEdgeIt& e) const { return e.bNode(); } - - //Node invalid_node() { return Node(); } - //Edge invalid_edge() { return Edge(); } - //OutEdgeIt invalid_out_edge() { return OutEdgeIt(); } - //InEdgeIt invalid_in_edge() { return InEdgeIt(); } - //SymEdgeIt invalid_sym_edge() { return SymEdgeIt(); } - - /* same methods in other style */ - /* for experimental purpose */ - - NodeIt& /*getF*/first(NodeIt& v) const { - v=NodeIt(*this); return v; } - EdgeIt& /*getF*/first(EdgeIt& e) const { - e=EdgeIt(*this); return e; } - OutEdgeIt& /*getF*/first(OutEdgeIt& e, Node v) const { - e=OutEdgeIt(*this, v); return e; } - InEdgeIt& /*getF*/first(InEdgeIt& e, Node v) const { - e=InEdgeIt(*this, v); return e; } - SymEdgeIt& /*getF*/first(SymEdgeIt& e, Node v) const { - e=SymEdgeIt(*this, v); return e; } - //void getSource(Node& n, const Edge& e) const { n=source(e); } - //void getTarget(Node& n, const Edge& e) const { n=target(e); } - - //void getANode(Node& n, const OutEdgeIt& e) const { n=e.aNode(); } - //void getANode(Node& n, const InEdgeIt& e) const { n=e.aNode(); } - //void getANode(Node& n, const SymEdgeIt& e) const { n=e.aNode(); } - //void getBNode(Node& n, const OutEdgeIt& e) const { n=e.bNode(); } - //void getBNode(Node& n, const InEdgeIt& e) const { n=e.bNode(); } - //void getBNode(Node& n, const SymEdgeIt& e) const { n=e.bNode(); } - //void get_invalid(Node& n) { n=Node(); } - //void get_invalid(Edge& e) { e=Edge(); } - //void get_invalid(OutEdgeIt& e) { e=OutEdgeIt(); } - //void get_invalid(InEdgeIt& e) { e=InEdgeIt(); } - //void get_invalid(SymEdgeIt& e) { e=SymEdgeIt(); } - - template< typename It > - It first() const { - It e; - /*getF*/first(e); - return e; - } - - template< typename It > - It first(Node v) const { - It e; - /*getF*/first(e, v); - return e; - } - - bool valid(Node n) const { return n.valid(); } - bool valid(Edge e) const { return e.valid(); } - -// template It getNext(It it) const { -// It tmp(it); next(tmp); return tmp; } -// NodeIt& next(NodeIt& it) const { return ++it; } -// EdgeIt& next(EdgeIt& it) const { return ++it; } -// OutEdgeIt& next(OutEdgeIt& it) const { return ++it; } -// InEdgeIt& next(InEdgeIt& it) const { return ++it; } -// SymEdgeIt& next(SymEdgeIt& it) const { return ++it; } -// template It& next(It& it) const { return ++it; } - template It& next(It& it) const { ++it; return it; } - - - /* for getting id's of graph objects */ - /* these are important for the implementation of property vectors */ - - int id(Node v) const { return v.node->id; } - int id(Edge e) const { return e.edge->id; } - - /* adding nodes and edges */ - - Node addNode() { return Node(_add_node()); } - Edge addEdge(Node u, Node v) { - return Edge(_add_edge(u.node, v.node)); - } - - void erase(Node i) { - while (first(i).valid()) erase(first(i)); - while (first(i).valid()) erase(first(i)); - _delete_node(i.node); - } - - void erase(Edge e) { _delete_edge(e.edge); } - - void clear() { - while (first().valid()) erase(first()); - } - - void setSource(Edge e, Node source) { - _set_source(e.edge, source.node); - } - - void setTarget(Edge e, Node target) { - _set_target(e.edge, target.node); - } - - /* stream operations, for testing purpose */ - - friend std::ostream& operator<<(std::ostream& os, const Node& i) { - os << i.node->id; return os; - } - friend std::ostream& operator<<(std::ostream& os, const Edge& i) { - os << "(" << i.edge->_source->id << "--" << i.edge->id << "->" << i.edge->_target->id << ")"; - return os; - } - - class Node { - friend class ListGraph; - template friend class NodeMap; - - friend class Edge; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class SymEdgeIt; - //public: //FIXME: It is required by op= of NodeIt - protected: - node_item* node; - protected: - friend int ListGraph::id(Node v) const; - public: - Node() /*: node(0)*/ { } - Node(const Invalid&) : node(0) { } - protected: - Node(node_item* _node) : node(_node) { } - bool valid() const { return (node); } - public: - //void makeInvalid() { node=0; } - friend bool operator==(Node u, Node v) { return v.node==u.node; } - friend bool operator!=(Node u, Node v) { return v.node!=u.node; } - friend std::ostream& operator<<(std::ostream& os, const Node& i); - }; - - class NodeIt : public Node { - friend class ListGraph; - //protected: - public: //for everybody but marci - NodeIt(const ListGraph& G) : Node(G._first_node) { } - public: - NodeIt() : Node() { } - NodeIt(const Invalid& i) : Node(i) { } - protected: - NodeIt(node_item* v) : Node(v) { } - NodeIt& operator++() { node=node->_next_node; return *this; } - //FIXME:: - // NodeIt& operator=(const Node& e) - // { node=e.node; return *this; } - }; - - class Edge { - friend class ListGraph; - template friend class EdgeMap; - - friend class Node; - friend class NodeIt; - protected: - edge_item* edge; - friend int ListGraph::id(Edge e) const; - public: - Edge() /*: edge(0)*/ { } - Edge(const Invalid&) : edge(0) { } - //Edge() { } - protected: - Edge(edge_item* _edge) : edge(_edge) { } - bool valid() const { return (edge); } - public: - //void makeInvalid() { edge=0; } - friend bool operator==(Edge u, Edge v) { return v.edge==u.edge; } - friend bool operator!=(Edge u, Edge v) { return v.edge!=u.edge; } - protected: - Node sourceNode() const { return Node(edge->_source); } - Node targetNode() const { return Node(edge->_target); } - public: - friend std::ostream& operator<<(std::ostream& os, const Edge& i); - }; - - class EdgeIt : public Edge { - friend class ListGraph; - //protected: - public: //for alpar - EdgeIt(const ListGraph& G) { - node_item* v=G._first_node; - if (v) edge=v->_first_out_edge; else edge=0; - while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; } - } - public: - EdgeIt() : Edge() { } - EdgeIt(const Invalid& i) : Edge(i) { } - protected: - EdgeIt(edge_item* _e) : Edge(_e) { } - EdgeIt& operator++() { - node_item* v=edge->_source; - edge=edge->_next_out; - while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; } - return *this; - } - }; - - class OutEdgeIt : public Edge { - friend class ListGraph; - //node_item* v; - //protected: - protected: //for alpar - OutEdgeIt(const Node& _v) /*: v(_v.node)*/ { edge=_v.node->_first_out_edge; } - public: - OutEdgeIt() : Edge()/*, v(0)*/ { } - OutEdgeIt(const Invalid& i) : Edge(i) { } - OutEdgeIt(const ListGraph&, Node _v) /*: v(_v.node)*/ { edge=_v.node->_first_out_edge; } - protected: - OutEdgeIt& operator++() { edge=edge->_next_out; return *this; } - protected: - Node aNode() const { return Node(edge->_source); } - Node bNode() const { return Node(edge->_target); } - }; - - class InEdgeIt : public Edge { - friend class ListGraph; - //node_item* v; - //protected: - protected: //for alpar - InEdgeIt(const Node& _v) /*: v(_v.node)*/ { edge=_v.node->_first_in_edge; } - public: - InEdgeIt() : Edge()/*, v(0)*/ { } - InEdgeIt(const Invalid& i) : Edge(i) { } - InEdgeIt(const ListGraph&, Node _v) /*: v(_v.node)*/ { edge=_v.node->_first_in_edge; } - protected: - InEdgeIt& operator++() { edge=edge->_next_in; return *this; } - protected: - Node aNode() const { return Node(edge->_target); } - Node bNode() const { return Node(edge->_source); } - }; - - class SymEdgeIt : public Edge { - friend class ListGraph; - bool out_or_in; //1 iff out, 0 iff in - //node_item* v; - //protected: - public: //for alpar - SymEdgeIt(const Node& _v) /*: v(_v.node)*/ { - out_or_in=1; - edge=_v.node->_first_out_edge; - if (!edge) { edge=_v.node->_first_in_edge; out_or_in=0; } - } - public: - SymEdgeIt() : Edge() /*, v(0)*/ { } - SymEdgeIt(const Invalid& i) : Edge(i) { } - SymEdgeIt(const ListGraph&, Node _v) /*: v(_v.node)*/ { - out_or_in=1; - edge=_v.node->_first_out_edge; - if (!edge) { edge=_v.node->_first_in_edge; out_or_in=0; } - } - protected: - SymEdgeIt& operator++() { - if (out_or_in) { - node_item* v=edge->_source; - edge=edge->_next_out; - if (!edge) { out_or_in=0; edge=v->_first_in_edge; } - } else { - edge=edge->_next_in; - } - return *this; - } - protected: - Node aNode() const { - return (out_or_in) ? Node(edge->_source) : Node(edge->_target); } - Node bNode() const { - return (out_or_in) ? Node(edge->_target) : Node(edge->_source); } - }; - - }; - -// template< typename T > -// T ListGraph::first() const { -// std::cerr << "Invalid use of template T ListGraph::first();" << std::endl; -// return T(); -// } - -// template<> -// ListGraph::NodeIt ListGraph::first() const { -// return firstNode(); -// } - -// template<> -// ListGraph::EdgeIt ListGraph::first() const { -// return firstEdge(); -// } - -// template< typename T > -// T ListGraph::first(ListGraph::Node v) const { -// std::cerr << "Invalid use of template T ListGraph::first(ListGRaph::Node);" << std::endl; -// return T(); -// } - -// template<> -// ListGraph::OutEdgeIt ListGraph::first(const ListGraph::Node v) const { -// return firstOutEdge(v); -// } - -// template<> -// ListGraph::InEdgeIt ListGraph::first(const ListGraph::Node v) const { -// return firstInEdge(v); -// } - -// template<> -// ListGraph::SymEdgeIt ListGraph::first(const ListGraph::Node v) const { -// return firstSymEdge(v); -// } - - -} //namespace lemon - -#endif //LEMON_LIST_GRAPH_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/experiment/makefile --- a/src/work/marci/experiment/makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,35 +0,0 @@ -INCLUDEDIRS ?= -I. -I../../../include -I.. -CXXFLAGS = -g -O3 -W -Wall $(INCLUDEDIRS) -ansi -pedantic - -BINARIES ?= iterator_bfs_demo iterator_bfs_demo_1 edmonds_karp_demo edmonds_karp_demo_1 - -# Hat, ez elismerem, hogy nagyon ronda, de mukodik minden altalam -# ismert rendszeren :-) (Misi) -CXX := $(shell type -p g++-3.3 || type -p g++-3.2 || type -p g++-3.0 || type -p g++-3 || echo g++) -CC := $(CXX) - - -all: $(BINARIES) - -################ -# Minden binarishoz egy sor, felsorolva, hogy mely object file-okbol -# all elo. -# Kiveve ha siman file.cc -> file esetrol van szo, amikor is nem kell -# irni semmit. - -#proba: proba.o seged.o - -################ - - -.depend dep depend: - -$(CXX) $(INCLUDEDIRS) -M $(BINARIES:=.cc) > .depend #2>/dev/null -# -$(CXX) $(CXXFLAGS) -M *.cc > .depend - -makefile: .depend -sinclude .depend - -clean: - $(RM) *.o $(BINARIES) .depend - -.PHONY: all clean dep depend diff -r ee5959aa4410 -r c280de819a73 src/work/marci/flow-1.dim --- a/src/work/marci/flow-1.dim Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,102004 +0,0 @@ -c LEDA maxflow problem -p max 1000 102000 -n 1 s -n 1000 t -a 1 745 10 -a 1 551 6 -a 1 733 5 -a 1 708 7 -a 1 833 9 -a 1 481 8 -a 1 397 4 -a 1 548 11 -a 1 732 3 -a 1 795 11 -a 1 395 4 -a 1 681 5 -a 1 327 6 -a 1 502 6 -a 1 322 4 -a 1 94 6 -a 1 336 2 -a 1 494 4 -a 1 250 8 -a 1 185 2 -a 1 413 3 -a 1 146 4 -a 1 548 2 -a 1 626 9 -a 1 902 10 -a 1 895 7 -a 1 752 8 -a 1 40 9 -a 1 290 7 -a 1 739 9 -a 1 402 10 -a 1 11 11 -a 1 265 6 -a 1 110 3 -a 1 718 3 -a 1 73 2 -a 1 591 3 -a 1 90 4 -a 1 620 7 -a 1 298 6 -a 1 884 11 -a 1 978 6 -a 1 186 3 -a 1 491 5 -a 1 276 5 -a 1 279 3 -a 1 826 11 -a 1 769 3 -a 1 529 11 -a 1 157 10 -a 1 674 3 -a 1 534 3 -a 1 782 8 -a 1 551 9 -a 1 405 4 -a 1 509 2 -a 1 590 7 -a 1 694 7 -a 1 224 2 -a 1 992 10 -a 1 704 11 -a 1 488 5 -a 1 77 8 -a 1 398 9 -a 1 561 11 -a 1 667 4 -a 1 487 10 -a 1 156 4 -a 1 964 5 -a 1 347 3 -a 1 146 2 -a 1 918 5 -a 1 532 11 -a 1 636 2 -a 1 169 10 -a 1 811 4 -a 1 438 10 -a 1 937 2 -a 1 315 3 -a 1 424 3 -a 1 69 11 -a 1 988 9 -a 1 957 4 -a 1 851 4 -a 1 515 11 -a 1 337 3 -a 1 335 2 -a 2 80 4 -a 2 7 7 -a 2 558 10 -a 2 47 6 -a 2 710 6 -a 2 22 2 -a 2 124 2 -a 2 83 6 -a 2 582 2 -a 2 790 3 -a 2 570 4 -a 2 737 3 -a 2 730 8 -a 2 916 1 -a 2 882 3 -a 2 623 6 -a 2 423 7 -a 2 494 10 -a 2 791 10 -a 2 209 9 -a 2 931 4 -a 2 703 5 -a 2 523 9 -a 2 330 10 -a 2 771 6 -a 2 487 2 -a 2 262 8 -a 2 597 5 -a 2 599 4 -a 2 932 7 -a 2 56 9 -a 2 605 9 -a 2 465 6 -a 2 103 2 -a 2 290 4 -a 2 486 9 -a 2 226 10 -a 2 373 9 -a 2 43 3 -a 2 942 7 -a 2 780 5 -a 2 720 5 -a 2 833 10 -a 2 637 7 -a 2 318 4 -a 2 231 5 -a 2 106 3 -a 2 84 5 -a 2 440 2 -a 2 12 1 -a 2 786 2 -a 2 962 10 -a 2 341 7 -a 2 533 10 -a 2 424 6 -a 2 603 2 -a 2 105 2 -a 2 400 5 -a 2 177 4 -a 2 12 6 -a 2 456 4 -a 2 781 5 -a 2 477 10 -a 2 558 6 -a 2 46 1 -a 2 962 8 -a 2 783 7 -a 2 418 3 -a 2 773 9 -a 2 335 7 -a 2 760 10 -a 2 469 9 -a 2 143 6 -a 2 372 7 -a 2 786 3 -a 2 374 8 -a 2 478 2 -a 2 870 5 -a 2 813 2 -a 2 489 8 -a 2 631 1 -a 2 750 5 -a 2 830 10 -a 2 139 10 -a 2 150 8 -a 2 408 8 -a 2 244 10 -a 2 549 7 -a 2 584 1 -a 2 255 9 -a 2 340 10 -a 2 731 9 -a 2 537 6 -a 2 385 2 -a 2 669 7 -a 2 295 8 -a 3 803 5 -a 3 649 8 -a 3 44 5 -a 3 113 9 -a 3 384 7 -a 3 512 1 -a 3 256 3 -a 3 755 7 -a 3 273 10 -a 3 629 10 -a 3 208 3 -a 3 118 3 -a 3 417 8 -a 3 697 5 -a 3 749 7 -a 3 142 10 -a 3 502 5 -a 3 887 5 -a 3 291 2 -a 3 909 2 -a 3 106 1 -a 3 840 6 -a 3 468 4 -a 3 361 5 -a 3 819 8 -a 3 807 8 -a 3 67 2 -a 3 332 1 -a 3 167 8 -a 3 735 3 -a 3 626 7 -a 3 969 10 -a 3 359 6 -a 3 669 1 -a 3 58 5 -a 3 742 8 -a 3 156 1 -a 3 313 1 -a 3 473 2 -a 3 429 2 -a 3 941 3 -a 3 680 8 -a 3 546 4 -a 3 333 3 -a 3 352 10 -a 3 270 7 -a 3 474 10 -a 3 853 3 -a 3 133 3 -a 3 765 1 -a 3 737 3 -a 3 238 8 -a 3 580 3 -a 3 180 2 -a 3 598 3 -a 3 374 3 -a 3 986 10 -a 3 665 10 -a 3 705 7 -a 3 129 3 -a 3 375 8 -a 3 307 2 -a 3 73 4 -a 3 734 5 -a 3 975 6 -a 3 130 7 -a 3 451 10 -a 3 107 6 -a 3 442 9 -a 3 923 9 -a 3 535 8 -a 3 358 8 -a 3 579 7 -a 3 56 9 -a 3 690 1 -a 3 930 1 -a 3 326 10 -a 3 140 10 -a 3 759 1 -a 3 458 5 -a 3 904 10 -a 3 471 10 -a 3 695 2 -a 3 459 1 -a 3 651 6 -a 3 269 3 -a 3 832 8 -a 3 612 8 -a 3 933 5 -a 3 513 5 -a 3 740 7 -a 3 283 4 -a 3 819 2 -a 3 813 2 -a 3 769 3 -a 3 942 3 -a 3 443 5 -a 3 875 1 -a 3 360 1 -a 3 341 5 -a 3 385 2 -a 3 717 1 -a 3 919 4 -a 3 441 5 -a 3 383 2 -a 3 825 4 -a 3 766 10 -a 4 522 2 -a 4 559 9 -a 4 199 4 -a 4 401 1 -a 4 5 3 -a 4 893 6 -a 4 859 7 -a 4 655 1 -a 4 137 8 -a 4 666 8 -a 4 243 1 -a 4 45 3 -a 4 154 2 -a 4 982 7 -a 4 328 8 -a 4 972 10 -a 4 770 6 -a 4 319 3 -a 4 717 4 -a 4 688 7 -a 4 761 6 -a 4 567 5 -a 4 23 5 -a 4 78 9 -a 4 952 5 -a 4 739 8 -a 4 996 1 -a 4 368 8 -a 4 97 5 -a 4 796 10 -a 4 109 6 -a 4 618 2 -a 4 330 8 -a 4 307 8 -a 4 335 2 -a 4 175 8 -a 4 852 8 -a 4 989 7 -a 4 312 2 -a 4 494 10 -a 4 207 8 -a 4 356 6 -a 4 647 8 -a 4 165 1 -a 4 683 2 -a 4 595 5 -a 4 934 1 -a 4 287 2 -a 4 597 8 -a 4 738 4 -a 4 853 1 -a 4 619 9 -a 4 815 1 -a 4 780 10 -a 4 334 8 -a 4 787 9 -a 4 123 1 -a 4 430 9 -a 4 558 8 -a 4 231 1 -a 4 24 2 -a 4 888 10 -a 4 537 8 -a 4 17 7 -a 4 198 9 -a 4 712 4 -a 4 869 1 -a 4 162 5 -a 4 338 2 -a 4 369 4 -a 4 354 5 -a 4 984 1 -a 4 533 5 -a 4 13 4 -a 4 554 5 -a 4 442 2 -a 4 840 6 -a 4 15 4 -a 4 727 3 -a 4 669 4 -a 4 633 5 -a 4 518 5 -a 4 424 10 -a 4 966 8 -a 4 280 1 -a 4 547 3 -a 4 372 7 -a 4 837 9 -a 4 777 8 -a 4 395 6 -a 4 700 2 -a 4 290 9 -a 5 411 5 -a 5 897 10 -a 5 255 7 -a 5 35 2 -a 5 999 4 -a 5 592 2 -a 5 403 5 -a 5 328 1 -a 5 552 9 -a 5 935 10 -a 5 340 2 -a 5 81 2 -a 5 352 5 -a 5 329 10 -a 5 921 7 -a 5 366 4 -a 5 32 1 -a 5 565 7 -a 5 999 4 -a 5 549 5 -a 5 988 4 -a 5 940 1 -a 5 828 6 -a 5 510 7 -a 5 287 1 -a 5 640 7 -a 5 263 5 -a 5 681 1 -a 5 316 9 -a 5 552 5 -a 5 68 10 -a 5 188 6 -a 5 528 1 -a 5 322 5 -a 5 222 6 -a 5 502 1 -a 5 914 7 -a 5 624 2 -a 5 829 10 -a 5 441 6 -a 5 534 3 -a 5 145 10 -a 5 521 5 -a 5 886 10 -a 5 473 3 -a 5 417 7 -a 5 227 10 -a 5 504 9 -a 5 981 2 -a 5 201 10 -a 5 28 3 -a 5 945 3 -a 5 117 3 -a 5 855 7 -a 5 430 5 -a 5 403 4 -a 5 471 3 -a 5 692 4 -a 5 60 7 -a 5 786 7 -a 5 219 1 -a 5 127 2 -a 5 973 10 -a 5 746 8 -a 5 448 4 -a 5 171 8 -a 5 223 6 -a 5 337 8 -a 5 794 6 -a 5 28 10 -a 5 777 7 -a 5 304 4 -a 5 172 4 -a 5 274 1 -a 5 165 8 -a 5 644 4 -a 5 690 2 -a 5 391 7 -a 5 124 5 -a 5 647 8 -a 5 592 4 -a 5 151 6 -a 5 567 10 -a 5 708 7 -a 5 996 8 -a 5 86 3 -a 5 452 8 -a 5 664 8 -a 5 145 6 -a 5 213 5 -a 5 882 3 -a 5 271 9 -a 5 161 1 -a 5 604 10 -a 5 719 6 -a 5 331 1 -a 5 826 7 -a 5 31 3 -a 5 101 6 -a 5 853 3 -a 5 808 4 -a 5 404 2 -a 5 57 3 -a 5 568 4 -a 5 644 5 -a 5 746 2 -a 5 958 7 -a 5 767 8 -a 5 368 2 -a 6 525 8 -a 6 917 7 -a 6 934 9 -a 6 208 5 -a 6 898 9 -a 6 906 6 -a 6 294 6 -a 6 325 5 -a 6 545 9 -a 6 438 8 -a 6 537 10 -a 6 402 10 -a 6 709 5 -a 6 698 8 -a 6 403 7 -a 6 4 2 -a 6 807 6 -a 6 433 10 -a 6 104 10 -a 6 635 2 -a 6 216 9 -a 6 507 4 -a 6 635 8 -a 6 272 7 -a 6 50 10 -a 6 254 2 -a 6 361 4 -a 6 508 5 -a 6 912 8 -a 6 271 6 -a 6 716 4 -a 6 786 2 -a 6 152 8 -a 6 86 6 -a 6 696 9 -a 6 422 10 -a 6 623 1 -a 6 73 4 -a 6 106 9 -a 6 296 10 -a 6 54 5 -a 6 508 1 -a 6 299 7 -a 6 860 7 -a 6 941 10 -a 6 403 4 -a 6 470 6 -a 6 132 8 -a 6 909 4 -a 6 80 7 -a 6 404 7 -a 6 959 10 -a 6 333 4 -a 6 397 8 -a 6 942 8 -a 6 328 9 -a 6 757 9 -a 6 425 9 -a 6 216 5 -a 6 3 10 -a 6 116 3 -a 6 154 1 -a 6 100 5 -a 6 62 6 -a 6 849 9 -a 6 522 9 -a 6 684 5 -a 6 922 3 -a 6 627 1 -a 6 979 8 -a 6 975 7 -a 6 111 7 -a 6 254 10 -a 6 810 6 -a 6 27 4 -a 6 656 3 -a 6 255 5 -a 6 158 1 -a 6 540 4 -a 6 335 1 -a 6 561 7 -a 6 474 1 -a 6 667 6 -a 6 957 5 -a 6 391 4 -a 6 995 9 -a 6 690 4 -a 6 816 10 -a 6 186 2 -a 6 692 3 -a 6 931 2 -a 6 162 6 -a 6 846 4 -a 7 7 2 -a 7 223 2 -a 7 670 2 -a 7 528 8 -a 7 907 9 -a 7 567 8 -a 7 130 9 -a 7 861 4 -a 7 517 7 -a 7 240 2 -a 7 90 6 -a 7 302 9 -a 7 266 3 -a 7 745 4 -a 7 557 1 -a 7 424 8 -a 7 261 8 -a 7 891 2 -a 7 984 6 -a 7 734 7 -a 7 533 3 -a 7 917 7 -a 7 101 6 -a 7 503 1 -a 7 582 5 -a 7 916 10 -a 7 688 1 -a 7 249 4 -a 7 822 4 -a 7 849 5 -a 7 70 5 -a 7 828 10 -a 7 48 2 -a 7 740 7 -a 7 331 1 -a 7 954 2 -a 7 282 2 -a 7 461 7 -a 7 790 5 -a 7 799 4 -a 7 700 6 -a 7 880 2 -a 7 76 1 -a 7 966 7 -a 7 600 6 -a 7 632 5 -a 7 365 2 -a 7 860 3 -a 7 498 6 -a 7 324 7 -a 7 570 10 -a 7 7 9 -a 7 216 9 -a 7 670 1 -a 7 509 10 -a 7 797 6 -a 7 561 3 -a 7 173 10 -a 7 22 6 -a 7 358 5 -a 7 91 6 -a 7 162 1 -a 7 44 7 -a 7 830 4 -a 7 492 1 -a 7 997 6 -a 7 88 8 -a 7 952 10 -a 7 763 5 -a 7 886 9 -a 7 628 8 -a 7 618 10 -a 7 961 9 -a 7 569 8 -a 7 193 6 -a 7 569 1 -a 7 933 3 -a 7 29 10 -a 7 42 10 -a 7 232 8 -a 7 598 10 -a 7 48 4 -a 7 448 7 -a 7 243 10 -a 7 557 3 -a 7 220 1 -a 7 803 5 -a 7 729 7 -a 7 241 7 -a 7 136 3 -a 7 725 9 -a 7 332 9 -a 7 297 9 -a 7 769 3 -a 7 137 3 -a 7 789 2 -a 7 741 8 -a 7 224 9 -a 8 716 7 -a 8 479 2 -a 8 85 2 -a 8 319 10 -a 8 72 8 -a 8 22 4 -a 8 887 8 -a 8 265 3 -a 8 590 1 -a 8 795 2 -a 8 293 9 -a 8 631 7 -a 8 3 4 -a 8 890 1 -a 8 679 5 -a 8 450 9 -a 8 108 4 -a 8 211 2 -a 8 669 9 -a 8 910 9 -a 8 939 9 -a 8 910 1 -a 8 21 10 -a 8 639 2 -a 8 217 9 -a 8 318 2 -a 8 383 5 -a 8 353 5 -a 8 82 8 -a 8 100 7 -a 8 577 2 -a 8 797 8 -a 8 578 8 -a 8 661 3 -a 8 92 7 -a 8 650 1 -a 8 682 2 -a 8 978 2 -a 8 914 9 -a 8 247 6 -a 8 749 4 -a 8 182 7 -a 8 878 7 -a 8 751 5 -a 8 47 1 -a 8 532 9 -a 8 176 5 -a 8 154 2 -a 8 742 5 -a 8 844 3 -a 8 39 3 -a 8 656 6 -a 8 729 2 -a 8 59 4 -a 8 270 7 -a 8 945 7 -a 8 376 10 -a 8 653 3 -a 8 274 7 -a 8 457 8 -a 8 752 4 -a 8 850 4 -a 8 230 9 -a 8 305 8 -a 8 486 3 -a 8 321 1 -a 8 954 1 -a 8 144 8 -a 8 274 2 -a 8 843 8 -a 8 390 8 -a 8 243 3 -a 8 748 2 -a 8 46 4 -a 8 774 4 -a 8 923 3 -a 8 199 4 -a 8 491 10 -a 8 743 9 -a 8 237 7 -a 8 122 3 -a 8 447 10 -a 8 296 10 -a 8 392 9 -a 8 368 10 -a 8 671 4 -a 8 20 1 -a 8 641 3 -a 8 104 6 -a 8 771 9 -a 8 466 3 -a 8 333 3 -a 8 51 3 -a 8 951 7 -a 8 653 2 -a 8 70 5 -a 8 926 4 -a 8 823 9 -a 8 460 7 -a 8 924 7 -a 8 823 1 -a 8 702 10 -a 8 647 4 -a 8 868 9 -a 9 452 6 -a 9 546 6 -a 9 43 10 -a 9 942 6 -a 9 264 1 -a 9 279 2 -a 9 40 2 -a 9 710 10 -a 9 574 5 -a 9 431 8 -a 9 53 8 -a 9 221 6 -a 9 450 6 -a 9 693 4 -a 9 324 2 -a 9 196 7 -a 9 134 6 -a 9 656 7 -a 9 246 5 -a 9 61 1 -a 9 284 6 -a 9 226 8 -a 9 130 9 -a 9 185 1 -a 9 25 5 -a 9 589 3 -a 9 84 10 -a 9 847 5 -a 9 267 3 -a 9 731 9 -a 9 690 10 -a 9 718 10 -a 9 252 8 -a 9 732 3 -a 9 635 6 -a 9 515 4 -a 9 674 3 -a 9 200 10 -a 9 560 8 -a 9 80 5 -a 9 253 6 -a 9 780 1 -a 9 529 1 -a 9 945 8 -a 9 79 10 -a 9 724 9 -a 9 55 5 -a 9 734 1 -a 9 970 4 -a 9 115 9 -a 9 171 3 -a 9 244 8 -a 9 178 9 -a 9 195 1 -a 9 833 4 -a 9 261 9 -a 9 17 3 -a 9 75 7 -a 9 991 7 -a 9 707 6 -a 9 792 5 -a 9 218 5 -a 9 414 3 -a 9 402 3 -a 9 732 3 -a 9 400 3 -a 9 52 5 -a 9 932 3 -a 9 960 7 -a 9 131 3 -a 9 160 3 -a 9 715 1 -a 9 660 5 -a 9 80 5 -a 9 794 9 -a 9 359 10 -a 9 134 2 -a 9 503 4 -a 9 304 9 -a 9 248 8 -a 10 496 8 -a 10 475 2 -a 10 492 10 -a 10 673 3 -a 10 669 5 -a 10 300 1 -a 10 933 10 -a 10 686 2 -a 10 374 5 -a 10 900 5 -a 10 368 5 -a 10 141 6 -a 10 93 3 -a 10 781 4 -a 10 542 1 -a 10 825 4 -a 10 157 4 -a 10 593 9 -a 10 732 3 -a 10 92 10 -a 10 724 6 -a 10 891 1 -a 10 806 1 -a 10 359 5 -a 10 970 9 -a 10 575 1 -a 10 717 4 -a 10 80 3 -a 10 54 3 -a 10 327 2 -a 10 549 3 -a 10 471 1 -a 10 818 6 -a 10 197 1 -a 10 115 6 -a 10 93 3 -a 10 105 5 -a 10 800 10 -a 10 466 8 -a 10 143 8 -a 10 606 9 -a 10 73 4 -a 10 924 1 -a 10 124 3 -a 10 897 5 -a 10 56 7 -a 10 716 10 -a 10 604 9 -a 10 147 4 -a 10 415 3 -a 10 470 9 -a 10 952 9 -a 10 773 1 -a 10 415 3 -a 10 503 7 -a 10 466 9 -a 10 494 7 -a 10 556 1 -a 10 462 5 -a 10 821 3 -a 10 80 5 -a 10 932 7 -a 10 614 7 -a 10 276 8 -a 10 22 2 -a 10 707 3 -a 10 380 8 -a 10 822 5 -a 10 148 8 -a 10 360 10 -a 10 964 5 -a 10 754 6 -a 10 432 7 -a 10 863 9 -a 10 877 4 -a 10 304 6 -a 10 918 4 -a 10 568 10 -a 10 907 1 -a 10 40 4 -a 10 983 5 -a 10 352 4 -a 10 992 5 -a 10 731 6 -a 10 766 4 -a 10 470 8 -a 10 172 2 -a 10 236 8 -a 10 1 1 -a 10 633 1 -a 10 32 9 -a 10 80 2 -a 10 540 6 -a 10 645 10 -a 11 355 1 -a 11 562 9 -a 11 327 4 -a 11 734 5 -a 11 359 9 -a 11 475 1 -a 11 69 3 -a 11 298 6 -a 11 204 4 -a 11 500 7 -a 11 137 9 -a 11 56 9 -a 11 803 6 -a 11 30 5 -a 11 623 9 -a 11 685 10 -a 11 70 5 -a 11 581 6 -a 11 12 1 -a 11 37 7 -a 11 288 6 -a 11 778 9 -a 11 506 8 -a 11 459 4 -a 11 506 1 -a 11 68 4 -a 11 20 9 -a 11 585 9 -a 11 607 8 -a 11 664 2 -a 11 939 8 -a 11 144 7 -a 11 991 6 -a 11 648 4 -a 11 502 8 -a 11 441 4 -a 11 717 3 -a 11 800 2 -a 11 644 4 -a 11 192 8 -a 11 936 8 -a 11 699 6 -a 11 995 4 -a 11 965 5 -a 11 297 5 -a 11 655 9 -a 11 10 8 -a 11 878 9 -a 11 667 9 -a 11 46 6 -a 11 141 2 -a 11 420 4 -a 11 551 8 -a 11 599 1 -a 11 408 10 -a 11 32 4 -a 11 666 1 -a 11 427 4 -a 11 616 9 -a 11 249 8 -a 11 66 8 -a 11 530 6 -a 11 392 9 -a 11 32 9 -a 11 154 9 -a 11 894 6 -a 11 472 2 -a 11 870 10 -a 11 669 7 -a 11 91 9 -a 11 37 6 -a 11 580 1 -a 11 789 3 -a 11 7 10 -a 11 520 1 -a 11 62 10 -a 11 662 2 -a 11 530 4 -a 11 939 10 -a 11 304 5 -a 11 575 7 -a 11 55 7 -a 11 723 7 -a 11 102 8 -a 11 653 7 -a 11 106 10 -a 11 133 1 -a 11 295 3 -a 11 532 3 -a 11 749 3 -a 11 543 5 -a 11 597 4 -a 11 254 5 -a 11 934 5 -a 11 629 8 -a 11 407 8 -a 11 803 2 -a 11 76 9 -a 11 252 9 -a 11 447 7 -a 11 167 3 -a 12 289 5 -a 12 2 6 -a 12 955 8 -a 12 295 3 -a 12 522 10 -a 12 956 5 -a 12 27 9 -a 12 930 10 -a 12 235 4 -a 12 601 7 -a 12 984 1 -a 12 957 6 -a 12 702 2 -a 12 613 2 -a 12 38 4 -a 12 835 8 -a 12 907 5 -a 12 569 2 -a 12 559 10 -a 12 425 4 -a 12 142 6 -a 12 812 8 -a 12 334 9 -a 12 770 1 -a 12 195 9 -a 12 113 4 -a 12 845 4 -a 12 446 9 -a 12 559 7 -a 12 734 5 -a 12 561 5 -a 12 942 5 -a 12 5 6 -a 12 58 10 -a 12 933 7 -a 12 960 4 -a 12 84 10 -a 12 839 7 -a 12 171 5 -a 12 684 7 -a 12 798 6 -a 12 103 7 -a 12 362 7 -a 12 386 5 -a 12 141 2 -a 12 172 7 -a 12 268 1 -a 12 709 10 -a 12 730 1 -a 12 692 10 -a 12 850 1 -a 12 517 5 -a 12 2 3 -a 12 595 5 -a 12 711 7 -a 12 114 8 -a 12 416 6 -a 12 133 2 -a 12 672 8 -a 12 402 8 -a 12 866 6 -a 12 208 3 -a 12 319 1 -a 12 870 5 -a 12 265 4 -a 12 228 2 -a 12 806 2 -a 12 348 6 -a 12 42 4 -a 12 976 1 -a 12 8 10 -a 12 839 6 -a 12 54 5 -a 12 369 1 -a 12 201 2 -a 12 194 10 -a 12 540 5 -a 12 468 6 -a 12 903 7 -a 12 245 6 -a 12 136 10 -a 12 728 4 -a 12 761 6 -a 12 137 7 -a 12 299 2 -a 12 448 3 -a 12 250 8 -a 12 714 8 -a 12 580 1 -a 12 921 2 -a 12 91 4 -a 12 421 8 -a 12 105 8 -a 12 410 2 -a 12 267 3 -a 12 369 4 -a 12 637 5 -a 12 48 9 -a 12 717 8 -a 12 678 10 -a 12 724 4 -a 12 492 1 -a 12 52 9 -a 12 68 10 -a 12 692 6 -a 12 246 10 -a 12 607 4 -a 12 136 1 -a 12 124 8 -a 12 851 9 -a 12 271 6 -a 12 851 5 -a 12 587 3 -a 13 407 7 -a 13 125 7 -a 13 10 6 -a 13 656 3 -a 13 838 5 -a 13 589 10 -a 13 552 8 -a 13 929 1 -a 13 656 8 -a 13 314 7 -a 13 252 3 -a 13 1 8 -a 13 950 1 -a 13 299 10 -a 13 717 2 -a 13 603 9 -a 13 297 2 -a 13 416 6 -a 13 70 7 -a 13 348 10 -a 13 483 1 -a 13 762 2 -a 13 593 4 -a 13 65 6 -a 13 897 6 -a 13 716 4 -a 13 915 1 -a 13 143 2 -a 13 543 1 -a 13 477 4 -a 13 549 4 -a 13 667 1 -a 13 487 3 -a 13 180 1 -a 13 481 7 -a 13 51 3 -a 13 731 9 -a 13 385 9 -a 13 36 3 -a 13 363 6 -a 13 698 1 -a 13 287 6 -a 13 363 6 -a 13 623 6 -a 13 585 9 -a 13 55 2 -a 13 201 2 -a 13 881 9 -a 13 470 5 -a 13 270 5 -a 13 205 9 -a 13 952 5 -a 13 7 7 -a 13 797 3 -a 13 903 5 -a 13 489 1 -a 13 906 10 -a 13 21 7 -a 13 7 1 -a 13 358 7 -a 13 569 2 -a 13 673 10 -a 13 844 9 -a 13 748 5 -a 13 129 5 -a 13 895 3 -a 13 455 4 -a 13 513 3 -a 13 930 2 -a 13 817 9 -a 13 186 3 -a 13 193 10 -a 13 155 3 -a 13 808 8 -a 13 777 4 -a 13 209 4 -a 13 634 7 -a 13 678 7 -a 13 254 4 -a 13 838 8 -a 13 605 1 -a 13 260 2 -a 13 610 4 -a 13 596 6 -a 13 139 8 -a 13 74 2 -a 13 477 10 -a 13 159 5 -a 14 80 8 -a 14 834 6 -a 14 728 10 -a 14 753 5 -a 14 654 3 -a 14 451 5 -a 14 881 6 -a 14 524 3 -a 14 905 10 -a 14 370 9 -a 14 429 5 -a 14 697 6 -a 14 555 1 -a 14 621 8 -a 14 851 4 -a 14 339 3 -a 14 374 6 -a 14 35 8 -a 14 322 10 -a 14 712 10 -a 14 575 3 -a 14 820 7 -a 14 292 1 -a 14 835 10 -a 14 405 4 -a 14 887 3 -a 14 973 4 -a 14 479 1 -a 14 339 1 -a 14 107 9 -a 14 558 6 -a 14 149 10 -a 14 834 2 -a 14 286 7 -a 14 802 2 -a 14 261 1 -a 14 143 7 -a 14 301 4 -a 14 141 7 -a 14 512 6 -a 14 729 6 -a 14 838 7 -a 14 42 5 -a 14 326 2 -a 14 664 8 -a 14 380 10 -a 14 699 3 -a 14 699 7 -a 14 702 9 -a 14 681 4 -a 14 386 1 -a 14 252 2 -a 14 476 3 -a 14 678 8 -a 14 62 9 -a 14 880 8 -a 14 540 2 -a 14 10 1 -a 14 334 8 -a 14 879 6 -a 14 117 8 -a 14 892 5 -a 14 3 7 -a 14 950 3 -a 14 153 1 -a 14 804 9 -a 14 186 7 -a 14 295 5 -a 14 80 1 -a 14 327 8 -a 14 806 7 -a 14 808 8 -a 14 140 3 -a 14 848 9 -a 14 109 4 -a 14 803 1 -a 14 203 9 -a 14 807 10 -a 14 477 8 -a 14 904 5 -a 14 463 7 -a 14 863 6 -a 14 132 5 -a 14 938 6 -a 14 516 10 -a 14 193 2 -a 14 794 9 -a 14 31 6 -a 14 203 2 -a 14 103 7 -a 14 909 3 -a 14 319 9 -a 14 994 10 -a 14 911 1 -a 14 244 1 -a 14 123 1 -a 14 690 5 -a 14 430 5 -a 14 417 8 -a 14 769 9 -a 14 756 4 -a 14 199 4 -a 14 553 1 -a 14 895 1 -a 14 22 5 -a 14 661 7 -a 14 673 8 -a 14 224 8 -a 15 444 5 -a 15 126 6 -a 15 104 1 -a 15 906 7 -a 15 988 4 -a 15 235 4 -a 15 820 4 -a 15 479 9 -a 15 427 4 -a 15 589 7 -a 15 509 5 -a 15 629 10 -a 15 691 8 -a 15 394 6 -a 15 947 3 -a 15 661 1 -a 15 280 1 -a 15 167 8 -a 15 783 1 -a 15 970 7 -a 15 596 5 -a 15 175 10 -a 15 714 3 -a 15 327 4 -a 15 373 2 -a 15 242 2 -a 15 197 3 -a 15 394 6 -a 15 903 9 -a 15 869 3 -a 15 618 4 -a 15 322 3 -a 15 994 10 -a 15 721 2 -a 15 203 4 -a 15 957 4 -a 15 955 4 -a 15 411 7 -a 15 357 2 -a 15 586 7 -a 15 920 10 -a 15 986 10 -a 15 253 2 -a 15 289 4 -a 15 908 5 -a 15 913 5 -a 15 568 7 -a 15 50 3 -a 15 671 3 -a 15 513 5 -a 15 645 6 -a 15 845 2 -a 15 203 7 -a 15 971 10 -a 15 194 10 -a 15 444 7 -a 15 143 4 -a 15 587 6 -a 15 322 1 -a 15 180 5 -a 15 643 2 -a 15 981 8 -a 15 900 7 -a 15 846 9 -a 15 914 2 -a 15 830 1 -a 15 843 7 -a 15 300 10 -a 15 163 1 -a 15 405 3 -a 15 195 2 -a 15 124 10 -a 15 657 2 -a 15 483 7 -a 15 7 2 -a 15 545 3 -a 15 27 2 -a 15 57 8 -a 15 191 9 -a 15 539 6 -a 15 701 10 -a 15 11 1 -a 15 741 10 -a 15 648 1 -a 15 204 7 -a 15 161 6 -a 15 790 1 -a 15 791 10 -a 15 482 8 -a 15 777 8 -a 15 970 6 -a 15 101 9 -a 15 734 1 -a 15 846 7 -a 15 946 8 -a 15 623 9 -a 15 651 10 -a 15 764 10 -a 15 922 3 -a 15 813 3 -a 15 144 7 -a 15 93 2 -a 15 936 8 -a 15 800 1 -a 15 575 8 -a 15 943 5 -a 15 320 5 -a 15 601 7 -a 15 999 5 -a 15 510 5 -a 15 116 5 -a 15 675 3 -a 15 521 2 -a 16 856 8 -a 16 298 10 -a 16 724 9 -a 16 64 5 -a 16 490 1 -a 16 474 6 -a 16 840 8 -a 16 436 1 -a 16 574 1 -a 16 549 9 -a 16 257 8 -a 16 495 1 -a 16 147 4 -a 16 907 8 -a 16 234 4 -a 16 45 2 -a 16 696 3 -a 16 378 1 -a 16 137 8 -a 16 607 10 -a 16 153 10 -a 16 711 5 -a 16 525 2 -a 16 473 5 -a 16 288 10 -a 16 499 3 -a 16 982 10 -a 16 403 8 -a 16 150 2 -a 16 478 8 -a 16 234 10 -a 16 447 8 -a 16 178 4 -a 16 226 10 -a 16 510 7 -a 16 667 6 -a 16 699 8 -a 16 326 7 -a 16 78 2 -a 16 248 9 -a 16 874 5 -a 16 334 2 -a 16 742 7 -a 16 217 6 -a 16 975 9 -a 16 41 3 -a 16 912 7 -a 16 328 3 -a 16 177 7 -a 16 494 3 -a 16 481 6 -a 16 887 9 -a 16 953 8 -a 16 150 3 -a 16 493 9 -a 16 910 8 -a 16 552 3 -a 16 642 3 -a 16 364 2 -a 16 786 4 -a 16 65 9 -a 16 541 7 -a 16 574 5 -a 16 183 2 -a 16 685 10 -a 16 899 4 -a 16 261 6 -a 16 932 6 -a 16 749 4 -a 16 594 6 -a 16 649 5 -a 16 745 1 -a 16 810 6 -a 16 599 3 -a 16 785 5 -a 16 697 7 -a 16 927 1 -a 16 961 3 -a 16 167 7 -a 16 383 10 -a 16 823 4 -a 16 161 2 -a 16 311 3 -a 16 973 9 -a 16 653 8 -a 16 196 2 -a 16 500 4 -a 16 271 5 -a 16 559 10 -a 16 261 1 -a 16 335 3 -a 16 75 7 -a 16 247 1 -a 16 908 8 -a 16 258 4 -a 16 931 3 -a 16 783 5 -a 16 518 8 -a 16 838 3 -a 17 507 4 -a 17 87 3 -a 17 462 6 -a 17 227 10 -a 17 897 3 -a 17 37 6 -a 17 569 5 -a 17 963 1 -a 17 947 9 -a 17 735 3 -a 17 321 8 -a 17 745 10 -a 17 895 6 -a 17 631 1 -a 17 693 4 -a 17 524 6 -a 17 826 3 -a 17 169 6 -a 17 794 8 -a 17 361 5 -a 17 429 10 -a 17 104 3 -a 17 435 2 -a 17 676 8 -a 17 692 6 -a 17 582 2 -a 17 769 10 -a 17 185 10 -a 17 396 8 -a 17 251 5 -a 17 272 6 -a 17 857 10 -a 17 477 3 -a 17 144 7 -a 17 893 5 -a 17 463 4 -a 17 712 8 -a 17 831 6 -a 17 385 9 -a 17 423 2 -a 17 127 5 -a 17 106 6 -a 17 293 7 -a 17 757 7 -a 17 798 9 -a 17 816 1 -a 17 559 8 -a 17 966 6 -a 17 585 5 -a 17 919 6 -a 17 371 4 -a 17 688 6 -a 17 329 4 -a 17 22 5 -a 17 675 6 -a 17 603 2 -a 17 419 10 -a 17 181 2 -a 17 998 6 -a 17 670 6 -a 17 452 9 -a 17 831 6 -a 17 122 3 -a 17 595 1 -a 17 699 3 -a 17 585 3 -a 17 283 1 -a 17 506 10 -a 17 969 8 -a 17 705 5 -a 17 632 3 -a 17 50 9 -a 17 997 8 -a 17 365 9 -a 17 848 1 -a 17 789 10 -a 17 923 5 -a 17 789 2 -a 17 349 10 -a 17 817 5 -a 17 135 5 -a 17 13 1 -a 17 121 1 -a 17 156 1 -a 17 687 3 -a 17 117 5 -a 17 759 5 -a 17 81 7 -a 17 298 8 -a 17 732 10 -a 17 750 3 -a 18 749 2 -a 18 538 10 -a 18 872 3 -a 18 320 4 -a 18 213 10 -a 18 432 8 -a 18 602 1 -a 18 718 5 -a 18 376 5 -a 18 282 5 -a 18 325 6 -a 18 426 9 -a 18 254 3 -a 18 689 4 -a 18 249 2 -a 18 18 4 -a 18 587 8 -a 18 13 5 -a 18 367 6 -a 18 379 6 -a 18 148 1 -a 18 379 4 -a 18 500 10 -a 18 303 3 -a 18 41 4 -a 18 616 8 -a 18 37 2 -a 18 121 9 -a 18 913 7 -a 18 769 8 -a 18 871 9 -a 18 638 9 -a 18 282 8 -a 18 718 10 -a 18 957 4 -a 18 494 2 -a 18 125 9 -a 18 534 8 -a 18 187 7 -a 18 500 6 -a 18 815 5 -a 18 512 6 -a 18 925 9 -a 18 44 7 -a 18 176 3 -a 18 149 4 -a 18 62 3 -a 18 763 5 -a 18 162 9 -a 18 428 4 -a 18 117 7 -a 18 309 4 -a 18 806 6 -a 18 616 4 -a 18 611 1 -a 18 846 9 -a 18 208 5 -a 18 648 2 -a 18 966 6 -a 18 96 9 -a 18 392 7 -a 18 812 3 -a 18 733 8 -a 18 673 9 -a 18 505 10 -a 18 665 10 -a 18 143 10 -a 18 629 2 -a 18 174 3 -a 18 329 7 -a 18 105 6 -a 18 988 10 -a 18 840 3 -a 18 5 3 -a 18 8 7 -a 18 154 6 -a 18 69 4 -a 18 754 5 -a 18 315 2 -a 18 496 9 -a 18 870 4 -a 18 623 1 -a 18 277 1 -a 18 462 10 -a 18 209 3 -a 18 98 9 -a 18 669 9 -a 18 856 2 -a 18 39 2 -a 18 764 6 -a 18 223 5 -a 18 851 9 -a 18 473 7 -a 18 896 3 -a 19 331 9 -a 19 113 5 -a 19 14 3 -a 19 960 6 -a 19 287 4 -a 19 342 1 -a 19 40 1 -a 19 250 9 -a 19 158 3 -a 19 44 5 -a 19 257 1 -a 19 149 6 -a 19 197 2 -a 19 325 2 -a 19 902 1 -a 19 511 6 -a 19 820 8 -a 19 747 7 -a 19 109 7 -a 19 72 6 -a 19 184 3 -a 19 318 8 -a 19 169 8 -a 19 852 7 -a 19 149 8 -a 19 208 1 -a 19 592 1 -a 19 372 1 -a 19 34 7 -a 19 40 3 -a 19 243 10 -a 19 364 8 -a 19 152 7 -a 19 256 8 -a 19 299 7 -a 19 438 9 -a 19 597 2 -a 19 338 5 -a 19 688 5 -a 19 754 9 -a 19 382 3 -a 19 944 4 -a 19 902 4 -a 19 578 1 -a 19 245 4 -a 19 779 1 -a 19 65 10 -a 19 40 5 -a 19 502 10 -a 19 173 1 -a 19 112 5 -a 19 685 6 -a 19 490 3 -a 19 280 1 -a 19 513 10 -a 19 639 10 -a 19 487 9 -a 19 80 2 -a 19 520 1 -a 19 119 5 -a 19 228 8 -a 19 884 9 -a 19 270 4 -a 19 483 1 -a 19 158 1 -a 19 708 6 -a 19 55 4 -a 19 496 4 -a 19 371 7 -a 19 809 2 -a 19 877 7 -a 19 290 7 -a 19 686 5 -a 19 430 4 -a 19 534 10 -a 19 441 9 -a 19 494 10 -a 19 574 7 -a 19 942 7 -a 19 667 5 -a 19 685 6 -a 19 602 3 -a 19 132 5 -a 19 964 2 -a 19 90 5 -a 19 770 7 -a 19 427 3 -a 19 169 8 -a 19 755 4 -a 19 946 3 -a 19 287 9 -a 19 982 8 -a 19 805 2 -a 19 557 3 -a 19 440 1 -a 19 963 10 -a 19 240 10 -a 19 495 1 -a 19 434 6 -a 19 610 4 -a 19 279 3 -a 20 286 7 -a 20 899 5 -a 20 964 3 -a 20 715 4 -a 20 409 7 -a 20 380 5 -a 20 185 7 -a 20 982 2 -a 20 297 10 -a 20 851 4 -a 20 642 8 -a 20 899 4 -a 20 982 9 -a 20 581 6 -a 20 988 2 -a 20 728 5 -a 20 133 5 -a 20 458 2 -a 20 929 10 -a 20 419 2 -a 20 416 2 -a 20 709 5 -a 20 975 1 -a 20 855 4 -a 20 647 3 -a 20 190 8 -a 20 325 6 -a 20 56 2 -a 20 799 10 -a 20 603 1 -a 20 341 5 -a 20 674 5 -a 20 543 2 -a 20 32 8 -a 20 58 10 -a 20 922 10 -a 20 216 2 -a 20 15 8 -a 20 195 3 -a 20 42 6 -a 20 656 3 -a 20 69 6 -a 20 212 6 -a 20 32 6 -a 20 726 6 -a 20 195 9 -a 20 164 3 -a 20 160 10 -a 20 99 10 -a 20 583 9 -a 20 575 4 -a 20 807 7 -a 20 533 2 -a 20 405 8 -a 20 430 2 -a 20 723 9 -a 20 730 10 -a 20 485 7 -a 20 497 4 -a 20 308 5 -a 20 826 1 -a 20 146 6 -a 20 850 7 -a 20 857 3 -a 20 203 4 -a 20 748 1 -a 20 48 3 -a 20 217 1 -a 20 942 10 -a 20 89 5 -a 20 872 4 -a 20 87 3 -a 20 60 7 -a 20 17 5 -a 20 813 4 -a 20 254 6 -a 20 181 2 -a 20 972 1 -a 20 352 9 -a 20 763 6 -a 20 522 10 -a 20 134 1 -a 20 271 6 -a 20 926 2 -a 20 563 3 -a 20 993 1 -a 20 631 2 -a 20 24 5 -a 20 466 1 -a 20 939 9 -a 20 849 7 -a 20 611 5 -a 20 764 10 -a 20 681 6 -a 20 814 1 -a 20 487 10 -a 20 728 3 -a 20 6 2 -a 20 404 8 -a 20 816 1 -a 20 878 1 -a 20 389 10 -a 20 902 5 -a 20 937 1 -a 20 406 5 -a 20 690 2 -a 20 166 5 -a 20 586 9 -a 21 637 10 -a 21 517 10 -a 21 324 7 -a 21 134 1 -a 21 650 10 -a 21 594 2 -a 21 36 9 -a 21 189 5 -a 21 563 2 -a 21 666 9 -a 21 212 1 -a 21 4 8 -a 21 580 9 -a 21 36 5 -a 21 614 8 -a 21 320 5 -a 21 716 9 -a 21 403 10 -a 21 806 4 -a 21 419 6 -a 21 409 8 -a 21 186 4 -a 21 210 3 -a 21 262 3 -a 21 574 2 -a 21 87 3 -a 21 174 3 -a 21 979 8 -a 21 777 4 -a 21 339 5 -a 21 540 3 -a 21 389 5 -a 21 855 3 -a 21 863 9 -a 21 523 2 -a 21 480 7 -a 21 433 1 -a 21 558 6 -a 21 668 9 -a 21 995 3 -a 21 199 2 -a 21 879 5 -a 21 998 7 -a 21 779 6 -a 21 914 2 -a 21 587 1 -a 21 74 1 -a 21 605 6 -a 21 990 3 -a 21 879 10 -a 21 374 2 -a 21 40 4 -a 21 208 2 -a 21 635 9 -a 21 614 9 -a 21 295 4 -a 21 808 7 -a 21 568 7 -a 21 47 3 -a 21 122 6 -a 21 84 1 -a 21 435 6 -a 21 976 7 -a 21 946 10 -a 21 957 5 -a 21 431 3 -a 21 354 2 -a 21 490 6 -a 21 75 3 -a 21 324 6 -a 21 689 5 -a 21 953 4 -a 21 297 7 -a 21 443 3 -a 21 843 3 -a 21 884 9 -a 21 516 8 -a 21 423 3 -a 21 849 7 -a 21 370 3 -a 22 422 6 -a 22 198 7 -a 22 410 5 -a 22 629 7 -a 22 832 9 -a 22 923 7 -a 22 615 5 -a 22 566 5 -a 22 969 2 -a 22 736 1 -a 22 649 4 -a 22 380 5 -a 22 687 7 -a 22 571 2 -a 22 312 4 -a 22 93 5 -a 22 924 7 -a 22 802 7 -a 22 167 3 -a 22 224 4 -a 22 466 6 -a 22 96 9 -a 22 520 6 -a 22 908 2 -a 22 938 6 -a 22 379 3 -a 22 399 9 -a 22 336 9 -a 22 203 4 -a 22 768 3 -a 22 757 2 -a 22 400 4 -a 22 153 5 -a 22 362 3 -a 22 207 2 -a 22 151 3 -a 22 260 7 -a 22 821 6 -a 22 717 4 -a 22 205 7 -a 22 532 1 -a 22 341 6 -a 22 584 4 -a 22 194 6 -a 22 911 6 -a 22 895 6 -a 22 287 4 -a 22 811 10 -a 22 672 6 -a 22 453 9 -a 22 10 8 -a 22 113 9 -a 22 548 9 -a 22 529 10 -a 22 461 7 -a 22 908 9 -a 22 394 10 -a 22 797 6 -a 22 86 10 -a 22 138 1 -a 22 529 3 -a 22 486 4 -a 22 290 1 -a 22 890 8 -a 22 692 9 -a 22 441 2 -a 22 126 1 -a 22 489 3 -a 22 133 8 -a 22 330 4 -a 22 473 5 -a 22 913 6 -a 22 190 10 -a 22 360 4 -a 22 783 3 -a 22 476 4 -a 22 146 3 -a 22 431 6 -a 22 928 7 -a 22 155 6 -a 22 543 6 -a 22 452 9 -a 22 683 1 -a 22 539 9 -a 22 912 1 -a 22 566 5 -a 22 932 6 -a 22 684 9 -a 22 652 8 -a 22 45 9 -a 22 189 5 -a 22 113 9 -a 22 335 10 -a 22 54 10 -a 22 804 3 -a 23 775 1 -a 23 179 6 -a 23 268 7 -a 23 907 2 -a 23 508 7 -a 23 264 5 -a 23 355 7 -a 23 396 1 -a 23 453 3 -a 23 714 3 -a 23 155 7 -a 23 928 6 -a 23 859 6 -a 23 585 1 -a 23 831 1 -a 23 103 4 -a 23 258 10 -a 23 672 6 -a 23 641 6 -a 23 146 1 -a 23 213 7 -a 23 549 7 -a 23 829 9 -a 23 864 9 -a 23 593 5 -a 23 976 8 -a 23 927 2 -a 23 47 2 -a 23 756 10 -a 23 677 6 -a 23 225 4 -a 23 559 10 -a 23 733 2 -a 23 262 9 -a 23 914 5 -a 23 104 4 -a 23 714 5 -a 23 603 3 -a 23 258 8 -a 23 617 6 -a 23 438 4 -a 23 842 5 -a 23 424 1 -a 23 426 5 -a 23 945 5 -a 23 681 2 -a 23 73 1 -a 23 561 4 -a 23 826 8 -a 23 286 1 -a 23 85 5 -a 23 631 3 -a 23 125 4 -a 23 678 4 -a 23 623 3 -a 23 77 7 -a 23 580 2 -a 23 669 2 -a 23 832 9 -a 23 233 10 -a 23 894 3 -a 23 830 3 -a 23 791 10 -a 23 602 7 -a 23 68 5 -a 23 680 3 -a 23 705 3 -a 23 781 1 -a 23 259 7 -a 23 963 2 -a 23 374 3 -a 23 696 1 -a 23 780 1 -a 23 797 2 -a 23 97 7 -a 23 700 2 -a 23 453 9 -a 23 170 8 -a 23 237 2 -a 23 255 2 -a 23 455 4 -a 23 321 4 -a 23 885 10 -a 23 579 10 -a 23 998 8 -a 23 483 9 -a 23 655 3 -a 23 554 9 -a 23 128 1 -a 23 462 6 -a 23 786 7 -a 23 268 2 -a 24 552 8 -a 24 598 7 -a 24 335 2 -a 24 208 9 -a 24 278 3 -a 24 91 8 -a 24 466 6 -a 24 216 1 -a 24 464 7 -a 24 137 2 -a 24 996 3 -a 24 236 5 -a 24 233 5 -a 24 671 1 -a 24 689 8 -a 24 402 9 -a 24 907 4 -a 24 943 2 -a 24 856 9 -a 24 204 2 -a 24 803 3 -a 24 411 3 -a 24 177 6 -a 24 261 9 -a 24 41 4 -a 24 730 6 -a 24 388 6 -a 24 503 6 -a 24 491 7 -a 24 384 5 -a 24 770 1 -a 24 19 8 -a 24 981 7 -a 24 80 6 -a 24 226 5 -a 24 235 6 -a 24 170 10 -a 24 691 2 -a 24 450 5 -a 24 634 10 -a 24 827 8 -a 24 421 2 -a 24 869 3 -a 24 35 5 -a 24 68 1 -a 24 533 5 -a 24 437 4 -a 24 974 2 -a 24 451 3 -a 24 268 10 -a 24 153 7 -a 24 229 7 -a 24 678 1 -a 24 330 3 -a 24 490 3 -a 24 719 5 -a 24 35 9 -a 24 877 1 -a 24 197 10 -a 24 526 1 -a 24 237 3 -a 24 966 8 -a 24 544 7 -a 24 193 5 -a 24 21 10 -a 24 769 5 -a 24 427 4 -a 24 190 5 -a 24 435 8 -a 24 877 8 -a 24 823 9 -a 24 237 1 -a 24 273 10 -a 24 668 9 -a 24 271 7 -a 24 340 9 -a 24 176 3 -a 24 707 5 -a 24 290 5 -a 24 627 10 -a 24 975 3 -a 24 442 6 -a 24 855 4 -a 24 628 6 -a 24 771 4 -a 24 320 8 -a 24 322 5 -a 24 806 4 -a 24 173 7 -a 24 518 6 -a 24 307 8 -a 24 409 9 -a 24 459 6 -a 24 850 3 -a 24 601 5 -a 24 479 7 -a 24 594 7 -a 24 4 5 -a 24 669 3 -a 24 4 7 -a 24 880 8 -a 24 467 1 -a 24 240 8 -a 25 128 8 -a 25 110 9 -a 25 510 7 -a 25 468 4 -a 25 286 7 -a 25 193 10 -a 25 757 6 -a 25 912 8 -a 25 143 4 -a 25 174 1 -a 25 742 8 -a 25 770 10 -a 25 945 10 -a 25 38 2 -a 25 68 1 -a 25 726 7 -a 25 210 3 -a 25 585 7 -a 25 8 10 -a 25 618 7 -a 25 20 9 -a 25 857 4 -a 25 194 5 -a 25 498 9 -a 25 426 8 -a 25 197 10 -a 25 142 2 -a 25 429 5 -a 25 52 2 -a 25 609 3 -a 25 668 2 -a 25 180 6 -a 25 718 9 -a 25 153 7 -a 25 647 9 -a 25 345 7 -a 25 379 7 -a 25 890 4 -a 25 487 2 -a 25 552 3 -a 25 608 6 -a 25 233 5 -a 25 472 5 -a 25 645 10 -a 25 300 10 -a 25 173 4 -a 25 854 4 -a 25 884 10 -a 25 180 5 -a 25 447 5 -a 25 903 2 -a 25 12 1 -a 25 640 1 -a 25 377 1 -a 25 437 7 -a 25 837 9 -a 25 518 7 -a 25 865 3 -a 25 888 10 -a 25 102 5 -a 25 508 3 -a 25 43 8 -a 25 820 1 -a 25 661 1 -a 25 689 1 -a 25 798 5 -a 25 43 10 -a 25 664 5 -a 25 468 4 -a 25 595 4 -a 25 247 6 -a 25 700 5 -a 25 42 6 -a 25 891 4 -a 25 999 3 -a 25 215 9 -a 25 720 5 -a 25 858 5 -a 25 394 7 -a 25 142 9 -a 25 737 3 -a 25 406 1 -a 25 781 7 -a 25 89 5 -a 25 842 6 -a 25 593 5 -a 25 606 3 -a 25 683 2 -a 25 457 6 -a 25 708 6 -a 25 166 9 -a 25 499 10 -a 26 503 6 -a 26 826 1 -a 26 164 4 -a 26 276 2 -a 26 807 5 -a 26 206 10 -a 26 939 10 -a 26 250 7 -a 26 800 10 -a 26 161 9 -a 26 949 1 -a 26 842 6 -a 26 27 5 -a 26 923 3 -a 26 32 3 -a 26 746 4 -a 26 756 3 -a 26 425 9 -a 26 887 5 -a 26 468 2 -a 26 830 1 -a 26 644 8 -a 26 556 8 -a 26 648 8 -a 26 212 4 -a 26 138 9 -a 26 306 3 -a 26 668 9 -a 26 845 6 -a 26 471 6 -a 26 143 1 -a 26 323 3 -a 26 273 5 -a 26 306 1 -a 26 598 1 -a 26 55 9 -a 26 511 6 -a 26 513 10 -a 26 304 6 -a 26 287 2 -a 26 673 1 -a 26 228 3 -a 26 104 9 -a 26 700 2 -a 26 126 5 -a 26 135 8 -a 26 421 3 -a 26 881 5 -a 26 559 2 -a 26 284 8 -a 26 325 3 -a 26 365 8 -a 26 927 5 -a 26 880 9 -a 26 114 5 -a 26 293 9 -a 26 782 9 -a 26 837 4 -a 26 763 9 -a 26 924 1 -a 26 135 1 -a 26 11 10 -a 26 205 3 -a 26 733 10 -a 26 65 6 -a 26 715 5 -a 26 221 5 -a 26 368 7 -a 26 893 9 -a 26 595 4 -a 26 80 1 -a 26 568 3 -a 26 720 5 -a 26 214 10 -a 26 989 7 -a 26 577 1 -a 26 773 4 -a 26 248 5 -a 26 901 3 -a 26 113 9 -a 26 150 9 -a 26 756 9 -a 26 100 7 -a 26 263 2 -a 26 749 2 -a 26 392 6 -a 26 20 7 -a 26 561 3 -a 26 130 7 -a 26 943 1 -a 26 696 10 -a 26 141 2 -a 26 123 1 -a 26 404 3 -a 26 205 8 -a 26 838 4 -a 26 624 2 -a 26 573 8 -a 26 814 4 -a 26 492 10 -a 26 143 5 -a 26 894 8 -a 26 36 7 -a 26 863 9 -a 26 83 1 -a 26 415 4 -a 26 855 1 -a 26 247 2 -a 26 291 3 -a 26 967 7 -a 27 396 5 -a 27 22 5 -a 27 42 6 -a 27 658 5 -a 27 770 9 -a 27 433 7 -a 27 678 8 -a 27 307 3 -a 27 563 7 -a 27 596 3 -a 27 703 10 -a 27 719 10 -a 27 381 6 -a 27 907 3 -a 27 532 2 -a 27 455 6 -a 27 321 4 -a 27 471 8 -a 27 598 6 -a 27 190 3 -a 27 506 3 -a 27 436 8 -a 27 273 5 -a 27 505 5 -a 27 850 4 -a 27 103 2 -a 27 751 7 -a 27 116 8 -a 27 46 3 -a 27 122 9 -a 27 137 9 -a 27 87 10 -a 27 780 7 -a 27 907 4 -a 27 520 2 -a 27 433 6 -a 27 189 2 -a 27 58 6 -a 27 4 1 -a 27 166 9 -a 27 760 7 -a 27 722 10 -a 27 546 4 -a 27 642 3 -a 27 229 2 -a 27 525 3 -a 27 73 3 -a 27 550 4 -a 27 995 1 -a 27 670 6 -a 27 739 6 -a 27 477 6 -a 27 81 2 -a 27 981 1 -a 27 930 5 -a 27 90 1 -a 27 708 4 -a 27 21 4 -a 27 135 9 -a 27 829 6 -a 27 157 7 -a 27 221 7 -a 27 584 10 -a 27 39 10 -a 27 740 5 -a 27 227 6 -a 27 797 10 -a 27 392 8 -a 27 532 7 -a 27 717 8 -a 27 937 6 -a 27 150 7 -a 27 946 9 -a 27 437 8 -a 27 222 3 -a 27 471 4 -a 27 408 9 -a 27 891 2 -a 27 185 6 -a 27 884 2 -a 27 971 9 -a 27 172 8 -a 27 840 8 -a 27 876 7 -a 27 261 2 -a 27 523 3 -a 27 896 1 -a 27 395 9 -a 27 328 8 -a 27 28 3 -a 27 615 10 -a 27 911 1 -a 27 67 5 -a 27 331 6 -a 27 903 3 -a 27 293 8 -a 27 103 1 -a 27 898 1 -a 27 685 3 -a 28 635 4 -a 28 590 7 -a 28 597 9 -a 28 784 3 -a 28 511 4 -a 28 10 1 -a 28 981 7 -a 28 417 7 -a 28 871 6 -a 28 142 9 -a 28 276 6 -a 28 817 10 -a 28 313 6 -a 28 91 6 -a 28 668 8 -a 28 573 5 -a 28 614 5 -a 28 539 5 -a 28 967 7 -a 28 941 4 -a 28 566 6 -a 28 557 10 -a 28 827 9 -a 28 632 8 -a 28 887 4 -a 28 705 6 -a 28 925 5 -a 28 990 10 -a 28 578 1 -a 28 585 7 -a 28 600 4 -a 28 144 6 -a 28 157 9 -a 28 359 4 -a 28 654 2 -a 28 166 2 -a 28 339 7 -a 28 611 6 -a 28 582 8 -a 28 185 9 -a 28 752 7 -a 28 857 3 -a 28 40 3 -a 28 948 8 -a 28 644 7 -a 28 612 1 -a 28 537 5 -a 28 158 1 -a 28 554 7 -a 28 453 8 -a 28 723 10 -a 28 86 9 -a 28 255 7 -a 28 331 2 -a 28 973 7 -a 28 960 5 -a 28 231 9 -a 28 938 5 -a 28 513 8 -a 28 815 8 -a 28 513 2 -a 28 656 8 -a 28 971 2 -a 28 871 9 -a 28 286 4 -a 28 113 7 -a 28 185 4 -a 28 896 2 -a 28 694 2 -a 28 369 9 -a 28 623 10 -a 28 527 1 -a 28 345 2 -a 28 662 9 -a 28 450 4 -a 28 988 10 -a 28 249 5 -a 28 986 3 -a 28 121 6 -a 28 802 1 -a 28 414 2 -a 28 843 8 -a 28 887 9 -a 28 668 4 -a 28 149 4 -a 28 835 5 -a 28 603 10 -a 28 379 7 -a 28 748 1 -a 28 92 10 -a 28 169 10 -a 28 236 10 -a 28 747 4 -a 28 116 7 -a 29 82 9 -a 29 8 2 -a 29 228 7 -a 29 266 4 -a 29 903 9 -a 29 921 9 -a 29 634 8 -a 29 501 1 -a 29 423 3 -a 29 978 8 -a 29 138 3 -a 29 872 2 -a 29 941 5 -a 29 386 8 -a 29 833 2 -a 29 37 7 -a 29 163 9 -a 29 222 2 -a 29 880 4 -a 29 26 2 -a 29 890 1 -a 29 4 9 -a 29 860 4 -a 29 468 4 -a 29 383 4 -a 29 584 7 -a 29 559 7 -a 29 551 8 -a 29 819 6 -a 29 282 3 -a 29 666 8 -a 29 901 3 -a 29 289 10 -a 29 893 5 -a 29 142 10 -a 29 168 6 -a 29 790 10 -a 29 776 10 -a 29 668 4 -a 29 188 8 -a 29 729 3 -a 29 806 9 -a 29 36 1 -a 29 646 8 -a 29 167 10 -a 29 868 9 -a 29 682 5 -a 29 330 9 -a 29 66 6 -a 29 537 6 -a 29 355 4 -a 29 955 2 -a 29 541 3 -a 29 190 9 -a 29 398 7 -a 29 923 2 -a 29 773 2 -a 29 957 5 -a 29 449 9 -a 29 568 3 -a 29 214 7 -a 29 91 10 -a 29 444 7 -a 29 502 10 -a 29 983 7 -a 29 585 3 -a 29 669 3 -a 29 748 3 -a 29 336 3 -a 29 313 8 -a 29 936 7 -a 29 41 7 -a 29 94 8 -a 29 971 5 -a 29 686 8 -a 29 260 9 -a 29 814 7 -a 29 343 3 -a 29 589 1 -a 29 879 6 -a 29 880 10 -a 29 943 2 -a 29 809 4 -a 29 396 1 -a 29 109 9 -a 29 183 3 -a 29 294 1 -a 29 881 1 -a 29 115 8 -a 29 742 2 -a 29 424 9 -a 29 328 6 -a 29 832 3 -a 29 867 3 -a 29 829 5 -a 29 791 5 -a 29 428 10 -a 29 474 5 -a 29 514 1 -a 29 763 2 -a 29 786 10 -a 29 425 1 -a 29 803 3 -a 29 879 4 -a 29 371 4 -a 29 464 7 -a 29 114 1 -a 29 161 5 -a 29 807 7 -a 30 703 5 -a 30 15 3 -a 30 662 10 -a 30 621 7 -a 30 824 1 -a 30 33 3 -a 30 729 2 -a 30 326 10 -a 30 586 3 -a 30 96 3 -a 30 43 1 -a 30 423 2 -a 30 875 5 -a 30 852 4 -a 30 227 1 -a 30 641 2 -a 30 255 7 -a 30 700 8 -a 30 130 7 -a 30 461 6 -a 30 555 2 -a 30 796 2 -a 30 315 6 -a 30 925 5 -a 30 235 9 -a 30 429 1 -a 30 61 9 -a 30 17 1 -a 30 107 10 -a 30 76 3 -a 30 678 6 -a 30 727 10 -a 30 899 3 -a 30 710 1 -a 30 432 9 -a 30 880 8 -a 30 11 3 -a 30 975 1 -a 30 54 1 -a 30 373 2 -a 30 928 6 -a 30 828 2 -a 30 599 1 -a 30 544 2 -a 30 58 9 -a 30 275 3 -a 30 673 3 -a 30 51 6 -a 30 735 2 -a 30 203 9 -a 30 846 1 -a 30 26 7 -a 30 104 2 -a 30 56 2 -a 30 454 3 -a 30 164 10 -a 30 73 5 -a 30 560 10 -a 30 239 2 -a 30 750 3 -a 30 262 4 -a 30 113 6 -a 30 436 9 -a 30 693 6 -a 30 992 8 -a 30 446 8 -a 30 685 6 -a 30 942 6 -a 30 499 8 -a 30 662 2 -a 30 290 3 -a 30 402 8 -a 30 465 10 -a 30 889 9 -a 30 945 9 -a 30 523 3 -a 30 139 7 -a 30 594 3 -a 30 573 5 -a 30 873 1 -a 30 796 4 -a 30 394 3 -a 30 898 7 -a 30 899 2 -a 30 449 8 -a 30 327 10 -a 30 39 5 -a 30 521 3 -a 30 886 1 -a 30 277 2 -a 30 247 6 -a 30 124 10 -a 30 390 6 -a 31 682 1 -a 31 816 1 -a 31 357 7 -a 31 103 8 -a 31 477 1 -a 31 275 10 -a 31 602 1 -a 31 114 9 -a 31 564 4 -a 31 578 6 -a 31 428 10 -a 31 924 7 -a 31 76 6 -a 31 566 5 -a 31 493 10 -a 31 648 8 -a 31 415 4 -a 31 264 2 -a 31 17 1 -a 31 288 3 -a 31 139 6 -a 31 466 1 -a 31 615 6 -a 31 177 8 -a 31 986 2 -a 31 476 2 -a 31 453 6 -a 31 208 2 -a 31 599 5 -a 31 842 3 -a 31 889 9 -a 31 391 10 -a 31 175 3 -a 31 992 9 -a 31 867 7 -a 31 449 10 -a 31 569 7 -a 31 980 5 -a 31 547 8 -a 31 533 1 -a 31 416 6 -a 31 446 2 -a 31 609 2 -a 31 981 3 -a 31 938 7 -a 31 232 10 -a 31 371 4 -a 31 178 4 -a 31 249 4 -a 31 659 9 -a 31 316 7 -a 31 714 6 -a 31 249 9 -a 31 492 8 -a 31 675 8 -a 31 724 1 -a 31 944 9 -a 31 883 3 -a 31 299 3 -a 31 762 7 -a 31 747 3 -a 31 689 3 -a 31 936 3 -a 31 714 8 -a 31 531 4 -a 31 360 9 -a 31 258 6 -a 31 486 5 -a 31 347 9 -a 31 805 2 -a 31 762 8 -a 31 226 1 -a 31 602 8 -a 31 719 3 -a 31 140 7 -a 31 834 7 -a 31 65 9 -a 31 317 2 -a 31 58 9 -a 31 723 4 -a 31 632 1 -a 31 771 6 -a 31 971 3 -a 31 99 6 -a 31 421 5 -a 31 671 6 -a 31 18 3 -a 31 279 10 -a 31 969 4 -a 31 779 5 -a 31 2 1 -a 31 633 4 -a 31 690 3 -a 31 715 10 -a 31 139 3 -a 31 25 8 -a 31 973 1 -a 31 624 5 -a 31 372 6 -a 31 753 6 -a 31 617 10 -a 31 109 10 -a 31 978 4 -a 31 195 4 -a 31 827 9 -a 31 93 3 -a 31 4 2 -a 31 892 1 -a 31 409 7 -a 31 61 2 -a 31 590 5 -a 31 16 2 -a 32 831 4 -a 32 537 4 -a 32 114 5 -a 32 227 4 -a 32 183 5 -a 32 132 10 -a 32 506 10 -a 32 127 8 -a 32 910 3 -a 32 507 4 -a 32 759 6 -a 32 576 2 -a 32 197 3 -a 32 897 1 -a 32 600 6 -a 32 145 10 -a 32 496 4 -a 32 971 4 -a 32 897 4 -a 32 88 8 -a 32 56 6 -a 32 851 6 -a 32 282 9 -a 32 882 10 -a 32 943 4 -a 32 285 4 -a 32 749 6 -a 32 328 1 -a 32 345 3 -a 32 315 8 -a 32 343 5 -a 32 151 6 -a 32 851 6 -a 32 457 10 -a 32 378 9 -a 32 9 1 -a 32 588 6 -a 32 883 7 -a 32 135 10 -a 32 473 3 -a 32 365 3 -a 32 893 9 -a 32 24 4 -a 32 561 8 -a 32 765 10 -a 32 624 8 -a 32 706 5 -a 32 236 4 -a 32 570 4 -a 32 578 3 -a 32 323 1 -a 32 625 2 -a 32 404 9 -a 32 605 7 -a 32 483 7 -a 32 323 2 -a 32 889 1 -a 32 207 3 -a 32 650 4 -a 32 210 9 -a 32 521 3 -a 32 992 7 -a 32 360 7 -a 32 347 4 -a 32 424 2 -a 32 737 7 -a 32 355 2 -a 32 595 2 -a 32 489 10 -a 32 460 2 -a 32 959 1 -a 32 357 10 -a 32 483 3 -a 32 496 6 -a 32 97 1 -a 32 82 4 -a 32 177 9 -a 32 332 5 -a 32 652 7 -a 32 754 3 -a 32 655 10 -a 32 252 4 -a 32 134 5 -a 32 235 2 -a 32 734 9 -a 32 456 10 -a 32 99 3 -a 32 941 7 -a 32 81 8 -a 32 308 6 -a 32 437 9 -a 32 48 1 -a 33 668 2 -a 33 784 10 -a 33 472 10 -a 33 380 7 -a 33 114 7 -a 33 458 5 -a 33 975 10 -a 33 603 2 -a 33 917 10 -a 33 909 7 -a 33 959 4 -a 33 376 4 -a 33 380 10 -a 33 32 3 -a 33 457 5 -a 33 556 3 -a 33 363 10 -a 33 84 7 -a 33 286 8 -a 33 336 3 -a 33 419 5 -a 33 227 9 -a 33 45 3 -a 33 874 9 -a 33 326 3 -a 33 985 2 -a 33 954 2 -a 33 633 5 -a 33 398 9 -a 33 276 8 -a 33 157 1 -a 33 448 7 -a 33 656 1 -a 33 270 4 -a 33 906 10 -a 33 606 1 -a 33 872 5 -a 33 798 4 -a 33 490 4 -a 33 807 9 -a 33 149 7 -a 33 870 2 -a 33 838 4 -a 33 606 1 -a 33 401 2 -a 33 176 9 -a 33 689 5 -a 33 686 4 -a 33 169 3 -a 33 80 10 -a 33 395 3 -a 33 45 5 -a 33 953 10 -a 33 720 9 -a 33 5 1 -a 33 882 9 -a 33 329 8 -a 33 402 4 -a 33 859 1 -a 33 604 7 -a 33 558 1 -a 33 282 4 -a 33 235 7 -a 33 828 2 -a 33 163 1 -a 33 840 1 -a 33 675 4 -a 33 961 6 -a 33 306 7 -a 33 457 9 -a 33 85 8 -a 33 151 2 -a 33 270 5 -a 33 690 4 -a 33 551 6 -a 33 446 3 -a 33 355 5 -a 33 213 6 -a 33 614 6 -a 33 354 1 -a 33 292 2 -a 33 398 7 -a 33 221 2 -a 33 704 1 -a 33 403 8 -a 33 78 4 -a 33 8 3 -a 33 804 9 -a 33 936 10 -a 33 611 5 -a 33 338 9 -a 33 194 3 -a 33 846 7 -a 33 141 2 -a 33 356 1 -a 33 661 1 -a 33 815 10 -a 33 292 3 -a 33 966 9 -a 33 248 9 -a 33 377 10 -a 33 92 5 -a 33 517 10 -a 33 42 7 -a 34 643 5 -a 34 962 7 -a 34 396 4 -a 34 855 1 -a 34 551 3 -a 34 750 6 -a 34 122 9 -a 34 535 8 -a 34 123 9 -a 34 342 8 -a 34 214 6 -a 34 525 6 -a 34 420 4 -a 34 221 4 -a 34 305 2 -a 34 331 1 -a 34 831 6 -a 34 642 5 -a 34 524 5 -a 34 652 4 -a 34 782 5 -a 34 880 4 -a 34 289 5 -a 34 572 7 -a 34 147 9 -a 34 230 4 -a 34 819 8 -a 34 523 8 -a 34 322 5 -a 34 312 3 -a 34 565 8 -a 34 964 6 -a 34 249 3 -a 34 960 7 -a 34 794 8 -a 34 800 5 -a 34 685 7 -a 34 915 9 -a 34 310 2 -a 34 808 8 -a 34 233 3 -a 34 523 1 -a 34 308 7 -a 34 652 4 -a 34 743 3 -a 34 612 2 -a 34 982 4 -a 34 549 3 -a 34 229 6 -a 34 482 7 -a 34 177 2 -a 34 337 8 -a 34 465 7 -a 34 558 7 -a 34 483 5 -a 34 694 7 -a 34 352 8 -a 34 663 2 -a 34 546 7 -a 34 954 9 -a 34 912 7 -a 34 481 9 -a 34 723 10 -a 34 687 10 -a 34 142 7 -a 34 614 9 -a 34 996 9 -a 34 949 10 -a 34 846 8 -a 34 494 4 -a 34 232 6 -a 34 473 4 -a 34 212 1 -a 34 844 7 -a 34 430 10 -a 34 760 4 -a 34 48 2 -a 34 911 1 -a 34 936 7 -a 34 34 9 -a 34 223 10 -a 34 376 1 -a 34 591 3 -a 34 706 5 -a 34 46 8 -a 34 942 2 -a 34 687 5 -a 34 36 10 -a 34 581 10 -a 34 208 4 -a 34 990 9 -a 34 468 4 -a 34 688 1 -a 34 688 7 -a 34 130 7 -a 34 829 10 -a 34 277 10 -a 34 101 1 -a 34 753 10 -a 34 98 5 -a 34 594 4 -a 34 985 3 -a 35 570 5 -a 35 805 2 -a 35 804 3 -a 35 1000 3 -a 35 540 8 -a 35 851 9 -a 35 886 5 -a 35 452 5 -a 35 884 7 -a 35 85 8 -a 35 827 7 -a 35 450 5 -a 35 790 6 -a 35 872 9 -a 35 368 2 -a 35 452 6 -a 35 908 1 -a 35 948 1 -a 35 659 4 -a 35 873 3 -a 35 391 7 -a 35 322 3 -a 35 536 3 -a 35 520 9 -a 35 127 9 -a 35 813 7 -a 35 620 6 -a 35 879 2 -a 35 910 4 -a 35 189 9 -a 35 839 1 -a 35 456 8 -a 35 993 9 -a 35 618 1 -a 35 431 7 -a 35 508 9 -a 35 445 4 -a 35 292 6 -a 35 959 10 -a 35 304 10 -a 35 376 7 -a 35 762 7 -a 35 754 5 -a 35 141 6 -a 35 609 1 -a 35 97 4 -a 35 592 5 -a 35 492 2 -a 35 20 8 -a 35 226 4 -a 35 340 8 -a 35 410 1 -a 35 548 9 -a 35 876 1 -a 35 929 6 -a 35 674 4 -a 35 664 2 -a 35 524 9 -a 35 528 4 -a 35 549 5 -a 35 712 8 -a 35 343 10 -a 35 680 2 -a 35 960 1 -a 35 410 7 -a 35 163 8 -a 35 380 4 -a 35 702 9 -a 35 98 5 -a 35 684 5 -a 35 53 10 -a 35 859 2 -a 35 413 5 -a 35 194 2 -a 35 443 3 -a 35 509 5 -a 35 785 1 -a 35 935 2 -a 35 528 10 -a 35 250 10 -a 35 937 9 -a 35 534 6 -a 35 101 8 -a 35 841 5 -a 35 183 7 -a 35 764 2 -a 35 340 5 -a 35 710 6 -a 35 289 6 -a 35 27 10 -a 35 28 10 -a 35 268 10 -a 35 706 4 -a 35 988 5 -a 35 678 9 -a 35 868 10 -a 35 343 4 -a 35 355 8 -a 36 965 4 -a 36 2 5 -a 36 407 10 -a 36 799 3 -a 36 414 1 -a 36 600 1 -a 36 218 4 -a 36 922 5 -a 36 361 1 -a 36 128 1 -a 36 425 6 -a 36 347 6 -a 36 377 6 -a 36 337 9 -a 36 880 8 -a 36 478 6 -a 36 153 7 -a 36 38 5 -a 36 217 9 -a 36 492 1 -a 36 747 5 -a 36 505 4 -a 36 518 10 -a 36 775 2 -a 36 773 10 -a 36 199 5 -a 36 738 4 -a 36 426 6 -a 36 43 6 -a 36 56 4 -a 36 780 2 -a 36 58 10 -a 36 162 8 -a 36 782 10 -a 36 471 9 -a 36 762 4 -a 36 999 6 -a 36 369 3 -a 36 98 3 -a 36 102 3 -a 36 793 10 -a 36 444 7 -a 36 478 7 -a 36 106 10 -a 36 299 6 -a 36 955 6 -a 36 258 3 -a 36 336 7 -a 36 148 5 -a 36 750 8 -a 36 58 1 -a 36 652 1 -a 36 243 3 -a 36 832 5 -a 36 400 10 -a 36 442 5 -a 36 545 9 -a 36 825 8 -a 36 484 2 -a 36 601 6 -a 36 580 3 -a 36 466 8 -a 36 658 1 -a 36 742 4 -a 36 223 1 -a 36 104 4 -a 36 479 10 -a 36 197 6 -a 36 472 6 -a 36 576 10 -a 36 298 1 -a 36 241 1 -a 36 776 1 -a 36 346 3 -a 36 293 6 -a 36 706 10 -a 36 603 5 -a 36 628 1 -a 36 853 10 -a 36 328 3 -a 36 685 8 -a 36 481 1 -a 36 571 4 -a 36 493 5 -a 36 880 9 -a 36 13 1 -a 36 681 2 -a 36 471 6 -a 36 613 1 -a 36 236 9 -a 36 936 6 -a 36 246 10 -a 36 977 6 -a 36 135 6 -a 36 350 5 -a 36 431 9 -a 36 331 5 -a 36 821 4 -a 36 629 4 -a 36 37 8 -a 36 1000 5 -a 36 380 1 -a 36 382 7 -a 36 268 4 -a 37 61 2 -a 37 985 10 -a 37 895 9 -a 37 914 7 -a 37 288 1 -a 37 556 7 -a 37 370 7 -a 37 858 2 -a 37 24 6 -a 37 225 2 -a 37 845 1 -a 37 36 8 -a 37 905 7 -a 37 291 3 -a 37 649 2 -a 37 117 1 -a 37 203 10 -a 37 894 5 -a 37 69 10 -a 37 337 5 -a 37 219 7 -a 37 500 7 -a 37 667 7 -a 37 16 2 -a 37 481 8 -a 37 271 2 -a 37 52 10 -a 37 457 6 -a 37 650 7 -a 37 434 4 -a 37 724 8 -a 37 711 3 -a 37 394 2 -a 37 595 5 -a 37 600 2 -a 37 681 3 -a 37 126 5 -a 37 969 1 -a 37 515 9 -a 37 149 6 -a 37 169 3 -a 37 335 7 -a 37 184 1 -a 37 50 6 -a 37 626 2 -a 37 832 8 -a 37 166 2 -a 37 828 3 -a 37 702 4 -a 37 234 8 -a 37 140 3 -a 37 920 10 -a 37 733 5 -a 37 806 9 -a 37 935 3 -a 37 190 5 -a 37 53 9 -a 37 987 3 -a 37 646 8 -a 37 702 3 -a 37 396 3 -a 37 345 4 -a 37 388 8 -a 37 789 10 -a 37 939 1 -a 37 987 9 -a 37 445 1 -a 37 40 8 -a 37 931 10 -a 37 959 2 -a 37 188 3 -a 37 76 9 -a 37 270 7 -a 37 372 9 -a 37 125 5 -a 37 895 3 -a 37 179 8 -a 37 290 5 -a 37 698 5 -a 37 880 10 -a 37 523 8 -a 37 837 9 -a 37 776 10 -a 37 232 2 -a 37 618 2 -a 37 686 10 -a 37 421 6 -a 37 670 1 -a 37 648 5 -a 38 42 7 -a 38 348 2 -a 38 19 7 -a 38 386 9 -a 38 735 9 -a 38 807 4 -a 38 301 9 -a 38 698 3 -a 38 228 8 -a 38 340 7 -a 38 604 7 -a 38 162 5 -a 38 528 5 -a 38 679 3 -a 38 431 3 -a 38 899 5 -a 38 803 9 -a 38 301 4 -a 38 53 4 -a 38 68 6 -a 38 998 5 -a 38 933 9 -a 38 591 6 -a 38 810 9 -a 38 684 5 -a 38 822 3 -a 38 404 5 -a 38 345 4 -a 38 218 4 -a 38 49 6 -a 38 993 2 -a 38 259 4 -a 38 396 10 -a 38 644 6 -a 38 107 6 -a 38 794 7 -a 38 944 8 -a 38 804 5 -a 38 260 2 -a 38 383 1 -a 38 158 4 -a 38 787 2 -a 38 38 10 -a 38 589 9 -a 38 661 10 -a 38 840 8 -a 38 889 10 -a 38 713 9 -a 38 908 8 -a 38 863 6 -a 38 621 6 -a 38 474 7 -a 38 648 9 -a 38 280 6 -a 38 271 4 -a 38 27 3 -a 38 625 6 -a 38 488 6 -a 38 76 4 -a 38 593 2 -a 38 746 1 -a 38 471 7 -a 38 579 3 -a 38 365 10 -a 38 577 7 -a 38 348 10 -a 38 285 8 -a 38 356 4 -a 38 344 9 -a 38 544 6 -a 38 739 7 -a 38 502 5 -a 38 306 1 -a 38 776 7 -a 38 66 4 -a 38 966 9 -a 38 591 6 -a 38 954 7 -a 38 654 5 -a 38 474 9 -a 38 792 3 -a 38 251 6 -a 38 947 6 -a 38 416 3 -a 38 530 5 -a 38 193 10 -a 38 442 6 -a 38 130 4 -a 38 680 8 -a 38 517 1 -a 38 722 4 -a 38 401 3 -a 38 988 7 -a 38 277 8 -a 38 766 1 -a 38 540 3 -a 38 624 2 -a 39 26 10 -a 39 896 7 -a 39 968 7 -a 39 569 3 -a 39 610 10 -a 39 445 2 -a 39 874 9 -a 39 361 7 -a 39 510 3 -a 39 815 7 -a 39 951 4 -a 39 439 2 -a 39 444 6 -a 39 401 3 -a 39 207 9 -a 39 694 7 -a 39 323 5 -a 39 622 8 -a 39 200 5 -a 39 516 6 -a 39 39 2 -a 39 329 8 -a 39 171 2 -a 39 556 8 -a 39 27 6 -a 39 572 1 -a 39 519 1 -a 39 303 7 -a 39 313 9 -a 39 34 4 -a 39 926 1 -a 39 338 4 -a 39 929 6 -a 39 869 4 -a 39 906 2 -a 39 514 8 -a 39 289 4 -a 39 755 4 -a 39 874 1 -a 39 798 9 -a 39 545 1 -a 39 801 9 -a 39 213 9 -a 39 988 9 -a 39 177 9 -a 39 419 6 -a 39 658 4 -a 39 499 5 -a 39 16 9 -a 39 857 10 -a 39 54 6 -a 39 161 3 -a 39 161 5 -a 39 609 7 -a 39 187 4 -a 39 732 10 -a 39 103 3 -a 39 489 1 -a 39 20 3 -a 39 137 5 -a 39 391 3 -a 39 357 5 -a 39 41 4 -a 39 235 7 -a 39 238 6 -a 39 555 2 -a 39 524 5 -a 39 992 1 -a 39 404 9 -a 39 297 10 -a 39 512 3 -a 39 180 1 -a 39 509 9 -a 39 475 3 -a 39 356 5 -a 39 927 5 -a 39 108 9 -a 39 855 9 -a 39 942 7 -a 39 964 1 -a 39 844 10 -a 39 996 7 -a 39 101 6 -a 40 580 9 -a 40 287 7 -a 40 711 7 -a 40 683 7 -a 40 776 7 -a 40 730 4 -a 40 819 9 -a 40 142 3 -a 40 62 8 -a 40 859 4 -a 40 376 2 -a 40 299 6 -a 40 389 8 -a 40 899 2 -a 40 266 9 -a 40 793 8 -a 40 172 4 -a 40 777 9 -a 40 972 4 -a 40 680 1 -a 40 228 4 -a 40 304 10 -a 40 583 8 -a 40 335 1 -a 40 134 6 -a 40 500 1 -a 40 275 9 -a 40 977 1 -a 40 471 4 -a 40 375 1 -a 40 957 3 -a 40 27 9 -a 40 661 4 -a 40 643 10 -a 40 709 5 -a 40 412 1 -a 40 349 7 -a 40 503 8 -a 40 553 9 -a 40 410 1 -a 40 337 7 -a 40 929 10 -a 40 709 9 -a 40 726 10 -a 40 803 10 -a 40 974 3 -a 40 494 1 -a 40 974 10 -a 40 727 3 -a 40 441 7 -a 40 630 10 -a 40 954 7 -a 40 744 3 -a 40 188 5 -a 40 264 4 -a 40 877 5 -a 40 687 10 -a 40 538 4 -a 40 830 10 -a 40 134 3 -a 40 912 3 -a 40 762 7 -a 40 160 2 -a 40 549 1 -a 40 380 3 -a 40 868 5 -a 40 960 10 -a 40 728 1 -a 40 346 7 -a 40 489 2 -a 40 114 6 -a 40 682 10 -a 40 393 2 -a 40 822 4 -a 40 383 7 -a 40 171 3 -a 40 771 9 -a 40 876 3 -a 40 121 5 -a 40 473 7 -a 40 293 8 -a 40 750 2 -a 40 402 3 -a 40 12 3 -a 40 937 4 -a 40 666 10 -a 40 889 6 -a 40 599 3 -a 40 179 1 -a 40 694 9 -a 41 732 5 -a 41 67 2 -a 41 431 4 -a 41 891 3 -a 41 615 3 -a 41 810 10 -a 41 734 6 -a 41 550 2 -a 41 514 3 -a 41 55 8 -a 41 14 6 -a 41 627 9 -a 41 737 6 -a 41 406 4 -a 41 424 7 -a 41 95 7 -a 41 577 3 -a 41 170 1 -a 41 971 10 -a 41 697 6 -a 41 643 6 -a 41 239 1 -a 41 422 5 -a 41 20 2 -a 41 250 7 -a 41 334 10 -a 41 685 4 -a 41 114 3 -a 41 932 9 -a 41 864 2 -a 41 807 3 -a 41 640 5 -a 41 930 8 -a 41 213 7 -a 41 506 10 -a 41 520 7 -a 41 216 1 -a 41 45 2 -a 41 512 9 -a 41 270 1 -a 41 59 4 -a 41 114 7 -a 41 464 6 -a 41 537 9 -a 41 77 7 -a 41 16 2 -a 41 706 6 -a 41 23 7 -a 41 712 1 -a 41 324 9 -a 41 261 10 -a 41 109 3 -a 41 344 1 -a 41 510 2 -a 41 442 6 -a 41 4 4 -a 41 624 1 -a 41 350 10 -a 41 867 2 -a 41 406 2 -a 41 989 5 -a 41 772 2 -a 41 619 1 -a 41 470 8 -a 41 267 3 -a 41 617 2 -a 41 685 2 -a 41 312 2 -a 41 104 9 -a 41 955 2 -a 41 370 10 -a 41 217 2 -a 41 936 4 -a 41 833 10 -a 41 753 3 -a 41 849 7 -a 41 434 8 -a 41 10 2 -a 41 536 2 -a 41 758 1 -a 41 270 8 -a 41 645 9 -a 41 77 1 -a 41 780 6 -a 41 62 2 -a 41 80 8 -a 41 379 7 -a 41 411 5 -a 41 947 1 -a 41 784 4 -a 41 375 7 -a 41 694 7 -a 41 378 6 -a 41 845 7 -a 41 961 2 -a 41 994 3 -a 41 505 7 -a 42 248 2 -a 42 73 8 -a 42 435 10 -a 42 617 5 -a 42 289 10 -a 42 347 10 -a 42 425 6 -a 42 17 1 -a 42 334 6 -a 42 249 4 -a 42 451 6 -a 42 344 1 -a 42 785 10 -a 42 184 1 -a 42 613 9 -a 42 405 8 -a 42 260 2 -a 42 368 4 -a 42 466 3 -a 42 339 6 -a 42 746 9 -a 42 877 10 -a 42 261 2 -a 42 506 9 -a 42 227 9 -a 42 955 7 -a 42 883 2 -a 42 47 7 -a 42 891 1 -a 42 853 3 -a 42 552 3 -a 42 114 10 -a 42 925 7 -a 42 986 10 -a 42 730 6 -a 42 190 3 -a 42 308 8 -a 42 130 10 -a 42 206 8 -a 42 642 4 -a 42 379 8 -a 42 656 10 -a 42 985 5 -a 42 139 2 -a 42 839 2 -a 42 573 8 -a 42 543 3 -a 42 74 10 -a 42 941 7 -a 42 413 4 -a 42 662 6 -a 42 860 6 -a 42 673 9 -a 42 143 5 -a 42 63 3 -a 42 603 4 -a 42 2 7 -a 42 109 10 -a 42 469 5 -a 42 854 3 -a 42 660 4 -a 42 582 5 -a 42 754 5 -a 42 622 6 -a 42 287 9 -a 42 943 2 -a 42 929 2 -a 42 417 9 -a 42 125 2 -a 42 546 1 -a 42 795 7 -a 42 780 10 -a 42 506 5 -a 42 933 8 -a 42 595 1 -a 42 55 6 -a 42 451 4 -a 42 668 3 -a 42 995 3 -a 42 434 2 -a 42 56 6 -a 42 632 7 -a 42 270 6 -a 42 729 4 -a 42 775 2 -a 42 332 5 -a 42 307 1 -a 42 776 3 -a 42 440 1 -a 42 776 7 -a 42 605 7 -a 42 76 3 -a 43 333 1 -a 43 334 10 -a 43 697 1 -a 43 620 1 -a 43 253 1 -a 43 601 2 -a 43 12 4 -a 43 377 7 -a 43 123 7 -a 43 806 8 -a 43 132 2 -a 43 628 8 -a 43 714 3 -a 43 726 7 -a 43 682 3 -a 43 140 7 -a 43 370 5 -a 43 652 8 -a 43 573 1 -a 43 425 3 -a 43 260 1 -a 43 842 5 -a 43 129 10 -a 43 10 8 -a 43 149 3 -a 43 436 3 -a 43 785 2 -a 43 589 4 -a 43 187 5 -a 43 365 2 -a 43 664 1 -a 43 519 4 -a 43 698 4 -a 43 336 8 -a 43 114 8 -a 43 950 10 -a 43 936 10 -a 43 125 10 -a 43 302 9 -a 43 34 5 -a 43 930 4 -a 43 434 5 -a 43 662 2 -a 43 619 5 -a 43 135 4 -a 43 319 7 -a 43 758 8 -a 43 504 9 -a 43 971 9 -a 43 307 9 -a 43 929 3 -a 43 206 10 -a 43 124 10 -a 43 33 8 -a 43 215 9 -a 43 273 3 -a 43 468 1 -a 43 999 3 -a 43 861 5 -a 43 654 6 -a 43 339 5 -a 43 500 1 -a 43 149 4 -a 43 12 4 -a 43 835 10 -a 43 262 6 -a 43 962 4 -a 43 746 3 -a 43 387 2 -a 43 239 6 -a 43 780 5 -a 43 292 3 -a 43 672 7 -a 43 417 5 -a 43 911 2 -a 43 807 1 -a 43 735 10 -a 43 644 1 -a 43 286 5 -a 43 681 9 -a 43 950 1 -a 43 190 5 -a 43 886 4 -a 43 50 2 -a 43 223 6 -a 43 76 8 -a 43 322 10 -a 43 690 1 -a 43 50 6 -a 43 158 3 -a 43 320 7 -a 43 388 9 -a 43 657 2 -a 43 468 8 -a 43 400 9 -a 43 467 4 -a 43 729 10 -a 43 337 4 -a 43 188 9 -a 43 91 10 -a 43 575 9 -a 43 967 2 -a 43 383 10 -a 43 223 3 -a 43 359 5 -a 43 269 10 -a 43 5 6 -a 43 70 10 -a 43 912 7 -a 43 290 10 -a 43 750 7 -a 43 838 10 -a 43 480 4 -a 44 612 1 -a 44 887 9 -a 44 702 5 -a 44 687 1 -a 44 184 6 -a 44 367 2 -a 44 737 9 -a 44 341 6 -a 44 686 2 -a 44 100 6 -a 44 997 1 -a 44 129 4 -a 44 499 3 -a 44 439 10 -a 44 858 10 -a 44 835 5 -a 44 626 5 -a 44 948 2 -a 44 386 8 -a 44 569 8 -a 44 306 3 -a 44 608 4 -a 44 927 7 -a 44 574 9 -a 44 612 3 -a 44 996 2 -a 44 462 7 -a 44 901 1 -a 44 722 1 -a 44 275 6 -a 44 356 10 -a 44 309 6 -a 44 137 6 -a 44 33 1 -a 44 995 10 -a 44 320 3 -a 44 400 4 -a 44 707 1 -a 44 660 5 -a 44 61 3 -a 44 807 4 -a 44 632 2 -a 44 190 3 -a 44 281 2 -a 44 46 7 -a 44 23 3 -a 44 92 3 -a 44 671 6 -a 44 970 3 -a 44 477 8 -a 44 215 9 -a 44 252 10 -a 44 60 6 -a 44 118 8 -a 44 825 9 -a 44 671 9 -a 44 89 2 -a 44 262 8 -a 44 547 8 -a 44 810 9 -a 44 536 1 -a 44 903 4 -a 44 94 4 -a 44 672 3 -a 44 935 3 -a 44 65 3 -a 44 991 2 -a 44 310 7 -a 44 771 5 -a 44 626 5 -a 44 371 8 -a 44 553 10 -a 44 233 6 -a 44 560 3 -a 44 834 5 -a 44 278 7 -a 44 582 3 -a 44 925 9 -a 44 949 7 -a 44 527 10 -a 44 377 8 -a 44 139 8 -a 44 778 8 -a 44 436 10 -a 44 256 6 -a 44 579 1 -a 44 82 10 -a 44 345 6 -a 44 840 2 -a 44 628 3 -a 44 130 2 -a 44 352 7 -a 44 506 5 -a 44 224 6 -a 44 417 2 -a 44 288 5 -a 44 990 10 -a 44 726 9 -a 44 34 1 -a 44 591 9 -a 44 72 4 -a 45 587 10 -a 45 824 3 -a 45 631 6 -a 45 396 10 -a 45 77 1 -a 45 188 8 -a 45 296 8 -a 45 1 6 -a 45 715 10 -a 45 672 7 -a 45 140 10 -a 45 468 5 -a 45 83 10 -a 45 395 5 -a 45 22 4 -a 45 164 2 -a 45 739 9 -a 45 862 5 -a 45 791 8 -a 45 869 3 -a 45 189 4 -a 45 273 1 -a 45 68 3 -a 45 187 2 -a 45 689 3 -a 45 355 9 -a 45 152 7 -a 45 390 8 -a 45 388 2 -a 45 743 1 -a 45 462 2 -a 45 974 9 -a 45 542 8 -a 45 68 10 -a 45 345 8 -a 45 618 3 -a 45 256 2 -a 45 640 7 -a 45 619 1 -a 45 970 3 -a 45 287 7 -a 45 758 6 -a 45 413 1 -a 45 369 7 -a 45 128 3 -a 45 435 6 -a 45 532 5 -a 45 867 4 -a 45 272 6 -a 45 299 9 -a 45 711 7 -a 45 460 1 -a 45 571 4 -a 45 778 10 -a 45 646 8 -a 45 235 2 -a 45 108 10 -a 45 798 10 -a 45 624 3 -a 45 495 1 -a 45 516 5 -a 45 61 8 -a 45 445 5 -a 45 33 8 -a 45 129 6 -a 45 789 10 -a 45 650 1 -a 45 384 4 -a 45 405 9 -a 45 244 9 -a 45 329 7 -a 45 691 1 -a 45 741 2 -a 45 36 1 -a 45 105 3 -a 45 151 9 -a 45 567 2 -a 45 971 9 -a 45 422 2 -a 45 865 3 -a 45 657 3 -a 45 881 1 -a 45 411 10 -a 45 410 5 -a 45 503 2 -a 45 645 3 -a 45 517 3 -a 45 276 9 -a 45 245 7 -a 45 791 8 -a 45 305 1 -a 45 431 2 -a 45 823 2 -a 45 433 10 -a 45 196 7 -a 45 448 6 -a 45 816 5 -a 45 600 8 -a 45 692 8 -a 45 120 2 -a 45 266 5 -a 45 668 1 -a 45 861 3 -a 45 301 8 -a 45 772 10 -a 45 868 5 -a 45 718 4 -a 45 409 6 -a 46 708 2 -a 46 350 7 -a 46 265 1 -a 46 95 8 -a 46 759 2 -a 46 767 8 -a 46 739 2 -a 46 251 7 -a 46 18 9 -a 46 983 5 -a 46 238 6 -a 46 808 6 -a 46 264 2 -a 46 668 6 -a 46 606 8 -a 46 696 9 -a 46 863 5 -a 46 30 5 -a 46 488 3 -a 46 438 9 -a 46 721 2 -a 46 607 3 -a 46 704 4 -a 46 364 4 -a 46 443 5 -a 46 112 5 -a 46 430 1 -a 46 847 9 -a 46 829 10 -a 46 838 7 -a 46 531 1 -a 46 155 4 -a 46 78 6 -a 46 625 4 -a 46 913 6 -a 46 845 8 -a 46 339 2 -a 46 140 2 -a 46 862 5 -a 46 298 1 -a 46 377 5 -a 46 646 9 -a 46 561 9 -a 46 20 4 -a 46 227 8 -a 46 232 9 -a 46 883 8 -a 46 256 5 -a 46 719 8 -a 46 296 3 -a 46 976 3 -a 46 302 6 -a 46 999 8 -a 46 316 9 -a 46 744 5 -a 46 979 8 -a 46 427 5 -a 46 149 6 -a 46 801 6 -a 46 231 6 -a 46 986 7 -a 46 307 10 -a 46 385 6 -a 46 40 2 -a 46 931 1 -a 46 274 4 -a 46 884 5 -a 46 246 1 -a 46 413 4 -a 46 721 4 -a 46 543 1 -a 46 789 2 -a 46 342 3 -a 46 79 3 -a 46 808 4 -a 46 569 8 -a 46 310 8 -a 46 666 7 -a 46 824 5 -a 46 5 4 -a 46 962 4 -a 46 776 10 -a 46 306 9 -a 46 936 4 -a 46 67 6 -a 46 25 5 -a 46 890 9 -a 46 493 10 -a 46 174 4 -a 46 667 10 -a 46 723 7 -a 46 135 8 -a 46 973 10 -a 46 84 9 -a 46 174 10 -a 46 880 9 -a 46 357 3 -a 46 33 7 -a 46 101 10 -a 46 769 6 -a 47 754 9 -a 47 643 1 -a 47 533 8 -a 47 71 1 -a 47 721 9 -a 47 316 8 -a 47 639 10 -a 47 6 5 -a 47 982 4 -a 47 439 3 -a 47 10 5 -a 47 919 9 -a 47 190 6 -a 47 315 4 -a 47 830 1 -a 47 256 9 -a 47 340 2 -a 47 696 9 -a 47 748 9 -a 47 513 9 -a 47 338 9 -a 47 446 4 -a 47 647 3 -a 47 286 7 -a 47 529 3 -a 47 821 1 -a 47 141 2 -a 47 885 9 -a 47 853 7 -a 47 241 9 -a 47 629 8 -a 47 582 3 -a 47 883 3 -a 47 137 8 -a 47 653 8 -a 47 579 4 -a 47 453 3 -a 47 267 1 -a 47 585 4 -a 47 410 2 -a 47 705 3 -a 47 594 10 -a 47 304 5 -a 47 894 6 -a 47 909 9 -a 47 109 3 -a 47 125 5 -a 47 224 8 -a 47 804 9 -a 47 872 1 -a 47 736 6 -a 47 117 1 -a 47 294 8 -a 47 358 3 -a 47 403 3 -a 47 822 3 -a 47 154 10 -a 47 543 1 -a 47 683 6 -a 47 784 2 -a 47 287 8 -a 47 564 2 -a 47 642 7 -a 47 424 6 -a 47 192 3 -a 47 197 8 -a 47 876 8 -a 47 459 7 -a 47 781 1 -a 47 261 7 -a 47 139 4 -a 47 350 1 -a 47 564 4 -a 47 9 4 -a 47 234 6 -a 47 672 9 -a 47 133 5 -a 47 457 4 -a 47 452 4 -a 47 168 9 -a 47 568 5 -a 47 274 8 -a 47 526 9 -a 47 970 6 -a 47 71 4 -a 47 679 2 -a 47 489 8 -a 47 753 10 -a 47 661 10 -a 47 248 10 -a 47 16 4 -a 47 201 10 -a 47 889 1 -a 47 439 1 -a 47 392 6 -a 48 61 10 -a 48 290 8 -a 48 850 10 -a 48 841 4 -a 48 550 3 -a 48 989 2 -a 48 167 6 -a 48 89 2 -a 48 997 1 -a 48 400 6 -a 48 760 1 -a 48 105 9 -a 48 857 10 -a 48 187 6 -a 48 85 2 -a 48 755 3 -a 48 358 3 -a 48 525 8 -a 48 700 8 -a 48 429 2 -a 48 180 3 -a 48 164 1 -a 48 157 5 -a 48 840 3 -a 48 411 8 -a 48 172 5 -a 48 16 3 -a 48 276 6 -a 48 610 1 -a 48 408 6 -a 48 336 8 -a 48 899 6 -a 48 233 8 -a 48 153 4 -a 48 424 8 -a 48 197 3 -a 48 319 10 -a 48 512 10 -a 48 169 1 -a 48 718 1 -a 48 248 9 -a 48 274 2 -a 48 550 7 -a 48 434 10 -a 48 358 7 -a 48 550 9 -a 48 164 4 -a 48 716 3 -a 48 50 1 -a 48 864 10 -a 48 120 4 -a 48 229 7 -a 48 3 1 -a 48 276 9 -a 48 45 5 -a 48 414 1 -a 48 448 4 -a 48 60 10 -a 48 689 9 -a 48 33 4 -a 48 467 3 -a 48 932 4 -a 48 700 8 -a 48 152 4 -a 48 331 10 -a 48 896 3 -a 48 470 4 -a 48 843 5 -a 48 41 4 -a 48 164 10 -a 48 66 9 -a 48 314 7 -a 48 713 3 -a 48 499 9 -a 48 671 6 -a 48 238 6 -a 48 663 2 -a 48 362 4 -a 48 288 2 -a 48 502 7 -a 48 481 4 -a 48 516 2 -a 48 504 7 -a 48 757 4 -a 48 560 10 -a 48 917 10 -a 48 180 1 -a 48 620 10 -a 48 581 10 -a 48 212 2 -a 48 62 1 -a 48 581 10 -a 48 119 7 -a 48 761 2 -a 48 732 5 -a 48 450 5 -a 48 633 7 -a 48 178 6 -a 48 268 3 -a 48 673 9 -a 48 341 4 -a 48 333 10 -a 48 986 10 -a 48 29 2 -a 48 831 9 -a 48 632 3 -a 48 267 6 -a 48 469 1 -a 49 994 9 -a 49 554 6 -a 49 970 2 -a 49 450 6 -a 49 45 3 -a 49 450 1 -a 49 182 2 -a 49 605 7 -a 49 342 3 -a 49 361 6 -a 49 200 7 -a 49 923 10 -a 49 573 8 -a 49 261 8 -a 49 479 2 -a 49 691 6 -a 49 186 8 -a 49 116 3 -a 49 630 6 -a 49 363 8 -a 49 383 10 -a 49 278 1 -a 49 703 3 -a 49 715 2 -a 49 239 2 -a 49 732 9 -a 49 522 2 -a 49 870 5 -a 49 998 3 -a 49 990 6 -a 49 839 9 -a 49 527 9 -a 49 936 5 -a 49 265 3 -a 49 571 9 -a 49 361 3 -a 49 446 2 -a 49 151 1 -a 49 702 1 -a 49 807 2 -a 49 350 9 -a 49 600 2 -a 49 355 8 -a 49 611 10 -a 49 54 3 -a 49 21 6 -a 49 608 8 -a 49 240 4 -a 49 137 3 -a 49 213 1 -a 49 602 7 -a 49 519 3 -a 49 490 8 -a 49 281 4 -a 49 210 7 -a 49 728 8 -a 49 731 5 -a 49 573 8 -a 49 985 1 -a 49 696 10 -a 49 388 9 -a 49 487 1 -a 49 607 2 -a 49 652 9 -a 49 33 3 -a 49 967 7 -a 49 73 8 -a 49 184 3 -a 49 645 10 -a 49 879 5 -a 49 533 3 -a 49 220 1 -a 49 209 9 -a 49 119 2 -a 49 274 9 -a 49 230 4 -a 49 726 4 -a 49 513 7 -a 49 366 7 -a 49 938 10 -a 49 90 9 -a 49 884 5 -a 49 403 2 -a 49 370 10 -a 49 69 2 -a 49 106 2 -a 49 357 4 -a 49 799 9 -a 49 679 8 -a 49 317 1 -a 49 471 1 -a 49 42 10 -a 49 803 4 -a 49 53 2 -a 49 693 2 -a 49 836 3 -a 49 765 5 -a 49 640 5 -a 49 620 9 -a 49 527 6 -a 49 859 6 -a 49 828 6 -a 49 646 1 -a 49 108 7 -a 49 33 7 -a 49 347 10 -a 49 620 8 -a 49 398 5 -a 49 261 2 -a 49 710 7 -a 49 258 8 -a 49 663 2 -a 49 55 6 -a 49 326 5 -a 49 769 6 -a 49 412 1 -a 49 101 7 -a 49 423 3 -a 49 728 3 -a 49 571 7 -a 49 464 1 -a 50 507 6 -a 50 623 10 -a 50 132 1 -a 50 318 6 -a 50 618 4 -a 50 896 5 -a 50 312 1 -a 50 233 1 -a 50 491 2 -a 50 838 5 -a 50 68 9 -a 50 295 4 -a 50 459 7 -a 50 175 9 -a 50 327 2 -a 50 806 2 -a 50 795 8 -a 50 725 3 -a 50 42 1 -a 50 480 5 -a 50 982 5 -a 50 704 5 -a 50 534 1 -a 50 283 9 -a 50 448 5 -a 50 945 10 -a 50 383 6 -a 50 870 4 -a 50 649 2 -a 50 953 9 -a 50 309 9 -a 50 131 8 -a 50 552 8 -a 50 440 3 -a 50 448 1 -a 50 145 10 -a 50 312 4 -a 50 759 5 -a 50 378 7 -a 50 802 7 -a 50 572 5 -a 50 445 4 -a 50 72 9 -a 50 7 4 -a 50 619 2 -a 50 399 4 -a 50 812 2 -a 50 389 10 -a 50 99 5 -a 50 853 2 -a 50 868 2 -a 50 56 9 -a 50 532 10 -a 50 378 1 -a 50 338 2 -a 50 980 1 -a 50 298 1 -a 50 721 5 -a 50 825 2 -a 50 946 8 -a 50 649 3 -a 50 110 8 -a 50 52 7 -a 50 176 6 -a 50 549 4 -a 50 499 4 -a 50 321 1 -a 50 860 5 -a 50 233 6 -a 50 698 10 -a 50 638 4 -a 50 805 10 -a 50 118 4 -a 50 709 10 -a 50 811 10 -a 50 736 8 -a 50 83 5 -a 50 598 8 -a 50 101 7 -a 50 181 6 -a 50 426 6 -a 50 968 2 -a 50 236 8 -a 50 957 9 -a 50 321 8 -a 50 574 3 -a 50 912 5 -a 50 619 10 -a 50 270 4 -a 50 713 4 -a 50 540 8 -a 50 918 4 -a 50 822 1 -a 50 592 6 -a 50 70 3 -a 51 346 7 -a 51 66 3 -a 51 390 1 -a 51 182 8 -a 51 299 4 -a 51 63 2 -a 51 819 5 -a 51 79 10 -a 51 180 3 -a 51 503 4 -a 51 889 2 -a 51 915 7 -a 51 586 6 -a 51 462 4 -a 51 766 8 -a 51 887 2 -a 51 959 2 -a 51 819 2 -a 51 255 5 -a 51 551 2 -a 51 707 3 -a 51 873 4 -a 51 820 7 -a 51 395 6 -a 51 389 9 -a 51 713 3 -a 51 192 7 -a 51 980 8 -a 51 782 4 -a 51 537 5 -a 51 21 2 -a 51 147 2 -a 51 718 3 -a 51 319 5 -a 51 209 10 -a 51 512 6 -a 51 397 10 -a 51 388 6 -a 51 261 5 -a 51 279 7 -a 51 576 3 -a 51 722 10 -a 51 269 7 -a 51 317 1 -a 51 584 2 -a 51 203 6 -a 51 294 3 -a 51 379 7 -a 51 458 7 -a 51 844 3 -a 51 61 6 -a 51 306 1 -a 51 639 6 -a 51 455 7 -a 51 694 10 -a 51 328 8 -a 51 646 9 -a 51 649 7 -a 51 85 7 -a 51 158 7 -a 51 670 8 -a 51 232 5 -a 51 876 3 -a 51 988 1 -a 51 440 1 -a 51 363 5 -a 51 361 6 -a 51 828 5 -a 51 353 7 -a 51 621 3 -a 51 82 4 -a 51 928 10 -a 51 319 9 -a 51 350 10 -a 51 221 5 -a 51 902 1 -a 51 553 5 -a 51 514 1 -a 51 256 8 -a 51 334 2 -a 51 316 3 -a 51 291 2 -a 51 972 9 -a 51 770 7 -a 51 985 8 -a 51 275 7 -a 51 391 8 -a 51 609 10 -a 51 360 3 -a 51 549 3 -a 51 254 7 -a 51 591 1 -a 51 400 10 -a 51 218 1 -a 51 6 2 -a 51 762 7 -a 51 578 9 -a 51 833 3 -a 51 91 10 -a 51 174 4 -a 51 914 1 -a 51 492 6 -a 51 240 10 -a 51 214 10 -a 51 370 5 -a 51 792 9 -a 51 728 7 -a 51 625 4 -a 51 777 8 -a 51 37 3 -a 51 941 2 -a 51 43 3 -a 52 686 6 -a 52 3 10 -a 52 259 4 -a 52 53 9 -a 52 612 1 -a 52 618 2 -a 52 601 9 -a 52 865 5 -a 52 184 3 -a 52 1000 10 -a 52 58 7 -a 52 189 1 -a 52 737 8 -a 52 635 7 -a 52 827 3 -a 52 809 2 -a 52 911 3 -a 52 821 10 -a 52 276 4 -a 52 126 5 -a 52 10 5 -a 52 645 8 -a 52 917 5 -a 52 737 9 -a 52 246 6 -a 52 669 6 -a 52 773 8 -a 52 162 3 -a 52 712 10 -a 52 757 5 -a 52 847 1 -a 52 714 5 -a 52 899 3 -a 52 301 5 -a 52 608 1 -a 52 475 4 -a 52 142 8 -a 52 791 3 -a 52 450 8 -a 52 199 5 -a 52 979 7 -a 52 163 1 -a 52 834 6 -a 52 976 3 -a 52 989 5 -a 52 618 3 -a 52 863 10 -a 52 785 8 -a 52 893 7 -a 52 988 2 -a 52 795 10 -a 52 514 1 -a 52 881 6 -a 52 507 5 -a 52 759 1 -a 52 525 10 -a 52 256 8 -a 52 920 5 -a 52 212 3 -a 52 742 10 -a 52 926 3 -a 52 617 1 -a 52 202 5 -a 52 585 6 -a 52 67 5 -a 52 343 1 -a 52 351 5 -a 52 517 3 -a 52 542 9 -a 52 305 3 -a 52 679 3 -a 52 351 10 -a 52 257 4 -a 52 643 4 -a 52 968 4 -a 52 95 4 -a 52 404 9 -a 52 836 8 -a 52 58 4 -a 52 174 2 -a 52 325 3 -a 52 938 7 -a 52 680 1 -a 52 59 9 -a 52 439 4 -a 52 935 3 -a 52 978 7 -a 52 650 4 -a 52 922 7 -a 53 696 9 -a 53 551 1 -a 53 899 1 -a 53 288 6 -a 53 753 3 -a 53 459 8 -a 53 354 2 -a 53 71 3 -a 53 809 7 -a 53 870 6 -a 53 612 4 -a 53 90 5 -a 53 524 8 -a 53 962 10 -a 53 346 8 -a 53 143 2 -a 53 905 2 -a 53 440 8 -a 53 546 6 -a 53 717 1 -a 53 497 3 -a 53 719 2 -a 53 17 10 -a 53 411 2 -a 53 374 4 -a 53 76 6 -a 53 849 6 -a 53 285 4 -a 53 29 6 -a 53 474 2 -a 53 182 4 -a 53 724 6 -a 53 1 8 -a 53 57 2 -a 53 753 7 -a 53 515 9 -a 53 341 1 -a 53 823 8 -a 53 300 3 -a 53 186 8 -a 53 411 4 -a 53 389 10 -a 53 710 5 -a 53 348 8 -a 53 734 4 -a 53 852 6 -a 53 229 3 -a 53 149 2 -a 53 373 9 -a 53 945 9 -a 53 645 8 -a 53 67 7 -a 53 961 7 -a 53 31 4 -a 53 440 1 -a 53 12 9 -a 53 879 7 -a 53 724 5 -a 53 41 5 -a 53 329 7 -a 53 906 4 -a 53 764 9 -a 53 329 10 -a 53 962 2 -a 53 751 5 -a 53 57 5 -a 53 452 3 -a 53 67 8 -a 53 879 7 -a 53 751 2 -a 53 252 4 -a 53 265 5 -a 53 115 6 -a 53 961 9 -a 53 613 10 -a 53 848 2 -a 53 788 5 -a 53 841 6 -a 53 996 9 -a 53 136 3 -a 53 761 1 -a 53 617 6 -a 53 202 3 -a 53 697 3 -a 53 647 5 -a 53 642 7 -a 53 709 6 -a 53 502 10 -a 53 341 1 -a 53 749 5 -a 53 830 6 -a 53 222 9 -a 53 488 1 -a 53 134 6 -a 53 159 2 -a 53 214 10 -a 53 190 7 -a 54 611 6 -a 54 280 7 -a 54 44 5 -a 54 337 7 -a 54 532 8 -a 54 309 7 -a 54 452 2 -a 54 468 8 -a 54 921 4 -a 54 275 6 -a 54 232 5 -a 54 737 3 -a 54 247 4 -a 54 367 5 -a 54 473 9 -a 54 863 4 -a 54 569 4 -a 54 145 9 -a 54 485 9 -a 54 186 5 -a 54 853 2 -a 54 986 10 -a 54 526 8 -a 54 577 10 -a 54 791 6 -a 54 748 1 -a 54 41 5 -a 54 924 5 -a 54 906 6 -a 54 254 10 -a 54 89 6 -a 54 492 2 -a 54 534 3 -a 54 133 10 -a 54 829 3 -a 54 41 3 -a 54 441 1 -a 54 256 4 -a 54 508 10 -a 54 337 10 -a 54 530 3 -a 54 739 7 -a 54 49 3 -a 54 776 5 -a 54 82 7 -a 54 521 10 -a 54 614 8 -a 54 650 7 -a 54 665 5 -a 54 75 7 -a 54 835 8 -a 54 494 4 -a 54 36 2 -a 54 336 7 -a 54 46 6 -a 54 827 2 -a 54 59 2 -a 54 86 5 -a 54 726 6 -a 54 965 5 -a 54 340 8 -a 54 815 6 -a 54 432 2 -a 54 873 9 -a 54 947 8 -a 54 236 2 -a 54 913 4 -a 54 363 10 -a 54 491 7 -a 54 396 10 -a 54 699 5 -a 54 111 1 -a 54 747 9 -a 54 772 9 -a 54 192 3 -a 54 243 3 -a 54 362 9 -a 54 841 4 -a 54 907 8 -a 54 436 10 -a 54 651 10 -a 54 376 9 -a 54 471 3 -a 54 986 4 -a 54 422 7 -a 54 273 2 -a 54 21 5 -a 54 507 10 -a 54 999 5 -a 54 985 9 -a 54 846 6 -a 54 789 5 -a 54 392 1 -a 54 694 5 -a 54 711 3 -a 54 628 9 -a 54 582 7 -a 54 49 10 -a 54 94 5 -a 54 978 3 -a 54 747 2 -a 54 90 5 -a 54 64 7 -a 54 469 4 -a 54 862 5 -a 54 255 4 -a 54 711 1 -a 55 199 1 -a 55 71 4 -a 55 593 5 -a 55 634 3 -a 55 721 6 -a 55 969 10 -a 55 80 9 -a 55 682 10 -a 55 366 10 -a 55 353 7 -a 55 702 8 -a 55 872 4 -a 55 327 2 -a 55 662 8 -a 55 694 7 -a 55 91 9 -a 55 30 3 -a 55 363 1 -a 55 801 1 -a 55 657 1 -a 55 945 1 -a 55 849 5 -a 55 750 8 -a 55 898 10 -a 55 571 2 -a 55 840 7 -a 55 961 5 -a 55 15 1 -a 55 677 3 -a 55 191 5 -a 55 725 10 -a 55 875 1 -a 55 261 1 -a 55 293 10 -a 55 484 6 -a 55 981 8 -a 55 237 3 -a 55 563 8 -a 55 638 3 -a 55 602 3 -a 55 915 10 -a 55 316 3 -a 55 450 2 -a 55 217 1 -a 55 977 1 -a 55 119 2 -a 55 307 8 -a 55 481 7 -a 55 83 10 -a 55 638 4 -a 55 401 7 -a 55 931 4 -a 55 364 4 -a 55 274 5 -a 55 477 10 -a 55 179 1 -a 55 210 5 -a 55 491 5 -a 55 855 5 -a 55 400 5 -a 55 191 6 -a 55 705 1 -a 55 660 10 -a 55 484 1 -a 55 164 4 -a 55 616 5 -a 55 720 1 -a 55 726 7 -a 55 230 5 -a 55 298 5 -a 55 617 2 -a 55 545 3 -a 55 747 10 -a 55 833 7 -a 55 497 6 -a 55 865 4 -a 55 116 8 -a 55 479 1 -a 55 321 10 -a 55 198 5 -a 55 92 4 -a 55 722 6 -a 55 105 10 -a 55 455 4 -a 55 995 9 -a 55 581 7 -a 55 633 8 -a 55 181 10 -a 55 48 10 -a 55 463 10 -a 55 580 6 -a 55 238 6 -a 55 143 8 -a 55 216 3 -a 55 721 5 -a 55 306 6 -a 55 831 4 -a 55 417 10 -a 55 8 3 -a 55 36 2 -a 55 714 6 -a 55 624 8 -a 55 580 2 -a 55 436 1 -a 55 432 9 -a 55 53 2 -a 55 276 7 -a 55 547 5 -a 55 531 8 -a 55 596 10 -a 55 745 7 -a 55 622 4 -a 56 293 5 -a 56 849 2 -a 56 53 9 -a 56 264 10 -a 56 405 5 -a 56 685 7 -a 56 444 3 -a 56 452 7 -a 56 124 8 -a 56 690 2 -a 56 266 3 -a 56 214 9 -a 56 386 4 -a 56 572 10 -a 56 21 9 -a 56 802 2 -a 56 579 2 -a 56 56 6 -a 56 491 3 -a 56 178 1 -a 56 636 2 -a 56 926 5 -a 56 609 8 -a 56 688 3 -a 56 177 6 -a 56 132 1 -a 56 194 7 -a 56 773 7 -a 56 876 9 -a 56 815 3 -a 56 41 2 -a 56 700 7 -a 56 867 4 -a 56 304 4 -a 56 80 3 -a 56 528 7 -a 56 747 4 -a 56 532 8 -a 56 651 9 -a 56 746 4 -a 56 197 9 -a 56 916 5 -a 56 959 2 -a 56 582 6 -a 56 463 10 -a 56 979 4 -a 56 360 2 -a 56 17 3 -a 56 11 10 -a 56 850 2 -a 56 194 8 -a 56 646 1 -a 56 752 10 -a 56 803 10 -a 56 309 7 -a 56 928 6 -a 56 934 2 -a 56 502 6 -a 56 676 2 -a 56 785 1 -a 56 292 6 -a 56 717 7 -a 56 460 5 -a 56 135 4 -a 56 539 5 -a 56 662 2 -a 56 743 1 -a 56 46 2 -a 56 288 10 -a 56 464 9 -a 56 242 8 -a 56 179 2 -a 56 398 2 -a 56 824 1 -a 56 642 7 -a 56 353 9 -a 56 159 3 -a 56 658 9 -a 56 363 1 -a 56 852 6 -a 56 735 8 -a 56 630 6 -a 56 292 10 -a 56 639 8 -a 56 539 10 -a 56 793 1 -a 56 290 4 -a 56 299 5 -a 56 60 8 -a 56 758 6 -a 56 194 9 -a 56 272 7 -a 56 855 5 -a 56 720 9 -a 56 318 9 -a 56 118 2 -a 56 159 5 -a 56 559 3 -a 57 297 1 -a 57 556 1 -a 57 358 3 -a 57 938 9 -a 57 908 7 -a 57 516 3 -a 57 571 2 -a 57 246 3 -a 57 500 3 -a 57 398 6 -a 57 229 7 -a 57 210 3 -a 57 3 3 -a 57 520 1 -a 57 848 8 -a 57 541 9 -a 57 288 2 -a 57 114 10 -a 57 839 9 -a 57 348 10 -a 57 95 7 -a 57 572 9 -a 57 541 8 -a 57 72 8 -a 57 844 5 -a 57 372 7 -a 57 791 2 -a 57 137 10 -a 57 489 7 -a 57 949 6 -a 57 695 4 -a 57 785 9 -a 57 481 1 -a 57 29 6 -a 57 698 10 -a 57 364 9 -a 57 544 7 -a 57 245 4 -a 57 610 9 -a 57 19 10 -a 57 642 8 -a 57 838 5 -a 57 229 4 -a 57 645 1 -a 57 334 9 -a 57 52 8 -a 57 161 5 -a 57 621 3 -a 57 165 4 -a 57 1000 2 -a 57 968 9 -a 57 260 10 -a 57 547 5 -a 57 485 4 -a 57 331 2 -a 57 366 3 -a 57 856 10 -a 57 98 5 -a 57 502 2 -a 57 320 9 -a 57 22 1 -a 57 173 10 -a 57 81 2 -a 57 502 8 -a 57 201 1 -a 57 778 9 -a 57 866 7 -a 57 744 7 -a 57 451 5 -a 57 763 1 -a 57 640 8 -a 57 264 3 -a 57 991 7 -a 57 260 2 -a 57 597 8 -a 57 18 6 -a 57 420 1 -a 57 194 8 -a 57 183 4 -a 57 395 6 -a 57 137 9 -a 57 442 6 -a 57 942 2 -a 57 621 8 -a 57 772 6 -a 57 283 5 -a 57 452 2 -a 57 869 4 -a 57 785 8 -a 57 772 4 -a 57 891 5 -a 57 957 3 -a 57 852 10 -a 58 368 10 -a 58 133 4 -a 58 605 1 -a 58 209 9 -a 58 876 9 -a 58 603 9 -a 58 659 6 -a 58 614 10 -a 58 218 10 -a 58 923 3 -a 58 580 2 -a 58 477 8 -a 58 495 8 -a 58 598 2 -a 58 896 3 -a 58 688 7 -a 58 780 7 -a 58 267 7 -a 58 825 10 -a 58 197 5 -a 58 184 7 -a 58 421 5 -a 58 968 4 -a 58 466 8 -a 58 873 5 -a 58 813 8 -a 58 226 2 -a 58 620 1 -a 58 679 4 -a 58 158 9 -a 58 447 4 -a 58 22 10 -a 58 290 1 -a 58 27 5 -a 58 231 5 -a 58 142 10 -a 58 629 4 -a 58 889 2 -a 58 755 9 -a 58 846 8 -a 58 787 6 -a 58 311 5 -a 58 298 2 -a 58 258 4 -a 58 908 3 -a 58 170 2 -a 58 945 6 -a 58 663 5 -a 58 436 8 -a 58 745 7 -a 58 859 6 -a 58 619 7 -a 58 142 10 -a 58 802 5 -a 58 60 7 -a 58 590 1 -a 58 286 1 -a 58 609 1 -a 58 244 9 -a 58 443 9 -a 58 31 6 -a 58 266 9 -a 58 733 7 -a 58 57 9 -a 58 496 9 -a 58 874 5 -a 58 686 9 -a 58 360 9 -a 58 604 9 -a 58 507 5 -a 58 123 3 -a 58 914 5 -a 58 805 2 -a 58 380 9 -a 58 797 5 -a 58 974 8 -a 58 300 5 -a 58 435 9 -a 58 385 8 -a 58 21 5 -a 58 269 4 -a 58 162 5 -a 58 47 1 -a 58 38 9 -a 58 151 8 -a 58 636 8 -a 58 323 2 -a 58 759 8 -a 58 880 3 -a 58 766 5 -a 58 789 10 -a 58 121 4 -a 58 474 2 -a 58 845 5 -a 58 616 2 -a 58 323 1 -a 58 506 8 -a 58 975 10 -a 58 926 3 -a 58 73 3 -a 58 816 7 -a 58 793 7 -a 58 452 5 -a 58 588 8 -a 58 742 9 -a 58 752 5 -a 58 102 8 -a 58 772 1 -a 59 267 10 -a 59 80 9 -a 59 933 7 -a 59 313 2 -a 59 117 8 -a 59 59 2 -a 59 949 9 -a 59 440 5 -a 59 817 10 -a 59 804 2 -a 59 181 7 -a 59 581 5 -a 59 924 9 -a 59 654 10 -a 59 401 8 -a 59 515 1 -a 59 976 9 -a 59 907 7 -a 59 465 3 -a 59 877 3 -a 59 895 3 -a 59 538 10 -a 59 668 2 -a 59 663 2 -a 59 989 9 -a 59 232 2 -a 59 380 6 -a 59 716 7 -a 59 230 4 -a 59 481 6 -a 59 463 9 -a 59 496 4 -a 59 560 10 -a 59 371 2 -a 59 809 8 -a 59 676 4 -a 59 429 8 -a 59 733 10 -a 59 91 7 -a 59 221 5 -a 59 512 6 -a 59 271 8 -a 59 801 4 -a 59 411 10 -a 59 924 4 -a 59 178 2 -a 59 925 5 -a 59 875 1 -a 59 60 8 -a 59 365 3 -a 59 728 5 -a 59 954 2 -a 59 902 7 -a 59 371 3 -a 59 592 5 -a 59 867 10 -a 59 602 1 -a 59 971 6 -a 59 558 2 -a 59 831 9 -a 59 427 10 -a 59 303 6 -a 59 986 6 -a 59 367 10 -a 59 87 10 -a 59 637 5 -a 59 796 1 -a 59 819 5 -a 59 728 7 -a 59 306 5 -a 59 998 5 -a 59 793 9 -a 59 716 10 -a 59 898 10 -a 59 970 3 -a 59 616 9 -a 59 748 5 -a 59 5 1 -a 59 980 4 -a 59 451 8 -a 59 958 5 -a 59 858 9 -a 59 822 2 -a 59 525 3 -a 59 700 8 -a 59 399 2 -a 59 471 1 -a 59 233 6 -a 59 206 4 -a 59 897 10 -a 59 229 5 -a 59 508 2 -a 59 858 10 -a 59 596 2 -a 59 594 7 -a 59 470 1 -a 59 367 3 -a 59 388 5 -a 59 173 6 -a 59 358 5 -a 59 693 7 -a 59 147 2 -a 59 126 2 -a 59 384 5 -a 59 20 9 -a 59 71 2 -a 60 999 5 -a 60 767 5 -a 60 75 2 -a 60 954 1 -a 60 194 6 -a 60 8 10 -a 60 787 3 -a 60 532 3 -a 60 462 9 -a 60 389 10 -a 60 695 9 -a 60 594 6 -a 60 874 2 -a 60 923 4 -a 60 77 3 -a 60 707 8 -a 60 494 5 -a 60 670 10 -a 60 153 9 -a 60 860 7 -a 60 33 7 -a 60 325 2 -a 60 194 5 -a 60 725 4 -a 60 471 4 -a 60 319 3 -a 60 84 6 -a 60 490 3 -a 60 390 9 -a 60 58 6 -a 60 233 3 -a 60 464 9 -a 60 426 7 -a 60 472 5 -a 60 774 10 -a 60 416 7 -a 60 212 2 -a 60 804 8 -a 60 981 4 -a 60 906 4 -a 60 374 9 -a 60 830 5 -a 60 804 8 -a 60 450 9 -a 60 513 10 -a 60 274 1 -a 60 96 8 -a 60 665 1 -a 60 109 9 -a 60 128 3 -a 60 989 4 -a 60 302 6 -a 60 853 7 -a 60 436 9 -a 60 621 5 -a 60 936 6 -a 60 925 2 -a 60 994 4 -a 60 133 5 -a 60 449 9 -a 60 981 6 -a 60 558 7 -a 60 920 1 -a 60 730 7 -a 60 973 9 -a 60 899 4 -a 60 941 9 -a 60 753 4 -a 60 855 7 -a 60 822 7 -a 60 102 7 -a 60 660 6 -a 60 602 7 -a 60 551 8 -a 60 148 3 -a 60 875 2 -a 60 646 10 -a 60 812 5 -a 60 983 2 -a 60 774 8 -a 60 777 1 -a 60 261 7 -a 60 602 3 -a 60 188 7 -a 60 881 1 -a 60 513 10 -a 60 88 7 -a 60 866 1 -a 60 482 2 -a 60 221 5 -a 60 290 8 -a 60 438 5 -a 60 778 8 -a 60 186 7 -a 60 144 1 -a 60 727 4 -a 60 60 4 -a 60 60 2 -a 60 455 2 -a 60 914 6 -a 60 882 3 -a 61 556 5 -a 61 549 6 -a 61 459 2 -a 61 82 8 -a 61 697 10 -a 61 309 10 -a 61 728 4 -a 61 484 10 -a 61 267 5 -a 61 477 1 -a 61 236 5 -a 61 527 2 -a 61 54 2 -a 61 423 2 -a 61 383 10 -a 61 566 7 -a 61 511 9 -a 61 224 7 -a 61 24 3 -a 61 731 8 -a 61 514 4 -a 61 461 3 -a 61 484 5 -a 61 699 3 -a 61 604 2 -a 61 186 8 -a 61 758 5 -a 61 664 1 -a 61 640 1 -a 61 647 2 -a 61 521 1 -a 61 171 5 -a 61 171 3 -a 61 979 7 -a 61 253 8 -a 61 867 3 -a 61 263 3 -a 61 980 10 -a 61 327 6 -a 61 529 8 -a 61 432 10 -a 61 562 3 -a 61 32 6 -a 61 485 4 -a 61 985 9 -a 61 414 9 -a 61 26 9 -a 61 471 10 -a 61 638 8 -a 61 49 3 -a 61 177 7 -a 61 127 5 -a 61 510 1 -a 61 660 1 -a 61 825 2 -a 61 89 10 -a 61 846 7 -a 61 558 7 -a 61 752 3 -a 61 461 2 -a 61 180 9 -a 61 248 10 -a 61 632 6 -a 61 350 3 -a 61 202 3 -a 61 884 4 -a 61 193 3 -a 61 464 2 -a 61 839 1 -a 61 519 1 -a 61 993 2 -a 61 246 1 -a 61 56 3 -a 61 730 10 -a 61 16 1 -a 61 413 8 -a 61 755 4 -a 61 486 9 -a 61 26 5 -a 61 804 2 -a 61 662 10 -a 61 152 1 -a 61 289 5 -a 61 298 1 -a 61 976 1 -a 61 377 2 -a 61 119 1 -a 61 509 8 -a 61 105 5 -a 61 579 2 -a 61 688 10 -a 61 352 4 -a 61 186 3 -a 61 14 1 -a 61 554 6 -a 61 45 10 -a 61 206 4 -a 61 883 3 -a 61 724 3 -a 62 985 10 -a 62 104 2 -a 62 779 9 -a 62 984 3 -a 62 833 5 -a 62 795 3 -a 62 373 8 -a 62 564 2 -a 62 256 4 -a 62 398 3 -a 62 343 2 -a 62 918 10 -a 62 550 1 -a 62 631 3 -a 62 191 10 -a 62 501 7 -a 62 309 6 -a 62 87 3 -a 62 887 4 -a 62 673 9 -a 62 439 5 -a 62 49 5 -a 62 686 8 -a 62 992 9 -a 62 93 9 -a 62 891 6 -a 62 984 4 -a 62 976 10 -a 62 590 1 -a 62 945 7 -a 62 55 2 -a 62 345 2 -a 62 904 7 -a 62 888 8 -a 62 115 1 -a 62 252 1 -a 62 427 4 -a 62 370 5 -a 62 650 6 -a 62 769 2 -a 62 263 10 -a 62 175 7 -a 62 375 5 -a 62 453 6 -a 62 675 10 -a 62 357 6 -a 62 761 5 -a 62 660 1 -a 62 444 2 -a 62 624 8 -a 62 309 10 -a 62 882 1 -a 62 672 5 -a 62 994 8 -a 62 849 2 -a 62 764 2 -a 62 861 9 -a 62 808 5 -a 62 715 6 -a 62 426 6 -a 62 728 10 -a 62 770 3 -a 62 770 6 -a 62 608 9 -a 62 633 2 -a 62 884 2 -a 62 859 7 -a 62 35 9 -a 62 230 6 -a 62 484 8 -a 62 803 6 -a 62 492 7 -a 62 658 5 -a 62 153 1 -a 62 945 7 -a 62 309 3 -a 62 509 4 -a 62 681 7 -a 62 968 5 -a 62 952 9 -a 62 280 4 -a 62 252 10 -a 62 809 8 -a 62 951 10 -a 62 222 5 -a 62 633 7 -a 62 691 6 -a 62 58 4 -a 62 417 4 -a 62 381 1 -a 62 483 5 -a 62 120 2 -a 62 126 5 -a 62 229 4 -a 63 727 3 -a 63 758 7 -a 63 88 9 -a 63 562 9 -a 63 792 7 -a 63 317 8 -a 63 21 5 -a 63 570 3 -a 63 809 1 -a 63 679 9 -a 63 722 7 -a 63 729 3 -a 63 987 6 -a 63 207 8 -a 63 385 9 -a 63 930 8 -a 63 134 5 -a 63 665 9 -a 63 158 9 -a 63 943 4 -a 63 591 2 -a 63 379 9 -a 63 551 3 -a 63 257 8 -a 63 436 5 -a 63 967 5 -a 63 638 9 -a 63 918 6 -a 63 63 1 -a 63 763 1 -a 63 122 1 -a 63 789 5 -a 63 497 10 -a 63 210 10 -a 63 326 6 -a 63 264 2 -a 63 526 4 -a 63 347 9 -a 63 834 5 -a 63 310 6 -a 63 1 3 -a 63 531 2 -a 63 14 6 -a 63 987 5 -a 63 737 3 -a 63 399 2 -a 63 892 2 -a 63 871 8 -a 63 39 10 -a 63 25 1 -a 63 789 10 -a 63 629 8 -a 63 403 7 -a 63 315 9 -a 63 886 2 -a 63 838 6 -a 63 258 6 -a 63 499 7 -a 63 732 6 -a 63 320 7 -a 63 237 5 -a 63 853 10 -a 63 84 1 -a 63 733 8 -a 63 38 2 -a 63 410 5 -a 63 997 2 -a 63 564 2 -a 63 756 5 -a 63 806 10 -a 63 873 10 -a 63 756 5 -a 63 312 2 -a 63 887 10 -a 63 718 5 -a 63 25 7 -a 63 261 6 -a 63 585 7 -a 63 895 4 -a 63 299 7 -a 63 610 2 -a 63 659 8 -a 63 927 2 -a 63 973 9 -a 63 788 10 -a 63 826 8 -a 63 206 4 -a 63 262 5 -a 63 533 5 -a 63 525 2 -a 63 499 6 -a 63 361 2 -a 63 609 5 -a 63 207 5 -a 63 399 10 -a 63 179 5 -a 63 962 1 -a 63 749 6 -a 63 984 8 -a 63 810 5 -a 64 480 7 -a 64 272 8 -a 64 672 10 -a 64 173 5 -a 64 296 6 -a 64 932 10 -a 64 757 4 -a 64 166 7 -a 64 206 5 -a 64 342 8 -a 64 824 7 -a 64 109 9 -a 64 330 2 -a 64 772 4 -a 64 896 6 -a 64 131 4 -a 64 978 7 -a 64 134 2 -a 64 663 2 -a 64 478 4 -a 64 632 10 -a 64 62 9 -a 64 838 6 -a 64 397 9 -a 64 55 3 -a 64 334 1 -a 64 803 2 -a 64 976 7 -a 64 120 8 -a 64 258 8 -a 64 223 10 -a 64 791 7 -a 64 430 2 -a 64 518 3 -a 64 699 6 -a 64 163 10 -a 64 683 9 -a 64 904 1 -a 64 504 8 -a 64 482 4 -a 64 833 7 -a 64 230 7 -a 64 884 8 -a 64 963 5 -a 64 183 9 -a 64 601 6 -a 64 660 8 -a 64 624 6 -a 64 600 9 -a 64 722 6 -a 64 437 4 -a 64 996 6 -a 64 776 6 -a 64 429 6 -a 64 306 5 -a 64 555 9 -a 64 381 1 -a 64 425 5 -a 64 812 5 -a 64 603 8 -a 64 191 1 -a 64 218 1 -a 64 97 1 -a 64 889 8 -a 64 380 3 -a 64 779 9 -a 64 769 5 -a 64 883 3 -a 64 237 4 -a 64 756 4 -a 64 692 3 -a 64 466 7 -a 64 615 5 -a 64 630 8 -a 64 648 9 -a 64 607 6 -a 64 207 6 -a 64 283 1 -a 64 206 10 -a 64 806 5 -a 64 643 2 -a 64 777 5 -a 64 756 1 -a 64 47 4 -a 64 58 1 -a 64 286 3 -a 64 427 1 -a 64 482 1 -a 64 73 8 -a 64 6 5 -a 64 673 8 -a 64 290 3 -a 64 102 7 -a 64 537 9 -a 64 669 2 -a 64 880 7 -a 64 281 8 -a 64 528 2 -a 64 92 8 -a 64 13 6 -a 64 195 9 -a 65 557 3 -a 65 627 9 -a 65 824 3 -a 65 180 2 -a 65 210 10 -a 65 6 3 -a 65 463 7 -a 65 415 2 -a 65 811 8 -a 65 442 7 -a 65 33 4 -a 65 564 1 -a 65 173 8 -a 65 80 5 -a 65 621 3 -a 65 458 7 -a 65 506 8 -a 65 79 10 -a 65 531 7 -a 65 511 7 -a 65 751 7 -a 65 820 8 -a 65 612 5 -a 65 263 9 -a 65 465 6 -a 65 468 5 -a 65 544 3 -a 65 992 5 -a 65 559 4 -a 65 556 2 -a 65 162 1 -a 65 92 5 -a 65 158 5 -a 65 985 5 -a 65 271 5 -a 65 367 1 -a 65 991 3 -a 65 733 7 -a 65 782 7 -a 65 777 1 -a 65 151 5 -a 65 814 8 -a 65 316 1 -a 65 323 3 -a 65 893 1 -a 65 937 9 -a 65 781 8 -a 65 375 9 -a 65 287 2 -a 65 885 6 -a 65 741 7 -a 65 82 4 -a 65 473 8 -a 65 546 9 -a 65 940 1 -a 65 522 8 -a 65 513 7 -a 65 474 5 -a 65 53 2 -a 65 674 5 -a 65 565 5 -a 65 211 5 -a 65 635 6 -a 65 836 10 -a 65 577 5 -a 65 601 10 -a 65 544 5 -a 65 334 8 -a 65 353 5 -a 65 694 8 -a 65 124 7 -a 65 669 10 -a 65 581 1 -a 65 773 3 -a 65 366 5 -a 65 571 7 -a 65 35 10 -a 65 227 4 -a 65 287 6 -a 65 116 9 -a 65 699 8 -a 65 265 10 -a 65 662 4 -a 65 614 6 -a 65 787 4 -a 65 150 2 -a 65 63 3 -a 65 839 9 -a 66 824 4 -a 66 628 1 -a 66 25 6 -a 66 434 9 -a 66 439 6 -a 66 602 1 -a 66 10 3 -a 66 982 10 -a 66 935 4 -a 66 362 8 -a 66 652 9 -a 66 34 7 -a 66 6 5 -a 66 644 8 -a 66 26 6 -a 66 586 2 -a 66 392 9 -a 66 391 1 -a 66 132 5 -a 66 426 6 -a 66 617 2 -a 66 418 4 -a 66 541 8 -a 66 291 8 -a 66 683 7 -a 66 178 7 -a 66 904 9 -a 66 445 1 -a 66 328 9 -a 66 967 1 -a 66 259 6 -a 66 127 10 -a 66 570 6 -a 66 284 7 -a 66 560 4 -a 66 885 10 -a 66 569 9 -a 66 965 6 -a 66 795 1 -a 66 930 6 -a 66 592 3 -a 66 829 6 -a 66 936 8 -a 66 211 7 -a 66 854 2 -a 66 497 4 -a 66 602 4 -a 66 220 4 -a 66 629 2 -a 66 3 2 -a 66 837 10 -a 66 22 1 -a 66 544 7 -a 66 103 1 -a 66 704 8 -a 66 721 9 -a 66 124 8 -a 66 24 5 -a 66 949 2 -a 66 383 8 -a 66 150 2 -a 66 494 3 -a 66 666 10 -a 66 709 6 -a 66 477 4 -a 66 526 3 -a 66 253 6 -a 66 417 10 -a 66 296 3 -a 66 159 6 -a 66 100 2 -a 66 70 10 -a 66 195 10 -a 66 953 9 -a 66 566 9 -a 66 797 1 -a 66 149 4 -a 66 170 9 -a 66 799 5 -a 66 985 8 -a 66 192 5 -a 66 318 3 -a 66 63 5 -a 66 895 4 -a 66 15 7 -a 66 45 6 -a 66 38 10 -a 66 993 9 -a 66 377 2 -a 66 188 8 -a 66 462 5 -a 66 18 4 -a 66 896 7 -a 66 938 6 -a 66 543 10 -a 66 125 8 -a 66 331 2 -a 66 838 4 -a 66 283 5 -a 66 315 9 -a 67 938 4 -a 67 352 1 -a 67 509 9 -a 67 866 8 -a 67 917 3 -a 67 281 3 -a 67 63 1 -a 67 56 1 -a 67 974 3 -a 67 254 1 -a 67 373 4 -a 67 13 9 -a 67 124 9 -a 67 387 8 -a 67 57 5 -a 67 118 7 -a 67 425 6 -a 67 26 6 -a 67 494 2 -a 67 612 2 -a 67 487 3 -a 67 511 5 -a 67 483 10 -a 67 401 5 -a 67 29 5 -a 67 607 9 -a 67 731 1 -a 67 867 2 -a 67 889 3 -a 67 21 7 -a 67 780 10 -a 67 216 8 -a 67 529 6 -a 67 621 2 -a 67 109 9 -a 67 810 3 -a 67 611 6 -a 67 171 2 -a 67 865 8 -a 67 560 3 -a 67 424 4 -a 67 213 10 -a 67 572 8 -a 67 547 8 -a 67 600 7 -a 67 629 2 -a 67 665 9 -a 67 654 9 -a 67 134 10 -a 67 611 4 -a 67 116 9 -a 67 645 3 -a 67 69 9 -a 67 516 7 -a 67 673 10 -a 67 676 7 -a 67 222 6 -a 67 515 2 -a 67 540 10 -a 67 242 10 -a 67 270 10 -a 67 756 2 -a 67 771 8 -a 67 891 2 -a 67 864 1 -a 67 556 1 -a 67 477 9 -a 67 10 9 -a 67 396 7 -a 67 12 8 -a 67 433 3 -a 67 608 7 -a 67 584 4 -a 67 979 1 -a 67 183 7 -a 67 188 4 -a 67 619 3 -a 67 182 8 -a 67 841 1 -a 67 753 5 -a 67 792 8 -a 67 956 8 -a 67 373 10 -a 67 861 5 -a 67 448 10 -a 67 21 5 -a 67 512 5 -a 67 669 10 -a 67 536 4 -a 67 27 5 -a 67 911 4 -a 67 805 7 -a 67 782 6 -a 67 657 3 -a 67 671 10 -a 67 621 7 -a 67 188 8 -a 67 123 4 -a 67 630 5 -a 67 583 6 -a 67 135 4 -a 67 38 10 -a 67 166 2 -a 67 718 5 -a 67 349 2 -a 67 905 9 -a 67 611 7 -a 67 530 4 -a 67 721 4 -a 67 339 8 -a 67 298 8 -a 67 652 7 -a 68 711 3 -a 68 134 5 -a 68 75 8 -a 68 732 2 -a 68 645 4 -a 68 744 5 -a 68 243 8 -a 68 671 9 -a 68 630 4 -a 68 23 4 -a 68 429 3 -a 68 262 9 -a 68 694 2 -a 68 25 9 -a 68 449 6 -a 68 816 8 -a 68 655 1 -a 68 7 3 -a 68 950 8 -a 68 692 1 -a 68 172 5 -a 68 643 6 -a 68 684 10 -a 68 520 2 -a 68 523 4 -a 68 271 3 -a 68 26 7 -a 68 219 7 -a 68 609 10 -a 68 323 10 -a 68 871 4 -a 68 296 2 -a 68 456 9 -a 68 945 2 -a 68 3 10 -a 68 76 10 -a 68 664 4 -a 68 245 1 -a 68 746 5 -a 68 269 4 -a 68 267 7 -a 68 150 1 -a 68 530 7 -a 68 960 4 -a 68 175 4 -a 68 978 7 -a 68 752 5 -a 68 829 4 -a 68 984 9 -a 68 677 1 -a 68 496 10 -a 68 132 10 -a 68 296 3 -a 68 156 2 -a 68 651 3 -a 68 818 9 -a 68 426 5 -a 68 676 6 -a 68 13 6 -a 68 10 1 -a 68 998 1 -a 68 883 4 -a 68 305 7 -a 68 429 4 -a 68 803 4 -a 68 307 8 -a 68 504 7 -a 68 443 5 -a 68 551 8 -a 68 226 4 -a 68 711 1 -a 68 818 3 -a 68 375 5 -a 68 217 8 -a 68 753 4 -a 68 549 2 -a 68 170 3 -a 68 480 7 -a 68 353 3 -a 68 130 7 -a 68 133 8 -a 68 849 9 -a 68 261 1 -a 68 428 8 -a 68 911 3 -a 68 221 1 -a 68 405 9 -a 68 563 4 -a 68 233 5 -a 68 414 5 -a 68 536 9 -a 68 91 3 -a 68 719 4 -a 68 965 3 -a 68 894 6 -a 68 1 1 -a 68 444 3 -a 68 312 8 -a 68 552 2 -a 68 669 5 -a 68 345 10 -a 68 20 1 -a 68 214 1 -a 68 73 4 -a 68 568 7 -a 68 384 1 -a 68 553 9 -a 68 921 1 -a 68 513 6 -a 68 685 1 -a 68 745 4 -a 68 773 4 -a 68 88 5 -a 68 724 8 -a 68 659 1 -a 68 308 9 -a 69 104 3 -a 69 197 1 -a 69 541 9 -a 69 517 1 -a 69 733 4 -a 69 631 2 -a 69 211 8 -a 69 673 9 -a 69 500 2 -a 69 212 2 -a 69 92 5 -a 69 811 3 -a 69 763 8 -a 69 761 6 -a 69 809 3 -a 69 83 2 -a 69 780 4 -a 69 155 8 -a 69 323 7 -a 69 381 2 -a 69 707 5 -a 69 219 3 -a 69 893 5 -a 69 367 6 -a 69 963 8 -a 69 641 8 -a 69 454 1 -a 69 662 9 -a 69 276 8 -a 69 762 6 -a 69 765 10 -a 69 472 10 -a 69 278 10 -a 69 258 9 -a 69 180 1 -a 69 908 2 -a 69 468 1 -a 69 852 9 -a 69 384 8 -a 69 679 8 -a 69 944 4 -a 69 170 9 -a 69 417 6 -a 69 680 6 -a 69 978 1 -a 69 499 3 -a 69 435 8 -a 69 976 9 -a 69 654 1 -a 69 757 6 -a 69 332 7 -a 69 336 8 -a 69 976 1 -a 69 201 4 -a 69 703 8 -a 69 914 4 -a 69 841 5 -a 69 132 10 -a 69 552 5 -a 69 92 10 -a 69 893 6 -a 69 292 1 -a 69 564 1 -a 69 146 6 -a 69 549 3 -a 69 743 8 -a 69 30 4 -a 69 571 7 -a 69 413 7 -a 69 671 2 -a 69 490 7 -a 69 582 8 -a 69 64 6 -a 69 145 7 -a 69 536 9 -a 69 562 2 -a 69 579 4 -a 69 487 5 -a 69 191 2 -a 69 311 10 -a 69 818 2 -a 69 527 4 -a 69 262 6 -a 69 205 9 -a 69 152 2 -a 69 835 9 -a 69 336 8 -a 69 703 10 -a 69 926 6 -a 69 205 3 -a 69 994 1 -a 69 465 4 -a 69 350 8 -a 69 519 7 -a 69 184 3 -a 69 379 4 -a 69 511 5 -a 70 754 10 -a 70 791 4 -a 70 157 7 -a 70 219 8 -a 70 349 9 -a 70 220 3 -a 70 363 9 -a 70 884 2 -a 70 782 5 -a 70 941 7 -a 70 346 4 -a 70 972 8 -a 70 227 2 -a 70 139 6 -a 70 474 8 -a 70 489 5 -a 70 133 7 -a 70 678 1 -a 70 640 3 -a 70 967 6 -a 70 318 5 -a 70 868 2 -a 70 194 8 -a 70 287 6 -a 70 309 6 -a 70 543 8 -a 70 805 7 -a 70 492 8 -a 70 922 3 -a 70 291 9 -a 70 221 4 -a 70 688 3 -a 70 448 4 -a 70 439 5 -a 70 12 8 -a 70 667 10 -a 70 801 5 -a 70 895 9 -a 70 424 10 -a 70 717 3 -a 70 216 6 -a 70 372 4 -a 70 943 5 -a 70 355 6 -a 70 845 1 -a 70 407 10 -a 70 487 4 -a 70 499 7 -a 70 22 1 -a 70 429 5 -a 70 488 7 -a 70 339 8 -a 70 272 5 -a 70 681 6 -a 70 626 6 -a 70 580 9 -a 70 199 5 -a 70 406 8 -a 70 47 7 -a 70 96 7 -a 70 697 5 -a 70 267 1 -a 70 784 10 -a 70 120 10 -a 70 705 1 -a 70 795 7 -a 70 786 7 -a 70 481 3 -a 70 666 9 -a 70 186 2 -a 70 173 10 -a 70 881 9 -a 70 557 3 -a 70 92 6 -a 70 211 8 -a 70 377 2 -a 70 498 10 -a 70 697 6 -a 70 875 8 -a 70 520 3 -a 70 101 4 -a 70 338 3 -a 70 858 2 -a 70 373 1 -a 70 459 4 -a 70 952 5 -a 70 193 9 -a 70 865 2 -a 70 999 7 -a 70 288 9 -a 70 537 8 -a 70 241 7 -a 70 47 10 -a 70 656 4 -a 70 946 5 -a 70 842 2 -a 70 417 9 -a 70 402 10 -a 70 483 3 -a 70 602 8 -a 70 575 1 -a 70 339 10 -a 70 134 2 -a 70 666 10 -a 70 550 2 -a 70 511 1 -a 70 139 10 -a 70 222 5 -a 70 361 9 -a 70 658 6 -a 70 323 8 -a 70 699 5 -a 70 492 3 -a 70 695 4 -a 70 692 1 -a 70 950 9 -a 70 622 8 -a 70 884 4 -a 70 790 9 -a 71 596 4 -a 71 148 5 -a 71 302 3 -a 71 837 8 -a 71 194 2 -a 71 957 7 -a 71 758 1 -a 71 11 3 -a 71 350 10 -a 71 135 5 -a 71 493 5 -a 71 951 10 -a 71 709 3 -a 71 832 10 -a 71 61 1 -a 71 350 9 -a 71 357 10 -a 71 571 7 -a 71 489 6 -a 71 578 1 -a 71 931 10 -a 71 122 1 -a 71 900 9 -a 71 605 6 -a 71 613 5 -a 71 570 7 -a 71 273 6 -a 71 539 4 -a 71 168 6 -a 71 132 3 -a 71 304 1 -a 71 763 8 -a 71 279 5 -a 71 606 4 -a 71 575 1 -a 71 473 4 -a 71 538 2 -a 71 308 5 -a 71 483 6 -a 71 887 8 -a 71 443 10 -a 71 976 6 -a 71 814 1 -a 71 127 10 -a 71 783 9 -a 71 874 1 -a 71 477 6 -a 71 115 9 -a 71 420 3 -a 71 965 9 -a 71 692 5 -a 71 326 6 -a 71 62 4 -a 71 568 5 -a 71 931 8 -a 71 675 8 -a 71 113 7 -a 71 179 9 -a 71 189 3 -a 71 280 8 -a 71 310 4 -a 71 492 6 -a 71 19 4 -a 71 589 4 -a 71 73 1 -a 71 593 3 -a 71 37 1 -a 71 611 4 -a 71 901 4 -a 71 519 9 -a 71 473 7 -a 71 319 3 -a 71 470 5 -a 71 262 1 -a 71 445 4 -a 71 228 6 -a 71 111 9 -a 71 921 6 -a 71 342 2 -a 71 530 5 -a 71 861 5 -a 71 10 10 -a 71 856 10 -a 71 923 8 -a 71 577 8 -a 71 762 4 -a 71 573 7 -a 71 689 5 -a 71 940 7 -a 71 761 7 -a 71 969 7 -a 71 225 8 -a 71 228 2 -a 71 987 1 -a 71 813 5 -a 71 301 3 -a 71 555 2 -a 71 849 7 -a 71 911 8 -a 71 431 7 -a 71 344 1 -a 71 359 1 -a 71 749 2 -a 71 813 3 -a 71 621 6 -a 71 170 7 -a 71 17 3 -a 72 731 10 -a 72 66 3 -a 72 358 8 -a 72 237 1 -a 72 927 10 -a 72 367 8 -a 72 68 2 -a 72 825 4 -a 72 943 10 -a 72 829 10 -a 72 373 2 -a 72 608 9 -a 72 744 9 -a 72 109 10 -a 72 552 10 -a 72 968 10 -a 72 336 4 -a 72 514 10 -a 72 757 7 -a 72 636 2 -a 72 44 1 -a 72 581 1 -a 72 522 2 -a 72 475 5 -a 72 924 10 -a 72 881 10 -a 72 199 2 -a 72 713 7 -a 72 477 10 -a 72 368 3 -a 72 729 4 -a 72 183 9 -a 72 434 3 -a 72 62 3 -a 72 419 5 -a 72 336 10 -a 72 429 3 -a 72 486 4 -a 72 136 1 -a 72 347 3 -a 72 290 3 -a 72 508 9 -a 72 954 7 -a 72 9 3 -a 72 616 9 -a 72 481 9 -a 72 977 3 -a 72 951 5 -a 72 994 6 -a 72 709 8 -a 72 563 8 -a 72 14 3 -a 72 265 5 -a 72 60 8 -a 72 488 5 -a 72 165 3 -a 72 940 3 -a 72 686 5 -a 72 877 1 -a 72 392 2 -a 72 30 4 -a 72 581 6 -a 72 575 9 -a 72 463 3 -a 72 642 8 -a 72 993 1 -a 72 798 1 -a 72 46 3 -a 72 455 3 -a 72 933 8 -a 72 393 3 -a 72 744 5 -a 72 416 4 -a 72 322 1 -a 72 753 10 -a 72 7 1 -a 72 803 3 -a 72 705 3 -a 72 957 8 -a 72 772 2 -a 72 389 6 -a 72 495 10 -a 72 785 9 -a 72 653 4 -a 72 555 10 -a 72 248 7 -a 72 817 4 -a 72 470 9 -a 72 934 3 -a 72 669 8 -a 72 862 1 -a 72 963 2 -a 72 225 6 -a 72 412 6 -a 72 401 5 -a 72 867 1 -a 72 380 6 -a 72 174 10 -a 72 912 1 -a 73 834 3 -a 73 82 5 -a 73 280 3 -a 73 554 5 -a 73 497 6 -a 73 602 5 -a 73 282 6 -a 73 503 1 -a 73 380 3 -a 73 986 4 -a 73 435 8 -a 73 127 9 -a 73 350 8 -a 73 930 3 -a 73 912 2 -a 73 460 6 -a 73 135 5 -a 73 795 9 -a 73 929 7 -a 73 44 7 -a 73 439 7 -a 73 766 3 -a 73 664 4 -a 73 153 4 -a 73 382 4 -a 73 506 4 -a 73 533 2 -a 73 555 1 -a 73 393 7 -a 73 342 9 -a 73 636 10 -a 73 673 4 -a 73 895 3 -a 73 108 10 -a 73 250 6 -a 73 152 1 -a 73 610 5 -a 73 629 4 -a 73 113 2 -a 73 21 1 -a 73 755 4 -a 73 462 7 -a 73 950 2 -a 73 642 10 -a 73 440 6 -a 73 385 5 -a 73 777 4 -a 73 210 2 -a 73 289 7 -a 73 820 9 -a 73 648 2 -a 73 31 8 -a 73 802 10 -a 73 287 7 -a 73 183 2 -a 73 159 6 -a 73 792 8 -a 73 715 8 -a 73 714 9 -a 73 161 1 -a 73 33 5 -a 73 325 6 -a 73 833 10 -a 73 927 8 -a 73 433 10 -a 73 58 9 -a 73 55 5 -a 73 18 10 -a 73 686 5 -a 73 167 5 -a 73 38 10 -a 73 416 3 -a 73 629 3 -a 73 987 10 -a 73 34 2 -a 73 44 2 -a 73 347 6 -a 73 810 7 -a 73 253 10 -a 73 636 1 -a 73 605 4 -a 73 900 1 -a 73 666 10 -a 73 382 5 -a 73 163 6 -a 73 848 5 -a 73 541 10 -a 73 954 3 -a 73 539 5 -a 73 230 10 -a 73 90 7 -a 73 571 5 -a 73 554 3 -a 73 922 1 -a 73 473 4 -a 73 986 2 -a 73 979 4 -a 73 527 2 -a 73 640 3 -a 73 694 8 -a 73 17 9 -a 73 32 2 -a 73 298 2 -a 73 65 5 -a 73 341 2 -a 73 326 7 -a 73 874 6 -a 73 593 5 -a 73 961 4 -a 73 454 5 -a 74 468 4 -a 74 602 6 -a 74 836 10 -a 74 630 6 -a 74 426 1 -a 74 352 8 -a 74 560 1 -a 74 964 2 -a 74 581 5 -a 74 649 4 -a 74 510 6 -a 74 110 2 -a 74 547 6 -a 74 982 8 -a 74 72 10 -a 74 501 9 -a 74 485 6 -a 74 51 10 -a 74 117 2 -a 74 154 2 -a 74 67 6 -a 74 148 1 -a 74 451 8 -a 74 46 4 -a 74 212 10 -a 74 791 2 -a 74 372 1 -a 74 61 4 -a 74 359 3 -a 74 308 8 -a 74 514 3 -a 74 826 1 -a 74 910 8 -a 74 325 5 -a 74 432 9 -a 74 311 2 -a 74 676 3 -a 74 991 7 -a 74 250 3 -a 74 232 6 -a 74 615 9 -a 74 759 9 -a 74 342 4 -a 74 137 7 -a 74 716 7 -a 74 413 2 -a 74 638 8 -a 74 176 10 -a 74 463 2 -a 74 754 10 -a 74 329 8 -a 74 529 10 -a 74 901 5 -a 74 779 8 -a 74 575 7 -a 74 88 8 -a 74 545 2 -a 74 946 6 -a 74 148 10 -a 74 903 4 -a 74 229 9 -a 74 661 10 -a 74 705 5 -a 74 114 1 -a 74 986 1 -a 74 112 3 -a 74 424 10 -a 74 637 8 -a 74 78 1 -a 74 673 5 -a 74 869 9 -a 74 692 10 -a 74 407 2 -a 74 186 3 -a 74 829 9 -a 74 99 10 -a 74 598 7 -a 74 442 1 -a 74 274 4 -a 74 36 5 -a 74 171 4 -a 74 603 5 -a 74 564 5 -a 74 47 7 -a 74 357 9 -a 74 114 8 -a 74 134 2 -a 74 902 8 -a 74 35 6 -a 74 281 4 -a 74 780 1 -a 74 264 4 -a 74 941 3 -a 74 460 6 -a 74 377 5 -a 74 902 1 -a 74 571 2 -a 74 801 3 -a 74 515 8 -a 74 648 9 -a 74 449 10 -a 74 359 1 -a 75 316 1 -a 75 856 9 -a 75 544 5 -a 75 120 6 -a 75 954 9 -a 75 117 8 -a 75 561 4 -a 75 203 8 -a 75 152 3 -a 75 731 8 -a 75 805 7 -a 75 715 3 -a 75 777 8 -a 75 138 1 -a 75 829 5 -a 75 910 1 -a 75 15 5 -a 75 863 4 -a 75 166 10 -a 75 794 2 -a 75 102 4 -a 75 82 1 -a 75 230 4 -a 75 479 3 -a 75 984 6 -a 75 800 6 -a 75 255 2 -a 75 474 3 -a 75 424 9 -a 75 703 1 -a 75 832 10 -a 75 739 7 -a 75 534 7 -a 75 351 4 -a 75 858 8 -a 75 463 8 -a 75 467 4 -a 75 394 10 -a 75 666 10 -a 75 618 2 -a 75 100 9 -a 75 446 10 -a 75 308 3 -a 75 876 10 -a 75 583 8 -a 75 112 5 -a 75 761 3 -a 75 597 8 -a 75 975 1 -a 75 926 4 -a 75 367 9 -a 75 52 7 -a 75 596 5 -a 75 530 1 -a 75 966 6 -a 75 371 6 -a 75 784 4 -a 75 415 8 -a 75 794 5 -a 75 463 7 -a 75 222 4 -a 75 508 9 -a 75 996 9 -a 75 572 5 -a 75 341 6 -a 75 435 2 -a 75 14 10 -a 75 734 10 -a 75 76 2 -a 75 631 7 -a 75 833 5 -a 75 521 10 -a 75 939 10 -a 75 684 6 -a 75 80 2 -a 75 26 2 -a 75 420 1 -a 75 676 8 -a 75 1000 5 -a 75 321 9 -a 75 18 6 -a 75 28 2 -a 75 304 4 -a 75 613 6 -a 75 557 3 -a 75 245 8 -a 75 984 1 -a 75 317 3 -a 75 660 4 -a 75 753 4 -a 75 779 9 -a 75 881 5 -a 75 237 1 -a 75 750 1 -a 75 429 5 -a 75 577 8 -a 75 160 1 -a 75 442 6 -a 75 287 9 -a 75 235 1 -a 75 49 10 -a 75 95 2 -a 75 756 4 -a 75 987 7 -a 75 779 4 -a 76 835 9 -a 76 174 4 -a 76 486 1 -a 76 988 1 -a 76 495 1 -a 76 504 6 -a 76 798 8 -a 76 92 10 -a 76 547 7 -a 76 18 4 -a 76 51 5 -a 76 863 2 -a 76 677 1 -a 76 804 5 -a 76 617 2 -a 76 534 9 -a 76 16 10 -a 76 343 6 -a 76 962 7 -a 76 592 8 -a 76 502 6 -a 76 379 2 -a 76 878 5 -a 76 737 6 -a 76 427 7 -a 76 973 1 -a 76 468 10 -a 76 389 1 -a 76 727 8 -a 76 278 8 -a 76 377 4 -a 76 900 3 -a 76 763 6 -a 76 340 10 -a 76 370 2 -a 76 242 6 -a 76 330 8 -a 76 143 1 -a 76 334 4 -a 76 876 9 -a 76 161 2 -a 76 384 5 -a 76 715 8 -a 76 837 9 -a 76 163 8 -a 76 307 10 -a 76 346 2 -a 76 178 4 -a 76 649 7 -a 76 283 2 -a 76 770 6 -a 76 127 6 -a 76 662 2 -a 76 623 4 -a 76 863 6 -a 76 64 2 -a 76 571 3 -a 76 306 2 -a 76 453 3 -a 76 273 5 -a 76 583 1 -a 76 829 9 -a 76 149 7 -a 76 321 8 -a 76 144 3 -a 76 518 1 -a 76 563 2 -a 76 473 2 -a 76 661 2 -a 76 896 7 -a 76 324 2 -a 76 821 1 -a 76 255 3 -a 76 14 5 -a 76 633 6 -a 76 418 10 -a 76 321 1 -a 76 979 8 -a 76 595 3 -a 76 969 6 -a 76 237 6 -a 76 340 8 -a 76 71 3 -a 76 898 2 -a 76 963 6 -a 76 933 2 -a 76 962 8 -a 76 509 3 -a 76 214 9 -a 76 390 6 -a 76 782 10 -a 76 796 10 -a 76 194 4 -a 76 930 10 -a 76 93 4 -a 76 337 7 -a 76 423 2 -a 76 655 1 -a 76 809 9 -a 76 59 6 -a 76 526 8 -a 76 108 2 -a 76 879 2 -a 76 780 8 -a 76 122 10 -a 76 488 2 -a 76 173 4 -a 76 442 9 -a 76 442 8 -a 76 768 2 -a 76 386 6 -a 76 678 6 -a 76 83 9 -a 76 457 6 -a 76 552 10 -a 76 21 3 -a 76 365 7 -a 76 489 6 -a 76 530 2 -a 76 579 7 -a 76 878 7 -a 76 287 9 -a 76 350 9 -a 76 47 4 -a 76 192 5 -a 76 442 7 -a 77 383 1 -a 77 614 5 -a 77 72 9 -a 77 167 8 -a 77 673 9 -a 77 597 9 -a 77 274 5 -a 77 527 8 -a 77 353 8 -a 77 395 4 -a 77 525 7 -a 77 836 9 -a 77 431 3 -a 77 268 8 -a 77 198 6 -a 77 85 3 -a 77 351 6 -a 77 654 1 -a 77 636 3 -a 77 371 5 -a 77 100 8 -a 77 900 10 -a 77 572 5 -a 77 977 6 -a 77 162 3 -a 77 922 10 -a 77 353 9 -a 77 339 10 -a 77 381 8 -a 77 967 7 -a 77 411 8 -a 77 547 7 -a 77 615 1 -a 77 820 3 -a 77 117 6 -a 77 335 8 -a 77 191 4 -a 77 107 7 -a 77 860 2 -a 77 2 1 -a 77 537 4 -a 77 103 2 -a 77 199 9 -a 77 621 8 -a 77 453 2 -a 77 852 6 -a 77 232 5 -a 77 824 9 -a 77 846 2 -a 77 331 8 -a 77 699 6 -a 77 393 8 -a 77 283 4 -a 77 861 6 -a 77 290 1 -a 77 281 3 -a 77 189 5 -a 77 629 3 -a 77 661 5 -a 77 131 2 -a 77 15 1 -a 77 183 10 -a 77 745 7 -a 77 862 5 -a 77 332 8 -a 77 169 2 -a 77 968 9 -a 77 167 3 -a 77 170 3 -a 77 480 10 -a 77 269 9 -a 77 369 4 -a 77 77 10 -a 77 722 9 -a 77 196 8 -a 77 308 10 -a 77 521 5 -a 77 17 5 -a 77 639 10 -a 77 195 9 -a 77 410 1 -a 77 921 3 -a 77 31 10 -a 77 699 8 -a 77 178 6 -a 77 220 6 -a 77 303 7 -a 77 838 9 -a 77 350 2 -a 77 317 1 -a 77 71 6 -a 77 314 1 -a 77 999 4 -a 77 932 1 -a 77 645 9 -a 77 143 6 -a 77 875 3 -a 77 811 3 -a 77 312 8 -a 77 330 8 -a 77 55 2 -a 77 680 7 -a 77 406 5 -a 77 776 1 -a 77 876 3 -a 77 714 2 -a 77 272 9 -a 77 892 9 -a 77 328 9 -a 77 467 9 -a 77 277 4 -a 78 224 7 -a 78 497 9 -a 78 976 9 -a 78 401 8 -a 78 716 7 -a 78 254 6 -a 78 215 2 -a 78 42 1 -a 78 571 10 -a 78 211 8 -a 78 112 7 -a 78 884 5 -a 78 185 7 -a 78 19 3 -a 78 504 8 -a 78 327 1 -a 78 893 7 -a 78 290 7 -a 78 638 9 -a 78 198 2 -a 78 344 5 -a 78 294 8 -a 78 604 5 -a 78 96 7 -a 78 145 5 -a 78 293 1 -a 78 367 6 -a 78 12 1 -a 78 620 9 -a 78 833 7 -a 78 289 7 -a 78 843 3 -a 78 306 2 -a 78 240 9 -a 78 220 1 -a 78 493 6 -a 78 434 7 -a 78 38 6 -a 78 39 5 -a 78 644 8 -a 78 149 10 -a 78 922 9 -a 78 828 9 -a 78 167 9 -a 78 401 3 -a 78 130 4 -a 78 35 2 -a 78 690 4 -a 78 767 3 -a 78 233 1 -a 78 10 1 -a 78 36 10 -a 78 836 7 -a 78 105 3 -a 78 180 4 -a 78 104 8 -a 78 471 1 -a 78 192 8 -a 78 723 2 -a 78 280 2 -a 78 480 1 -a 78 541 10 -a 78 585 5 -a 78 719 4 -a 78 760 5 -a 78 581 6 -a 78 187 3 -a 78 169 9 -a 78 619 9 -a 78 226 9 -a 78 812 1 -a 78 767 8 -a 78 123 10 -a 78 615 5 -a 78 934 9 -a 78 524 7 -a 78 744 10 -a 78 968 5 -a 78 189 8 -a 78 487 4 -a 78 176 8 -a 78 198 1 -a 78 522 9 -a 78 302 6 -a 78 702 3 -a 78 90 2 -a 78 773 10 -a 78 893 2 -a 78 812 5 -a 78 28 6 -a 78 348 9 -a 78 329 3 -a 78 612 1 -a 78 42 1 -a 78 64 10 -a 78 168 10 -a 78 228 1 -a 78 233 3 -a 78 786 6 -a 78 453 3 -a 78 20 3 -a 78 529 9 -a 78 576 9 -a 78 635 3 -a 78 438 10 -a 78 75 8 -a 79 354 7 -a 79 381 4 -a 79 263 10 -a 79 840 9 -a 79 557 2 -a 79 461 3 -a 79 338 2 -a 79 543 3 -a 79 762 4 -a 79 15 2 -a 79 633 9 -a 79 510 4 -a 79 907 5 -a 79 420 7 -a 79 537 1 -a 79 230 8 -a 79 748 2 -a 79 124 9 -a 79 271 10 -a 79 812 3 -a 79 292 6 -a 79 498 10 -a 79 20 10 -a 79 53 2 -a 79 951 5 -a 79 39 8 -a 79 581 8 -a 79 502 2 -a 79 673 10 -a 79 576 8 -a 79 3 6 -a 79 375 9 -a 79 838 8 -a 79 842 6 -a 79 931 8 -a 79 274 7 -a 79 155 8 -a 79 449 7 -a 79 12 9 -a 79 169 2 -a 79 57 9 -a 79 521 9 -a 79 51 3 -a 79 477 5 -a 79 34 10 -a 79 280 1 -a 79 200 2 -a 79 157 3 -a 79 550 8 -a 79 448 7 -a 79 24 8 -a 79 6 5 -a 79 501 6 -a 79 974 3 -a 79 45 3 -a 79 57 4 -a 79 451 10 -a 79 717 10 -a 79 51 2 -a 79 2 8 -a 79 719 4 -a 79 425 6 -a 79 839 1 -a 79 537 6 -a 79 331 3 -a 79 89 3 -a 79 691 5 -a 79 779 3 -a 79 100 6 -a 79 860 2 -a 79 836 9 -a 79 620 6 -a 79 910 9 -a 79 288 4 -a 79 653 4 -a 79 166 2 -a 79 487 3 -a 79 810 3 -a 79 715 6 -a 79 474 1 -a 79 233 6 -a 79 738 7 -a 79 479 10 -a 79 733 2 -a 79 687 9 -a 79 523 7 -a 79 790 5 -a 79 113 3 -a 79 216 8 -a 79 840 8 -a 79 114 9 -a 79 934 2 -a 79 240 6 -a 79 953 1 -a 79 446 7 -a 79 570 4 -a 79 17 3 -a 79 113 8 -a 79 324 2 -a 79 116 5 -a 79 972 10 -a 79 135 8 -a 79 735 5 -a 79 857 3 -a 79 422 2 -a 79 364 6 -a 79 909 3 -a 80 149 7 -a 80 713 9 -a 80 358 2 -a 80 381 4 -a 80 426 5 -a 80 836 4 -a 80 90 2 -a 80 89 4 -a 80 335 7 -a 80 879 2 -a 80 201 7 -a 80 550 8 -a 80 694 1 -a 80 315 9 -a 80 459 2 -a 80 933 9 -a 80 243 9 -a 80 905 2 -a 80 478 8 -a 80 259 3 -a 80 801 6 -a 80 374 6 -a 80 964 10 -a 80 936 2 -a 80 84 9 -a 80 796 7 -a 80 333 6 -a 80 447 7 -a 80 794 6 -a 80 217 5 -a 80 595 6 -a 80 482 7 -a 80 574 2 -a 80 976 4 -a 80 907 5 -a 80 386 10 -a 80 41 6 -a 80 995 1 -a 80 720 10 -a 80 919 9 -a 80 172 5 -a 80 245 10 -a 80 588 10 -a 80 486 4 -a 80 703 4 -a 80 496 7 -a 80 728 3 -a 80 583 2 -a 80 973 9 -a 80 986 1 -a 80 575 4 -a 80 749 5 -a 80 335 7 -a 80 514 9 -a 80 660 10 -a 80 418 9 -a 80 286 8 -a 80 993 4 -a 80 865 7 -a 80 55 7 -a 80 185 2 -a 80 435 6 -a 80 536 6 -a 80 759 1 -a 80 386 4 -a 80 418 9 -a 80 120 8 -a 80 426 6 -a 80 389 7 -a 80 839 2 -a 80 320 1 -a 80 560 10 -a 80 59 7 -a 80 907 5 -a 80 21 2 -a 80 761 3 -a 80 378 9 -a 80 748 5 -a 80 320 4 -a 80 326 7 -a 80 709 4 -a 80 894 1 -a 80 51 5 -a 80 19 9 -a 80 384 1 -a 80 710 4 -a 80 436 10 -a 80 669 3 -a 80 678 3 -a 80 276 7 -a 80 723 8 -a 80 863 3 -a 80 711 9 -a 80 234 1 -a 80 597 3 -a 80 72 9 -a 80 651 2 -a 80 716 4 -a 80 498 8 -a 80 15 7 -a 81 530 2 -a 81 817 7 -a 81 574 2 -a 81 588 10 -a 81 700 8 -a 81 594 5 -a 81 324 5 -a 81 53 1 -a 81 317 7 -a 81 643 8 -a 81 379 7 -a 81 1 10 -a 81 513 3 -a 81 429 7 -a 81 19 10 -a 81 896 9 -a 81 114 7 -a 81 455 10 -a 81 540 1 -a 81 792 8 -a 81 730 5 -a 81 238 4 -a 81 630 4 -a 81 416 8 -a 81 471 9 -a 81 202 7 -a 81 488 2 -a 81 97 2 -a 81 917 3 -a 81 985 3 -a 81 112 8 -a 81 422 10 -a 81 777 6 -a 81 685 5 -a 81 452 8 -a 81 255 1 -a 81 308 3 -a 81 505 6 -a 81 571 9 -a 81 951 6 -a 81 883 4 -a 81 572 6 -a 81 439 1 -a 81 287 10 -a 81 590 7 -a 81 310 4 -a 81 400 5 -a 81 20 5 -a 81 849 6 -a 81 167 2 -a 81 750 6 -a 81 62 2 -a 81 796 1 -a 81 141 3 -a 81 532 5 -a 81 997 4 -a 81 628 6 -a 81 628 4 -a 81 889 6 -a 81 588 4 -a 81 739 10 -a 81 286 4 -a 81 341 7 -a 81 400 9 -a 81 270 8 -a 81 792 3 -a 81 654 7 -a 81 578 8 -a 81 272 4 -a 81 200 1 -a 81 504 4 -a 81 130 10 -a 81 771 9 -a 81 942 1 -a 81 416 2 -a 81 337 7 -a 81 227 4 -a 81 816 7 -a 81 356 10 -a 81 51 10 -a 81 982 6 -a 81 81 1 -a 81 112 10 -a 81 754 8 -a 81 222 7 -a 81 643 9 -a 81 726 7 -a 81 849 4 -a 81 246 2 -a 81 591 1 -a 81 413 4 -a 82 985 5 -a 82 876 1 -a 82 753 10 -a 82 360 4 -a 82 122 10 -a 82 520 2 -a 82 699 1 -a 82 792 6 -a 82 188 1 -a 82 178 7 -a 82 921 5 -a 82 959 5 -a 82 95 2 -a 82 313 7 -a 82 271 7 -a 82 321 7 -a 82 104 8 -a 82 626 5 -a 82 371 4 -a 82 61 6 -a 82 707 7 -a 82 482 4 -a 82 814 7 -a 82 928 3 -a 82 100 1 -a 82 516 3 -a 82 752 6 -a 82 345 3 -a 82 82 2 -a 82 140 7 -a 82 305 8 -a 82 957 8 -a 82 892 5 -a 82 664 4 -a 82 54 2 -a 82 388 4 -a 82 652 7 -a 82 752 5 -a 82 155 7 -a 82 840 9 -a 82 929 6 -a 82 51 4 -a 82 774 6 -a 82 363 8 -a 82 20 4 -a 82 319 4 -a 82 466 10 -a 82 645 9 -a 82 689 1 -a 82 527 4 -a 82 327 2 -a 82 146 3 -a 82 316 1 -a 82 230 9 -a 82 245 8 -a 82 831 1 -a 82 982 3 -a 82 590 4 -a 82 912 2 -a 82 97 9 -a 82 894 10 -a 82 845 7 -a 82 989 6 -a 82 534 5 -a 82 898 9 -a 82 352 4 -a 82 161 7 -a 82 626 6 -a 82 506 4 -a 82 1000 7 -a 82 530 2 -a 82 556 7 -a 82 749 8 -a 82 529 5 -a 82 919 2 -a 82 768 8 -a 82 847 10 -a 82 360 5 -a 82 389 6 -a 82 512 6 -a 82 886 5 -a 82 715 9 -a 82 657 3 -a 82 178 8 -a 82 945 10 -a 82 902 1 -a 82 902 10 -a 82 467 6 -a 82 896 1 -a 82 998 10 -a 82 336 8 -a 82 716 2 -a 82 962 4 -a 82 869 6 -a 82 589 6 -a 82 289 5 -a 82 6 4 -a 82 190 1 -a 82 794 9 -a 82 720 3 -a 82 326 5 -a 82 730 1 -a 82 224 5 -a 83 220 10 -a 83 473 9 -a 83 46 2 -a 83 579 8 -a 83 861 7 -a 83 557 8 -a 83 441 1 -a 83 552 9 -a 83 190 1 -a 83 618 6 -a 83 472 2 -a 83 67 10 -a 83 601 2 -a 83 349 7 -a 83 533 10 -a 83 472 2 -a 83 322 3 -a 83 868 3 -a 83 163 3 -a 83 260 2 -a 83 713 10 -a 83 752 6 -a 83 548 10 -a 83 718 1 -a 83 941 10 -a 83 318 5 -a 83 698 1 -a 83 636 3 -a 83 643 3 -a 83 403 1 -a 83 859 8 -a 83 862 2 -a 83 876 1 -a 83 905 8 -a 83 416 1 -a 83 712 10 -a 83 437 3 -a 83 856 7 -a 83 239 5 -a 83 626 9 -a 83 449 1 -a 83 710 10 -a 83 692 6 -a 83 26 6 -a 83 34 4 -a 83 200 3 -a 83 497 4 -a 83 356 10 -a 83 44 7 -a 83 660 4 -a 83 615 9 -a 83 756 5 -a 83 387 3 -a 83 138 8 -a 83 449 6 -a 83 303 4 -a 83 455 7 -a 83 122 2 -a 83 939 4 -a 83 73 1 -a 83 525 4 -a 83 773 10 -a 83 934 8 -a 83 376 4 -a 83 653 3 -a 83 326 10 -a 83 63 6 -a 83 66 9 -a 83 157 6 -a 83 302 2 -a 83 691 1 -a 83 606 10 -a 83 359 1 -a 83 631 3 -a 83 21 1 -a 83 558 6 -a 83 103 6 -a 83 376 8 -a 83 601 3 -a 83 762 7 -a 83 990 1 -a 83 332 1 -a 83 124 10 -a 83 103 2 -a 83 780 6 -a 83 427 4 -a 83 558 7 -a 83 902 10 -a 83 341 3 -a 83 630 6 -a 83 402 7 -a 83 89 6 -a 83 540 7 -a 83 777 6 -a 83 742 3 -a 83 865 9 -a 83 839 8 -a 83 807 10 -a 83 116 1 -a 83 473 6 -a 83 602 2 -a 83 103 5 -a 83 831 2 -a 83 208 8 -a 83 123 1 -a 83 365 8 -a 83 311 3 -a 83 498 2 -a 83 965 10 -a 83 48 4 -a 83 463 4 -a 83 273 3 -a 83 172 1 -a 83 565 8 -a 83 28 7 -a 83 598 3 -a 83 98 5 -a 83 929 5 -a 83 938 4 -a 83 728 4 -a 83 306 2 -a 83 2 1 -a 83 243 3 -a 83 58 2 -a 83 743 2 -a 84 83 10 -a 84 897 3 -a 84 525 1 -a 84 79 5 -a 84 998 3 -a 84 681 2 -a 84 90 6 -a 84 804 6 -a 84 888 9 -a 84 212 2 -a 84 144 9 -a 84 174 9 -a 84 709 6 -a 84 85 10 -a 84 222 6 -a 84 147 8 -a 84 357 9 -a 84 393 3 -a 84 712 7 -a 84 384 3 -a 84 990 8 -a 84 809 5 -a 84 289 10 -a 84 903 10 -a 84 512 1 -a 84 594 10 -a 84 904 1 -a 84 754 5 -a 84 652 10 -a 84 623 4 -a 84 836 2 -a 84 524 5 -a 84 123 9 -a 84 915 1 -a 84 511 3 -a 84 96 2 -a 84 571 9 -a 84 601 10 -a 84 900 8 -a 84 434 2 -a 84 812 5 -a 84 19 1 -a 84 608 2 -a 84 497 10 -a 84 103 5 -a 84 829 3 -a 84 643 7 -a 84 459 7 -a 84 197 8 -a 84 330 4 -a 84 843 4 -a 84 162 5 -a 84 115 1 -a 84 107 5 -a 84 40 7 -a 84 626 4 -a 84 700 7 -a 84 943 5 -a 84 356 5 -a 84 327 6 -a 84 541 6 -a 84 167 10 -a 84 850 4 -a 84 664 3 -a 84 57 3 -a 84 337 2 -a 84 759 7 -a 84 627 5 -a 84 937 6 -a 84 634 7 -a 84 37 10 -a 84 724 9 -a 84 653 1 -a 84 644 10 -a 84 196 5 -a 84 755 10 -a 84 448 9 -a 84 839 3 -a 84 190 1 -a 84 644 4 -a 84 144 1 -a 84 8 4 -a 84 805 10 -a 84 258 5 -a 84 114 9 -a 84 844 5 -a 84 884 10 -a 84 813 1 -a 84 762 7 -a 84 215 3 -a 84 116 4 -a 84 279 1 -a 84 381 7 -a 84 965 6 -a 84 942 1 -a 84 438 4 -a 84 277 5 -a 84 676 7 -a 84 40 8 -a 84 189 10 -a 84 286 8 -a 84 76 1 -a 84 913 3 -a 84 938 9 -a 84 719 8 -a 84 84 6 -a 85 668 7 -a 85 142 5 -a 85 922 3 -a 85 857 6 -a 85 785 5 -a 85 42 1 -a 85 864 5 -a 85 565 4 -a 85 299 8 -a 85 977 8 -a 85 384 8 -a 85 158 5 -a 85 766 8 -a 85 122 2 -a 85 372 3 -a 85 881 9 -a 85 400 4 -a 85 753 2 -a 85 821 5 -a 85 317 6 -a 85 166 5 -a 85 74 5 -a 85 992 4 -a 85 205 1 -a 85 262 7 -a 85 253 3 -a 85 281 5 -a 85 150 5 -a 85 166 6 -a 85 999 7 -a 85 234 7 -a 85 834 4 -a 85 117 10 -a 85 131 1 -a 85 666 4 -a 85 901 10 -a 85 172 5 -a 85 506 9 -a 85 442 4 -a 85 471 8 -a 85 458 8 -a 85 825 4 -a 85 628 3 -a 85 199 6 -a 85 946 9 -a 85 1000 9 -a 85 55 1 -a 85 321 3 -a 85 728 2 -a 85 876 7 -a 85 637 9 -a 85 893 5 -a 85 949 6 -a 85 605 2 -a 85 73 3 -a 85 186 7 -a 85 857 5 -a 85 353 10 -a 85 336 2 -a 85 328 10 -a 85 569 9 -a 85 832 3 -a 85 444 9 -a 85 699 9 -a 85 473 7 -a 85 320 5 -a 85 871 1 -a 85 978 4 -a 85 761 5 -a 85 317 3 -a 85 412 5 -a 85 562 10 -a 85 944 1 -a 85 610 7 -a 85 483 8 -a 85 919 1 -a 85 665 2 -a 85 804 3 -a 85 622 4 -a 85 516 6 -a 85 416 5 -a 85 490 5 -a 85 440 2 -a 85 563 5 -a 86 625 8 -a 86 853 6 -a 86 915 7 -a 86 960 1 -a 86 851 1 -a 86 218 5 -a 86 504 1 -a 86 658 1 -a 86 661 7 -a 86 179 8 -a 86 106 7 -a 86 981 7 -a 86 25 9 -a 86 60 2 -a 86 717 2 -a 86 341 5 -a 86 471 5 -a 86 254 5 -a 86 260 1 -a 86 56 2 -a 86 737 2 -a 86 155 6 -a 86 720 6 -a 86 516 6 -a 86 776 1 -a 86 211 9 -a 86 931 6 -a 86 242 2 -a 86 650 6 -a 86 927 8 -a 86 804 5 -a 86 251 2 -a 86 755 3 -a 86 694 8 -a 86 186 8 -a 86 581 10 -a 86 912 10 -a 86 690 8 -a 86 214 3 -a 86 548 3 -a 86 868 8 -a 86 319 7 -a 86 504 2 -a 86 892 4 -a 86 378 7 -a 86 197 2 -a 86 208 2 -a 86 848 4 -a 86 450 3 -a 86 467 1 -a 86 904 6 -a 86 162 8 -a 86 621 6 -a 86 599 3 -a 86 677 8 -a 86 373 4 -a 86 810 7 -a 86 584 2 -a 86 614 6 -a 86 435 5 -a 86 486 10 -a 86 393 10 -a 86 685 8 -a 86 216 1 -a 86 62 2 -a 86 871 2 -a 86 796 3 -a 86 973 1 -a 86 536 4 -a 86 497 1 -a 86 379 1 -a 86 303 9 -a 86 1000 8 -a 86 246 5 -a 86 681 2 -a 86 172 10 -a 86 453 6 -a 86 504 5 -a 86 622 3 -a 86 919 8 -a 86 383 9 -a 86 783 1 -a 86 516 4 -a 86 982 6 -a 86 436 8 -a 87 888 1 -a 87 767 6 -a 87 477 9 -a 87 177 7 -a 87 480 3 -a 87 869 7 -a 87 862 7 -a 87 695 8 -a 87 930 8 -a 87 708 1 -a 87 466 3 -a 87 879 8 -a 87 219 10 -a 87 450 2 -a 87 351 4 -a 87 597 7 -a 87 752 2 -a 87 326 1 -a 87 842 3 -a 87 408 3 -a 87 498 6 -a 87 270 6 -a 87 912 7 -a 87 95 9 -a 87 164 7 -a 87 270 3 -a 87 877 3 -a 87 679 3 -a 87 227 5 -a 87 288 4 -a 87 542 2 -a 87 993 10 -a 87 282 1 -a 87 146 9 -a 87 761 9 -a 87 862 3 -a 87 431 10 -a 87 768 5 -a 87 690 1 -a 87 896 5 -a 87 622 9 -a 87 908 3 -a 87 321 4 -a 87 972 5 -a 87 480 10 -a 87 49 7 -a 87 273 8 -a 87 297 9 -a 87 456 4 -a 87 770 2 -a 87 566 10 -a 87 343 10 -a 87 864 2 -a 87 729 8 -a 87 613 2 -a 87 717 1 -a 87 384 7 -a 87 839 2 -a 87 925 2 -a 87 808 4 -a 87 262 10 -a 87 919 8 -a 87 953 1 -a 87 756 5 -a 87 935 5 -a 87 429 8 -a 87 499 1 -a 87 600 4 -a 87 300 1 -a 87 96 3 -a 87 483 9 -a 87 621 10 -a 87 43 4 -a 87 962 8 -a 87 669 5 -a 87 316 5 -a 87 234 9 -a 87 100 7 -a 87 61 8 -a 87 799 4 -a 87 443 5 -a 87 925 4 -a 87 503 3 -a 87 31 3 -a 87 617 3 -a 87 886 8 -a 87 869 2 -a 87 596 5 -a 87 787 2 -a 87 652 5 -a 87 857 1 -a 87 681 7 -a 87 580 10 -a 87 855 9 -a 88 412 3 -a 88 490 3 -a 88 259 10 -a 88 911 7 -a 88 65 1 -a 88 558 2 -a 88 547 1 -a 88 154 7 -a 88 25 10 -a 88 484 10 -a 88 822 5 -a 88 340 1 -a 88 717 7 -a 88 922 3 -a 88 400 10 -a 88 491 9 -a 88 340 10 -a 88 300 3 -a 88 994 3 -a 88 370 9 -a 88 916 6 -a 88 855 5 -a 88 214 8 -a 88 488 1 -a 88 617 5 -a 88 866 1 -a 88 320 6 -a 88 273 7 -a 88 421 3 -a 88 150 9 -a 88 685 6 -a 88 911 2 -a 88 408 7 -a 88 571 1 -a 88 975 4 -a 88 966 4 -a 88 552 4 -a 88 498 6 -a 88 95 8 -a 88 576 4 -a 88 981 9 -a 88 917 5 -a 88 915 4 -a 88 674 3 -a 88 814 4 -a 88 291 3 -a 88 140 1 -a 88 129 10 -a 88 590 1 -a 88 109 10 -a 88 498 4 -a 88 482 5 -a 88 964 6 -a 88 711 2 -a 88 969 8 -a 88 556 1 -a 88 552 7 -a 88 264 4 -a 88 829 1 -a 88 973 3 -a 88 414 6 -a 88 489 7 -a 88 859 10 -a 88 821 4 -a 88 35 1 -a 88 809 6 -a 88 762 1 -a 88 586 7 -a 88 282 6 -a 88 857 9 -a 88 138 5 -a 88 239 5 -a 88 749 1 -a 88 28 1 -a 88 912 8 -a 88 538 10 -a 88 318 1 -a 88 27 3 -a 88 666 4 -a 88 908 3 -a 88 136 6 -a 88 139 1 -a 88 365 7 -a 88 75 7 -a 89 849 5 -a 89 309 5 -a 89 630 10 -a 89 377 5 -a 89 572 1 -a 89 434 6 -a 89 325 7 -a 89 985 5 -a 89 922 1 -a 89 159 6 -a 89 782 10 -a 89 956 1 -a 89 967 1 -a 89 519 9 -a 89 518 2 -a 89 225 8 -a 89 351 2 -a 89 655 2 -a 89 463 10 -a 89 75 1 -a 89 682 6 -a 89 350 4 -a 89 612 6 -a 89 1000 3 -a 89 376 8 -a 89 253 10 -a 89 883 2 -a 89 511 1 -a 89 391 2 -a 89 223 7 -a 89 585 1 -a 89 216 1 -a 89 531 8 -a 89 191 9 -a 89 592 9 -a 89 78 2 -a 89 624 9 -a 89 916 3 -a 89 39 6 -a 89 522 9 -a 89 50 9 -a 89 820 3 -a 89 453 7 -a 89 314 7 -a 89 970 1 -a 89 216 7 -a 89 665 9 -a 89 600 4 -a 89 678 4 -a 89 739 7 -a 89 258 9 -a 89 3 5 -a 89 327 6 -a 89 233 10 -a 89 379 2 -a 89 579 9 -a 89 91 2 -a 89 889 2 -a 89 970 10 -a 89 313 8 -a 89 450 7 -a 89 161 5 -a 89 843 5 -a 89 640 5 -a 89 752 1 -a 89 920 9 -a 89 239 4 -a 89 643 4 -a 89 958 8 -a 89 760 10 -a 89 692 5 -a 89 753 2 -a 89 189 5 -a 89 683 5 -a 89 43 7 -a 89 134 1 -a 89 899 5 -a 89 707 1 -a 89 734 9 -a 89 552 6 -a 89 421 4 -a 89 991 5 -a 89 555 8 -a 89 747 9 -a 89 199 1 -a 89 933 8 -a 89 302 1 -a 89 289 4 -a 89 797 9 -a 89 247 1 -a 89 601 6 -a 89 222 2 -a 89 407 10 -a 89 419 1 -a 89 861 6 -a 89 134 8 -a 89 314 7 -a 89 76 8 -a 89 776 10 -a 90 248 9 -a 90 835 1 -a 90 443 4 -a 90 1000 10 -a 90 101 8 -a 90 18 5 -a 90 133 3 -a 90 999 10 -a 90 724 9 -a 90 866 9 -a 90 527 10 -a 90 121 6 -a 90 832 7 -a 90 57 1 -a 90 867 6 -a 90 6 2 -a 90 989 2 -a 90 144 6 -a 90 294 7 -a 90 761 7 -a 90 390 4 -a 90 894 6 -a 90 983 9 -a 90 796 6 -a 90 288 2 -a 90 819 1 -a 90 929 6 -a 90 601 6 -a 90 894 6 -a 90 680 8 -a 90 848 8 -a 90 705 7 -a 90 98 6 -a 90 824 3 -a 90 703 3 -a 90 199 3 -a 90 841 1 -a 90 835 6 -a 90 173 8 -a 90 541 6 -a 90 676 1 -a 90 699 5 -a 90 661 10 -a 90 483 6 -a 90 755 7 -a 90 503 1 -a 90 488 10 -a 90 719 7 -a 90 647 4 -a 90 781 1 -a 90 456 9 -a 90 12 4 -a 90 650 2 -a 90 414 7 -a 90 808 6 -a 90 937 3 -a 90 208 9 -a 90 712 7 -a 90 514 1 -a 90 78 7 -a 90 368 6 -a 90 337 7 -a 90 782 9 -a 90 465 8 -a 90 136 9 -a 90 460 9 -a 90 663 4 -a 90 977 6 -a 90 271 8 -a 90 836 8 -a 90 493 5 -a 90 946 9 -a 90 510 6 -a 90 129 5 -a 90 405 4 -a 90 241 4 -a 90 631 10 -a 90 892 8 -a 90 959 10 -a 90 253 10 -a 90 649 10 -a 90 390 8 -a 90 265 6 -a 90 274 3 -a 90 803 2 -a 90 48 7 -a 90 187 10 -a 91 759 2 -a 91 700 2 -a 91 64 9 -a 91 102 1 -a 91 12 10 -a 91 845 5 -a 91 567 9 -a 91 148 10 -a 91 280 8 -a 91 205 4 -a 91 100 7 -a 91 550 5 -a 91 16 7 -a 91 592 9 -a 91 472 10 -a 91 526 9 -a 91 720 8 -a 91 876 4 -a 91 766 6 -a 91 326 4 -a 91 743 5 -a 91 700 8 -a 91 579 6 -a 91 367 1 -a 91 66 9 -a 91 843 1 -a 91 641 2 -a 91 868 5 -a 91 890 5 -a 91 827 4 -a 91 854 10 -a 91 624 3 -a 91 502 3 -a 91 917 4 -a 91 726 10 -a 91 513 7 -a 91 737 7 -a 91 268 9 -a 91 660 4 -a 91 472 5 -a 91 759 3 -a 91 542 3 -a 91 488 5 -a 91 326 2 -a 91 21 3 -a 91 864 7 -a 91 754 6 -a 91 347 1 -a 91 583 9 -a 91 429 10 -a 91 925 2 -a 91 949 7 -a 91 494 8 -a 91 743 6 -a 91 565 9 -a 91 338 9 -a 91 608 2 -a 91 367 6 -a 91 167 7 -a 91 207 2 -a 91 868 3 -a 91 60 6 -a 91 932 4 -a 91 357 4 -a 91 796 4 -a 91 175 4 -a 91 788 6 -a 91 647 5 -a 91 751 8 -a 91 306 4 -a 91 110 3 -a 91 52 6 -a 91 294 2 -a 91 98 8 -a 91 73 4 -a 91 134 10 -a 91 851 3 -a 91 419 4 -a 91 716 4 -a 91 255 4 -a 91 319 7 -a 91 640 9 -a 91 749 1 -a 91 37 4 -a 91 181 5 -a 91 62 7 -a 91 644 3 -a 91 547 3 -a 91 228 2 -a 91 850 6 -a 91 391 7 -a 91 287 1 -a 91 758 8 -a 91 747 6 -a 91 59 6 -a 91 932 9 -a 91 738 3 -a 91 846 10 -a 92 554 1 -a 92 464 4 -a 92 127 7 -a 92 663 2 -a 92 516 7 -a 92 421 2 -a 92 760 6 -a 92 588 1 -a 92 554 5 -a 92 586 2 -a 92 245 1 -a 92 841 3 -a 92 300 3 -a 92 884 7 -a 92 565 3 -a 92 336 10 -a 92 40 9 -a 92 626 3 -a 92 979 8 -a 92 587 2 -a 92 853 7 -a 92 804 5 -a 92 977 2 -a 92 116 8 -a 92 537 2 -a 92 699 5 -a 92 174 7 -a 92 445 5 -a 92 412 8 -a 92 998 2 -a 92 876 10 -a 92 122 5 -a 92 637 1 -a 92 367 4 -a 92 542 3 -a 92 372 4 -a 92 954 5 -a 92 71 9 -a 92 958 2 -a 92 935 9 -a 92 315 4 -a 92 774 3 -a 92 210 4 -a 92 174 1 -a 92 314 1 -a 92 545 2 -a 92 214 8 -a 92 939 3 -a 92 499 7 -a 92 800 5 -a 92 767 1 -a 92 278 8 -a 92 752 9 -a 92 882 1 -a 92 815 4 -a 92 426 6 -a 92 31 7 -a 92 235 6 -a 92 837 5 -a 92 26 3 -a 92 208 2 -a 92 688 9 -a 92 147 4 -a 92 844 2 -a 92 30 6 -a 92 688 5 -a 92 192 5 -a 92 983 2 -a 92 758 7 -a 92 125 1 -a 92 893 8 -a 92 48 6 -a 92 898 5 -a 92 78 9 -a 92 221 9 -a 92 187 3 -a 92 622 5 -a 92 434 7 -a 92 101 8 -a 92 96 3 -a 92 209 10 -a 92 867 4 -a 92 374 4 -a 92 960 4 -a 92 725 7 -a 92 164 5 -a 92 361 1 -a 92 755 9 -a 92 398 10 -a 92 174 4 -a 92 780 6 -a 92 605 9 -a 92 861 6 -a 92 926 7 -a 92 425 5 -a 92 891 5 -a 92 589 6 -a 92 616 9 -a 92 849 1 -a 92 322 7 -a 92 740 1 -a 92 718 3 -a 92 369 5 -a 92 613 2 -a 93 795 8 -a 93 590 2 -a 93 799 6 -a 93 393 8 -a 93 899 3 -a 93 488 9 -a 93 208 2 -a 93 741 8 -a 93 861 3 -a 93 143 1 -a 93 441 9 -a 93 504 9 -a 93 172 9 -a 93 397 5 -a 93 677 5 -a 93 951 10 -a 93 513 7 -a 93 853 10 -a 93 402 8 -a 93 379 4 -a 93 417 4 -a 93 204 3 -a 93 739 10 -a 93 732 2 -a 93 921 7 -a 93 83 6 -a 93 320 8 -a 93 691 3 -a 93 672 9 -a 93 94 4 -a 93 59 2 -a 93 671 10 -a 93 992 10 -a 93 547 1 -a 93 878 3 -a 93 708 4 -a 93 383 10 -a 93 125 7 -a 93 383 4 -a 93 499 2 -a 93 296 9 -a 93 779 8 -a 93 151 9 -a 93 222 6 -a 93 756 5 -a 93 664 9 -a 93 50 3 -a 93 133 4 -a 93 18 9 -a 93 467 7 -a 93 125 6 -a 93 221 7 -a 93 181 9 -a 93 856 10 -a 93 117 4 -a 93 263 7 -a 93 151 1 -a 93 808 1 -a 93 935 6 -a 93 244 5 -a 93 866 2 -a 93 581 4 -a 93 211 3 -a 93 388 8 -a 93 434 8 -a 93 919 6 -a 93 771 2 -a 93 429 6 -a 93 19 3 -a 93 129 2 -a 93 928 8 -a 93 314 5 -a 93 907 6 -a 93 54 4 -a 93 535 10 -a 93 639 3 -a 93 717 2 -a 93 585 1 -a 93 771 10 -a 93 735 8 -a 93 27 10 -a 93 896 7 -a 93 955 8 -a 93 207 6 -a 93 727 4 -a 93 48 4 -a 93 469 1 -a 93 878 3 -a 93 855 8 -a 93 379 10 -a 93 97 8 -a 93 696 3 -a 93 959 10 -a 93 308 7 -a 93 60 10 -a 93 368 7 -a 93 202 9 -a 93 830 7 -a 93 797 3 -a 93 220 1 -a 93 958 5 -a 93 700 7 -a 93 533 5 -a 93 840 8 -a 93 753 7 -a 93 43 5 -a 93 454 10 -a 93 446 7 -a 94 627 7 -a 94 201 5 -a 94 156 7 -a 94 653 4 -a 94 72 3 -a 94 86 7 -a 94 859 9 -a 94 798 8 -a 94 133 9 -a 94 304 6 -a 94 651 4 -a 94 987 6 -a 94 682 3 -a 94 748 10 -a 94 659 3 -a 94 617 1 -a 94 31 10 -a 94 718 4 -a 94 984 9 -a 94 232 1 -a 94 523 2 -a 94 756 6 -a 94 451 7 -a 94 456 6 -a 94 431 3 -a 94 983 4 -a 94 271 5 -a 94 160 10 -a 94 1 9 -a 94 725 5 -a 94 605 2 -a 94 628 10 -a 94 925 6 -a 94 760 1 -a 94 256 8 -a 94 996 7 -a 94 845 4 -a 94 91 8 -a 94 769 4 -a 94 978 3 -a 94 394 8 -a 94 396 5 -a 94 940 1 -a 94 51 8 -a 94 119 6 -a 94 574 6 -a 94 667 1 -a 94 149 1 -a 94 267 6 -a 94 627 8 -a 94 380 8 -a 94 789 10 -a 94 358 9 -a 94 830 8 -a 94 220 9 -a 94 789 2 -a 94 788 3 -a 94 491 3 -a 94 948 6 -a 94 788 5 -a 94 191 6 -a 94 528 8 -a 94 391 3 -a 94 91 7 -a 94 263 7 -a 94 647 5 -a 94 62 5 -a 94 83 8 -a 94 737 6 -a 94 830 5 -a 94 36 6 -a 94 106 5 -a 94 201 10 -a 94 976 3 -a 94 156 5 -a 94 319 3 -a 94 525 6 -a 94 823 5 -a 94 467 9 -a 94 792 4 -a 94 425 8 -a 94 846 8 -a 94 556 9 -a 94 782 6 -a 94 651 8 -a 94 776 4 -a 94 546 2 -a 94 414 8 -a 94 242 9 -a 95 469 2 -a 95 178 6 -a 95 432 6 -a 95 996 10 -a 95 568 1 -a 95 522 9 -a 95 234 4 -a 95 190 4 -a 95 583 3 -a 95 317 8 -a 95 926 7 -a 95 388 10 -a 95 352 4 -a 95 7 10 -a 95 589 4 -a 95 303 6 -a 95 163 8 -a 95 907 1 -a 95 828 2 -a 95 985 5 -a 95 350 6 -a 95 595 7 -a 95 385 6 -a 95 171 9 -a 95 126 2 -a 95 142 1 -a 95 822 4 -a 95 901 7 -a 95 688 1 -a 95 211 10 -a 95 118 10 -a 95 132 4 -a 95 388 5 -a 95 549 8 -a 95 104 2 -a 95 956 8 -a 95 46 5 -a 95 337 2 -a 95 121 7 -a 95 628 10 -a 95 653 9 -a 95 23 7 -a 95 29 2 -a 95 580 2 -a 95 283 6 -a 95 191 10 -a 95 462 2 -a 95 86 3 -a 95 151 10 -a 95 811 6 -a 95 680 9 -a 95 535 5 -a 95 982 6 -a 95 806 2 -a 95 677 3 -a 95 779 5 -a 95 682 2 -a 95 340 10 -a 95 989 7 -a 95 800 10 -a 95 471 8 -a 95 353 8 -a 95 324 7 -a 95 574 3 -a 95 284 2 -a 95 370 4 -a 95 911 8 -a 95 404 3 -a 95 997 3 -a 95 539 4 -a 95 426 6 -a 95 988 2 -a 95 519 4 -a 95 455 6 -a 95 543 9 -a 95 802 3 -a 95 645 4 -a 95 887 5 -a 95 796 5 -a 95 791 10 -a 95 543 3 -a 95 306 1 -a 95 748 1 -a 95 324 3 -a 95 982 5 -a 95 502 4 -a 95 297 7 -a 95 467 2 -a 95 780 3 -a 95 768 6 -a 95 819 9 -a 95 80 7 -a 95 317 1 -a 95 78 6 -a 95 449 10 -a 95 203 5 -a 95 481 5 -a 95 421 9 -a 95 742 3 -a 95 907 9 -a 95 385 2 -a 96 236 3 -a 96 337 6 -a 96 927 3 -a 96 13 2 -a 96 981 3 -a 96 907 1 -a 96 900 3 -a 96 752 10 -a 96 674 2 -a 96 418 2 -a 96 34 7 -a 96 397 4 -a 96 741 10 -a 96 899 10 -a 96 721 9 -a 96 288 8 -a 96 341 6 -a 96 477 6 -a 96 31 8 -a 96 135 10 -a 96 556 1 -a 96 347 10 -a 96 212 6 -a 96 550 6 -a 96 692 5 -a 96 400 7 -a 96 267 10 -a 96 574 7 -a 96 784 7 -a 96 502 8 -a 96 910 8 -a 96 687 5 -a 96 515 5 -a 96 867 6 -a 96 569 1 -a 96 390 6 -a 96 594 6 -a 96 218 2 -a 96 807 6 -a 96 627 5 -a 96 615 6 -a 96 523 9 -a 96 618 1 -a 96 489 7 -a 96 219 8 -a 96 905 10 -a 96 829 4 -a 96 695 9 -a 96 935 8 -a 96 963 4 -a 96 226 5 -a 96 257 7 -a 96 150 4 -a 96 205 10 -a 96 806 1 -a 96 841 10 -a 96 605 1 -a 96 48 9 -a 96 391 10 -a 96 364 8 -a 96 550 1 -a 96 276 6 -a 96 26 2 -a 96 40 6 -a 96 118 8 -a 96 595 2 -a 96 429 5 -a 96 712 7 -a 96 812 8 -a 96 211 3 -a 96 314 4 -a 96 402 10 -a 96 733 3 -a 96 931 6 -a 96 890 10 -a 96 951 7 -a 96 811 2 -a 96 694 5 -a 96 622 6 -a 96 721 9 -a 96 632 5 -a 96 847 3 -a 96 978 2 -a 96 781 7 -a 96 28 4 -a 96 759 10 -a 96 598 2 -a 96 632 6 -a 96 807 10 -a 96 988 5 -a 96 995 2 -a 96 332 6 -a 96 239 1 -a 96 371 7 -a 97 357 6 -a 97 591 4 -a 97 799 8 -a 97 44 1 -a 97 378 5 -a 97 357 2 -a 97 780 4 -a 97 717 2 -a 97 264 3 -a 97 645 8 -a 97 643 8 -a 97 50 2 -a 97 315 2 -a 97 240 7 -a 97 771 6 -a 97 946 8 -a 97 63 3 -a 97 724 4 -a 97 703 1 -a 97 90 5 -a 97 458 10 -a 97 276 7 -a 97 721 10 -a 97 240 4 -a 97 239 1 -a 97 691 5 -a 97 571 7 -a 97 477 2 -a 97 687 7 -a 97 941 9 -a 97 833 10 -a 97 253 5 -a 97 715 5 -a 97 876 2 -a 97 631 4 -a 97 699 3 -a 97 209 4 -a 97 386 9 -a 97 391 1 -a 97 472 3 -a 97 6 2 -a 97 10 8 -a 97 521 9 -a 97 320 6 -a 97 249 9 -a 97 267 3 -a 97 242 1 -a 97 311 2 -a 97 990 2 -a 97 944 10 -a 97 400 3 -a 97 424 1 -a 97 195 6 -a 97 96 8 -a 97 663 5 -a 97 433 4 -a 97 787 5 -a 97 210 4 -a 97 909 4 -a 97 449 6 -a 97 126 1 -a 97 718 8 -a 97 702 7 -a 97 841 2 -a 97 569 3 -a 97 308 3 -a 97 515 10 -a 97 777 5 -a 97 693 7 -a 97 906 4 -a 97 224 10 -a 97 698 3 -a 97 915 3 -a 97 745 4 -a 97 139 1 -a 97 235 7 -a 97 450 5 -a 97 977 3 -a 97 154 8 -a 97 849 3 -a 97 376 10 -a 97 348 3 -a 97 945 5 -a 97 14 5 -a 97 780 7 -a 97 707 4 -a 97 223 9 -a 97 664 9 -a 98 131 1 -a 98 349 10 -a 98 357 6 -a 98 832 4 -a 98 165 9 -a 98 926 4 -a 98 115 3 -a 98 679 8 -a 98 678 7 -a 98 807 10 -a 98 560 8 -a 98 902 1 -a 98 481 1 -a 98 450 4 -a 98 622 1 -a 98 474 8 -a 98 589 6 -a 98 608 7 -a 98 708 10 -a 98 14 5 -a 98 560 5 -a 98 861 10 -a 98 862 10 -a 98 935 3 -a 98 184 2 -a 98 782 10 -a 98 949 1 -a 98 963 2 -a 98 464 4 -a 98 147 2 -a 98 602 10 -a 98 595 9 -a 98 495 10 -a 98 959 3 -a 98 402 9 -a 98 659 5 -a 98 860 1 -a 98 517 4 -a 98 314 2 -a 98 513 10 -a 98 299 3 -a 98 873 4 -a 98 390 6 -a 98 779 6 -a 98 299 4 -a 98 228 8 -a 98 887 9 -a 98 595 2 -a 98 935 7 -a 98 900 3 -a 98 130 1 -a 98 771 2 -a 98 737 2 -a 98 41 8 -a 98 954 10 -a 98 495 1 -a 98 989 7 -a 98 892 9 -a 98 958 4 -a 98 111 9 -a 98 470 3 -a 98 528 6 -a 98 606 2 -a 98 404 5 -a 98 930 8 -a 98 240 6 -a 98 239 3 -a 98 422 3 -a 98 553 4 -a 98 751 9 -a 98 720 9 -a 98 402 8 -a 98 117 5 -a 98 475 3 -a 98 700 5 -a 98 103 8 -a 98 702 7 -a 98 562 3 -a 98 697 8 -a 98 613 4 -a 98 437 6 -a 98 827 6 -a 98 359 9 -a 98 149 2 -a 98 867 4 -a 98 289 4 -a 98 643 5 -a 98 831 4 -a 98 156 3 -a 98 577 9 -a 98 941 2 -a 98 625 2 -a 98 80 6 -a 98 522 5 -a 98 4 10 -a 98 762 3 -a 98 242 3 -a 98 406 10 -a 98 290 8 -a 98 993 7 -a 98 102 7 -a 98 691 2 -a 98 85 2 -a 98 576 6 -a 98 366 10 -a 98 187 9 -a 98 253 7 -a 99 927 1 -a 99 884 1 -a 99 865 5 -a 99 339 5 -a 99 686 10 -a 99 200 7 -a 99 488 3 -a 99 528 1 -a 99 488 4 -a 99 106 5 -a 99 334 1 -a 99 643 5 -a 99 682 7 -a 99 250 4 -a 99 244 8 -a 99 762 4 -a 99 772 5 -a 99 247 10 -a 99 746 6 -a 99 509 10 -a 99 489 6 -a 99 128 6 -a 99 798 4 -a 99 457 5 -a 99 229 2 -a 99 465 3 -a 99 541 2 -a 99 804 3 -a 99 830 8 -a 99 727 2 -a 99 32 7 -a 99 733 10 -a 99 586 9 -a 99 897 7 -a 99 47 8 -a 99 247 5 -a 99 72 9 -a 99 534 6 -a 99 774 1 -a 99 559 3 -a 99 640 5 -a 99 83 1 -a 99 177 1 -a 99 297 3 -a 99 333 4 -a 99 420 8 -a 99 34 4 -a 99 80 10 -a 99 667 2 -a 99 780 6 -a 99 588 1 -a 99 131 3 -a 99 907 2 -a 99 361 6 -a 99 587 6 -a 99 111 8 -a 99 825 1 -a 99 103 3 -a 99 914 2 -a 99 631 10 -a 99 829 8 -a 99 945 2 -a 99 339 2 -a 99 391 7 -a 99 817 7 -a 99 385 8 -a 99 637 9 -a 99 888 10 -a 99 919 4 -a 99 387 10 -a 99 422 8 -a 99 534 5 -a 99 469 8 -a 99 599 2 -a 99 830 10 -a 99 801 3 -a 99 864 7 -a 99 880 1 -a 99 660 5 -a 99 619 2 -a 99 443 2 -a 99 790 1 -a 99 501 8 -a 99 804 8 -a 99 352 1 -a 99 611 9 -a 99 604 10 -a 99 454 3 -a 99 500 7 -a 100 210 9 -a 100 259 10 -a 100 420 3 -a 100 548 9 -a 100 649 10 -a 100 213 6 -a 100 933 3 -a 100 261 3 -a 100 76 2 -a 100 827 9 -a 100 647 6 -a 100 498 10 -a 100 336 6 -a 100 92 2 -a 100 72 5 -a 100 141 3 -a 100 892 5 -a 100 65 9 -a 100 748 5 -a 100 725 9 -a 100 598 8 -a 100 166 2 -a 100 490 8 -a 100 74 3 -a 100 969 6 -a 100 842 1 -a 100 684 9 -a 100 549 3 -a 100 271 2 -a 100 159 10 -a 100 758 9 -a 100 529 3 -a 100 579 3 -a 100 282 3 -a 100 153 6 -a 100 791 7 -a 100 190 3 -a 100 414 10 -a 100 866 3 -a 100 36 3 -a 100 339 2 -a 100 327 5 -a 100 127 4 -a 100 410 9 -a 100 467 7 -a 100 475 2 -a 100 447 6 -a 100 742 6 -a 100 175 9 -a 100 20 2 -a 100 907 6 -a 100 664 2 -a 100 94 1 -a 100 852 4 -a 100 481 1 -a 100 777 6 -a 100 376 7 -a 100 752 8 -a 100 936 8 -a 100 109 10 -a 100 256 5 -a 100 490 10 -a 100 390 9 -a 100 409 3 -a 100 256 9 -a 100 579 7 -a 100 822 6 -a 100 97 4 -a 100 570 9 -a 100 857 9 -a 100 436 10 -a 100 896 9 -a 100 984 5 -a 100 845 5 -a 100 339 2 -a 100 978 9 -a 100 295 8 -a 100 785 1 -a 100 695 7 -a 100 469 4 -a 100 804 3 -a 100 577 10 -a 100 109 4 -a 100 897 10 -a 100 404 7 -a 100 589 2 -a 100 650 10 -a 100 779 8 -a 100 316 8 -a 100 561 8 -a 101 888 5 -a 101 572 2 -a 101 26 10 -a 101 253 3 -a 101 980 10 -a 101 281 2 -a 101 832 2 -a 101 777 3 -a 101 377 3 -a 101 377 2 -a 101 609 6 -a 101 812 4 -a 101 249 10 -a 101 568 7 -a 101 633 6 -a 101 587 7 -a 101 521 7 -a 101 927 3 -a 101 347 2 -a 101 191 2 -a 101 372 10 -a 101 126 4 -a 101 768 7 -a 101 480 9 -a 101 147 1 -a 101 44 10 -a 101 648 10 -a 101 926 3 -a 101 360 5 -a 101 184 4 -a 101 789 2 -a 101 931 2 -a 101 209 5 -a 101 17 7 -a 101 886 3 -a 101 489 7 -a 101 848 10 -a 101 638 2 -a 101 865 3 -a 101 201 4 -a 101 222 9 -a 101 653 8 -a 101 449 5 -a 101 790 9 -a 101 261 5 -a 101 11 1 -a 101 286 3 -a 101 163 3 -a 101 357 5 -a 101 477 7 -a 101 534 2 -a 101 482 3 -a 101 220 2 -a 101 480 5 -a 101 366 8 -a 101 33 9 -a 101 103 8 -a 101 267 8 -a 101 392 5 -a 101 286 4 -a 101 31 10 -a 101 298 1 -a 101 494 5 -a 101 48 5 -a 101 159 4 -a 101 982 9 -a 101 895 3 -a 101 796 10 -a 101 823 6 -a 101 71 10 -a 101 451 8 -a 101 519 2 -a 101 782 10 -a 101 711 3 -a 101 529 8 -a 101 44 5 -a 101 873 3 -a 101 885 4 -a 101 520 2 -a 101 383 8 -a 101 343 5 -a 101 739 4 -a 101 371 7 -a 101 822 9 -a 101 80 8 -a 101 403 5 -a 101 925 10 -a 101 347 9 -a 101 794 6 -a 101 186 10 -a 101 377 5 -a 101 67 9 -a 101 680 6 -a 101 424 7 -a 101 225 2 -a 101 637 3 -a 101 295 3 -a 101 435 2 -a 102 365 10 -a 102 885 5 -a 102 884 7 -a 102 770 4 -a 102 571 10 -a 102 388 6 -a 102 813 9 -a 102 420 9 -a 102 249 6 -a 102 308 1 -a 102 802 6 -a 102 591 1 -a 102 22 5 -a 102 148 2 -a 102 388 6 -a 102 102 5 -a 102 551 2 -a 102 288 1 -a 102 448 6 -a 102 320 2 -a 102 474 10 -a 102 824 4 -a 102 387 10 -a 102 129 1 -a 102 224 7 -a 102 611 6 -a 102 765 5 -a 102 518 9 -a 102 607 3 -a 102 176 3 -a 102 882 9 -a 102 595 9 -a 102 36 9 -a 102 741 4 -a 102 340 2 -a 102 607 8 -a 102 105 5 -a 102 129 8 -a 102 2 6 -a 102 353 9 -a 102 436 9 -a 102 803 6 -a 102 943 10 -a 102 458 2 -a 102 950 7 -a 102 306 8 -a 102 559 3 -a 102 476 10 -a 102 594 5 -a 102 796 1 -a 102 43 6 -a 102 805 10 -a 102 158 5 -a 102 171 8 -a 102 4 6 -a 102 768 4 -a 102 935 5 -a 102 521 7 -a 102 350 6 -a 102 86 6 -a 102 379 4 -a 102 944 6 -a 102 122 2 -a 102 95 4 -a 102 260 6 -a 102 728 10 -a 102 199 8 -a 102 388 1 -a 102 729 10 -a 102 551 1 -a 102 823 10 -a 102 507 5 -a 102 469 8 -a 102 256 9 -a 102 432 1 -a 102 775 3 -a 102 814 10 -a 102 908 3 -a 102 344 1 -a 102 795 2 -a 102 679 6 -a 102 386 4 -a 102 576 2 -a 102 836 8 -a 102 556 2 -a 102 579 10 -a 102 579 4 -a 102 466 10 -a 102 76 1 -a 102 929 8 -a 102 552 10 -a 102 454 6 -a 102 848 10 -a 102 673 9 -a 102 548 6 -a 102 83 2 -a 102 376 3 -a 102 747 3 -a 102 470 1 -a 102 80 3 -a 102 273 5 -a 102 269 10 -a 102 586 7 -a 102 742 4 -a 102 524 4 -a 102 492 4 -a 103 314 5 -a 103 900 9 -a 103 835 4 -a 103 84 10 -a 103 554 5 -a 103 196 6 -a 103 659 2 -a 103 365 1 -a 103 751 3 -a 103 214 8 -a 103 944 3 -a 103 192 10 -a 103 289 3 -a 103 848 1 -a 103 743 3 -a 103 742 3 -a 103 671 2 -a 103 391 3 -a 103 265 2 -a 103 754 10 -a 103 766 6 -a 103 199 1 -a 103 845 10 -a 103 260 10 -a 103 467 6 -a 103 406 6 -a 103 991 4 -a 103 399 7 -a 103 468 6 -a 103 280 10 -a 103 274 6 -a 103 278 6 -a 103 363 9 -a 103 828 9 -a 103 473 4 -a 103 168 10 -a 103 199 7 -a 103 211 4 -a 103 87 3 -a 103 390 8 -a 103 499 1 -a 103 934 9 -a 103 109 8 -a 103 216 10 -a 103 581 3 -a 103 499 7 -a 103 480 4 -a 103 310 3 -a 103 241 5 -a 103 467 10 -a 103 508 8 -a 103 61 8 -a 103 726 5 -a 103 975 1 -a 103 467 3 -a 103 702 9 -a 103 941 3 -a 103 865 6 -a 103 145 3 -a 103 196 5 -a 103 114 7 -a 103 422 8 -a 103 558 9 -a 103 941 2 -a 103 894 6 -a 103 555 2 -a 103 85 8 -a 103 68 8 -a 103 765 6 -a 103 171 1 -a 103 457 6 -a 103 239 8 -a 103 81 10 -a 103 565 9 -a 103 454 5 -a 103 661 1 -a 103 40 7 -a 103 934 2 -a 103 970 4 -a 103 280 2 -a 103 376 1 -a 103 453 1 -a 103 340 6 -a 103 77 1 -a 103 403 1 -a 103 806 7 -a 103 778 10 -a 103 319 3 -a 103 646 1 -a 103 922 4 -a 103 514 9 -a 103 760 6 -a 103 319 9 -a 103 48 9 -a 103 676 6 -a 103 188 1 -a 103 602 5 -a 103 760 9 -a 103 255 9 -a 103 343 9 -a 103 931 1 -a 103 711 9 -a 103 581 1 -a 104 252 3 -a 104 11 2 -a 104 647 4 -a 104 291 2 -a 104 944 5 -a 104 592 4 -a 104 570 6 -a 104 295 7 -a 104 20 6 -a 104 909 10 -a 104 371 5 -a 104 423 6 -a 104 691 4 -a 104 124 7 -a 104 741 7 -a 104 312 6 -a 104 21 10 -a 104 231 2 -a 104 47 6 -a 104 339 2 -a 104 278 6 -a 104 723 5 -a 104 526 4 -a 104 879 8 -a 104 458 1 -a 104 780 9 -a 104 197 4 -a 104 364 4 -a 104 466 10 -a 104 778 6 -a 104 350 6 -a 104 717 4 -a 104 788 2 -a 104 996 3 -a 104 707 9 -a 104 563 9 -a 104 552 5 -a 104 583 8 -a 104 437 10 -a 104 347 7 -a 104 103 6 -a 104 470 7 -a 104 721 5 -a 104 414 9 -a 104 490 10 -a 104 951 2 -a 104 461 6 -a 104 828 4 -a 104 204 2 -a 104 159 7 -a 104 329 1 -a 104 59 3 -a 104 616 5 -a 104 84 4 -a 104 255 3 -a 104 980 6 -a 104 549 8 -a 104 8 1 -a 104 305 3 -a 104 242 9 -a 104 795 2 -a 104 277 8 -a 104 224 3 -a 104 477 3 -a 104 839 6 -a 104 776 3 -a 104 453 10 -a 104 397 5 -a 104 188 10 -a 104 799 8 -a 104 377 3 -a 104 290 2 -a 104 244 7 -a 104 74 6 -a 104 703 4 -a 104 733 1 -a 104 139 9 -a 104 536 9 -a 104 204 4 -a 104 297 10 -a 104 864 2 -a 104 262 6 -a 104 913 4 -a 104 947 9 -a 104 516 8 -a 104 868 1 -a 104 472 5 -a 104 524 5 -a 104 148 10 -a 104 713 1 -a 104 294 5 -a 104 424 2 -a 104 936 6 -a 104 771 9 -a 104 239 5 -a 104 687 9 -a 104 199 5 -a 104 635 4 -a 104 874 8 -a 104 998 4 -a 104 139 4 -a 104 217 4 -a 104 61 1 -a 104 842 4 -a 105 950 1 -a 105 60 4 -a 105 980 10 -a 105 461 5 -a 105 263 8 -a 105 253 3 -a 105 301 6 -a 105 524 5 -a 105 141 2 -a 105 223 1 -a 105 16 7 -a 105 694 3 -a 105 539 6 -a 105 131 4 -a 105 382 5 -a 105 832 2 -a 105 555 5 -a 105 294 9 -a 105 578 1 -a 105 793 4 -a 105 980 7 -a 105 777 4 -a 105 403 1 -a 105 830 6 -a 105 750 6 -a 105 390 10 -a 105 968 10 -a 105 966 7 -a 105 450 4 -a 105 785 10 -a 105 891 7 -a 105 510 9 -a 105 741 3 -a 105 328 3 -a 105 772 2 -a 105 993 8 -a 105 628 6 -a 105 272 10 -a 105 109 2 -a 105 850 10 -a 105 287 1 -a 105 92 6 -a 105 520 2 -a 105 825 4 -a 105 222 2 -a 105 901 2 -a 105 632 3 -a 105 776 7 -a 105 170 6 -a 105 186 10 -a 105 544 5 -a 105 126 7 -a 105 962 10 -a 105 947 7 -a 105 955 3 -a 105 687 1 -a 105 312 4 -a 105 898 7 -a 105 628 10 -a 105 762 4 -a 105 659 7 -a 105 495 10 -a 105 247 5 -a 105 375 5 -a 105 822 10 -a 105 343 1 -a 105 425 3 -a 105 265 7 -a 105 451 6 -a 105 250 7 -a 105 551 3 -a 105 542 6 -a 105 769 8 -a 105 351 9 -a 105 763 7 -a 105 646 10 -a 105 983 10 -a 105 515 7 -a 105 815 6 -a 105 144 5 -a 105 34 5 -a 105 940 2 -a 105 81 9 -a 105 980 4 -a 105 870 10 -a 105 767 7 -a 105 268 9 -a 105 744 4 -a 105 370 6 -a 105 5 9 -a 105 378 10 -a 105 864 5 -a 105 251 8 -a 105 752 1 -a 105 661 5 -a 105 244 9 -a 106 70 9 -a 106 61 5 -a 106 509 3 -a 106 520 7 -a 106 311 9 -a 106 35 3 -a 106 37 4 -a 106 55 6 -a 106 386 4 -a 106 799 6 -a 106 700 2 -a 106 344 1 -a 106 289 10 -a 106 491 6 -a 106 487 6 -a 106 323 6 -a 106 406 9 -a 106 567 2 -a 106 278 2 -a 106 252 3 -a 106 309 4 -a 106 545 2 -a 106 995 1 -a 106 678 3 -a 106 549 9 -a 106 348 7 -a 106 518 6 -a 106 799 4 -a 106 75 3 -a 106 154 8 -a 106 19 8 -a 106 144 8 -a 106 215 3 -a 106 527 9 -a 106 663 1 -a 106 525 8 -a 106 561 5 -a 106 699 3 -a 106 579 7 -a 106 946 6 -a 106 473 8 -a 106 255 1 -a 106 265 2 -a 106 762 2 -a 106 745 2 -a 106 751 7 -a 106 60 4 -a 106 126 4 -a 106 293 9 -a 106 337 8 -a 106 377 10 -a 106 601 3 -a 106 882 8 -a 106 347 6 -a 106 255 5 -a 106 406 6 -a 106 694 4 -a 106 772 1 -a 106 181 6 -a 106 768 2 -a 106 925 7 -a 106 199 8 -a 106 911 1 -a 106 115 3 -a 106 725 6 -a 106 549 5 -a 106 639 1 -a 106 261 9 -a 106 223 8 -a 106 194 7 -a 106 183 10 -a 106 696 3 -a 106 448 9 -a 106 447 9 -a 106 433 9 -a 106 168 9 -a 106 174 7 -a 106 492 6 -a 106 293 4 -a 106 466 8 -a 106 828 5 -a 106 670 3 -a 106 43 4 -a 106 685 4 -a 106 297 6 -a 106 67 1 -a 106 686 8 -a 106 44 6 -a 106 247 10 -a 106 429 4 -a 106 968 3 -a 106 445 9 -a 106 316 9 -a 106 59 7 -a 106 145 4 -a 106 864 6 -a 106 697 9 -a 106 405 1 -a 106 63 2 -a 106 890 1 -a 106 587 10 -a 106 758 10 -a 106 313 2 -a 106 10 2 -a 106 166 4 -a 106 480 9 -a 106 183 4 -a 106 657 6 -a 106 773 9 -a 106 648 1 -a 106 460 7 -a 106 418 9 -a 107 690 4 -a 107 121 9 -a 107 409 2 -a 107 986 2 -a 107 187 8 -a 107 70 2 -a 107 5 7 -a 107 433 2 -a 107 499 9 -a 107 973 1 -a 107 877 2 -a 107 814 2 -a 107 7 5 -a 107 653 7 -a 107 703 10 -a 107 401 2 -a 107 715 3 -a 107 569 3 -a 107 988 2 -a 107 448 9 -a 107 881 7 -a 107 997 5 -a 107 613 1 -a 107 337 8 -a 107 155 3 -a 107 245 2 -a 107 85 4 -a 107 802 9 -a 107 705 5 -a 107 502 1 -a 107 468 2 -a 107 825 10 -a 107 910 3 -a 107 429 8 -a 107 980 7 -a 107 434 7 -a 107 419 6 -a 107 454 1 -a 107 382 4 -a 107 271 3 -a 107 243 1 -a 107 388 2 -a 107 267 4 -a 107 895 9 -a 107 66 8 -a 107 667 9 -a 107 586 10 -a 107 634 3 -a 107 630 10 -a 107 9 2 -a 107 491 3 -a 107 602 8 -a 107 622 1 -a 107 827 5 -a 107 756 1 -a 107 866 7 -a 107 911 8 -a 107 534 3 -a 107 546 5 -a 107 388 8 -a 107 346 4 -a 107 273 4 -a 107 405 3 -a 107 332 4 -a 107 228 6 -a 107 838 2 -a 107 750 5 -a 107 681 2 -a 107 195 3 -a 107 923 7 -a 107 582 4 -a 107 262 5 -a 107 794 4 -a 107 648 9 -a 107 929 6 -a 107 355 2 -a 107 257 9 -a 107 534 10 -a 107 363 4 -a 107 747 9 -a 107 112 1 -a 107 984 3 -a 107 549 6 -a 107 867 2 -a 107 826 4 -a 107 435 10 -a 107 376 2 -a 107 347 1 -a 107 822 4 -a 107 352 8 -a 107 693 8 -a 107 71 5 -a 107 757 2 -a 107 298 1 -a 107 570 3 -a 107 750 1 -a 107 979 9 -a 108 765 2 -a 108 745 3 -a 108 877 5 -a 108 322 7 -a 108 646 4 -a 108 969 6 -a 108 911 4 -a 108 1000 1 -a 108 202 2 -a 108 420 10 -a 108 339 10 -a 108 948 2 -a 108 531 1 -a 108 298 9 -a 108 473 10 -a 108 374 2 -a 108 99 4 -a 108 907 8 -a 108 749 10 -a 108 446 4 -a 108 705 7 -a 108 77 10 -a 108 114 7 -a 108 775 6 -a 108 833 6 -a 108 113 4 -a 108 48 9 -a 108 378 3 -a 108 862 4 -a 108 2 7 -a 108 118 9 -a 108 583 6 -a 108 879 8 -a 108 440 6 -a 108 565 8 -a 108 500 8 -a 108 384 1 -a 108 451 10 -a 108 476 1 -a 108 585 5 -a 108 870 8 -a 108 814 7 -a 108 509 1 -a 108 377 4 -a 108 87 5 -a 108 981 7 -a 108 750 10 -a 108 186 10 -a 108 863 2 -a 108 474 4 -a 108 631 5 -a 108 543 6 -a 108 550 10 -a 108 744 2 -a 108 293 1 -a 108 358 5 -a 108 856 2 -a 108 341 2 -a 108 736 8 -a 108 694 4 -a 108 342 2 -a 108 853 5 -a 108 252 3 -a 108 196 6 -a 108 268 5 -a 108 816 2 -a 108 696 1 -a 108 652 1 -a 108 242 4 -a 108 147 9 -a 108 212 1 -a 108 87 9 -a 108 960 5 -a 108 720 10 -a 108 463 2 -a 108 22 7 -a 108 676 3 -a 108 188 4 -a 108 207 2 -a 108 515 5 -a 108 662 5 -a 108 837 9 -a 108 33 9 -a 108 187 8 -a 108 556 9 -a 108 326 6 -a 108 545 10 -a 108 388 8 -a 108 666 7 -a 108 256 1 -a 108 57 4 -a 108 84 2 -a 108 308 7 -a 108 179 4 -a 108 352 3 -a 108 99 1 -a 108 874 6 -a 108 340 8 -a 108 190 10 -a 108 426 2 -a 108 955 7 -a 108 910 9 -a 108 889 10 -a 109 976 4 -a 109 561 6 -a 109 52 4 -a 109 159 2 -a 109 51 2 -a 109 713 9 -a 109 995 9 -a 109 84 5 -a 109 900 6 -a 109 527 5 -a 109 409 3 -a 109 420 5 -a 109 914 6 -a 109 50 3 -a 109 675 9 -a 109 970 5 -a 109 32 9 -a 109 758 7 -a 109 253 7 -a 109 210 3 -a 109 85 5 -a 109 351 10 -a 109 59 4 -a 109 63 1 -a 109 690 6 -a 109 54 3 -a 109 253 2 -a 109 91 1 -a 109 138 2 -a 109 979 10 -a 109 960 6 -a 109 698 6 -a 109 7 5 -a 109 94 4 -a 109 749 3 -a 109 719 1 -a 109 64 8 -a 109 832 8 -a 109 594 7 -a 109 590 7 -a 109 216 1 -a 109 479 10 -a 109 265 10 -a 109 663 9 -a 109 424 2 -a 109 296 2 -a 109 397 4 -a 109 676 1 -a 109 506 2 -a 109 481 2 -a 109 2 7 -a 109 564 9 -a 109 544 5 -a 109 691 5 -a 109 618 7 -a 109 796 9 -a 109 782 3 -a 109 601 3 -a 109 933 2 -a 109 736 10 -a 109 536 10 -a 109 606 8 -a 109 742 9 -a 109 629 8 -a 109 330 9 -a 109 437 3 -a 109 693 8 -a 109 137 10 -a 109 6 7 -a 109 258 10 -a 109 352 4 -a 109 737 10 -a 109 616 3 -a 109 657 2 -a 109 136 3 -a 109 912 4 -a 109 29 5 -a 109 812 6 -a 109 393 8 -a 109 510 1 -a 109 813 6 -a 109 956 8 -a 109 29 3 -a 109 480 8 -a 109 549 2 -a 109 824 5 -a 109 237 3 -a 109 126 2 -a 109 732 7 -a 109 972 8 -a 109 661 9 -a 109 313 9 -a 109 690 3 -a 109 266 7 -a 109 643 2 -a 109 102 6 -a 109 958 1 -a 109 779 4 -a 109 107 1 -a 110 191 7 -a 110 107 3 -a 110 101 8 -a 110 927 5 -a 110 722 5 -a 110 758 7 -a 110 39 6 -a 110 609 5 -a 110 786 7 -a 110 850 7 -a 110 271 1 -a 110 638 6 -a 110 933 7 -a 110 299 9 -a 110 93 7 -a 110 457 9 -a 110 98 10 -a 110 329 9 -a 110 582 3 -a 110 829 7 -a 110 277 1 -a 110 219 6 -a 110 118 3 -a 110 966 7 -a 110 484 1 -a 110 760 1 -a 110 43 6 -a 110 417 5 -a 110 514 2 -a 110 149 1 -a 110 607 2 -a 110 620 7 -a 110 250 9 -a 110 510 6 -a 110 318 3 -a 110 548 9 -a 110 926 6 -a 110 768 2 -a 110 373 5 -a 110 903 5 -a 110 15 8 -a 110 811 6 -a 110 313 10 -a 110 79 10 -a 110 243 1 -a 110 411 6 -a 110 407 8 -a 110 825 8 -a 110 215 9 -a 110 683 7 -a 110 19 7 -a 110 332 9 -a 110 624 7 -a 110 502 5 -a 110 67 6 -a 110 666 9 -a 110 918 9 -a 110 581 7 -a 110 815 8 -a 110 500 5 -a 110 176 4 -a 110 40 6 -a 110 493 4 -a 110 22 9 -a 110 532 2 -a 110 395 2 -a 110 789 6 -a 110 904 1 -a 110 273 1 -a 110 803 6 -a 110 890 4 -a 110 59 1 -a 110 92 2 -a 110 968 10 -a 110 301 10 -a 110 502 9 -a 110 350 5 -a 110 101 8 -a 110 716 2 -a 110 9 9 -a 110 119 2 -a 110 24 10 -a 110 632 2 -a 110 620 2 -a 110 90 2 -a 110 274 10 -a 110 513 1 -a 110 670 2 -a 110 64 10 -a 110 846 4 -a 110 103 10 -a 110 997 10 -a 110 314 2 -a 110 124 4 -a 110 505 10 -a 110 708 1 -a 110 912 5 -a 110 384 8 -a 110 980 2 -a 111 691 4 -a 111 249 4 -a 111 14 5 -a 111 782 1 -a 111 192 10 -a 111 315 6 -a 111 259 8 -a 111 542 4 -a 111 415 6 -a 111 974 8 -a 111 550 7 -a 111 534 7 -a 111 997 7 -a 111 157 1 -a 111 129 4 -a 111 63 10 -a 111 430 2 -a 111 642 1 -a 111 732 2 -a 111 493 5 -a 111 630 4 -a 111 553 10 -a 111 595 4 -a 111 602 5 -a 111 867 3 -a 111 718 2 -a 111 82 9 -a 111 550 5 -a 111 606 8 -a 111 466 3 -a 111 506 4 -a 111 272 10 -a 111 714 4 -a 111 519 1 -a 111 29 4 -a 111 906 3 -a 111 833 3 -a 111 287 4 -a 111 423 4 -a 111 224 1 -a 111 236 4 -a 111 972 4 -a 111 757 4 -a 111 209 1 -a 111 104 10 -a 111 885 10 -a 111 271 1 -a 111 534 4 -a 111 502 5 -a 111 2 7 -a 111 107 8 -a 111 531 10 -a 111 597 4 -a 111 709 1 -a 111 373 1 -a 111 290 10 -a 111 790 4 -a 111 922 4 -a 111 895 7 -a 111 231 1 -a 111 403 7 -a 111 142 9 -a 111 945 1 -a 111 922 4 -a 111 170 9 -a 111 826 5 -a 111 730 8 -a 111 456 4 -a 111 224 9 -a 111 953 2 -a 111 692 4 -a 111 171 7 -a 111 685 4 -a 111 900 3 -a 111 274 8 -a 111 546 7 -a 111 146 3 -a 111 807 1 -a 111 23 4 -a 111 123 6 -a 111 809 3 -a 111 130 8 -a 111 653 1 -a 111 381 3 -a 111 838 1 -a 111 1 4 -a 111 670 2 -a 111 603 3 -a 111 923 3 -a 112 541 6 -a 112 834 7 -a 112 301 4 -a 112 682 9 -a 112 754 2 -a 112 198 9 -a 112 852 3 -a 112 555 2 -a 112 928 4 -a 112 283 2 -a 112 778 3 -a 112 856 2 -a 112 974 4 -a 112 948 5 -a 112 517 9 -a 112 849 4 -a 112 197 8 -a 112 38 4 -a 112 994 1 -a 112 60 8 -a 112 93 7 -a 112 788 3 -a 112 189 3 -a 112 745 10 -a 112 144 1 -a 112 2 6 -a 112 746 8 -a 112 813 9 -a 112 605 8 -a 112 644 4 -a 112 329 3 -a 112 414 3 -a 112 944 3 -a 112 143 5 -a 112 118 4 -a 112 838 6 -a 112 697 4 -a 112 21 6 -a 112 96 4 -a 112 450 6 -a 112 876 7 -a 112 46 7 -a 112 373 10 -a 112 368 2 -a 112 894 3 -a 112 569 10 -a 112 405 9 -a 112 864 9 -a 112 548 2 -a 112 465 1 -a 112 956 4 -a 112 311 9 -a 112 653 8 -a 112 676 7 -a 112 454 3 -a 112 655 10 -a 112 397 10 -a 112 243 5 -a 112 235 2 -a 112 16 2 -a 112 571 8 -a 112 648 8 -a 112 960 4 -a 112 557 2 -a 112 790 7 -a 112 53 3 -a 112 370 9 -a 112 462 6 -a 112 73 1 -a 112 466 2 -a 112 911 5 -a 112 948 3 -a 112 511 5 -a 112 259 3 -a 112 292 1 -a 112 380 10 -a 112 827 7 -a 112 696 3 -a 112 219 3 -a 112 351 1 -a 112 136 3 -a 112 150 10 -a 112 661 10 -a 112 789 6 -a 112 826 9 -a 112 91 4 -a 112 419 7 -a 112 198 4 -a 112 333 6 -a 113 653 8 -a 113 214 1 -a 113 903 3 -a 113 276 9 -a 113 149 4 -a 113 436 3 -a 113 41 4 -a 113 201 8 -a 113 805 6 -a 113 502 2 -a 113 273 1 -a 113 246 9 -a 113 388 7 -a 113 196 5 -a 113 756 5 -a 113 646 3 -a 113 487 4 -a 113 112 6 -a 113 448 8 -a 113 159 4 -a 113 330 7 -a 113 798 3 -a 113 294 2 -a 113 480 7 -a 113 435 10 -a 113 58 10 -a 113 281 10 -a 113 525 8 -a 113 476 3 -a 113 478 6 -a 113 857 8 -a 113 104 4 -a 113 691 2 -a 113 735 2 -a 113 379 6 -a 113 839 5 -a 113 146 7 -a 113 419 4 -a 113 15 9 -a 113 951 1 -a 113 920 5 -a 113 287 10 -a 113 172 10 -a 113 283 3 -a 113 483 4 -a 113 928 10 -a 113 928 1 -a 113 969 9 -a 113 15 4 -a 113 352 5 -a 113 103 10 -a 113 344 5 -a 113 125 10 -a 113 397 7 -a 113 823 2 -a 113 559 6 -a 113 454 3 -a 113 79 1 -a 113 59 8 -a 113 930 1 -a 113 557 1 -a 113 915 5 -a 113 9 3 -a 113 223 8 -a 113 626 10 -a 113 388 3 -a 113 38 6 -a 113 771 9 -a 113 806 3 -a 113 52 4 -a 113 697 2 -a 113 702 8 -a 113 339 3 -a 113 869 4 -a 113 984 6 -a 113 821 4 -a 113 772 10 -a 113 888 4 -a 113 765 6 -a 113 786 7 -a 113 215 1 -a 114 868 8 -a 114 105 6 -a 114 339 10 -a 114 240 8 -a 114 928 8 -a 114 898 7 -a 114 693 9 -a 114 956 5 -a 114 598 9 -a 114 538 2 -a 114 847 5 -a 114 607 9 -a 114 761 8 -a 114 448 1 -a 114 994 6 -a 114 798 4 -a 114 194 3 -a 114 775 4 -a 114 849 10 -a 114 891 5 -a 114 452 1 -a 114 163 10 -a 114 735 10 -a 114 412 6 -a 114 983 4 -a 114 482 2 -a 114 275 5 -a 114 724 8 -a 114 243 5 -a 114 489 9 -a 114 567 6 -a 114 347 5 -a 114 827 7 -a 114 806 7 -a 114 250 3 -a 114 700 8 -a 114 474 2 -a 114 232 7 -a 114 632 5 -a 114 48 5 -a 114 769 6 -a 114 454 9 -a 114 654 2 -a 114 505 6 -a 114 901 2 -a 114 623 8 -a 114 278 1 -a 114 70 8 -a 114 373 8 -a 114 103 4 -a 114 960 7 -a 114 825 1 -a 114 265 9 -a 114 670 7 -a 114 212 6 -a 114 224 6 -a 114 127 9 -a 114 486 7 -a 114 947 10 -a 114 369 3 -a 114 974 4 -a 114 489 7 -a 114 716 9 -a 114 776 7 -a 114 270 8 -a 114 965 8 -a 114 452 5 -a 114 743 4 -a 114 172 10 -a 114 59 3 -a 114 790 5 -a 114 941 2 -a 114 512 6 -a 114 419 2 -a 114 421 6 -a 114 388 8 -a 114 17 4 -a 114 699 4 -a 114 457 8 -a 114 390 5 -a 114 801 10 -a 114 393 2 -a 114 190 1 -a 114 41 6 -a 114 38 8 -a 114 401 8 -a 114 264 4 -a 114 165 1 -a 114 886 8 -a 114 186 2 -a 114 533 2 -a 114 835 9 -a 114 674 8 -a 114 224 10 -a 114 586 5 -a 114 943 2 -a 114 165 1 -a 114 13 8 -a 114 662 4 -a 114 336 3 -a 114 71 3 -a 114 427 7 -a 115 252 9 -a 115 582 1 -a 115 846 4 -a 115 673 4 -a 115 969 5 -a 115 862 2 -a 115 347 4 -a 115 402 4 -a 115 227 7 -a 115 123 5 -a 115 794 1 -a 115 416 5 -a 115 163 3 -a 115 831 8 -a 115 816 6 -a 115 427 6 -a 115 995 4 -a 115 677 7 -a 115 612 4 -a 115 504 10 -a 115 487 4 -a 115 262 2 -a 115 727 9 -a 115 49 8 -a 115 180 7 -a 115 891 9 -a 115 61 1 -a 115 841 7 -a 115 203 8 -a 115 132 4 -a 115 244 7 -a 115 454 5 -a 115 713 1 -a 115 65 5 -a 115 102 2 -a 115 658 3 -a 115 926 3 -a 115 448 7 -a 115 35 10 -a 115 129 1 -a 115 570 2 -a 115 828 1 -a 115 544 3 -a 115 733 8 -a 115 634 7 -a 115 336 3 -a 115 135 1 -a 115 605 9 -a 115 746 10 -a 115 84 9 -a 115 475 9 -a 115 810 10 -a 115 523 2 -a 115 163 4 -a 115 677 6 -a 115 583 1 -a 115 879 3 -a 115 714 9 -a 115 222 10 -a 115 308 4 -a 115 403 7 -a 115 286 3 -a 115 410 7 -a 115 36 4 -a 115 188 7 -a 115 857 7 -a 115 70 1 -a 115 316 10 -a 115 403 1 -a 115 897 9 -a 115 859 8 -a 115 111 9 -a 115 506 2 -a 115 170 4 -a 115 245 4 -a 115 86 5 -a 115 158 7 -a 115 990 9 -a 115 169 3 -a 115 632 5 -a 115 973 4 -a 115 979 3 -a 115 130 8 -a 115 111 9 -a 115 631 3 -a 115 712 3 -a 115 89 7 -a 115 485 6 -a 115 402 6 -a 115 311 6 -a 115 792 6 -a 115 804 6 -a 115 596 7 -a 115 177 10 -a 115 839 1 -a 115 783 8 -a 115 10 3 -a 115 908 1 -a 115 74 3 -a 115 412 7 -a 115 780 4 -a 115 933 1 -a 115 522 3 -a 115 261 7 -a 115 78 8 -a 115 766 3 -a 115 347 10 -a 115 235 5 -a 115 731 3 -a 115 515 3 -a 115 866 6 -a 115 679 8 -a 115 469 8 -a 115 995 5 -a 116 789 5 -a 116 75 3 -a 116 683 5 -a 116 878 3 -a 116 559 2 -a 116 60 3 -a 116 164 5 -a 116 327 7 -a 116 863 7 -a 116 759 5 -a 116 503 9 -a 116 677 5 -a 116 518 9 -a 116 512 5 -a 116 560 2 -a 116 591 10 -a 116 923 9 -a 116 315 3 -a 116 499 6 -a 116 420 7 -a 116 575 8 -a 116 577 10 -a 116 161 10 -a 116 921 7 -a 116 811 6 -a 116 892 1 -a 116 412 7 -a 116 653 4 -a 116 546 5 -a 116 880 3 -a 116 623 3 -a 116 311 5 -a 116 955 7 -a 116 281 7 -a 116 164 2 -a 116 489 8 -a 116 340 5 -a 116 327 1 -a 116 815 5 -a 116 178 7 -a 116 61 8 -a 116 294 4 -a 116 854 2 -a 116 578 6 -a 116 805 2 -a 116 389 2 -a 116 145 8 -a 116 704 7 -a 116 703 9 -a 116 643 6 -a 116 99 6 -a 116 254 8 -a 116 195 7 -a 116 260 5 -a 116 150 8 -a 116 127 9 -a 116 561 2 -a 116 634 8 -a 116 672 6 -a 116 417 5 -a 116 232 5 -a 116 982 5 -a 116 347 1 -a 116 513 2 -a 116 121 3 -a 116 835 9 -a 116 852 5 -a 116 447 4 -a 116 626 4 -a 116 6 10 -a 116 508 3 -a 116 919 5 -a 116 859 5 -a 116 61 2 -a 116 699 10 -a 116 224 7 -a 116 205 4 -a 116 378 6 -a 116 926 8 -a 116 848 10 -a 116 477 8 -a 116 155 8 -a 116 18 4 -a 116 736 8 -a 116 305 5 -a 116 862 2 -a 116 865 9 -a 116 632 1 -a 116 509 6 -a 116 257 7 -a 116 864 5 -a 116 467 8 -a 116 603 1 -a 116 352 4 -a 116 587 4 -a 116 414 9 -a 116 179 10 -a 116 10 5 -a 116 15 3 -a 116 184 3 -a 116 517 2 -a 116 933 6 -a 117 19 7 -a 117 577 3 -a 117 607 7 -a 117 242 8 -a 117 782 5 -a 117 985 7 -a 117 143 5 -a 117 605 5 -a 117 437 9 -a 117 298 4 -a 117 622 9 -a 117 148 3 -a 117 602 1 -a 117 621 10 -a 117 442 7 -a 117 228 2 -a 117 493 2 -a 117 699 7 -a 117 67 3 -a 117 959 7 -a 117 277 3 -a 117 418 10 -a 117 522 10 -a 117 690 6 -a 117 597 6 -a 117 531 5 -a 117 704 2 -a 117 780 10 -a 117 23 9 -a 117 612 10 -a 117 798 8 -a 117 599 2 -a 117 195 10 -a 117 15 5 -a 117 356 6 -a 117 155 4 -a 117 158 4 -a 117 960 2 -a 117 591 5 -a 117 455 5 -a 117 558 8 -a 117 738 7 -a 117 32 4 -a 117 154 7 -a 117 722 3 -a 117 473 6 -a 117 381 8 -a 117 190 5 -a 117 147 3 -a 117 448 1 -a 117 125 4 -a 117 424 6 -a 117 865 9 -a 117 646 4 -a 117 89 7 -a 117 437 6 -a 117 152 7 -a 117 793 2 -a 117 193 2 -a 117 174 8 -a 117 380 2 -a 117 990 8 -a 117 772 4 -a 117 574 2 -a 117 104 8 -a 117 728 2 -a 117 138 4 -a 117 39 10 -a 117 294 9 -a 117 592 8 -a 117 596 9 -a 117 7 2 -a 117 623 5 -a 117 749 6 -a 117 728 9 -a 117 71 6 -a 117 106 7 -a 117 918 7 -a 117 218 2 -a 117 553 8 -a 117 18 10 -a 117 641 8 -a 117 393 7 -a 117 663 7 -a 117 729 9 -a 117 830 6 -a 117 814 9 -a 117 497 10 -a 117 987 4 -a 117 877 9 -a 117 987 2 -a 117 734 1 -a 117 426 6 -a 117 967 1 -a 117 837 9 -a 117 130 1 -a 117 80 7 -a 117 876 6 -a 117 423 5 -a 117 671 2 -a 117 447 7 -a 118 430 5 -a 118 269 3 -a 118 172 6 -a 118 133 6 -a 118 340 3 -a 118 277 6 -a 118 26 4 -a 118 557 9 -a 118 829 10 -a 118 43 1 -a 118 173 7 -a 118 197 6 -a 118 705 5 -a 118 901 4 -a 118 2 2 -a 118 494 8 -a 118 374 8 -a 118 456 3 -a 118 226 1 -a 118 986 2 -a 118 166 2 -a 118 651 1 -a 118 928 10 -a 118 780 10 -a 118 853 3 -a 118 179 6 -a 118 654 9 -a 118 276 7 -a 118 608 3 -a 118 923 8 -a 118 447 4 -a 118 740 6 -a 118 238 6 -a 118 723 3 -a 118 766 4 -a 118 794 6 -a 118 527 5 -a 118 808 1 -a 118 966 5 -a 118 723 7 -a 118 489 1 -a 118 842 3 -a 118 725 10 -a 118 982 6 -a 118 191 2 -a 118 723 4 -a 118 414 6 -a 118 416 8 -a 118 684 10 -a 118 579 8 -a 118 43 7 -a 118 588 1 -a 118 556 1 -a 118 822 1 -a 118 571 4 -a 118 385 6 -a 118 1000 8 -a 118 200 1 -a 118 660 8 -a 118 583 1 -a 118 98 8 -a 118 82 9 -a 118 299 3 -a 118 335 1 -a 118 804 3 -a 118 40 4 -a 118 104 5 -a 118 306 5 -a 118 847 2 -a 118 45 5 -a 118 4 3 -a 118 311 9 -a 118 887 2 -a 118 728 1 -a 118 269 2 -a 118 53 7 -a 118 427 7 -a 118 682 4 -a 118 469 9 -a 118 86 1 -a 118 236 7 -a 118 511 4 -a 118 673 5 -a 118 791 5 -a 118 308 9 -a 118 219 9 -a 118 151 2 -a 118 284 10 -a 118 419 4 -a 118 810 7 -a 118 866 10 -a 118 516 5 -a 118 891 4 -a 118 140 2 -a 118 851 3 -a 118 670 1 -a 118 179 7 -a 118 954 8 -a 118 975 7 -a 118 2 6 -a 118 999 10 -a 118 979 3 -a 118 312 7 -a 118 861 3 -a 118 682 9 -a 119 580 8 -a 119 913 5 -a 119 84 10 -a 119 237 3 -a 119 357 4 -a 119 170 7 -a 119 472 2 -a 119 867 8 -a 119 842 8 -a 119 239 3 -a 119 151 6 -a 119 37 9 -a 119 389 4 -a 119 434 8 -a 119 455 3 -a 119 175 6 -a 119 275 5 -a 119 970 1 -a 119 41 7 -a 119 415 5 -a 119 796 7 -a 119 711 10 -a 119 593 1 -a 119 726 4 -a 119 661 10 -a 119 594 7 -a 119 700 8 -a 119 615 7 -a 119 906 4 -a 119 536 5 -a 119 273 6 -a 119 461 7 -a 119 424 10 -a 119 356 4 -a 119 698 1 -a 119 781 3 -a 119 525 9 -a 119 145 5 -a 119 623 3 -a 119 343 4 -a 119 383 1 -a 119 773 3 -a 119 379 10 -a 119 772 3 -a 119 182 5 -a 119 833 2 -a 119 946 3 -a 119 457 4 -a 119 778 10 -a 119 986 3 -a 119 871 1 -a 119 550 9 -a 119 672 7 -a 119 439 4 -a 119 251 7 -a 119 309 4 -a 119 9 7 -a 119 950 7 -a 119 923 7 -a 119 914 9 -a 119 461 5 -a 119 171 9 -a 119 350 8 -a 119 884 8 -a 119 527 2 -a 119 23 10 -a 119 640 6 -a 119 27 9 -a 119 168 2 -a 119 239 7 -a 119 369 1 -a 119 550 7 -a 119 747 9 -a 119 297 6 -a 119 169 10 -a 119 555 9 -a 119 218 7 -a 119 625 5 -a 119 309 8 -a 119 180 2 -a 119 471 9 -a 119 858 4 -a 119 851 2 -a 119 909 2 -a 119 84 8 -a 119 135 8 -a 119 917 2 -a 119 9 4 -a 119 34 5 -a 119 806 5 -a 119 469 3 -a 119 204 4 -a 119 132 7 -a 119 328 5 -a 119 730 3 -a 119 154 1 -a 119 968 3 -a 119 757 9 -a 119 321 3 -a 119 182 4 -a 119 101 2 -a 119 871 2 -a 119 168 2 -a 119 848 1 -a 119 143 6 -a 119 336 2 -a 119 378 4 -a 120 361 8 -a 120 960 2 -a 120 686 7 -a 120 540 6 -a 120 406 4 -a 120 519 3 -a 120 366 7 -a 120 291 4 -a 120 602 6 -a 120 501 8 -a 120 183 1 -a 120 610 7 -a 120 534 8 -a 120 989 3 -a 120 54 10 -a 120 737 6 -a 120 96 9 -a 120 382 8 -a 120 443 10 -a 120 249 10 -a 120 325 7 -a 120 175 3 -a 120 570 2 -a 120 506 10 -a 120 275 9 -a 120 416 6 -a 120 673 3 -a 120 98 3 -a 120 558 5 -a 120 476 2 -a 120 918 7 -a 120 944 3 -a 120 137 7 -a 120 433 4 -a 120 326 5 -a 120 656 6 -a 120 799 4 -a 120 616 10 -a 120 233 3 -a 120 275 3 -a 120 798 9 -a 120 843 8 -a 120 808 1 -a 120 762 3 -a 120 896 3 -a 120 520 5 -a 120 857 10 -a 120 253 2 -a 120 962 6 -a 120 82 6 -a 120 577 7 -a 120 112 2 -a 120 651 9 -a 120 58 10 -a 120 387 4 -a 120 42 1 -a 120 731 5 -a 120 484 2 -a 120 599 8 -a 120 715 5 -a 120 959 7 -a 120 493 1 -a 120 634 5 -a 120 72 10 -a 120 925 10 -a 120 959 4 -a 120 727 5 -a 120 699 1 -a 120 550 10 -a 120 959 7 -a 120 973 10 -a 120 324 8 -a 120 777 3 -a 120 756 6 -a 120 61 10 -a 120 649 1 -a 120 252 10 -a 120 918 6 -a 120 901 7 -a 120 189 6 -a 120 999 3 -a 120 454 7 -a 120 301 4 -a 120 625 2 -a 120 511 1 -a 120 687 9 -a 120 666 9 -a 120 217 2 -a 120 146 2 -a 120 240 6 -a 120 931 4 -a 120 81 7 -a 120 732 3 -a 120 541 5 -a 120 152 2 -a 120 633 10 -a 120 475 3 -a 120 878 4 -a 120 307 8 -a 121 1 3 -a 121 812 10 -a 121 256 4 -a 121 324 5 -a 121 565 9 -a 121 384 7 -a 121 189 4 -a 121 238 8 -a 121 277 1 -a 121 65 1 -a 121 427 7 -a 121 251 3 -a 121 518 6 -a 121 727 4 -a 121 875 3 -a 121 5 4 -a 121 389 7 -a 121 516 3 -a 121 221 9 -a 121 534 3 -a 121 756 1 -a 121 128 3 -a 121 614 1 -a 121 463 8 -a 121 668 6 -a 121 765 7 -a 121 71 7 -a 121 118 7 -a 121 618 1 -a 121 378 9 -a 121 118 10 -a 121 406 5 -a 121 633 7 -a 121 441 3 -a 121 970 6 -a 121 619 9 -a 121 825 9 -a 121 134 8 -a 121 857 8 -a 121 77 3 -a 121 198 10 -a 121 259 9 -a 121 328 9 -a 121 716 4 -a 121 985 5 -a 121 178 8 -a 121 720 4 -a 121 349 9 -a 121 694 5 -a 121 940 3 -a 121 882 4 -a 121 425 4 -a 121 43 5 -a 121 472 9 -a 121 887 1 -a 121 710 8 -a 121 212 10 -a 121 958 3 -a 121 828 9 -a 121 830 1 -a 121 311 3 -a 121 945 10 -a 121 211 8 -a 121 943 6 -a 121 362 8 -a 121 156 7 -a 121 537 10 -a 121 162 1 -a 121 289 9 -a 121 369 2 -a 121 238 9 -a 121 486 7 -a 121 627 9 -a 121 565 2 -a 121 177 1 -a 121 587 10 -a 121 743 5 -a 121 896 5 -a 121 935 4 -a 121 412 3 -a 121 812 7 -a 121 793 3 -a 121 836 6 -a 121 854 4 -a 121 240 4 -a 121 698 3 -a 121 540 2 -a 121 451 3 -a 121 631 6 -a 121 343 4 -a 121 256 2 -a 121 941 9 -a 121 263 4 -a 121 466 3 -a 121 859 9 -a 121 624 6 -a 121 621 10 -a 121 372 6 -a 121 785 10 -a 121 909 9 -a 121 740 5 -a 121 371 5 -a 121 343 10 -a 121 563 2 -a 122 547 10 -a 122 929 6 -a 122 281 5 -a 122 419 8 -a 122 840 2 -a 122 692 10 -a 122 206 7 -a 122 608 1 -a 122 503 5 -a 122 35 2 -a 122 847 2 -a 122 177 5 -a 122 574 4 -a 122 273 5 -a 122 807 4 -a 122 916 10 -a 122 529 5 -a 122 724 3 -a 122 155 10 -a 122 994 2 -a 122 558 7 -a 122 778 3 -a 122 591 5 -a 122 929 8 -a 122 539 1 -a 122 475 3 -a 122 645 9 -a 122 537 1 -a 122 845 4 -a 122 987 4 -a 122 75 2 -a 122 368 7 -a 122 891 3 -a 122 356 3 -a 122 786 7 -a 122 706 4 -a 122 23 10 -a 122 991 5 -a 122 289 7 -a 122 526 8 -a 122 1 7 -a 122 111 8 -a 122 702 10 -a 122 575 5 -a 122 384 6 -a 122 484 4 -a 122 466 6 -a 122 912 8 -a 122 183 7 -a 122 620 9 -a 122 881 9 -a 122 741 4 -a 122 374 1 -a 122 447 2 -a 122 645 10 -a 122 912 5 -a 122 922 3 -a 122 265 9 -a 122 424 3 -a 122 742 3 -a 122 227 7 -a 122 498 4 -a 122 85 5 -a 122 94 8 -a 122 853 4 -a 122 870 9 -a 122 799 6 -a 122 876 1 -a 122 836 1 -a 122 64 2 -a 122 377 3 -a 122 837 5 -a 122 174 7 -a 122 54 8 -a 122 387 1 -a 122 557 9 -a 122 537 7 -a 122 852 6 -a 122 444 5 -a 122 720 3 -a 122 448 1 -a 122 301 8 -a 122 436 5 -a 122 821 3 -a 122 747 3 -a 122 56 10 -a 122 708 8 -a 122 644 5 -a 122 321 7 -a 122 107 5 -a 122 362 6 -a 122 547 2 -a 122 604 8 -a 122 446 6 -a 122 640 6 -a 122 433 5 -a 122 292 6 -a 122 415 5 -a 122 284 2 -a 122 103 10 -a 122 478 4 -a 122 660 10 -a 122 939 7 -a 122 651 4 -a 122 713 6 -a 122 301 6 -a 123 184 1 -a 123 225 7 -a 123 129 10 -a 123 627 1 -a 123 944 1 -a 123 576 9 -a 123 927 6 -a 123 355 2 -a 123 372 1 -a 123 650 4 -a 123 411 6 -a 123 55 5 -a 123 269 9 -a 123 731 9 -a 123 161 1 -a 123 630 6 -a 123 253 7 -a 123 764 1 -a 123 52 6 -a 123 893 6 -a 123 172 1 -a 123 343 7 -a 123 283 8 -a 123 455 9 -a 123 445 4 -a 123 760 4 -a 123 90 5 -a 123 360 4 -a 123 386 10 -a 123 802 5 -a 123 660 9 -a 123 569 9 -a 123 3 1 -a 123 788 10 -a 123 172 8 -a 123 946 6 -a 123 339 8 -a 123 74 5 -a 123 277 9 -a 123 710 7 -a 123 723 3 -a 123 687 4 -a 123 764 4 -a 123 992 6 -a 123 393 3 -a 123 924 2 -a 123 597 9 -a 123 645 6 -a 123 664 3 -a 123 648 8 -a 123 513 4 -a 123 835 8 -a 123 990 6 -a 123 795 8 -a 123 266 6 -a 123 411 2 -a 123 530 9 -a 123 355 10 -a 123 770 1 -a 123 916 6 -a 123 133 3 -a 123 405 5 -a 123 460 4 -a 123 135 10 -a 123 169 2 -a 123 631 9 -a 123 56 4 -a 123 507 4 -a 123 705 1 -a 123 332 6 -a 123 193 3 -a 123 403 6 -a 123 956 3 -a 123 370 4 -a 123 386 4 -a 123 856 3 -a 123 967 9 -a 123 7 2 -a 123 495 9 -a 123 590 1 -a 123 519 7 -a 123 305 6 -a 123 556 4 -a 123 290 9 -a 123 570 7 -a 123 966 4 -a 124 819 4 -a 124 925 3 -a 124 711 2 -a 124 710 5 -a 124 33 5 -a 124 91 3 -a 124 146 6 -a 124 167 8 -a 124 259 10 -a 124 776 3 -a 124 222 9 -a 124 766 6 -a 124 456 7 -a 124 554 8 -a 124 958 8 -a 124 859 6 -a 124 547 9 -a 124 889 7 -a 124 204 4 -a 124 933 6 -a 124 720 3 -a 124 146 9 -a 124 939 4 -a 124 190 8 -a 124 736 9 -a 124 433 5 -a 124 495 8 -a 124 267 5 -a 124 722 8 -a 124 40 1 -a 124 208 7 -a 124 517 6 -a 124 964 4 -a 124 918 5 -a 124 202 2 -a 124 996 9 -a 124 347 8 -a 124 138 5 -a 124 243 10 -a 124 99 5 -a 124 360 5 -a 124 554 7 -a 124 913 8 -a 124 941 2 -a 124 388 5 -a 124 435 9 -a 124 805 3 -a 124 592 4 -a 124 343 1 -a 124 501 7 -a 124 737 8 -a 124 257 7 -a 124 690 1 -a 124 448 4 -a 124 690 1 -a 124 160 4 -a 124 714 8 -a 124 387 2 -a 124 200 4 -a 124 921 9 -a 124 903 1 -a 124 139 3 -a 124 814 5 -a 124 81 8 -a 124 111 3 -a 124 798 9 -a 124 427 6 -a 124 248 7 -a 124 16 1 -a 124 525 8 -a 124 607 10 -a 124 55 7 -a 124 495 5 -a 124 939 5 -a 124 442 3 -a 124 930 8 -a 124 719 3 -a 124 9 4 -a 124 248 4 -a 124 195 3 -a 124 746 5 -a 124 505 6 -a 124 885 5 -a 124 169 3 -a 125 170 10 -a 125 20 2 -a 125 883 7 -a 125 556 1 -a 125 219 3 -a 125 779 3 -a 125 435 2 -a 125 358 2 -a 125 569 7 -a 125 515 1 -a 125 468 4 -a 125 342 2 -a 125 941 3 -a 125 715 4 -a 125 357 5 -a 125 442 3 -a 125 298 9 -a 125 355 2 -a 125 496 7 -a 125 792 2 -a 125 269 7 -a 125 937 9 -a 125 697 3 -a 125 987 6 -a 125 946 1 -a 125 945 5 -a 125 158 10 -a 125 667 1 -a 125 425 3 -a 125 18 3 -a 125 835 4 -a 125 594 9 -a 125 37 4 -a 125 693 3 -a 125 125 3 -a 125 256 10 -a 125 448 7 -a 125 559 9 -a 125 613 8 -a 125 49 2 -a 125 56 1 -a 125 333 8 -a 125 990 7 -a 125 770 4 -a 125 689 5 -a 125 407 4 -a 125 43 2 -a 125 19 4 -a 125 902 4 -a 125 835 9 -a 125 287 6 -a 125 814 7 -a 125 507 5 -a 125 249 10 -a 125 735 5 -a 125 427 9 -a 125 406 7 -a 125 377 2 -a 125 851 2 -a 125 423 5 -a 125 188 10 -a 125 420 10 -a 125 460 5 -a 125 880 4 -a 125 545 2 -a 125 715 8 -a 125 303 3 -a 125 79 6 -a 125 303 3 -a 125 294 6 -a 125 128 9 -a 125 358 3 -a 125 626 7 -a 125 93 5 -a 125 103 7 -a 125 290 1 -a 125 499 2 -a 125 146 1 -a 125 308 5 -a 125 376 10 -a 125 980 6 -a 125 594 2 -a 125 165 8 -a 126 462 9 -a 126 843 5 -a 126 900 3 -a 126 889 8 -a 126 224 1 -a 126 252 9 -a 126 715 8 -a 126 647 9 -a 126 439 9 -a 126 111 8 -a 126 82 5 -a 126 295 9 -a 126 655 6 -a 126 796 9 -a 126 597 2 -a 126 733 1 -a 126 74 7 -a 126 891 2 -a 126 860 4 -a 126 431 8 -a 126 492 7 -a 126 952 7 -a 126 533 10 -a 126 782 1 -a 126 426 7 -a 126 678 1 -a 126 65 1 -a 126 801 8 -a 126 633 8 -a 126 659 9 -a 126 966 4 -a 126 71 2 -a 126 477 4 -a 126 841 3 -a 126 959 4 -a 126 700 3 -a 126 68 2 -a 126 649 2 -a 126 322 4 -a 126 507 5 -a 126 759 3 -a 126 403 7 -a 126 801 6 -a 126 389 9 -a 126 174 3 -a 126 373 9 -a 126 98 9 -a 126 247 9 -a 126 239 8 -a 126 957 6 -a 126 677 5 -a 126 731 6 -a 126 885 9 -a 126 186 5 -a 126 488 1 -a 126 286 3 -a 126 863 8 -a 126 552 3 -a 126 63 4 -a 126 472 2 -a 126 186 9 -a 126 4 10 -a 126 542 1 -a 126 662 7 -a 126 844 4 -a 126 476 2 -a 126 338 5 -a 126 911 10 -a 126 100 4 -a 126 659 5 -a 126 393 2 -a 126 859 9 -a 126 38 9 -a 126 169 6 -a 126 223 7 -a 126 211 4 -a 126 542 5 -a 126 320 2 -a 126 458 7 -a 126 780 2 -a 126 253 8 -a 126 110 10 -a 126 486 6 -a 126 113 9 -a 126 295 5 -a 126 973 5 -a 126 398 8 -a 126 134 6 -a 126 501 3 -a 126 460 3 -a 126 605 6 -a 126 686 7 -a 126 463 5 -a 126 122 2 -a 126 324 9 -a 126 282 7 -a 126 597 5 -a 126 661 3 -a 126 169 7 -a 126 696 10 -a 126 295 10 -a 126 561 2 -a 127 530 4 -a 127 332 3 -a 127 730 8 -a 127 753 3 -a 127 543 7 -a 127 247 8 -a 127 48 4 -a 127 1000 6 -a 127 2 6 -a 127 300 3 -a 127 85 5 -a 127 488 2 -a 127 412 8 -a 127 380 3 -a 127 436 7 -a 127 810 1 -a 127 513 6 -a 127 936 7 -a 127 245 1 -a 127 93 5 -a 127 598 9 -a 127 708 4 -a 127 214 7 -a 127 921 8 -a 127 989 10 -a 127 810 5 -a 127 557 2 -a 127 133 10 -a 127 481 7 -a 127 851 2 -a 127 694 8 -a 127 159 9 -a 127 399 8 -a 127 739 4 -a 127 701 9 -a 127 645 3 -a 127 786 5 -a 127 676 6 -a 127 646 3 -a 127 62 5 -a 127 760 6 -a 127 109 1 -a 127 473 3 -a 127 115 7 -a 127 545 10 -a 127 258 1 -a 127 627 7 -a 127 456 3 -a 127 503 8 -a 127 719 10 -a 127 29 1 -a 127 186 5 -a 127 932 1 -a 127 949 2 -a 127 150 3 -a 127 717 4 -a 127 481 2 -a 127 283 8 -a 127 174 1 -a 127 308 1 -a 127 976 7 -a 127 160 9 -a 127 466 5 -a 127 350 4 -a 127 898 8 -a 127 142 3 -a 127 994 3 -a 127 659 1 -a 127 817 6 -a 127 615 2 -a 127 720 5 -a 127 552 10 -a 127 724 5 -a 127 169 4 -a 127 667 6 -a 127 244 10 -a 127 426 5 -a 127 269 5 -a 127 699 2 -a 127 928 1 -a 127 988 7 -a 127 728 2 -a 127 89 1 -a 127 895 4 -a 127 652 1 -a 127 239 2 -a 127 588 10 -a 127 109 3 -a 127 521 6 -a 127 761 9 -a 127 416 6 -a 127 472 7 -a 127 920 4 -a 127 881 5 -a 128 821 8 -a 128 793 3 -a 128 790 10 -a 128 427 8 -a 128 814 3 -a 128 380 5 -a 128 123 8 -a 128 341 9 -a 128 79 8 -a 128 291 8 -a 128 322 3 -a 128 716 6 -a 128 252 3 -a 128 620 5 -a 128 215 6 -a 128 724 10 -a 128 708 1 -a 128 85 9 -a 128 351 1 -a 128 946 8 -a 128 672 10 -a 128 459 8 -a 128 442 3 -a 128 408 5 -a 128 874 4 -a 128 913 3 -a 128 303 10 -a 128 730 2 -a 128 709 2 -a 128 71 7 -a 128 727 9 -a 128 474 6 -a 128 498 7 -a 128 516 1 -a 128 854 4 -a 128 620 4 -a 128 857 4 -a 128 932 6 -a 128 910 6 -a 128 839 10 -a 128 230 2 -a 128 601 2 -a 128 66 5 -a 128 226 7 -a 128 196 4 -a 128 280 5 -a 128 949 1 -a 128 904 7 -a 128 365 8 -a 128 275 9 -a 128 825 3 -a 128 12 6 -a 128 734 4 -a 128 243 2 -a 128 420 10 -a 128 583 5 -a 128 131 5 -a 128 722 1 -a 128 289 8 -a 128 840 8 -a 128 793 3 -a 128 289 4 -a 128 266 9 -a 128 507 7 -a 128 118 10 -a 128 885 6 -a 128 339 9 -a 128 26 5 -a 128 770 3 -a 128 153 10 -a 128 255 8 -a 128 346 7 -a 128 219 6 -a 128 480 7 -a 128 542 5 -a 128 498 10 -a 128 404 10 -a 128 421 9 -a 128 862 4 -a 128 678 10 -a 128 221 1 -a 128 874 4 -a 128 387 3 -a 128 463 3 -a 128 269 8 -a 128 970 5 -a 128 594 7 -a 128 990 7 -a 128 234 3 -a 128 409 8 -a 128 758 8 -a 128 224 9 -a 128 697 8 -a 128 730 6 -a 128 815 2 -a 128 883 9 -a 128 44 3 -a 128 840 7 -a 128 628 3 -a 129 197 5 -a 129 70 9 -a 129 974 2 -a 129 415 3 -a 129 549 9 -a 129 491 9 -a 129 912 2 -a 129 952 9 -a 129 911 4 -a 129 750 2 -a 129 605 5 -a 129 107 1 -a 129 599 7 -a 129 992 6 -a 129 570 6 -a 129 867 9 -a 129 937 5 -a 129 139 4 -a 129 832 5 -a 129 146 10 -a 129 547 7 -a 129 566 4 -a 129 369 3 -a 129 219 6 -a 129 564 5 -a 129 75 2 -a 129 9 8 -a 129 423 2 -a 129 118 1 -a 129 848 10 -a 129 26 9 -a 129 314 4 -a 129 917 5 -a 129 999 10 -a 129 728 3 -a 129 441 1 -a 129 465 8 -a 129 616 6 -a 129 368 9 -a 129 351 3 -a 129 341 1 -a 129 973 3 -a 129 458 5 -a 129 939 7 -a 129 940 6 -a 129 3 7 -a 129 781 9 -a 129 852 4 -a 129 141 5 -a 129 588 4 -a 129 997 6 -a 129 687 3 -a 129 129 9 -a 129 341 7 -a 129 905 1 -a 129 693 1 -a 129 415 8 -a 129 914 1 -a 129 91 9 -a 129 533 4 -a 129 737 3 -a 129 116 4 -a 129 846 4 -a 129 630 5 -a 129 91 8 -a 129 550 10 -a 129 46 6 -a 129 555 5 -a 129 141 7 -a 129 414 9 -a 129 906 5 -a 129 481 7 -a 129 362 10 -a 129 339 5 -a 129 395 10 -a 129 277 1 -a 129 341 5 -a 129 151 4 -a 129 104 3 -a 129 481 8 -a 129 738 7 -a 129 76 7 -a 129 143 1 -a 129 867 1 -a 129 416 6 -a 129 23 5 -a 129 535 4 -a 129 831 5 -a 129 936 9 -a 129 625 9 -a 129 339 6 -a 129 649 4 -a 129 740 8 -a 129 160 8 -a 129 254 10 -a 129 830 8 -a 129 709 4 -a 129 299 10 -a 129 361 7 -a 129 849 9 -a 129 712 9 -a 129 242 4 -a 129 305 4 -a 129 49 9 -a 129 580 5 -a 129 699 6 -a 129 325 9 -a 129 920 1 -a 129 849 7 -a 129 428 7 -a 129 376 10 -a 130 563 7 -a 130 503 6 -a 130 518 1 -a 130 405 8 -a 130 919 1 -a 130 540 9 -a 130 939 9 -a 130 725 6 -a 130 452 7 -a 130 539 9 -a 130 39 9 -a 130 76 6 -a 130 254 7 -a 130 198 6 -a 130 329 3 -a 130 60 5 -a 130 907 10 -a 130 627 1 -a 130 420 2 -a 130 731 8 -a 130 315 2 -a 130 661 3 -a 130 12 4 -a 130 363 8 -a 130 216 10 -a 130 710 7 -a 130 688 4 -a 130 111 7 -a 130 535 4 -a 130 91 2 -a 130 486 9 -a 130 73 9 -a 130 594 8 -a 130 477 2 -a 130 488 3 -a 130 518 2 -a 130 391 1 -a 130 188 4 -a 130 969 7 -a 130 929 6 -a 130 226 3 -a 130 20 7 -a 130 158 6 -a 130 423 2 -a 130 348 4 -a 130 217 2 -a 130 305 2 -a 130 975 9 -a 130 636 4 -a 130 12 10 -a 130 265 6 -a 130 272 9 -a 130 23 10 -a 130 627 5 -a 130 487 2 -a 130 732 3 -a 130 290 6 -a 130 597 2 -a 130 242 1 -a 130 381 9 -a 130 58 5 -a 130 314 10 -a 130 974 7 -a 130 36 6 -a 130 790 9 -a 130 437 9 -a 130 554 8 -a 130 156 8 -a 130 624 8 -a 130 498 6 -a 130 60 4 -a 130 849 1 -a 130 518 5 -a 130 218 3 -a 130 247 2 -a 130 865 8 -a 130 434 9 -a 130 552 4 -a 130 815 1 -a 130 46 9 -a 130 563 10 -a 130 55 2 -a 130 317 1 -a 130 585 5 -a 130 682 9 -a 130 804 6 -a 130 292 1 -a 130 971 7 -a 130 376 6 -a 130 534 9 -a 130 327 1 -a 130 434 8 -a 130 847 4 -a 130 276 8 -a 130 469 1 -a 130 613 10 -a 130 712 9 -a 130 768 9 -a 130 311 8 -a 130 496 9 -a 130 828 4 -a 130 135 2 -a 130 21 5 -a 130 382 9 -a 130 853 6 -a 130 454 9 -a 130 933 3 -a 130 644 3 -a 130 499 10 -a 130 471 4 -a 130 698 8 -a 130 816 2 -a 130 31 5 -a 130 355 5 -a 130 595 4 -a 130 322 7 -a 130 302 6 -a 131 970 3 -a 131 855 6 -a 131 628 7 -a 131 379 5 -a 131 678 10 -a 131 904 4 -a 131 848 2 -a 131 266 3 -a 131 591 4 -a 131 845 2 -a 131 9 2 -a 131 902 4 -a 131 316 9 -a 131 836 5 -a 131 12 10 -a 131 304 9 -a 131 856 1 -a 131 393 4 -a 131 133 10 -a 131 286 6 -a 131 301 5 -a 131 776 2 -a 131 784 10 -a 131 771 2 -a 131 449 6 -a 131 575 3 -a 131 801 3 -a 131 804 9 -a 131 145 2 -a 131 99 5 -a 131 81 3 -a 131 91 4 -a 131 953 6 -a 131 708 2 -a 131 469 1 -a 131 606 6 -a 131 587 10 -a 131 292 4 -a 131 871 6 -a 131 154 7 -a 131 113 10 -a 131 880 10 -a 131 31 7 -a 131 428 4 -a 131 691 1 -a 131 42 1 -a 131 732 2 -a 131 523 5 -a 131 435 7 -a 131 864 4 -a 131 808 8 -a 131 735 4 -a 131 615 9 -a 131 567 4 -a 131 482 5 -a 131 39 10 -a 131 118 10 -a 131 258 4 -a 131 842 4 -a 131 262 4 -a 131 356 2 -a 131 922 8 -a 131 352 5 -a 131 285 8 -a 131 606 10 -a 131 821 6 -a 131 890 10 -a 131 168 6 -a 131 88 10 -a 131 737 10 -a 131 321 2 -a 131 200 3 -a 131 592 7 -a 131 351 5 -a 131 628 7 -a 131 258 5 -a 131 393 3 -a 131 335 8 -a 131 780 1 -a 131 827 9 -a 131 174 8 -a 131 563 8 -a 131 537 8 -a 131 788 8 -a 131 106 1 -a 131 826 5 -a 131 223 6 -a 131 252 10 -a 131 644 5 -a 131 484 4 -a 131 607 3 -a 132 541 5 -a 132 836 1 -a 132 891 9 -a 132 122 9 -a 132 632 7 -a 132 757 8 -a 132 290 7 -a 132 719 10 -a 132 469 1 -a 132 610 2 -a 132 919 2 -a 132 36 9 -a 132 961 2 -a 132 522 5 -a 132 293 1 -a 132 329 4 -a 132 856 10 -a 132 49 8 -a 132 131 1 -a 132 5 6 -a 132 611 1 -a 132 667 5 -a 132 792 6 -a 132 716 9 -a 132 661 3 -a 132 593 7 -a 132 938 10 -a 132 912 3 -a 132 212 8 -a 132 398 4 -a 132 494 2 -a 132 753 5 -a 132 209 9 -a 132 361 3 -a 132 874 3 -a 132 840 8 -a 132 93 3 -a 132 139 7 -a 132 534 8 -a 132 561 6 -a 132 749 1 -a 132 428 2 -a 132 596 3 -a 132 685 8 -a 132 949 1 -a 132 888 3 -a 132 780 1 -a 132 936 7 -a 132 119 2 -a 132 784 10 -a 132 523 4 -a 132 785 9 -a 132 551 6 -a 132 214 4 -a 132 421 2 -a 132 120 9 -a 132 128 5 -a 132 308 8 -a 132 331 10 -a 132 525 8 -a 132 802 1 -a 132 59 2 -a 132 733 7 -a 132 138 2 -a 132 933 1 -a 132 548 9 -a 132 230 10 -a 132 47 1 -a 132 57 6 -a 132 790 1 -a 132 795 2 -a 132 485 8 -a 132 361 10 -a 132 455 5 -a 132 409 5 -a 132 224 3 -a 132 443 8 -a 132 165 4 -a 132 136 3 -a 132 561 2 -a 132 948 9 -a 132 658 10 -a 132 322 2 -a 132 475 10 -a 132 871 1 -a 132 742 3 -a 132 594 9 -a 132 998 7 -a 132 26 8 -a 132 924 5 -a 132 498 9 -a 132 827 9 -a 132 983 7 -a 132 206 9 -a 133 964 2 -a 133 891 7 -a 133 753 2 -a 133 169 8 -a 133 937 4 -a 133 810 8 -a 133 958 1 -a 133 708 10 -a 133 270 10 -a 133 294 8 -a 133 138 5 -a 133 678 8 -a 133 517 7 -a 133 581 6 -a 133 842 6 -a 133 652 3 -a 133 117 10 -a 133 766 3 -a 133 285 9 -a 133 438 5 -a 133 216 2 -a 133 132 7 -a 133 156 3 -a 133 809 2 -a 133 105 4 -a 133 181 9 -a 133 708 7 -a 133 603 3 -a 133 666 3 -a 133 808 7 -a 133 946 7 -a 133 532 4 -a 133 537 1 -a 133 90 10 -a 133 445 3 -a 133 322 4 -a 133 23 10 -a 133 128 3 -a 133 591 6 -a 133 316 9 -a 133 265 4 -a 133 244 9 -a 133 832 1 -a 133 845 4 -a 133 62 2 -a 133 460 6 -a 133 962 2 -a 133 827 9 -a 133 744 9 -a 133 375 9 -a 133 18 6 -a 133 875 8 -a 133 530 5 -a 133 826 1 -a 133 980 6 -a 133 710 8 -a 133 509 5 -a 133 558 2 -a 133 692 7 -a 133 151 7 -a 133 341 4 -a 133 613 10 -a 133 682 4 -a 133 877 9 -a 133 702 7 -a 133 102 10 -a 133 174 3 -a 133 724 6 -a 133 229 7 -a 133 764 7 -a 133 15 4 -a 133 494 7 -a 133 847 2 -a 133 314 2 -a 133 45 10 -a 133 282 2 -a 133 251 9 -a 133 871 3 -a 133 1 6 -a 133 626 2 -a 133 888 2 -a 133 876 7 -a 133 131 9 -a 133 689 2 -a 133 831 3 -a 133 841 10 -a 133 173 10 -a 133 364 10 -a 133 508 3 -a 133 323 9 -a 133 704 10 -a 133 97 5 -a 133 557 6 -a 133 798 9 -a 133 82 1 -a 133 730 10 -a 133 498 9 -a 133 311 6 -a 133 470 2 -a 133 512 7 -a 133 804 8 -a 133 453 10 -a 133 334 5 -a 133 93 9 -a 133 497 1 -a 133 615 10 -a 133 344 9 -a 133 343 4 -a 133 616 5 -a 133 969 2 -a 133 206 5 -a 133 467 7 -a 133 75 1 -a 134 894 9 -a 134 273 3 -a 134 915 5 -a 134 42 8 -a 134 636 10 -a 134 399 9 -a 134 365 1 -a 134 315 4 -a 134 495 5 -a 134 345 4 -a 134 871 7 -a 134 268 8 -a 134 426 10 -a 134 577 4 -a 134 765 1 -a 134 736 9 -a 134 22 2 -a 134 253 9 -a 134 515 10 -a 134 474 2 -a 134 586 6 -a 134 608 8 -a 134 970 4 -a 134 177 10 -a 134 951 1 -a 134 288 3 -a 134 792 7 -a 134 895 2 -a 134 493 7 -a 134 234 1 -a 134 969 6 -a 134 362 10 -a 134 506 9 -a 134 860 5 -a 134 403 1 -a 134 117 8 -a 134 234 6 -a 134 767 10 -a 134 431 1 -a 134 728 3 -a 134 87 6 -a 134 278 10 -a 134 995 8 -a 134 513 1 -a 134 854 9 -a 134 736 2 -a 134 224 5 -a 134 875 8 -a 134 988 2 -a 134 739 2 -a 134 324 2 -a 134 549 4 -a 134 322 7 -a 134 269 1 -a 134 725 8 -a 134 248 5 -a 134 556 6 -a 134 492 8 -a 134 118 7 -a 134 24 7 -a 134 725 5 -a 134 62 3 -a 134 385 9 -a 134 206 10 -a 134 921 7 -a 134 787 4 -a 134 322 10 -a 134 130 7 -a 134 530 6 -a 134 753 8 -a 134 857 2 -a 134 616 10 -a 134 6 10 -a 134 828 1 -a 134 104 6 -a 134 859 10 -a 134 539 1 -a 134 328 7 -a 134 709 4 -a 134 502 6 -a 134 42 7 -a 134 8 3 -a 134 26 4 -a 134 363 9 -a 134 276 10 -a 134 751 6 -a 134 610 6 -a 134 831 10 -a 134 218 1 -a 134 727 1 -a 134 854 1 -a 134 943 10 -a 134 788 10 -a 134 214 10 -a 134 124 10 -a 134 685 4 -a 134 1000 7 -a 134 446 10 -a 134 814 10 -a 134 505 1 -a 134 174 4 -a 134 647 4 -a 134 97 5 -a 134 179 3 -a 134 450 10 -a 134 200 1 -a 134 13 5 -a 134 988 5 -a 134 527 10 -a 135 721 4 -a 135 465 5 -a 135 568 4 -a 135 728 8 -a 135 490 8 -a 135 930 2 -a 135 216 1 -a 135 515 5 -a 135 809 5 -a 135 434 9 -a 135 217 7 -a 135 638 5 -a 135 352 4 -a 135 851 1 -a 135 475 9 -a 135 665 7 -a 135 826 5 -a 135 920 6 -a 135 454 10 -a 135 307 2 -a 135 69 5 -a 135 76 6 -a 135 403 1 -a 135 247 4 -a 135 525 7 -a 135 602 8 -a 135 259 10 -a 135 488 5 -a 135 105 10 -a 135 979 7 -a 135 952 9 -a 135 672 2 -a 135 682 5 -a 135 418 6 -a 135 578 2 -a 135 660 1 -a 135 633 10 -a 135 68 1 -a 135 444 7 -a 135 42 7 -a 135 285 7 -a 135 57 10 -a 135 393 4 -a 135 265 4 -a 135 907 4 -a 135 868 8 -a 135 929 1 -a 135 709 7 -a 135 763 9 -a 135 358 8 -a 135 832 6 -a 135 434 8 -a 135 393 6 -a 135 54 9 -a 135 958 6 -a 135 994 8 -a 135 313 5 -a 135 422 9 -a 135 74 4 -a 135 267 6 -a 135 349 2 -a 135 746 8 -a 135 949 5 -a 135 766 8 -a 135 299 7 -a 135 584 5 -a 135 375 3 -a 135 366 5 -a 135 4 9 -a 135 416 6 -a 135 650 3 -a 135 60 5 -a 135 809 6 -a 135 914 2 -a 135 967 10 -a 135 652 5 -a 135 818 6 -a 135 651 10 -a 135 390 3 -a 135 152 8 -a 135 641 10 -a 135 197 2 -a 135 585 4 -a 135 9 1 -a 135 251 1 -a 135 518 5 -a 135 563 5 -a 135 939 3 -a 135 52 6 -a 135 829 4 -a 135 264 8 -a 135 797 9 -a 136 753 8 -a 136 5 5 -a 136 71 5 -a 136 313 2 -a 136 379 10 -a 136 436 6 -a 136 316 7 -a 136 795 9 -a 136 62 2 -a 136 375 2 -a 136 579 4 -a 136 975 10 -a 136 317 9 -a 136 206 4 -a 136 769 10 -a 136 967 3 -a 136 595 4 -a 136 920 5 -a 136 583 3 -a 136 792 8 -a 136 480 3 -a 136 591 7 -a 136 18 10 -a 136 997 8 -a 136 569 10 -a 136 580 1 -a 136 912 2 -a 136 620 5 -a 136 384 5 -a 136 151 3 -a 136 392 10 -a 136 113 5 -a 136 155 4 -a 136 462 6 -a 136 425 7 -a 136 534 4 -a 136 897 8 -a 136 740 10 -a 136 304 10 -a 136 958 10 -a 136 90 3 -a 136 882 10 -a 136 909 5 -a 136 407 3 -a 136 63 8 -a 136 653 3 -a 136 349 7 -a 136 657 8 -a 136 548 2 -a 136 932 6 -a 136 424 5 -a 136 3 10 -a 136 498 8 -a 136 441 5 -a 136 999 10 -a 136 42 8 -a 136 886 3 -a 136 661 7 -a 136 380 4 -a 136 12 10 -a 136 28 2 -a 136 492 3 -a 136 167 1 -a 136 489 1 -a 136 916 6 -a 136 700 8 -a 136 362 8 -a 136 631 9 -a 136 295 4 -a 136 720 5 -a 136 860 2 -a 136 179 6 -a 136 102 6 -a 136 922 7 -a 136 831 8 -a 136 451 6 -a 136 554 6 -a 136 354 1 -a 136 358 8 -a 136 978 1 -a 136 356 4 -a 136 855 5 -a 136 394 2 -a 136 331 3 -a 136 897 10 -a 136 390 7 -a 136 192 7 -a 136 533 8 -a 136 769 4 -a 136 204 9 -a 136 561 9 -a 136 236 5 -a 136 370 6 -a 136 25 5 -a 136 127 2 -a 136 45 3 -a 136 386 7 -a 136 757 3 -a 136 23 4 -a 137 681 2 -a 137 452 8 -a 137 882 10 -a 137 859 9 -a 137 554 7 -a 137 779 3 -a 137 666 9 -a 137 308 6 -a 137 337 3 -a 137 261 2 -a 137 351 10 -a 137 167 8 -a 137 655 5 -a 137 681 4 -a 137 39 10 -a 137 20 9 -a 137 872 6 -a 137 572 9 -a 137 788 9 -a 137 51 8 -a 137 108 4 -a 137 420 10 -a 137 132 2 -a 137 125 2 -a 137 464 9 -a 137 518 1 -a 137 881 8 -a 137 486 3 -a 137 174 9 -a 137 308 2 -a 137 343 8 -a 137 8 5 -a 137 861 1 -a 137 97 7 -a 137 673 1 -a 137 840 1 -a 137 405 9 -a 137 668 7 -a 137 152 6 -a 137 665 1 -a 137 319 2 -a 137 295 7 -a 137 674 1 -a 137 357 3 -a 137 314 1 -a 137 521 10 -a 137 928 3 -a 137 77 8 -a 137 572 6 -a 137 11 3 -a 137 75 1 -a 137 991 1 -a 137 143 2 -a 137 199 1 -a 137 431 7 -a 137 660 3 -a 137 55 4 -a 137 916 2 -a 137 833 9 -a 137 363 5 -a 137 235 10 -a 137 840 7 -a 137 199 10 -a 137 331 2 -a 137 489 4 -a 137 15 5 -a 137 735 5 -a 137 132 10 -a 137 166 2 -a 137 376 10 -a 137 125 3 -a 137 484 10 -a 137 670 2 -a 137 798 5 -a 137 841 5 -a 137 984 6 -a 137 294 7 -a 137 744 10 -a 137 36 1 -a 137 865 3 -a 137 755 10 -a 137 111 9 -a 137 832 5 -a 138 897 9 -a 138 309 5 -a 138 238 10 -a 138 532 2 -a 138 364 2 -a 138 129 6 -a 138 340 10 -a 138 726 8 -a 138 363 5 -a 138 155 1 -a 138 924 1 -a 138 694 7 -a 138 643 5 -a 138 938 5 -a 138 404 2 -a 138 774 5 -a 138 80 7 -a 138 779 6 -a 138 898 6 -a 138 563 10 -a 138 425 4 -a 138 671 8 -a 138 379 8 -a 138 384 5 -a 138 965 9 -a 138 99 5 -a 138 419 10 -a 138 805 8 -a 138 853 2 -a 138 529 8 -a 138 612 1 -a 138 725 6 -a 138 838 4 -a 138 849 4 -a 138 232 7 -a 138 177 5 -a 138 978 9 -a 138 571 2 -a 138 902 1 -a 138 316 7 -a 138 725 7 -a 138 801 5 -a 138 344 4 -a 138 715 8 -a 138 389 6 -a 138 93 2 -a 138 794 1 -a 138 143 9 -a 138 991 8 -a 138 332 2 -a 138 567 7 -a 138 637 1 -a 138 711 10 -a 138 950 3 -a 138 577 7 -a 138 809 4 -a 138 345 6 -a 138 358 10 -a 138 637 10 -a 138 873 7 -a 138 969 5 -a 138 337 8 -a 138 686 5 -a 138 794 9 -a 138 568 8 -a 138 862 5 -a 138 747 1 -a 138 114 4 -a 138 739 4 -a 138 38 8 -a 138 838 6 -a 138 516 2 -a 138 23 2 -a 138 157 2 -a 138 206 8 -a 138 411 5 -a 138 250 6 -a 138 999 1 -a 138 553 6 -a 138 216 5 -a 138 306 9 -a 138 96 10 -a 138 852 2 -a 138 21 4 -a 138 405 10 -a 138 800 8 -a 138 365 8 -a 138 762 1 -a 138 412 3 -a 138 214 9 -a 138 706 10 -a 138 748 1 -a 138 899 10 -a 138 475 4 -a 138 291 1 -a 138 737 3 -a 138 197 5 -a 138 404 4 -a 138 451 7 -a 138 235 6 -a 138 218 8 -a 138 966 6 -a 139 257 9 -a 139 374 6 -a 139 147 4 -a 139 667 8 -a 139 623 6 -a 139 121 10 -a 139 195 3 -a 139 838 10 -a 139 427 3 -a 139 290 9 -a 139 666 6 -a 139 418 2 -a 139 311 8 -a 139 46 6 -a 139 194 10 -a 139 675 3 -a 139 807 2 -a 139 605 9 -a 139 888 7 -a 139 488 1 -a 139 329 5 -a 139 763 9 -a 139 963 9 -a 139 619 2 -a 139 475 3 -a 139 135 1 -a 139 925 9 -a 139 369 5 -a 139 216 9 -a 139 867 6 -a 139 625 7 -a 139 589 6 -a 139 267 5 -a 139 188 1 -a 139 110 8 -a 139 462 3 -a 139 1 4 -a 139 536 9 -a 139 751 5 -a 139 666 2 -a 139 953 5 -a 139 37 9 -a 139 711 9 -a 139 122 6 -a 139 712 10 -a 139 493 3 -a 139 727 8 -a 139 575 10 -a 139 981 3 -a 139 31 1 -a 139 313 1 -a 139 919 7 -a 139 649 6 -a 139 787 6 -a 139 29 3 -a 139 647 10 -a 139 688 7 -a 139 398 10 -a 139 862 3 -a 139 530 7 -a 139 427 7 -a 139 518 8 -a 139 265 9 -a 139 614 5 -a 139 627 8 -a 139 726 2 -a 139 614 4 -a 139 138 7 -a 139 452 3 -a 139 256 7 -a 139 67 10 -a 139 489 9 -a 139 966 5 -a 139 188 9 -a 139 176 4 -a 139 435 10 -a 139 914 6 -a 139 750 3 -a 139 391 5 -a 140 944 3 -a 140 39 5 -a 140 285 4 -a 140 569 10 -a 140 825 8 -a 140 313 5 -a 140 191 4 -a 140 488 9 -a 140 710 8 -a 140 29 4 -a 140 708 5 -a 140 455 6 -a 140 511 2 -a 140 972 7 -a 140 44 4 -a 140 113 2 -a 140 673 4 -a 140 657 7 -a 140 251 6 -a 140 100 7 -a 140 912 4 -a 140 317 9 -a 140 588 8 -a 140 854 2 -a 140 504 4 -a 140 763 7 -a 140 264 6 -a 140 394 7 -a 140 489 10 -a 140 654 2 -a 140 313 1 -a 140 527 2 -a 140 938 6 -a 140 881 6 -a 140 327 5 -a 140 226 4 -a 140 48 8 -a 140 815 4 -a 140 936 5 -a 140 76 2 -a 140 807 4 -a 140 619 10 -a 140 530 9 -a 140 293 2 -a 140 566 7 -a 140 573 2 -a 140 406 8 -a 140 214 1 -a 140 205 10 -a 140 656 4 -a 140 313 1 -a 140 93 3 -a 140 972 7 -a 140 901 6 -a 140 946 4 -a 140 451 3 -a 140 639 10 -a 140 185 8 -a 140 844 2 -a 140 103 6 -a 140 838 2 -a 140 133 3 -a 140 629 7 -a 140 751 2 -a 140 956 6 -a 140 976 10 -a 140 36 8 -a 140 746 6 -a 140 887 7 -a 140 111 3 -a 140 528 9 -a 140 481 1 -a 140 640 1 -a 140 821 6 -a 140 22 6 -a 140 188 4 -a 140 202 9 -a 140 235 7 -a 140 393 1 -a 140 857 8 -a 140 548 3 -a 140 485 1 -a 140 804 9 -a 140 424 10 -a 140 406 3 -a 140 230 4 -a 140 38 6 -a 140 590 5 -a 140 50 9 -a 140 141 1 -a 140 403 2 -a 140 182 1 -a 140 769 7 -a 140 129 4 -a 141 170 5 -a 141 700 3 -a 141 80 5 -a 141 206 2 -a 141 421 1 -a 141 967 2 -a 141 316 10 -a 141 949 1 -a 141 423 10 -a 141 956 7 -a 141 745 10 -a 141 445 9 -a 141 119 10 -a 141 946 9 -a 141 679 2 -a 141 511 7 -a 141 778 4 -a 141 202 1 -a 141 995 8 -a 141 557 5 -a 141 625 8 -a 141 376 3 -a 141 786 10 -a 141 663 5 -a 141 965 6 -a 141 835 9 -a 141 803 7 -a 141 343 10 -a 141 547 4 -a 141 471 7 -a 141 162 3 -a 141 223 1 -a 141 551 4 -a 141 367 8 -a 141 643 9 -a 141 493 10 -a 141 682 2 -a 141 567 10 -a 141 915 9 -a 141 613 1 -a 141 287 8 -a 141 335 1 -a 141 732 10 -a 141 208 5 -a 141 218 6 -a 141 985 3 -a 141 191 4 -a 141 189 10 -a 141 517 8 -a 141 816 1 -a 141 564 5 -a 141 279 9 -a 141 454 5 -a 141 505 6 -a 141 89 10 -a 141 232 1 -a 141 847 3 -a 141 81 1 -a 141 778 6 -a 141 294 3 -a 141 242 4 -a 141 1000 3 -a 141 844 2 -a 141 608 9 -a 141 619 9 -a 141 312 9 -a 141 265 3 -a 141 161 9 -a 141 202 8 -a 141 878 8 -a 141 448 6 -a 141 537 5 -a 141 585 4 -a 141 655 9 -a 141 526 9 -a 141 802 8 -a 141 616 9 -a 141 716 7 -a 141 990 10 -a 141 108 9 -a 141 507 4 -a 141 530 9 -a 141 386 4 -a 141 960 8 -a 141 10 6 -a 141 475 7 -a 141 167 4 -a 141 856 6 -a 141 555 3 -a 141 945 8 -a 141 125 8 -a 141 796 1 -a 141 920 3 -a 141 968 2 -a 141 379 10 -a 141 514 5 -a 141 255 4 -a 141 643 9 -a 141 675 6 -a 141 457 2 -a 141 496 3 -a 141 98 8 -a 141 993 4 -a 141 56 10 -a 141 752 3 -a 141 494 10 -a 141 858 6 -a 141 343 8 -a 141 185 8 -a 141 823 5 -a 141 451 8 -a 141 692 6 -a 142 328 6 -a 142 836 6 -a 142 627 10 -a 142 337 9 -a 142 286 8 -a 142 794 5 -a 142 169 10 -a 142 840 5 -a 142 714 1 -a 142 293 7 -a 142 611 7 -a 142 609 10 -a 142 237 1 -a 142 989 5 -a 142 99 7 -a 142 491 10 -a 142 608 10 -a 142 773 2 -a 142 947 6 -a 142 79 4 -a 142 870 1 -a 142 915 3 -a 142 135 4 -a 142 597 9 -a 142 384 1 -a 142 992 2 -a 142 940 10 -a 142 569 8 -a 142 790 5 -a 142 366 8 -a 142 236 6 -a 142 94 4 -a 142 177 4 -a 142 862 2 -a 142 430 5 -a 142 463 3 -a 142 631 9 -a 142 598 8 -a 142 278 10 -a 142 320 2 -a 142 891 10 -a 142 889 5 -a 142 929 2 -a 142 103 9 -a 142 853 10 -a 142 3 2 -a 142 593 4 -a 142 436 8 -a 142 775 6 -a 142 516 9 -a 142 515 9 -a 142 620 10 -a 142 406 6 -a 142 649 2 -a 142 192 8 -a 142 790 9 -a 142 616 1 -a 142 107 10 -a 142 334 10 -a 142 381 10 -a 142 472 7 -a 142 569 5 -a 142 474 10 -a 142 649 7 -a 142 406 9 -a 142 904 10 -a 142 87 4 -a 142 13 5 -a 142 477 8 -a 142 364 8 -a 142 332 8 -a 142 343 7 -a 142 228 1 -a 142 236 9 -a 142 445 8 -a 142 57 10 -a 142 238 1 -a 142 14 8 -a 142 492 3 -a 142 529 1 -a 142 607 10 -a 142 934 9 -a 142 630 6 -a 142 799 5 -a 142 699 8 -a 142 221 5 -a 142 905 10 -a 142 8 9 -a 142 602 7 -a 142 353 7 -a 142 576 6 -a 142 51 10 -a 142 982 6 -a 142 954 3 -a 142 63 6 -a 142 994 9 -a 142 407 1 -a 142 426 9 -a 142 301 6 -a 142 749 6 -a 142 654 1 -a 142 537 10 -a 142 170 5 -a 142 710 6 -a 142 774 8 -a 142 183 4 -a 143 177 1 -a 143 762 2 -a 143 711 10 -a 143 159 10 -a 143 344 2 -a 143 620 6 -a 143 788 10 -a 143 118 6 -a 143 295 2 -a 143 302 1 -a 143 586 8 -a 143 351 5 -a 143 878 10 -a 143 636 3 -a 143 327 6 -a 143 835 1 -a 143 566 7 -a 143 389 7 -a 143 804 10 -a 143 972 6 -a 143 814 5 -a 143 80 6 -a 143 696 3 -a 143 443 1 -a 143 616 7 -a 143 865 8 -a 143 128 10 -a 143 366 6 -a 143 23 1 -a 143 305 7 -a 143 103 9 -a 143 733 1 -a 143 463 1 -a 143 446 2 -a 143 329 5 -a 143 226 4 -a 143 564 10 -a 143 623 1 -a 143 210 1 -a 143 562 7 -a 143 924 5 -a 143 795 6 -a 143 912 10 -a 143 777 9 -a 143 407 1 -a 143 214 5 -a 143 587 6 -a 143 972 6 -a 143 602 3 -a 143 366 8 -a 143 919 6 -a 143 391 4 -a 143 446 7 -a 143 590 3 -a 143 834 3 -a 143 37 3 -a 143 431 5 -a 143 961 7 -a 143 402 8 -a 143 453 8 -a 143 241 1 -a 143 504 9 -a 143 162 3 -a 143 703 1 -a 143 950 7 -a 143 490 6 -a 143 929 10 -a 143 489 5 -a 143 88 9 -a 143 114 6 -a 143 26 10 -a 143 909 8 -a 143 937 1 -a 143 764 5 -a 143 291 3 -a 143 126 1 -a 143 326 7 -a 143 238 7 -a 143 727 6 -a 143 692 7 -a 143 132 8 -a 143 93 5 -a 143 113 3 -a 143 721 1 -a 143 926 3 -a 143 149 2 -a 143 127 7 -a 143 863 3 -a 143 551 2 -a 143 580 1 -a 143 79 1 -a 143 30 5 -a 143 741 1 -a 143 782 5 -a 143 979 9 -a 143 206 3 -a 143 686 4 -a 143 443 6 -a 143 293 9 -a 143 799 3 -a 143 468 8 -a 143 279 5 -a 144 683 4 -a 144 380 5 -a 144 18 2 -a 144 973 9 -a 144 505 1 -a 144 344 8 -a 144 186 10 -a 144 207 8 -a 144 11 10 -a 144 317 6 -a 144 300 10 -a 144 123 8 -a 144 14 3 -a 144 201 8 -a 144 271 6 -a 144 140 5 -a 144 39 10 -a 144 821 3 -a 144 719 3 -a 144 118 4 -a 144 851 4 -a 144 435 5 -a 144 899 9 -a 144 805 3 -a 144 640 8 -a 144 560 9 -a 144 224 7 -a 144 932 2 -a 144 334 3 -a 144 691 4 -a 144 187 9 -a 144 47 4 -a 144 204 4 -a 144 965 6 -a 144 551 9 -a 144 547 1 -a 144 127 3 -a 144 758 8 -a 144 557 3 -a 144 443 7 -a 144 33 7 -a 144 679 1 -a 144 456 6 -a 144 233 2 -a 144 950 1 -a 144 596 6 -a 144 272 6 -a 144 746 3 -a 144 290 3 -a 144 389 9 -a 144 572 7 -a 144 725 1 -a 144 263 5 -a 144 353 5 -a 144 340 7 -a 144 822 1 -a 144 576 4 -a 144 248 3 -a 144 131 7 -a 144 242 4 -a 144 434 8 -a 144 123 8 -a 144 288 2 -a 144 637 8 -a 144 64 7 -a 144 839 10 -a 144 160 4 -a 144 190 5 -a 144 572 8 -a 144 716 1 -a 144 632 1 -a 144 604 2 -a 144 371 9 -a 144 64 10 -a 144 836 8 -a 144 296 5 -a 144 659 10 -a 144 83 8 -a 144 17 9 -a 144 948 3 -a 144 471 6 -a 144 589 10 -a 144 648 3 -a 144 733 4 -a 144 941 3 -a 144 988 1 -a 144 530 7 -a 144 492 7 -a 144 211 8 -a 144 661 7 -a 144 733 8 -a 144 644 6 -a 144 783 8 -a 144 256 3 -a 144 846 2 -a 144 835 4 -a 144 415 8 -a 144 11 4 -a 144 382 1 -a 144 107 8 -a 144 643 9 -a 144 985 3 -a 144 477 7 -a 144 706 1 -a 144 796 3 -a 144 772 9 -a 144 340 1 -a 144 879 9 -a 144 788 9 -a 144 263 7 -a 144 325 7 -a 144 352 9 -a 144 911 10 -a 144 34 6 -a 144 268 9 -a 144 874 6 -a 144 563 9 -a 144 759 3 -a 144 60 6 -a 144 199 9 -a 144 468 8 -a 144 703 10 -a 144 982 8 -a 144 464 10 -a 144 958 10 -a 144 803 7 -a 144 274 10 -a 144 349 2 -a 145 814 6 -a 145 655 2 -a 145 455 6 -a 145 432 4 -a 145 615 9 -a 145 931 6 -a 145 113 4 -a 145 386 9 -a 145 678 6 -a 145 452 7 -a 145 240 5 -a 145 441 10 -a 145 714 5 -a 145 565 7 -a 145 793 3 -a 145 600 5 -a 145 598 5 -a 145 36 5 -a 145 449 6 -a 145 136 7 -a 145 795 5 -a 145 508 5 -a 145 335 2 -a 145 238 9 -a 145 186 7 -a 145 292 8 -a 145 701 8 -a 145 120 5 -a 145 70 1 -a 145 974 6 -a 145 468 1 -a 145 883 5 -a 145 604 7 -a 145 922 1 -a 145 290 4 -a 145 194 5 -a 145 828 1 -a 145 402 9 -a 145 579 4 -a 145 481 7 -a 145 853 8 -a 145 819 1 -a 145 921 4 -a 145 543 4 -a 145 359 4 -a 145 689 9 -a 145 118 4 -a 145 956 8 -a 145 725 9 -a 145 567 6 -a 145 67 8 -a 145 495 8 -a 145 50 4 -a 145 401 4 -a 145 732 4 -a 145 236 4 -a 145 692 7 -a 145 408 10 -a 145 355 1 -a 145 762 4 -a 145 357 4 -a 145 822 8 -a 145 620 8 -a 145 960 3 -a 145 719 3 -a 145 910 2 -a 145 129 6 -a 145 522 2 -a 145 287 4 -a 145 707 1 -a 145 116 6 -a 145 501 6 -a 145 898 3 -a 145 658 5 -a 145 859 8 -a 145 563 3 -a 145 775 2 -a 145 790 2 -a 145 263 1 -a 145 317 10 -a 145 857 1 -a 145 757 2 -a 145 367 3 -a 145 233 9 -a 145 464 3 -a 145 602 9 -a 145 925 8 -a 145 871 4 -a 145 956 7 -a 145 662 4 -a 145 203 6 -a 145 753 9 -a 145 257 8 -a 145 138 9 -a 145 447 8 -a 145 142 6 -a 145 266 4 -a 145 968 10 -a 145 429 7 -a 145 972 1 -a 145 945 6 -a 145 544 9 -a 145 449 1 -a 145 818 5 -a 145 177 2 -a 146 283 3 -a 146 356 2 -a 146 951 10 -a 146 49 4 -a 146 618 4 -a 146 244 2 -a 146 905 7 -a 146 350 10 -a 146 610 10 -a 146 113 2 -a 146 813 4 -a 146 187 10 -a 146 13 6 -a 146 659 5 -a 146 118 2 -a 146 674 3 -a 146 861 7 -a 146 870 6 -a 146 931 5 -a 146 998 7 -a 146 292 10 -a 146 48 6 -a 146 239 7 -a 146 235 7 -a 146 476 5 -a 146 187 1 -a 146 155 8 -a 146 635 4 -a 146 972 10 -a 146 171 7 -a 146 917 9 -a 146 304 4 -a 146 98 8 -a 146 965 1 -a 146 921 5 -a 146 341 6 -a 146 845 6 -a 146 247 9 -a 146 950 7 -a 146 958 8 -a 146 35 4 -a 146 112 8 -a 146 970 10 -a 146 694 4 -a 146 229 2 -a 146 620 10 -a 146 530 5 -a 146 74 3 -a 146 526 7 -a 146 504 5 -a 146 365 4 -a 146 573 1 -a 146 742 8 -a 146 599 6 -a 146 25 5 -a 146 928 3 -a 146 753 8 -a 146 19 9 -a 146 538 2 -a 146 700 6 -a 146 190 10 -a 146 431 5 -a 146 287 4 -a 146 371 9 -a 146 900 6 -a 146 627 6 -a 146 192 2 -a 146 122 5 -a 146 552 6 -a 146 125 3 -a 146 156 4 -a 146 663 7 -a 146 70 3 -a 146 849 7 -a 146 891 9 -a 146 689 8 -a 146 355 7 -a 146 964 4 -a 146 190 7 -a 146 858 6 -a 146 304 8 -a 146 763 5 -a 146 575 2 -a 146 902 7 -a 146 787 9 -a 146 479 7 -a 146 630 5 -a 146 805 3 -a 146 305 9 -a 146 994 2 -a 146 422 7 -a 146 284 4 -a 146 256 6 -a 146 793 4 -a 146 159 5 -a 146 882 10 -a 146 984 7 -a 146 280 5 -a 146 409 2 -a 146 84 8 -a 146 435 8 -a 146 47 6 -a 146 153 3 -a 146 260 8 -a 146 937 5 -a 146 842 4 -a 146 614 7 -a 146 876 8 -a 147 7 4 -a 147 447 8 -a 147 155 6 -a 147 769 9 -a 147 32 10 -a 147 531 2 -a 147 475 5 -a 147 661 9 -a 147 312 8 -a 147 467 10 -a 147 966 6 -a 147 281 3 -a 147 888 8 -a 147 225 6 -a 147 537 1 -a 147 656 5 -a 147 383 9 -a 147 394 3 -a 147 615 10 -a 147 662 5 -a 147 803 5 -a 147 698 2 -a 147 72 9 -a 147 849 8 -a 147 851 8 -a 147 331 3 -a 147 762 10 -a 147 668 4 -a 147 944 3 -a 147 613 5 -a 147 674 5 -a 147 366 9 -a 147 768 5 -a 147 419 2 -a 147 363 10 -a 147 799 10 -a 147 949 9 -a 147 837 10 -a 147 436 6 -a 147 236 4 -a 147 279 2 -a 147 377 8 -a 147 517 6 -a 147 143 4 -a 147 601 5 -a 147 29 2 -a 147 798 10 -a 147 983 6 -a 147 422 2 -a 147 389 2 -a 147 620 6 -a 147 200 6 -a 147 62 7 -a 147 691 1 -a 147 25 8 -a 147 912 1 -a 147 786 9 -a 147 555 10 -a 147 941 2 -a 147 374 2 -a 147 205 3 -a 147 283 7 -a 147 117 8 -a 147 623 2 -a 147 645 5 -a 147 916 5 -a 147 547 1 -a 147 457 4 -a 147 327 7 -a 147 783 10 -a 147 736 5 -a 147 703 3 -a 147 275 6 -a 147 878 7 -a 147 279 3 -a 147 303 4 -a 147 651 7 -a 147 237 5 -a 147 724 7 -a 148 15 2 -a 148 856 5 -a 148 924 5 -a 148 77 3 -a 148 522 9 -a 148 948 8 -a 148 988 9 -a 148 519 9 -a 148 709 2 -a 148 519 5 -a 148 436 3 -a 148 58 1 -a 148 723 8 -a 148 718 8 -a 148 175 7 -a 148 321 10 -a 148 338 4 -a 148 66 8 -a 148 867 2 -a 148 794 3 -a 148 392 8 -a 148 625 4 -a 148 505 6 -a 148 70 8 -a 148 899 3 -a 148 358 10 -a 148 348 9 -a 148 177 2 -a 148 584 6 -a 148 901 7 -a 148 415 8 -a 148 800 4 -a 148 75 7 -a 148 936 10 -a 148 723 10 -a 148 39 1 -a 148 431 1 -a 148 407 8 -a 148 557 3 -a 148 866 8 -a 148 464 3 -a 148 255 6 -a 148 559 3 -a 148 638 2 -a 148 575 9 -a 148 896 8 -a 148 703 8 -a 148 417 1 -a 148 665 6 -a 148 70 3 -a 148 18 5 -a 148 146 2 -a 148 139 9 -a 148 916 6 -a 148 503 1 -a 148 486 4 -a 148 69 1 -a 148 487 5 -a 148 45 4 -a 148 969 1 -a 148 486 6 -a 148 459 9 -a 148 744 6 -a 148 560 8 -a 148 371 7 -a 148 442 1 -a 148 598 6 -a 148 801 3 -a 148 848 7 -a 148 130 7 -a 148 642 5 -a 148 287 9 -a 148 384 5 -a 148 176 7 -a 148 925 5 -a 148 958 6 -a 148 47 6 -a 148 603 6 -a 148 351 3 -a 148 711 8 -a 148 673 1 -a 148 368 5 -a 148 856 7 -a 148 811 1 -a 148 259 8 -a 148 335 4 -a 148 273 3 -a 148 327 8 -a 148 821 4 -a 148 317 5 -a 148 271 1 -a 148 282 6 -a 148 776 5 -a 148 842 5 -a 148 122 3 -a 148 431 7 -a 148 415 4 -a 148 922 10 -a 148 254 8 -a 148 545 9 -a 148 539 9 -a 149 541 9 -a 149 928 7 -a 149 714 5 -a 149 441 6 -a 149 862 2 -a 149 760 2 -a 149 19 2 -a 149 188 5 -a 149 446 4 -a 149 691 10 -a 149 555 1 -a 149 278 7 -a 149 478 5 -a 149 813 7 -a 149 612 4 -a 149 750 8 -a 149 116 3 -a 149 408 8 -a 149 42 5 -a 149 386 3 -a 149 690 4 -a 149 817 6 -a 149 376 7 -a 149 507 9 -a 149 938 7 -a 149 806 8 -a 149 921 10 -a 149 835 5 -a 149 36 7 -a 149 441 2 -a 149 349 7 -a 149 576 4 -a 149 345 5 -a 149 38 2 -a 149 182 1 -a 149 797 10 -a 149 10 3 -a 149 369 4 -a 149 219 4 -a 149 701 1 -a 149 923 9 -a 149 496 7 -a 149 154 9 -a 149 711 3 -a 149 83 4 -a 149 903 10 -a 149 826 2 -a 149 490 2 -a 149 944 1 -a 149 188 2 -a 149 155 3 -a 149 737 3 -a 149 563 7 -a 149 661 5 -a 149 650 4 -a 149 344 2 -a 149 558 3 -a 149 461 4 -a 149 379 2 -a 149 998 10 -a 149 809 10 -a 149 954 7 -a 149 318 7 -a 149 847 10 -a 149 945 4 -a 149 499 5 -a 149 619 2 -a 149 955 7 -a 149 867 8 -a 149 837 3 -a 149 631 6 -a 149 765 5 -a 149 308 8 -a 149 784 6 -a 149 452 2 -a 149 390 8 -a 149 662 9 -a 149 253 7 -a 149 880 7 -a 149 581 8 -a 149 440 10 -a 149 10 4 -a 149 293 4 -a 149 671 6 -a 149 943 6 -a 149 322 4 -a 149 204 4 -a 149 379 6 -a 149 700 9 -a 149 177 8 -a 149 163 10 -a 149 630 6 -a 150 495 2 -a 150 550 5 -a 150 993 8 -a 150 604 1 -a 150 480 4 -a 150 836 10 -a 150 416 3 -a 150 86 8 -a 150 576 4 -a 150 724 1 -a 150 869 8 -a 150 3 8 -a 150 89 10 -a 150 506 7 -a 150 256 9 -a 150 968 8 -a 150 63 10 -a 150 695 7 -a 150 978 4 -a 150 355 4 -a 150 673 1 -a 150 624 8 -a 150 273 1 -a 150 994 2 -a 150 827 9 -a 150 651 8 -a 150 669 6 -a 150 814 7 -a 150 274 4 -a 150 473 1 -a 150 798 10 -a 150 824 10 -a 150 442 7 -a 150 377 2 -a 150 279 7 -a 150 253 5 -a 150 793 8 -a 150 365 5 -a 150 828 8 -a 150 492 6 -a 150 209 6 -a 150 831 6 -a 150 580 1 -a 150 715 4 -a 150 62 3 -a 150 524 10 -a 150 777 8 -a 150 756 1 -a 150 477 2 -a 150 107 10 -a 150 404 9 -a 150 76 1 -a 150 380 3 -a 150 373 6 -a 150 902 7 -a 150 6 4 -a 150 18 3 -a 150 880 2 -a 150 819 10 -a 150 291 7 -a 150 329 10 -a 150 593 5 -a 150 90 4 -a 150 770 10 -a 150 969 9 -a 150 369 9 -a 150 737 8 -a 150 733 5 -a 150 825 1 -a 150 204 9 -a 150 941 4 -a 150 631 10 -a 150 784 4 -a 150 631 10 -a 150 692 10 -a 150 283 3 -a 150 383 5 -a 150 424 2 -a 150 759 5 -a 150 490 9 -a 150 827 7 -a 150 834 2 -a 150 869 4 -a 150 176 8 -a 150 711 1 -a 150 874 8 -a 150 193 3 -a 150 566 10 -a 150 669 7 -a 150 483 10 -a 150 894 7 -a 150 237 10 -a 150 573 5 -a 150 639 7 -a 150 181 8 -a 150 941 9 -a 150 636 6 -a 150 918 1 -a 150 649 8 -a 150 437 8 -a 150 97 6 -a 150 565 10 -a 150 43 4 -a 150 880 2 -a 150 172 9 -a 150 735 8 -a 150 138 10 -a 150 554 5 -a 150 134 6 -a 150 896 8 -a 150 19 4 -a 150 960 10 -a 150 705 1 -a 150 887 8 -a 150 111 1 -a 151 391 9 -a 151 737 9 -a 151 303 3 -a 151 957 9 -a 151 381 10 -a 151 786 9 -a 151 826 6 -a 151 617 1 -a 151 334 10 -a 151 441 1 -a 151 797 8 -a 151 250 4 -a 151 52 6 -a 151 690 7 -a 151 898 9 -a 151 488 9 -a 151 787 6 -a 151 438 6 -a 151 531 8 -a 151 642 7 -a 151 609 7 -a 151 241 8 -a 151 780 4 -a 151 139 5 -a 151 374 9 -a 151 651 4 -a 151 157 10 -a 151 309 2 -a 151 332 2 -a 151 20 4 -a 151 420 5 -a 151 722 9 -a 151 756 3 -a 151 722 2 -a 151 654 2 -a 151 112 7 -a 151 483 7 -a 151 456 2 -a 151 728 6 -a 151 816 1 -a 151 896 2 -a 151 500 10 -a 151 41 8 -a 151 947 8 -a 151 166 3 -a 151 938 4 -a 151 411 7 -a 151 952 6 -a 151 352 2 -a 151 941 5 -a 151 569 2 -a 151 960 10 -a 151 157 6 -a 151 324 7 -a 151 74 5 -a 151 530 4 -a 151 975 2 -a 151 231 8 -a 151 838 1 -a 151 282 6 -a 151 250 6 -a 151 233 3 -a 151 955 8 -a 151 633 4 -a 151 92 2 -a 151 413 3 -a 151 64 5 -a 151 819 2 -a 151 205 9 -a 151 959 10 -a 151 294 7 -a 151 245 4 -a 151 881 6 -a 151 459 8 -a 151 159 5 -a 151 267 8 -a 151 386 3 -a 151 510 2 -a 151 183 4 -a 151 955 9 -a 151 445 9 -a 151 339 6 -a 151 254 3 -a 151 519 6 -a 151 868 8 -a 151 204 2 -a 151 749 9 -a 151 682 1 -a 151 485 3 -a 151 998 6 -a 151 914 4 -a 151 464 4 -a 151 978 8 -a 151 844 1 -a 151 72 9 -a 151 45 10 -a 151 233 2 -a 151 135 7 -a 151 863 10 -a 151 437 4 -a 151 69 6 -a 151 132 7 -a 151 681 1 -a 151 949 6 -a 151 591 4 -a 151 839 4 -a 151 192 1 -a 151 976 9 -a 151 324 4 -a 151 374 1 -a 151 906 2 -a 151 769 6 -a 151 713 1 -a 151 136 2 -a 151 263 1 -a 151 556 4 -a 151 339 1 -a 152 213 9 -a 152 824 10 -a 152 984 1 -a 152 103 5 -a 152 263 6 -a 152 937 9 -a 152 946 3 -a 152 334 8 -a 152 981 9 -a 152 154 7 -a 152 468 6 -a 152 819 5 -a 152 590 6 -a 152 536 6 -a 152 950 10 -a 152 247 9 -a 152 460 7 -a 152 516 10 -a 152 61 4 -a 152 651 1 -a 152 468 4 -a 152 385 9 -a 152 1 7 -a 152 349 4 -a 152 129 7 -a 152 713 7 -a 152 484 2 -a 152 391 8 -a 152 244 4 -a 152 823 9 -a 152 377 2 -a 152 457 3 -a 152 622 7 -a 152 336 4 -a 152 559 2 -a 152 884 5 -a 152 248 1 -a 152 480 6 -a 152 193 2 -a 152 204 5 -a 152 634 3 -a 152 660 4 -a 152 199 4 -a 152 171 1 -a 152 947 6 -a 152 445 1 -a 152 630 8 -a 152 439 2 -a 152 506 5 -a 152 257 4 -a 152 906 5 -a 152 890 7 -a 152 257 10 -a 152 230 9 -a 152 969 7 -a 152 714 7 -a 152 384 7 -a 152 188 3 -a 152 512 1 -a 152 760 9 -a 152 644 8 -a 152 109 2 -a 152 71 9 -a 152 178 2 -a 152 992 5 -a 152 318 6 -a 152 658 8 -a 152 160 9 -a 152 521 8 -a 152 267 8 -a 152 819 9 -a 152 518 7 -a 152 465 10 -a 152 989 8 -a 152 440 1 -a 152 910 6 -a 152 594 3 -a 152 878 10 -a 152 391 2 -a 152 850 7 -a 152 759 1 -a 152 256 6 -a 152 82 2 -a 152 989 7 -a 152 249 2 -a 152 26 10 -a 152 678 5 -a 152 632 3 -a 152 214 5 -a 152 165 4 -a 152 367 8 -a 152 857 1 -a 152 273 1 -a 152 437 3 -a 152 11 9 -a 152 240 6 -a 152 754 9 -a 152 668 4 -a 152 399 7 -a 152 250 6 -a 152 934 1 -a 152 193 7 -a 152 767 5 -a 152 374 7 -a 152 157 7 -a 152 182 6 -a 152 259 2 -a 152 750 4 -a 152 36 1 -a 152 649 7 -a 152 576 7 -a 152 794 7 -a 153 904 8 -a 153 657 1 -a 153 758 10 -a 153 128 4 -a 153 683 7 -a 153 411 2 -a 153 759 7 -a 153 896 7 -a 153 575 5 -a 153 101 2 -a 153 728 5 -a 153 847 4 -a 153 537 8 -a 153 738 5 -a 153 62 7 -a 153 266 7 -a 153 381 10 -a 153 460 2 -a 153 515 8 -a 153 290 1 -a 153 652 8 -a 153 257 4 -a 153 664 8 -a 153 808 6 -a 153 439 1 -a 153 922 8 -a 153 534 4 -a 153 474 1 -a 153 547 9 -a 153 85 10 -a 153 243 10 -a 153 426 1 -a 153 741 3 -a 153 554 2 -a 153 399 4 -a 153 387 3 -a 153 288 8 -a 153 270 10 -a 153 962 9 -a 153 389 1 -a 153 998 9 -a 153 784 10 -a 153 925 8 -a 153 711 1 -a 153 846 7 -a 153 167 1 -a 153 68 6 -a 153 281 1 -a 153 681 2 -a 153 357 10 -a 153 933 8 -a 153 938 7 -a 153 716 10 -a 153 352 3 -a 153 918 10 -a 153 225 6 -a 153 825 3 -a 153 440 8 -a 153 309 5 -a 153 43 7 -a 153 865 5 -a 153 26 4 -a 153 19 2 -a 153 394 3 -a 153 424 1 -a 153 406 3 -a 153 682 8 -a 153 694 1 -a 153 343 4 -a 153 46 5 -a 153 667 10 -a 153 102 1 -a 153 970 2 -a 153 353 8 -a 153 947 10 -a 153 112 5 -a 153 420 6 -a 153 204 1 -a 153 793 9 -a 153 777 8 -a 153 112 4 -a 153 706 7 -a 153 772 8 -a 153 827 3 -a 153 33 3 -a 153 665 6 -a 153 28 4 -a 153 857 6 -a 153 80 6 -a 153 336 5 -a 153 899 6 -a 153 945 9 -a 153 361 9 -a 153 918 10 -a 153 314 8 -a 153 785 1 -a 153 299 3 -a 153 995 10 -a 153 454 8 -a 153 641 9 -a 153 16 8 -a 153 96 8 -a 153 742 7 -a 154 986 3 -a 154 448 5 -a 154 665 2 -a 154 73 5 -a 154 868 7 -a 154 868 10 -a 154 865 10 -a 154 620 4 -a 154 979 9 -a 154 546 6 -a 154 367 2 -a 154 781 2 -a 154 578 2 -a 154 8 2 -a 154 808 7 -a 154 410 4 -a 154 87 3 -a 154 120 10 -a 154 285 1 -a 154 7 7 -a 154 480 9 -a 154 178 1 -a 154 321 5 -a 154 240 7 -a 154 476 1 -a 154 291 2 -a 154 693 10 -a 154 92 9 -a 154 307 8 -a 154 788 10 -a 154 833 5 -a 154 268 4 -a 154 212 7 -a 154 473 5 -a 154 340 2 -a 154 55 8 -a 154 316 8 -a 154 181 4 -a 154 674 1 -a 154 270 4 -a 154 726 4 -a 154 16 10 -a 154 27 9 -a 154 280 3 -a 154 23 9 -a 154 834 2 -a 154 689 3 -a 154 110 5 -a 154 953 9 -a 154 973 8 -a 154 116 6 -a 154 409 10 -a 154 126 7 -a 154 436 2 -a 154 648 3 -a 154 601 2 -a 154 727 1 -a 154 317 2 -a 154 692 4 -a 154 9 8 -a 154 80 8 -a 154 501 8 -a 154 276 4 -a 154 291 3 -a 154 973 2 -a 154 615 1 -a 154 345 5 -a 154 265 4 -a 154 795 6 -a 154 534 1 -a 154 497 8 -a 154 10 4 -a 154 560 10 -a 154 776 6 -a 154 32 5 -a 154 370 7 -a 154 440 9 -a 154 141 2 -a 154 298 8 -a 154 389 4 -a 154 257 6 -a 154 706 2 -a 154 514 1 -a 154 692 7 -a 154 330 2 -a 154 91 5 -a 154 394 10 -a 154 646 7 -a 154 782 5 -a 155 402 8 -a 155 725 5 -a 155 258 2 -a 155 677 7 -a 155 207 6 -a 155 268 5 -a 155 336 4 -a 155 471 8 -a 155 38 5 -a 155 330 9 -a 155 534 3 -a 155 339 7 -a 155 540 10 -a 155 285 1 -a 155 370 1 -a 155 909 2 -a 155 725 5 -a 155 511 3 -a 155 182 9 -a 155 89 2 -a 155 767 7 -a 155 888 4 -a 155 602 4 -a 155 434 5 -a 155 193 3 -a 155 692 1 -a 155 828 7 -a 155 838 7 -a 155 450 10 -a 155 205 3 -a 155 538 9 -a 155 707 6 -a 155 882 2 -a 155 529 9 -a 155 913 4 -a 155 125 9 -a 155 865 6 -a 155 359 7 -a 155 162 6 -a 155 170 8 -a 155 339 9 -a 155 696 7 -a 155 508 9 -a 155 878 7 -a 155 980 10 -a 155 877 8 -a 155 762 4 -a 155 680 5 -a 155 363 4 -a 155 943 3 -a 155 768 8 -a 155 105 4 -a 155 806 5 -a 155 346 9 -a 155 539 8 -a 155 998 2 -a 155 13 7 -a 155 342 5 -a 155 811 1 -a 155 462 3 -a 155 546 6 -a 155 325 5 -a 155 145 4 -a 155 403 9 -a 155 853 5 -a 155 33 1 -a 155 527 8 -a 155 693 1 -a 155 392 4 -a 155 689 10 -a 155 862 7 -a 155 730 1 -a 155 360 2 -a 155 345 9 -a 155 583 4 -a 155 315 1 -a 155 198 1 -a 155 320 1 -a 155 995 5 -a 155 560 2 -a 155 238 10 -a 155 738 6 -a 155 665 6 -a 155 20 9 -a 155 59 5 -a 155 179 9 -a 155 72 4 -a 155 520 3 -a 155 804 10 -a 155 533 4 -a 155 41 5 -a 155 104 4 -a 155 677 5 -a 155 444 2 -a 155 956 3 -a 155 710 2 -a 155 970 10 -a 155 625 7 -a 155 77 3 -a 155 634 7 -a 155 462 8 -a 155 806 7 -a 155 993 8 -a 155 807 1 -a 156 364 6 -a 156 284 2 -a 156 683 6 -a 156 254 4 -a 156 539 9 -a 156 920 6 -a 156 991 8 -a 156 179 2 -a 156 939 9 -a 156 26 5 -a 156 357 7 -a 156 932 8 -a 156 97 1 -a 156 876 2 -a 156 711 4 -a 156 629 4 -a 156 917 2 -a 156 814 5 -a 156 282 4 -a 156 336 10 -a 156 745 10 -a 156 991 4 -a 156 281 3 -a 156 345 3 -a 156 43 1 -a 156 915 8 -a 156 807 8 -a 156 848 6 -a 156 883 3 -a 156 589 4 -a 156 187 6 -a 156 142 4 -a 156 568 7 -a 156 869 3 -a 156 395 4 -a 156 82 2 -a 156 764 6 -a 156 362 3 -a 156 261 10 -a 156 679 6 -a 156 387 4 -a 156 617 6 -a 156 586 3 -a 156 483 7 -a 156 469 3 -a 156 272 3 -a 156 87 5 -a 156 361 6 -a 156 61 9 -a 156 368 7 -a 156 696 10 -a 156 805 1 -a 156 334 2 -a 156 976 2 -a 156 126 2 -a 156 376 8 -a 156 866 4 -a 156 932 1 -a 156 199 10 -a 156 725 4 -a 156 496 1 -a 156 385 3 -a 156 866 9 -a 156 39 7 -a 156 229 8 -a 156 237 5 -a 156 120 5 -a 156 993 10 -a 156 598 5 -a 156 380 9 -a 156 647 10 -a 156 984 5 -a 156 997 7 -a 156 208 10 -a 156 442 6 -a 156 441 9 -a 156 479 7 -a 156 528 2 -a 156 801 7 -a 156 539 1 -a 156 896 2 -a 156 472 3 -a 156 319 4 -a 156 205 7 -a 156 423 10 -a 156 444 3 -a 156 581 2 -a 156 265 7 -a 156 351 8 -a 156 779 4 -a 156 989 4 -a 156 846 1 -a 156 140 3 -a 156 830 6 -a 157 884 7 -a 157 368 3 -a 157 42 1 -a 157 336 4 -a 157 639 2 -a 157 359 3 -a 157 982 6 -a 157 598 7 -a 157 331 1 -a 157 165 9 -a 157 15 2 -a 157 771 4 -a 157 643 3 -a 157 543 7 -a 157 547 10 -a 157 157 1 -a 157 414 6 -a 157 476 6 -a 157 618 8 -a 157 417 7 -a 157 919 9 -a 157 174 6 -a 157 681 5 -a 157 246 5 -a 157 953 1 -a 157 645 3 -a 157 67 4 -a 157 68 2 -a 157 450 3 -a 157 951 3 -a 157 435 6 -a 157 492 4 -a 157 930 2 -a 157 771 4 -a 157 106 2 -a 157 264 4 -a 157 728 2 -a 157 704 7 -a 157 595 8 -a 157 893 4 -a 157 718 4 -a 157 341 4 -a 157 511 9 -a 157 236 3 -a 157 888 9 -a 157 668 9 -a 157 649 7 -a 157 881 4 -a 157 119 9 -a 157 243 9 -a 157 273 7 -a 157 13 10 -a 157 416 8 -a 157 953 10 -a 157 258 8 -a 157 344 10 -a 157 573 2 -a 157 325 8 -a 157 411 5 -a 157 251 9 -a 157 846 2 -a 157 490 2 -a 157 156 6 -a 157 592 9 -a 157 595 1 -a 157 419 2 -a 157 295 4 -a 157 274 3 -a 157 163 5 -a 157 992 6 -a 157 330 4 -a 157 674 4 -a 157 203 6 -a 157 193 8 -a 157 317 3 -a 157 852 2 -a 157 49 5 -a 157 435 5 -a 157 70 3 -a 157 322 10 -a 157 447 3 -a 157 485 10 -a 157 250 5 -a 157 705 7 -a 157 829 5 -a 157 823 9 -a 157 5 1 -a 157 215 9 -a 157 821 8 -a 157 255 6 -a 157 36 9 -a 157 286 9 -a 157 410 6 -a 157 627 7 -a 157 880 4 -a 157 828 10 -a 157 922 5 -a 157 130 3 -a 158 817 7 -a 158 60 8 -a 158 97 6 -a 158 122 1 -a 158 733 1 -a 158 299 10 -a 158 314 8 -a 158 25 8 -a 158 126 7 -a 158 362 8 -a 158 459 5 -a 158 195 2 -a 158 683 10 -a 158 906 10 -a 158 680 2 -a 158 933 4 -a 158 586 7 -a 158 484 7 -a 158 731 10 -a 158 590 4 -a 158 698 3 -a 158 527 2 -a 158 844 1 -a 158 734 4 -a 158 812 7 -a 158 229 2 -a 158 336 9 -a 158 667 7 -a 158 32 2 -a 158 233 2 -a 158 796 9 -a 158 848 10 -a 158 293 6 -a 158 892 3 -a 158 969 1 -a 158 1 7 -a 158 167 8 -a 158 258 6 -a 158 26 8 -a 158 292 10 -a 158 620 1 -a 158 484 4 -a 158 487 6 -a 158 278 2 -a 158 365 4 -a 158 142 6 -a 158 186 10 -a 158 950 1 -a 158 625 3 -a 158 916 2 -a 158 515 8 -a 158 298 7 -a 158 418 7 -a 158 334 8 -a 158 7 4 -a 158 205 9 -a 158 562 8 -a 158 343 10 -a 158 872 4 -a 158 594 7 -a 158 575 1 -a 158 643 2 -a 158 417 9 -a 158 867 6 -a 158 511 1 -a 158 362 6 -a 158 868 8 -a 158 677 4 -a 158 619 7 -a 158 893 3 -a 158 968 4 -a 158 214 10 -a 158 352 10 -a 158 430 4 -a 158 492 1 -a 158 717 9 -a 158 571 6 -a 158 677 7 -a 158 642 5 -a 158 171 8 -a 158 569 4 -a 158 133 3 -a 158 469 5 -a 158 986 1 -a 158 466 5 -a 158 475 10 -a 158 167 8 -a 158 4 2 -a 159 817 9 -a 159 14 9 -a 159 597 9 -a 159 368 8 -a 159 656 8 -a 159 210 1 -a 159 142 7 -a 159 350 4 -a 159 53 6 -a 159 818 10 -a 159 969 8 -a 159 945 10 -a 159 762 4 -a 159 158 1 -a 159 273 8 -a 159 167 9 -a 159 649 8 -a 159 989 6 -a 159 738 6 -a 159 302 6 -a 159 606 1 -a 159 908 4 -a 159 870 8 -a 159 738 10 -a 159 352 3 -a 159 831 6 -a 159 180 5 -a 159 827 10 -a 159 997 5 -a 159 183 7 -a 159 619 3 -a 159 779 4 -a 159 986 10 -a 159 642 9 -a 159 767 2 -a 159 172 6 -a 159 783 7 -a 159 93 5 -a 159 224 10 -a 159 577 5 -a 159 37 1 -a 159 145 4 -a 159 314 6 -a 159 194 9 -a 159 417 2 -a 159 480 7 -a 159 843 9 -a 159 381 8 -a 159 193 5 -a 159 120 5 -a 159 986 1 -a 159 77 1 -a 159 989 4 -a 159 700 4 -a 159 428 5 -a 159 795 1 -a 159 879 6 -a 159 230 1 -a 159 768 7 -a 159 37 2 -a 159 849 5 -a 159 753 10 -a 159 815 6 -a 159 810 6 -a 159 370 9 -a 159 557 7 -a 159 981 5 -a 159 129 10 -a 159 649 8 -a 159 181 8 -a 159 705 9 -a 159 685 2 -a 159 325 2 -a 159 879 2 -a 159 741 3 -a 159 473 2 -a 159 697 2 -a 159 97 1 -a 159 666 6 -a 159 816 6 -a 159 58 6 -a 159 742 1 -a 159 780 10 -a 159 757 5 -a 159 145 6 -a 159 550 9 -a 159 611 8 -a 159 375 4 -a 159 293 4 -a 159 647 9 -a 159 199 6 -a 159 22 9 -a 159 437 1 -a 159 391 2 -a 159 994 3 -a 159 965 3 -a 159 519 1 -a 159 618 2 -a 159 121 4 -a 159 199 2 -a 159 279 2 -a 159 445 6 -a 159 192 3 -a 159 133 4 -a 159 161 5 -a 159 665 2 -a 159 829 3 -a 159 257 5 -a 159 306 3 -a 159 620 10 -a 159 314 8 -a 160 23 3 -a 160 375 2 -a 160 47 6 -a 160 167 6 -a 160 924 10 -a 160 657 8 -a 160 541 4 -a 160 193 6 -a 160 280 9 -a 160 739 8 -a 160 214 7 -a 160 716 5 -a 160 723 7 -a 160 604 7 -a 160 685 5 -a 160 663 7 -a 160 99 6 -a 160 279 1 -a 160 783 4 -a 160 297 3 -a 160 557 4 -a 160 203 6 -a 160 489 8 -a 160 689 5 -a 160 363 4 -a 160 129 10 -a 160 493 8 -a 160 619 2 -a 160 434 8 -a 160 88 5 -a 160 932 10 -a 160 456 3 -a 160 462 9 -a 160 978 8 -a 160 622 9 -a 160 361 9 -a 160 611 3 -a 160 139 1 -a 160 553 6 -a 160 890 3 -a 160 877 7 -a 160 766 10 -a 160 581 10 -a 160 575 2 -a 160 346 5 -a 160 242 7 -a 160 213 10 -a 160 444 7 -a 160 520 5 -a 160 995 4 -a 160 740 9 -a 160 52 1 -a 160 173 5 -a 160 204 8 -a 160 740 10 -a 160 535 8 -a 160 332 9 -a 160 208 7 -a 160 129 2 -a 160 765 1 -a 160 295 10 -a 160 37 6 -a 160 196 10 -a 160 756 3 -a 160 818 5 -a 160 92 6 -a 160 600 3 -a 160 956 8 -a 160 645 3 -a 160 465 2 -a 160 808 8 -a 160 386 8 -a 160 22 10 -a 160 359 5 -a 160 731 4 -a 160 263 3 -a 160 571 2 -a 160 150 2 -a 160 782 2 -a 160 542 3 -a 160 890 10 -a 160 833 2 -a 160 714 1 -a 160 69 7 -a 160 548 1 -a 160 225 9 -a 160 401 4 -a 160 755 10 -a 160 353 6 -a 160 141 1 -a 160 25 3 -a 160 389 7 -a 160 337 8 -a 160 780 10 -a 160 379 3 -a 160 130 8 -a 160 871 4 -a 160 978 7 -a 160 61 9 -a 160 491 6 -a 160 419 10 -a 161 868 6 -a 161 877 6 -a 161 440 4 -a 161 202 5 -a 161 583 6 -a 161 702 3 -a 161 773 5 -a 161 733 7 -a 161 459 8 -a 161 290 6 -a 161 598 6 -a 161 267 6 -a 161 666 8 -a 161 814 3 -a 161 203 1 -a 161 42 3 -a 161 544 8 -a 161 556 5 -a 161 183 4 -a 161 568 5 -a 161 944 8 -a 161 519 10 -a 161 323 6 -a 161 298 2 -a 161 648 9 -a 161 169 6 -a 161 252 5 -a 161 708 2 -a 161 660 9 -a 161 670 7 -a 161 551 8 -a 161 512 1 -a 161 85 5 -a 161 753 5 -a 161 70 1 -a 161 786 4 -a 161 501 2 -a 161 802 5 -a 161 220 7 -a 161 790 6 -a 161 375 1 -a 161 486 2 -a 161 768 8 -a 161 17 7 -a 161 275 9 -a 161 971 10 -a 161 58 9 -a 161 818 7 -a 161 502 6 -a 161 240 6 -a 161 361 10 -a 161 421 2 -a 161 758 2 -a 161 683 10 -a 161 719 6 -a 161 381 6 -a 161 851 9 -a 161 970 4 -a 161 64 2 -a 161 486 3 -a 161 615 6 -a 161 615 10 -a 161 997 10 -a 161 699 3 -a 161 343 8 -a 161 43 1 -a 161 460 1 -a 161 843 9 -a 161 844 7 -a 161 679 9 -a 161 608 2 -a 161 195 5 -a 161 140 8 -a 161 351 10 -a 161 211 1 -a 161 414 8 -a 161 297 7 -a 161 268 8 -a 161 207 1 -a 161 798 5 -a 161 508 9 -a 161 567 6 -a 161 195 4 -a 161 241 7 -a 161 225 2 -a 161 913 8 -a 161 622 9 -a 161 51 8 -a 161 858 1 -a 161 685 5 -a 161 537 6 -a 161 448 2 -a 161 275 5 -a 161 509 5 -a 161 122 9 -a 161 617 4 -a 161 551 8 -a 161 581 5 -a 161 435 3 -a 161 371 2 -a 161 235 10 -a 161 18 7 -a 161 565 5 -a 161 374 8 -a 161 369 8 -a 161 775 1 -a 161 787 6 -a 161 665 4 -a 162 18 1 -a 162 993 10 -a 162 439 9 -a 162 525 5 -a 162 535 10 -a 162 633 1 -a 162 766 3 -a 162 759 5 -a 162 521 10 -a 162 363 2 -a 162 809 4 -a 162 354 10 -a 162 23 9 -a 162 321 5 -a 162 801 10 -a 162 298 7 -a 162 830 5 -a 162 922 2 -a 162 914 1 -a 162 356 1 -a 162 478 10 -a 162 325 9 -a 162 726 8 -a 162 712 5 -a 162 342 6 -a 162 266 8 -a 162 61 3 -a 162 710 7 -a 162 16 10 -a 162 847 6 -a 162 351 3 -a 162 34 3 -a 162 815 2 -a 162 789 7 -a 162 558 7 -a 162 325 1 -a 162 397 4 -a 162 299 5 -a 162 59 5 -a 162 917 1 -a 162 661 2 -a 162 867 8 -a 162 246 1 -a 162 684 2 -a 162 164 6 -a 162 22 10 -a 162 981 7 -a 162 993 3 -a 162 943 4 -a 162 870 10 -a 162 324 10 -a 162 396 3 -a 162 170 4 -a 162 26 5 -a 162 83 1 -a 162 512 8 -a 162 291 4 -a 162 143 2 -a 162 197 3 -a 162 307 2 -a 162 989 4 -a 162 547 6 -a 162 340 3 -a 162 779 6 -a 162 311 7 -a 162 897 5 -a 162 79 9 -a 162 707 6 -a 162 172 8 -a 162 137 3 -a 162 599 4 -a 162 832 1 -a 162 844 5 -a 162 491 7 -a 162 142 10 -a 162 865 7 -a 162 447 10 -a 162 110 4 -a 162 783 7 -a 162 293 2 -a 162 434 2 -a 162 154 8 -a 162 462 4 -a 162 459 10 -a 162 236 7 -a 162 973 4 -a 162 749 8 -a 162 378 5 -a 162 146 2 -a 162 31 7 -a 162 342 7 -a 162 692 10 -a 162 370 7 -a 162 96 4 -a 162 243 3 -a 162 174 7 -a 162 685 4 -a 162 414 2 -a 162 310 1 -a 162 260 5 -a 162 221 10 -a 162 289 4 -a 162 79 4 -a 162 712 3 -a 163 430 7 -a 163 944 6 -a 163 134 5 -a 163 540 5 -a 163 702 9 -a 163 426 6 -a 163 973 5 -a 163 856 5 -a 163 888 4 -a 163 407 6 -a 163 67 7 -a 163 836 5 -a 163 131 3 -a 163 445 9 -a 163 981 2 -a 163 162 3 -a 163 786 3 -a 163 649 4 -a 163 531 6 -a 163 882 6 -a 163 627 6 -a 163 773 3 -a 163 31 6 -a 163 287 1 -a 163 162 7 -a 163 341 5 -a 163 546 9 -a 163 383 3 -a 163 629 7 -a 163 625 7 -a 163 70 2 -a 163 34 6 -a 163 544 1 -a 163 203 8 -a 163 573 7 -a 163 221 10 -a 163 629 9 -a 163 521 1 -a 163 52 4 -a 163 492 1 -a 163 927 1 -a 163 119 9 -a 163 303 1 -a 163 34 6 -a 163 563 1 -a 163 260 10 -a 163 195 5 -a 163 324 2 -a 163 908 3 -a 163 725 3 -a 163 181 1 -a 163 510 4 -a 163 474 7 -a 163 212 2 -a 163 796 9 -a 163 635 9 -a 163 552 7 -a 163 318 1 -a 163 156 9 -a 163 942 2 -a 163 62 3 -a 163 189 5 -a 163 461 3 -a 163 265 9 -a 163 762 8 -a 163 681 6 -a 163 893 1 -a 163 258 10 -a 163 733 3 -a 163 360 2 -a 163 161 9 -a 163 851 5 -a 163 662 1 -a 163 194 6 -a 163 389 1 -a 163 921 5 -a 163 388 7 -a 163 712 1 -a 163 804 9 -a 163 88 9 -a 163 893 6 -a 163 289 1 -a 163 561 5 -a 163 80 2 -a 163 61 6 -a 163 172 4 -a 163 631 3 -a 163 378 10 -a 163 164 5 -a 163 786 7 -a 163 295 1 -a 163 226 6 -a 163 974 5 -a 164 755 5 -a 164 490 1 -a 164 711 10 -a 164 411 5 -a 164 358 6 -a 164 969 9 -a 164 119 3 -a 164 717 3 -a 164 105 4 -a 164 969 5 -a 164 354 9 -a 164 298 2 -a 164 333 7 -a 164 251 8 -a 164 685 1 -a 164 21 5 -a 164 30 2 -a 164 772 3 -a 164 913 6 -a 164 319 2 -a 164 309 3 -a 164 992 7 -a 164 379 7 -a 164 480 9 -a 164 598 8 -a 164 756 7 -a 164 643 10 -a 164 359 10 -a 164 26 3 -a 164 868 8 -a 164 308 7 -a 164 780 5 -a 164 333 10 -a 164 166 10 -a 164 690 1 -a 164 963 5 -a 164 285 3 -a 164 382 3 -a 164 43 7 -a 164 229 5 -a 164 736 6 -a 164 340 4 -a 164 562 1 -a 164 986 5 -a 164 582 6 -a 164 771 5 -a 164 470 4 -a 164 309 5 -a 164 55 1 -a 164 437 9 -a 164 687 3 -a 164 534 3 -a 164 10 9 -a 164 418 8 -a 164 153 9 -a 164 368 2 -a 164 443 5 -a 164 675 1 -a 164 198 3 -a 164 329 10 -a 164 669 6 -a 164 364 6 -a 164 607 8 -a 164 648 1 -a 164 376 4 -a 164 649 8 -a 164 876 2 -a 164 87 2 -a 164 988 9 -a 164 413 10 -a 164 48 2 -a 164 987 1 -a 164 994 4 -a 164 38 4 -a 164 734 3 -a 164 439 1 -a 164 347 8 -a 164 788 2 -a 164 875 1 -a 164 9 1 -a 164 298 6 -a 164 884 6 -a 164 427 3 -a 164 450 6 -a 164 227 10 -a 164 869 4 -a 164 445 8 -a 164 902 6 -a 164 43 6 -a 164 773 5 -a 164 546 1 -a 165 406 7 -a 165 767 10 -a 165 129 8 -a 165 29 5 -a 165 118 7 -a 165 777 8 -a 165 904 6 -a 165 204 10 -a 165 741 9 -a 165 293 2 -a 165 251 1 -a 165 703 10 -a 165 262 1 -a 165 288 10 -a 165 412 6 -a 165 701 9 -a 165 634 4 -a 165 176 4 -a 165 551 1 -a 165 643 10 -a 165 473 10 -a 165 411 1 -a 165 45 2 -a 165 922 6 -a 165 637 1 -a 165 913 7 -a 165 342 1 -a 165 514 10 -a 165 955 7 -a 165 91 8 -a 165 36 1 -a 165 336 9 -a 165 857 7 -a 165 164 1 -a 165 364 10 -a 165 974 1 -a 165 940 5 -a 165 244 9 -a 165 153 10 -a 165 656 5 -a 165 536 4 -a 165 403 8 -a 165 335 5 -a 165 797 10 -a 165 690 2 -a 165 746 5 -a 165 473 2 -a 165 300 8 -a 165 921 4 -a 165 942 1 -a 165 369 8 -a 165 410 6 -a 165 986 1 -a 165 266 7 -a 165 22 5 -a 165 874 8 -a 165 608 9 -a 165 536 2 -a 165 805 8 -a 165 698 6 -a 165 571 6 -a 165 116 5 -a 165 530 7 -a 165 734 4 -a 165 480 8 -a 165 479 2 -a 165 649 3 -a 165 723 9 -a 165 631 10 -a 165 281 6 -a 165 234 9 -a 165 9 7 -a 165 615 4 -a 165 6 5 -a 165 698 9 -a 165 336 3 -a 165 479 10 -a 165 997 3 -a 165 233 1 -a 165 478 1 -a 165 914 9 -a 165 601 7 -a 165 887 2 -a 165 875 8 -a 165 867 8 -a 165 908 4 -a 165 725 3 -a 165 450 10 -a 165 419 6 -a 165 505 10 -a 165 123 2 -a 165 989 8 -a 165 620 10 -a 165 652 1 -a 165 698 2 -a 165 75 3 -a 165 106 7 -a 165 323 5 -a 166 797 2 -a 166 736 6 -a 166 603 1 -a 166 6 4 -a 166 744 2 -a 166 193 7 -a 166 12 10 -a 166 417 3 -a 166 528 7 -a 166 490 10 -a 166 390 1 -a 166 760 9 -a 166 967 6 -a 166 279 10 -a 166 337 5 -a 166 829 5 -a 166 130 5 -a 166 179 7 -a 166 712 8 -a 166 854 7 -a 166 628 6 -a 166 107 4 -a 166 334 2 -a 166 750 7 -a 166 71 2 -a 166 953 5 -a 166 377 8 -a 166 769 8 -a 166 4 10 -a 166 482 5 -a 166 67 4 -a 166 800 4 -a 166 193 5 -a 166 669 9 -a 166 806 9 -a 166 936 7 -a 166 861 9 -a 166 817 1 -a 166 328 2 -a 166 364 3 -a 166 282 3 -a 166 717 7 -a 166 100 7 -a 166 224 8 -a 166 996 6 -a 166 436 8 -a 166 28 9 -a 166 101 7 -a 166 614 4 -a 166 739 10 -a 166 954 9 -a 166 217 7 -a 166 845 2 -a 166 263 7 -a 166 966 8 -a 166 916 9 -a 166 191 4 -a 166 318 10 -a 166 660 8 -a 166 194 5 -a 166 799 8 -a 166 726 3 -a 166 994 10 -a 166 991 7 -a 166 370 10 -a 166 775 9 -a 166 902 10 -a 166 206 9 -a 166 567 5 -a 166 205 10 -a 166 569 1 -a 166 848 9 -a 166 922 10 -a 166 668 9 -a 166 47 4 -a 166 893 7 -a 166 79 2 -a 166 74 9 -a 166 993 10 -a 166 692 8 -a 166 812 6 -a 166 922 5 -a 166 908 7 -a 166 633 6 -a 166 160 6 -a 166 849 10 -a 166 524 3 -a 166 350 6 -a 166 142 3 -a 166 159 6 -a 166 544 2 -a 166 940 7 -a 166 884 2 -a 166 513 5 -a 166 906 3 -a 166 229 2 -a 166 263 1 -a 166 783 8 -a 166 434 4 -a 166 829 3 -a 166 988 5 -a 166 652 6 -a 166 885 5 -a 166 646 8 -a 166 698 1 -a 166 753 9 -a 166 724 2 -a 166 771 3 -a 166 721 4 -a 166 392 3 -a 166 558 7 -a 167 618 3 -a 167 275 9 -a 167 166 1 -a 167 777 10 -a 167 100 4 -a 167 689 5 -a 167 102 7 -a 167 241 2 -a 167 847 3 -a 167 645 4 -a 167 157 3 -a 167 706 8 -a 167 133 8 -a 167 38 8 -a 167 934 5 -a 167 395 10 -a 167 821 7 -a 167 343 5 -a 167 199 1 -a 167 784 4 -a 167 321 8 -a 167 850 5 -a 167 644 6 -a 167 966 9 -a 167 523 9 -a 167 372 4 -a 167 665 10 -a 167 269 2 -a 167 68 1 -a 167 32 4 -a 167 827 8 -a 167 685 4 -a 167 307 6 -a 167 992 4 -a 167 437 1 -a 167 406 5 -a 167 657 10 -a 167 538 6 -a 167 646 10 -a 167 479 1 -a 167 159 9 -a 167 802 5 -a 167 161 4 -a 167 291 2 -a 167 840 2 -a 167 70 6 -a 167 686 3 -a 167 636 3 -a 167 413 2 -a 167 884 6 -a 167 395 10 -a 167 733 5 -a 167 710 5 -a 167 14 8 -a 167 674 4 -a 167 208 1 -a 167 385 4 -a 167 314 6 -a 167 477 10 -a 167 452 7 -a 167 346 6 -a 167 279 3 -a 167 112 9 -a 167 652 4 -a 167 246 5 -a 167 548 5 -a 167 33 6 -a 167 902 9 -a 167 61 9 -a 167 678 5 -a 167 357 9 -a 167 219 4 -a 167 456 1 -a 167 517 5 -a 167 510 10 -a 167 271 3 -a 167 586 1 -a 167 171 7 -a 167 906 1 -a 167 998 3 -a 167 30 5 -a 167 276 1 -a 168 706 8 -a 168 739 4 -a 168 289 7 -a 168 355 8 -a 168 947 3 -a 168 673 5 -a 168 669 8 -a 168 399 2 -a 168 100 8 -a 168 677 4 -a 168 211 1 -a 168 641 8 -a 168 922 2 -a 168 758 5 -a 168 673 2 -a 168 800 7 -a 168 818 2 -a 168 326 4 -a 168 132 7 -a 168 13 9 -a 168 781 3 -a 168 648 9 -a 168 522 2 -a 168 27 1 -a 168 209 9 -a 168 692 3 -a 168 932 3 -a 168 183 3 -a 168 721 6 -a 168 183 10 -a 168 888 7 -a 168 436 6 -a 168 471 8 -a 168 219 3 -a 168 358 9 -a 168 119 2 -a 168 887 9 -a 168 756 10 -a 168 218 6 -a 168 876 3 -a 168 408 8 -a 168 428 5 -a 168 492 5 -a 168 305 10 -a 168 161 10 -a 168 140 3 -a 168 80 4 -a 168 979 1 -a 168 465 8 -a 168 211 8 -a 168 991 5 -a 168 222 3 -a 168 858 3 -a 168 488 9 -a 168 248 5 -a 168 43 2 -a 168 155 7 -a 168 156 1 -a 168 225 4 -a 168 875 9 -a 168 338 3 -a 168 88 8 -a 168 286 3 -a 168 809 2 -a 168 306 5 -a 168 643 5 -a 168 927 10 -a 168 168 3 -a 168 374 2 -a 168 121 1 -a 168 19 3 -a 168 781 10 -a 168 548 1 -a 168 510 10 -a 168 62 1 -a 168 709 7 -a 168 649 1 -a 168 141 2 -a 168 663 2 -a 168 90 2 -a 168 352 4 -a 168 629 4 -a 168 311 2 -a 168 185 4 -a 168 92 2 -a 168 558 2 -a 168 227 9 -a 168 246 2 -a 168 713 9 -a 168 451 7 -a 168 96 5 -a 168 27 7 -a 168 539 6 -a 168 382 6 -a 168 835 8 -a 168 844 2 -a 168 737 3 -a 168 374 10 -a 168 857 2 -a 168 6 4 -a 168 130 3 -a 169 381 2 -a 169 516 6 -a 169 191 1 -a 169 65 1 -a 169 140 5 -a 169 332 5 -a 169 727 3 -a 169 229 6 -a 169 683 8 -a 169 331 2 -a 169 539 7 -a 169 867 7 -a 169 422 9 -a 169 73 1 -a 169 70 8 -a 169 667 4 -a 169 785 7 -a 169 520 9 -a 169 762 7 -a 169 811 9 -a 169 34 10 -a 169 119 2 -a 169 621 10 -a 169 878 10 -a 169 119 7 -a 169 334 10 -a 169 865 5 -a 169 492 4 -a 169 166 10 -a 169 870 2 -a 169 621 9 -a 169 546 2 -a 169 361 9 -a 169 812 9 -a 169 610 3 -a 169 501 5 -a 169 119 3 -a 169 312 6 -a 169 729 3 -a 169 801 1 -a 169 642 2 -a 169 244 8 -a 169 643 5 -a 169 39 9 -a 169 316 2 -a 169 712 3 -a 169 705 3 -a 169 76 3 -a 169 208 6 -a 169 443 6 -a 169 887 1 -a 169 241 7 -a 169 561 9 -a 169 483 5 -a 169 94 5 -a 169 679 9 -a 169 816 7 -a 169 958 6 -a 169 146 7 -a 169 982 9 -a 169 804 5 -a 169 767 9 -a 169 503 8 -a 169 140 7 -a 169 554 6 -a 169 89 5 -a 169 640 2 -a 169 672 4 -a 169 400 10 -a 169 345 2 -a 169 448 7 -a 169 18 5 -a 169 588 2 -a 169 66 2 -a 169 56 9 -a 169 903 1 -a 169 778 7 -a 169 761 9 -a 169 978 5 -a 169 985 5 -a 169 179 2 -a 169 840 4 -a 169 201 4 -a 169 739 6 -a 170 299 2 -a 170 295 6 -a 170 394 9 -a 170 90 7 -a 170 228 8 -a 170 539 1 -a 170 47 3 -a 170 7 9 -a 170 281 8 -a 170 550 10 -a 170 147 6 -a 170 834 3 -a 170 638 2 -a 170 786 3 -a 170 481 8 -a 170 13 3 -a 170 106 10 -a 170 928 1 -a 170 30 2 -a 170 693 7 -a 170 994 1 -a 170 86 10 -a 170 571 2 -a 170 747 7 -a 170 846 1 -a 170 525 10 -a 170 707 3 -a 170 340 4 -a 170 907 1 -a 170 738 5 -a 170 638 10 -a 170 177 8 -a 170 107 9 -a 170 728 9 -a 170 405 3 -a 170 646 3 -a 170 774 2 -a 170 411 1 -a 170 926 6 -a 170 299 4 -a 170 557 3 -a 170 736 10 -a 170 936 3 -a 170 319 9 -a 170 192 7 -a 170 949 1 -a 170 424 1 -a 170 96 4 -a 170 978 8 -a 170 93 6 -a 170 65 7 -a 170 39 1 -a 170 663 2 -a 170 811 10 -a 170 884 9 -a 170 163 2 -a 170 493 8 -a 170 883 5 -a 170 503 6 -a 170 375 5 -a 170 597 7 -a 170 116 7 -a 170 552 9 -a 170 703 10 -a 170 843 3 -a 170 956 8 -a 170 324 2 -a 170 593 8 -a 170 342 6 -a 170 226 6 -a 170 891 4 -a 170 899 10 -a 170 961 9 -a 170 803 4 -a 170 193 1 -a 170 128 2 -a 170 727 6 -a 170 616 10 -a 170 223 3 -a 170 680 6 -a 170 708 5 -a 170 287 8 -a 170 719 10 -a 170 347 5 -a 170 73 6 -a 170 578 9 -a 170 509 10 -a 170 565 3 -a 170 437 4 -a 170 940 9 -a 170 9 8 -a 170 103 2 -a 170 467 9 -a 170 711 8 -a 170 945 6 -a 170 398 1 -a 170 11 5 -a 170 513 2 -a 170 739 1 -a 170 236 8 -a 170 380 1 -a 170 613 10 -a 170 172 4 -a 170 158 5 -a 170 805 1 -a 171 299 10 -a 171 884 6 -a 171 397 7 -a 171 522 2 -a 171 539 3 -a 171 80 4 -a 171 808 5 -a 171 233 1 -a 171 426 6 -a 171 881 10 -a 171 811 10 -a 171 935 10 -a 171 421 10 -a 171 223 1 -a 171 921 3 -a 171 336 4 -a 171 231 1 -a 171 802 1 -a 171 941 1 -a 171 944 8 -a 171 175 8 -a 171 951 7 -a 171 432 9 -a 171 914 1 -a 171 162 4 -a 171 811 1 -a 171 502 3 -a 171 333 5 -a 171 968 10 -a 171 283 8 -a 171 632 8 -a 171 827 10 -a 171 679 3 -a 171 129 3 -a 171 342 1 -a 171 758 10 -a 171 936 8 -a 171 574 8 -a 171 160 2 -a 171 792 4 -a 171 360 1 -a 171 70 6 -a 171 189 10 -a 171 582 2 -a 171 990 9 -a 171 524 10 -a 171 812 2 -a 171 989 2 -a 171 302 8 -a 171 729 4 -a 171 908 4 -a 171 476 1 -a 171 655 1 -a 171 315 4 -a 171 365 8 -a 171 817 4 -a 171 102 3 -a 171 867 7 -a 171 125 10 -a 171 45 8 -a 171 125 7 -a 171 756 6 -a 171 872 5 -a 171 803 9 -a 171 884 1 -a 171 189 6 -a 171 536 2 -a 171 796 7 -a 171 762 2 -a 171 695 5 -a 171 563 5 -a 171 98 6 -a 171 764 2 -a 171 751 9 -a 171 679 9 -a 171 730 2 -a 171 251 6 -a 171 467 5 -a 171 694 9 -a 171 552 3 -a 171 171 8 -a 171 577 6 -a 171 3 2 -a 171 825 7 -a 171 891 9 -a 171 368 1 -a 171 617 8 -a 171 992 4 -a 171 210 10 -a 171 742 4 -a 171 13 5 -a 171 334 5 -a 171 473 4 -a 171 884 9 -a 171 112 6 -a 171 333 4 -a 171 48 5 -a 171 647 9 -a 171 104 3 -a 171 809 7 -a 171 318 1 -a 171 666 2 -a 171 906 8 -a 171 57 3 -a 171 393 4 -a 171 561 10 -a 171 786 9 -a 171 643 3 -a 171 3 3 -a 171 455 4 -a 171 170 4 -a 171 173 10 -a 171 7 7 -a 171 172 5 -a 171 997 1 -a 171 898 2 -a 171 539 8 -a 171 590 9 -a 171 865 10 -a 171 748 2 -a 171 307 7 -a 171 877 2 -a 171 57 4 -a 171 779 5 -a 171 736 6 -a 172 168 4 -a 172 87 1 -a 172 783 9 -a 172 815 9 -a 172 190 9 -a 172 568 3 -a 172 108 6 -a 172 856 8 -a 172 449 7 -a 172 164 3 -a 172 224 5 -a 172 950 6 -a 172 866 2 -a 172 380 4 -a 172 11 2 -a 172 159 8 -a 172 387 5 -a 172 182 8 -a 172 132 6 -a 172 260 4 -a 172 721 4 -a 172 721 4 -a 172 100 7 -a 172 444 1 -a 172 3 8 -a 172 977 7 -a 172 501 10 -a 172 781 7 -a 172 688 9 -a 172 668 8 -a 172 868 3 -a 172 447 6 -a 172 458 3 -a 172 33 2 -a 172 565 6 -a 172 888 4 -a 172 438 1 -a 172 729 5 -a 172 87 3 -a 172 423 4 -a 172 654 8 -a 172 952 6 -a 172 409 3 -a 172 9 10 -a 172 962 7 -a 172 568 7 -a 172 395 3 -a 172 120 1 -a 172 699 9 -a 172 654 8 -a 172 840 2 -a 172 395 7 -a 172 754 7 -a 172 259 4 -a 172 397 3 -a 172 706 4 -a 172 759 1 -a 172 153 4 -a 172 369 5 -a 172 403 2 -a 172 815 8 -a 172 860 7 -a 172 29 7 -a 172 804 10 -a 172 401 9 -a 172 916 6 -a 172 218 4 -a 172 105 2 -a 172 640 10 -a 172 758 4 -a 172 930 7 -a 172 24 5 -a 172 766 6 -a 172 868 6 -a 172 591 2 -a 172 137 7 -a 172 987 1 -a 172 265 3 -a 172 790 2 -a 172 802 4 -a 172 659 4 -a 172 519 3 -a 172 36 9 -a 172 31 1 -a 172 200 8 -a 172 795 1 -a 172 184 6 -a 172 569 2 -a 172 173 2 -a 172 179 5 -a 172 359 6 -a 172 8 4 -a 173 207 2 -a 173 139 9 -a 173 408 3 -a 173 99 6 -a 173 356 5 -a 173 512 4 -a 173 77 3 -a 173 995 4 -a 173 245 6 -a 173 849 2 -a 173 585 3 -a 173 123 8 -a 173 811 5 -a 173 849 6 -a 173 912 10 -a 173 588 4 -a 173 484 3 -a 173 407 3 -a 173 624 5 -a 173 514 7 -a 173 606 5 -a 173 394 6 -a 173 697 10 -a 173 150 3 -a 173 566 6 -a 173 876 4 -a 173 509 5 -a 173 573 5 -a 173 58 6 -a 173 647 9 -a 173 981 9 -a 173 156 6 -a 173 468 3 -a 173 232 3 -a 173 972 1 -a 173 713 7 -a 173 214 1 -a 173 965 2 -a 173 699 4 -a 173 38 4 -a 173 525 8 -a 173 821 8 -a 173 849 9 -a 173 350 2 -a 173 708 1 -a 173 412 7 -a 173 833 1 -a 173 90 3 -a 173 11 6 -a 173 322 10 -a 173 696 2 -a 173 404 5 -a 173 845 10 -a 173 969 3 -a 173 870 1 -a 173 329 5 -a 173 518 2 -a 173 927 1 -a 173 975 1 -a 173 474 4 -a 173 59 3 -a 173 952 8 -a 173 941 5 -a 173 290 8 -a 173 899 6 -a 173 629 4 -a 173 503 3 -a 173 840 6 -a 173 303 4 -a 173 541 5 -a 173 340 2 -a 173 99 9 -a 173 365 4 -a 173 689 7 -a 173 807 8 -a 173 776 4 -a 173 497 3 -a 173 896 1 -a 173 787 1 -a 173 819 1 -a 173 567 8 -a 173 166 10 -a 173 813 5 -a 173 388 2 -a 173 111 1 -a 173 658 5 -a 173 716 5 -a 173 628 6 -a 173 560 2 -a 173 667 5 -a 173 77 3 -a 173 618 5 -a 173 594 6 -a 173 908 4 -a 173 469 7 -a 173 622 7 -a 173 386 6 -a 173 284 7 -a 173 924 5 -a 173 926 1 -a 173 623 3 -a 173 266 2 -a 173 288 2 -a 173 805 2 -a 173 18 3 -a 173 784 7 -a 173 676 5 -a 173 804 4 -a 173 578 10 -a 173 219 7 -a 173 969 6 -a 173 366 8 -a 173 606 5 -a 173 55 4 -a 174 297 1 -a 174 682 2 -a 174 559 8 -a 174 963 4 -a 174 758 8 -a 174 152 1 -a 174 533 9 -a 174 751 3 -a 174 35 10 -a 174 348 7 -a 174 421 2 -a 174 260 9 -a 174 247 9 -a 174 322 6 -a 174 882 6 -a 174 245 6 -a 174 588 10 -a 174 145 9 -a 174 25 10 -a 174 605 3 -a 174 929 6 -a 174 701 10 -a 174 384 2 -a 174 482 5 -a 174 919 9 -a 174 328 4 -a 174 848 7 -a 174 500 3 -a 174 383 7 -a 174 846 4 -a 174 796 8 -a 174 40 6 -a 174 380 1 -a 174 735 4 -a 174 798 10 -a 174 532 5 -a 174 243 2 -a 174 524 6 -a 174 566 9 -a 174 219 3 -a 174 871 3 -a 174 986 8 -a 174 478 7 -a 174 93 2 -a 174 284 1 -a 174 335 5 -a 174 338 8 -a 174 871 2 -a 174 480 2 -a 174 362 6 -a 174 451 6 -a 174 384 2 -a 174 38 2 -a 174 834 4 -a 174 865 7 -a 174 956 7 -a 174 137 6 -a 174 688 10 -a 174 431 4 -a 174 519 4 -a 174 510 9 -a 174 203 5 -a 174 559 6 -a 174 889 8 -a 174 937 3 -a 174 332 4 -a 174 396 2 -a 174 155 4 -a 174 855 8 -a 174 962 9 -a 174 373 9 -a 174 701 10 -a 174 923 4 -a 174 850 2 -a 174 793 3 -a 174 182 1 -a 174 160 3 -a 174 106 1 -a 174 28 4 -a 174 639 9 -a 174 468 8 -a 174 478 9 -a 174 505 2 -a 174 287 10 -a 174 863 5 -a 174 437 7 -a 174 424 1 -a 174 526 9 -a 174 867 7 -a 174 942 1 -a 174 11 5 -a 174 45 7 -a 174 476 8 -a 174 900 2 -a 174 981 6 -a 174 807 10 -a 174 271 8 -a 174 111 9 -a 174 637 6 -a 174 208 1 -a 174 483 7 -a 174 313 9 -a 174 107 4 -a 174 308 10 -a 174 82 10 -a 174 288 3 -a 174 468 2 -a 174 187 2 -a 174 316 2 -a 174 82 6 -a 174 654 7 -a 174 793 4 -a 174 80 4 -a 174 135 9 -a 174 56 2 -a 174 942 6 -a 174 571 10 -a 174 479 1 -a 174 443 6 -a 174 413 7 -a 174 396 10 -a 174 454 8 -a 174 458 3 -a 175 872 2 -a 175 329 9 -a 175 414 2 -a 175 654 3 -a 175 599 4 -a 175 525 7 -a 175 267 7 -a 175 807 3 -a 175 579 8 -a 175 913 9 -a 175 291 2 -a 175 660 8 -a 175 176 7 -a 175 758 6 -a 175 847 10 -a 175 491 8 -a 175 839 7 -a 175 476 9 -a 175 260 1 -a 175 918 9 -a 175 610 5 -a 175 315 5 -a 175 835 10 -a 175 156 4 -a 175 793 10 -a 175 254 4 -a 175 569 3 -a 175 164 2 -a 175 707 6 -a 175 2 1 -a 175 11 10 -a 175 11 3 -a 175 415 3 -a 175 665 3 -a 175 609 1 -a 175 939 7 -a 175 931 3 -a 175 391 7 -a 175 922 5 -a 175 485 6 -a 175 279 3 -a 175 188 1 -a 175 121 10 -a 175 455 8 -a 175 945 6 -a 175 967 4 -a 175 945 10 -a 175 759 5 -a 175 418 5 -a 175 180 1 -a 175 653 7 -a 175 4 4 -a 175 494 10 -a 175 463 8 -a 175 159 10 -a 175 262 4 -a 175 716 3 -a 175 727 6 -a 175 426 10 -a 175 398 1 -a 175 728 10 -a 175 436 1 -a 175 408 8 -a 175 119 10 -a 175 76 5 -a 175 33 3 -a 175 383 4 -a 175 954 3 -a 175 467 3 -a 175 662 7 -a 175 117 7 -a 175 587 9 -a 175 92 3 -a 175 37 2 -a 175 529 7 -a 175 12 5 -a 175 796 6 -a 175 946 5 -a 175 192 1 -a 175 424 5 -a 175 949 10 -a 175 685 1 -a 175 886 2 -a 175 84 10 -a 175 947 4 -a 175 578 2 -a 175 810 3 -a 175 348 4 -a 175 975 2 -a 175 514 3 -a 175 783 1 -a 175 359 9 -a 175 632 6 -a 175 859 4 -a 175 351 8 -a 175 664 10 -a 175 840 2 -a 175 733 8 -a 175 594 8 -a 175 282 3 -a 175 370 1 -a 175 710 3 -a 175 868 6 -a 175 461 2 -a 175 747 5 -a 175 372 5 -a 175 473 8 -a 175 518 7 -a 175 294 7 -a 175 664 3 -a 175 941 10 -a 176 218 5 -a 176 324 5 -a 176 802 2 -a 176 301 5 -a 176 246 5 -a 176 355 7 -a 176 87 8 -a 176 593 3 -a 176 306 9 -a 176 600 4 -a 176 352 7 -a 176 664 7 -a 176 207 3 -a 176 186 9 -a 176 870 2 -a 176 1 6 -a 176 722 7 -a 176 439 4 -a 176 283 6 -a 176 68 3 -a 176 125 2 -a 176 126 1 -a 176 528 8 -a 176 871 7 -a 176 498 7 -a 176 1000 5 -a 176 364 9 -a 176 791 4 -a 176 639 3 -a 176 280 1 -a 176 963 5 -a 176 57 10 -a 176 285 3 -a 176 184 1 -a 176 412 6 -a 176 371 5 -a 176 777 4 -a 176 717 10 -a 176 970 7 -a 176 104 6 -a 176 356 10 -a 176 152 9 -a 176 289 10 -a 176 345 4 -a 176 289 2 -a 176 42 10 -a 176 436 9 -a 176 571 9 -a 176 109 8 -a 176 560 10 -a 176 697 9 -a 176 637 4 -a 176 406 1 -a 176 170 8 -a 176 612 1 -a 176 769 6 -a 176 960 5 -a 176 227 6 -a 176 24 1 -a 176 943 8 -a 176 165 1 -a 176 80 8 -a 176 203 6 -a 176 348 3 -a 176 491 5 -a 176 573 1 -a 176 100 7 -a 176 183 9 -a 176 518 4 -a 176 203 1 -a 176 538 2 -a 176 669 9 -a 176 491 6 -a 176 882 1 -a 176 666 4 -a 176 780 2 -a 176 924 8 -a 176 77 5 -a 176 326 8 -a 176 8 10 -a 176 636 7 -a 176 644 2 -a 176 17 10 -a 176 167 8 -a 176 232 2 -a 176 785 6 -a 176 102 10 -a 176 458 2 -a 176 808 2 -a 176 21 5 -a 176 622 5 -a 176 887 8 -a 176 223 1 -a 176 969 5 -a 176 354 3 -a 176 796 10 -a 176 45 7 -a 176 536 6 -a 176 289 3 -a 176 247 10 -a 176 50 9 -a 176 958 8 -a 176 738 6 -a 176 931 2 -a 176 599 4 -a 176 493 8 -a 176 830 8 -a 176 675 9 -a 176 818 9 -a 176 838 3 -a 176 286 2 -a 176 816 4 -a 176 457 6 -a 176 302 1 -a 176 982 1 -a 176 688 10 -a 176 62 7 -a 176 60 10 -a 176 121 5 -a 177 869 2 -a 177 80 5 -a 177 742 8 -a 177 731 1 -a 177 302 8 -a 177 687 8 -a 177 60 4 -a 177 73 7 -a 177 731 1 -a 177 596 10 -a 177 362 8 -a 177 977 6 -a 177 645 4 -a 177 295 7 -a 177 690 4 -a 177 551 10 -a 177 893 10 -a 177 158 5 -a 177 357 3 -a 177 543 10 -a 177 976 5 -a 177 170 9 -a 177 828 9 -a 177 767 6 -a 177 626 10 -a 177 105 1 -a 177 724 10 -a 177 290 1 -a 177 166 9 -a 177 783 9 -a 177 410 4 -a 177 10 2 -a 177 862 6 -a 177 128 2 -a 177 740 7 -a 177 140 9 -a 177 814 5 -a 177 800 4 -a 177 212 2 -a 177 520 2 -a 177 371 5 -a 177 573 8 -a 177 472 6 -a 177 867 5 -a 177 138 1 -a 177 541 5 -a 177 735 5 -a 177 295 9 -a 177 897 2 -a 177 253 2 -a 177 246 2 -a 177 42 8 -a 177 56 7 -a 177 668 4 -a 177 160 1 -a 177 712 3 -a 177 957 5 -a 177 325 5 -a 177 470 1 -a 177 342 2 -a 177 334 6 -a 177 308 6 -a 177 469 10 -a 177 50 4 -a 177 447 7 -a 177 258 4 -a 177 849 9 -a 177 658 5 -a 177 777 3 -a 177 195 9 -a 177 207 2 -a 177 225 10 -a 177 185 9 -a 177 49 5 -a 177 362 7 -a 177 725 8 -a 177 784 8 -a 177 656 7 -a 177 598 4 -a 177 12 5 -a 177 902 10 -a 177 639 1 -a 177 68 10 -a 177 889 5 -a 177 282 10 -a 177 227 4 -a 178 576 8 -a 178 214 1 -a 178 552 8 -a 178 22 4 -a 178 556 8 -a 178 885 5 -a 178 329 8 -a 178 934 10 -a 178 775 9 -a 178 258 8 -a 178 758 6 -a 178 408 1 -a 178 10 9 -a 178 952 3 -a 178 614 3 -a 178 234 3 -a 178 112 6 -a 178 663 1 -a 178 595 9 -a 178 837 10 -a 178 422 10 -a 178 227 9 -a 178 410 3 -a 178 433 3 -a 178 104 7 -a 178 24 5 -a 178 500 3 -a 178 992 6 -a 178 306 6 -a 178 727 6 -a 178 544 6 -a 178 519 2 -a 178 254 6 -a 178 565 9 -a 178 50 9 -a 178 114 4 -a 178 893 2 -a 178 50 9 -a 178 24 10 -a 178 643 6 -a 178 307 6 -a 178 781 6 -a 178 26 3 -a 178 316 7 -a 178 709 6 -a 178 640 1 -a 178 550 5 -a 178 820 9 -a 178 278 2 -a 178 120 10 -a 178 632 2 -a 178 699 8 -a 178 346 7 -a 178 17 5 -a 178 107 1 -a 178 449 7 -a 178 41 6 -a 178 607 5 -a 178 417 1 -a 178 346 9 -a 178 309 4 -a 178 960 1 -a 178 864 9 -a 178 562 10 -a 178 500 10 -a 178 914 5 -a 178 675 8 -a 178 368 6 -a 178 963 9 -a 178 698 2 -a 178 245 6 -a 178 455 5 -a 178 11 7 -a 178 560 6 -a 178 139 2 -a 178 650 10 -a 178 85 6 -a 178 958 9 -a 178 927 8 -a 178 205 9 -a 178 566 8 -a 178 601 2 -a 178 550 5 -a 178 582 1 -a 178 708 10 -a 178 999 6 -a 178 622 4 -a 178 290 4 -a 178 391 1 -a 178 967 9 -a 178 598 9 -a 178 326 7 -a 178 807 3 -a 178 135 2 -a 178 825 9 -a 178 696 2 -a 178 809 10 -a 178 168 4 -a 179 634 2 -a 179 483 3 -a 179 153 6 -a 179 878 10 -a 179 937 10 -a 179 163 7 -a 179 413 10 -a 179 51 6 -a 179 813 8 -a 179 498 4 -a 179 715 6 -a 179 702 7 -a 179 549 6 -a 179 292 7 -a 179 227 9 -a 179 107 5 -a 179 999 10 -a 179 201 6 -a 179 728 1 -a 179 264 9 -a 179 591 3 -a 179 671 10 -a 179 861 5 -a 179 916 8 -a 179 453 5 -a 179 995 10 -a 179 716 8 -a 179 124 4 -a 179 779 4 -a 179 883 2 -a 179 757 10 -a 179 237 8 -a 179 11 5 -a 179 610 9 -a 179 149 1 -a 179 174 2 -a 179 199 3 -a 179 986 5 -a 179 495 8 -a 179 183 1 -a 179 676 5 -a 179 172 7 -a 179 731 1 -a 179 967 6 -a 179 399 3 -a 179 837 6 -a 179 941 2 -a 179 599 8 -a 179 541 4 -a 179 180 10 -a 179 166 8 -a 179 187 8 -a 179 16 1 -a 179 57 4 -a 179 639 4 -a 179 773 5 -a 179 762 4 -a 179 765 7 -a 179 631 8 -a 179 494 1 -a 179 642 6 -a 179 79 9 -a 179 126 6 -a 179 815 9 -a 179 76 2 -a 179 324 1 -a 179 776 9 -a 179 571 10 -a 179 506 5 -a 179 427 1 -a 179 742 9 -a 179 213 4 -a 179 370 8 -a 179 116 4 -a 179 25 10 -a 179 286 10 -a 179 715 7 -a 179 565 6 -a 179 466 7 -a 179 880 7 -a 179 751 1 -a 179 481 8 -a 179 936 2 -a 179 365 7 -a 179 467 10 -a 179 684 6 -a 179 102 4 -a 179 207 7 -a 179 291 3 -a 179 595 7 -a 179 183 2 -a 179 932 2 -a 179 673 1 -a 180 308 9 -a 180 722 1 -a 180 749 3 -a 180 632 5 -a 180 473 8 -a 180 295 1 -a 180 113 7 -a 180 899 8 -a 180 12 10 -a 180 325 4 -a 180 244 7 -a 180 128 10 -a 180 350 8 -a 180 530 7 -a 180 842 4 -a 180 914 5 -a 180 995 9 -a 180 697 8 -a 180 641 8 -a 180 451 10 -a 180 608 8 -a 180 917 4 -a 180 268 2 -a 180 83 1 -a 180 99 5 -a 180 558 5 -a 180 677 10 -a 180 282 3 -a 180 465 1 -a 180 326 9 -a 180 589 6 -a 180 162 4 -a 180 50 4 -a 180 196 2 -a 180 634 9 -a 180 344 1 -a 180 309 4 -a 180 508 4 -a 180 355 4 -a 180 633 1 -a 180 752 8 -a 180 482 1 -a 180 982 2 -a 180 257 9 -a 180 299 5 -a 180 872 5 -a 180 227 10 -a 180 995 2 -a 180 488 5 -a 180 677 2 -a 180 579 7 -a 180 468 2 -a 180 570 5 -a 180 846 5 -a 180 550 2 -a 180 668 1 -a 180 379 2 -a 180 203 3 -a 180 949 10 -a 180 843 3 -a 180 528 1 -a 180 514 4 -a 180 577 1 -a 180 709 1 -a 180 613 5 -a 180 920 8 -a 180 96 5 -a 180 250 1 -a 180 626 6 -a 180 847 5 -a 180 732 3 -a 180 583 6 -a 180 79 1 -a 180 6 10 -a 180 430 1 -a 180 305 1 -a 180 917 4 -a 180 982 5 -a 180 555 6 -a 180 361 2 -a 180 527 5 -a 180 376 6 -a 180 910 2 -a 180 170 4 -a 180 754 9 -a 180 88 2 -a 180 95 4 -a 180 572 4 -a 180 615 7 -a 180 608 3 -a 180 551 8 -a 180 167 1 -a 180 292 1 -a 180 139 8 -a 180 62 1 -a 180 285 6 -a 180 234 2 -a 180 312 2 -a 180 910 7 -a 180 57 4 -a 180 19 5 -a 180 468 2 -a 180 135 3 -a 180 24 5 -a 180 898 9 -a 180 440 5 -a 180 790 6 -a 180 397 7 -a 180 554 2 -a 180 126 8 -a 180 923 7 -a 180 929 3 -a 180 12 3 -a 180 68 5 -a 180 658 5 -a 180 99 6 -a 180 162 8 -a 180 205 5 -a 180 714 7 -a 180 769 7 -a 180 755 4 -a 180 880 10 -a 180 37 10 -a 180 893 1 -a 180 942 3 -a 180 321 10 -a 181 103 7 -a 181 229 1 -a 181 206 10 -a 181 159 4 -a 181 247 2 -a 181 673 1 -a 181 293 7 -a 181 270 5 -a 181 546 3 -a 181 732 10 -a 181 270 9 -a 181 312 6 -a 181 104 3 -a 181 823 2 -a 181 437 8 -a 181 2 8 -a 181 728 9 -a 181 448 8 -a 181 70 7 -a 181 361 5 -a 181 547 3 -a 181 231 1 -a 181 566 2 -a 181 236 1 -a 181 1000 1 -a 181 296 9 -a 181 91 6 -a 181 12 6 -a 181 165 1 -a 181 8 3 -a 181 332 5 -a 181 267 10 -a 181 236 9 -a 181 537 6 -a 181 425 1 -a 181 482 4 -a 181 185 5 -a 181 717 8 -a 181 752 6 -a 181 731 5 -a 181 425 9 -a 181 18 9 -a 181 528 8 -a 181 819 9 -a 181 454 8 -a 181 530 10 -a 181 522 8 -a 181 902 5 -a 181 599 2 -a 181 883 10 -a 181 424 4 -a 181 829 5 -a 181 424 8 -a 181 659 6 -a 181 804 9 -a 181 719 2 -a 181 749 6 -a 181 815 8 -a 181 883 5 -a 181 757 3 -a 181 122 6 -a 181 125 4 -a 181 992 5 -a 181 658 4 -a 181 549 3 -a 181 450 10 -a 181 843 10 -a 181 242 9 -a 181 177 5 -a 181 549 5 -a 181 666 10 -a 181 173 2 -a 181 566 8 -a 181 169 2 -a 181 991 4 -a 181 698 10 -a 181 489 2 -a 181 896 7 -a 181 272 4 -a 181 347 10 -a 181 295 1 -a 181 77 2 -a 181 770 10 -a 181 953 9 -a 181 880 7 -a 181 464 5 -a 181 678 2 -a 181 671 2 -a 181 323 4 -a 181 410 6 -a 181 792 9 -a 181 447 8 -a 181 377 1 -a 181 426 8 -a 181 996 4 -a 181 826 5 -a 181 244 5 -a 181 213 9 -a 181 792 10 -a 181 878 1 -a 182 150 4 -a 182 333 6 -a 182 22 6 -a 182 117 5 -a 182 327 2 -a 182 720 3 -a 182 605 5 -a 182 199 7 -a 182 991 4 -a 182 951 4 -a 182 493 10 -a 182 43 2 -a 182 696 6 -a 182 422 1 -a 182 923 3 -a 182 135 10 -a 182 75 7 -a 182 569 5 -a 182 457 10 -a 182 484 9 -a 182 336 8 -a 182 904 3 -a 182 860 4 -a 182 761 3 -a 182 875 8 -a 182 662 6 -a 182 63 5 -a 182 639 7 -a 182 771 10 -a 182 940 5 -a 182 789 3 -a 182 79 9 -a 182 961 7 -a 182 905 4 -a 182 406 5 -a 182 656 1 -a 182 485 4 -a 182 604 9 -a 182 623 7 -a 182 411 6 -a 182 72 6 -a 182 665 10 -a 182 82 3 -a 182 493 8 -a 182 563 1 -a 182 216 5 -a 182 567 4 -a 182 107 9 -a 182 673 2 -a 182 26 8 -a 182 443 1 -a 182 552 1 -a 182 886 1 -a 182 179 7 -a 182 402 4 -a 182 523 9 -a 182 159 5 -a 182 464 4 -a 182 137 10 -a 182 929 6 -a 182 379 3 -a 182 925 5 -a 182 315 5 -a 182 805 4 -a 182 389 1 -a 182 971 8 -a 182 265 5 -a 182 992 8 -a 182 569 8 -a 182 675 8 -a 182 39 7 -a 182 209 8 -a 182 756 8 -a 182 532 1 -a 182 772 1 -a 182 972 6 -a 182 74 4 -a 182 878 10 -a 182 620 6 -a 182 100 6 -a 182 296 1 -a 182 147 2 -a 182 985 2 -a 182 475 4 -a 182 548 3 -a 182 483 2 -a 182 633 5 -a 182 619 6 -a 182 537 7 -a 182 365 2 -a 182 520 4 -a 182 520 10 -a 182 679 4 -a 182 300 7 -a 182 908 7 -a 182 625 9 -a 182 565 4 -a 182 875 6 -a 182 169 8 -a 182 215 9 -a 182 914 9 -a 182 378 7 -a 182 971 9 -a 182 421 4 -a 182 125 5 -a 182 918 8 -a 182 494 5 -a 182 513 3 -a 182 593 2 -a 182 274 10 -a 183 659 5 -a 183 553 5 -a 183 748 3 -a 183 182 1 -a 183 11 8 -a 183 356 4 -a 183 168 6 -a 183 630 5 -a 183 892 5 -a 183 532 2 -a 183 125 3 -a 183 388 7 -a 183 186 4 -a 183 424 4 -a 183 271 10 -a 183 811 5 -a 183 988 5 -a 183 122 3 -a 183 979 1 -a 183 179 7 -a 183 11 1 -a 183 332 1 -a 183 125 9 -a 183 431 10 -a 183 456 2 -a 183 18 4 -a 183 924 8 -a 183 434 4 -a 183 530 10 -a 183 493 3 -a 183 707 8 -a 183 164 6 -a 183 21 6 -a 183 430 6 -a 183 345 6 -a 183 32 6 -a 183 785 7 -a 183 512 10 -a 183 661 6 -a 183 652 3 -a 183 19 5 -a 183 785 4 -a 183 15 3 -a 183 204 9 -a 183 184 10 -a 183 286 7 -a 183 148 7 -a 183 407 2 -a 183 969 8 -a 183 326 10 -a 183 417 3 -a 183 276 2 -a 183 450 2 -a 183 847 8 -a 183 732 7 -a 183 467 8 -a 183 746 3 -a 183 141 3 -a 183 996 2 -a 183 214 6 -a 183 847 5 -a 183 135 2 -a 183 235 2 -a 183 252 8 -a 183 479 2 -a 183 266 4 -a 183 12 4 -a 183 990 2 -a 183 926 5 -a 183 663 6 -a 183 686 4 -a 183 678 6 -a 183 187 1 -a 183 869 4 -a 183 963 8 -a 183 177 1 -a 183 345 5 -a 183 121 3 -a 183 317 10 -a 183 761 6 -a 183 396 8 -a 183 766 9 -a 183 583 8 -a 183 103 8 -a 183 208 9 -a 183 304 1 -a 183 243 3 -a 183 179 7 -a 183 518 5 -a 183 65 2 -a 183 313 4 -a 183 752 10 -a 183 316 3 -a 183 791 7 -a 183 327 5 -a 184 756 10 -a 184 918 7 -a 184 990 3 -a 184 739 10 -a 184 579 4 -a 184 643 1 -a 184 926 4 -a 184 423 8 -a 184 581 9 -a 184 78 7 -a 184 415 5 -a 184 925 2 -a 184 198 6 -a 184 731 4 -a 184 661 6 -a 184 593 2 -a 184 473 2 -a 184 219 8 -a 184 696 5 -a 184 680 10 -a 184 522 3 -a 184 938 2 -a 184 859 2 -a 184 15 1 -a 184 147 4 -a 184 766 1 -a 184 294 3 -a 184 938 9 -a 184 758 9 -a 184 621 2 -a 184 669 10 -a 184 651 1 -a 184 586 7 -a 184 384 2 -a 184 205 5 -a 184 204 7 -a 184 285 6 -a 184 628 2 -a 184 784 1 -a 184 362 7 -a 184 18 10 -a 184 684 1 -a 184 559 10 -a 184 748 9 -a 184 320 4 -a 184 127 7 -a 184 196 9 -a 184 538 5 -a 184 822 5 -a 184 876 7 -a 184 35 9 -a 184 736 5 -a 184 710 4 -a 184 50 2 -a 184 714 5 -a 184 856 9 -a 184 815 2 -a 184 769 2 -a 184 549 8 -a 184 603 10 -a 184 414 7 -a 184 175 5 -a 184 164 3 -a 184 797 2 -a 184 380 7 -a 184 367 8 -a 184 57 5 -a 184 126 2 -a 184 418 10 -a 184 809 10 -a 184 976 8 -a 184 747 2 -a 184 104 8 -a 184 78 1 -a 184 943 9 -a 184 641 8 -a 184 900 3 -a 184 794 7 -a 184 676 1 -a 184 611 9 -a 184 479 2 -a 184 725 6 -a 184 300 3 -a 184 310 3 -a 184 515 1 -a 184 282 3 -a 184 55 10 -a 184 39 6 -a 184 885 8 -a 184 468 3 -a 184 214 6 -a 184 24 5 -a 185 240 8 -a 185 593 4 -a 185 391 6 -a 185 296 2 -a 185 575 3 -a 185 516 5 -a 185 713 8 -a 185 574 6 -a 185 301 7 -a 185 664 8 -a 185 296 8 -a 185 404 6 -a 185 741 10 -a 185 214 2 -a 185 21 9 -a 185 616 10 -a 185 696 6 -a 185 202 4 -a 185 461 6 -a 185 396 1 -a 185 501 4 -a 185 771 10 -a 185 910 9 -a 185 783 6 -a 185 825 3 -a 185 949 5 -a 185 643 5 -a 185 268 10 -a 185 138 4 -a 185 666 1 -a 185 507 9 -a 185 730 6 -a 185 32 1 -a 185 802 2 -a 185 280 4 -a 185 548 4 -a 185 490 3 -a 185 853 3 -a 185 848 1 -a 185 129 6 -a 185 124 7 -a 185 227 6 -a 185 869 4 -a 185 338 4 -a 185 247 4 -a 185 461 1 -a 185 320 6 -a 185 942 8 -a 185 662 5 -a 185 781 5 -a 185 313 7 -a 185 139 8 -a 185 527 5 -a 185 199 4 -a 185 921 3 -a 185 327 5 -a 185 123 3 -a 185 539 7 -a 185 594 7 -a 185 260 5 -a 185 180 7 -a 185 76 1 -a 185 989 2 -a 185 212 8 -a 185 877 7 -a 185 244 10 -a 185 759 1 -a 185 342 1 -a 185 72 2 -a 185 582 7 -a 185 470 1 -a 185 195 6 -a 185 808 3 -a 185 314 6 -a 185 532 10 -a 185 31 3 -a 185 774 1 -a 185 852 5 -a 185 972 9 -a 185 412 5 -a 185 608 10 -a 185 261 7 -a 186 550 4 -a 186 110 7 -a 186 459 9 -a 186 446 2 -a 186 436 7 -a 186 581 9 -a 186 984 3 -a 186 5 5 -a 186 840 3 -a 186 139 9 -a 186 80 4 -a 186 804 2 -a 186 350 3 -a 186 956 9 -a 186 23 7 -a 186 84 5 -a 186 273 1 -a 186 94 8 -a 186 665 1 -a 186 742 4 -a 186 288 8 -a 186 449 10 -a 186 31 3 -a 186 820 4 -a 186 479 9 -a 186 805 6 -a 186 647 10 -a 186 426 2 -a 186 192 7 -a 186 230 10 -a 186 686 10 -a 186 741 4 -a 186 339 2 -a 186 120 4 -a 186 162 5 -a 186 774 2 -a 186 700 8 -a 186 121 1 -a 186 778 4 -a 186 515 3 -a 186 259 3 -a 186 857 8 -a 186 294 10 -a 186 609 5 -a 186 788 7 -a 186 316 6 -a 186 692 6 -a 186 36 6 -a 186 409 9 -a 186 333 10 -a 186 777 1 -a 186 697 7 -a 186 781 3 -a 186 807 7 -a 186 492 6 -a 186 235 2 -a 186 587 9 -a 186 114 9 -a 186 660 8 -a 186 778 4 -a 186 343 2 -a 186 322 5 -a 186 494 8 -a 186 681 5 -a 186 441 3 -a 186 655 8 -a 186 430 6 -a 186 117 3 -a 186 775 4 -a 186 183 2 -a 186 631 4 -a 186 10 10 -a 186 15 8 -a 186 925 5 -a 186 618 5 -a 186 802 6 -a 186 216 8 -a 186 285 4 -a 186 837 8 -a 186 625 3 -a 186 617 2 -a 186 589 3 -a 186 297 1 -a 186 373 5 -a 186 371 8 -a 186 788 7 -a 186 607 8 -a 186 958 9 -a 186 901 10 -a 186 243 9 -a 186 711 5 -a 186 219 8 -a 186 564 1 -a 186 181 2 -a 186 899 2 -a 186 835 3 -a 186 304 3 -a 186 96 7 -a 186 586 4 -a 186 486 7 -a 186 727 5 -a 186 595 5 -a 186 500 2 -a 186 627 3 -a 186 188 1 -a 186 277 10 -a 186 842 10 -a 186 472 5 -a 186 89 3 -a 186 442 2 -a 187 65 3 -a 187 677 4 -a 187 738 7 -a 187 437 3 -a 187 23 9 -a 187 501 8 -a 187 20 3 -a 187 980 8 -a 187 377 4 -a 187 262 9 -a 187 667 5 -a 187 595 8 -a 187 825 9 -a 187 847 3 -a 187 469 10 -a 187 804 10 -a 187 657 5 -a 187 772 9 -a 187 900 4 -a 187 218 8 -a 187 233 5 -a 187 602 8 -a 187 812 7 -a 187 732 4 -a 187 204 9 -a 187 999 5 -a 187 21 8 -a 187 447 7 -a 187 72 6 -a 187 463 8 -a 187 511 8 -a 187 748 8 -a 187 176 1 -a 187 947 6 -a 187 771 4 -a 187 677 10 -a 187 966 7 -a 187 726 9 -a 187 29 8 -a 187 203 2 -a 187 368 1 -a 187 624 7 -a 187 3 2 -a 187 190 3 -a 187 68 7 -a 187 807 6 -a 187 847 1 -a 187 840 6 -a 187 682 2 -a 187 40 7 -a 187 48 7 -a 187 259 10 -a 187 852 1 -a 187 780 5 -a 187 462 7 -a 187 826 7 -a 187 763 4 -a 187 482 1 -a 187 248 4 -a 187 835 9 -a 187 944 5 -a 187 758 1 -a 187 558 7 -a 187 96 1 -a 187 681 3 -a 187 304 5 -a 187 772 10 -a 187 622 5 -a 187 6 10 -a 187 800 7 -a 187 825 9 -a 187 373 9 -a 187 399 3 -a 187 827 9 -a 187 563 3 -a 187 467 9 -a 187 609 6 -a 187 385 1 -a 187 282 10 -a 187 266 7 -a 187 424 10 -a 187 329 2 -a 187 524 10 -a 187 251 6 -a 187 84 4 -a 187 985 4 -a 187 53 1 -a 187 847 7 -a 187 443 7 -a 187 300 3 -a 187 657 4 -a 188 362 9 -a 188 34 1 -a 188 190 1 -a 188 457 2 -a 188 714 10 -a 188 494 8 -a 188 204 10 -a 188 311 1 -a 188 499 2 -a 188 111 9 -a 188 871 8 -a 188 378 7 -a 188 938 1 -a 188 409 5 -a 188 844 1 -a 188 522 2 -a 188 793 4 -a 188 101 4 -a 188 788 3 -a 188 193 5 -a 188 430 6 -a 188 287 10 -a 188 443 8 -a 188 513 6 -a 188 248 9 -a 188 495 9 -a 188 335 7 -a 188 690 4 -a 188 795 4 -a 188 991 6 -a 188 27 5 -a 188 828 3 -a 188 157 1 -a 188 484 6 -a 188 517 3 -a 188 650 2 -a 188 687 6 -a 188 827 10 -a 188 124 4 -a 188 666 5 -a 188 938 8 -a 188 994 3 -a 188 20 3 -a 188 851 6 -a 188 379 10 -a 188 863 1 -a 188 348 3 -a 188 147 9 -a 188 964 8 -a 188 111 6 -a 188 339 4 -a 188 369 1 -a 188 398 3 -a 188 782 1 -a 188 881 4 -a 188 645 6 -a 188 252 6 -a 188 192 4 -a 188 310 4 -a 188 22 7 -a 188 158 8 -a 188 336 5 -a 188 849 10 -a 188 314 7 -a 188 819 7 -a 188 341 4 -a 188 963 1 -a 188 482 4 -a 188 144 5 -a 188 62 4 -a 188 123 9 -a 188 57 1 -a 188 32 1 -a 188 142 1 -a 188 907 1 -a 188 410 4 -a 188 230 1 -a 188 556 6 -a 188 944 9 -a 188 341 1 -a 188 895 8 -a 188 288 9 -a 188 738 6 -a 188 652 10 -a 188 144 6 -a 188 358 8 -a 188 903 6 -a 188 335 9 -a 188 667 9 -a 188 925 2 -a 188 493 8 -a 188 749 5 -a 188 806 6 -a 188 797 4 -a 188 66 7 -a 188 745 3 -a 188 254 5 -a 188 209 6 -a 188 806 3 -a 188 376 6 -a 188 265 1 -a 188 837 2 -a 188 518 9 -a 188 147 8 -a 188 222 10 -a 188 498 4 -a 188 376 2 -a 188 778 7 -a 188 417 1 -a 188 716 7 -a 188 648 3 -a 189 704 2 -a 189 429 6 -a 189 275 6 -a 189 847 9 -a 189 786 2 -a 189 153 5 -a 189 158 2 -a 189 428 10 -a 189 53 6 -a 189 650 5 -a 189 406 10 -a 189 802 1 -a 189 431 5 -a 189 178 1 -a 189 867 1 -a 189 151 7 -a 189 431 8 -a 189 51 8 -a 189 957 2 -a 189 806 6 -a 189 315 10 -a 189 769 10 -a 189 299 5 -a 189 461 9 -a 189 991 1 -a 189 796 7 -a 189 836 3 -a 189 744 3 -a 189 188 8 -a 189 528 8 -a 189 367 5 -a 189 891 6 -a 189 956 6 -a 189 641 6 -a 189 714 1 -a 189 718 10 -a 189 793 6 -a 189 871 1 -a 189 121 1 -a 189 846 4 -a 189 496 8 -a 189 526 8 -a 189 623 7 -a 189 926 1 -a 189 703 4 -a 189 465 2 -a 189 53 6 -a 189 109 9 -a 189 515 5 -a 189 915 5 -a 189 829 2 -a 189 753 1 -a 189 189 7 -a 189 265 10 -a 189 719 10 -a 189 985 7 -a 189 76 2 -a 189 438 10 -a 189 148 4 -a 189 603 1 -a 189 804 10 -a 189 15 2 -a 189 535 5 -a 189 420 5 -a 189 728 8 -a 189 228 7 -a 189 189 2 -a 189 574 10 -a 189 348 6 -a 189 10 1 -a 189 45 7 -a 189 874 10 -a 189 632 1 -a 189 970 1 -a 189 552 4 -a 189 72 4 -a 189 661 4 -a 189 586 8 -a 189 551 5 -a 189 390 3 -a 189 735 1 -a 189 739 10 -a 189 654 7 -a 189 429 1 -a 189 699 10 -a 189 729 1 -a 189 867 9 -a 189 847 10 -a 189 308 5 -a 189 646 10 -a 189 861 10 -a 189 842 2 -a 189 42 6 -a 189 564 5 -a 189 45 10 -a 190 230 6 -a 190 113 10 -a 190 392 9 -a 190 239 8 -a 190 157 6 -a 190 241 4 -a 190 870 4 -a 190 102 7 -a 190 793 6 -a 190 941 2 -a 190 100 9 -a 190 429 8 -a 190 502 8 -a 190 81 2 -a 190 979 5 -a 190 891 4 -a 190 815 7 -a 190 693 8 -a 190 520 8 -a 190 220 10 -a 190 368 1 -a 190 224 2 -a 190 62 10 -a 190 190 6 -a 190 531 1 -a 190 707 10 -a 190 26 7 -a 190 348 9 -a 190 748 6 -a 190 589 4 -a 190 392 7 -a 190 977 7 -a 190 701 2 -a 190 784 3 -a 190 191 8 -a 190 857 6 -a 190 36 7 -a 190 958 4 -a 190 792 5 -a 190 976 7 -a 190 33 6 -a 190 196 8 -a 190 453 9 -a 190 114 1 -a 190 150 7 -a 190 319 6 -a 190 928 6 -a 190 843 2 -a 190 838 9 -a 190 123 3 -a 190 186 5 -a 190 38 9 -a 190 184 7 -a 190 375 3 -a 190 568 6 -a 190 891 10 -a 190 400 4 -a 190 916 1 -a 190 614 4 -a 190 988 7 -a 190 283 9 -a 190 567 4 -a 190 664 8 -a 190 42 6 -a 190 757 3 -a 190 496 5 -a 190 42 9 -a 190 793 10 -a 190 429 9 -a 190 833 10 -a 190 744 3 -a 190 462 5 -a 190 5 7 -a 190 173 4 -a 190 575 1 -a 190 154 3 -a 190 491 3 -a 190 478 10 -a 190 996 9 -a 190 305 4 -a 190 601 9 -a 190 157 2 -a 190 342 8 -a 190 784 6 -a 190 531 4 -a 190 909 9 -a 190 650 5 -a 190 930 9 -a 190 800 9 -a 190 240 5 -a 190 893 3 -a 190 59 3 -a 190 806 5 -a 190 532 8 -a 190 100 1 -a 190 538 7 -a 190 3 3 -a 190 141 3 -a 190 306 4 -a 190 432 6 -a 190 974 5 -a 190 26 1 -a 190 893 10 -a 190 978 9 -a 190 198 4 -a 190 443 2 -a 190 107 6 -a 190 688 1 -a 190 920 8 -a 190 79 10 -a 191 992 5 -a 191 496 10 -a 191 235 6 -a 191 309 10 -a 191 256 7 -a 191 766 7 -a 191 194 10 -a 191 905 2 -a 191 671 5 -a 191 993 9 -a 191 120 8 -a 191 540 6 -a 191 27 5 -a 191 925 10 -a 191 47 8 -a 191 127 5 -a 191 439 1 -a 191 50 1 -a 191 267 6 -a 191 744 3 -a 191 481 9 -a 191 216 6 -a 191 769 10 -a 191 349 10 -a 191 169 5 -a 191 966 6 -a 191 791 10 -a 191 276 1 -a 191 630 5 -a 191 686 8 -a 191 354 1 -a 191 597 10 -a 191 158 7 -a 191 588 3 -a 191 906 4 -a 191 413 2 -a 191 329 3 -a 191 75 4 -a 191 293 8 -a 191 1000 3 -a 191 43 1 -a 191 413 8 -a 191 515 8 -a 191 70 2 -a 191 313 1 -a 191 561 8 -a 191 196 6 -a 191 751 6 -a 191 610 1 -a 191 462 6 -a 191 471 4 -a 191 66 6 -a 191 678 6 -a 191 215 9 -a 191 414 4 -a 191 846 6 -a 191 157 6 -a 191 180 1 -a 191 97 8 -a 191 786 8 -a 191 866 4 -a 191 450 7 -a 191 358 3 -a 191 14 1 -a 191 239 7 -a 191 411 10 -a 191 342 9 -a 191 313 5 -a 191 703 9 -a 191 317 6 -a 191 356 2 -a 191 91 2 -a 191 831 2 -a 191 425 8 -a 191 404 7 -a 191 368 10 -a 191 620 3 -a 191 130 10 -a 191 977 3 -a 191 57 10 -a 191 600 1 -a 191 19 2 -a 191 734 7 -a 191 815 8 -a 191 432 10 -a 191 556 2 -a 191 971 2 -a 191 612 7 -a 192 652 2 -a 192 732 4 -a 192 453 7 -a 192 78 1 -a 192 65 5 -a 192 451 8 -a 192 91 2 -a 192 304 2 -a 192 861 6 -a 192 432 1 -a 192 616 1 -a 192 539 10 -a 192 749 10 -a 192 971 2 -a 192 630 1 -a 192 555 3 -a 192 371 1 -a 192 9 4 -a 192 922 4 -a 192 990 10 -a 192 138 9 -a 192 875 1 -a 192 23 4 -a 192 738 3 -a 192 893 8 -a 192 756 6 -a 192 528 1 -a 192 300 3 -a 192 287 2 -a 192 474 2 -a 192 911 5 -a 192 939 2 -a 192 181 5 -a 192 339 3 -a 192 245 5 -a 192 789 1 -a 192 82 9 -a 192 548 4 -a 192 625 4 -a 192 513 3 -a 192 140 10 -a 192 140 1 -a 192 237 3 -a 192 86 5 -a 192 769 1 -a 192 792 7 -a 192 457 7 -a 192 777 8 -a 192 689 9 -a 192 422 4 -a 192 914 7 -a 192 539 7 -a 192 444 2 -a 192 627 7 -a 192 407 1 -a 192 176 10 -a 192 130 2 -a 192 707 3 -a 192 462 6 -a 192 603 1 -a 192 593 3 -a 192 376 10 -a 192 783 10 -a 192 932 1 -a 192 367 7 -a 192 4 1 -a 192 696 7 -a 192 448 9 -a 192 551 1 -a 192 297 9 -a 192 961 8 -a 192 690 8 -a 192 436 2 -a 192 173 9 -a 192 776 7 -a 192 180 3 -a 192 964 3 -a 192 208 9 -a 192 956 4 -a 192 629 6 -a 192 629 10 -a 192 845 9 -a 192 143 8 -a 192 49 3 -a 192 448 1 -a 192 550 6 -a 192 224 3 -a 192 577 10 -a 192 232 10 -a 192 685 7 -a 192 156 9 -a 192 824 5 -a 192 37 1 -a 193 938 3 -a 193 731 4 -a 193 403 3 -a 193 941 6 -a 193 403 3 -a 193 851 9 -a 193 468 1 -a 193 699 1 -a 193 787 2 -a 193 133 9 -a 193 110 10 -a 193 959 9 -a 193 908 1 -a 193 289 7 -a 193 899 4 -a 193 91 2 -a 193 220 9 -a 193 503 8 -a 193 720 3 -a 193 40 4 -a 193 645 4 -a 193 768 8 -a 193 487 4 -a 193 170 6 -a 193 991 6 -a 193 40 3 -a 193 401 5 -a 193 651 6 -a 193 195 1 -a 193 201 9 -a 193 687 6 -a 193 108 10 -a 193 931 6 -a 193 66 9 -a 193 25 9 -a 193 309 5 -a 193 916 8 -a 193 492 3 -a 193 678 4 -a 193 624 8 -a 193 92 10 -a 193 612 4 -a 193 508 10 -a 193 380 6 -a 193 486 3 -a 193 598 9 -a 193 599 1 -a 193 988 6 -a 193 293 2 -a 193 639 10 -a 193 609 8 -a 193 36 6 -a 193 101 3 -a 193 778 1 -a 193 2 3 -a 193 140 3 -a 193 155 7 -a 193 653 9 -a 193 334 3 -a 193 355 6 -a 193 315 9 -a 193 442 5 -a 193 261 8 -a 193 380 3 -a 193 466 8 -a 193 570 9 -a 193 271 4 -a 193 957 3 -a 193 552 1 -a 193 948 6 -a 193 556 1 -a 193 644 9 -a 193 536 4 -a 193 39 9 -a 193 637 8 -a 193 598 3 -a 193 985 9 -a 193 929 8 -a 193 212 10 -a 193 569 5 -a 193 965 2 -a 193 312 3 -a 193 322 1 -a 193 966 9 -a 193 452 9 -a 193 476 10 -a 193 594 7 -a 193 785 9 -a 193 830 9 -a 193 909 10 -a 193 202 5 -a 193 67 5 -a 193 264 6 -a 193 667 9 -a 193 636 9 -a 193 535 5 -a 193 599 4 -a 193 163 2 -a 194 458 4 -a 194 131 8 -a 194 806 2 -a 194 993 4 -a 194 169 8 -a 194 805 3 -a 194 990 5 -a 194 805 10 -a 194 378 8 -a 194 950 7 -a 194 710 10 -a 194 589 6 -a 194 494 2 -a 194 650 6 -a 194 900 10 -a 194 815 4 -a 194 591 3 -a 194 327 1 -a 194 267 9 -a 194 161 2 -a 194 88 8 -a 194 72 10 -a 194 45 8 -a 194 289 6 -a 194 138 2 -a 194 308 7 -a 194 956 9 -a 194 773 5 -a 194 842 4 -a 194 530 6 -a 194 936 2 -a 194 276 9 -a 194 660 10 -a 194 717 10 -a 194 244 6 -a 194 829 3 -a 194 497 3 -a 194 209 2 -a 194 609 7 -a 194 874 5 -a 194 134 7 -a 194 294 3 -a 194 438 1 -a 194 627 6 -a 194 943 9 -a 194 314 10 -a 194 418 9 -a 194 510 8 -a 194 640 8 -a 194 684 2 -a 194 670 3 -a 194 727 2 -a 194 755 8 -a 194 714 4 -a 194 893 5 -a 194 947 5 -a 194 641 7 -a 194 839 4 -a 194 452 2 -a 194 552 5 -a 194 90 7 -a 194 88 5 -a 194 245 1 -a 194 333 9 -a 194 916 9 -a 194 741 10 -a 194 542 3 -a 194 500 1 -a 194 591 2 -a 194 675 10 -a 194 794 2 -a 194 4 4 -a 194 278 6 -a 194 712 3 -a 194 317 6 -a 194 695 9 -a 194 197 5 -a 194 957 2 -a 194 354 6 -a 194 866 6 -a 194 659 7 -a 195 84 2 -a 195 555 1 -a 195 650 8 -a 195 976 10 -a 195 552 10 -a 195 572 10 -a 195 593 4 -a 195 366 6 -a 195 120 10 -a 195 455 6 -a 195 87 3 -a 195 364 8 -a 195 787 8 -a 195 81 3 -a 195 304 9 -a 195 477 8 -a 195 671 10 -a 195 979 1 -a 195 246 9 -a 195 674 9 -a 195 232 2 -a 195 958 4 -a 195 991 2 -a 195 926 2 -a 195 130 6 -a 195 923 7 -a 195 255 10 -a 195 996 3 -a 195 557 6 -a 195 338 4 -a 195 526 6 -a 195 183 8 -a 195 290 10 -a 195 53 3 -a 195 754 5 -a 195 882 7 -a 195 418 3 -a 195 753 9 -a 195 872 8 -a 195 839 6 -a 195 341 6 -a 195 635 4 -a 195 816 7 -a 195 421 6 -a 195 938 2 -a 195 269 6 -a 195 67 8 -a 195 892 2 -a 195 514 10 -a 195 740 4 -a 195 99 8 -a 195 447 3 -a 195 706 9 -a 195 577 10 -a 195 604 9 -a 195 254 7 -a 195 548 7 -a 195 137 4 -a 195 592 6 -a 195 49 4 -a 195 319 8 -a 195 881 9 -a 195 102 3 -a 195 48 1 -a 195 738 10 -a 195 519 10 -a 195 801 1 -a 195 714 6 -a 195 367 2 -a 195 615 1 -a 195 30 5 -a 195 407 10 -a 195 450 8 -a 195 914 9 -a 195 675 2 -a 195 516 10 -a 195 782 1 -a 195 164 9 -a 195 232 7 -a 195 880 8 -a 195 611 8 -a 195 937 3 -a 195 880 8 -a 195 163 4 -a 195 517 8 -a 195 109 10 -a 195 710 3 -a 195 653 8 -a 195 700 5 -a 195 758 4 -a 195 971 4 -a 195 556 8 -a 195 859 8 -a 195 269 2 -a 195 354 8 -a 195 794 7 -a 195 983 4 -a 195 720 7 -a 195 385 1 -a 195 696 6 -a 195 791 9 -a 195 438 5 -a 195 585 8 -a 195 441 6 -a 195 953 4 -a 195 342 3 -a 195 604 6 -a 195 160 8 -a 195 198 10 -a 195 190 10 -a 195 73 2 -a 195 53 8 -a 195 352 7 -a 195 589 9 -a 196 161 10 -a 196 37 10 -a 196 217 9 -a 196 861 3 -a 196 795 8 -a 196 163 8 -a 196 392 5 -a 196 629 7 -a 196 156 5 -a 196 661 4 -a 196 982 6 -a 196 950 8 -a 196 619 6 -a 196 677 3 -a 196 310 3 -a 196 606 2 -a 196 348 4 -a 196 76 3 -a 196 19 3 -a 196 933 6 -a 196 516 8 -a 196 972 5 -a 196 250 10 -a 196 95 5 -a 196 107 4 -a 196 447 7 -a 196 285 4 -a 196 179 9 -a 196 499 8 -a 196 636 2 -a 196 767 1 -a 196 660 1 -a 196 673 3 -a 196 983 1 -a 196 496 7 -a 196 443 9 -a 196 121 1 -a 196 887 8 -a 196 47 8 -a 196 277 3 -a 196 523 6 -a 196 5 4 -a 196 202 10 -a 196 117 8 -a 196 681 1 -a 196 511 5 -a 196 723 8 -a 196 5 6 -a 196 586 6 -a 196 741 2 -a 196 937 4 -a 196 77 9 -a 196 688 8 -a 196 162 9 -a 196 171 6 -a 196 795 8 -a 196 609 6 -a 196 455 8 -a 196 973 9 -a 196 83 6 -a 196 67 9 -a 196 716 10 -a 196 742 1 -a 196 739 4 -a 196 674 8 -a 196 213 8 -a 196 157 8 -a 196 795 6 -a 196 76 5 -a 196 203 1 -a 196 47 2 -a 196 598 2 -a 196 207 10 -a 196 248 10 -a 196 715 10 -a 196 888 2 -a 196 758 2 -a 196 413 8 -a 196 892 4 -a 196 319 1 -a 196 129 4 -a 196 804 8 -a 196 395 1 -a 196 817 7 -a 196 965 8 -a 196 565 5 -a 196 587 6 -a 196 549 3 -a 196 535 10 -a 197 632 4 -a 197 62 5 -a 197 226 5 -a 197 349 3 -a 197 800 6 -a 197 900 7 -a 197 562 8 -a 197 956 8 -a 197 670 8 -a 197 637 10 -a 197 134 8 -a 197 716 2 -a 197 210 8 -a 197 341 2 -a 197 963 6 -a 197 924 6 -a 197 204 1 -a 197 696 4 -a 197 312 4 -a 197 71 9 -a 197 441 6 -a 197 874 6 -a 197 384 1 -a 197 233 7 -a 197 814 2 -a 197 948 4 -a 197 819 10 -a 197 339 10 -a 197 943 5 -a 197 329 1 -a 197 970 7 -a 197 555 8 -a 197 294 2 -a 197 779 3 -a 197 430 8 -a 197 855 4 -a 197 710 7 -a 197 75 3 -a 197 467 1 -a 197 844 10 -a 197 790 9 -a 197 677 3 -a 197 160 6 -a 197 728 9 -a 197 576 6 -a 197 363 6 -a 197 399 6 -a 197 888 10 -a 197 433 9 -a 197 388 7 -a 197 304 7 -a 197 282 7 -a 197 771 10 -a 197 536 3 -a 197 71 3 -a 197 694 7 -a 197 330 8 -a 197 409 5 -a 197 613 4 -a 197 658 9 -a 197 354 4 -a 197 592 6 -a 197 188 8 -a 197 648 5 -a 197 347 1 -a 197 617 10 -a 197 478 5 -a 197 32 6 -a 197 691 9 -a 197 945 7 -a 197 875 3 -a 197 456 6 -a 197 597 9 -a 197 10 10 -a 197 159 7 -a 197 148 6 -a 197 372 4 -a 197 557 2 -a 197 11 8 -a 197 804 8 -a 197 944 5 -a 197 314 7 -a 197 61 3 -a 197 690 4 -a 197 849 3 -a 197 132 5 -a 197 360 3 -a 197 154 6 -a 197 540 10 -a 197 972 2 -a 197 812 9 -a 197 894 8 -a 197 539 2 -a 197 999 4 -a 197 517 2 -a 197 885 1 -a 197 592 2 -a 197 994 7 -a 197 917 5 -a 197 258 4 -a 197 914 4 -a 198 767 8 -a 198 714 2 -a 198 486 9 -a 198 777 2 -a 198 872 2 -a 198 634 5 -a 198 124 4 -a 198 405 6 -a 198 644 9 -a 198 928 8 -a 198 324 8 -a 198 958 3 -a 198 988 1 -a 198 782 7 -a 198 95 7 -a 198 349 9 -a 198 936 7 -a 198 635 9 -a 198 296 5 -a 198 723 5 -a 198 504 1 -a 198 834 6 -a 198 697 1 -a 198 695 1 -a 198 264 2 -a 198 989 6 -a 198 587 6 -a 198 522 2 -a 198 879 9 -a 198 329 4 -a 198 211 10 -a 198 340 4 -a 198 81 6 -a 198 58 3 -a 198 973 4 -a 198 205 2 -a 198 462 4 -a 198 593 8 -a 198 108 5 -a 198 786 6 -a 198 526 5 -a 198 71 1 -a 198 775 10 -a 198 283 7 -a 198 166 10 -a 198 99 10 -a 198 194 7 -a 198 800 9 -a 198 394 5 -a 198 916 10 -a 198 279 8 -a 198 203 7 -a 198 589 7 -a 198 274 9 -a 198 897 2 -a 198 852 8 -a 198 238 6 -a 198 459 6 -a 198 349 10 -a 198 92 4 -a 198 788 5 -a 198 559 6 -a 198 432 8 -a 198 868 2 -a 198 617 7 -a 198 380 1 -a 198 48 10 -a 198 54 8 -a 198 972 3 -a 198 155 4 -a 198 839 7 -a 198 473 6 -a 198 226 3 -a 198 589 8 -a 198 756 10 -a 198 391 6 -a 198 687 7 -a 198 949 4 -a 198 166 6 -a 198 56 5 -a 198 841 7 -a 198 444 10 -a 198 259 10 -a 198 405 10 -a 198 717 9 -a 198 131 1 -a 198 232 7 -a 199 954 8 -a 199 590 8 -a 199 581 8 -a 199 22 7 -a 199 353 1 -a 199 115 7 -a 199 453 10 -a 199 196 3 -a 199 731 1 -a 199 832 9 -a 199 244 7 -a 199 785 8 -a 199 780 4 -a 199 398 5 -a 199 599 2 -a 199 228 1 -a 199 623 7 -a 199 164 8 -a 199 983 3 -a 199 850 6 -a 199 908 3 -a 199 154 1 -a 199 906 5 -a 199 724 9 -a 199 597 1 -a 199 140 5 -a 199 104 4 -a 199 289 7 -a 199 270 10 -a 199 335 4 -a 199 219 3 -a 199 859 2 -a 199 915 2 -a 199 240 9 -a 199 187 9 -a 199 6 8 -a 199 692 3 -a 199 383 7 -a 199 736 3 -a 199 499 10 -a 199 626 10 -a 199 496 5 -a 199 254 7 -a 199 71 10 -a 199 482 4 -a 199 622 10 -a 199 234 10 -a 199 440 3 -a 199 610 1 -a 199 59 4 -a 199 323 2 -a 199 764 4 -a 199 964 8 -a 199 22 3 -a 199 336 2 -a 199 79 4 -a 199 125 5 -a 199 625 2 -a 199 349 8 -a 199 460 9 -a 199 843 7 -a 199 183 7 -a 199 350 10 -a 199 58 10 -a 199 370 3 -a 199 355 4 -a 199 749 5 -a 199 752 8 -a 199 67 3 -a 199 223 4 -a 199 353 4 -a 199 562 2 -a 199 477 8 -a 199 351 5 -a 199 632 9 -a 199 958 5 -a 199 972 3 -a 199 865 4 -a 199 373 5 -a 199 558 5 -a 199 924 8 -a 199 696 10 -a 199 297 6 -a 199 863 1 -a 199 717 8 -a 200 632 8 -a 200 942 4 -a 200 842 4 -a 200 232 5 -a 200 266 3 -a 200 277 2 -a 200 50 6 -a 200 448 6 -a 200 626 7 -a 200 107 4 -a 200 817 2 -a 200 981 4 -a 200 855 2 -a 200 544 6 -a 200 23 6 -a 200 54 1 -a 200 896 9 -a 200 584 5 -a 200 530 3 -a 200 223 8 -a 200 192 2 -a 200 463 1 -a 200 170 9 -a 200 32 9 -a 200 835 9 -a 200 727 3 -a 200 955 9 -a 200 506 5 -a 200 794 9 -a 200 199 5 -a 200 631 5 -a 200 711 7 -a 200 16 9 -a 200 862 9 -a 200 976 5 -a 200 292 4 -a 200 912 5 -a 200 399 6 -a 200 917 5 -a 200 192 1 -a 200 873 9 -a 200 849 9 -a 200 735 7 -a 200 895 6 -a 200 902 5 -a 200 607 9 -a 200 455 3 -a 200 407 2 -a 200 829 2 -a 200 646 6 -a 200 869 6 -a 200 998 1 -a 200 677 3 -a 200 679 4 -a 200 701 2 -a 200 608 7 -a 200 161 8 -a 200 699 7 -a 200 377 8 -a 200 359 4 -a 200 305 7 -a 200 63 8 -a 200 374 4 -a 200 143 3 -a 200 14 4 -a 200 665 9 -a 200 30 4 -a 200 412 1 -a 200 557 9 -a 200 23 1 -a 200 603 9 -a 200 406 4 -a 200 871 4 -a 200 314 3 -a 200 276 6 -a 200 748 4 -a 200 920 3 -a 200 730 2 -a 200 130 2 -a 200 724 6 -a 200 351 4 -a 200 998 5 -a 200 697 8 -a 200 4 8 -a 200 653 10 -a 200 373 8 -a 200 611 3 -a 201 813 3 -a 201 48 4 -a 201 987 4 -a 201 147 1 -a 201 352 9 -a 201 25 5 -a 201 520 6 -a 201 494 8 -a 201 38 8 -a 201 160 3 -a 201 523 5 -a 201 449 3 -a 201 716 4 -a 201 546 8 -a 201 28 1 -a 201 97 10 -a 201 392 3 -a 201 341 2 -a 201 373 6 -a 201 116 5 -a 201 236 6 -a 201 78 3 -a 201 245 4 -a 201 959 8 -a 201 429 6 -a 201 219 5 -a 201 631 2 -a 201 432 10 -a 201 871 3 -a 201 18 6 -a 201 659 9 -a 201 27 1 -a 201 805 4 -a 201 378 8 -a 201 4 7 -a 201 300 4 -a 201 872 1 -a 201 41 8 -a 201 459 6 -a 201 370 5 -a 201 489 5 -a 201 150 3 -a 201 915 10 -a 201 516 4 -a 201 247 6 -a 201 283 10 -a 201 856 9 -a 201 619 8 -a 201 398 2 -a 201 67 6 -a 201 696 6 -a 201 642 5 -a 201 1 3 -a 201 100 10 -a 201 860 8 -a 201 632 9 -a 201 531 2 -a 201 706 8 -a 201 611 7 -a 201 548 2 -a 201 340 4 -a 201 637 6 -a 201 527 10 -a 201 120 7 -a 201 530 6 -a 201 419 7 -a 201 861 5 -a 201 570 7 -a 201 877 2 -a 201 207 5 -a 201 35 9 -a 201 3 9 -a 201 97 2 -a 201 550 2 -a 201 249 7 -a 201 379 9 -a 201 382 2 -a 201 867 7 -a 201 776 1 -a 201 448 1 -a 201 538 3 -a 201 394 2 -a 201 449 8 -a 201 638 10 -a 201 229 6 -a 201 56 2 -a 201 144 4 -a 201 935 2 -a 201 666 5 -a 201 692 4 -a 201 250 4 -a 201 278 6 -a 201 194 5 -a 201 370 8 -a 201 267 3 -a 201 724 3 -a 201 788 4 -a 201 104 10 -a 201 269 10 -a 201 641 5 -a 201 310 8 -a 201 303 10 -a 201 643 7 -a 201 406 9 -a 201 853 9 -a 201 891 4 -a 201 785 2 -a 202 210 3 -a 202 733 5 -a 202 536 1 -a 202 657 4 -a 202 246 4 -a 202 929 2 -a 202 81 8 -a 202 883 5 -a 202 134 2 -a 202 136 1 -a 202 3 9 -a 202 44 3 -a 202 801 2 -a 202 694 9 -a 202 293 6 -a 202 54 2 -a 202 887 10 -a 202 662 2 -a 202 321 10 -a 202 586 4 -a 202 426 6 -a 202 424 1 -a 202 855 6 -a 202 42 4 -a 202 733 9 -a 202 133 6 -a 202 684 8 -a 202 114 10 -a 202 985 9 -a 202 550 10 -a 202 898 9 -a 202 170 2 -a 202 258 10 -a 202 410 10 -a 202 827 2 -a 202 503 4 -a 202 314 5 -a 202 907 6 -a 202 362 10 -a 202 447 7 -a 202 19 6 -a 202 364 4 -a 202 490 2 -a 202 819 4 -a 202 33 4 -a 202 783 5 -a 202 873 7 -a 202 919 3 -a 202 420 7 -a 202 169 6 -a 202 481 4 -a 202 845 1 -a 202 592 6 -a 202 311 8 -a 202 886 8 -a 202 300 4 -a 202 443 3 -a 202 545 5 -a 202 413 1 -a 202 404 1 -a 202 70 5 -a 202 287 6 -a 202 573 4 -a 202 327 2 -a 202 696 10 -a 202 375 8 -a 202 830 7 -a 202 258 10 -a 202 167 1 -a 202 432 8 -a 202 276 1 -a 202 530 6 -a 202 921 7 -a 202 70 2 -a 202 562 3 -a 202 679 5 -a 202 942 10 -a 202 456 2 -a 202 75 3 -a 202 86 1 -a 202 936 7 -a 202 919 7 -a 202 677 1 -a 202 222 10 -a 202 781 1 -a 202 976 10 -a 202 665 9 -a 202 301 9 -a 202 365 1 -a 202 44 4 -a 202 371 2 -a 202 651 4 -a 202 616 5 -a 202 697 5 -a 202 322 9 -a 202 991 10 -a 202 502 10 -a 202 306 10 -a 202 224 5 -a 202 668 1 -a 202 737 3 -a 202 499 9 -a 202 173 3 -a 202 634 5 -a 202 568 4 -a 202 734 5 -a 202 288 5 -a 202 486 2 -a 202 166 1 -a 202 362 3 -a 202 571 6 -a 202 77 5 -a 202 257 5 -a 203 224 9 -a 203 299 10 -a 203 13 8 -a 203 175 4 -a 203 963 5 -a 203 313 3 -a 203 539 6 -a 203 683 8 -a 203 165 3 -a 203 597 7 -a 203 356 10 -a 203 486 3 -a 203 563 2 -a 203 857 4 -a 203 792 2 -a 203 786 8 -a 203 501 5 -a 203 504 10 -a 203 260 10 -a 203 673 6 -a 203 113 8 -a 203 828 4 -a 203 383 8 -a 203 401 7 -a 203 289 7 -a 203 548 9 -a 203 762 3 -a 203 859 8 -a 203 624 8 -a 203 58 2 -a 203 922 9 -a 203 6 4 -a 203 233 8 -a 203 860 3 -a 203 319 5 -a 203 771 8 -a 203 841 5 -a 203 936 4 -a 203 414 3 -a 203 332 7 -a 203 397 7 -a 203 976 6 -a 203 165 4 -a 203 164 6 -a 203 738 5 -a 203 665 8 -a 203 668 7 -a 203 997 6 -a 203 313 2 -a 203 780 9 -a 203 800 6 -a 203 695 10 -a 203 156 7 -a 203 64 5 -a 203 218 7 -a 203 918 8 -a 203 923 9 -a 203 842 6 -a 203 911 9 -a 203 980 8 -a 203 739 2 -a 203 917 6 -a 203 188 5 -a 203 575 4 -a 203 211 5 -a 203 959 10 -a 203 391 7 -a 203 187 3 -a 203 870 7 -a 203 804 3 -a 203 519 2 -a 203 242 8 -a 203 756 5 -a 203 683 8 -a 203 406 2 -a 203 469 4 -a 203 323 4 -a 203 49 8 -a 203 441 2 -a 203 635 3 -a 203 828 3 -a 203 217 4 -a 203 306 9 -a 203 984 7 -a 203 280 3 -a 203 523 6 -a 203 877 1 -a 203 178 4 -a 203 340 8 -a 203 763 5 -a 204 134 5 -a 204 55 1 -a 204 655 7 -a 204 321 4 -a 204 629 10 -a 204 865 5 -a 204 255 5 -a 204 28 5 -a 204 100 8 -a 204 799 1 -a 204 546 7 -a 204 342 5 -a 204 530 4 -a 204 204 3 -a 204 747 8 -a 204 998 5 -a 204 526 5 -a 204 795 4 -a 204 414 1 -a 204 136 1 -a 204 598 7 -a 204 630 5 -a 204 441 6 -a 204 557 3 -a 204 910 1 -a 204 964 6 -a 204 409 9 -a 204 63 9 -a 204 279 2 -a 204 148 3 -a 204 196 6 -a 204 333 10 -a 204 802 5 -a 204 517 9 -a 204 961 8 -a 204 643 7 -a 204 771 7 -a 204 956 8 -a 204 670 5 -a 204 871 10 -a 204 730 5 -a 204 191 1 -a 204 188 9 -a 204 235 4 -a 204 394 3 -a 204 934 10 -a 204 208 9 -a 204 919 8 -a 204 704 1 -a 204 621 10 -a 204 30 1 -a 204 277 4 -a 204 227 10 -a 204 471 8 -a 204 834 2 -a 204 112 2 -a 204 410 5 -a 204 218 4 -a 204 174 8 -a 204 688 10 -a 204 365 8 -a 204 370 9 -a 204 143 8 -a 204 886 4 -a 204 957 10 -a 204 785 5 -a 204 632 4 -a 204 888 4 -a 204 430 5 -a 204 478 2 -a 204 593 1 -a 204 620 10 -a 204 665 8 -a 204 827 5 -a 204 574 6 -a 204 10 8 -a 204 907 6 -a 204 253 10 -a 204 631 1 -a 204 936 8 -a 204 530 2 -a 204 857 3 -a 204 382 7 -a 204 339 1 -a 204 968 2 -a 205 791 4 -a 205 556 1 -a 205 117 7 -a 205 455 2 -a 205 921 8 -a 205 486 1 -a 205 451 2 -a 205 39 10 -a 205 347 5 -a 205 383 10 -a 205 823 5 -a 205 979 3 -a 205 247 3 -a 205 228 4 -a 205 432 10 -a 205 839 1 -a 205 847 8 -a 205 73 10 -a 205 642 1 -a 205 835 10 -a 205 646 5 -a 205 651 2 -a 205 717 7 -a 205 899 2 -a 205 257 4 -a 205 628 8 -a 205 404 9 -a 205 89 9 -a 205 742 1 -a 205 32 3 -a 205 776 3 -a 205 273 8 -a 205 149 1 -a 205 206 5 -a 205 169 7 -a 205 634 5 -a 205 656 7 -a 205 207 9 -a 205 981 4 -a 205 15 1 -a 205 5 7 -a 205 935 9 -a 205 261 4 -a 205 232 7 -a 205 342 5 -a 205 75 9 -a 205 54 4 -a 205 414 8 -a 205 716 6 -a 205 888 3 -a 205 36 2 -a 205 343 6 -a 205 580 7 -a 205 934 9 -a 205 599 3 -a 205 184 4 -a 205 313 10 -a 205 688 6 -a 205 169 6 -a 205 30 9 -a 205 719 5 -a 205 944 9 -a 205 302 10 -a 205 867 1 -a 205 126 1 -a 205 471 5 -a 205 477 9 -a 205 781 5 -a 205 677 8 -a 205 433 1 -a 205 795 1 -a 205 682 1 -a 205 343 7 -a 205 31 7 -a 205 913 9 -a 205 684 9 -a 205 106 10 -a 205 967 6 -a 205 74 9 -a 205 821 3 -a 205 830 7 -a 205 109 8 -a 205 139 3 -a 205 386 5 -a 205 18 6 -a 205 738 10 -a 205 569 6 -a 205 330 5 -a 205 401 4 -a 205 737 9 -a 205 359 2 -a 205 95 10 -a 205 656 3 -a 205 660 9 -a 205 962 5 -a 205 781 8 -a 205 106 3 -a 205 414 10 -a 205 538 5 -a 205 783 4 -a 206 846 6 -a 206 308 6 -a 206 440 10 -a 206 164 8 -a 206 339 1 -a 206 328 7 -a 206 847 1 -a 206 444 3 -a 206 270 10 -a 206 920 5 -a 206 240 1 -a 206 76 1 -a 206 4 9 -a 206 379 2 -a 206 461 1 -a 206 21 8 -a 206 92 1 -a 206 5 9 -a 206 350 9 -a 206 492 5 -a 206 741 8 -a 206 708 8 -a 206 586 7 -a 206 372 3 -a 206 344 8 -a 206 523 3 -a 206 129 1 -a 206 449 2 -a 206 936 3 -a 206 666 3 -a 206 207 5 -a 206 757 4 -a 206 973 5 -a 206 646 4 -a 206 920 10 -a 206 287 9 -a 206 974 8 -a 206 743 4 -a 206 730 10 -a 206 219 9 -a 206 638 9 -a 206 970 4 -a 206 294 5 -a 206 642 2 -a 206 324 2 -a 206 754 6 -a 206 662 3 -a 206 415 2 -a 206 758 5 -a 206 906 4 -a 206 474 8 -a 206 695 7 -a 206 467 10 -a 206 846 2 -a 206 14 1 -a 206 990 6 -a 206 974 4 -a 206 463 5 -a 206 901 9 -a 206 615 8 -a 206 669 3 -a 206 634 1 -a 206 563 6 -a 206 291 2 -a 206 529 2 -a 206 850 8 -a 206 240 1 -a 206 247 7 -a 206 555 7 -a 206 458 3 -a 206 885 9 -a 206 500 4 -a 206 752 3 -a 206 502 8 -a 206 823 3 -a 206 481 7 -a 206 139 10 -a 206 213 4 -a 206 215 4 -a 206 126 5 -a 206 94 8 -a 206 688 8 -a 206 821 7 -a 206 561 4 -a 206 509 4 -a 207 834 9 -a 207 526 4 -a 207 458 9 -a 207 272 5 -a 207 402 7 -a 207 48 3 -a 207 941 10 -a 207 11 6 -a 207 611 1 -a 207 207 2 -a 207 540 8 -a 207 436 6 -a 207 446 5 -a 207 786 7 -a 207 990 1 -a 207 903 8 -a 207 646 8 -a 207 466 6 -a 207 630 3 -a 207 123 3 -a 207 264 6 -a 207 87 6 -a 207 262 5 -a 207 477 9 -a 207 301 9 -a 207 387 8 -a 207 570 4 -a 207 988 5 -a 207 183 10 -a 207 106 1 -a 207 473 5 -a 207 631 1 -a 207 930 5 -a 207 264 1 -a 207 9 6 -a 207 978 8 -a 207 180 2 -a 207 19 9 -a 207 564 2 -a 207 386 7 -a 207 558 3 -a 207 999 8 -a 207 831 10 -a 207 320 4 -a 207 964 10 -a 207 710 2 -a 207 965 9 -a 207 405 5 -a 207 315 2 -a 207 64 6 -a 207 669 7 -a 207 401 7 -a 207 325 6 -a 207 121 3 -a 207 701 4 -a 207 711 5 -a 207 690 8 -a 207 665 1 -a 207 894 2 -a 207 796 7 -a 207 113 2 -a 207 886 8 -a 207 402 5 -a 207 18 1 -a 207 125 8 -a 207 410 4 -a 207 995 3 -a 207 305 7 -a 208 429 9 -a 208 534 9 -a 208 690 1 -a 208 986 1 -a 208 508 10 -a 208 497 6 -a 208 281 4 -a 208 448 2 -a 208 182 9 -a 208 222 6 -a 208 852 4 -a 208 496 6 -a 208 285 5 -a 208 496 6 -a 208 897 8 -a 208 609 10 -a 208 616 8 -a 208 573 7 -a 208 295 9 -a 208 282 10 -a 208 213 7 -a 208 164 2 -a 208 53 1 -a 208 325 9 -a 208 25 2 -a 208 454 4 -a 208 343 2 -a 208 150 3 -a 208 864 7 -a 208 313 8 -a 208 454 1 -a 208 268 6 -a 208 847 6 -a 208 119 5 -a 208 229 2 -a 208 330 5 -a 208 615 8 -a 208 510 1 -a 208 777 4 -a 208 796 1 -a 208 731 2 -a 208 605 10 -a 208 268 9 -a 208 76 1 -a 208 140 8 -a 208 599 10 -a 208 692 9 -a 208 712 1 -a 208 893 6 -a 208 973 9 -a 208 925 6 -a 208 33 3 -a 208 1 1 -a 208 225 7 -a 208 57 6 -a 208 454 2 -a 208 567 6 -a 208 206 3 -a 208 293 7 -a 208 880 6 -a 208 659 9 -a 208 560 7 -a 208 702 7 -a 208 778 2 -a 208 789 8 -a 208 7 10 -a 208 368 10 -a 208 274 4 -a 208 784 5 -a 208 140 5 -a 208 364 2 -a 208 407 6 -a 208 994 7 -a 208 439 4 -a 208 546 9 -a 208 568 4 -a 208 106 9 -a 208 233 1 -a 208 436 6 -a 208 54 5 -a 208 133 7 -a 208 468 6 -a 208 54 5 -a 208 358 1 -a 208 525 3 -a 208 508 9 -a 208 924 1 -a 208 730 10 -a 208 800 4 -a 208 779 1 -a 208 365 2 -a 208 336 1 -a 208 456 9 -a 208 118 5 -a 208 100 8 -a 208 463 7 -a 208 485 8 -a 208 373 7 -a 208 222 8 -a 208 624 4 -a 208 352 7 -a 208 585 8 -a 208 6 8 -a 208 321 3 -a 208 551 10 -a 208 888 7 -a 208 105 10 -a 208 784 8 -a 208 299 9 -a 208 158 9 -a 208 916 1 -a 208 767 8 -a 208 212 8 -a 208 249 5 -a 209 267 4 -a 209 719 2 -a 209 149 10 -a 209 996 9 -a 209 494 8 -a 209 927 7 -a 209 336 6 -a 209 829 10 -a 209 359 1 -a 209 453 1 -a 209 928 10 -a 209 821 1 -a 209 938 7 -a 209 276 7 -a 209 18 6 -a 209 537 2 -a 209 627 2 -a 209 602 7 -a 209 543 6 -a 209 947 1 -a 209 600 7 -a 209 69 10 -a 209 810 6 -a 209 704 5 -a 209 852 5 -a 209 85 9 -a 209 862 2 -a 209 744 9 -a 209 851 4 -a 209 49 3 -a 209 992 3 -a 209 93 3 -a 209 767 8 -a 209 116 5 -a 209 64 2 -a 209 236 4 -a 209 19 6 -a 209 400 8 -a 209 41 3 -a 209 377 3 -a 209 852 4 -a 209 968 3 -a 209 173 7 -a 209 765 3 -a 209 220 10 -a 209 190 9 -a 209 278 4 -a 209 846 1 -a 209 791 7 -a 209 820 4 -a 209 769 8 -a 209 366 5 -a 209 888 6 -a 209 554 5 -a 209 46 2 -a 209 716 8 -a 209 638 8 -a 209 907 4 -a 209 435 10 -a 209 464 10 -a 209 955 9 -a 209 402 10 -a 209 556 6 -a 209 697 5 -a 209 518 5 -a 209 620 1 -a 209 932 8 -a 209 536 4 -a 209 972 6 -a 209 912 10 -a 209 846 10 -a 209 916 3 -a 209 60 7 -a 209 587 7 -a 209 111 10 -a 209 249 7 -a 209 864 6 -a 209 956 8 -a 209 15 6 -a 209 659 5 -a 209 700 10 -a 209 380 4 -a 209 522 4 -a 209 230 7 -a 209 425 1 -a 209 213 6 -a 209 867 10 -a 209 307 6 -a 209 647 8 -a 209 307 8 -a 209 237 4 -a 209 25 7 -a 209 862 10 -a 209 933 2 -a 209 542 3 -a 209 457 3 -a 209 841 7 -a 209 53 10 -a 209 451 8 -a 209 788 6 -a 209 964 9 -a 209 273 7 -a 209 679 10 -a 209 859 2 -a 209 789 10 -a 209 247 9 -a 209 698 6 -a 209 721 6 -a 209 261 1 -a 209 332 2 -a 209 396 4 -a 210 640 4 -a 210 853 5 -a 210 625 10 -a 210 41 5 -a 210 42 2 -a 210 468 9 -a 210 347 4 -a 210 688 4 -a 210 774 5 -a 210 584 2 -a 210 712 5 -a 210 611 9 -a 210 492 7 -a 210 229 7 -a 210 44 1 -a 210 308 10 -a 210 281 7 -a 210 494 2 -a 210 72 7 -a 210 220 8 -a 210 766 1 -a 210 750 7 -a 210 218 4 -a 210 600 4 -a 210 515 9 -a 210 464 6 -a 210 273 7 -a 210 211 8 -a 210 724 3 -a 210 604 2 -a 210 606 8 -a 210 340 9 -a 210 433 3 -a 210 207 7 -a 210 380 5 -a 210 474 1 -a 210 674 4 -a 210 726 3 -a 210 137 9 -a 210 423 7 -a 210 285 3 -a 210 849 7 -a 210 9 9 -a 210 777 3 -a 210 53 10 -a 210 52 6 -a 210 60 8 -a 210 334 7 -a 210 546 1 -a 210 131 4 -a 210 553 2 -a 210 287 5 -a 210 881 1 -a 210 771 8 -a 210 887 10 -a 210 371 1 -a 210 210 6 -a 210 135 3 -a 210 581 5 -a 210 934 5 -a 210 739 3 -a 210 162 9 -a 210 249 3 -a 210 147 5 -a 210 368 9 -a 210 628 4 -a 210 620 9 -a 210 17 6 -a 210 329 7 -a 210 756 6 -a 210 439 6 -a 210 614 7 -a 210 580 8 -a 210 448 3 -a 210 366 4 -a 210 633 8 -a 210 499 5 -a 210 425 2 -a 210 966 4 -a 210 20 2 -a 210 556 7 -a 210 494 8 -a 210 307 6 -a 210 412 10 -a 210 240 8 -a 210 169 3 -a 210 782 6 -a 210 450 7 -a 210 303 5 -a 210 338 3 -a 210 359 10 -a 210 17 1 -a 210 499 7 -a 210 607 8 -a 210 163 5 -a 210 867 4 -a 210 210 8 -a 210 782 1 -a 210 883 2 -a 210 538 2 -a 210 514 5 -a 210 298 9 -a 210 127 2 -a 210 69 3 -a 210 745 9 -a 210 492 3 -a 210 701 2 -a 210 219 1 -a 210 917 2 -a 210 642 8 -a 211 239 2 -a 211 448 9 -a 211 112 5 -a 211 545 6 -a 211 859 5 -a 211 351 2 -a 211 713 4 -a 211 616 5 -a 211 800 1 -a 211 953 6 -a 211 134 7 -a 211 8 5 -a 211 427 8 -a 211 740 9 -a 211 170 1 -a 211 269 8 -a 211 949 3 -a 211 952 8 -a 211 128 10 -a 211 463 1 -a 211 441 3 -a 211 425 8 -a 211 589 9 -a 211 509 7 -a 211 145 9 -a 211 57 1 -a 211 186 9 -a 211 363 5 -a 211 973 7 -a 211 827 3 -a 211 601 2 -a 211 396 6 -a 211 938 3 -a 211 121 8 -a 211 230 5 -a 211 265 8 -a 211 833 7 -a 211 845 5 -a 211 40 1 -a 211 824 6 -a 211 773 1 -a 211 174 8 -a 211 831 10 -a 211 175 1 -a 211 913 5 -a 211 1000 5 -a 211 444 3 -a 211 838 2 -a 211 927 1 -a 211 571 3 -a 211 276 7 -a 211 343 2 -a 211 995 3 -a 211 864 9 -a 211 852 6 -a 211 115 8 -a 211 920 3 -a 211 13 3 -a 211 477 2 -a 211 868 3 -a 211 839 8 -a 211 54 3 -a 211 239 5 -a 211 753 10 -a 211 174 3 -a 211 468 9 -a 211 288 6 -a 211 32 1 -a 211 806 5 -a 211 36 8 -a 211 205 10 -a 211 612 1 -a 211 211 3 -a 211 94 4 -a 211 587 6 -a 211 654 9 -a 211 931 6 -a 211 490 7 -a 211 200 9 -a 211 182 6 -a 211 832 10 -a 211 170 8 -a 211 21 4 -a 211 659 5 -a 211 284 9 -a 211 941 4 -a 211 671 7 -a 211 760 9 -a 211 784 3 -a 211 486 8 -a 211 813 6 -a 211 214 3 -a 211 987 4 -a 211 466 8 -a 211 206 2 -a 211 969 4 -a 211 754 8 -a 211 237 4 -a 211 750 2 -a 212 789 2 -a 212 442 6 -a 212 337 9 -a 212 999 9 -a 212 535 8 -a 212 923 5 -a 212 628 3 -a 212 441 3 -a 212 388 3 -a 212 827 3 -a 212 622 5 -a 212 196 1 -a 212 996 4 -a 212 642 4 -a 212 854 7 -a 212 255 9 -a 212 558 1 -a 212 501 3 -a 212 318 10 -a 212 986 2 -a 212 803 10 -a 212 316 10 -a 212 175 8 -a 212 765 1 -a 212 781 10 -a 212 380 3 -a 212 709 9 -a 212 510 5 -a 212 616 6 -a 212 434 7 -a 212 275 8 -a 212 33 10 -a 212 770 7 -a 212 249 7 -a 212 567 10 -a 212 669 10 -a 212 877 10 -a 212 32 8 -a 212 679 9 -a 212 604 9 -a 212 227 2 -a 212 651 9 -a 212 222 8 -a 212 57 4 -a 212 905 8 -a 212 779 1 -a 212 557 1 -a 212 895 8 -a 212 72 3 -a 212 518 4 -a 212 674 2 -a 212 387 9 -a 212 692 2 -a 212 414 7 -a 212 144 6 -a 212 47 3 -a 212 99 8 -a 212 653 8 -a 212 662 7 -a 212 532 1 -a 212 927 8 -a 212 695 1 -a 212 278 7 -a 212 152 8 -a 212 237 5 -a 212 946 8 -a 212 4 8 -a 212 220 10 -a 212 977 8 -a 212 682 3 -a 212 823 9 -a 212 180 8 -a 212 308 2 -a 212 20 5 -a 212 236 7 -a 212 189 8 -a 212 799 6 -a 212 792 4 -a 212 59 4 -a 213 870 10 -a 213 285 5 -a 213 732 9 -a 213 233 4 -a 213 976 3 -a 213 122 10 -a 213 376 6 -a 213 220 6 -a 213 4 3 -a 213 659 10 -a 213 751 3 -a 213 931 10 -a 213 329 7 -a 213 4 9 -a 213 58 10 -a 213 566 6 -a 213 949 4 -a 213 61 3 -a 213 785 7 -a 213 902 7 -a 213 742 3 -a 213 583 2 -a 213 57 4 -a 213 26 10 -a 213 603 3 -a 213 292 3 -a 213 214 4 -a 213 377 1 -a 213 59 1 -a 213 272 10 -a 213 222 4 -a 213 343 10 -a 213 454 4 -a 213 294 10 -a 213 101 10 -a 213 829 9 -a 213 291 5 -a 213 320 10 -a 213 833 1 -a 213 949 5 -a 213 46 2 -a 213 739 7 -a 213 254 4 -a 213 50 5 -a 213 796 1 -a 213 819 3 -a 213 998 2 -a 213 856 3 -a 213 579 7 -a 213 875 4 -a 213 573 7 -a 213 137 8 -a 213 931 7 -a 213 598 4 -a 213 739 3 -a 213 198 7 -a 213 811 9 -a 213 91 5 -a 213 256 10 -a 213 59 7 -a 213 313 3 -a 213 598 6 -a 213 38 1 -a 213 766 6 -a 213 891 3 -a 213 138 8 -a 213 571 9 -a 213 157 5 -a 213 457 1 -a 213 379 8 -a 213 82 4 -a 213 502 6 -a 213 93 10 -a 213 335 7 -a 213 551 9 -a 213 888 8 -a 213 129 1 -a 213 525 10 -a 213 719 9 -a 213 707 4 -a 213 375 7 -a 213 267 7 -a 213 843 3 -a 213 282 6 -a 213 865 6 -a 213 558 7 -a 213 479 6 -a 213 651 4 -a 213 648 9 -a 213 735 1 -a 213 709 8 -a 213 960 6 -a 213 308 8 -a 213 746 6 -a 213 702 6 -a 213 175 10 -a 213 883 8 -a 213 248 5 -a 213 331 3 -a 213 315 6 -a 213 626 10 -a 213 412 8 -a 213 817 5 -a 213 718 2 -a 213 746 2 -a 213 343 7 -a 214 581 5 -a 214 874 7 -a 214 867 10 -a 214 275 5 -a 214 556 7 -a 214 218 10 -a 214 541 2 -a 214 375 9 -a 214 499 3 -a 214 381 9 -a 214 932 6 -a 214 977 7 -a 214 8 8 -a 214 555 5 -a 214 687 10 -a 214 716 3 -a 214 491 5 -a 214 995 1 -a 214 438 3 -a 214 168 3 -a 214 145 2 -a 214 296 3 -a 214 415 5 -a 214 475 4 -a 214 611 9 -a 214 16 3 -a 214 887 3 -a 214 403 7 -a 214 733 7 -a 214 608 4 -a 214 745 9 -a 214 289 5 -a 214 458 4 -a 214 588 9 -a 214 563 9 -a 214 805 1 -a 214 79 8 -a 214 363 5 -a 214 279 5 -a 214 460 7 -a 214 270 7 -a 214 231 4 -a 214 467 6 -a 214 825 8 -a 214 918 9 -a 214 158 6 -a 214 291 10 -a 214 888 5 -a 214 595 2 -a 214 458 8 -a 214 8 7 -a 214 891 9 -a 214 872 8 -a 214 482 7 -a 214 477 7 -a 214 887 6 -a 214 344 10 -a 214 879 4 -a 214 595 10 -a 214 952 8 -a 214 599 2 -a 214 883 4 -a 214 385 6 -a 214 162 8 -a 214 421 10 -a 214 373 4 -a 214 966 9 -a 214 499 9 -a 214 736 8 -a 214 220 9 -a 214 958 3 -a 214 451 10 -a 214 400 8 -a 214 805 9 -a 214 344 5 -a 214 558 2 -a 214 71 8 -a 214 207 7 -a 214 128 3 -a 214 528 9 -a 214 214 10 -a 214 375 8 -a 214 695 2 -a 214 470 9 -a 214 237 1 -a 214 15 3 -a 214 324 2 -a 214 831 7 -a 214 966 10 -a 214 923 6 -a 215 689 9 -a 215 326 6 -a 215 60 1 -a 215 85 2 -a 215 698 4 -a 215 2 6 -a 215 584 1 -a 215 409 10 -a 215 221 3 -a 215 517 4 -a 215 390 6 -a 215 671 5 -a 215 917 8 -a 215 170 5 -a 215 450 10 -a 215 241 4 -a 215 196 2 -a 215 577 5 -a 215 768 7 -a 215 409 5 -a 215 571 3 -a 215 119 1 -a 215 80 4 -a 215 16 3 -a 215 355 5 -a 215 94 2 -a 215 340 3 -a 215 162 3 -a 215 35 6 -a 215 238 7 -a 215 850 7 -a 215 360 1 -a 215 297 10 -a 215 935 2 -a 215 33 10 -a 215 298 8 -a 215 494 7 -a 215 442 10 -a 215 519 9 -a 215 831 6 -a 215 165 6 -a 215 902 4 -a 215 1000 8 -a 215 155 2 -a 215 327 3 -a 215 216 10 -a 215 350 5 -a 215 904 2 -a 215 984 2 -a 215 759 9 -a 215 450 1 -a 215 78 3 -a 215 838 8 -a 215 465 4 -a 215 432 2 -a 215 931 2 -a 215 804 10 -a 215 593 7 -a 215 965 10 -a 215 17 6 -a 215 419 7 -a 215 300 1 -a 215 314 4 -a 215 329 2 -a 215 332 9 -a 215 611 6 -a 215 822 2 -a 215 773 3 -a 215 105 8 -a 215 807 3 -a 215 579 4 -a 215 270 3 -a 215 685 4 -a 215 555 5 -a 215 424 2 -a 215 770 5 -a 215 773 8 -a 215 890 2 -a 215 729 2 -a 215 507 2 -a 215 315 8 -a 215 806 1 -a 215 320 10 -a 215 780 5 -a 215 214 2 -a 215 226 2 -a 215 559 4 -a 215 806 5 -a 215 166 2 -a 215 576 3 -a 215 200 5 -a 215 465 2 -a 215 889 5 -a 215 528 8 -a 215 797 6 -a 215 475 7 -a 215 325 5 -a 215 545 1 -a 215 580 4 -a 215 108 1 -a 215 100 5 -a 215 849 2 -a 216 792 3 -a 216 654 9 -a 216 248 3 -a 216 778 10 -a 216 399 5 -a 216 644 10 -a 216 104 8 -a 216 503 10 -a 216 958 10 -a 216 909 4 -a 216 822 5 -a 216 713 9 -a 216 98 5 -a 216 24 1 -a 216 248 4 -a 216 904 5 -a 216 189 4 -a 216 823 5 -a 216 79 8 -a 216 654 8 -a 216 687 6 -a 216 607 9 -a 216 426 8 -a 216 137 9 -a 216 931 7 -a 216 970 3 -a 216 716 6 -a 216 14 7 -a 216 45 9 -a 216 540 4 -a 216 805 8 -a 216 698 4 -a 216 787 6 -a 216 559 6 -a 216 73 8 -a 216 783 6 -a 216 178 10 -a 216 176 2 -a 216 261 10 -a 216 111 5 -a 216 60 6 -a 216 58 4 -a 216 824 6 -a 216 158 6 -a 216 81 2 -a 216 47 2 -a 216 37 7 -a 216 270 6 -a 216 869 8 -a 216 115 10 -a 216 923 1 -a 216 531 5 -a 216 721 4 -a 216 324 6 -a 216 667 5 -a 216 628 3 -a 216 269 8 -a 216 359 1 -a 216 641 2 -a 216 314 4 -a 216 898 10 -a 216 422 10 -a 216 661 7 -a 216 980 2 -a 216 59 9 -a 216 419 4 -a 216 133 7 -a 216 234 4 -a 216 679 2 -a 216 243 10 -a 216 294 9 -a 216 736 7 -a 216 42 9 -a 216 451 4 -a 216 817 7 -a 216 88 8 -a 216 487 4 -a 216 62 3 -a 216 956 4 -a 216 601 5 -a 216 984 8 -a 216 462 8 -a 216 298 8 -a 216 283 1 -a 216 105 10 -a 216 925 9 -a 216 551 4 -a 216 463 8 -a 216 541 9 -a 216 864 4 -a 216 336 7 -a 216 962 7 -a 216 851 2 -a 216 996 1 -a 216 917 1 -a 216 909 6 -a 216 390 8 -a 216 25 4 -a 216 119 9 -a 217 44 2 -a 217 268 9 -a 217 412 4 -a 217 780 5 -a 217 309 4 -a 217 862 8 -a 217 572 2 -a 217 397 8 -a 217 324 7 -a 217 633 7 -a 217 328 10 -a 217 924 1 -a 217 592 10 -a 217 790 2 -a 217 197 8 -a 217 874 10 -a 217 894 3 -a 217 97 6 -a 217 400 9 -a 217 332 8 -a 217 638 8 -a 217 240 10 -a 217 667 6 -a 217 575 3 -a 217 66 8 -a 217 639 2 -a 217 468 8 -a 217 974 8 -a 217 4 5 -a 217 492 2 -a 217 68 5 -a 217 48 2 -a 217 759 10 -a 217 479 2 -a 217 827 7 -a 217 44 10 -a 217 316 7 -a 217 374 5 -a 217 440 5 -a 217 639 4 -a 217 767 8 -a 217 539 9 -a 217 573 10 -a 217 532 6 -a 217 735 10 -a 217 422 9 -a 217 401 5 -a 217 832 3 -a 217 821 4 -a 217 732 10 -a 217 445 2 -a 217 36 2 -a 217 375 3 -a 217 101 10 -a 217 462 4 -a 217 51 6 -a 217 954 8 -a 217 118 3 -a 217 39 4 -a 217 688 8 -a 217 597 6 -a 217 865 6 -a 217 731 7 -a 217 912 1 -a 217 214 8 -a 217 146 7 -a 217 527 5 -a 217 195 10 -a 217 913 10 -a 217 41 7 -a 217 767 8 -a 217 420 8 -a 217 775 1 -a 217 164 2 -a 217 821 4 -a 217 582 1 -a 217 985 1 -a 217 528 4 -a 217 2 4 -a 217 902 4 -a 217 97 2 -a 217 890 7 -a 217 458 5 -a 217 147 6 -a 217 882 10 -a 217 387 5 -a 217 264 9 -a 217 920 6 -a 217 51 9 -a 217 860 7 -a 217 761 4 -a 217 781 3 -a 217 748 1 -a 217 974 4 -a 217 927 2 -a 217 250 2 -a 217 145 4 -a 217 815 5 -a 217 290 3 -a 217 911 1 -a 217 210 7 -a 217 40 4 -a 217 51 9 -a 217 6 8 -a 217 622 9 -a 217 11 8 -a 218 534 1 -a 218 623 1 -a 218 6 7 -a 218 411 10 -a 218 619 4 -a 218 102 4 -a 218 277 4 -a 218 53 2 -a 218 248 4 -a 218 134 5 -a 218 439 3 -a 218 512 10 -a 218 29 10 -a 218 489 5 -a 218 347 10 -a 218 789 9 -a 218 246 4 -a 218 70 1 -a 218 739 7 -a 218 148 8 -a 218 319 5 -a 218 883 7 -a 218 962 3 -a 218 608 7 -a 218 769 5 -a 218 147 10 -a 218 648 9 -a 218 819 9 -a 218 153 10 -a 218 245 8 -a 218 829 7 -a 218 686 6 -a 218 867 2 -a 218 835 9 -a 218 72 9 -a 218 462 3 -a 218 936 1 -a 218 348 9 -a 218 514 9 -a 218 160 8 -a 218 481 5 -a 218 952 8 -a 218 671 6 -a 218 510 9 -a 218 417 5 -a 218 274 4 -a 218 662 9 -a 218 63 8 -a 218 809 1 -a 218 381 9 -a 218 870 7 -a 218 746 3 -a 218 989 7 -a 218 615 8 -a 218 892 8 -a 218 612 6 -a 218 409 7 -a 218 20 2 -a 218 856 3 -a 218 214 4 -a 218 705 3 -a 218 698 7 -a 218 24 10 -a 218 777 4 -a 218 135 3 -a 218 959 1 -a 218 100 3 -a 218 648 4 -a 218 94 5 -a 218 581 4 -a 218 576 8 -a 218 764 6 -a 218 66 10 -a 218 992 8 -a 218 757 2 -a 218 339 4 -a 218 629 8 -a 218 819 6 -a 218 327 6 -a 218 413 9 -a 218 175 1 -a 218 172 5 -a 218 134 10 -a 218 139 6 -a 218 786 8 -a 218 1 9 -a 218 750 8 -a 218 171 8 -a 218 21 6 -a 218 581 6 -a 218 384 10 -a 218 725 10 -a 218 255 2 -a 218 407 1 -a 218 477 7 -a 218 389 8 -a 218 341 3 -a 218 577 7 -a 218 13 3 -a 218 435 10 -a 219 133 8 -a 219 588 4 -a 219 174 10 -a 219 198 3 -a 219 555 9 -a 219 930 4 -a 219 536 8 -a 219 159 8 -a 219 724 6 -a 219 862 4 -a 219 571 2 -a 219 899 3 -a 219 10 2 -a 219 704 6 -a 219 13 6 -a 219 795 1 -a 219 704 10 -a 219 763 3 -a 219 965 7 -a 219 724 3 -a 219 319 10 -a 219 324 10 -a 219 425 2 -a 219 573 3 -a 219 730 2 -a 219 901 2 -a 219 962 9 -a 219 47 5 -a 219 453 10 -a 219 974 2 -a 219 481 5 -a 219 585 7 -a 219 537 1 -a 219 654 10 -a 219 782 6 -a 219 67 7 -a 219 560 10 -a 219 294 6 -a 219 225 9 -a 219 259 8 -a 219 131 3 -a 219 795 9 -a 219 133 4 -a 219 140 3 -a 219 474 1 -a 219 146 2 -a 219 935 4 -a 219 153 6 -a 219 908 7 -a 219 875 8 -a 219 877 2 -a 219 202 3 -a 219 175 2 -a 219 277 7 -a 219 775 7 -a 219 904 5 -a 219 153 6 -a 219 712 8 -a 219 950 8 -a 219 606 5 -a 219 661 5 -a 219 406 5 -a 219 166 10 -a 219 173 10 -a 219 36 6 -a 219 948 6 -a 219 239 10 -a 219 595 3 -a 219 217 10 -a 219 463 5 -a 219 853 4 -a 219 347 2 -a 219 233 4 -a 219 986 1 -a 219 487 4 -a 219 706 5 -a 219 107 1 -a 219 397 4 -a 219 858 9 -a 219 247 6 -a 219 710 9 -a 219 191 6 -a 219 421 4 -a 219 986 8 -a 219 965 6 -a 219 301 9 -a 220 115 1 -a 220 652 4 -a 220 226 5 -a 220 720 3 -a 220 288 3 -a 220 632 3 -a 220 885 10 -a 220 460 6 -a 220 667 9 -a 220 808 2 -a 220 698 7 -a 220 237 10 -a 220 136 10 -a 220 65 10 -a 220 347 1 -a 220 368 3 -a 220 26 2 -a 220 833 1 -a 220 49 5 -a 220 132 9 -a 220 205 2 -a 220 907 6 -a 220 121 4 -a 220 451 1 -a 220 592 2 -a 220 312 1 -a 220 872 9 -a 220 554 2 -a 220 252 4 -a 220 148 9 -a 220 668 9 -a 220 904 6 -a 220 373 8 -a 220 363 9 -a 220 167 9 -a 220 223 9 -a 220 627 9 -a 220 646 5 -a 220 7 8 -a 220 300 5 -a 220 882 9 -a 220 6 5 -a 220 436 3 -a 220 947 1 -a 220 352 1 -a 220 803 8 -a 220 972 9 -a 220 160 9 -a 220 852 8 -a 220 80 6 -a 220 364 10 -a 220 734 1 -a 220 200 8 -a 220 815 4 -a 220 301 9 -a 220 511 8 -a 220 662 5 -a 220 854 7 -a 220 763 7 -a 220 809 10 -a 220 497 9 -a 220 642 10 -a 220 157 9 -a 220 859 6 -a 220 808 9 -a 220 137 1 -a 220 58 3 -a 220 410 7 -a 220 782 10 -a 220 64 4 -a 220 710 5 -a 220 640 2 -a 220 69 10 -a 220 121 1 -a 220 562 5 -a 220 421 8 -a 220 923 8 -a 220 509 8 -a 220 580 7 -a 220 750 5 -a 220 588 5 -a 220 944 4 -a 220 459 6 -a 220 788 9 -a 220 734 7 -a 220 760 9 -a 220 274 9 -a 220 371 5 -a 220 589 2 -a 220 12 3 -a 220 155 9 -a 220 62 7 -a 220 653 4 -a 220 311 2 -a 220 920 5 -a 220 437 4 -a 220 447 6 -a 220 977 3 -a 220 846 10 -a 220 205 1 -a 220 16 6 -a 220 531 10 -a 220 844 7 -a 220 85 7 -a 220 651 10 -a 220 381 9 -a 220 505 2 -a 220 550 10 -a 220 889 7 -a 221 60 9 -a 221 275 7 -a 221 453 2 -a 221 734 8 -a 221 216 6 -a 221 712 8 -a 221 469 9 -a 221 489 9 -a 221 58 2 -a 221 33 9 -a 221 501 4 -a 221 212 7 -a 221 94 5 -a 221 129 3 -a 221 523 7 -a 221 565 4 -a 221 969 9 -a 221 966 3 -a 221 387 5 -a 221 149 7 -a 221 982 10 -a 221 917 6 -a 221 992 2 -a 221 42 2 -a 221 544 9 -a 221 348 6 -a 221 546 7 -a 221 69 9 -a 221 213 8 -a 221 605 1 -a 221 343 1 -a 221 665 6 -a 221 584 3 -a 221 52 3 -a 221 880 4 -a 221 271 4 -a 221 520 6 -a 221 344 8 -a 221 329 1 -a 221 553 2 -a 221 844 6 -a 221 540 4 -a 221 646 9 -a 221 973 5 -a 221 38 6 -a 221 635 8 -a 221 513 4 -a 221 577 8 -a 221 899 6 -a 221 131 9 -a 221 534 4 -a 221 792 2 -a 221 99 1 -a 221 575 1 -a 221 311 4 -a 221 446 4 -a 221 96 7 -a 221 379 9 -a 221 658 8 -a 221 700 10 -a 221 721 1 -a 221 298 5 -a 221 259 5 -a 221 773 8 -a 221 153 2 -a 221 530 8 -a 221 268 7 -a 221 497 1 -a 221 858 8 -a 221 820 3 -a 221 316 7 -a 221 373 6 -a 221 442 8 -a 221 264 6 -a 221 411 9 -a 221 52 7 -a 221 777 9 -a 221 393 1 -a 221 628 7 -a 221 651 5 -a 221 523 10 -a 221 137 8 -a 221 418 9 -a 221 621 7 -a 221 711 1 -a 221 728 6 -a 221 43 6 -a 222 806 10 -a 222 82 6 -a 222 700 2 -a 222 482 4 -a 222 803 7 -a 222 998 8 -a 222 740 7 -a 222 551 10 -a 222 126 1 -a 222 245 10 -a 222 818 5 -a 222 622 7 -a 222 78 8 -a 222 614 7 -a 222 938 7 -a 222 451 8 -a 222 31 2 -a 222 177 5 -a 222 861 1 -a 222 82 2 -a 222 953 10 -a 222 229 10 -a 222 710 3 -a 222 580 2 -a 222 751 2 -a 222 846 6 -a 222 997 2 -a 222 348 3 -a 222 533 3 -a 222 701 9 -a 222 390 3 -a 222 314 10 -a 222 782 4 -a 222 65 1 -a 222 795 5 -a 222 560 8 -a 222 38 6 -a 222 511 6 -a 222 86 3 -a 222 164 10 -a 222 755 10 -a 222 904 10 -a 222 785 4 -a 222 833 6 -a 222 493 5 -a 222 698 3 -a 222 259 10 -a 222 523 5 -a 222 875 6 -a 222 95 1 -a 222 604 5 -a 222 803 6 -a 222 323 5 -a 222 289 5 -a 222 358 10 -a 222 49 1 -a 222 111 1 -a 222 331 1 -a 222 396 7 -a 222 643 9 -a 222 7 6 -a 222 785 5 -a 222 956 4 -a 222 788 2 -a 222 850 8 -a 222 727 6 -a 222 324 3 -a 222 887 10 -a 222 213 9 -a 222 409 6 -a 222 26 4 -a 222 967 1 -a 222 288 4 -a 222 811 1 -a 222 775 3 -a 222 780 3 -a 222 484 4 -a 222 9 7 -a 222 278 4 -a 222 334 4 -a 222 103 7 -a 222 882 5 -a 222 113 8 -a 222 425 7 -a 222 146 5 -a 222 470 7 -a 222 474 10 -a 222 256 6 -a 222 800 4 -a 222 869 9 -a 222 898 7 -a 222 806 7 -a 222 630 9 -a 222 830 6 -a 222 570 8 -a 222 455 4 -a 222 532 10 -a 222 893 5 -a 222 317 5 -a 222 744 1 -a 223 277 2 -a 223 343 10 -a 223 686 6 -a 223 565 5 -a 223 129 9 -a 223 437 5 -a 223 320 10 -a 223 612 2 -a 223 445 3 -a 223 598 4 -a 223 946 9 -a 223 548 6 -a 223 455 7 -a 223 34 6 -a 223 972 5 -a 223 600 9 -a 223 503 6 -a 223 421 10 -a 223 856 5 -a 223 279 6 -a 223 266 3 -a 223 729 5 -a 223 60 2 -a 223 895 6 -a 223 534 8 -a 223 629 2 -a 223 325 6 -a 223 41 9 -a 223 497 5 -a 223 641 10 -a 223 784 3 -a 223 774 5 -a 223 983 8 -a 223 446 8 -a 223 314 6 -a 223 87 1 -a 223 882 8 -a 223 633 7 -a 223 699 6 -a 223 302 2 -a 223 206 7 -a 223 620 3 -a 223 849 5 -a 223 660 4 -a 223 653 3 -a 223 797 7 -a 223 236 10 -a 223 131 5 -a 223 193 6 -a 223 67 9 -a 223 409 2 -a 223 458 3 -a 223 795 6 -a 223 469 10 -a 223 328 6 -a 223 305 7 -a 223 73 8 -a 223 652 5 -a 223 345 1 -a 223 570 9 -a 223 269 8 -a 223 105 5 -a 223 319 10 -a 223 227 8 -a 223 550 7 -a 223 632 8 -a 223 314 1 -a 223 407 8 -a 223 240 3 -a 223 708 7 -a 223 446 2 -a 223 607 2 -a 223 533 8 -a 223 81 1 -a 223 235 9 -a 223 305 3 -a 223 316 2 -a 223 365 4 -a 223 497 10 -a 223 382 6 -a 223 774 10 -a 223 955 10 -a 223 153 4 -a 223 218 1 -a 223 258 8 -a 223 457 5 -a 223 290 4 -a 223 910 1 -a 223 801 4 -a 223 859 5 -a 223 154 8 -a 223 905 2 -a 223 153 1 -a 223 380 7 -a 223 430 1 -a 224 784 2 -a 224 693 9 -a 224 836 5 -a 224 680 4 -a 224 520 10 -a 224 445 8 -a 224 262 1 -a 224 28 7 -a 224 525 4 -a 224 496 7 -a 224 332 7 -a 224 841 2 -a 224 861 6 -a 224 828 6 -a 224 198 2 -a 224 610 6 -a 224 758 9 -a 224 350 7 -a 224 827 10 -a 224 806 7 -a 224 92 3 -a 224 901 8 -a 224 583 7 -a 224 951 5 -a 224 30 2 -a 224 463 9 -a 224 79 7 -a 224 409 2 -a 224 893 9 -a 224 863 6 -a 224 78 3 -a 224 704 1 -a 224 862 6 -a 224 757 6 -a 224 199 7 -a 224 282 8 -a 224 226 4 -a 224 806 5 -a 224 490 1 -a 224 557 6 -a 224 622 1 -a 224 326 6 -a 224 361 7 -a 224 820 4 -a 224 935 8 -a 224 94 6 -a 224 145 5 -a 224 737 8 -a 224 85 1 -a 224 951 1 -a 224 829 3 -a 224 985 1 -a 224 509 9 -a 224 755 4 -a 224 971 7 -a 224 833 7 -a 224 399 3 -a 224 839 3 -a 224 671 1 -a 224 476 6 -a 224 519 6 -a 224 508 5 -a 224 208 3 -a 224 717 2 -a 224 789 1 -a 224 202 6 -a 224 943 1 -a 224 571 5 -a 224 692 4 -a 224 475 3 -a 224 168 6 -a 224 835 1 -a 224 987 3 -a 224 928 6 -a 224 929 7 -a 224 108 6 -a 224 640 7 -a 224 34 5 -a 224 444 6 -a 224 974 1 -a 224 542 4 -a 224 174 10 -a 224 963 7 -a 224 488 6 -a 224 337 5 -a 224 303 5 -a 224 653 10 -a 224 812 9 -a 224 821 2 -a 224 137 1 -a 224 513 3 -a 224 925 6 -a 224 197 4 -a 224 431 7 -a 224 471 2 -a 224 888 6 -a 224 906 8 -a 224 639 2 -a 224 881 3 -a 224 716 7 -a 224 601 3 -a 224 784 3 -a 224 620 1 -a 224 708 9 -a 224 399 6 -a 224 609 10 -a 224 741 6 -a 224 843 9 -a 224 558 9 -a 224 258 4 -a 224 496 1 -a 224 746 10 -a 224 998 4 -a 224 833 4 -a 224 24 6 -a 224 627 9 -a 224 620 7 -a 224 844 10 -a 224 763 7 -a 224 615 1 -a 224 332 7 -a 224 663 9 -a 224 812 3 -a 225 763 6 -a 225 110 6 -a 225 675 8 -a 225 644 5 -a 225 748 1 -a 225 531 4 -a 225 335 1 -a 225 324 3 -a 225 290 6 -a 225 955 3 -a 225 8 6 -a 225 689 6 -a 225 539 9 -a 225 748 9 -a 225 507 1 -a 225 72 1 -a 225 498 3 -a 225 567 1 -a 225 727 6 -a 225 472 9 -a 225 375 3 -a 225 750 8 -a 225 74 7 -a 225 995 7 -a 225 569 10 -a 225 836 8 -a 225 585 2 -a 225 900 4 -a 225 474 1 -a 225 372 3 -a 225 638 9 -a 225 583 9 -a 225 23 10 -a 225 257 3 -a 225 306 4 -a 225 553 4 -a 225 592 8 -a 225 630 9 -a 225 843 5 -a 225 522 7 -a 225 637 3 -a 225 507 2 -a 225 36 2 -a 225 360 9 -a 225 107 9 -a 225 341 10 -a 225 486 6 -a 225 673 6 -a 225 43 6 -a 225 957 8 -a 225 24 2 -a 225 792 6 -a 225 6 7 -a 225 336 9 -a 225 841 4 -a 225 578 6 -a 225 212 1 -a 225 291 9 -a 225 950 1 -a 225 849 2 -a 225 873 6 -a 225 972 9 -a 225 82 3 -a 225 155 7 -a 225 500 9 -a 225 673 8 -a 225 784 4 -a 225 318 5 -a 225 170 3 -a 225 396 2 -a 225 824 1 -a 225 205 9 -a 225 755 1 -a 225 812 9 -a 225 311 3 -a 225 72 6 -a 225 274 3 -a 225 983 9 -a 225 114 4 -a 225 206 5 -a 225 906 9 -a 225 212 10 -a 225 999 4 -a 225 217 2 -a 225 28 10 -a 225 553 5 -a 225 428 5 -a 225 318 5 -a 225 478 7 -a 225 253 9 -a 225 167 9 -a 225 425 1 -a 225 334 10 -a 225 321 2 -a 225 924 8 -a 225 80 5 -a 225 218 6 -a 225 151 6 -a 225 475 6 -a 225 17 4 -a 226 355 2 -a 226 205 9 -a 226 829 5 -a 226 665 10 -a 226 276 9 -a 226 78 7 -a 226 623 9 -a 226 390 8 -a 226 283 6 -a 226 605 4 -a 226 271 10 -a 226 494 1 -a 226 579 6 -a 226 487 1 -a 226 522 4 -a 226 107 2 -a 226 915 6 -a 226 839 6 -a 226 584 7 -a 226 143 6 -a 226 476 4 -a 226 301 5 -a 226 908 3 -a 226 457 4 -a 226 380 2 -a 226 101 3 -a 226 607 4 -a 226 854 9 -a 226 117 2 -a 226 961 10 -a 226 35 8 -a 226 945 10 -a 226 601 8 -a 226 310 8 -a 226 199 6 -a 226 699 4 -a 226 281 9 -a 226 803 6 -a 226 969 5 -a 226 774 6 -a 226 358 5 -a 226 432 8 -a 226 271 8 -a 226 464 9 -a 226 322 1 -a 226 86 1 -a 226 24 5 -a 226 464 6 -a 226 66 7 -a 226 7 4 -a 226 939 5 -a 226 367 7 -a 226 914 4 -a 226 371 4 -a 226 746 8 -a 226 977 9 -a 226 576 6 -a 226 107 2 -a 226 913 4 -a 226 610 3 -a 226 27 1 -a 226 489 8 -a 226 919 4 -a 226 25 7 -a 226 687 10 -a 226 594 7 -a 226 305 3 -a 226 466 3 -a 226 538 10 -a 226 54 8 -a 226 823 2 -a 226 969 8 -a 226 325 4 -a 226 262 6 -a 226 266 8 -a 226 410 9 -a 226 285 7 -a 226 729 7 -a 226 475 2 -a 226 292 8 -a 226 643 3 -a 226 841 1 -a 226 181 2 -a 226 563 7 -a 226 171 7 -a 226 965 5 -a 226 114 6 -a 226 277 8 -a 226 853 6 -a 226 723 7 -a 226 303 7 -a 226 317 2 -a 226 617 9 -a 226 327 8 -a 226 186 1 -a 226 631 5 -a 226 445 10 -a 226 724 9 -a 226 685 5 -a 226 243 2 -a 226 668 10 -a 226 504 4 -a 226 934 10 -a 226 394 10 -a 226 789 1 -a 226 638 9 -a 226 868 6 -a 226 56 3 -a 226 257 9 -a 227 685 1 -a 227 236 4 -a 227 245 2 -a 227 223 3 -a 227 406 9 -a 227 186 7 -a 227 336 7 -a 227 682 8 -a 227 14 1 -a 227 34 2 -a 227 985 8 -a 227 331 7 -a 227 650 6 -a 227 287 2 -a 227 310 4 -a 227 836 2 -a 227 918 9 -a 227 754 2 -a 227 535 4 -a 227 578 10 -a 227 996 2 -a 227 178 6 -a 227 562 8 -a 227 475 8 -a 227 87 8 -a 227 955 10 -a 227 239 10 -a 227 725 10 -a 227 798 1 -a 227 294 2 -a 227 981 4 -a 227 458 3 -a 227 530 10 -a 227 201 1 -a 227 680 8 -a 227 935 7 -a 227 386 7 -a 227 593 7 -a 227 400 2 -a 227 24 6 -a 227 553 4 -a 227 730 7 -a 227 674 9 -a 227 839 2 -a 227 15 4 -a 227 485 6 -a 227 732 9 -a 227 768 9 -a 227 285 9 -a 227 739 2 -a 227 172 10 -a 227 846 2 -a 227 189 2 -a 227 259 1 -a 227 776 3 -a 227 428 3 -a 227 983 2 -a 227 550 4 -a 227 721 9 -a 227 939 6 -a 227 226 2 -a 227 115 2 -a 227 663 8 -a 227 137 10 -a 227 501 4 -a 227 653 5 -a 227 729 6 -a 227 900 5 -a 227 677 2 -a 227 257 8 -a 227 605 4 -a 227 326 2 -a 227 71 7 -a 227 619 3 -a 227 810 7 -a 227 803 5 -a 227 362 1 -a 227 804 4 -a 227 63 5 -a 227 76 5 -a 227 975 4 -a 227 909 3 -a 227 264 8 -a 227 209 6 -a 227 660 5 -a 227 691 9 -a 227 167 1 -a 227 185 2 -a 228 388 3 -a 228 81 5 -a 228 168 4 -a 228 613 8 -a 228 196 4 -a 228 830 7 -a 228 749 10 -a 228 696 1 -a 228 458 6 -a 228 453 9 -a 228 571 8 -a 228 110 9 -a 228 709 5 -a 228 151 10 -a 228 435 2 -a 228 780 10 -a 228 769 8 -a 228 220 8 -a 228 558 3 -a 228 106 7 -a 228 620 7 -a 228 181 10 -a 228 974 10 -a 228 504 3 -a 228 444 5 -a 228 158 3 -a 228 140 1 -a 228 111 1 -a 228 325 10 -a 228 324 6 -a 228 498 2 -a 228 405 5 -a 228 491 6 -a 228 86 7 -a 228 600 2 -a 228 296 7 -a 228 835 4 -a 228 271 6 -a 228 754 2 -a 228 263 8 -a 228 841 2 -a 228 863 9 -a 228 972 1 -a 228 991 5 -a 228 274 6 -a 228 727 7 -a 228 735 6 -a 228 493 3 -a 228 260 6 -a 228 840 4 -a 228 492 9 -a 228 879 9 -a 228 441 7 -a 228 359 6 -a 228 440 1 -a 228 598 9 -a 228 498 1 -a 228 550 10 -a 228 922 8 -a 228 821 2 -a 228 23 8 -a 228 303 8 -a 228 288 3 -a 228 108 1 -a 228 902 3 -a 228 583 7 -a 228 942 6 -a 228 149 2 -a 228 312 10 -a 228 181 4 -a 228 989 1 -a 228 151 2 -a 228 128 8 -a 228 956 9 -a 228 424 5 -a 228 854 5 -a 228 666 7 -a 228 916 1 -a 228 89 5 -a 228 482 1 -a 228 383 9 -a 228 967 9 -a 228 477 10 -a 228 823 4 -a 228 301 6 -a 228 916 6 -a 228 397 6 -a 228 798 2 -a 228 441 4 -a 228 294 4 -a 228 595 5 -a 228 463 7 -a 228 596 4 -a 228 882 7 -a 228 571 2 -a 228 474 3 -a 228 440 8 -a 228 488 2 -a 228 622 1 -a 228 752 8 -a 229 668 6 -a 229 586 8 -a 229 902 5 -a 229 795 8 -a 229 517 1 -a 229 301 1 -a 229 624 4 -a 229 159 6 -a 229 192 9 -a 229 712 9 -a 229 640 10 -a 229 575 7 -a 229 655 2 -a 229 92 2 -a 229 373 4 -a 229 955 3 -a 229 769 10 -a 229 729 1 -a 229 424 1 -a 229 39 6 -a 229 299 8 -a 229 887 4 -a 229 634 8 -a 229 156 5 -a 229 433 7 -a 229 83 10 -a 229 595 1 -a 229 920 6 -a 229 704 5 -a 229 322 10 -a 229 564 5 -a 229 266 7 -a 229 199 7 -a 229 334 8 -a 229 782 10 -a 229 499 6 -a 229 958 7 -a 229 940 6 -a 229 691 6 -a 229 645 4 -a 229 555 6 -a 229 241 1 -a 229 275 6 -a 229 647 4 -a 229 613 5 -a 229 206 8 -a 229 630 2 -a 229 358 2 -a 229 934 6 -a 229 29 4 -a 229 396 1 -a 229 208 9 -a 229 915 7 -a 229 5 6 -a 229 363 8 -a 229 323 2 -a 229 88 4 -a 229 957 8 -a 229 219 9 -a 229 791 1 -a 229 255 4 -a 229 782 1 -a 229 32 10 -a 229 453 9 -a 229 91 5 -a 229 814 8 -a 229 952 8 -a 229 24 4 -a 229 729 3 -a 229 618 5 -a 229 669 3 -a 229 260 6 -a 229 858 5 -a 229 943 3 -a 229 906 10 -a 229 446 4 -a 229 124 7 -a 229 511 3 -a 229 803 6 -a 229 33 10 -a 229 539 3 -a 229 174 1 -a 229 240 9 -a 229 430 6 -a 229 179 1 -a 229 602 3 -a 229 752 5 -a 229 266 6 -a 229 535 1 -a 229 970 8 -a 229 32 10 -a 229 789 10 -a 229 727 2 -a 229 64 2 -a 229 217 1 -a 229 818 8 -a 229 877 4 -a 229 144 1 -a 229 841 9 -a 229 581 10 -a 229 761 5 -a 229 485 10 -a 229 840 2 -a 229 594 6 -a 229 404 6 -a 229 721 10 -a 230 16 10 -a 230 527 5 -a 230 207 1 -a 230 818 1 -a 230 560 6 -a 230 746 10 -a 230 992 5 -a 230 799 8 -a 230 151 10 -a 230 146 7 -a 230 377 9 -a 230 902 2 -a 230 411 5 -a 230 911 10 -a 230 848 10 -a 230 442 8 -a 230 675 4 -a 230 550 3 -a 230 505 5 -a 230 891 9 -a 230 343 3 -a 230 357 6 -a 230 11 2 -a 230 160 8 -a 230 938 7 -a 230 771 4 -a 230 644 7 -a 230 753 8 -a 230 341 1 -a 230 23 1 -a 230 450 6 -a 230 356 1 -a 230 550 2 -a 230 656 10 -a 230 149 2 -a 230 85 7 -a 230 377 5 -a 230 116 2 -a 230 883 10 -a 230 527 5 -a 230 261 5 -a 230 235 9 -a 230 405 2 -a 230 671 8 -a 230 121 2 -a 230 228 9 -a 230 89 7 -a 230 795 8 -a 230 777 8 -a 230 593 2 -a 230 662 7 -a 230 96 2 -a 230 950 4 -a 230 672 4 -a 230 255 10 -a 230 863 8 -a 230 418 5 -a 230 898 10 -a 230 591 8 -a 230 758 7 -a 230 921 5 -a 230 16 2 -a 230 89 4 -a 230 446 1 -a 230 672 7 -a 230 238 8 -a 230 530 3 -a 230 24 9 -a 230 353 6 -a 230 388 8 -a 230 551 2 -a 230 614 5 -a 230 623 8 -a 230 955 10 -a 230 260 1 -a 230 743 3 -a 230 158 9 -a 230 348 9 -a 230 514 9 -a 230 934 4 -a 230 941 7 -a 230 151 7 -a 230 5 2 -a 230 866 9 -a 230 822 4 -a 230 259 4 -a 230 704 3 -a 230 215 2 -a 230 133 8 -a 230 270 10 -a 230 973 10 -a 230 29 8 -a 230 286 3 -a 230 37 4 -a 230 474 4 -a 230 957 6 -a 230 274 4 -a 231 980 8 -a 231 627 2 -a 231 366 3 -a 231 506 4 -a 231 216 9 -a 231 988 10 -a 231 436 6 -a 231 475 3 -a 231 707 8 -a 231 593 5 -a 231 823 3 -a 231 196 4 -a 231 503 10 -a 231 739 6 -a 231 346 10 -a 231 507 10 -a 231 580 5 -a 231 143 10 -a 231 766 8 -a 231 259 1 -a 231 357 5 -a 231 898 3 -a 231 528 8 -a 231 305 7 -a 231 926 7 -a 231 813 5 -a 231 342 9 -a 231 375 6 -a 231 745 8 -a 231 615 9 -a 231 353 10 -a 231 701 1 -a 231 217 4 -a 231 718 8 -a 231 182 1 -a 231 432 7 -a 231 682 5 -a 231 618 8 -a 231 907 3 -a 231 364 5 -a 231 186 1 -a 231 705 8 -a 231 559 3 -a 231 688 7 -a 231 419 7 -a 231 904 9 -a 231 171 6 -a 231 998 2 -a 231 22 2 -a 231 936 8 -a 231 232 7 -a 231 378 6 -a 231 809 6 -a 231 759 6 -a 231 683 3 -a 231 710 2 -a 231 548 5 -a 231 60 1 -a 231 268 7 -a 231 614 5 -a 231 412 3 -a 231 968 5 -a 231 831 4 -a 231 105 3 -a 231 126 10 -a 231 238 5 -a 231 786 1 -a 231 743 10 -a 231 120 1 -a 231 125 8 -a 231 928 7 -a 231 824 2 -a 231 683 4 -a 231 592 8 -a 231 218 1 -a 231 562 8 -a 231 762 4 -a 231 191 2 -a 231 583 4 -a 231 673 6 -a 231 422 9 -a 231 961 8 -a 231 457 4 -a 231 157 6 -a 231 619 10 -a 231 142 8 -a 231 704 3 -a 231 618 8 -a 231 201 2 -a 231 971 7 -a 231 207 3 -a 231 612 3 -a 232 915 4 -a 232 13 2 -a 232 716 7 -a 232 16 10 -a 232 251 4 -a 232 478 1 -a 232 758 4 -a 232 370 2 -a 232 602 5 -a 232 661 3 -a 232 170 4 -a 232 261 8 -a 232 228 8 -a 232 387 2 -a 232 822 4 -a 232 989 9 -a 232 578 5 -a 232 381 3 -a 232 637 4 -a 232 999 2 -a 232 317 6 -a 232 69 2 -a 232 131 1 -a 232 935 8 -a 232 210 8 -a 232 834 10 -a 232 528 2 -a 232 410 4 -a 232 781 7 -a 232 734 6 -a 232 671 7 -a 232 747 8 -a 232 713 6 -a 232 686 6 -a 232 997 4 -a 232 166 9 -a 232 419 1 -a 232 342 1 -a 232 767 5 -a 232 55 4 -a 232 511 9 -a 232 3 6 -a 232 283 8 -a 232 898 10 -a 232 825 8 -a 232 247 2 -a 232 451 7 -a 232 181 6 -a 232 884 1 -a 232 425 5 -a 232 497 8 -a 232 952 10 -a 232 556 2 -a 232 407 2 -a 232 138 3 -a 232 365 8 -a 232 934 3 -a 232 547 7 -a 232 121 8 -a 232 643 7 -a 232 544 4 -a 232 791 3 -a 232 365 9 -a 232 232 1 -a 232 452 3 -a 232 337 8 -a 232 397 6 -a 232 870 9 -a 232 679 3 -a 232 139 8 -a 232 925 8 -a 232 165 4 -a 232 142 7 -a 232 183 6 -a 232 38 6 -a 232 966 1 -a 232 429 8 -a 232 488 8 -a 232 122 8 -a 232 288 10 -a 232 913 7 -a 232 618 4 -a 232 216 9 -a 232 444 2 -a 232 353 7 -a 232 808 10 -a 232 933 8 -a 232 899 8 -a 232 929 9 -a 232 551 8 -a 232 418 3 -a 232 695 6 -a 232 916 1 -a 232 649 1 -a 232 123 1 -a 232 228 8 -a 232 21 2 -a 232 992 9 -a 232 906 1 -a 232 160 7 -a 232 892 7 -a 232 47 3 -a 232 301 8 -a 232 50 10 -a 232 84 2 -a 232 242 1 -a 232 479 8 -a 233 572 9 -a 233 363 6 -a 233 766 6 -a 233 460 1 -a 233 980 5 -a 233 981 2 -a 233 903 6 -a 233 979 5 -a 233 309 6 -a 233 686 10 -a 233 887 4 -a 233 184 9 -a 233 590 4 -a 233 413 5 -a 233 601 9 -a 233 261 7 -a 233 304 3 -a 233 226 5 -a 233 383 3 -a 233 532 1 -a 233 246 1 -a 233 350 2 -a 233 413 10 -a 233 405 6 -a 233 218 3 -a 233 459 10 -a 233 705 9 -a 233 267 8 -a 233 543 4 -a 233 946 5 -a 233 745 7 -a 233 90 8 -a 233 284 1 -a 233 487 7 -a 233 549 10 -a 233 239 6 -a 233 443 10 -a 233 427 10 -a 233 193 10 -a 233 752 10 -a 233 88 8 -a 233 55 5 -a 233 935 5 -a 233 678 9 -a 233 468 10 -a 233 511 8 -a 233 938 4 -a 233 771 3 -a 233 736 6 -a 233 296 4 -a 233 278 2 -a 233 982 3 -a 233 645 4 -a 233 691 7 -a 233 362 7 -a 233 862 4 -a 233 125 4 -a 233 43 9 -a 233 105 6 -a 233 667 6 -a 233 988 4 -a 233 849 8 -a 233 756 2 -a 233 248 8 -a 233 311 1 -a 233 280 9 -a 233 486 3 -a 233 754 8 -a 233 706 6 -a 233 679 8 -a 233 481 7 -a 233 794 5 -a 233 733 6 -a 233 391 6 -a 233 447 1 -a 233 176 8 -a 233 901 7 -a 233 360 8 -a 233 947 6 -a 233 613 1 -a 233 655 10 -a 233 200 6 -a 233 570 1 -a 233 275 7 -a 233 890 2 -a 233 931 8 -a 233 113 6 -a 233 973 3 -a 233 217 1 -a 233 657 1 -a 233 937 6 -a 233 41 6 -a 233 389 3 -a 233 160 6 -a 233 352 10 -a 234 668 3 -a 234 645 2 -a 234 81 9 -a 234 350 10 -a 234 299 1 -a 234 561 4 -a 234 119 10 -a 234 8 5 -a 234 951 10 -a 234 565 6 -a 234 183 5 -a 234 827 1 -a 234 924 6 -a 234 105 6 -a 234 415 9 -a 234 554 10 -a 234 305 3 -a 234 984 3 -a 234 828 4 -a 234 170 8 -a 234 891 2 -a 234 940 9 -a 234 160 8 -a 234 839 5 -a 234 132 8 -a 234 817 1 -a 234 751 4 -a 234 173 10 -a 234 181 9 -a 234 910 9 -a 234 524 10 -a 234 848 9 -a 234 531 8 -a 234 604 3 -a 234 173 1 -a 234 829 6 -a 234 140 9 -a 234 291 1 -a 234 836 2 -a 234 66 7 -a 234 855 4 -a 234 892 6 -a 234 754 5 -a 234 99 5 -a 234 283 10 -a 234 283 5 -a 234 403 7 -a 234 242 6 -a 234 87 1 -a 234 573 5 -a 234 108 4 -a 234 2 4 -a 234 732 1 -a 234 947 9 -a 234 134 2 -a 234 524 1 -a 234 673 2 -a 234 306 1 -a 234 704 7 -a 234 559 5 -a 234 829 4 -a 234 528 10 -a 234 65 8 -a 234 408 4 -a 234 700 1 -a 234 893 1 -a 234 547 10 -a 234 991 6 -a 234 705 2 -a 234 612 5 -a 234 821 4 -a 234 699 9 -a 234 479 1 -a 234 551 4 -a 234 797 4 -a 234 761 4 -a 234 833 3 -a 234 176 5 -a 234 919 3 -a 234 748 4 -a 234 86 6 -a 234 921 3 -a 234 455 10 -a 234 8 4 -a 234 30 5 -a 234 979 7 -a 234 681 9 -a 234 335 1 -a 234 658 7 -a 234 215 9 -a 234 139 10 -a 234 161 10 -a 234 279 7 -a 234 546 6 -a 234 861 7 -a 234 147 9 -a 234 68 7 -a 234 827 10 -a 234 851 10 -a 234 679 4 -a 234 623 1 -a 234 525 6 -a 234 133 3 -a 234 149 2 -a 234 298 8 -a 234 894 8 -a 234 982 5 -a 234 473 8 -a 234 872 1 -a 234 876 7 -a 235 196 10 -a 235 957 3 -a 235 772 6 -a 235 650 3 -a 235 965 6 -a 235 801 6 -a 235 604 10 -a 235 621 4 -a 235 111 2 -a 235 238 5 -a 235 835 7 -a 235 249 3 -a 235 398 10 -a 235 89 1 -a 235 794 4 -a 235 234 3 -a 235 235 8 -a 235 861 2 -a 235 36 8 -a 235 62 6 -a 235 515 5 -a 235 659 5 -a 235 586 2 -a 235 648 7 -a 235 807 10 -a 235 883 4 -a 235 517 1 -a 235 764 6 -a 235 331 6 -a 235 364 9 -a 235 616 10 -a 235 526 6 -a 235 296 3 -a 235 363 1 -a 235 152 3 -a 235 236 10 -a 235 140 5 -a 235 755 6 -a 235 856 4 -a 235 250 8 -a 235 992 9 -a 235 666 4 -a 235 499 8 -a 235 366 9 -a 235 754 8 -a 235 268 2 -a 235 599 4 -a 235 989 5 -a 235 105 6 -a 235 635 4 -a 235 26 1 -a 235 619 7 -a 235 269 6 -a 235 611 1 -a 235 242 4 -a 235 51 4 -a 235 470 7 -a 235 758 7 -a 235 815 10 -a 235 800 9 -a 235 97 6 -a 235 406 2 -a 235 302 5 -a 235 393 4 -a 235 768 3 -a 235 453 9 -a 235 628 2 -a 235 907 8 -a 235 183 8 -a 235 460 3 -a 235 133 8 -a 235 151 9 -a 235 101 3 -a 235 631 5 -a 235 516 6 -a 235 855 9 -a 235 898 5 -a 235 90 9 -a 235 819 7 -a 235 724 10 -a 235 844 8 -a 235 597 10 -a 235 992 4 -a 235 430 1 -a 235 838 9 -a 235 19 8 -a 235 899 3 -a 235 572 9 -a 235 833 3 -a 235 675 10 -a 235 668 1 -a 235 214 2 -a 235 976 5 -a 235 36 8 -a 235 981 4 -a 235 404 10 -a 235 664 4 -a 235 864 6 -a 235 586 6 -a 235 99 5 -a 235 996 3 -a 235 736 3 -a 236 199 10 -a 236 602 9 -a 236 227 2 -a 236 29 6 -a 236 475 4 -a 236 317 8 -a 236 847 3 -a 236 453 5 -a 236 16 5 -a 236 666 3 -a 236 25 8 -a 236 72 4 -a 236 862 7 -a 236 2 7 -a 236 970 6 -a 236 409 5 -a 236 834 1 -a 236 620 9 -a 236 53 9 -a 236 23 3 -a 236 571 3 -a 236 88 9 -a 236 974 10 -a 236 751 7 -a 236 842 6 -a 236 536 1 -a 236 849 8 -a 236 813 7 -a 236 247 1 -a 236 24 2 -a 236 390 9 -a 236 474 9 -a 236 52 4 -a 236 865 8 -a 236 790 10 -a 236 899 5 -a 236 293 3 -a 236 805 10 -a 236 540 9 -a 236 317 9 -a 236 788 5 -a 236 611 4 -a 236 154 2 -a 236 789 2 -a 236 557 3 -a 236 563 5 -a 236 598 3 -a 236 152 2 -a 236 615 9 -a 236 620 5 -a 236 723 8 -a 236 702 7 -a 236 599 2 -a 236 672 3 -a 236 429 8 -a 236 416 7 -a 236 183 2 -a 236 253 10 -a 236 205 1 -a 236 430 3 -a 236 276 6 -a 236 594 10 -a 236 903 7 -a 236 328 9 -a 236 434 9 -a 236 668 3 -a 236 202 8 -a 236 726 3 -a 236 448 2 -a 236 741 3 -a 236 18 1 -a 236 212 7 -a 236 328 2 -a 236 172 3 -a 236 1000 2 -a 236 884 2 -a 236 734 1 -a 236 574 7 -a 236 11 4 -a 236 324 8 -a 236 169 6 -a 236 733 4 -a 236 1 10 -a 236 767 9 -a 236 381 2 -a 236 429 1 -a 236 159 3 -a 236 563 5 -a 236 682 4 -a 236 363 7 -a 236 992 3 -a 236 957 6 -a 236 956 9 -a 236 870 3 -a 236 260 10 -a 236 366 5 -a 236 513 1 -a 236 461 3 -a 236 67 10 -a 236 961 1 -a 236 178 6 -a 236 85 4 -a 236 148 5 -a 236 505 6 -a 236 256 5 -a 236 123 10 -a 236 364 4 -a 236 989 4 -a 237 696 2 -a 237 374 6 -a 237 288 5 -a 237 865 10 -a 237 83 8 -a 237 288 4 -a 237 607 10 -a 237 463 6 -a 237 717 9 -a 237 765 8 -a 237 1 9 -a 237 374 2 -a 237 103 5 -a 237 993 8 -a 237 306 2 -a 237 35 5 -a 237 838 4 -a 237 566 10 -a 237 400 10 -a 237 327 8 -a 237 2 10 -a 237 466 3 -a 237 263 2 -a 237 179 2 -a 237 550 6 -a 237 410 6 -a 237 683 9 -a 237 805 5 -a 237 532 9 -a 237 22 5 -a 237 769 6 -a 237 204 2 -a 237 396 4 -a 237 32 9 -a 237 44 4 -a 237 478 5 -a 237 320 10 -a 237 650 7 -a 237 940 3 -a 237 12 1 -a 237 391 1 -a 237 940 2 -a 237 385 8 -a 237 493 2 -a 237 908 8 -a 237 690 10 -a 237 527 10 -a 237 722 6 -a 237 231 9 -a 237 926 2 -a 237 24 5 -a 237 233 2 -a 237 368 7 -a 237 286 3 -a 237 411 5 -a 237 917 4 -a 237 695 5 -a 237 70 9 -a 237 698 7 -a 237 202 10 -a 237 91 7 -a 237 442 4 -a 237 405 7 -a 237 486 3 -a 237 474 9 -a 237 448 8 -a 237 963 8 -a 237 793 6 -a 237 74 6 -a 237 878 3 -a 237 804 10 -a 237 464 1 -a 237 794 5 -a 237 164 7 -a 237 956 4 -a 237 677 10 -a 237 853 5 -a 237 459 7 -a 237 374 4 -a 237 60 1 -a 237 360 8 -a 237 397 6 -a 237 292 2 -a 237 727 5 -a 237 682 4 -a 237 702 2 -a 237 620 5 -a 237 352 9 -a 237 771 5 -a 237 293 10 -a 237 554 7 -a 237 862 3 -a 237 734 2 -a 237 958 10 -a 238 323 1 -a 238 183 5 -a 238 382 3 -a 238 262 5 -a 238 975 8 -a 238 455 3 -a 238 115 2 -a 238 754 2 -a 238 918 5 -a 238 908 9 -a 238 917 8 -a 238 849 10 -a 238 561 2 -a 238 746 1 -a 238 283 5 -a 238 934 7 -a 238 805 7 -a 238 643 2 -a 238 307 8 -a 238 72 6 -a 238 345 2 -a 238 988 8 -a 238 773 7 -a 238 964 6 -a 238 316 8 -a 238 520 4 -a 238 232 1 -a 238 869 2 -a 238 357 5 -a 238 966 5 -a 238 802 2 -a 238 679 9 -a 238 124 6 -a 238 159 9 -a 238 940 4 -a 238 75 7 -a 238 613 9 -a 238 31 8 -a 238 828 5 -a 238 506 5 -a 238 938 5 -a 238 721 2 -a 238 331 8 -a 238 474 5 -a 238 442 4 -a 238 613 5 -a 238 384 5 -a 238 222 7 -a 238 231 5 -a 238 690 6 -a 238 293 9 -a 238 576 3 -a 238 653 5 -a 238 41 5 -a 238 515 10 -a 238 968 7 -a 238 560 9 -a 238 747 4 -a 238 812 4 -a 238 916 2 -a 238 688 8 -a 238 590 2 -a 238 571 4 -a 238 811 5 -a 238 748 6 -a 238 486 7 -a 238 885 9 -a 238 337 10 -a 238 516 8 -a 238 689 6 -a 238 842 1 -a 238 430 4 -a 238 385 8 -a 238 148 4 -a 238 903 5 -a 238 826 4 -a 238 761 3 -a 238 262 7 -a 238 23 10 -a 238 991 2 -a 238 951 9 -a 238 315 5 -a 238 542 5 -a 238 580 5 -a 238 355 8 -a 238 33 2 -a 238 523 8 -a 238 915 2 -a 238 779 2 -a 238 311 10 -a 238 806 5 -a 238 442 9 -a 238 900 8 -a 238 352 3 -a 238 228 8 -a 238 623 2 -a 239 838 4 -a 239 89 8 -a 239 959 2 -a 239 329 9 -a 239 777 5 -a 239 777 1 -a 239 758 4 -a 239 137 9 -a 239 924 5 -a 239 637 2 -a 239 962 7 -a 239 660 10 -a 239 898 5 -a 239 984 9 -a 239 627 3 -a 239 825 5 -a 239 274 2 -a 239 144 7 -a 239 380 9 -a 239 628 9 -a 239 176 8 -a 239 902 4 -a 239 518 9 -a 239 954 8 -a 239 188 6 -a 239 300 8 -a 239 371 1 -a 239 63 2 -a 239 651 2 -a 239 599 8 -a 239 686 3 -a 239 464 1 -a 239 687 4 -a 239 620 10 -a 239 793 7 -a 239 439 2 -a 239 372 9 -a 239 526 1 -a 239 575 1 -a 239 272 6 -a 239 138 9 -a 239 512 8 -a 239 931 2 -a 239 12 2 -a 239 471 10 -a 239 533 3 -a 239 836 8 -a 239 744 1 -a 239 677 2 -a 239 191 10 -a 239 347 9 -a 239 852 7 -a 239 68 5 -a 239 865 6 -a 239 782 5 -a 239 256 2 -a 239 140 8 -a 239 128 6 -a 239 318 8 -a 239 790 9 -a 239 726 6 -a 239 230 1 -a 239 388 6 -a 239 599 1 -a 239 826 8 -a 239 970 1 -a 239 523 1 -a 239 376 9 -a 239 217 9 -a 239 661 5 -a 239 887 1 -a 239 124 3 -a 239 672 6 -a 239 333 1 -a 239 656 4 -a 239 483 4 -a 239 52 2 -a 239 308 3 -a 239 673 2 -a 239 399 7 -a 239 136 2 -a 239 740 9 -a 239 239 2 -a 239 917 10 -a 239 995 7 -a 239 378 3 -a 239 20 9 -a 239 289 7 -a 239 143 9 -a 239 746 3 -a 239 267 4 -a 239 372 3 -a 239 109 3 -a 239 865 1 -a 239 369 5 -a 239 935 8 -a 239 811 1 -a 239 892 9 -a 239 286 10 -a 239 3 6 -a 239 528 1 -a 240 149 8 -a 240 126 7 -a 240 175 9 -a 240 481 6 -a 240 782 7 -a 240 657 3 -a 240 533 2 -a 240 65 2 -a 240 305 4 -a 240 931 2 -a 240 200 2 -a 240 20 2 -a 240 145 10 -a 240 92 6 -a 240 522 3 -a 240 112 3 -a 240 279 10 -a 240 664 2 -a 240 857 1 -a 240 545 3 -a 240 12 8 -a 240 965 10 -a 240 386 8 -a 240 380 8 -a 240 875 4 -a 240 172 8 -a 240 247 10 -a 240 137 9 -a 240 174 6 -a 240 774 1 -a 240 285 10 -a 240 300 7 -a 240 948 2 -a 240 765 8 -a 240 57 2 -a 240 580 4 -a 240 273 1 -a 240 121 4 -a 240 884 4 -a 240 179 6 -a 240 321 9 -a 240 904 5 -a 240 323 9 -a 240 412 7 -a 240 894 10 -a 240 844 5 -a 240 523 7 -a 240 148 7 -a 240 484 10 -a 240 355 7 -a 240 692 1 -a 240 495 3 -a 240 296 4 -a 240 53 3 -a 240 874 2 -a 240 146 7 -a 240 224 3 -a 240 97 5 -a 240 282 10 -a 240 398 2 -a 240 870 10 -a 240 566 4 -a 240 697 10 -a 240 794 9 -a 240 307 10 -a 240 753 9 -a 240 349 6 -a 240 579 4 -a 240 873 8 -a 240 209 5 -a 240 758 4 -a 240 169 1 -a 240 88 3 -a 240 56 1 -a 240 581 1 -a 240 981 1 -a 240 900 2 -a 240 79 7 -a 240 104 2 -a 240 359 6 -a 240 434 3 -a 240 795 3 -a 240 853 5 -a 240 729 6 -a 240 848 7 -a 240 702 10 -a 240 874 5 -a 240 47 10 -a 240 798 9 -a 240 132 2 -a 241 444 1 -a 241 644 5 -a 241 697 2 -a 241 116 8 -a 241 413 8 -a 241 868 2 -a 241 761 5 -a 241 558 5 -a 241 717 2 -a 241 969 5 -a 241 291 4 -a 241 885 3 -a 241 32 5 -a 241 346 8 -a 241 441 10 -a 241 221 8 -a 241 520 6 -a 241 91 3 -a 241 579 2 -a 241 953 7 -a 241 886 7 -a 241 407 2 -a 241 657 1 -a 241 709 9 -a 241 85 5 -a 241 506 1 -a 241 755 8 -a 241 882 1 -a 241 637 6 -a 241 175 2 -a 241 501 4 -a 241 310 10 -a 241 290 10 -a 241 913 6 -a 241 288 4 -a 241 134 6 -a 241 650 1 -a 241 845 4 -a 241 850 1 -a 241 594 7 -a 241 111 3 -a 241 710 5 -a 241 626 2 -a 241 457 1 -a 241 127 1 -a 241 613 2 -a 241 677 10 -a 241 646 10 -a 241 704 8 -a 241 232 8 -a 241 574 8 -a 241 565 10 -a 241 638 9 -a 241 206 9 -a 241 249 9 -a 241 722 6 -a 241 711 2 -a 241 580 4 -a 241 324 10 -a 241 153 2 -a 241 56 9 -a 241 633 1 -a 241 443 7 -a 241 969 2 -a 241 920 8 -a 241 576 9 -a 241 594 3 -a 241 741 1 -a 241 401 10 -a 241 163 8 -a 241 851 8 -a 241 86 5 -a 241 788 4 -a 241 283 6 -a 241 212 3 -a 241 377 1 -a 241 960 9 -a 241 857 3 -a 241 56 1 -a 241 167 7 -a 241 406 7 -a 241 620 2 -a 241 804 6 -a 241 611 1 -a 241 868 7 -a 241 502 6 -a 241 298 1 -a 241 846 8 -a 241 57 9 -a 241 621 2 -a 241 999 9 -a 241 112 10 -a 241 229 2 -a 241 417 4 -a 242 56 8 -a 242 124 1 -a 242 992 4 -a 242 649 7 -a 242 864 5 -a 242 368 10 -a 242 812 5 -a 242 691 4 -a 242 453 6 -a 242 575 9 -a 242 973 7 -a 242 665 5 -a 242 951 7 -a 242 908 6 -a 242 497 2 -a 242 50 8 -a 242 903 1 -a 242 601 8 -a 242 854 2 -a 242 489 7 -a 242 444 4 -a 242 331 9 -a 242 786 10 -a 242 266 9 -a 242 387 1 -a 242 382 3 -a 242 240 9 -a 242 498 5 -a 242 610 2 -a 242 656 10 -a 242 554 3 -a 242 734 1 -a 242 623 5 -a 242 178 10 -a 242 573 4 -a 242 990 5 -a 242 989 10 -a 242 239 7 -a 242 418 5 -a 242 540 1 -a 242 188 8 -a 242 58 7 -a 242 466 7 -a 242 71 1 -a 242 555 5 -a 242 448 5 -a 242 121 2 -a 242 433 5 -a 242 24 10 -a 242 974 1 -a 242 921 6 -a 242 468 3 -a 242 280 4 -a 242 683 7 -a 242 733 1 -a 242 666 6 -a 242 40 6 -a 242 972 8 -a 242 139 9 -a 242 650 7 -a 242 603 9 -a 242 692 1 -a 242 359 9 -a 242 201 5 -a 242 870 6 -a 242 931 4 -a 242 166 5 -a 242 834 8 -a 242 146 6 -a 242 583 1 -a 242 349 1 -a 242 333 6 -a 242 641 6 -a 242 815 3 -a 242 403 9 -a 242 171 4 -a 242 238 7 -a 242 523 1 -a 242 603 9 -a 242 261 9 -a 242 472 8 -a 242 499 5 -a 242 728 5 -a 242 751 1 -a 242 157 2 -a 242 436 6 -a 242 392 9 -a 242 197 6 -a 242 383 5 -a 242 531 8 -a 242 846 4 -a 242 985 10 -a 242 198 7 -a 242 180 7 -a 242 161 3 -a 242 43 3 -a 242 86 3 -a 242 326 9 -a 242 877 8 -a 242 231 2 -a 243 909 1 -a 243 201 4 -a 243 563 5 -a 243 525 8 -a 243 966 4 -a 243 695 6 -a 243 228 4 -a 243 464 10 -a 243 273 1 -a 243 489 4 -a 243 936 6 -a 243 771 10 -a 243 192 4 -a 243 662 4 -a 243 928 4 -a 243 628 10 -a 243 30 1 -a 243 100 8 -a 243 560 4 -a 243 945 7 -a 243 971 6 -a 243 757 8 -a 243 100 9 -a 243 107 3 -a 243 800 8 -a 243 185 8 -a 243 433 9 -a 243 652 2 -a 243 416 9 -a 243 317 8 -a 243 852 8 -a 243 978 8 -a 243 841 4 -a 243 843 2 -a 243 919 6 -a 243 511 10 -a 243 46 8 -a 243 359 5 -a 243 783 8 -a 243 534 8 -a 243 270 4 -a 243 529 9 -a 243 726 7 -a 243 931 1 -a 243 432 7 -a 243 329 2 -a 243 960 5 -a 243 531 6 -a 243 314 8 -a 243 495 10 -a 243 451 6 -a 243 260 2 -a 243 228 3 -a 243 550 2 -a 243 367 3 -a 243 3 10 -a 243 735 1 -a 243 799 9 -a 243 654 1 -a 243 126 10 -a 243 91 8 -a 243 481 3 -a 243 79 7 -a 243 931 1 -a 243 299 9 -a 243 998 8 -a 243 417 4 -a 243 345 4 -a 243 332 9 -a 243 175 3 -a 243 878 8 -a 243 601 3 -a 243 703 9 -a 243 579 1 -a 243 507 10 -a 243 111 1 -a 243 907 10 -a 243 443 7 -a 243 641 1 -a 243 197 2 -a 243 937 7 -a 243 68 10 -a 243 456 10 -a 243 140 3 -a 243 617 10 -a 243 822 9 -a 243 142 10 -a 243 327 5 -a 243 596 8 -a 243 795 1 -a 243 452 4 -a 243 686 9 -a 244 252 8 -a 244 531 7 -a 244 592 1 -a 244 550 5 -a 244 504 7 -a 244 894 6 -a 244 835 5 -a 244 158 7 -a 244 748 7 -a 244 411 6 -a 244 861 9 -a 244 302 9 -a 244 917 8 -a 244 971 7 -a 244 185 3 -a 244 335 4 -a 244 587 4 -a 244 381 10 -a 244 248 9 -a 244 654 4 -a 244 836 5 -a 244 387 10 -a 244 247 2 -a 244 634 6 -a 244 529 4 -a 244 573 1 -a 244 205 4 -a 244 299 2 -a 244 1 10 -a 244 891 8 -a 244 550 9 -a 244 531 6 -a 244 458 7 -a 244 76 8 -a 244 10 1 -a 244 442 10 -a 244 969 9 -a 244 844 7 -a 244 599 1 -a 244 692 3 -a 244 230 10 -a 244 435 4 -a 244 994 4 -a 244 122 3 -a 244 381 8 -a 244 154 6 -a 244 457 3 -a 244 968 10 -a 244 534 10 -a 244 704 1 -a 244 597 6 -a 244 345 10 -a 244 66 1 -a 244 843 8 -a 244 978 5 -a 244 594 7 -a 244 392 5 -a 244 159 7 -a 244 893 4 -a 244 392 6 -a 244 25 6 -a 244 418 5 -a 244 922 2 -a 244 482 1 -a 244 493 8 -a 244 931 1 -a 244 923 7 -a 244 438 6 -a 244 750 4 -a 244 498 7 -a 244 105 7 -a 244 979 3 -a 244 932 9 -a 244 74 2 -a 244 76 10 -a 244 289 9 -a 244 227 4 -a 244 532 1 -a 244 232 6 -a 244 760 2 -a 244 211 7 -a 244 828 4 -a 244 81 5 -a 244 277 9 -a 244 647 3 -a 244 34 6 -a 244 870 2 -a 244 14 1 -a 244 192 5 -a 244 738 2 -a 244 405 5 -a 244 216 2 -a 244 132 4 -a 244 302 1 -a 244 698 1 -a 244 624 6 -a 244 208 3 -a 244 596 10 -a 244 37 6 -a 244 957 4 -a 244 69 2 -a 244 142 9 -a 244 911 3 -a 244 215 4 -a 244 986 10 -a 244 265 3 -a 244 442 2 -a 244 494 2 -a 244 496 8 -a 244 177 3 -a 244 704 2 -a 244 299 4 -a 244 257 3 -a 245 980 7 -a 245 945 10 -a 245 291 4 -a 245 826 8 -a 245 958 7 -a 245 482 9 -a 245 539 10 -a 245 338 5 -a 245 698 9 -a 245 670 5 -a 245 639 4 -a 245 371 3 -a 245 270 5 -a 245 846 5 -a 245 966 7 -a 245 306 8 -a 245 778 8 -a 245 11 10 -a 245 447 9 -a 245 664 6 -a 245 662 6 -a 245 626 7 -a 245 251 9 -a 245 79 10 -a 245 95 7 -a 245 746 2 -a 245 255 8 -a 245 798 5 -a 245 20 7 -a 245 512 8 -a 245 754 10 -a 245 965 10 -a 245 802 2 -a 245 555 8 -a 245 898 5 -a 245 259 4 -a 245 69 1 -a 245 212 9 -a 245 956 2 -a 245 739 5 -a 245 850 7 -a 245 302 9 -a 245 672 5 -a 245 244 2 -a 245 289 8 -a 245 425 8 -a 245 254 2 -a 245 736 10 -a 245 65 8 -a 245 240 5 -a 245 373 8 -a 245 690 9 -a 245 490 3 -a 245 451 3 -a 245 784 7 -a 245 211 6 -a 245 705 1 -a 245 557 4 -a 245 230 5 -a 245 192 3 -a 245 286 2 -a 245 170 7 -a 245 993 1 -a 245 840 8 -a 245 44 7 -a 245 228 5 -a 245 909 5 -a 245 255 7 -a 245 159 4 -a 245 623 5 -a 245 80 6 -a 245 461 6 -a 245 606 8 -a 245 751 6 -a 245 704 6 -a 245 894 4 -a 245 152 1 -a 245 957 1 -a 245 605 3 -a 245 216 1 -a 245 172 3 -a 245 977 9 -a 245 905 10 -a 245 661 6 -a 245 403 5 -a 245 664 10 -a 245 871 7 -a 245 84 9 -a 245 196 6 -a 245 76 3 -a 245 275 3 -a 245 482 2 -a 245 246 8 -a 245 244 1 -a 245 297 9 -a 245 289 8 -a 245 471 4 -a 245 181 5 -a 245 543 8 -a 245 629 4 -a 245 803 7 -a 245 622 8 -a 245 65 2 -a 245 384 9 -a 245 349 7 -a 245 768 10 -a 245 254 2 -a 245 500 5 -a 245 700 8 -a 245 858 7 -a 245 715 9 -a 245 871 1 -a 245 811 7 -a 245 595 8 -a 245 507 1 -a 245 189 4 -a 245 234 4 -a 246 353 6 -a 246 272 8 -a 246 429 9 -a 246 429 3 -a 246 547 4 -a 246 910 2 -a 246 674 5 -a 246 790 3 -a 246 183 4 -a 246 962 6 -a 246 236 6 -a 246 363 8 -a 246 480 5 -a 246 864 3 -a 246 142 7 -a 246 77 2 -a 246 929 7 -a 246 525 4 -a 246 425 9 -a 246 672 7 -a 246 778 3 -a 246 924 7 -a 246 348 10 -a 246 612 6 -a 246 614 1 -a 246 194 10 -a 246 398 9 -a 246 184 3 -a 246 701 10 -a 246 586 7 -a 246 417 8 -a 246 29 9 -a 246 858 6 -a 246 846 3 -a 246 457 3 -a 246 380 5 -a 246 731 3 -a 246 106 6 -a 246 145 9 -a 246 913 2 -a 246 43 4 -a 246 380 5 -a 246 252 9 -a 246 522 10 -a 246 219 1 -a 246 393 9 -a 246 599 9 -a 246 123 10 -a 246 917 2 -a 246 795 7 -a 246 671 1 -a 246 923 2 -a 246 118 3 -a 246 258 10 -a 246 512 1 -a 246 311 2 -a 246 655 1 -a 246 696 6 -a 246 216 7 -a 246 88 1 -a 246 16 9 -a 246 49 5 -a 246 933 4 -a 246 472 6 -a 246 428 6 -a 246 640 8 -a 246 578 7 -a 246 572 1 -a 246 528 1 -a 246 620 3 -a 246 951 10 -a 246 779 2 -a 246 118 8 -a 246 146 3 -a 246 147 3 -a 246 716 8 -a 246 268 1 -a 246 40 3 -a 246 714 7 -a 246 38 8 -a 246 710 8 -a 246 612 6 -a 246 155 1 -a 246 967 3 -a 246 100 1 -a 246 466 10 -a 246 597 3 -a 246 795 1 -a 246 452 8 -a 246 812 6 -a 246 882 10 -a 246 467 7 -a 246 861 7 -a 246 791 1 -a 246 939 4 -a 246 264 10 -a 246 406 4 -a 246 492 1 -a 246 836 1 -a 247 933 4 -a 247 87 3 -a 247 762 10 -a 247 688 8 -a 247 204 4 -a 247 907 7 -a 247 834 5 -a 247 919 3 -a 247 151 10 -a 247 873 7 -a 247 609 3 -a 247 188 6 -a 247 558 9 -a 247 196 3 -a 247 343 3 -a 247 500 7 -a 247 295 1 -a 247 808 7 -a 247 72 1 -a 247 65 1 -a 247 235 1 -a 247 884 3 -a 247 947 3 -a 247 702 5 -a 247 720 5 -a 247 713 10 -a 247 616 4 -a 247 983 9 -a 247 94 2 -a 247 83 2 -a 247 794 4 -a 247 2 5 -a 247 169 8 -a 247 532 4 -a 247 689 5 -a 247 373 10 -a 247 414 5 -a 247 499 10 -a 247 267 5 -a 247 564 10 -a 247 347 2 -a 247 875 8 -a 247 752 6 -a 247 905 7 -a 247 47 7 -a 247 70 2 -a 247 380 10 -a 247 341 1 -a 247 877 9 -a 247 452 1 -a 247 406 7 -a 247 87 1 -a 247 311 7 -a 247 328 6 -a 247 788 9 -a 247 6 3 -a 247 16 7 -a 247 379 4 -a 247 988 1 -a 247 109 7 -a 247 461 2 -a 247 758 10 -a 247 110 5 -a 247 630 4 -a 247 265 1 -a 247 799 1 -a 247 678 1 -a 247 273 6 -a 247 244 8 -a 247 218 3 -a 247 619 7 -a 247 95 10 -a 247 969 1 -a 247 499 7 -a 247 141 8 -a 247 14 1 -a 247 879 10 -a 247 481 9 -a 247 890 7 -a 247 306 5 -a 247 886 6 -a 247 976 8 -a 247 616 5 -a 247 189 4 -a 247 740 8 -a 247 621 5 -a 247 204 8 -a 247 94 4 -a 247 584 1 -a 247 312 8 -a 247 555 6 -a 247 317 10 -a 247 422 5 -a 247 160 5 -a 247 581 5 -a 247 196 6 -a 247 137 4 -a 247 235 4 -a 247 468 6 -a 247 380 9 -a 247 452 10 -a 247 62 3 -a 247 474 10 -a 247 396 10 -a 247 561 2 -a 247 614 8 -a 248 409 6 -a 248 415 8 -a 248 71 2 -a 248 274 4 -a 248 720 10 -a 248 956 7 -a 248 225 4 -a 248 311 2 -a 248 121 9 -a 248 964 9 -a 248 931 8 -a 248 324 10 -a 248 34 5 -a 248 490 7 -a 248 636 8 -a 248 588 1 -a 248 807 9 -a 248 33 6 -a 248 747 10 -a 248 363 2 -a 248 228 8 -a 248 883 1 -a 248 597 7 -a 248 695 4 -a 248 238 8 -a 248 24 3 -a 248 756 5 -a 248 712 4 -a 248 419 8 -a 248 292 2 -a 248 301 7 -a 248 827 9 -a 248 706 8 -a 248 371 5 -a 248 76 7 -a 248 401 1 -a 248 303 1 -a 248 301 2 -a 248 711 5 -a 248 423 8 -a 248 240 6 -a 248 617 5 -a 248 746 1 -a 248 273 3 -a 248 83 7 -a 248 357 6 -a 248 860 6 -a 248 889 9 -a 248 389 10 -a 248 582 1 -a 248 227 4 -a 248 616 9 -a 248 440 6 -a 248 824 3 -a 248 286 1 -a 248 678 2 -a 248 847 2 -a 248 18 8 -a 248 365 7 -a 248 242 9 -a 248 309 8 -a 248 665 7 -a 248 44 10 -a 248 12 6 -a 248 120 2 -a 248 391 1 -a 248 314 7 -a 248 420 2 -a 248 78 9 -a 248 736 10 -a 248 659 8 -a 248 694 1 -a 248 457 7 -a 248 932 4 -a 248 776 3 -a 248 814 8 -a 248 767 9 -a 248 640 5 -a 248 178 9 -a 248 325 7 -a 248 867 1 -a 248 794 8 -a 248 764 7 -a 248 666 8 -a 248 55 1 -a 248 417 9 -a 248 488 8 -a 248 72 10 -a 248 781 10 -a 248 729 6 -a 248 381 4 -a 248 422 2 -a 248 773 3 -a 248 371 3 -a 248 433 2 -a 248 892 9 -a 248 761 2 -a 248 746 6 -a 248 287 10 -a 248 838 2 -a 248 457 8 -a 248 945 6 -a 248 508 1 -a 248 913 8 -a 248 852 4 -a 249 259 8 -a 249 702 5 -a 249 595 4 -a 249 899 10 -a 249 880 6 -a 249 919 7 -a 249 741 9 -a 249 649 8 -a 249 658 2 -a 249 382 10 -a 249 703 10 -a 249 51 5 -a 249 869 5 -a 249 775 4 -a 249 831 6 -a 249 574 4 -a 249 131 9 -a 249 228 7 -a 249 322 9 -a 249 501 6 -a 249 660 2 -a 249 189 6 -a 249 237 9 -a 249 381 2 -a 249 475 5 -a 249 51 7 -a 249 837 7 -a 249 395 5 -a 249 558 3 -a 249 726 6 -a 249 223 9 -a 249 816 4 -a 249 403 10 -a 249 817 4 -a 249 690 9 -a 249 258 5 -a 249 711 7 -a 249 406 8 -a 249 906 4 -a 249 344 3 -a 249 787 10 -a 249 585 2 -a 249 394 3 -a 249 632 8 -a 249 335 1 -a 249 201 6 -a 249 181 7 -a 249 465 7 -a 249 428 5 -a 249 502 9 -a 249 965 4 -a 249 64 1 -a 249 690 2 -a 249 177 9 -a 249 444 1 -a 249 140 8 -a 249 227 6 -a 249 257 9 -a 249 534 6 -a 249 784 10 -a 249 982 5 -a 249 756 4 -a 249 576 5 -a 249 360 5 -a 249 548 2 -a 249 241 6 -a 249 618 1 -a 249 234 10 -a 249 647 4 -a 249 499 3 -a 249 578 10 -a 249 409 6 -a 249 59 9 -a 249 971 3 -a 249 16 7 -a 249 393 4 -a 249 147 4 -a 249 196 9 -a 249 857 7 -a 249 575 8 -a 249 697 5 -a 249 797 8 -a 249 638 7 -a 249 362 6 -a 249 974 2 -a 249 57 5 -a 249 501 7 -a 249 176 8 -a 249 313 2 -a 249 11 5 -a 249 960 4 -a 249 270 8 -a 249 766 10 -a 249 511 10 -a 249 630 9 -a 249 290 3 -a 249 751 6 -a 249 223 6 -a 249 523 2 -a 249 373 3 -a 249 721 5 -a 249 76 9 -a 249 782 2 -a 249 780 1 -a 249 23 6 -a 249 797 7 -a 249 148 5 -a 249 169 6 -a 249 993 1 -a 249 743 2 -a 249 665 6 -a 249 777 10 -a 249 356 2 -a 249 3 5 -a 249 726 5 -a 249 413 3 -a 249 503 2 -a 249 902 6 -a 249 725 10 -a 249 513 6 -a 249 837 6 -a 249 995 8 -a 250 255 1 -a 250 323 5 -a 250 600 6 -a 250 544 4 -a 250 49 2 -a 250 822 9 -a 250 42 2 -a 250 422 2 -a 250 518 10 -a 250 118 8 -a 250 179 6 -a 250 273 7 -a 250 140 5 -a 250 975 8 -a 250 421 9 -a 250 308 5 -a 250 943 10 -a 250 401 3 -a 250 27 9 -a 250 584 4 -a 250 153 8 -a 250 382 9 -a 250 586 4 -a 250 879 6 -a 250 794 9 -a 250 64 10 -a 250 756 8 -a 250 495 2 -a 250 577 1 -a 250 568 9 -a 250 465 5 -a 250 831 7 -a 250 890 9 -a 250 40 7 -a 250 350 3 -a 250 938 6 -a 250 861 8 -a 250 391 10 -a 250 335 10 -a 250 354 8 -a 250 508 2 -a 250 513 10 -a 250 627 1 -a 250 647 4 -a 250 464 6 -a 250 23 9 -a 250 955 3 -a 250 382 6 -a 250 423 3 -a 250 981 7 -a 250 965 2 -a 250 575 1 -a 250 338 1 -a 250 526 5 -a 250 429 8 -a 250 108 3 -a 250 590 8 -a 250 160 2 -a 250 602 1 -a 250 142 9 -a 250 727 7 -a 250 42 7 -a 250 972 10 -a 250 592 6 -a 250 81 1 -a 250 297 8 -a 250 506 7 -a 250 941 7 -a 250 687 5 -a 250 840 1 -a 250 270 5 -a 250 171 6 -a 250 329 2 -a 250 896 1 -a 250 817 6 -a 250 792 6 -a 250 918 9 -a 250 747 1 -a 250 149 10 -a 250 316 1 -a 250 703 10 -a 250 90 7 -a 250 891 10 -a 250 17 8 -a 250 615 6 -a 250 295 9 -a 250 124 8 -a 250 180 4 -a 250 455 1 -a 250 725 4 -a 250 321 6 -a 250 157 9 -a 250 766 9 -a 250 268 3 -a 250 749 1 -a 250 846 8 -a 250 564 1 -a 250 230 9 -a 250 762 2 -a 250 227 1 -a 250 45 1 -a 250 7 7 -a 250 397 10 -a 250 373 4 -a 250 903 7 -a 250 189 10 -a 250 140 9 -a 250 796 6 -a 250 936 9 -a 251 289 2 -a 251 88 1 -a 251 614 10 -a 251 378 10 -a 251 978 10 -a 251 630 1 -a 251 992 1 -a 251 248 10 -a 251 753 9 -a 251 148 9 -a 251 702 10 -a 251 453 6 -a 251 468 7 -a 251 859 4 -a 251 194 10 -a 251 736 2 -a 251 583 3 -a 251 15 6 -a 251 275 7 -a 251 812 1 -a 251 776 3 -a 251 501 6 -a 251 856 6 -a 251 783 7 -a 251 897 6 -a 251 205 7 -a 251 661 9 -a 251 62 3 -a 251 344 6 -a 251 432 8 -a 251 997 6 -a 251 632 9 -a 251 519 8 -a 251 586 5 -a 251 472 8 -a 251 192 4 -a 251 977 4 -a 251 720 4 -a 251 944 6 -a 251 100 9 -a 251 397 2 -a 251 373 2 -a 251 567 4 -a 251 231 7 -a 251 566 8 -a 251 278 5 -a 251 813 6 -a 251 581 5 -a 251 553 5 -a 251 600 7 -a 251 332 10 -a 251 29 6 -a 251 432 9 -a 251 90 6 -a 251 926 4 -a 251 636 7 -a 251 750 9 -a 251 987 10 -a 251 979 2 -a 251 158 3 -a 251 959 1 -a 251 587 4 -a 251 676 8 -a 251 520 6 -a 251 571 6 -a 251 124 10 -a 251 711 5 -a 251 523 5 -a 251 843 3 -a 251 631 2 -a 251 622 10 -a 251 215 7 -a 251 165 7 -a 251 446 8 -a 251 544 4 -a 251 442 6 -a 251 234 8 -a 251 100 9 -a 251 994 6 -a 251 834 4 -a 251 432 2 -a 251 241 2 -a 251 521 3 -a 251 924 4 -a 251 876 5 -a 251 247 9 -a 251 886 10 -a 251 830 2 -a 251 404 4 -a 251 820 1 -a 251 392 8 -a 251 55 8 -a 251 315 7 -a 251 963 3 -a 251 178 8 -a 251 2 3 -a 251 461 3 -a 251 632 7 -a 251 59 1 -a 251 211 10 -a 251 610 1 -a 251 223 9 -a 252 656 10 -a 252 129 7 -a 252 664 10 -a 252 889 10 -a 252 229 4 -a 252 634 10 -a 252 698 1 -a 252 660 8 -a 252 632 2 -a 252 938 2 -a 252 156 6 -a 252 531 2 -a 252 789 2 -a 252 402 4 -a 252 392 7 -a 252 595 8 -a 252 805 5 -a 252 187 9 -a 252 986 9 -a 252 860 5 -a 252 501 7 -a 252 924 6 -a 252 13 7 -a 252 502 9 -a 252 361 4 -a 252 9 3 -a 252 109 10 -a 252 419 3 -a 252 219 2 -a 252 718 1 -a 252 641 1 -a 252 874 1 -a 252 847 2 -a 252 280 4 -a 252 738 1 -a 252 51 9 -a 252 913 3 -a 252 412 5 -a 252 710 1 -a 252 520 10 -a 252 325 7 -a 252 865 1 -a 252 26 7 -a 252 90 7 -a 252 243 1 -a 252 417 1 -a 252 684 5 -a 252 23 4 -a 252 603 6 -a 252 645 1 -a 252 882 1 -a 252 80 1 -a 252 545 9 -a 252 895 2 -a 252 581 2 -a 252 905 10 -a 252 903 5 -a 252 690 7 -a 252 299 2 -a 252 97 8 -a 252 383 10 -a 252 939 6 -a 252 970 7 -a 252 205 10 -a 252 194 7 -a 252 683 9 -a 252 255 10 -a 252 83 1 -a 252 70 8 -a 252 964 10 -a 252 602 2 -a 252 395 7 -a 252 805 8 -a 252 628 2 -a 252 484 5 -a 252 23 1 -a 252 20 4 -a 252 143 7 -a 252 45 10 -a 252 623 7 -a 252 787 8 -a 252 927 10 -a 252 702 9 -a 252 307 9 -a 252 797 10 -a 252 258 5 -a 252 187 3 -a 252 675 6 -a 252 947 6 -a 252 485 4 -a 252 771 5 -a 252 306 7 -a 253 399 8 -a 253 716 2 -a 253 510 5 -a 253 593 9 -a 253 374 6 -a 253 765 5 -a 253 675 9 -a 253 444 6 -a 253 704 5 -a 253 252 1 -a 253 838 2 -a 253 484 9 -a 253 879 8 -a 253 297 9 -a 253 506 6 -a 253 899 9 -a 253 439 9 -a 253 551 2 -a 253 497 8 -a 253 201 10 -a 253 453 9 -a 253 174 9 -a 253 508 1 -a 253 225 3 -a 253 431 10 -a 253 694 5 -a 253 899 4 -a 253 354 5 -a 253 155 5 -a 253 645 5 -a 253 659 6 -a 253 553 3 -a 253 336 5 -a 253 144 5 -a 253 121 1 -a 253 709 7 -a 253 908 1 -a 253 795 8 -a 253 128 9 -a 253 588 10 -a 253 23 6 -a 253 965 7 -a 253 47 10 -a 253 901 5 -a 253 237 2 -a 253 553 2 -a 253 775 7 -a 253 675 6 -a 253 79 6 -a 253 247 1 -a 253 876 5 -a 253 531 2 -a 253 420 3 -a 253 359 10 -a 253 755 6 -a 253 851 9 -a 253 28 7 -a 253 629 3 -a 253 180 10 -a 253 182 2 -a 253 249 2 -a 253 838 1 -a 253 735 10 -a 253 584 5 -a 253 981 8 -a 253 855 7 -a 253 268 2 -a 253 865 3 -a 253 626 7 -a 253 396 3 -a 253 428 1 -a 253 648 8 -a 253 336 5 -a 253 474 10 -a 253 524 1 -a 253 573 2 -a 253 2 4 -a 253 275 3 -a 253 223 1 -a 253 80 4 -a 253 521 1 -a 253 74 7 -a 253 610 8 -a 253 941 7 -a 253 432 8 -a 253 340 7 -a 253 767 3 -a 253 460 7 -a 253 968 3 -a 253 946 4 -a 253 641 9 -a 253 192 2 -a 253 759 7 -a 253 351 9 -a 253 775 2 -a 253 715 1 -a 253 182 3 -a 253 19 3 -a 253 555 4 -a 253 807 4 -a 253 414 6 -a 253 982 8 -a 253 430 1 -a 253 749 7 -a 253 432 9 -a 253 953 1 -a 253 297 9 -a 253 433 7 -a 253 203 3 -a 253 520 8 -a 254 513 8 -a 254 724 1 -a 254 593 7 -a 254 98 7 -a 254 640 8 -a 254 1 9 -a 254 438 10 -a 254 382 2 -a 254 460 8 -a 254 381 10 -a 254 303 5 -a 254 76 1 -a 254 573 5 -a 254 37 8 -a 254 427 2 -a 254 323 10 -a 254 751 4 -a 254 608 2 -a 254 341 6 -a 254 282 10 -a 254 390 6 -a 254 754 8 -a 254 239 6 -a 254 819 4 -a 254 479 10 -a 254 670 8 -a 254 747 4 -a 254 775 5 -a 254 79 9 -a 254 950 7 -a 254 270 2 -a 254 591 5 -a 254 649 9 -a 254 863 10 -a 254 688 5 -a 254 264 4 -a 254 863 1 -a 254 101 2 -a 254 645 6 -a 254 298 5 -a 254 482 8 -a 254 947 1 -a 254 373 5 -a 254 30 4 -a 254 983 7 -a 254 799 1 -a 254 352 4 -a 254 709 6 -a 254 382 5 -a 254 693 3 -a 254 990 9 -a 254 771 1 -a 254 422 2 -a 254 205 1 -a 254 565 8 -a 254 900 10 -a 254 874 1 -a 254 288 4 -a 254 651 2 -a 254 952 5 -a 254 213 7 -a 254 920 10 -a 254 518 3 -a 254 861 8 -a 254 758 9 -a 254 182 2 -a 254 100 8 -a 254 596 10 -a 254 282 9 -a 254 744 2 -a 254 893 1 -a 254 763 3 -a 254 666 3 -a 254 242 5 -a 254 792 6 -a 254 624 9 -a 254 16 7 -a 254 120 5 -a 254 308 4 -a 254 398 6 -a 254 812 4 -a 254 274 6 -a 254 144 7 -a 254 209 1 -a 254 478 9 -a 254 709 9 -a 254 85 7 -a 254 327 4 -a 254 996 8 -a 254 735 8 -a 254 255 4 -a 254 184 6 -a 254 630 10 -a 254 772 2 -a 254 20 4 -a 254 364 6 -a 254 953 1 -a 254 119 8 -a 254 959 1 -a 254 211 4 -a 254 862 3 -a 254 828 1 -a 254 973 9 -a 255 503 1 -a 255 45 6 -a 255 741 6 -a 255 102 8 -a 255 60 1 -a 255 860 6 -a 255 409 4 -a 255 457 6 -a 255 647 8 -a 255 682 2 -a 255 601 9 -a 255 855 6 -a 255 135 6 -a 255 285 3 -a 255 939 9 -a 255 462 5 -a 255 256 2 -a 255 649 9 -a 255 716 9 -a 255 439 5 -a 255 255 6 -a 255 463 9 -a 255 458 7 -a 255 618 6 -a 255 392 4 -a 255 576 8 -a 255 552 5 -a 255 602 10 -a 255 413 8 -a 255 355 9 -a 255 550 10 -a 255 915 7 -a 255 399 8 -a 255 266 5 -a 255 459 4 -a 255 101 10 -a 255 400 9 -a 255 915 5 -a 255 747 1 -a 255 58 9 -a 255 491 1 -a 255 578 7 -a 255 192 6 -a 255 775 6 -a 255 492 2 -a 255 653 9 -a 255 6 6 -a 255 117 1 -a 255 344 10 -a 255 444 5 -a 255 371 7 -a 255 807 9 -a 255 901 8 -a 255 988 5 -a 255 174 3 -a 255 452 5 -a 255 515 2 -a 255 775 10 -a 255 864 10 -a 255 870 4 -a 255 300 2 -a 255 754 7 -a 255 244 10 -a 255 566 1 -a 255 745 8 -a 255 702 3 -a 255 666 5 -a 255 121 2 -a 255 593 9 -a 255 389 10 -a 255 178 7 -a 255 59 6 -a 255 966 9 -a 255 369 10 -a 255 834 8 -a 255 433 1 -a 255 839 1 -a 255 549 10 -a 255 341 8 -a 255 259 7 -a 255 919 6 -a 255 123 3 -a 255 135 6 -a 255 882 10 -a 255 296 3 -a 255 587 10 -a 255 373 4 -a 255 46 1 -a 255 426 7 -a 255 218 10 -a 255 346 3 -a 255 156 6 -a 255 461 1 -a 255 911 6 -a 255 900 9 -a 255 139 8 -a 255 552 7 -a 255 731 6 -a 255 940 2 -a 255 173 2 -a 255 789 7 -a 255 881 4 -a 255 542 6 -a 256 598 7 -a 256 290 8 -a 256 539 9 -a 256 413 6 -a 256 838 4 -a 256 879 6 -a 256 671 4 -a 256 733 6 -a 256 805 3 -a 256 590 10 -a 256 273 6 -a 256 367 8 -a 256 962 7 -a 256 319 3 -a 256 793 8 -a 256 155 3 -a 256 664 10 -a 256 948 10 -a 256 616 7 -a 256 550 6 -a 256 823 6 -a 256 754 3 -a 256 77 3 -a 256 819 6 -a 256 460 8 -a 256 991 3 -a 256 224 4 -a 256 873 9 -a 256 508 1 -a 256 822 4 -a 256 138 2 -a 256 22 10 -a 256 210 4 -a 256 976 8 -a 256 901 3 -a 256 880 5 -a 256 684 8 -a 256 878 5 -a 256 660 5 -a 256 249 3 -a 256 126 10 -a 256 3 1 -a 256 187 6 -a 256 444 3 -a 256 795 10 -a 256 341 9 -a 256 83 3 -a 256 718 7 -a 256 956 4 -a 256 632 1 -a 256 516 1 -a 256 685 1 -a 256 709 5 -a 256 310 3 -a 256 120 5 -a 256 701 9 -a 256 277 5 -a 256 344 2 -a 256 549 7 -a 256 784 10 -a 256 141 9 -a 256 687 6 -a 256 806 4 -a 256 350 7 -a 256 638 2 -a 256 682 2 -a 256 205 2 -a 256 297 1 -a 256 535 7 -a 256 864 1 -a 256 545 2 -a 256 660 3 -a 256 866 3 -a 256 731 10 -a 256 80 7 -a 256 636 4 -a 256 48 1 -a 256 162 5 -a 256 329 10 -a 256 794 8 -a 256 845 3 -a 256 664 7 -a 256 478 5 -a 256 130 7 -a 256 783 6 -a 256 154 3 -a 256 406 8 -a 256 102 7 -a 256 702 2 -a 256 166 9 -a 256 242 3 -a 256 364 4 -a 256 971 2 -a 256 591 2 -a 256 628 3 -a 256 795 4 -a 256 273 3 -a 256 138 8 -a 256 635 3 -a 256 818 4 -a 256 797 7 -a 256 476 7 -a 256 524 10 -a 256 876 3 -a 256 88 3 -a 256 571 8 -a 256 14 2 -a 256 416 3 -a 256 550 3 -a 256 807 8 -a 256 236 5 -a 256 189 2 -a 256 260 8 -a 257 366 9 -a 257 971 1 -a 257 413 8 -a 257 771 10 -a 257 49 4 -a 257 90 9 -a 257 936 7 -a 257 290 3 -a 257 454 3 -a 257 882 5 -a 257 881 2 -a 257 430 2 -a 257 485 3 -a 257 651 10 -a 257 703 9 -a 257 622 2 -a 257 261 9 -a 257 496 5 -a 257 395 6 -a 257 737 1 -a 257 246 10 -a 257 824 7 -a 257 566 9 -a 257 259 10 -a 257 215 7 -a 257 91 9 -a 257 41 1 -a 257 451 9 -a 257 279 4 -a 257 300 3 -a 257 816 1 -a 257 225 9 -a 257 712 4 -a 257 562 3 -a 257 273 3 -a 257 802 6 -a 257 474 3 -a 257 563 3 -a 257 231 7 -a 257 331 8 -a 257 419 4 -a 257 660 6 -a 257 816 2 -a 257 45 2 -a 257 338 8 -a 257 413 10 -a 257 306 7 -a 257 833 4 -a 257 807 8 -a 257 18 9 -a 257 828 1 -a 257 29 8 -a 257 841 1 -a 257 369 4 -a 257 287 10 -a 257 31 3 -a 257 459 9 -a 257 328 5 -a 257 481 2 -a 257 737 1 -a 257 627 7 -a 257 272 4 -a 257 961 6 -a 257 315 1 -a 257 834 7 -a 257 210 8 -a 257 92 1 -a 257 283 9 -a 257 772 6 -a 257 322 7 -a 257 613 3 -a 257 166 5 -a 257 981 3 -a 257 404 5 -a 257 210 8 -a 257 295 4 -a 257 817 9 -a 257 515 10 -a 257 103 10 -a 257 599 10 -a 257 532 10 -a 257 930 5 -a 257 627 1 -a 257 348 10 -a 257 274 1 -a 257 914 9 -a 257 379 5 -a 257 732 1 -a 257 217 1 -a 257 859 10 -a 257 444 7 -a 257 843 7 -a 257 107 9 -a 257 381 3 -a 257 133 6 -a 257 940 1 -a 257 590 5 -a 257 224 5 -a 257 198 5 -a 258 337 7 -a 258 545 2 -a 258 810 5 -a 258 502 3 -a 258 502 9 -a 258 190 4 -a 258 711 9 -a 258 796 1 -a 258 202 5 -a 258 898 8 -a 258 580 4 -a 258 733 9 -a 258 804 1 -a 258 183 8 -a 258 57 1 -a 258 53 2 -a 258 72 9 -a 258 435 5 -a 258 785 10 -a 258 288 3 -a 258 269 8 -a 258 204 5 -a 258 106 3 -a 258 375 7 -a 258 584 10 -a 258 239 10 -a 258 290 3 -a 258 149 6 -a 258 462 10 -a 258 487 8 -a 258 485 5 -a 258 273 6 -a 258 986 9 -a 258 484 6 -a 258 462 2 -a 258 673 4 -a 258 255 7 -a 258 443 6 -a 258 874 9 -a 258 128 3 -a 258 582 5 -a 258 931 7 -a 258 180 5 -a 258 638 10 -a 258 984 7 -a 258 251 4 -a 258 48 6 -a 258 744 1 -a 258 538 1 -a 258 317 9 -a 258 947 6 -a 258 644 6 -a 258 691 1 -a 258 507 2 -a 258 882 5 -a 258 981 4 -a 258 655 8 -a 258 319 4 -a 258 443 3 -a 258 116 4 -a 258 301 1 -a 258 715 4 -a 258 77 4 -a 258 784 1 -a 258 152 7 -a 258 749 5 -a 258 14 1 -a 258 594 8 -a 258 598 9 -a 258 142 5 -a 258 592 1 -a 258 156 2 -a 258 48 1 -a 258 771 7 -a 258 793 4 -a 258 7 5 -a 258 841 1 -a 258 750 2 -a 258 535 4 -a 258 133 2 -a 258 673 8 -a 258 154 3 -a 258 823 6 -a 258 155 4 -a 258 11 10 -a 258 779 9 -a 258 809 4 -a 258 330 5 -a 258 198 10 -a 258 924 8 -a 258 630 6 -a 258 912 7 -a 258 390 2 -a 259 40 2 -a 259 725 10 -a 259 403 3 -a 259 633 5 -a 259 299 3 -a 259 544 4 -a 259 200 3 -a 259 454 10 -a 259 592 6 -a 259 971 3 -a 259 222 4 -a 259 598 9 -a 259 968 1 -a 259 38 1 -a 259 324 5 -a 259 478 5 -a 259 170 9 -a 259 996 10 -a 259 632 10 -a 259 993 8 -a 259 126 8 -a 259 642 1 -a 259 747 6 -a 259 934 5 -a 259 971 8 -a 259 944 3 -a 259 834 7 -a 259 577 1 -a 259 832 8 -a 259 810 7 -a 259 966 10 -a 259 871 10 -a 259 510 8 -a 259 344 9 -a 259 479 7 -a 259 808 8 -a 259 888 3 -a 259 679 8 -a 259 237 7 -a 259 455 6 -a 259 625 6 -a 259 459 1 -a 259 28 10 -a 259 568 8 -a 259 496 6 -a 259 351 6 -a 259 21 8 -a 259 666 5 -a 259 322 3 -a 259 652 7 -a 259 634 2 -a 259 447 3 -a 259 270 8 -a 259 356 2 -a 259 357 8 -a 259 216 1 -a 259 276 9 -a 259 166 8 -a 259 792 2 -a 259 83 9 -a 259 975 1 -a 259 733 1 -a 259 953 4 -a 259 460 8 -a 259 53 1 -a 259 407 10 -a 259 244 10 -a 259 940 4 -a 259 61 1 -a 259 480 3 -a 259 370 1 -a 259 685 8 -a 259 938 3 -a 259 397 10 -a 259 228 7 -a 259 410 10 -a 259 748 9 -a 259 249 9 -a 259 51 8 -a 259 45 4 -a 259 900 1 -a 259 684 5 -a 259 492 4 -a 259 145 4 -a 259 15 9 -a 259 848 3 -a 259 361 9 -a 259 290 9 -a 259 128 3 -a 259 372 9 -a 259 963 2 -a 259 861 4 -a 259 300 1 -a 259 398 8 -a 259 913 1 -a 259 707 3 -a 259 641 2 -a 259 828 4 -a 259 767 3 -a 259 97 7 -a 259 173 8 -a 259 428 6 -a 259 10 8 -a 259 569 8 -a 259 655 6 -a 260 419 4 -a 260 292 2 -a 260 903 1 -a 260 469 8 -a 260 337 4 -a 260 779 10 -a 260 128 7 -a 260 828 10 -a 260 923 5 -a 260 143 1 -a 260 651 4 -a 260 259 5 -a 260 432 3 -a 260 639 6 -a 260 387 9 -a 260 804 5 -a 260 577 4 -a 260 223 1 -a 260 79 10 -a 260 974 8 -a 260 111 10 -a 260 785 7 -a 260 591 7 -a 260 938 1 -a 260 528 8 -a 260 687 7 -a 260 86 9 -a 260 955 8 -a 260 696 1 -a 260 654 10 -a 260 585 2 -a 260 91 9 -a 260 946 8 -a 260 464 2 -a 260 559 1 -a 260 258 4 -a 260 218 6 -a 260 687 1 -a 260 61 5 -a 260 116 7 -a 260 829 2 -a 260 711 7 -a 260 375 2 -a 260 236 8 -a 260 325 4 -a 260 761 9 -a 260 15 9 -a 260 901 9 -a 260 983 1 -a 260 94 1 -a 260 850 7 -a 260 69 8 -a 260 878 8 -a 260 416 9 -a 260 381 9 -a 260 78 4 -a 260 67 8 -a 260 311 10 -a 260 774 3 -a 260 720 10 -a 260 896 9 -a 260 864 6 -a 260 641 5 -a 260 335 1 -a 260 398 9 -a 260 898 8 -a 260 552 3 -a 260 60 2 -a 260 958 7 -a 260 667 3 -a 260 888 10 -a 260 644 3 -a 260 17 5 -a 260 100 2 -a 260 968 8 -a 260 777 10 -a 260 114 4 -a 260 844 1 -a 260 735 9 -a 260 207 3 -a 260 670 2 -a 260 803 8 -a 260 61 3 -a 260 61 3 -a 260 784 1 -a 260 441 9 -a 260 139 3 -a 260 850 6 -a 260 752 7 -a 260 912 5 -a 260 546 4 -a 260 623 2 -a 260 751 6 -a 260 162 5 -a 260 957 8 -a 260 124 9 -a 260 36 6 -a 260 484 3 -a 260 184 7 -a 260 993 8 -a 260 126 5 -a 260 47 3 -a 260 613 5 -a 261 143 7 -a 261 146 7 -a 261 556 5 -a 261 919 4 -a 261 260 7 -a 261 376 5 -a 261 630 10 -a 261 466 1 -a 261 21 8 -a 261 408 4 -a 261 526 8 -a 261 81 1 -a 261 168 7 -a 261 967 8 -a 261 219 10 -a 261 694 9 -a 261 106 9 -a 261 538 5 -a 261 292 1 -a 261 856 2 -a 261 700 5 -a 261 224 6 -a 261 980 4 -a 261 735 1 -a 261 707 6 -a 261 139 7 -a 261 703 5 -a 261 832 7 -a 261 185 9 -a 261 291 3 -a 261 974 5 -a 261 331 8 -a 261 847 3 -a 261 869 1 -a 261 590 9 -a 261 198 7 -a 261 474 4 -a 261 31 6 -a 261 218 6 -a 261 881 2 -a 261 557 2 -a 261 298 3 -a 261 24 8 -a 261 499 5 -a 261 517 1 -a 261 17 5 -a 261 168 3 -a 261 622 5 -a 261 554 8 -a 261 459 2 -a 261 454 1 -a 261 229 8 -a 261 682 9 -a 261 409 7 -a 261 963 6 -a 261 364 5 -a 261 547 4 -a 261 642 10 -a 261 171 1 -a 261 731 9 -a 261 932 6 -a 261 121 6 -a 261 37 7 -a 261 754 9 -a 261 989 2 -a 261 626 9 -a 261 951 6 -a 261 438 5 -a 261 657 10 -a 261 144 5 -a 261 294 6 -a 261 189 10 -a 261 442 3 -a 261 318 6 -a 261 687 3 -a 261 958 1 -a 261 334 2 -a 261 854 1 -a 261 555 5 -a 261 887 10 -a 261 288 10 -a 261 92 5 -a 261 969 4 -a 261 392 1 -a 261 30 5 -a 261 308 5 -a 261 938 10 -a 261 671 9 -a 261 478 9 -a 261 645 3 -a 261 579 2 -a 261 598 2 -a 261 681 7 -a 261 308 10 -a 261 562 9 -a 261 283 8 -a 262 235 5 -a 262 999 5 -a 262 939 9 -a 262 378 8 -a 262 269 8 -a 262 103 6 -a 262 819 4 -a 262 586 4 -a 262 789 7 -a 262 752 5 -a 262 919 1 -a 262 618 7 -a 262 283 4 -a 262 781 8 -a 262 905 5 -a 262 266 8 -a 262 872 6 -a 262 849 6 -a 262 658 2 -a 262 902 9 -a 262 132 5 -a 262 571 6 -a 262 548 8 -a 262 609 3 -a 262 191 10 -a 262 102 7 -a 262 183 8 -a 262 872 8 -a 262 410 4 -a 262 744 2 -a 262 130 6 -a 262 644 1 -a 262 719 6 -a 262 44 3 -a 262 987 9 -a 262 146 1 -a 262 816 8 -a 262 548 4 -a 262 934 9 -a 262 543 7 -a 262 442 4 -a 262 527 8 -a 262 825 4 -a 262 198 2 -a 262 407 4 -a 262 67 9 -a 262 46 8 -a 262 231 5 -a 262 724 8 -a 262 947 9 -a 262 362 7 -a 262 270 6 -a 262 470 8 -a 262 970 5 -a 262 461 10 -a 262 572 4 -a 262 128 4 -a 262 308 5 -a 262 981 4 -a 262 872 8 -a 262 437 10 -a 262 600 4 -a 262 566 8 -a 262 480 6 -a 262 596 3 -a 262 528 3 -a 262 625 5 -a 262 387 10 -a 262 51 9 -a 262 534 6 -a 262 930 7 -a 262 492 10 -a 262 36 2 -a 262 730 4 -a 262 689 1 -a 262 442 2 -a 262 796 3 -a 262 734 8 -a 262 672 2 -a 262 495 2 -a 262 656 8 -a 262 9 9 -a 262 765 4 -a 262 102 10 -a 262 978 2 -a 262 201 8 -a 262 673 3 -a 262 82 10 -a 262 508 7 -a 262 629 1 -a 262 953 9 -a 262 944 7 -a 262 204 10 -a 262 494 4 -a 262 399 10 -a 262 799 6 -a 262 162 1 -a 262 47 3 -a 262 532 8 -a 263 67 2 -a 263 538 4 -a 263 567 5 -a 263 796 7 -a 263 202 7 -a 263 568 8 -a 263 936 8 -a 263 655 7 -a 263 38 9 -a 263 567 4 -a 263 663 6 -a 263 802 10 -a 263 668 6 -a 263 616 9 -a 263 316 2 -a 263 697 2 -a 263 485 10 -a 263 944 5 -a 263 625 10 -a 263 404 8 -a 263 123 9 -a 263 94 9 -a 263 802 4 -a 263 922 4 -a 263 90 6 -a 263 800 3 -a 263 59 9 -a 263 136 4 -a 263 307 9 -a 263 125 6 -a 263 673 6 -a 263 873 2 -a 263 920 9 -a 263 875 1 -a 263 856 4 -a 263 463 2 -a 263 786 3 -a 263 486 1 -a 263 501 2 -a 263 328 4 -a 263 124 4 -a 263 278 3 -a 263 996 7 -a 263 740 7 -a 263 256 1 -a 263 287 9 -a 263 412 3 -a 263 740 8 -a 263 207 1 -a 263 13 8 -a 263 120 10 -a 263 329 10 -a 263 106 4 -a 263 921 9 -a 263 226 7 -a 263 196 3 -a 263 697 7 -a 263 284 7 -a 263 331 7 -a 263 408 9 -a 263 852 9 -a 263 304 5 -a 263 854 8 -a 263 683 4 -a 263 766 2 -a 263 615 6 -a 263 145 9 -a 263 242 6 -a 263 942 10 -a 263 268 1 -a 263 520 3 -a 263 913 10 -a 263 775 10 -a 263 176 8 -a 263 395 3 -a 263 490 4 -a 263 382 9 -a 263 407 9 -a 263 609 3 -a 263 710 2 -a 263 512 8 -a 263 506 6 -a 263 936 6 -a 264 707 7 -a 264 178 10 -a 264 195 3 -a 264 14 6 -a 264 156 9 -a 264 603 5 -a 264 906 5 -a 264 846 6 -a 264 666 8 -a 264 647 2 -a 264 436 10 -a 264 810 6 -a 264 889 5 -a 264 353 6 -a 264 53 5 -a 264 384 3 -a 264 242 2 -a 264 36 9 -a 264 134 1 -a 264 417 10 -a 264 430 1 -a 264 623 8 -a 264 798 6 -a 264 836 5 -a 264 208 1 -a 264 483 4 -a 264 323 9 -a 264 713 9 -a 264 394 8 -a 264 6 7 -a 264 890 7 -a 264 589 4 -a 264 19 3 -a 264 21 4 -a 264 167 9 -a 264 11 6 -a 264 4 8 -a 264 48 2 -a 264 856 6 -a 264 669 7 -a 264 694 3 -a 264 267 7 -a 264 454 6 -a 264 558 3 -a 264 619 10 -a 264 506 1 -a 264 941 5 -a 264 860 9 -a 264 541 7 -a 264 50 9 -a 264 252 10 -a 264 970 1 -a 264 673 9 -a 264 25 8 -a 264 781 8 -a 264 880 7 -a 264 508 7 -a 264 80 2 -a 264 568 6 -a 264 901 2 -a 264 85 3 -a 264 433 5 -a 264 465 5 -a 264 103 4 -a 264 453 3 -a 264 631 5 -a 264 113 7 -a 264 456 8 -a 264 678 3 -a 264 968 5 -a 264 100 3 -a 264 348 6 -a 264 210 2 -a 264 553 3 -a 264 905 8 -a 264 828 9 -a 264 35 10 -a 264 822 4 -a 264 664 8 -a 264 575 2 -a 264 871 1 -a 264 915 1 -a 264 521 5 -a 264 519 5 -a 264 940 9 -a 264 277 3 -a 264 374 4 -a 264 423 2 -a 264 356 5 -a 264 941 6 -a 264 299 7 -a 264 440 6 -a 264 349 8 -a 264 764 3 -a 264 542 6 -a 264 802 10 -a 264 370 4 -a 264 654 9 -a 264 233 3 -a 264 24 9 -a 264 597 6 -a 264 333 9 -a 264 371 4 -a 264 806 8 -a 264 885 5 -a 264 251 10 -a 264 610 3 -a 264 919 5 -a 264 48 2 -a 264 249 8 -a 265 470 4 -a 265 919 4 -a 265 139 2 -a 265 990 4 -a 265 413 5 -a 265 54 3 -a 265 242 7 -a 265 787 10 -a 265 476 9 -a 265 598 7 -a 265 703 3 -a 265 775 5 -a 265 13 4 -a 265 28 10 -a 265 514 9 -a 265 555 3 -a 265 829 7 -a 265 883 9 -a 265 184 4 -a 265 37 2 -a 265 906 4 -a 265 781 1 -a 265 369 5 -a 265 252 1 -a 265 562 5 -a 265 230 8 -a 265 503 6 -a 265 147 10 -a 265 124 5 -a 265 550 4 -a 265 395 9 -a 265 593 2 -a 265 444 4 -a 265 534 10 -a 265 558 6 -a 265 857 1 -a 265 587 3 -a 265 800 9 -a 265 619 1 -a 265 39 9 -a 265 373 3 -a 265 297 7 -a 265 813 3 -a 265 385 7 -a 265 324 10 -a 265 302 4 -a 265 939 10 -a 265 128 10 -a 265 160 6 -a 265 99 7 -a 265 165 9 -a 265 42 5 -a 265 879 4 -a 265 533 5 -a 265 293 1 -a 265 416 2 -a 265 762 5 -a 265 795 4 -a 265 563 9 -a 265 886 10 -a 265 321 6 -a 265 957 4 -a 265 454 9 -a 265 764 1 -a 265 466 5 -a 265 596 4 -a 265 29 10 -a 265 787 5 -a 265 190 10 -a 265 67 3 -a 265 135 9 -a 265 487 1 -a 265 879 1 -a 265 519 10 -a 265 810 10 -a 265 156 2 -a 265 434 5 -a 265 938 5 -a 265 315 8 -a 265 532 8 -a 265 78 9 -a 265 356 6 -a 265 386 3 -a 266 610 10 -a 266 649 6 -a 266 801 6 -a 266 348 3 -a 266 419 5 -a 266 339 3 -a 266 209 5 -a 266 739 9 -a 266 272 6 -a 266 662 9 -a 266 479 2 -a 266 737 7 -a 266 649 6 -a 266 50 7 -a 266 765 3 -a 266 411 4 -a 266 240 10 -a 266 831 7 -a 266 545 7 -a 266 726 6 -a 266 685 2 -a 266 40 2 -a 266 511 5 -a 266 840 7 -a 266 473 8 -a 266 424 8 -a 266 131 1 -a 266 501 7 -a 266 486 4 -a 266 365 3 -a 266 87 1 -a 266 110 3 -a 266 141 6 -a 266 434 2 -a 266 529 7 -a 266 480 3 -a 266 642 5 -a 266 243 7 -a 266 751 3 -a 266 279 5 -a 266 721 6 -a 266 463 6 -a 266 928 7 -a 266 771 3 -a 266 204 10 -a 266 314 4 -a 266 10 6 -a 266 859 6 -a 266 711 6 -a 266 695 2 -a 266 898 6 -a 266 197 2 -a 266 510 10 -a 266 346 1 -a 266 621 2 -a 266 640 5 -a 266 325 7 -a 266 97 10 -a 266 102 7 -a 266 689 6 -a 266 183 3 -a 266 211 3 -a 266 829 4 -a 266 616 4 -a 266 739 4 -a 266 284 10 -a 266 233 8 -a 266 982 7 -a 266 10 1 -a 266 512 9 -a 266 678 1 -a 266 473 6 -a 266 415 2 -a 266 424 1 -a 266 676 7 -a 266 728 7 -a 266 409 3 -a 266 685 5 -a 266 562 2 -a 266 95 5 -a 266 355 8 -a 266 435 1 -a 266 292 9 -a 266 865 8 -a 266 780 9 -a 267 912 10 -a 267 480 2 -a 267 80 4 -a 267 581 5 -a 267 768 9 -a 267 167 9 -a 267 792 3 -a 267 573 4 -a 267 782 2 -a 267 506 9 -a 267 856 5 -a 267 463 10 -a 267 866 5 -a 267 502 3 -a 267 117 1 -a 267 314 7 -a 267 916 7 -a 267 540 2 -a 267 989 2 -a 267 619 4 -a 267 949 9 -a 267 649 2 -a 267 157 5 -a 267 19 5 -a 267 591 9 -a 267 310 4 -a 267 844 3 -a 267 347 4 -a 267 197 6 -a 267 299 7 -a 267 426 7 -a 267 181 8 -a 267 880 4 -a 267 170 1 -a 267 347 6 -a 267 647 1 -a 267 742 6 -a 267 104 2 -a 267 128 1 -a 267 573 4 -a 267 94 4 -a 267 591 3 -a 267 414 4 -a 267 595 4 -a 267 707 9 -a 267 727 8 -a 267 486 7 -a 267 222 7 -a 267 691 5 -a 267 81 5 -a 267 146 8 -a 267 316 7 -a 267 237 4 -a 267 165 10 -a 267 295 2 -a 267 827 3 -a 267 474 4 -a 267 114 7 -a 267 149 1 -a 267 671 5 -a 267 412 8 -a 267 575 1 -a 267 851 9 -a 267 267 5 -a 267 744 5 -a 267 173 9 -a 267 913 1 -a 267 461 2 -a 267 276 8 -a 267 17 4 -a 267 9 6 -a 267 370 1 -a 267 607 4 -a 267 423 5 -a 267 964 2 -a 267 289 6 -a 267 125 9 -a 267 426 6 -a 267 510 9 -a 267 816 1 -a 267 506 4 -a 267 656 3 -a 267 107 3 -a 267 742 8 -a 267 820 10 -a 267 401 3 -a 267 544 10 -a 267 269 2 -a 267 514 6 -a 267 693 5 -a 267 939 7 -a 267 925 5 -a 267 243 8 -a 267 765 3 -a 267 168 8 -a 267 986 9 -a 267 937 1 -a 267 56 2 -a 267 422 9 -a 267 189 10 -a 268 72 9 -a 268 430 2 -a 268 558 4 -a 268 678 9 -a 268 852 4 -a 268 497 1 -a 268 966 1 -a 268 977 3 -a 268 922 3 -a 268 452 8 -a 268 768 2 -a 268 403 9 -a 268 83 4 -a 268 874 6 -a 268 120 5 -a 268 902 2 -a 268 250 6 -a 268 664 1 -a 268 146 10 -a 268 763 1 -a 268 332 2 -a 268 61 2 -a 268 663 6 -a 268 574 4 -a 268 825 6 -a 268 830 6 -a 268 535 4 -a 268 738 8 -a 268 886 6 -a 268 956 3 -a 268 926 2 -a 268 957 9 -a 268 361 1 -a 268 459 5 -a 268 611 8 -a 268 189 8 -a 268 955 2 -a 268 552 7 -a 268 141 7 -a 268 853 8 -a 268 908 8 -a 268 231 5 -a 268 61 8 -a 268 757 10 -a 268 351 9 -a 268 962 2 -a 268 84 4 -a 268 744 5 -a 268 321 5 -a 268 144 4 -a 268 382 10 -a 268 894 7 -a 268 968 7 -a 268 188 9 -a 268 404 10 -a 268 681 9 -a 268 49 6 -a 268 335 6 -a 268 582 6 -a 268 695 3 -a 268 16 7 -a 268 591 1 -a 268 883 4 -a 268 971 8 -a 268 119 1 -a 268 799 1 -a 268 97 3 -a 268 906 1 -a 268 5 1 -a 268 158 3 -a 268 638 5 -a 268 355 5 -a 268 95 6 -a 268 619 3 -a 268 344 5 -a 268 178 4 -a 268 338 3 -a 268 664 9 -a 268 321 1 -a 268 720 7 -a 268 533 3 -a 268 265 2 -a 268 907 3 -a 268 936 9 -a 268 945 3 -a 268 955 2 -a 268 246 1 -a 268 503 2 -a 268 935 3 -a 268 941 6 -a 268 518 8 -a 268 502 4 -a 268 799 8 -a 268 464 7 -a 268 620 10 -a 268 798 1 -a 268 238 3 -a 268 716 10 -a 268 679 1 -a 269 243 7 -a 269 873 3 -a 269 293 10 -a 269 597 8 -a 269 968 6 -a 269 911 3 -a 269 941 10 -a 269 121 7 -a 269 225 8 -a 269 580 9 -a 269 442 8 -a 269 944 5 -a 269 89 1 -a 269 706 3 -a 269 826 8 -a 269 626 5 -a 269 756 2 -a 269 246 9 -a 269 104 5 -a 269 666 4 -a 269 162 3 -a 269 622 4 -a 269 143 3 -a 269 960 6 -a 269 61 5 -a 269 762 9 -a 269 733 10 -a 269 299 7 -a 269 454 8 -a 269 388 1 -a 269 541 7 -a 269 302 4 -a 269 680 7 -a 269 113 2 -a 269 245 4 -a 269 566 9 -a 269 29 9 -a 269 366 4 -a 269 790 1 -a 269 609 8 -a 269 807 3 -a 269 709 5 -a 269 697 10 -a 269 488 5 -a 269 510 10 -a 269 696 2 -a 269 89 2 -a 269 241 3 -a 269 941 9 -a 269 193 3 -a 269 907 3 -a 269 78 9 -a 269 814 9 -a 269 25 2 -a 269 14 6 -a 269 874 8 -a 269 787 7 -a 269 746 1 -a 269 148 6 -a 269 216 10 -a 269 109 9 -a 269 688 9 -a 269 517 6 -a 269 788 9 -a 269 801 5 -a 269 762 4 -a 269 330 4 -a 269 829 9 -a 269 103 9 -a 269 95 5 -a 269 413 10 -a 269 909 2 -a 269 804 2 -a 269 85 6 -a 269 372 3 -a 269 289 2 -a 269 781 10 -a 269 460 7 -a 269 530 10 -a 269 697 9 -a 269 652 2 -a 269 412 5 -a 269 775 4 -a 269 441 3 -a 269 436 6 -a 269 788 6 -a 269 291 5 -a 270 198 1 -a 270 509 5 -a 270 438 8 -a 270 413 9 -a 270 618 4 -a 270 102 9 -a 270 930 6 -a 270 381 5 -a 270 902 3 -a 270 667 7 -a 270 710 3 -a 270 706 1 -a 270 769 9 -a 270 805 10 -a 270 95 4 -a 270 653 4 -a 270 584 8 -a 270 179 2 -a 270 872 6 -a 270 959 4 -a 270 459 9 -a 270 377 9 -a 270 632 10 -a 270 87 7 -a 270 788 4 -a 270 382 2 -a 270 527 6 -a 270 200 9 -a 270 145 6 -a 270 817 9 -a 270 397 4 -a 270 653 3 -a 270 231 10 -a 270 810 6 -a 270 246 6 -a 270 332 1 -a 270 715 6 -a 270 627 9 -a 270 209 2 -a 270 357 1 -a 270 312 10 -a 270 914 10 -a 270 101 10 -a 270 92 8 -a 270 753 9 -a 270 675 3 -a 270 163 6 -a 270 752 9 -a 270 523 10 -a 270 97 5 -a 270 186 8 -a 270 899 6 -a 270 728 7 -a 270 272 1 -a 270 663 9 -a 270 85 2 -a 270 799 1 -a 270 862 1 -a 270 229 2 -a 270 591 7 -a 270 234 6 -a 270 882 9 -a 270 821 2 -a 270 19 3 -a 270 103 6 -a 270 128 10 -a 270 733 5 -a 270 729 8 -a 270 336 4 -a 270 65 1 -a 270 17 3 -a 270 226 7 -a 270 165 9 -a 270 108 2 -a 270 209 4 -a 270 917 9 -a 270 783 4 -a 270 371 1 -a 270 644 7 -a 270 281 9 -a 270 468 5 -a 270 830 10 -a 270 155 10 -a 270 171 4 -a 270 77 2 -a 270 817 5 -a 270 256 8 -a 270 875 2 -a 270 654 2 -a 270 484 1 -a 270 442 10 -a 270 888 2 -a 270 341 4 -a 270 238 10 -a 270 906 8 -a 270 444 6 -a 270 366 8 -a 270 615 10 -a 270 148 4 -a 270 701 7 -a 270 679 9 -a 270 164 5 -a 270 926 7 -a 270 844 5 -a 270 272 8 -a 271 111 8 -a 271 736 9 -a 271 30 2 -a 271 481 8 -a 271 356 9 -a 271 310 1 -a 271 948 3 -a 271 161 9 -a 271 464 7 -a 271 95 8 -a 271 237 2 -a 271 257 1 -a 271 350 8 -a 271 88 3 -a 271 910 2 -a 271 833 1 -a 271 529 9 -a 271 773 6 -a 271 150 8 -a 271 766 1 -a 271 655 10 -a 271 593 8 -a 271 107 6 -a 271 245 2 -a 271 740 2 -a 271 808 9 -a 271 923 1 -a 271 904 8 -a 271 709 9 -a 271 742 4 -a 271 151 7 -a 271 819 5 -a 271 454 7 -a 271 180 5 -a 271 276 3 -a 271 809 7 -a 271 489 3 -a 271 199 3 -a 271 969 10 -a 271 952 3 -a 271 293 7 -a 271 181 8 -a 271 184 6 -a 271 642 9 -a 271 268 10 -a 271 70 8 -a 271 451 1 -a 271 796 9 -a 271 842 8 -a 271 600 8 -a 271 538 5 -a 271 472 1 -a 271 168 5 -a 271 644 8 -a 271 716 7 -a 271 907 3 -a 271 427 7 -a 271 615 10 -a 271 786 3 -a 271 112 1 -a 271 332 9 -a 271 936 5 -a 271 930 8 -a 271 785 5 -a 271 91 1 -a 271 181 5 -a 271 569 3 -a 271 579 9 -a 271 380 10 -a 271 513 10 -a 271 507 6 -a 271 672 2 -a 271 694 1 -a 271 690 10 -a 271 290 2 -a 271 961 6 -a 271 759 1 -a 271 740 8 -a 271 733 4 -a 271 577 4 -a 271 315 7 -a 271 246 2 -a 271 24 3 -a 271 482 5 -a 271 889 3 -a 271 740 8 -a 271 364 9 -a 271 292 10 -a 271 330 6 -a 271 126 8 -a 271 403 9 -a 271 661 10 -a 271 37 10 -a 271 308 4 -a 272 422 10 -a 272 128 1 -a 272 489 8 -a 272 990 6 -a 272 706 4 -a 272 868 7 -a 272 479 6 -a 272 188 9 -a 272 515 4 -a 272 148 4 -a 272 878 5 -a 272 804 2 -a 272 84 10 -a 272 612 2 -a 272 519 5 -a 272 816 1 -a 272 164 5 -a 272 833 9 -a 272 37 2 -a 272 188 2 -a 272 290 7 -a 272 926 2 -a 272 927 9 -a 272 654 6 -a 272 193 6 -a 272 232 3 -a 272 779 2 -a 272 595 3 -a 272 892 5 -a 272 815 8 -a 272 902 6 -a 272 289 5 -a 272 942 2 -a 272 366 4 -a 272 255 8 -a 272 624 4 -a 272 209 9 -a 272 733 5 -a 272 811 6 -a 272 724 10 -a 272 880 7 -a 272 664 2 -a 272 503 7 -a 272 963 7 -a 272 252 9 -a 272 755 7 -a 272 415 8 -a 272 830 6 -a 272 791 9 -a 272 602 5 -a 272 96 1 -a 272 692 4 -a 272 504 5 -a 272 749 2 -a 272 884 4 -a 272 735 7 -a 272 503 8 -a 272 454 6 -a 272 603 3 -a 272 293 8 -a 272 332 7 -a 272 891 10 -a 272 211 5 -a 272 697 2 -a 272 121 8 -a 272 834 8 -a 272 906 2 -a 272 853 1 -a 272 620 3 -a 272 605 7 -a 272 708 4 -a 272 260 10 -a 272 83 4 -a 272 647 5 -a 272 511 9 -a 272 80 7 -a 272 377 1 -a 272 925 3 -a 272 910 8 -a 272 143 9 -a 272 503 3 -a 272 835 7 -a 272 729 2 -a 272 694 8 -a 272 717 7 -a 272 207 10 -a 272 124 7 -a 272 295 1 -a 272 499 1 -a 272 455 4 -a 272 161 1 -a 272 709 3 -a 272 127 4 -a 272 282 8 -a 272 518 5 -a 272 8 8 -a 272 110 8 -a 272 114 8 -a 272 612 3 -a 272 818 2 -a 272 373 6 -a 272 695 3 -a 272 440 3 -a 272 883 10 -a 272 774 10 -a 273 816 4 -a 273 783 6 -a 273 659 4 -a 273 958 3 -a 273 261 5 -a 273 639 6 -a 273 768 5 -a 273 243 2 -a 273 343 8 -a 273 438 6 -a 273 959 7 -a 273 549 2 -a 273 561 9 -a 273 229 2 -a 273 24 4 -a 273 389 5 -a 273 732 10 -a 273 117 4 -a 273 670 8 -a 273 226 6 -a 273 125 4 -a 273 780 4 -a 273 339 8 -a 273 736 2 -a 273 573 7 -a 273 711 2 -a 273 406 1 -a 273 569 3 -a 273 156 10 -a 273 803 4 -a 273 327 10 -a 273 814 3 -a 273 736 3 -a 273 588 1 -a 273 429 8 -a 273 480 4 -a 273 830 9 -a 273 771 2 -a 273 917 2 -a 273 764 3 -a 273 296 10 -a 273 453 3 -a 273 992 9 -a 273 319 9 -a 273 443 9 -a 273 356 2 -a 273 26 10 -a 273 559 9 -a 273 2 6 -a 273 251 4 -a 273 683 4 -a 273 781 3 -a 273 589 3 -a 273 395 5 -a 273 329 5 -a 273 275 6 -a 273 800 8 -a 273 316 4 -a 273 843 6 -a 273 955 2 -a 273 94 7 -a 273 146 8 -a 273 745 1 -a 273 829 8 -a 273 733 9 -a 273 149 5 -a 273 284 4 -a 273 538 8 -a 273 919 8 -a 273 176 1 -a 273 277 5 -a 273 190 10 -a 273 628 5 -a 273 244 5 -a 273 508 8 -a 273 46 10 -a 273 599 3 -a 273 534 1 -a 273 605 1 -a 273 600 1 -a 273 784 6 -a 273 263 2 -a 273 356 3 -a 273 349 1 -a 273 657 1 -a 273 684 8 -a 273 623 8 -a 273 433 1 -a 273 999 4 -a 273 442 5 -a 273 363 8 -a 273 68 3 -a 273 587 6 -a 274 83 3 -a 274 897 3 -a 274 295 8 -a 274 231 8 -a 274 156 10 -a 274 832 4 -a 274 126 10 -a 274 332 1 -a 274 84 2 -a 274 315 8 -a 274 959 7 -a 274 327 2 -a 274 823 4 -a 274 925 4 -a 274 332 7 -a 274 585 9 -a 274 501 7 -a 274 91 10 -a 274 847 10 -a 274 856 7 -a 274 439 5 -a 274 480 3 -a 274 516 1 -a 274 38 10 -a 274 912 7 -a 274 490 3 -a 274 479 7 -a 274 250 2 -a 274 558 5 -a 274 41 1 -a 274 333 9 -a 274 430 9 -a 274 335 9 -a 274 563 7 -a 274 585 2 -a 274 142 10 -a 274 688 8 -a 274 916 8 -a 274 225 4 -a 274 851 10 -a 274 551 7 -a 274 801 4 -a 274 831 3 -a 274 451 1 -a 274 108 5 -a 274 391 8 -a 274 951 1 -a 274 198 2 -a 274 213 2 -a 274 783 3 -a 274 637 8 -a 274 692 7 -a 274 274 2 -a 274 674 7 -a 274 579 10 -a 274 763 5 -a 274 128 5 -a 274 829 4 -a 274 296 3 -a 274 168 5 -a 274 137 7 -a 274 725 9 -a 274 502 3 -a 274 699 6 -a 274 286 3 -a 274 643 1 -a 274 363 8 -a 274 177 3 -a 274 867 6 -a 274 341 10 -a 274 3 10 -a 274 393 4 -a 274 117 10 -a 274 833 5 -a 274 843 2 -a 274 224 5 -a 274 199 2 -a 274 770 5 -a 274 421 3 -a 274 412 2 -a 274 528 5 -a 274 33 2 -a 274 79 4 -a 274 801 1 -a 274 706 8 -a 274 658 4 -a 274 539 7 -a 274 833 9 -a 274 462 4 -a 274 835 10 -a 274 1000 5 -a 274 598 5 -a 274 535 9 -a 274 477 4 -a 274 272 4 -a 274 820 10 -a 274 95 8 -a 274 634 4 -a 274 997 7 -a 274 961 1 -a 274 974 1 -a 274 999 1 -a 274 329 2 -a 274 66 7 -a 274 808 5 -a 274 148 8 -a 274 289 7 -a 274 917 2 -a 275 710 10 -a 275 393 8 -a 275 420 1 -a 275 742 7 -a 275 472 1 -a 275 196 5 -a 275 424 2 -a 275 105 5 -a 275 734 8 -a 275 232 1 -a 275 566 8 -a 275 544 5 -a 275 208 8 -a 275 139 4 -a 275 55 4 -a 275 684 10 -a 275 410 5 -a 275 874 10 -a 275 779 10 -a 275 20 7 -a 275 846 2 -a 275 715 5 -a 275 993 9 -a 275 821 9 -a 275 20 1 -a 275 35 10 -a 275 604 5 -a 275 167 1 -a 275 323 10 -a 275 585 6 -a 275 59 4 -a 275 8 7 -a 275 978 1 -a 275 478 2 -a 275 750 5 -a 275 425 3 -a 275 673 9 -a 275 149 4 -a 275 529 7 -a 275 382 3 -a 275 380 7 -a 275 70 4 -a 275 926 3 -a 275 587 2 -a 275 208 1 -a 275 980 1 -a 275 247 6 -a 275 617 3 -a 275 829 7 -a 275 1 6 -a 275 636 2 -a 275 651 9 -a 275 715 3 -a 275 605 5 -a 275 447 3 -a 275 734 9 -a 275 639 1 -a 275 26 7 -a 275 900 1 -a 275 961 9 -a 275 610 2 -a 275 958 4 -a 275 969 7 -a 275 563 5 -a 275 411 6 -a 275 694 3 -a 275 987 2 -a 275 59 10 -a 275 842 4 -a 275 491 9 -a 275 441 1 -a 275 197 8 -a 275 560 5 -a 275 342 10 -a 275 784 10 -a 275 767 2 -a 275 297 2 -a 275 6 10 -a 275 360 1 -a 275 101 8 -a 275 6 9 -a 275 995 1 -a 275 751 5 -a 275 720 7 -a 275 575 10 -a 275 173 9 -a 275 430 1 -a 275 189 2 -a 275 198 1 -a 275 305 10 -a 275 126 1 -a 275 808 7 -a 275 239 1 -a 275 70 8 -a 275 346 2 -a 275 649 1 -a 275 763 1 -a 275 309 1 -a 275 708 1 -a 275 580 3 -a 275 799 9 -a 276 124 7 -a 276 776 4 -a 276 335 6 -a 276 465 5 -a 276 535 8 -a 276 77 10 -a 276 761 3 -a 276 540 1 -a 276 436 1 -a 276 861 8 -a 276 545 9 -a 276 407 9 -a 276 588 2 -a 276 241 4 -a 276 981 5 -a 276 760 1 -a 276 670 9 -a 276 146 2 -a 276 958 8 -a 276 974 8 -a 276 271 3 -a 276 741 9 -a 276 188 1 -a 276 340 4 -a 276 62 3 -a 276 837 4 -a 276 78 4 -a 276 370 7 -a 276 520 4 -a 276 657 4 -a 276 145 3 -a 276 643 3 -a 276 408 2 -a 276 479 10 -a 276 83 1 -a 276 943 10 -a 276 555 6 -a 276 843 3 -a 276 458 10 -a 276 991 1 -a 276 679 8 -a 276 373 1 -a 276 242 3 -a 276 219 8 -a 276 329 6 -a 276 888 2 -a 276 474 1 -a 276 935 1 -a 276 837 4 -a 276 744 3 -a 276 651 2 -a 276 1 1 -a 276 59 10 -a 276 712 9 -a 276 837 9 -a 276 136 2 -a 276 58 10 -a 276 332 3 -a 276 792 7 -a 276 202 3 -a 276 974 3 -a 276 176 6 -a 276 680 1 -a 276 32 3 -a 276 94 4 -a 276 210 3 -a 276 874 7 -a 276 551 5 -a 276 176 1 -a 276 528 3 -a 276 529 10 -a 276 548 4 -a 276 770 5 -a 276 747 10 -a 276 877 2 -a 276 747 7 -a 276 610 8 -a 276 326 4 -a 276 657 1 -a 276 423 4 -a 276 46 7 -a 276 283 4 -a 276 423 7 -a 276 104 4 -a 276 994 2 -a 276 235 10 -a 276 240 5 -a 276 27 1 -a 276 566 10 -a 276 7 1 -a 276 228 2 -a 276 515 9 -a 276 182 2 -a 276 907 6 -a 276 546 7 -a 276 275 7 -a 276 93 3 -a 276 395 6 -a 276 826 1 -a 276 268 7 -a 276 922 9 -a 276 330 9 -a 276 816 10 -a 276 667 3 -a 276 53 4 -a 276 668 10 -a 277 389 2 -a 277 662 10 -a 277 993 4 -a 277 21 5 -a 277 60 4 -a 277 14 2 -a 277 303 6 -a 277 482 1 -a 277 118 7 -a 277 273 2 -a 277 716 3 -a 277 357 2 -a 277 299 5 -a 277 257 7 -a 277 363 2 -a 277 527 6 -a 277 771 1 -a 277 545 2 -a 277 409 4 -a 277 292 8 -a 277 819 3 -a 277 501 1 -a 277 686 6 -a 277 620 4 -a 277 769 4 -a 277 584 8 -a 277 950 9 -a 277 560 4 -a 277 226 7 -a 277 203 4 -a 277 615 10 -a 277 639 1 -a 277 171 6 -a 277 635 1 -a 277 699 10 -a 277 185 9 -a 277 938 3 -a 277 156 2 -a 277 302 3 -a 277 186 3 -a 277 872 4 -a 277 658 6 -a 277 484 2 -a 277 104 5 -a 277 875 5 -a 277 540 8 -a 277 395 2 -a 277 142 9 -a 277 335 1 -a 277 895 5 -a 277 828 9 -a 277 954 6 -a 277 639 1 -a 277 387 6 -a 277 879 7 -a 277 174 10 -a 277 612 4 -a 277 856 3 -a 277 376 8 -a 277 202 5 -a 277 471 8 -a 277 547 9 -a 277 837 7 -a 277 145 7 -a 277 731 5 -a 277 750 9 -a 277 300 10 -a 277 8 9 -a 277 935 9 -a 277 147 4 -a 277 665 10 -a 277 394 2 -a 277 251 4 -a 277 660 3 -a 277 380 4 -a 277 101 9 -a 277 176 3 -a 277 774 5 -a 277 242 6 -a 277 510 5 -a 277 644 2 -a 277 45 3 -a 277 439 6 -a 277 259 3 -a 277 431 5 -a 277 294 2 -a 277 432 1 -a 277 19 1 -a 277 125 4 -a 277 808 8 -a 277 220 7 -a 277 595 7 -a 277 330 7 -a 277 32 3 -a 277 739 9 -a 277 36 1 -a 277 781 7 -a 277 15 6 -a 277 43 2 -a 277 691 4 -a 277 161 4 -a 277 707 6 -a 277 61 1 -a 278 411 8 -a 278 342 3 -a 278 440 6 -a 278 511 7 -a 278 517 7 -a 278 189 10 -a 278 753 7 -a 278 2 7 -a 278 832 8 -a 278 797 4 -a 278 441 10 -a 278 66 2 -a 278 204 6 -a 278 734 9 -a 278 498 3 -a 278 222 9 -a 278 858 9 -a 278 281 4 -a 278 441 8 -a 278 429 4 -a 278 610 7 -a 278 473 5 -a 278 143 4 -a 278 645 6 -a 278 229 5 -a 278 157 6 -a 278 687 4 -a 278 920 6 -a 278 318 9 -a 278 369 7 -a 278 980 8 -a 278 728 6 -a 278 710 9 -a 278 395 7 -a 278 215 10 -a 278 203 7 -a 278 583 2 -a 278 967 7 -a 278 204 10 -a 278 390 2 -a 278 739 4 -a 278 644 4 -a 278 456 3 -a 278 942 8 -a 278 353 2 -a 278 953 9 -a 278 139 6 -a 278 187 5 -a 278 209 10 -a 278 580 9 -a 278 615 10 -a 278 818 8 -a 278 28 5 -a 278 757 6 -a 278 438 6 -a 278 256 3 -a 278 914 4 -a 278 100 10 -a 278 151 5 -a 278 207 6 -a 278 468 3 -a 278 106 2 -a 278 934 7 -a 278 153 7 -a 278 500 6 -a 278 124 5 -a 278 355 9 -a 278 58 6 -a 278 66 1 -a 278 559 2 -a 278 448 2 -a 278 805 5 -a 278 178 10 -a 278 903 8 -a 278 722 1 -a 278 531 3 -a 278 831 7 -a 278 861 8 -a 278 717 9 -a 278 15 6 -a 278 416 2 -a 278 307 3 -a 278 832 5 -a 278 443 4 -a 278 39 1 -a 278 245 9 -a 278 698 5 -a 278 952 3 -a 278 344 6 -a 278 849 4 -a 278 134 7 -a 278 811 8 -a 278 954 2 -a 278 44 5 -a 278 963 6 -a 279 430 10 -a 279 167 6 -a 279 294 3 -a 279 487 6 -a 279 233 4 -a 279 852 5 -a 279 934 4 -a 279 13 1 -a 279 5 6 -a 279 812 10 -a 279 734 1 -a 279 535 4 -a 279 618 10 -a 279 570 1 -a 279 227 6 -a 279 632 9 -a 279 985 5 -a 279 533 6 -a 279 439 1 -a 279 403 7 -a 279 572 10 -a 279 683 6 -a 279 77 8 -a 279 499 5 -a 279 2 2 -a 279 925 7 -a 279 633 3 -a 279 812 8 -a 279 854 8 -a 279 676 8 -a 279 751 3 -a 279 259 1 -a 279 842 8 -a 279 20 4 -a 279 746 1 -a 279 50 10 -a 279 871 8 -a 279 655 2 -a 279 62 4 -a 279 875 2 -a 279 443 10 -a 279 796 7 -a 279 386 8 -a 279 36 9 -a 279 341 5 -a 279 612 7 -a 279 668 6 -a 279 302 1 -a 279 121 8 -a 279 82 6 -a 279 704 7 -a 279 692 10 -a 279 765 6 -a 279 780 8 -a 279 166 10 -a 279 766 5 -a 279 680 3 -a 279 798 4 -a 279 554 9 -a 279 510 6 -a 279 449 9 -a 279 280 1 -a 279 768 4 -a 279 267 10 -a 279 299 5 -a 279 489 8 -a 279 316 6 -a 279 145 6 -a 279 120 4 -a 279 378 7 -a 279 562 1 -a 279 149 9 -a 279 380 2 -a 279 597 7 -a 279 489 4 -a 279 992 4 -a 279 240 5 -a 279 790 4 -a 279 88 8 -a 279 322 10 -a 279 470 1 -a 279 779 1 -a 279 62 8 -a 279 225 4 -a 279 944 7 -a 279 827 6 -a 279 905 7 -a 279 718 3 -a 279 356 5 -a 279 390 10 -a 279 142 9 -a 279 635 2 -a 279 133 8 -a 279 408 4 -a 279 933 8 -a 279 622 7 -a 279 724 10 -a 279 53 10 -a 279 741 4 -a 279 77 3 -a 279 48 10 -a 279 278 5 -a 279 225 1 -a 279 427 2 -a 279 874 3 -a 279 713 4 -a 279 394 4 -a 279 90 5 -a 280 479 9 -a 280 481 9 -a 280 411 10 -a 280 948 2 -a 280 235 2 -a 280 472 1 -a 280 148 9 -a 280 155 5 -a 280 274 9 -a 280 28 3 -a 280 872 5 -a 280 630 5 -a 280 417 8 -a 280 240 3 -a 280 550 6 -a 280 397 1 -a 280 149 9 -a 280 147 5 -a 280 96 9 -a 280 201 3 -a 280 887 8 -a 280 172 5 -a 280 248 9 -a 280 140 4 -a 280 396 1 -a 280 675 5 -a 280 84 2 -a 280 44 9 -a 280 78 8 -a 280 562 8 -a 280 525 6 -a 280 488 10 -a 280 485 10 -a 280 759 2 -a 280 959 10 -a 280 633 10 -a 280 913 4 -a 280 209 5 -a 280 660 7 -a 280 760 10 -a 280 838 4 -a 280 53 7 -a 280 749 4 -a 280 53 6 -a 280 602 10 -a 280 121 8 -a 280 201 1 -a 280 748 4 -a 280 216 9 -a 280 402 8 -a 280 610 9 -a 280 387 2 -a 280 649 1 -a 280 749 7 -a 280 782 10 -a 280 299 3 -a 280 737 8 -a 280 865 7 -a 280 343 5 -a 280 815 2 -a 280 403 2 -a 280 867 6 -a 280 278 5 -a 280 887 7 -a 280 601 9 -a 280 213 1 -a 280 495 1 -a 280 490 4 -a 280 421 3 -a 280 131 6 -a 280 225 3 -a 280 234 2 -a 280 183 9 -a 280 973 6 -a 280 286 4 -a 280 784 7 -a 280 69 10 -a 280 487 9 -a 280 507 9 -a 280 284 9 -a 280 888 7 -a 280 92 9 -a 280 670 1 -a 280 512 4 -a 280 840 9 -a 280 427 6 -a 280 811 5 -a 280 552 10 -a 280 268 1 -a 280 129 1 -a 280 342 2 -a 280 670 6 -a 280 995 4 -a 280 620 8 -a 280 532 3 -a 281 571 2 -a 281 832 1 -a 281 3 8 -a 281 36 10 -a 281 228 9 -a 281 133 7 -a 281 261 6 -a 281 461 8 -a 281 315 7 -a 281 209 7 -a 281 746 1 -a 281 74 2 -a 281 278 10 -a 281 208 5 -a 281 580 5 -a 281 561 5 -a 281 71 5 -a 281 671 6 -a 281 207 4 -a 281 583 9 -a 281 486 6 -a 281 633 5 -a 281 369 6 -a 281 13 7 -a 281 900 3 -a 281 497 6 -a 281 355 1 -a 281 545 8 -a 281 467 8 -a 281 974 5 -a 281 53 9 -a 281 13 4 -a 281 781 3 -a 281 55 9 -a 281 49 7 -a 281 187 1 -a 281 309 1 -a 281 444 9 -a 281 501 6 -a 281 517 9 -a 281 165 9 -a 281 574 8 -a 281 794 2 -a 281 373 9 -a 281 129 3 -a 281 331 6 -a 281 443 5 -a 281 799 10 -a 281 537 2 -a 281 1 7 -a 281 260 1 -a 281 145 10 -a 281 369 1 -a 281 272 10 -a 281 21 7 -a 281 865 4 -a 281 626 5 -a 281 565 9 -a 281 307 3 -a 281 575 7 -a 281 617 2 -a 281 320 5 -a 281 331 4 -a 281 671 4 -a 281 368 9 -a 281 314 8 -a 281 857 7 -a 281 676 9 -a 281 757 9 -a 281 333 10 -a 281 168 7 -a 281 922 2 -a 281 906 1 -a 281 962 3 -a 281 270 10 -a 281 10 4 -a 281 268 7 -a 281 712 6 -a 281 808 5 -a 281 804 9 -a 281 713 5 -a 281 43 3 -a 281 948 9 -a 281 57 4 -a 281 315 7 -a 281 968 9 -a 281 922 1 -a 281 940 2 -a 281 509 10 -a 281 204 7 -a 281 491 9 -a 281 101 7 -a 281 523 5 -a 281 821 4 -a 281 772 3 -a 281 890 3 -a 281 111 10 -a 281 604 7 -a 281 541 7 -a 281 867 5 -a 281 937 6 -a 281 709 1 -a 281 764 9 -a 281 818 8 -a 281 646 10 -a 281 9 3 -a 281 828 7 -a 281 913 8 -a 281 721 5 -a 282 611 7 -a 282 692 4 -a 282 409 3 -a 282 654 5 -a 282 615 10 -a 282 465 10 -a 282 968 2 -a 282 559 6 -a 282 362 8 -a 282 883 9 -a 282 43 5 -a 282 566 6 -a 282 349 6 -a 282 143 1 -a 282 64 8 -a 282 146 5 -a 282 914 7 -a 282 954 2 -a 282 256 5 -a 282 494 6 -a 282 470 2 -a 282 98 5 -a 282 406 8 -a 282 154 3 -a 282 862 1 -a 282 199 1 -a 282 799 1 -a 282 870 10 -a 282 2 2 -a 282 687 5 -a 282 566 3 -a 282 613 10 -a 282 354 6 -a 282 974 10 -a 282 242 10 -a 282 969 7 -a 282 415 4 -a 282 185 1 -a 282 503 9 -a 282 776 8 -a 282 43 9 -a 282 545 3 -a 282 317 5 -a 282 392 5 -a 282 687 8 -a 282 381 2 -a 282 537 2 -a 282 577 9 -a 282 310 10 -a 282 792 3 -a 282 46 9 -a 282 779 9 -a 282 889 2 -a 282 451 3 -a 282 933 5 -a 282 726 3 -a 282 649 8 -a 282 707 1 -a 282 572 5 -a 282 651 5 -a 282 370 3 -a 282 113 2 -a 282 239 9 -a 282 723 1 -a 282 63 8 -a 282 480 1 -a 282 667 10 -a 282 477 2 -a 282 664 9 -a 282 145 10 -a 282 228 1 -a 282 706 3 -a 282 689 3 -a 282 545 3 -a 282 73 4 -a 282 352 5 -a 282 925 9 -a 282 609 7 -a 282 928 2 -a 282 210 5 -a 282 376 7 -a 282 973 6 -a 282 988 9 -a 282 241 10 -a 282 399 8 -a 282 896 2 -a 282 966 6 -a 282 23 8 -a 282 579 8 -a 282 513 8 -a 282 673 9 -a 282 948 3 -a 282 626 4 -a 282 911 4 -a 282 646 5 -a 282 688 7 -a 282 366 1 -a 282 289 10 -a 282 140 5 -a 282 5 4 -a 282 433 3 -a 282 367 5 -a 282 711 7 -a 282 98 2 -a 283 911 10 -a 283 783 1 -a 283 449 1 -a 283 811 9 -a 283 368 5 -a 283 352 8 -a 283 743 9 -a 283 300 7 -a 283 984 2 -a 283 983 10 -a 283 698 6 -a 283 855 10 -a 283 925 9 -a 283 720 2 -a 283 409 9 -a 283 413 8 -a 283 369 10 -a 283 332 7 -a 283 14 5 -a 283 255 10 -a 283 978 6 -a 283 701 5 -a 283 621 2 -a 283 242 3 -a 283 840 2 -a 283 625 2 -a 283 674 7 -a 283 183 9 -a 283 311 10 -a 283 771 4 -a 283 69 5 -a 283 70 3 -a 283 195 9 -a 283 880 7 -a 283 437 7 -a 283 546 8 -a 283 875 5 -a 283 155 2 -a 283 845 10 -a 283 834 2 -a 283 114 1 -a 283 518 7 -a 283 665 7 -a 283 14 4 -a 283 214 6 -a 283 49 1 -a 283 426 7 -a 283 582 6 -a 283 381 10 -a 283 440 2 -a 283 836 4 -a 283 334 2 -a 283 116 8 -a 283 432 8 -a 283 575 4 -a 283 956 5 -a 283 33 8 -a 283 224 9 -a 283 114 6 -a 283 343 9 -a 283 995 10 -a 283 182 4 -a 283 412 10 -a 283 165 9 -a 283 37 10 -a 283 848 10 -a 283 711 3 -a 283 912 1 -a 283 531 2 -a 283 721 6 -a 283 92 10 -a 283 25 4 -a 283 361 5 -a 283 105 4 -a 283 238 10 -a 283 410 4 -a 283 530 9 -a 283 819 2 -a 283 790 5 -a 283 969 4 -a 283 630 6 -a 283 99 8 -a 283 61 2 -a 283 38 4 -a 283 673 10 -a 283 70 3 -a 283 896 9 -a 283 105 2 -a 283 412 7 -a 283 866 1 -a 283 286 10 -a 283 824 1 -a 283 7 10 -a 283 323 6 -a 283 647 2 -a 283 717 8 -a 283 210 1 -a 283 625 3 -a 283 223 3 -a 283 930 9 -a 283 716 1 -a 283 247 6 -a 283 267 1 -a 283 820 7 -a 283 484 8 -a 283 676 1 -a 283 326 5 -a 283 278 3 -a 283 441 10 -a 283 270 1 -a 283 908 2 -a 283 539 8 -a 283 330 1 -a 283 945 3 -a 283 187 10 -a 283 321 9 -a 283 58 8 -a 283 425 8 -a 283 401 2 -a 284 924 9 -a 284 711 2 -a 284 200 10 -a 284 930 9 -a 284 9 2 -a 284 847 8 -a 284 622 4 -a 284 218 9 -a 284 447 1 -a 284 844 8 -a 284 123 4 -a 284 139 10 -a 284 67 5 -a 284 389 4 -a 284 958 5 -a 284 550 7 -a 284 40 6 -a 284 259 9 -a 284 828 7 -a 284 480 7 -a 284 529 1 -a 284 711 8 -a 284 858 10 -a 284 631 9 -a 284 180 8 -a 284 155 4 -a 284 620 7 -a 284 238 5 -a 284 579 7 -a 284 137 10 -a 284 265 4 -a 284 196 4 -a 284 42 7 -a 284 273 8 -a 284 18 8 -a 284 663 3 -a 284 490 4 -a 284 464 9 -a 284 482 1 -a 284 613 8 -a 284 602 6 -a 284 548 5 -a 284 536 5 -a 284 74 6 -a 284 17 3 -a 284 794 2 -a 284 901 10 -a 284 496 10 -a 284 298 9 -a 284 587 2 -a 284 490 9 -a 284 132 5 -a 284 193 4 -a 284 669 3 -a 284 286 7 -a 284 812 7 -a 284 906 1 -a 284 864 8 -a 284 807 7 -a 284 18 4 -a 284 105 9 -a 284 59 5 -a 284 377 9 -a 284 721 5 -a 284 867 2 -a 284 459 7 -a 284 179 7 -a 284 455 3 -a 284 36 3 -a 284 726 7 -a 284 431 8 -a 284 571 1 -a 284 799 10 -a 284 447 7 -a 284 341 1 -a 284 675 10 -a 284 943 5 -a 284 638 8 -a 284 237 5 -a 284 408 5 -a 284 769 5 -a 284 429 9 -a 284 52 7 -a 284 30 1 -a 284 216 10 -a 284 958 8 -a 284 894 7 -a 284 975 10 -a 284 998 6 -a 284 1000 9 -a 284 10 9 -a 284 350 2 -a 284 995 2 -a 284 730 10 -a 284 192 9 -a 284 429 8 -a 284 908 10 -a 284 646 2 -a 284 464 2 -a 284 610 7 -a 284 53 7 -a 284 11 6 -a 285 384 5 -a 285 499 2 -a 285 351 3 -a 285 35 3 -a 285 417 8 -a 285 988 10 -a 285 271 8 -a 285 824 4 -a 285 733 6 -a 285 700 6 -a 285 876 6 -a 285 762 7 -a 285 915 6 -a 285 809 9 -a 285 631 7 -a 285 913 1 -a 285 759 6 -a 285 604 3 -a 285 889 6 -a 285 768 7 -a 285 954 8 -a 285 859 2 -a 285 474 2 -a 285 121 10 -a 285 263 10 -a 285 357 3 -a 285 767 5 -a 285 726 2 -a 285 966 10 -a 285 819 10 -a 285 736 7 -a 285 326 8 -a 285 293 5 -a 285 62 5 -a 285 360 6 -a 285 710 2 -a 285 26 5 -a 285 630 1 -a 285 509 1 -a 285 758 6 -a 285 305 3 -a 285 360 1 -a 285 495 5 -a 285 196 9 -a 285 144 8 -a 285 102 6 -a 285 84 1 -a 285 903 3 -a 285 705 4 -a 285 972 3 -a 285 646 7 -a 285 634 4 -a 285 806 10 -a 285 95 8 -a 285 755 9 -a 285 44 8 -a 285 452 7 -a 285 497 1 -a 285 770 1 -a 285 393 1 -a 285 291 4 -a 285 481 3 -a 285 718 9 -a 285 583 2 -a 285 543 6 -a 285 53 2 -a 285 268 9 -a 285 568 4 -a 285 683 6 -a 285 777 8 -a 285 301 8 -a 285 987 6 -a 285 112 1 -a 285 795 2 -a 285 158 9 -a 285 256 9 -a 285 896 8 -a 285 242 5 -a 285 134 5 -a 285 577 3 -a 285 189 5 -a 285 779 1 -a 285 186 6 -a 285 995 9 -a 285 874 4 -a 285 940 8 -a 285 14 3 -a 285 301 3 -a 285 412 5 -a 285 783 10 -a 286 693 8 -a 286 702 6 -a 286 240 9 -a 286 387 10 -a 286 261 8 -a 286 782 1 -a 286 439 4 -a 286 528 8 -a 286 325 2 -a 286 97 1 -a 286 280 10 -a 286 625 7 -a 286 60 5 -a 286 392 5 -a 286 395 7 -a 286 217 2 -a 286 647 2 -a 286 267 7 -a 286 458 7 -a 286 780 10 -a 286 843 6 -a 286 647 1 -a 286 534 1 -a 286 4 9 -a 286 617 6 -a 286 383 8 -a 286 944 8 -a 286 630 6 -a 286 683 9 -a 286 331 7 -a 286 389 8 -a 286 352 7 -a 286 9 9 -a 286 628 6 -a 286 738 2 -a 286 269 2 -a 286 385 8 -a 286 152 4 -a 286 796 8 -a 286 709 2 -a 286 249 9 -a 286 52 8 -a 286 309 9 -a 286 308 6 -a 286 443 5 -a 286 703 2 -a 286 524 10 -a 286 65 1 -a 286 969 1 -a 286 982 7 -a 286 844 4 -a 286 787 1 -a 286 604 9 -a 286 353 2 -a 286 791 3 -a 286 196 10 -a 286 736 9 -a 286 710 8 -a 286 825 2 -a 286 394 5 -a 286 16 1 -a 286 189 8 -a 286 745 9 -a 286 24 4 -a 286 816 5 -a 286 458 6 -a 286 292 6 -a 286 176 1 -a 286 610 5 -a 286 64 4 -a 286 884 5 -a 286 858 7 -a 286 115 9 -a 286 168 10 -a 286 141 1 -a 286 557 6 -a 286 871 6 -a 286 664 6 -a 286 621 3 -a 286 815 4 -a 286 621 6 -a 286 440 2 -a 286 578 4 -a 286 200 10 -a 286 792 4 -a 286 344 9 -a 286 395 2 -a 286 503 7 -a 286 29 6 -a 286 196 7 -a 286 897 3 -a 286 44 2 -a 286 384 1 -a 286 617 6 -a 286 68 5 -a 286 176 6 -a 287 51 5 -a 287 359 10 -a 287 351 2 -a 287 660 9 -a 287 422 8 -a 287 211 10 -a 287 493 2 -a 287 536 10 -a 287 378 7 -a 287 633 3 -a 287 68 3 -a 287 224 9 -a 287 272 9 -a 287 688 8 -a 287 15 10 -a 287 893 8 -a 287 103 10 -a 287 592 6 -a 287 68 9 -a 287 895 10 -a 287 935 3 -a 287 463 10 -a 287 373 6 -a 287 963 5 -a 287 658 3 -a 287 245 2 -a 287 17 4 -a 287 862 8 -a 287 49 1 -a 287 192 6 -a 287 912 7 -a 287 408 8 -a 287 543 4 -a 287 547 2 -a 287 829 1 -a 287 753 9 -a 287 15 3 -a 287 341 6 -a 287 106 3 -a 287 647 8 -a 287 408 6 -a 287 330 4 -a 287 918 4 -a 287 72 9 -a 287 344 7 -a 287 786 2 -a 287 174 7 -a 287 935 4 -a 287 854 5 -a 287 44 2 -a 287 845 2 -a 287 292 1 -a 287 417 5 -a 287 783 10 -a 287 949 4 -a 287 661 6 -a 287 764 10 -a 287 965 2 -a 287 498 4 -a 287 813 4 -a 287 133 3 -a 287 385 6 -a 287 196 10 -a 287 675 4 -a 287 931 5 -a 287 403 8 -a 287 945 5 -a 287 340 6 -a 287 508 6 -a 287 567 1 -a 287 748 10 -a 287 837 9 -a 287 461 1 -a 287 819 3 -a 287 156 3 -a 287 222 2 -a 287 992 6 -a 287 66 7 -a 287 51 7 -a 287 12 8 -a 287 910 5 -a 287 342 3 -a 287 428 7 -a 287 668 8 -a 287 266 1 -a 287 64 3 -a 287 408 3 -a 287 207 3 -a 287 562 8 -a 287 196 1 -a 287 339 6 -a 287 946 8 -a 287 391 8 -a 287 853 1 -a 287 390 6 -a 287 391 8 -a 287 773 10 -a 287 730 2 -a 287 898 5 -a 287 316 2 -a 287 453 1 -a 287 711 5 -a 287 776 5 -a 287 247 1 -a 287 866 9 -a 287 997 7 -a 287 214 3 -a 287 932 3 -a 287 24 3 -a 287 225 10 -a 287 817 9 -a 287 365 10 -a 287 652 9 -a 288 461 7 -a 288 631 8 -a 288 716 1 -a 288 868 5 -a 288 837 3 -a 288 253 1 -a 288 39 6 -a 288 151 5 -a 288 174 7 -a 288 429 9 -a 288 139 9 -a 288 2 3 -a 288 818 3 -a 288 529 4 -a 288 775 5 -a 288 523 3 -a 288 402 2 -a 288 66 5 -a 288 975 5 -a 288 88 1 -a 288 841 1 -a 288 197 10 -a 288 954 2 -a 288 813 7 -a 288 411 7 -a 288 861 3 -a 288 836 4 -a 288 635 6 -a 288 653 4 -a 288 177 7 -a 288 263 10 -a 288 89 2 -a 288 807 9 -a 288 978 4 -a 288 956 6 -a 288 619 2 -a 288 206 1 -a 288 994 4 -a 288 769 1 -a 288 379 5 -a 288 398 6 -a 288 907 2 -a 288 381 3 -a 288 192 8 -a 288 411 3 -a 288 131 4 -a 288 714 8 -a 288 812 8 -a 288 196 5 -a 288 665 6 -a 288 900 3 -a 288 12 9 -a 288 861 10 -a 288 829 8 -a 288 824 8 -a 288 247 4 -a 288 665 4 -a 288 636 1 -a 288 882 5 -a 288 293 5 -a 288 812 6 -a 288 120 7 -a 288 382 7 -a 288 594 9 -a 288 73 10 -a 288 313 1 -a 288 188 7 -a 288 278 9 -a 288 283 5 -a 288 956 2 -a 288 656 7 -a 288 680 10 -a 288 838 3 -a 288 12 3 -a 288 871 5 -a 288 224 10 -a 288 142 9 -a 288 561 6 -a 288 11 6 -a 288 337 7 -a 288 201 10 -a 288 910 7 -a 288 348 6 -a 289 37 1 -a 289 714 2 -a 289 148 3 -a 289 284 7 -a 289 354 10 -a 289 783 2 -a 289 141 10 -a 289 647 8 -a 289 570 8 -a 289 260 9 -a 289 4 5 -a 289 139 5 -a 289 332 2 -a 289 316 2 -a 289 326 7 -a 289 609 5 -a 289 598 7 -a 289 257 4 -a 289 240 5 -a 289 254 10 -a 289 70 7 -a 289 252 10 -a 289 100 4 -a 289 293 4 -a 289 393 1 -a 289 660 10 -a 289 303 7 -a 289 730 2 -a 289 860 9 -a 289 189 1 -a 289 53 9 -a 289 897 2 -a 289 902 5 -a 289 200 2 -a 289 156 3 -a 289 232 6 -a 289 982 8 -a 289 296 7 -a 289 878 7 -a 289 527 10 -a 289 555 10 -a 289 881 10 -a 289 665 4 -a 289 886 6 -a 289 172 9 -a 289 990 9 -a 289 470 6 -a 289 770 4 -a 289 222 5 -a 289 709 2 -a 289 291 8 -a 289 960 8 -a 289 98 6 -a 289 583 3 -a 289 329 8 -a 289 758 7 -a 289 886 1 -a 289 34 5 -a 289 593 6 -a 289 50 1 -a 289 86 3 -a 289 465 6 -a 289 951 1 -a 289 286 4 -a 289 620 2 -a 289 158 3 -a 289 243 3 -a 289 915 9 -a 289 11 10 -a 289 770 10 -a 289 445 7 -a 289 891 10 -a 289 410 9 -a 289 306 8 -a 289 39 3 -a 289 376 7 -a 289 775 8 -a 289 808 9 -a 289 597 7 -a 289 460 5 -a 289 806 10 -a 289 888 1 -a 289 395 9 -a 289 903 9 -a 289 446 10 -a 289 723 4 -a 289 636 9 -a 289 307 6 -a 289 756 10 -a 289 205 2 -a 289 356 3 -a 289 842 10 -a 289 669 2 -a 289 283 1 -a 289 103 7 -a 289 265 3 -a 289 440 10 -a 289 345 6 -a 289 155 8 -a 289 451 7 -a 289 90 1 -a 289 600 10 -a 289 317 6 -a 289 500 5 -a 289 905 1 -a 289 355 4 -a 289 875 2 -a 289 656 1 -a 289 138 1 -a 289 447 2 -a 289 91 1 -a 289 943 10 -a 289 310 6 -a 289 485 5 -a 289 822 4 -a 289 756 5 -a 289 184 4 -a 289 433 2 -a 289 38 4 -a 289 939 9 -a 289 637 1 -a 289 394 2 -a 289 756 6 -a 290 282 7 -a 290 676 1 -a 290 858 7 -a 290 546 5 -a 290 91 5 -a 290 179 8 -a 290 700 5 -a 290 541 5 -a 290 268 3 -a 290 275 7 -a 290 858 5 -a 290 767 10 -a 290 156 2 -a 290 188 4 -a 290 617 5 -a 290 811 1 -a 290 326 7 -a 290 40 9 -a 290 901 7 -a 290 244 9 -a 290 349 3 -a 290 361 1 -a 290 41 4 -a 290 80 5 -a 290 544 6 -a 290 474 8 -a 290 118 10 -a 290 459 10 -a 290 86 4 -a 290 511 8 -a 290 190 4 -a 290 367 2 -a 290 162 4 -a 290 24 2 -a 290 912 3 -a 290 252 3 -a 290 202 5 -a 290 588 8 -a 290 793 4 -a 290 469 6 -a 290 862 2 -a 290 626 6 -a 290 212 5 -a 290 813 7 -a 290 828 8 -a 290 803 1 -a 290 114 5 -a 290 867 10 -a 290 679 10 -a 290 358 5 -a 290 192 3 -a 290 16 4 -a 290 398 8 -a 290 271 10 -a 290 559 7 -a 290 871 9 -a 290 388 8 -a 290 957 3 -a 290 898 3 -a 290 183 8 -a 290 299 8 -a 290 35 9 -a 290 206 6 -a 290 187 4 -a 290 287 2 -a 290 407 10 -a 290 774 4 -a 290 55 2 -a 290 875 5 -a 290 611 2 -a 290 680 10 -a 290 62 7 -a 290 604 10 -a 290 468 5 -a 290 890 7 -a 290 382 4 -a 290 582 7 -a 290 732 9 -a 290 37 3 -a 290 939 3 -a 290 923 6 -a 290 52 10 -a 290 312 2 -a 290 170 4 -a 290 610 3 -a 290 159 8 -a 290 557 7 -a 290 603 9 -a 290 91 1 -a 290 431 3 -a 290 785 5 -a 290 389 4 -a 290 465 8 -a 290 990 7 -a 290 575 1 -a 290 751 6 -a 290 372 4 -a 290 324 5 -a 290 805 7 -a 290 222 8 -a 290 935 10 -a 290 460 7 -a 290 284 5 -a 290 514 9 -a 290 928 5 -a 290 149 10 -a 290 895 10 -a 290 485 1 -a 290 880 7 -a 290 931 2 -a 291 399 7 -a 291 779 4 -a 291 982 1 -a 291 710 7 -a 291 948 9 -a 291 568 4 -a 291 868 1 -a 291 480 1 -a 291 146 2 -a 291 958 10 -a 291 910 10 -a 291 930 3 -a 291 323 5 -a 291 351 4 -a 291 895 3 -a 291 897 5 -a 291 77 3 -a 291 242 2 -a 291 197 10 -a 291 882 3 -a 291 463 4 -a 291 107 3 -a 291 317 5 -a 291 746 5 -a 291 620 8 -a 291 220 5 -a 291 894 10 -a 291 490 3 -a 291 704 9 -a 291 750 5 -a 291 397 6 -a 291 78 2 -a 291 504 8 -a 291 354 4 -a 291 788 3 -a 291 427 6 -a 291 921 10 -a 291 631 5 -a 291 906 4 -a 291 42 3 -a 291 565 7 -a 291 792 7 -a 291 971 10 -a 291 887 1 -a 291 118 3 -a 291 841 8 -a 291 759 5 -a 291 194 10 -a 291 58 7 -a 291 955 9 -a 291 51 3 -a 291 521 3 -a 291 37 8 -a 291 368 5 -a 291 242 10 -a 291 656 6 -a 291 587 9 -a 291 112 9 -a 291 122 2 -a 291 267 2 -a 291 861 4 -a 291 518 5 -a 291 344 4 -a 291 340 10 -a 291 871 2 -a 291 107 3 -a 291 766 4 -a 291 768 1 -a 291 738 9 -a 291 647 3 -a 291 809 5 -a 291 278 10 -a 291 414 5 -a 291 756 6 -a 291 140 6 -a 291 531 1 -a 291 572 1 -a 291 898 2 -a 291 725 3 -a 291 630 6 -a 291 829 3 -a 291 775 1 -a 291 126 5 -a 291 865 8 -a 291 118 9 -a 291 367 5 -a 291 497 9 -a 291 705 3 -a 291 478 5 -a 291 618 3 -a 291 971 9 -a 291 314 2 -a 292 111 6 -a 292 290 4 -a 292 653 6 -a 292 981 9 -a 292 397 6 -a 292 394 7 -a 292 724 6 -a 292 110 6 -a 292 17 8 -a 292 509 2 -a 292 387 8 -a 292 430 4 -a 292 240 2 -a 292 526 3 -a 292 961 4 -a 292 811 8 -a 292 399 8 -a 292 661 4 -a 292 416 10 -a 292 203 4 -a 292 411 9 -a 292 541 9 -a 292 44 2 -a 292 529 3 -a 292 908 5 -a 292 540 8 -a 292 209 10 -a 292 361 4 -a 292 133 7 -a 292 155 8 -a 292 675 3 -a 292 243 10 -a 292 444 9 -a 292 303 6 -a 292 199 4 -a 292 840 7 -a 292 697 10 -a 292 923 9 -a 292 949 5 -a 292 713 5 -a 292 407 2 -a 292 311 5 -a 292 118 9 -a 292 646 3 -a 292 836 7 -a 292 54 10 -a 292 432 4 -a 292 211 7 -a 292 714 6 -a 292 848 6 -a 292 413 10 -a 292 101 8 -a 292 364 1 -a 292 456 4 -a 292 629 10 -a 292 247 3 -a 292 995 4 -a 292 837 5 -a 292 608 8 -a 292 103 8 -a 292 991 9 -a 292 258 3 -a 292 345 5 -a 292 410 10 -a 292 560 7 -a 292 544 9 -a 292 226 6 -a 292 232 1 -a 292 442 4 -a 292 150 5 -a 292 944 5 -a 292 848 5 -a 292 461 8 -a 292 38 3 -a 292 469 10 -a 292 272 2 -a 292 91 5 -a 292 900 5 -a 292 482 8 -a 292 805 9 -a 292 723 4 -a 292 895 5 -a 292 905 6 -a 292 63 1 -a 292 326 9 -a 292 509 5 -a 292 309 9 -a 292 297 4 -a 292 321 8 -a 292 916 6 -a 292 399 6 -a 292 287 7 -a 292 149 4 -a 292 744 4 -a 292 696 5 -a 292 709 9 -a 292 263 8 -a 292 921 3 -a 292 940 2 -a 292 704 8 -a 292 47 8 -a 292 860 7 -a 292 527 3 -a 292 507 2 -a 292 897 7 -a 292 995 7 -a 292 778 10 -a 292 987 3 -a 292 870 10 -a 292 236 2 -a 292 767 8 -a 292 569 8 -a 293 106 7 -a 293 647 2 -a 293 631 2 -a 293 431 7 -a 293 131 3 -a 293 939 1 -a 293 727 5 -a 293 451 2 -a 293 831 8 -a 293 102 7 -a 293 737 3 -a 293 979 9 -a 293 845 6 -a 293 409 10 -a 293 663 8 -a 293 83 6 -a 293 305 2 -a 293 579 9 -a 293 786 8 -a 293 351 2 -a 293 414 3 -a 293 288 1 -a 293 857 3 -a 293 286 10 -a 293 258 10 -a 293 611 1 -a 293 248 5 -a 293 103 1 -a 293 846 7 -a 293 671 7 -a 293 951 1 -a 293 637 9 -a 293 277 8 -a 293 357 2 -a 293 768 7 -a 293 192 10 -a 293 60 10 -a 293 194 3 -a 293 161 8 -a 293 931 3 -a 293 976 4 -a 293 315 5 -a 293 615 7 -a 293 63 9 -a 293 619 8 -a 293 169 9 -a 293 848 3 -a 293 970 8 -a 293 582 9 -a 293 111 7 -a 293 802 8 -a 293 867 9 -a 293 368 10 -a 293 388 5 -a 293 90 10 -a 293 470 4 -a 293 209 6 -a 293 80 8 -a 293 117 9 -a 293 135 8 -a 293 717 4 -a 293 393 5 -a 293 492 3 -a 293 460 2 -a 293 584 9 -a 293 551 8 -a 293 653 4 -a 293 581 8 -a 293 711 8 -a 293 559 5 -a 293 533 2 -a 293 691 8 -a 293 873 5 -a 293 123 5 -a 293 753 4 -a 293 468 6 -a 293 291 7 -a 293 576 8 -a 293 413 9 -a 293 872 10 -a 293 686 10 -a 293 190 6 -a 293 714 3 -a 293 29 1 -a 294 578 3 -a 294 803 2 -a 294 498 6 -a 294 786 9 -a 294 883 5 -a 294 614 8 -a 294 921 5 -a 294 575 9 -a 294 388 7 -a 294 10 6 -a 294 566 8 -a 294 938 10 -a 294 662 1 -a 294 123 9 -a 294 624 7 -a 294 197 4 -a 294 655 7 -a 294 290 8 -a 294 45 1 -a 294 777 3 -a 294 18 2 -a 294 512 1 -a 294 43 5 -a 294 593 4 -a 294 924 10 -a 294 914 4 -a 294 254 2 -a 294 90 7 -a 294 603 10 -a 294 282 8 -a 294 667 7 -a 294 381 1 -a 294 779 9 -a 294 428 8 -a 294 239 9 -a 294 369 3 -a 294 324 7 -a 294 813 6 -a 294 351 3 -a 294 711 3 -a 294 822 3 -a 294 916 5 -a 294 624 3 -a 294 460 9 -a 294 14 1 -a 294 223 2 -a 294 656 2 -a 294 668 1 -a 294 512 6 -a 294 700 8 -a 294 420 8 -a 294 529 3 -a 294 188 8 -a 294 462 6 -a 294 97 1 -a 294 87 9 -a 294 351 8 -a 294 350 7 -a 294 176 4 -a 294 953 3 -a 294 631 6 -a 294 842 8 -a 294 310 5 -a 294 386 10 -a 294 246 7 -a 294 548 10 -a 294 754 5 -a 294 569 10 -a 294 337 3 -a 294 80 1 -a 294 256 5 -a 294 134 9 -a 294 995 9 -a 294 879 7 -a 294 593 7 -a 294 78 4 -a 294 224 1 -a 294 652 4 -a 294 589 8 -a 294 924 8 -a 294 48 9 -a 294 94 1 -a 294 87 4 -a 294 509 3 -a 294 190 2 -a 294 173 9 -a 294 860 6 -a 294 540 1 -a 294 349 10 -a 294 788 5 -a 294 146 4 -a 294 166 8 -a 294 73 3 -a 294 531 3 -a 294 411 10 -a 294 621 9 -a 294 260 4 -a 294 980 3 -a 294 957 10 -a 294 339 7 -a 294 211 3 -a 294 66 10 -a 294 310 6 -a 294 65 6 -a 294 659 10 -a 294 294 10 -a 294 142 4 -a 294 882 9 -a 294 945 7 -a 294 731 2 -a 294 781 9 -a 294 992 2 -a 294 824 9 -a 294 867 3 -a 294 477 10 -a 295 16 3 -a 295 312 6 -a 295 528 4 -a 295 364 9 -a 295 75 7 -a 295 674 8 -a 295 529 4 -a 295 148 1 -a 295 180 3 -a 295 940 6 -a 295 768 5 -a 295 440 9 -a 295 895 4 -a 295 700 10 -a 295 778 5 -a 295 81 2 -a 295 765 4 -a 295 63 6 -a 295 145 1 -a 295 399 3 -a 295 356 5 -a 295 287 1 -a 295 257 7 -a 295 277 10 -a 295 13 1 -a 295 244 6 -a 295 816 5 -a 295 880 3 -a 295 720 8 -a 295 804 3 -a 295 895 4 -a 295 7 5 -a 295 308 8 -a 295 234 6 -a 295 82 1 -a 295 981 6 -a 295 762 3 -a 295 229 8 -a 295 136 3 -a 295 677 3 -a 295 996 3 -a 295 575 8 -a 295 547 9 -a 295 671 4 -a 295 329 1 -a 295 627 4 -a 295 411 8 -a 295 391 10 -a 295 772 4 -a 295 810 5 -a 295 747 10 -a 295 34 10 -a 295 42 5 -a 295 26 4 -a 295 54 2 -a 295 242 1 -a 295 841 8 -a 295 933 5 -a 295 962 10 -a 295 620 9 -a 295 803 8 -a 295 968 8 -a 295 927 1 -a 295 12 4 -a 295 25 7 -a 295 883 8 -a 295 774 10 -a 295 253 2 -a 295 426 1 -a 295 224 6 -a 295 569 10 -a 295 973 10 -a 295 894 6 -a 295 897 2 -a 295 575 10 -a 295 281 7 -a 295 264 1 -a 295 322 2 -a 295 66 8 -a 295 355 2 -a 295 107 8 -a 295 380 2 -a 295 160 2 -a 295 225 4 -a 295 196 5 -a 295 69 8 -a 295 162 5 -a 295 816 8 -a 295 871 1 -a 295 106 2 -a 295 718 10 -a 295 883 10 -a 295 130 6 -a 295 577 3 -a 295 632 7 -a 295 383 3 -a 295 571 9 -a 295 33 8 -a 295 606 5 -a 295 115 9 -a 295 476 8 -a 295 556 4 -a 295 756 7 -a 295 251 1 -a 295 877 2 -a 295 821 7 -a 295 236 1 -a 295 208 3 -a 295 927 1 -a 295 219 6 -a 295 587 10 -a 296 62 2 -a 296 443 8 -a 296 783 2 -a 296 130 9 -a 296 605 4 -a 296 574 7 -a 296 710 3 -a 296 267 8 -a 296 859 8 -a 296 839 9 -a 296 843 8 -a 296 466 9 -a 296 197 8 -a 296 389 5 -a 296 498 10 -a 296 803 8 -a 296 504 5 -a 296 479 10 -a 296 254 9 -a 296 491 4 -a 296 10 1 -a 296 741 10 -a 296 886 8 -a 296 805 4 -a 296 976 6 -a 296 69 3 -a 296 707 6 -a 296 170 10 -a 296 656 9 -a 296 768 2 -a 296 612 7 -a 296 414 4 -a 296 898 5 -a 296 192 8 -a 296 987 9 -a 296 874 2 -a 296 901 4 -a 296 229 9 -a 296 708 3 -a 296 716 9 -a 296 48 8 -a 296 149 7 -a 296 912 4 -a 296 436 2 -a 296 646 9 -a 296 690 1 -a 296 939 7 -a 296 100 9 -a 296 943 10 -a 296 405 9 -a 296 109 5 -a 296 927 4 -a 296 121 5 -a 296 995 3 -a 296 707 6 -a 296 72 6 -a 296 39 5 -a 296 389 8 -a 296 241 3 -a 296 694 9 -a 296 133 4 -a 296 853 10 -a 296 83 5 -a 296 6 7 -a 296 20 3 -a 296 45 5 -a 296 879 9 -a 296 921 7 -a 296 274 1 -a 296 562 6 -a 296 612 6 -a 296 321 9 -a 296 710 2 -a 296 499 5 -a 296 756 5 -a 296 331 2 -a 296 165 7 -a 296 671 1 -a 296 431 9 -a 296 83 10 -a 296 51 2 -a 296 539 2 -a 296 172 6 -a 296 509 7 -a 296 692 3 -a 296 243 6 -a 296 548 9 -a 296 57 10 -a 296 484 1 -a 296 217 6 -a 296 189 8 -a 296 312 2 -a 296 300 2 -a 297 194 7 -a 297 331 3 -a 297 344 1 -a 297 48 8 -a 297 227 6 -a 297 617 6 -a 297 609 10 -a 297 838 7 -a 297 937 2 -a 297 294 10 -a 297 313 5 -a 297 669 3 -a 297 624 6 -a 297 477 8 -a 297 315 5 -a 297 30 2 -a 297 559 10 -a 297 365 10 -a 297 569 10 -a 297 544 10 -a 297 536 4 -a 297 53 10 -a 297 212 2 -a 297 779 9 -a 297 600 9 -a 297 268 2 -a 297 238 4 -a 297 817 5 -a 297 456 6 -a 297 549 4 -a 297 92 9 -a 297 649 7 -a 297 879 2 -a 297 435 8 -a 297 696 6 -a 297 82 1 -a 297 28 8 -a 297 280 8 -a 297 919 4 -a 297 964 4 -a 297 573 5 -a 297 207 1 -a 297 608 2 -a 297 172 6 -a 297 683 4 -a 297 922 3 -a 297 202 4 -a 297 218 2 -a 297 263 10 -a 297 770 9 -a 297 761 7 -a 297 798 9 -a 297 822 4 -a 297 972 7 -a 297 552 9 -a 297 398 5 -a 297 215 2 -a 297 789 9 -a 297 190 10 -a 297 670 8 -a 297 313 5 -a 297 281 1 -a 297 294 9 -a 297 168 8 -a 297 715 10 -a 297 989 3 -a 297 249 7 -a 297 742 2 -a 297 244 9 -a 297 143 6 -a 297 682 10 -a 297 816 4 -a 297 350 8 -a 297 265 6 -a 297 988 3 -a 297 8 8 -a 297 163 2 -a 297 165 6 -a 297 225 7 -a 297 425 1 -a 297 934 4 -a 297 986 4 -a 297 198 3 -a 297 731 4 -a 297 933 2 -a 297 750 7 -a 297 104 8 -a 297 124 6 -a 297 514 6 -a 297 293 2 -a 297 793 3 -a 297 827 7 -a 297 573 2 -a 297 63 9 -a 297 994 3 -a 297 264 8 -a 297 27 4 -a 297 218 1 -a 297 271 4 -a 298 360 4 -a 298 662 9 -a 298 62 8 -a 298 709 4 -a 298 927 9 -a 298 25 7 -a 298 717 10 -a 298 65 3 -a 298 189 8 -a 298 941 9 -a 298 489 3 -a 298 98 4 -a 298 902 7 -a 298 686 2 -a 298 829 1 -a 298 811 3 -a 298 411 4 -a 298 932 7 -a 298 934 8 -a 298 925 10 -a 298 201 1 -a 298 702 9 -a 298 727 8 -a 298 773 1 -a 298 764 5 -a 298 696 3 -a 298 12 7 -a 298 791 8 -a 298 913 2 -a 298 37 8 -a 298 248 8 -a 298 654 1 -a 298 98 4 -a 298 957 9 -a 298 556 7 -a 298 123 1 -a 298 649 1 -a 298 620 9 -a 298 311 8 -a 298 565 10 -a 298 84 4 -a 298 409 7 -a 298 443 10 -a 298 770 9 -a 298 213 5 -a 298 229 5 -a 298 156 7 -a 298 120 3 -a 298 138 6 -a 298 56 4 -a 298 320 2 -a 298 839 5 -a 298 782 6 -a 298 69 7 -a 298 579 5 -a 298 453 6 -a 298 80 4 -a 298 345 7 -a 298 341 2 -a 298 72 6 -a 298 381 10 -a 298 589 2 -a 298 726 2 -a 298 478 1 -a 298 521 8 -a 298 257 6 -a 298 600 5 -a 298 145 3 -a 298 877 7 -a 298 911 10 -a 298 709 2 -a 298 960 6 -a 298 295 6 -a 298 127 6 -a 298 705 5 -a 298 507 4 -a 298 355 5 -a 298 861 9 -a 298 626 1 -a 298 492 4 -a 298 916 9 -a 298 946 7 -a 298 307 9 -a 298 674 8 -a 298 885 6 -a 298 102 8 -a 298 69 6 -a 298 205 5 -a 298 443 7 -a 298 141 4 -a 298 585 4 -a 298 7 9 -a 298 866 9 -a 298 38 9 -a 298 527 7 -a 298 98 9 -a 298 638 1 -a 298 671 3 -a 298 974 10 -a 298 524 5 -a 298 355 8 -a 298 910 6 -a 298 818 7 -a 298 482 5 -a 298 590 4 -a 299 300 2 -a 299 836 4 -a 299 426 4 -a 299 925 8 -a 299 304 8 -a 299 318 1 -a 299 846 2 -a 299 610 4 -a 299 991 5 -a 299 835 6 -a 299 470 10 -a 299 68 9 -a 299 904 7 -a 299 674 2 -a 299 510 10 -a 299 20 9 -a 299 234 6 -a 299 516 2 -a 299 885 8 -a 299 271 6 -a 299 18 9 -a 299 982 7 -a 299 908 8 -a 299 688 3 -a 299 932 3 -a 299 407 8 -a 299 19 7 -a 299 817 1 -a 299 200 5 -a 299 500 9 -a 299 382 10 -a 299 499 3 -a 299 311 7 -a 299 808 3 -a 299 400 5 -a 299 614 2 -a 299 101 1 -a 299 221 2 -a 299 199 10 -a 299 67 2 -a 299 32 10 -a 299 668 9 -a 299 134 7 -a 299 935 5 -a 299 317 9 -a 299 644 10 -a 299 954 8 -a 299 550 1 -a 299 135 9 -a 299 814 5 -a 299 821 9 -a 299 153 8 -a 299 771 3 -a 299 704 9 -a 299 840 5 -a 299 678 4 -a 299 87 7 -a 299 858 4 -a 299 470 10 -a 299 286 3 -a 299 333 6 -a 299 852 4 -a 299 785 3 -a 299 644 2 -a 299 635 6 -a 299 160 7 -a 299 233 6 -a 299 735 1 -a 299 380 1 -a 299 432 4 -a 299 801 8 -a 299 411 8 -a 299 75 10 -a 299 934 9 -a 299 321 7 -a 299 392 3 -a 299 553 4 -a 299 250 10 -a 299 941 9 -a 299 688 4 -a 299 39 10 -a 299 737 9 -a 299 840 3 -a 299 810 3 -a 299 417 1 -a 299 655 3 -a 299 463 4 -a 299 503 7 -a 299 489 3 -a 299 933 10 -a 299 788 4 -a 299 821 5 -a 299 760 5 -a 299 548 7 -a 299 440 7 -a 299 370 8 -a 299 707 4 -a 299 673 4 -a 299 80 6 -a 299 63 1 -a 299 80 4 -a 299 880 8 -a 299 473 9 -a 299 154 10 -a 299 789 1 -a 299 794 3 -a 299 545 1 -a 299 318 8 -a 299 19 1 -a 299 462 5 -a 300 58 1 -a 300 174 8 -a 300 820 3 -a 300 867 9 -a 300 590 6 -a 300 450 8 -a 300 305 5 -a 300 68 5 -a 300 938 5 -a 300 213 5 -a 300 856 1 -a 300 735 8 -a 300 972 8 -a 300 379 5 -a 300 150 8 -a 300 317 1 -a 300 62 6 -a 300 822 7 -a 300 396 9 -a 300 124 7 -a 300 901 10 -a 300 251 1 -a 300 596 4 -a 300 31 6 -a 300 16 1 -a 300 365 9 -a 300 575 9 -a 300 333 6 -a 300 384 6 -a 300 12 2 -a 300 313 2 -a 300 441 7 -a 300 186 4 -a 300 108 2 -a 300 283 3 -a 300 775 9 -a 300 557 3 -a 300 587 10 -a 300 843 9 -a 300 471 8 -a 300 800 5 -a 300 674 7 -a 300 181 8 -a 300 747 1 -a 300 28 1 -a 300 330 1 -a 300 40 7 -a 300 89 2 -a 300 128 10 -a 300 435 1 -a 300 212 4 -a 300 4 3 -a 300 686 1 -a 300 808 5 -a 300 34 8 -a 300 701 3 -a 300 148 10 -a 300 609 5 -a 300 9 4 -a 300 531 5 -a 300 620 5 -a 300 321 6 -a 300 971 7 -a 300 805 6 -a 300 428 9 -a 300 229 6 -a 300 556 4 -a 300 984 3 -a 300 816 1 -a 300 374 1 -a 300 430 4 -a 300 591 5 -a 300 23 4 -a 300 610 7 -a 300 313 7 -a 300 50 1 -a 300 940 7 -a 300 352 1 -a 300 139 4 -a 300 43 4 -a 300 787 7 -a 300 350 10 -a 300 46 6 -a 300 448 10 -a 300 133 2 -a 300 80 10 -a 300 124 8 -a 300 281 4 -a 300 688 10 -a 300 132 5 -a 300 811 5 -a 300 283 4 -a 300 452 4 -a 300 758 2 -a 301 64 7 -a 301 879 8 -a 301 986 7 -a 301 619 1 -a 301 838 8 -a 301 777 3 -a 301 992 8 -a 301 244 3 -a 301 343 9 -a 301 853 3 -a 301 656 6 -a 301 39 9 -a 301 768 4 -a 301 177 6 -a 301 810 4 -a 301 769 9 -a 301 527 5 -a 301 856 2 -a 301 192 7 -a 301 659 9 -a 301 935 9 -a 301 315 10 -a 301 939 5 -a 301 598 10 -a 301 446 1 -a 301 726 10 -a 301 880 9 -a 301 897 4 -a 301 459 2 -a 301 943 6 -a 301 751 9 -a 301 420 10 -a 301 537 9 -a 301 565 1 -a 301 173 2 -a 301 504 3 -a 301 808 3 -a 301 515 10 -a 301 493 6 -a 301 636 6 -a 301 146 5 -a 301 532 8 -a 301 380 7 -a 301 129 8 -a 301 708 6 -a 301 165 8 -a 301 897 8 -a 301 210 7 -a 301 65 5 -a 301 869 5 -a 301 930 9 -a 301 379 7 -a 301 783 7 -a 301 503 4 -a 301 825 8 -a 301 484 9 -a 301 359 2 -a 301 697 7 -a 301 942 1 -a 301 277 6 -a 301 424 6 -a 301 338 3 -a 301 814 1 -a 301 988 2 -a 301 510 10 -a 301 293 8 -a 301 771 8 -a 301 786 6 -a 301 382 7 -a 301 146 8 -a 301 293 10 -a 301 761 3 -a 301 274 4 -a 301 1000 1 -a 301 926 5 -a 301 146 6 -a 301 186 7 -a 301 921 8 -a 301 210 2 -a 301 30 1 -a 301 827 1 -a 301 589 7 -a 301 812 10 -a 301 305 4 -a 301 389 8 -a 301 272 4 -a 301 663 9 -a 301 61 5 -a 301 189 10 -a 301 940 1 -a 301 484 7 -a 301 526 3 -a 301 729 3 -a 301 447 10 -a 301 11 10 -a 301 193 4 -a 301 11 4 -a 301 782 1 -a 301 575 2 -a 301 156 2 -a 302 50 6 -a 302 311 3 -a 302 429 5 -a 302 26 1 -a 302 212 6 -a 302 574 5 -a 302 211 3 -a 302 109 2 -a 302 784 6 -a 302 240 3 -a 302 935 3 -a 302 348 5 -a 302 27 2 -a 302 215 6 -a 302 736 9 -a 302 298 7 -a 302 878 10 -a 302 796 6 -a 302 487 7 -a 302 793 1 -a 302 256 8 -a 302 497 1 -a 302 702 7 -a 302 493 5 -a 302 895 3 -a 302 9 2 -a 302 251 5 -a 302 445 1 -a 302 164 5 -a 302 300 1 -a 302 755 10 -a 302 592 6 -a 302 325 5 -a 302 967 9 -a 302 141 10 -a 302 535 6 -a 302 51 9 -a 302 924 1 -a 302 774 1 -a 302 985 9 -a 302 247 7 -a 302 801 8 -a 302 175 9 -a 302 982 2 -a 302 74 8 -a 302 28 1 -a 302 754 4 -a 302 560 10 -a 302 820 10 -a 302 548 2 -a 302 292 8 -a 302 686 7 -a 302 546 5 -a 302 785 4 -a 302 556 5 -a 302 554 4 -a 302 11 7 -a 302 1000 1 -a 302 717 3 -a 302 310 8 -a 302 731 3 -a 302 284 9 -a 302 635 6 -a 302 673 9 -a 302 424 5 -a 302 145 6 -a 302 723 2 -a 302 324 9 -a 302 919 7 -a 302 683 5 -a 302 570 2 -a 302 695 2 -a 302 857 2 -a 302 528 10 -a 302 768 2 -a 302 885 10 -a 302 257 7 -a 302 304 9 -a 302 680 2 -a 302 241 3 -a 302 851 4 -a 302 972 6 -a 302 926 3 -a 302 372 9 -a 302 732 4 -a 302 458 4 -a 302 925 6 -a 302 742 3 -a 303 433 9 -a 303 617 10 -a 303 27 9 -a 303 139 10 -a 303 900 9 -a 303 661 6 -a 303 811 6 -a 303 299 6 -a 303 806 4 -a 303 509 3 -a 303 622 7 -a 303 700 1 -a 303 167 9 -a 303 168 4 -a 303 370 2 -a 303 695 5 -a 303 113 7 -a 303 884 5 -a 303 951 10 -a 303 416 6 -a 303 539 8 -a 303 167 7 -a 303 242 8 -a 303 486 2 -a 303 68 5 -a 303 613 7 -a 303 193 7 -a 303 525 10 -a 303 513 2 -a 303 934 10 -a 303 958 9 -a 303 105 2 -a 303 961 7 -a 303 72 10 -a 303 597 1 -a 303 883 5 -a 303 279 10 -a 303 378 5 -a 303 367 5 -a 303 900 8 -a 303 53 10 -a 303 534 3 -a 303 43 6 -a 303 422 3 -a 303 533 5 -a 303 737 6 -a 303 535 1 -a 303 392 9 -a 303 663 3 -a 303 950 10 -a 303 930 8 -a 303 829 3 -a 303 168 9 -a 303 392 7 -a 303 897 2 -a 303 780 2 -a 303 584 9 -a 303 397 4 -a 303 269 10 -a 303 494 4 -a 303 330 3 -a 303 373 10 -a 303 430 8 -a 303 402 9 -a 303 353 6 -a 303 2 3 -a 303 260 2 -a 303 631 7 -a 303 380 4 -a 303 626 2 -a 303 506 6 -a 303 432 9 -a 303 135 2 -a 303 549 6 -a 303 854 4 -a 303 667 7 -a 303 261 5 -a 303 364 8 -a 303 34 3 -a 303 924 1 -a 303 289 8 -a 303 964 10 -a 303 728 5 -a 303 456 3 -a 303 331 10 -a 303 600 10 -a 303 212 5 -a 303 914 4 -a 303 997 8 -a 303 480 5 -a 303 383 1 -a 303 302 2 -a 303 852 3 -a 303 812 5 -a 303 703 10 -a 303 180 5 -a 303 814 2 -a 303 962 5 -a 303 810 1 -a 303 169 2 -a 303 564 2 -a 303 292 8 -a 303 600 6 -a 303 698 8 -a 303 840 2 -a 303 429 10 -a 303 341 8 -a 304 76 7 -a 304 792 7 -a 304 374 10 -a 304 999 10 -a 304 57 1 -a 304 313 9 -a 304 703 2 -a 304 512 3 -a 304 643 7 -a 304 278 10 -a 304 723 8 -a 304 533 2 -a 304 250 9 -a 304 178 4 -a 304 915 9 -a 304 552 9 -a 304 6 10 -a 304 703 8 -a 304 230 4 -a 304 185 3 -a 304 492 2 -a 304 168 5 -a 304 995 1 -a 304 660 10 -a 304 731 6 -a 304 262 2 -a 304 235 4 -a 304 404 6 -a 304 77 1 -a 304 664 8 -a 304 744 5 -a 304 152 9 -a 304 431 2 -a 304 94 5 -a 304 127 8 -a 304 487 5 -a 304 406 10 -a 304 829 2 -a 304 999 8 -a 304 25 3 -a 304 82 7 -a 304 697 8 -a 304 557 2 -a 304 332 8 -a 304 875 3 -a 304 447 10 -a 304 883 7 -a 304 880 2 -a 304 125 6 -a 304 88 2 -a 304 40 1 -a 304 616 7 -a 304 255 9 -a 304 10 1 -a 304 251 3 -a 304 985 10 -a 304 271 9 -a 304 486 8 -a 304 365 7 -a 304 347 2 -a 304 125 6 -a 304 84 6 -a 304 499 2 -a 304 555 7 -a 304 177 2 -a 304 625 6 -a 304 18 8 -a 304 583 9 -a 304 429 1 -a 304 607 10 -a 304 510 2 -a 304 688 10 -a 304 139 4 -a 304 841 7 -a 304 538 5 -a 304 585 5 -a 304 699 4 -a 304 393 1 -a 304 710 5 -a 304 787 6 -a 304 433 2 -a 304 301 10 -a 304 17 3 -a 304 442 9 -a 304 552 2 -a 304 713 10 -a 304 13 3 -a 304 342 9 -a 304 35 8 -a 304 137 6 -a 304 425 5 -a 304 533 2 -a 304 691 9 -a 304 602 2 -a 304 133 5 -a 304 708 3 -a 304 160 2 -a 304 561 5 -a 304 699 6 -a 305 766 1 -a 305 47 5 -a 305 363 3 -a 305 904 10 -a 305 887 10 -a 305 900 3 -a 305 464 7 -a 305 562 3 -a 305 269 4 -a 305 149 7 -a 305 324 8 -a 305 701 10 -a 305 450 8 -a 305 340 3 -a 305 118 7 -a 305 317 4 -a 305 830 3 -a 305 658 2 -a 305 865 8 -a 305 125 7 -a 305 59 5 -a 305 373 6 -a 305 815 1 -a 305 660 8 -a 305 506 7 -a 305 499 3 -a 305 819 4 -a 305 42 1 -a 305 173 1 -a 305 560 4 -a 305 88 8 -a 305 535 1 -a 305 439 8 -a 305 975 8 -a 305 411 8 -a 305 902 10 -a 305 512 3 -a 305 679 7 -a 305 27 2 -a 305 835 1 -a 305 355 2 -a 305 476 1 -a 305 150 3 -a 305 472 8 -a 305 452 5 -a 305 467 6 -a 305 278 9 -a 305 440 2 -a 305 100 3 -a 305 118 10 -a 305 564 4 -a 305 158 4 -a 305 490 4 -a 305 354 1 -a 305 817 1 -a 305 995 10 -a 305 852 4 -a 305 611 2 -a 305 13 10 -a 305 1 7 -a 305 146 7 -a 305 100 3 -a 305 535 10 -a 305 584 8 -a 305 50 3 -a 305 945 2 -a 305 462 6 -a 305 561 5 -a 305 599 5 -a 305 488 9 -a 305 371 7 -a 305 953 6 -a 305 963 4 -a 305 521 1 -a 305 401 5 -a 305 390 10 -a 305 987 5 -a 305 678 4 -a 305 829 6 -a 305 62 6 -a 305 795 1 -a 305 368 10 -a 305 220 8 -a 305 260 7 -a 305 721 4 -a 305 12 10 -a 305 231 4 -a 305 549 10 -a 305 623 4 -a 305 243 2 -a 305 549 7 -a 305 768 8 -a 305 342 8 -a 305 59 2 -a 305 328 8 -a 305 392 8 -a 305 789 6 -a 306 952 10 -a 306 578 3 -a 306 252 8 -a 306 299 9 -a 306 507 1 -a 306 190 5 -a 306 819 7 -a 306 907 10 -a 306 579 8 -a 306 781 8 -a 306 560 9 -a 306 383 9 -a 306 842 4 -a 306 330 9 -a 306 750 8 -a 306 37 2 -a 306 589 7 -a 306 446 1 -a 306 49 8 -a 306 819 3 -a 306 994 9 -a 306 671 9 -a 306 37 2 -a 306 518 5 -a 306 414 10 -a 306 379 5 -a 306 577 5 -a 306 741 3 -a 306 770 9 -a 306 556 6 -a 306 505 10 -a 306 697 5 -a 306 109 7 -a 306 756 1 -a 306 995 4 -a 306 615 6 -a 306 945 6 -a 306 789 5 -a 306 497 6 -a 306 499 8 -a 306 545 6 -a 306 32 4 -a 306 881 7 -a 306 363 9 -a 306 361 2 -a 306 606 6 -a 306 399 7 -a 306 950 4 -a 306 28 2 -a 306 447 10 -a 306 744 3 -a 306 93 2 -a 306 781 1 -a 306 515 5 -a 306 507 6 -a 306 135 4 -a 306 67 8 -a 306 223 1 -a 306 904 4 -a 306 622 10 -a 306 728 1 -a 306 576 7 -a 306 730 6 -a 306 459 9 -a 306 547 8 -a 306 321 10 -a 306 380 2 -a 306 311 7 -a 306 817 7 -a 306 878 10 -a 306 856 1 -a 306 849 8 -a 306 735 1 -a 306 194 8 -a 306 185 4 -a 306 316 5 -a 306 592 5 -a 306 110 4 -a 306 343 2 -a 306 15 10 -a 306 854 7 -a 306 340 5 -a 306 107 3 -a 306 610 10 -a 307 854 10 -a 307 613 4 -a 307 744 6 -a 307 920 1 -a 307 836 6 -a 307 623 3 -a 307 517 6 -a 307 539 6 -a 307 174 8 -a 307 222 3 -a 307 997 1 -a 307 720 7 -a 307 542 4 -a 307 352 5 -a 307 7 6 -a 307 335 4 -a 307 206 1 -a 307 862 7 -a 307 159 7 -a 307 940 10 -a 307 31 8 -a 307 343 2 -a 307 231 6 -a 307 622 4 -a 307 453 5 -a 307 574 2 -a 307 636 2 -a 307 282 3 -a 307 913 7 -a 307 743 2 -a 307 891 5 -a 307 742 3 -a 307 331 5 -a 307 610 4 -a 307 637 3 -a 307 142 10 -a 307 208 1 -a 307 129 6 -a 307 680 5 -a 307 381 7 -a 307 350 5 -a 307 653 6 -a 307 77 3 -a 307 892 10 -a 307 83 2 -a 307 202 4 -a 307 185 4 -a 307 944 1 -a 307 360 2 -a 307 100 6 -a 307 974 5 -a 307 702 4 -a 307 331 10 -a 307 571 5 -a 307 130 7 -a 307 904 4 -a 307 183 1 -a 307 411 10 -a 307 792 1 -a 307 925 6 -a 307 277 7 -a 307 509 6 -a 307 231 9 -a 307 886 9 -a 307 121 9 -a 307 373 2 -a 307 69 6 -a 307 249 7 -a 308 28 6 -a 308 450 7 -a 308 598 4 -a 308 680 10 -a 308 526 9 -a 308 465 8 -a 308 660 1 -a 308 608 8 -a 308 666 10 -a 308 844 8 -a 308 527 9 -a 308 1 2 -a 308 944 4 -a 308 476 10 -a 308 703 9 -a 308 250 6 -a 308 22 2 -a 308 832 7 -a 308 129 8 -a 308 204 7 -a 308 219 2 -a 308 920 2 -a 308 104 7 -a 308 495 8 -a 308 404 7 -a 308 335 1 -a 308 357 7 -a 308 524 8 -a 308 707 7 -a 308 425 10 -a 308 772 1 -a 308 734 8 -a 308 874 3 -a 308 345 6 -a 308 390 2 -a 308 375 2 -a 308 810 7 -a 308 25 9 -a 308 982 6 -a 308 451 8 -a 308 868 10 -a 308 484 3 -a 308 452 7 -a 308 787 1 -a 308 959 10 -a 308 130 4 -a 308 12 5 -a 308 981 3 -a 308 961 9 -a 308 140 7 -a 308 160 8 -a 308 155 7 -a 308 35 2 -a 308 264 6 -a 308 650 9 -a 308 438 7 -a 308 598 7 -a 308 961 5 -a 308 280 5 -a 308 406 6 -a 308 708 6 -a 308 256 3 -a 308 29 8 -a 308 378 3 -a 308 630 7 -a 308 838 10 -a 308 402 9 -a 308 588 7 -a 308 264 3 -a 308 246 4 -a 308 47 2 -a 308 715 1 -a 308 8 6 -a 308 844 5 -a 308 20 7 -a 308 962 6 -a 308 781 8 -a 308 159 4 -a 308 97 1 -a 308 935 8 -a 308 194 3 -a 308 360 7 -a 308 560 5 -a 308 631 2 -a 308 957 10 -a 308 541 5 -a 308 568 1 -a 308 212 6 -a 308 947 7 -a 308 251 9 -a 308 201 9 -a 308 178 10 -a 308 279 10 -a 308 578 9 -a 308 807 9 -a 308 92 5 -a 308 980 3 -a 308 370 8 -a 308 356 2 -a 308 201 3 -a 308 417 2 -a 308 46 4 -a 309 208 7 -a 309 398 6 -a 309 890 9 -a 309 227 3 -a 309 335 10 -a 309 646 9 -a 309 386 8 -a 309 431 6 -a 309 556 9 -a 309 579 10 -a 309 791 7 -a 309 92 8 -a 309 185 2 -a 309 723 5 -a 309 632 5 -a 309 752 8 -a 309 935 6 -a 309 554 7 -a 309 111 5 -a 309 731 1 -a 309 257 6 -a 309 688 2 -a 309 514 3 -a 309 349 8 -a 309 643 6 -a 309 883 2 -a 309 704 4 -a 309 843 3 -a 309 275 7 -a 309 749 9 -a 309 27 2 -a 309 672 7 -a 309 614 7 -a 309 253 2 -a 309 235 1 -a 309 638 8 -a 309 413 7 -a 309 791 3 -a 309 192 3 -a 309 179 2 -a 309 882 3 -a 309 377 8 -a 309 901 3 -a 309 489 6 -a 309 104 8 -a 309 811 7 -a 309 19 2 -a 309 82 1 -a 309 921 5 -a 309 749 4 -a 309 339 2 -a 309 585 5 -a 309 238 8 -a 309 687 4 -a 309 203 7 -a 309 97 1 -a 309 366 1 -a 309 22 7 -a 309 371 9 -a 309 90 7 -a 309 48 4 -a 309 19 5 -a 309 704 4 -a 309 300 7 -a 309 938 7 -a 309 938 5 -a 309 412 9 -a 309 704 7 -a 309 105 5 -a 309 590 8 -a 309 561 5 -a 309 481 3 -a 309 467 5 -a 309 26 8 -a 309 585 4 -a 309 253 2 -a 309 44 5 -a 309 666 1 -a 309 150 6 -a 309 792 7 -a 309 734 1 -a 309 6 10 -a 309 666 2 -a 309 936 4 -a 309 102 8 -a 309 7 8 -a 309 957 9 -a 309 472 5 -a 309 97 6 -a 310 490 1 -a 310 800 10 -a 310 280 9 -a 310 490 6 -a 310 713 1 -a 310 193 2 -a 310 901 8 -a 310 393 6 -a 310 297 8 -a 310 467 7 -a 310 953 8 -a 310 778 8 -a 310 933 7 -a 310 978 9 -a 310 338 7 -a 310 161 3 -a 310 310 4 -a 310 789 1 -a 310 983 4 -a 310 19 5 -a 310 794 8 -a 310 624 7 -a 310 955 8 -a 310 895 1 -a 310 631 4 -a 310 887 8 -a 310 342 3 -a 310 727 2 -a 310 867 7 -a 310 832 5 -a 310 502 5 -a 310 122 6 -a 310 297 7 -a 310 190 5 -a 310 314 9 -a 310 173 9 -a 310 582 9 -a 310 610 9 -a 310 639 5 -a 310 511 10 -a 310 363 9 -a 310 547 5 -a 310 464 3 -a 310 700 5 -a 310 708 2 -a 310 461 7 -a 310 679 7 -a 310 225 5 -a 310 637 10 -a 310 12 5 -a 310 236 1 -a 310 966 10 -a 310 888 5 -a 310 866 3 -a 310 828 2 -a 310 205 9 -a 310 568 7 -a 310 670 1 -a 310 12 7 -a 310 45 6 -a 310 791 7 -a 310 308 4 -a 310 235 1 -a 310 80 5 -a 310 481 8 -a 310 816 5 -a 310 690 3 -a 310 95 9 -a 310 302 10 -a 310 28 5 -a 310 642 10 -a 310 766 6 -a 310 728 8 -a 310 325 8 -a 310 202 9 -a 310 382 5 -a 310 317 8 -a 310 426 8 -a 310 328 8 -a 310 419 7 -a 310 229 2 -a 310 269 10 -a 310 282 7 -a 310 71 2 -a 310 73 4 -a 310 486 6 -a 310 638 4 -a 310 742 8 -a 310 498 10 -a 310 683 7 -a 310 509 6 -a 310 805 8 -a 310 917 5 -a 310 588 4 -a 310 261 6 -a 310 708 3 -a 310 253 3 -a 310 356 7 -a 310 281 2 -a 310 997 6 -a 310 751 4 -a 310 297 4 -a 310 952 2 -a 310 365 10 -a 310 613 4 -a 311 353 3 -a 311 358 4 -a 311 941 8 -a 311 771 3 -a 311 586 1 -a 311 185 1 -a 311 28 8 -a 311 656 8 -a 311 257 5 -a 311 513 1 -a 311 270 6 -a 311 999 8 -a 311 952 10 -a 311 483 7 -a 311 791 5 -a 311 844 8 -a 311 46 10 -a 311 27 10 -a 311 527 8 -a 311 299 10 -a 311 382 8 -a 311 512 2 -a 311 579 6 -a 311 354 2 -a 311 238 7 -a 311 562 5 -a 311 650 9 -a 311 165 6 -a 311 926 5 -a 311 239 5 -a 311 517 3 -a 311 259 4 -a 311 155 3 -a 311 263 7 -a 311 844 7 -a 311 339 7 -a 311 290 4 -a 311 476 10 -a 311 596 1 -a 311 803 7 -a 311 745 2 -a 311 570 7 -a 311 788 10 -a 311 672 2 -a 311 28 10 -a 311 554 3 -a 311 491 6 -a 311 73 5 -a 311 581 10 -a 311 371 8 -a 311 962 10 -a 311 505 9 -a 311 949 5 -a 311 292 8 -a 311 742 6 -a 311 486 6 -a 311 941 6 -a 311 907 7 -a 311 387 2 -a 311 155 7 -a 311 399 3 -a 311 645 1 -a 311 309 4 -a 311 662 8 -a 311 465 6 -a 311 648 4 -a 311 951 4 -a 311 940 8 -a 311 219 8 -a 311 729 7 -a 311 660 3 -a 311 788 5 -a 311 493 6 -a 311 307 9 -a 311 815 10 -a 311 22 4 -a 311 797 1 -a 311 887 10 -a 311 602 3 -a 311 789 10 -a 311 234 1 -a 311 540 7 -a 311 269 4 -a 311 158 3 -a 311 831 2 -a 311 644 3 -a 311 747 3 -a 311 893 10 -a 311 6 10 -a 311 902 6 -a 311 267 3 -a 311 651 8 -a 311 186 10 -a 311 928 7 -a 311 91 8 -a 311 833 6 -a 311 855 1 -a 311 6 3 -a 311 27 7 -a 311 559 1 -a 312 665 5 -a 312 814 3 -a 312 27 7 -a 312 971 5 -a 312 604 2 -a 312 49 5 -a 312 743 5 -a 312 467 4 -a 312 650 2 -a 312 507 10 -a 312 700 9 -a 312 165 7 -a 312 776 8 -a 312 857 1 -a 312 995 5 -a 312 762 8 -a 312 476 10 -a 312 718 5 -a 312 630 8 -a 312 482 10 -a 312 595 10 -a 312 896 10 -a 312 108 8 -a 312 780 9 -a 312 800 4 -a 312 198 4 -a 312 589 2 -a 312 630 10 -a 312 203 8 -a 312 615 5 -a 312 164 10 -a 312 867 10 -a 312 405 2 -a 312 191 3 -a 312 813 2 -a 312 239 8 -a 312 531 10 -a 312 450 1 -a 312 888 9 -a 312 13 8 -a 312 125 6 -a 312 29 6 -a 312 788 6 -a 312 982 4 -a 312 525 8 -a 312 433 4 -a 312 716 3 -a 312 130 8 -a 312 914 6 -a 312 286 7 -a 312 2 7 -a 312 42 1 -a 312 801 3 -a 312 194 10 -a 312 630 3 -a 312 406 6 -a 312 396 3 -a 312 220 3 -a 312 569 2 -a 312 238 6 -a 312 624 5 -a 312 759 2 -a 312 26 9 -a 312 608 7 -a 312 997 8 -a 312 556 10 -a 312 33 7 -a 312 861 9 -a 312 569 6 -a 312 158 2 -a 312 889 4 -a 312 332 3 -a 312 115 4 -a 312 887 9 -a 312 857 6 -a 312 547 3 -a 312 579 8 -a 312 986 1 -a 312 437 4 -a 312 864 3 -a 312 987 2 -a 312 433 3 -a 312 905 1 -a 312 763 6 -a 312 627 4 -a 312 510 9 -a 312 144 2 -a 312 730 10 -a 312 713 8 -a 312 236 9 -a 312 329 6 -a 312 447 7 -a 312 261 3 -a 313 936 8 -a 313 420 3 -a 313 817 10 -a 313 969 9 -a 313 256 7 -a 313 361 7 -a 313 102 10 -a 313 120 8 -a 313 692 6 -a 313 216 8 -a 313 524 8 -a 313 762 4 -a 313 560 10 -a 313 486 8 -a 313 174 3 -a 313 400 1 -a 313 448 4 -a 313 607 5 -a 313 280 10 -a 313 187 4 -a 313 209 2 -a 313 790 1 -a 313 330 5 -a 313 206 8 -a 313 495 3 -a 313 18 5 -a 313 441 10 -a 313 823 10 -a 313 465 2 -a 313 702 7 -a 313 735 9 -a 313 884 7 -a 313 494 6 -a 313 679 4 -a 313 115 8 -a 313 854 6 -a 313 780 4 -a 313 234 10 -a 313 521 6 -a 313 995 8 -a 313 215 10 -a 313 21 7 -a 313 732 3 -a 313 775 9 -a 313 506 7 -a 313 906 2 -a 313 150 6 -a 313 953 8 -a 313 488 9 -a 313 429 2 -a 313 115 10 -a 313 696 10 -a 313 194 9 -a 313 445 2 -a 313 901 4 -a 313 688 4 -a 313 462 2 -a 313 318 1 -a 313 487 9 -a 313 926 4 -a 313 197 2 -a 313 785 7 -a 313 488 6 -a 313 875 8 -a 313 899 4 -a 313 317 1 -a 313 630 6 -a 313 108 7 -a 313 837 5 -a 313 600 4 -a 313 323 4 -a 313 857 7 -a 313 307 7 -a 313 73 7 -a 313 338 5 -a 313 188 8 -a 313 222 5 -a 313 267 9 -a 313 675 3 -a 313 650 5 -a 313 381 4 -a 313 346 3 -a 313 844 1 -a 313 825 2 -a 313 223 8 -a 313 507 8 -a 313 263 5 -a 313 540 5 -a 313 993 8 -a 313 164 5 -a 313 534 4 -a 313 165 3 -a 313 949 10 -a 313 15 9 -a 313 823 6 -a 313 313 4 -a 313 644 3 -a 313 931 10 -a 313 125 7 -a 314 219 9 -a 314 229 3 -a 314 982 3 -a 314 526 7 -a 314 301 10 -a 314 295 1 -a 314 713 4 -a 314 522 3 -a 314 561 5 -a 314 364 8 -a 314 147 4 -a 314 942 10 -a 314 709 8 -a 314 990 2 -a 314 742 4 -a 314 931 2 -a 314 473 7 -a 314 446 2 -a 314 441 6 -a 314 144 4 -a 314 979 4 -a 314 606 8 -a 314 68 4 -a 314 975 4 -a 314 620 10 -a 314 890 4 -a 314 263 3 -a 314 240 9 -a 314 796 3 -a 314 388 9 -a 314 458 3 -a 314 345 6 -a 314 983 6 -a 314 300 7 -a 314 639 10 -a 314 672 2 -a 314 821 5 -a 314 176 1 -a 314 11 6 -a 314 968 2 -a 314 93 9 -a 314 719 8 -a 314 933 6 -a 314 834 2 -a 314 626 10 -a 314 381 1 -a 314 814 10 -a 314 47 7 -a 314 822 4 -a 314 957 5 -a 314 2 2 -a 314 403 4 -a 314 976 2 -a 314 889 10 -a 314 215 6 -a 314 237 9 -a 314 661 6 -a 314 602 10 -a 314 695 3 -a 314 660 3 -a 314 946 2 -a 314 653 10 -a 314 960 1 -a 314 560 1 -a 314 300 2 -a 314 756 5 -a 314 735 1 -a 314 310 5 -a 314 699 9 -a 314 827 3 -a 314 5 3 -a 314 608 6 -a 314 637 6 -a 314 630 7 -a 314 988 4 -a 314 426 4 -a 314 676 3 -a 314 785 9 -a 314 358 6 -a 314 677 7 -a 314 163 9 -a 314 357 1 -a 314 629 6 -a 314 161 6 -a 314 221 10 -a 314 843 2 -a 314 397 2 -a 314 881 5 -a 314 420 3 -a 314 67 5 -a 314 517 7 -a 314 341 9 -a 314 720 7 -a 314 452 10 -a 314 900 8 -a 314 183 4 -a 314 611 3 -a 314 305 4 -a 314 882 1 -a 314 413 6 -a 314 309 1 -a 314 465 5 -a 314 25 7 -a 314 938 1 -a 314 428 9 -a 314 450 3 -a 314 589 8 -a 314 189 2 -a 314 807 3 -a 314 242 10 -a 314 351 2 -a 314 139 4 -a 314 870 5 -a 315 511 6 -a 315 360 3 -a 315 688 9 -a 315 908 6 -a 315 216 4 -a 315 83 2 -a 315 974 5 -a 315 732 2 -a 315 423 3 -a 315 669 2 -a 315 159 2 -a 315 298 4 -a 315 664 4 -a 315 342 8 -a 315 908 10 -a 315 968 9 -a 315 199 9 -a 315 297 10 -a 315 252 2 -a 315 663 10 -a 315 321 6 -a 315 165 6 -a 315 66 2 -a 315 771 8 -a 315 753 1 -a 315 254 1 -a 315 553 4 -a 315 994 1 -a 315 605 2 -a 315 692 2 -a 315 839 2 -a 315 91 6 -a 315 27 5 -a 315 502 8 -a 315 998 7 -a 315 242 8 -a 315 584 10 -a 315 948 4 -a 315 974 5 -a 315 592 5 -a 315 108 7 -a 315 280 2 -a 315 231 5 -a 315 449 4 -a 315 163 2 -a 315 174 4 -a 315 647 2 -a 315 459 7 -a 315 425 1 -a 315 285 1 -a 315 780 6 -a 315 589 2 -a 315 351 2 -a 315 526 7 -a 315 318 7 -a 315 604 6 -a 315 54 4 -a 315 287 7 -a 315 184 4 -a 315 745 2 -a 315 102 10 -a 315 275 9 -a 315 771 7 -a 315 603 9 -a 315 248 6 -a 315 163 4 -a 315 171 1 -a 315 962 7 -a 315 144 3 -a 315 763 2 -a 315 45 2 -a 315 423 9 -a 315 993 1 -a 315 494 8 -a 315 586 4 -a 315 143 2 -a 315 116 6 -a 315 20 2 -a 315 567 3 -a 315 401 10 -a 315 799 7 -a 315 132 9 -a 315 751 2 -a 315 300 3 -a 315 449 2 -a 315 330 6 -a 315 354 9 -a 315 735 3 -a 315 514 4 -a 315 74 10 -a 315 836 8 -a 316 788 4 -a 316 845 6 -a 316 415 6 -a 316 11 7 -a 316 833 6 -a 316 577 7 -a 316 182 8 -a 316 770 4 -a 316 720 3 -a 316 944 8 -a 316 814 2 -a 316 119 6 -a 316 912 6 -a 316 283 5 -a 316 704 4 -a 316 30 7 -a 316 399 3 -a 316 723 10 -a 316 597 1 -a 316 799 2 -a 316 498 9 -a 316 728 5 -a 316 525 3 -a 316 797 2 -a 316 152 1 -a 316 854 5 -a 316 126 1 -a 316 886 10 -a 316 343 6 -a 316 200 6 -a 316 698 2 -a 316 106 8 -a 316 20 5 -a 316 88 3 -a 316 117 10 -a 316 852 2 -a 316 664 2 -a 316 298 8 -a 316 597 7 -a 316 359 8 -a 316 217 2 -a 316 386 6 -a 316 477 6 -a 316 104 8 -a 316 669 1 -a 316 156 1 -a 316 134 8 -a 316 43 5 -a 316 879 2 -a 316 730 7 -a 316 841 5 -a 316 352 10 -a 316 433 1 -a 316 341 9 -a 316 124 7 -a 316 584 2 -a 316 170 10 -a 316 250 4 -a 316 445 1 -a 316 513 4 -a 316 449 4 -a 316 118 8 -a 316 618 5 -a 316 468 9 -a 316 205 7 -a 316 734 10 -a 316 295 7 -a 316 868 10 -a 316 7 7 -a 316 891 9 -a 316 203 10 -a 316 223 5 -a 316 252 3 -a 316 679 2 -a 316 327 2 -a 316 920 4 -a 316 835 6 -a 316 460 3 -a 316 962 10 -a 316 689 1 -a 316 165 4 -a 316 778 5 -a 316 16 1 -a 316 597 10 -a 316 94 2 -a 316 139 3 -a 316 156 3 -a 316 264 5 -a 316 388 8 -a 316 600 9 -a 316 776 9 -a 316 836 6 -a 316 718 10 -a 316 369 1 -a 316 279 10 -a 316 922 4 -a 316 79 8 -a 316 573 4 -a 316 766 2 -a 316 85 2 -a 316 439 4 -a 316 968 9 -a 316 308 10 -a 316 691 10 -a 316 622 4 -a 316 634 2 -a 316 586 6 -a 316 432 9 -a 316 69 9 -a 316 524 5 -a 316 96 4 -a 316 233 8 -a 317 277 6 -a 317 111 8 -a 317 829 7 -a 317 371 9 -a 317 250 2 -a 317 984 4 -a 317 634 5 -a 317 637 3 -a 317 559 7 -a 317 385 10 -a 317 449 10 -a 317 252 2 -a 317 753 5 -a 317 727 2 -a 317 150 8 -a 317 831 9 -a 317 276 5 -a 317 915 4 -a 317 916 5 -a 317 714 4 -a 317 858 9 -a 317 199 9 -a 317 380 10 -a 317 455 6 -a 317 832 3 -a 317 966 3 -a 317 887 3 -a 317 900 9 -a 317 465 1 -a 317 982 2 -a 317 108 6 -a 317 741 7 -a 317 69 10 -a 317 936 3 -a 317 87 6 -a 317 318 5 -a 317 895 4 -a 317 720 2 -a 317 954 1 -a 317 429 2 -a 317 80 1 -a 317 378 1 -a 317 681 2 -a 317 833 8 -a 317 81 1 -a 317 830 9 -a 317 639 10 -a 317 356 9 -a 317 720 9 -a 317 530 5 -a 317 45 8 -a 317 553 4 -a 317 728 5 -a 317 425 7 -a 317 535 3 -a 317 366 3 -a 317 869 1 -a 317 410 3 -a 317 830 5 -a 317 827 2 -a 317 517 4 -a 317 546 5 -a 317 895 4 -a 317 428 2 -a 317 633 1 -a 317 188 9 -a 317 298 2 -a 317 328 7 -a 317 117 3 -a 317 727 10 -a 317 408 7 -a 317 495 9 -a 317 383 10 -a 317 216 7 -a 317 575 6 -a 317 188 4 -a 317 854 9 -a 317 930 5 -a 317 907 6 -a 317 360 9 -a 317 974 7 -a 317 435 10 -a 317 63 10 -a 317 374 10 -a 317 417 10 -a 317 598 10 -a 317 739 8 -a 317 262 2 -a 317 544 10 -a 317 64 5 -a 317 500 1 -a 317 66 6 -a 317 958 2 -a 317 927 7 -a 317 698 2 -a 318 121 10 -a 318 201 1 -a 318 1 7 -a 318 237 7 -a 318 927 2 -a 318 408 10 -a 318 731 6 -a 318 285 7 -a 318 623 9 -a 318 281 1 -a 318 472 5 -a 318 453 6 -a 318 186 10 -a 318 354 1 -a 318 812 5 -a 318 136 3 -a 318 788 5 -a 318 874 2 -a 318 509 10 -a 318 180 3 -a 318 447 3 -a 318 224 3 -a 318 441 8 -a 318 430 3 -a 318 767 9 -a 318 504 9 -a 318 929 7 -a 318 832 10 -a 318 437 9 -a 318 831 2 -a 318 505 8 -a 318 557 6 -a 318 7 9 -a 318 506 7 -a 318 794 7 -a 318 933 6 -a 318 913 3 -a 318 500 7 -a 318 193 4 -a 318 512 9 -a 318 781 5 -a 318 664 2 -a 318 964 6 -a 318 966 7 -a 318 751 10 -a 318 77 2 -a 318 780 3 -a 318 600 9 -a 318 586 4 -a 318 960 7 -a 318 23 2 -a 318 809 5 -a 318 376 4 -a 318 452 2 -a 318 551 1 -a 318 880 3 -a 318 356 10 -a 318 359 1 -a 318 292 1 -a 318 162 2 -a 318 863 7 -a 318 849 5 -a 318 169 4 -a 318 344 7 -a 318 618 2 -a 318 77 7 -a 318 233 1 -a 318 93 2 -a 318 270 10 -a 318 744 4 -a 318 873 5 -a 318 933 3 -a 318 683 5 -a 318 815 9 -a 318 926 6 -a 318 409 7 -a 318 891 2 -a 318 681 6 -a 318 452 3 -a 318 616 1 -a 318 6 8 -a 318 236 6 -a 318 992 1 -a 318 457 1 -a 318 787 5 -a 318 847 9 -a 319 812 7 -a 319 121 8 -a 319 114 1 -a 319 974 10 -a 319 983 1 -a 319 962 7 -a 319 118 10 -a 319 303 2 -a 319 555 4 -a 319 194 10 -a 319 535 3 -a 319 648 9 -a 319 463 7 -a 319 254 5 -a 319 496 5 -a 319 372 4 -a 319 936 5 -a 319 286 5 -a 319 273 7 -a 319 320 5 -a 319 153 5 -a 319 953 1 -a 319 303 5 -a 319 604 9 -a 319 545 10 -a 319 309 3 -a 319 840 1 -a 319 512 1 -a 319 765 8 -a 319 602 8 -a 319 334 1 -a 319 553 6 -a 319 722 9 -a 319 447 4 -a 319 502 5 -a 319 680 1 -a 319 385 8 -a 319 619 4 -a 319 982 7 -a 319 939 9 -a 319 812 5 -a 319 492 6 -a 319 562 6 -a 319 251 2 -a 319 745 5 -a 319 34 7 -a 319 622 9 -a 319 656 7 -a 319 319 7 -a 319 894 10 -a 319 975 10 -a 319 471 6 -a 319 822 1 -a 319 254 10 -a 319 51 6 -a 319 342 8 -a 319 562 5 -a 319 890 5 -a 319 853 9 -a 319 302 10 -a 319 467 2 -a 319 162 9 -a 319 854 7 -a 319 164 10 -a 319 609 9 -a 319 331 10 -a 319 843 1 -a 319 993 6 -a 319 949 9 -a 319 801 8 -a 319 907 5 -a 319 737 9 -a 319 268 1 -a 319 445 10 -a 319 987 1 -a 319 478 2 -a 319 584 7 -a 319 644 8 -a 319 796 3 -a 319 453 4 -a 319 595 9 -a 319 243 10 -a 319 250 3 -a 319 848 10 -a 319 293 3 -a 319 592 3 -a 319 385 2 -a 319 158 2 -a 319 420 7 -a 319 686 8 -a 319 624 6 -a 319 582 6 -a 319 516 10 -a 319 787 9 -a 319 166 6 -a 319 846 3 -a 319 605 9 -a 319 134 3 -a 319 771 1 -a 319 381 7 -a 319 16 4 -a 319 483 7 -a 319 649 6 -a 319 460 10 -a 320 445 9 -a 320 637 7 -a 320 937 2 -a 320 4 9 -a 320 256 10 -a 320 709 4 -a 320 456 4 -a 320 850 5 -a 320 951 1 -a 320 705 4 -a 320 673 6 -a 320 219 10 -a 320 272 9 -a 320 33 2 -a 320 376 2 -a 320 692 10 -a 320 719 1 -a 320 999 2 -a 320 249 4 -a 320 210 8 -a 320 761 9 -a 320 414 1 -a 320 31 10 -a 320 341 6 -a 320 547 10 -a 320 801 5 -a 320 722 8 -a 320 562 2 -a 320 259 1 -a 320 346 3 -a 320 703 3 -a 320 982 6 -a 320 934 8 -a 320 706 4 -a 320 213 7 -a 320 618 6 -a 320 137 8 -a 320 39 9 -a 320 544 8 -a 320 842 4 -a 320 711 9 -a 320 762 3 -a 320 89 1 -a 320 744 4 -a 320 113 2 -a 320 780 4 -a 320 438 8 -a 320 87 10 -a 320 4 6 -a 320 647 8 -a 320 847 4 -a 320 417 3 -a 320 677 10 -a 320 164 7 -a 320 963 6 -a 320 454 9 -a 320 885 2 -a 320 501 2 -a 320 712 2 -a 320 206 5 -a 320 498 7 -a 320 391 6 -a 320 163 3 -a 320 407 9 -a 320 72 3 -a 320 375 2 -a 320 1 5 -a 320 209 9 -a 320 413 2 -a 320 544 7 -a 320 26 9 -a 320 100 5 -a 320 282 7 -a 320 114 4 -a 320 843 3 -a 320 394 10 -a 320 894 8 -a 320 256 9 -a 320 481 2 -a 320 897 8 -a 320 902 10 -a 320 303 4 -a 320 290 6 -a 320 554 1 -a 320 466 4 -a 320 228 9 -a 320 326 1 -a 320 728 6 -a 320 695 7 -a 320 531 5 -a 321 201 10 -a 321 61 4 -a 321 693 3 -a 321 608 2 -a 321 132 5 -a 321 44 10 -a 321 608 5 -a 321 340 10 -a 321 456 5 -a 321 127 6 -a 321 365 9 -a 321 555 8 -a 321 408 4 -a 321 479 9 -a 321 373 4 -a 321 802 5 -a 321 348 5 -a 321 628 1 -a 321 258 3 -a 321 220 4 -a 321 505 5 -a 321 560 9 -a 321 509 10 -a 321 35 3 -a 321 2 4 -a 321 737 7 -a 321 17 7 -a 321 327 9 -a 321 440 2 -a 321 711 8 -a 321 858 7 -a 321 641 3 -a 321 771 9 -a 321 526 9 -a 321 224 7 -a 321 903 7 -a 321 569 10 -a 321 831 9 -a 321 218 10 -a 321 1 7 -a 321 957 7 -a 321 583 6 -a 321 555 2 -a 321 341 6 -a 321 37 1 -a 321 928 3 -a 321 118 2 -a 321 384 5 -a 321 531 9 -a 321 375 8 -a 321 603 7 -a 321 12 10 -a 321 934 4 -a 321 88 9 -a 321 46 4 -a 321 935 5 -a 321 824 4 -a 321 62 2 -a 321 238 2 -a 321 239 2 -a 321 773 1 -a 321 71 3 -a 321 879 7 -a 321 519 4 -a 321 596 9 -a 321 78 8 -a 321 397 1 -a 321 141 8 -a 321 908 4 -a 321 615 7 -a 321 141 1 -a 321 841 8 -a 321 173 4 -a 321 695 9 -a 321 157 6 -a 321 209 1 -a 321 598 8 -a 321 274 5 -a 321 592 9 -a 321 105 2 -a 321 648 9 -a 321 170 4 -a 321 116 5 -a 321 557 3 -a 321 257 7 -a 321 161 3 -a 321 468 2 -a 321 56 10 -a 321 222 2 -a 321 705 2 -a 321 295 10 -a 321 994 7 -a 321 775 10 -a 321 149 6 -a 321 489 7 -a 322 346 4 -a 322 227 1 -a 322 885 5 -a 322 486 10 -a 322 110 9 -a 322 475 9 -a 322 626 4 -a 322 950 5 -a 322 647 8 -a 322 297 10 -a 322 82 10 -a 322 855 6 -a 322 894 6 -a 322 355 1 -a 322 422 2 -a 322 998 5 -a 322 592 7 -a 322 89 10 -a 322 535 6 -a 322 848 9 -a 322 249 5 -a 322 904 8 -a 322 471 3 -a 322 682 2 -a 322 174 6 -a 322 440 1 -a 322 432 10 -a 322 322 10 -a 322 928 4 -a 322 777 1 -a 322 548 2 -a 322 789 4 -a 322 239 6 -a 322 658 3 -a 322 239 10 -a 322 864 3 -a 322 583 9 -a 322 886 5 -a 322 136 3 -a 322 665 2 -a 322 716 8 -a 322 6 10 -a 322 114 10 -a 322 997 9 -a 322 705 9 -a 322 68 9 -a 322 507 3 -a 322 528 10 -a 322 316 7 -a 322 484 8 -a 322 407 10 -a 322 786 5 -a 322 141 4 -a 322 580 4 -a 322 202 2 -a 322 572 1 -a 322 902 8 -a 322 105 4 -a 322 324 5 -a 322 425 5 -a 322 893 5 -a 322 562 1 -a 322 58 1 -a 322 108 10 -a 322 402 9 -a 322 641 2 -a 322 993 10 -a 322 537 5 -a 322 281 2 -a 322 684 4 -a 322 542 8 -a 322 275 7 -a 322 797 8 -a 322 521 3 -a 322 247 2 -a 322 477 4 -a 322 588 2 -a 322 753 3 -a 322 903 7 -a 322 212 7 -a 322 387 4 -a 322 665 7 -a 322 352 3 -a 322 967 1 -a 322 866 7 -a 322 923 2 -a 322 844 1 -a 322 970 1 -a 322 223 5 -a 322 244 2 -a 322 839 5 -a 322 784 2 -a 322 302 3 -a 322 946 9 -a 322 161 2 -a 322 942 4 -a 322 914 4 -a 322 698 5 -a 322 198 5 -a 322 573 6 -a 322 215 3 -a 322 472 5 -a 322 346 6 -a 322 735 3 -a 322 719 8 -a 322 822 3 -a 322 298 5 -a 322 447 2 -a 322 802 4 -a 322 177 4 -a 322 659 4 -a 322 165 4 -a 322 841 2 -a 322 107 8 -a 322 682 6 -a 323 909 10 -a 323 950 8 -a 323 627 2 -a 323 107 5 -a 323 169 10 -a 323 441 10 -a 323 890 1 -a 323 470 6 -a 323 362 7 -a 323 27 8 -a 323 387 10 -a 323 251 3 -a 323 724 1 -a 323 584 7 -a 323 824 9 -a 323 938 2 -a 323 32 5 -a 323 145 7 -a 323 649 7 -a 323 750 9 -a 323 966 8 -a 323 946 10 -a 323 172 6 -a 323 744 7 -a 323 98 4 -a 323 830 6 -a 323 908 1 -a 323 938 3 -a 323 816 10 -a 323 595 9 -a 323 700 8 -a 323 939 7 -a 323 198 8 -a 323 806 5 -a 323 83 9 -a 323 638 2 -a 323 671 4 -a 323 553 9 -a 323 1000 2 -a 323 697 1 -a 323 939 3 -a 323 226 6 -a 323 396 8 -a 323 499 3 -a 323 25 9 -a 323 310 9 -a 323 530 9 -a 323 169 5 -a 323 958 2 -a 323 255 1 -a 323 111 10 -a 323 879 3 -a 323 426 1 -a 323 854 10 -a 323 977 3 -a 323 232 3 -a 323 737 4 -a 323 890 3 -a 323 23 1 -a 323 726 4 -a 323 461 9 -a 323 722 5 -a 323 640 7 -a 323 658 4 -a 323 503 9 -a 323 722 5 -a 323 271 8 -a 323 149 10 -a 323 250 3 -a 323 246 10 -a 323 846 7 -a 323 165 5 -a 323 472 8 -a 323 217 7 -a 323 663 10 -a 323 496 6 -a 323 526 8 -a 323 168 1 -a 323 665 9 -a 323 459 4 -a 323 422 1 -a 323 775 7 -a 323 314 4 -a 323 847 6 -a 323 604 8 -a 323 266 8 -a 323 54 1 -a 323 316 3 -a 323 131 8 -a 323 76 10 -a 324 17 10 -a 324 591 1 -a 324 797 9 -a 324 656 7 -a 324 224 9 -a 324 275 6 -a 324 353 2 -a 324 495 5 -a 324 424 9 -a 324 603 5 -a 324 740 10 -a 324 245 4 -a 324 767 4 -a 324 187 9 -a 324 461 2 -a 324 405 3 -a 324 683 10 -a 324 987 6 -a 324 572 10 -a 324 323 1 -a 324 421 1 -a 324 993 2 -a 324 73 10 -a 324 734 10 -a 324 815 2 -a 324 676 9 -a 324 999 3 -a 324 869 4 -a 324 991 1 -a 324 106 4 -a 324 944 7 -a 324 696 1 -a 324 717 3 -a 324 638 8 -a 324 920 3 -a 324 991 1 -a 324 990 1 -a 324 390 5 -a 324 390 2 -a 324 568 6 -a 324 105 3 -a 324 634 1 -a 324 310 1 -a 324 292 10 -a 324 71 9 -a 324 714 6 -a 324 974 5 -a 324 33 3 -a 324 261 7 -a 324 272 7 -a 324 453 9 -a 324 229 7 -a 324 344 10 -a 324 163 5 -a 324 20 5 -a 324 137 8 -a 324 888 8 -a 324 985 8 -a 324 242 10 -a 324 807 6 -a 324 967 8 -a 324 938 4 -a 324 499 1 -a 324 580 1 -a 324 833 2 -a 324 466 8 -a 324 545 6 -a 324 198 10 -a 324 855 5 -a 324 89 9 -a 324 302 7 -a 324 465 9 -a 324 398 3 -a 324 593 6 -a 324 535 9 -a 324 88 8 -a 324 542 4 -a 324 567 5 -a 324 348 3 -a 324 813 6 -a 324 577 1 -a 324 132 1 -a 324 157 10 -a 324 596 3 -a 324 126 4 -a 325 294 3 -a 325 459 8 -a 325 86 2 -a 325 535 7 -a 325 241 8 -a 325 28 5 -a 325 448 3 -a 325 740 7 -a 325 607 8 -a 325 256 8 -a 325 181 8 -a 325 128 5 -a 325 453 7 -a 325 11 8 -a 325 216 2 -a 325 755 2 -a 325 475 3 -a 325 613 5 -a 325 323 8 -a 325 700 2 -a 325 865 8 -a 325 551 9 -a 325 24 9 -a 325 653 6 -a 325 546 9 -a 325 600 2 -a 325 785 5 -a 325 702 8 -a 325 171 7 -a 325 910 3 -a 325 995 7 -a 325 629 4 -a 325 996 9 -a 325 506 7 -a 325 869 1 -a 325 953 6 -a 325 584 2 -a 325 606 3 -a 325 185 1 -a 325 764 9 -a 325 733 1 -a 325 637 1 -a 325 775 5 -a 325 948 5 -a 325 367 1 -a 325 225 8 -a 325 536 6 -a 325 690 6 -a 325 210 8 -a 325 212 2 -a 325 530 10 -a 325 760 1 -a 325 235 8 -a 325 158 9 -a 325 281 8 -a 325 834 7 -a 325 942 5 -a 325 983 9 -a 325 828 2 -a 325 953 1 -a 325 608 1 -a 325 799 10 -a 325 434 8 -a 325 452 7 -a 325 797 10 -a 325 363 6 -a 325 12 6 -a 325 378 5 -a 325 547 2 -a 325 775 5 -a 325 86 1 -a 325 159 7 -a 325 525 4 -a 325 9 10 -a 325 526 3 -a 325 750 10 -a 325 545 9 -a 325 191 7 -a 325 959 10 -a 325 756 8 -a 325 720 4 -a 325 694 1 -a 325 990 6 -a 325 877 3 -a 325 975 2 -a 325 799 8 -a 325 795 8 -a 325 933 2 -a 325 778 6 -a 325 598 4 -a 325 861 7 -a 325 361 9 -a 325 372 1 -a 325 271 1 -a 325 812 7 -a 325 144 6 -a 325 633 6 -a 325 823 1 -a 325 522 5 -a 325 155 6 -a 325 574 4 -a 325 607 4 -a 325 313 7 -a 325 74 5 -a 325 616 8 -a 325 838 5 -a 325 823 4 -a 325 136 4 -a 325 4 3 -a 325 757 9 -a 325 891 10 -a 325 723 9 -a 325 427 4 -a 325 856 3 -a 325 576 1 -a 325 377 10 -a 325 630 10 -a 326 346 7 -a 326 285 7 -a 326 383 8 -a 326 943 10 -a 326 121 4 -a 326 743 7 -a 326 290 1 -a 326 391 2 -a 326 530 4 -a 326 433 9 -a 326 329 8 -a 326 954 10 -a 326 153 5 -a 326 902 7 -a 326 537 8 -a 326 466 5 -a 326 975 10 -a 326 128 9 -a 326 279 4 -a 326 774 10 -a 326 263 5 -a 326 283 10 -a 326 506 3 -a 326 129 3 -a 326 932 3 -a 326 984 3 -a 326 556 2 -a 326 284 4 -a 326 589 5 -a 326 901 10 -a 326 568 8 -a 326 971 8 -a 326 819 6 -a 326 689 8 -a 326 689 2 -a 326 84 7 -a 326 55 7 -a 326 194 1 -a 326 517 1 -a 326 54 6 -a 326 522 9 -a 326 446 4 -a 326 206 9 -a 326 399 2 -a 326 982 2 -a 326 671 3 -a 326 350 1 -a 326 85 8 -a 326 950 10 -a 326 99 4 -a 326 347 1 -a 326 208 2 -a 326 604 9 -a 326 475 6 -a 326 188 3 -a 326 512 1 -a 326 434 10 -a 326 744 1 -a 326 795 10 -a 326 620 7 -a 326 339 10 -a 326 968 10 -a 326 415 7 -a 326 3 7 -a 326 632 5 -a 326 498 10 -a 326 57 6 -a 326 826 3 -a 326 110 5 -a 326 323 8 -a 326 436 5 -a 326 316 3 -a 326 722 7 -a 326 393 5 -a 326 986 5 -a 326 47 3 -a 326 478 4 -a 326 911 8 -a 326 145 3 -a 326 824 1 -a 326 94 2 -a 326 748 5 -a 326 275 2 -a 326 282 2 -a 326 235 10 -a 326 708 1 -a 326 1 3 -a 326 6 4 -a 326 706 9 -a 326 620 7 -a 326 344 7 -a 326 649 5 -a 326 10 3 -a 326 346 9 -a 326 257 1 -a 326 508 5 -a 326 402 8 -a 326 58 3 -a 326 497 8 -a 327 512 10 -a 327 380 2 -a 327 932 9 -a 327 827 7 -a 327 77 10 -a 327 301 4 -a 327 788 1 -a 327 123 8 -a 327 778 1 -a 327 675 4 -a 327 267 7 -a 327 577 10 -a 327 768 2 -a 327 851 5 -a 327 25 7 -a 327 225 6 -a 327 535 7 -a 327 25 5 -a 327 230 5 -a 327 216 8 -a 327 645 5 -a 327 573 6 -a 327 864 4 -a 327 654 4 -a 327 918 9 -a 327 96 2 -a 327 137 9 -a 327 296 7 -a 327 153 2 -a 327 634 6 -a 327 807 8 -a 327 533 6 -a 327 541 3 -a 327 609 10 -a 327 609 4 -a 327 841 2 -a 327 372 4 -a 327 732 2 -a 327 594 6 -a 327 22 10 -a 327 998 7 -a 327 147 4 -a 327 790 1 -a 327 988 3 -a 327 997 2 -a 327 814 7 -a 327 189 2 -a 327 507 5 -a 327 839 10 -a 327 418 4 -a 327 722 3 -a 327 459 10 -a 327 991 4 -a 327 562 4 -a 327 88 1 -a 327 884 7 -a 327 657 3 -a 327 225 8 -a 327 155 8 -a 327 810 9 -a 327 858 4 -a 327 961 6 -a 327 318 2 -a 327 374 4 -a 327 545 4 -a 327 926 2 -a 327 191 1 -a 327 917 6 -a 327 633 5 -a 327 784 10 -a 327 938 3 -a 327 607 2 -a 327 930 2 -a 327 703 5 -a 327 570 4 -a 327 903 4 -a 327 493 10 -a 327 758 9 -a 327 385 3 -a 327 307 9 -a 327 152 2 -a 327 83 10 -a 327 765 9 -a 327 118 3 -a 327 644 8 -a 327 852 9 -a 327 276 7 -a 327 52 3 -a 327 132 6 -a 327 61 1 -a 327 909 4 -a 327 68 1 -a 327 378 9 -a 327 259 10 -a 328 613 7 -a 328 280 4 -a 328 449 3 -a 328 505 8 -a 328 912 6 -a 328 208 8 -a 328 418 3 -a 328 494 4 -a 328 114 8 -a 328 97 10 -a 328 40 6 -a 328 589 3 -a 328 797 5 -a 328 376 9 -a 328 895 9 -a 328 948 8 -a 328 458 10 -a 328 635 7 -a 328 41 4 -a 328 77 4 -a 328 462 6 -a 328 18 2 -a 328 353 7 -a 328 514 7 -a 328 149 6 -a 328 413 4 -a 328 398 10 -a 328 216 9 -a 328 791 3 -a 328 656 1 -a 328 828 3 -a 328 46 10 -a 328 80 7 -a 328 308 2 -a 328 957 4 -a 328 288 1 -a 328 726 7 -a 328 427 9 -a 328 401 4 -a 328 822 5 -a 328 466 3 -a 328 392 9 -a 328 386 1 -a 328 238 4 -a 328 767 9 -a 328 256 1 -a 328 162 8 -a 328 201 9 -a 328 890 9 -a 328 202 10 -a 328 277 7 -a 328 327 5 -a 328 219 10 -a 328 629 9 -a 328 840 8 -a 328 367 3 -a 328 18 10 -a 328 214 4 -a 328 583 4 -a 328 808 3 -a 328 869 4 -a 328 386 8 -a 328 853 7 -a 328 949 6 -a 328 694 7 -a 328 785 10 -a 328 212 8 -a 328 395 2 -a 328 187 4 -a 328 612 7 -a 328 192 2 -a 328 652 1 -a 328 577 10 -a 328 890 9 -a 328 745 8 -a 328 832 1 -a 328 27 8 -a 328 945 9 -a 328 697 10 -a 328 228 6 -a 328 198 7 -a 328 447 2 -a 328 826 1 -a 328 839 1 -a 328 813 4 -a 328 843 4 -a 328 28 8 -a 328 371 10 -a 328 626 7 -a 328 896 1 -a 328 757 3 -a 328 454 2 -a 328 820 6 -a 328 426 5 -a 328 215 3 -a 328 7 6 -a 329 820 2 -a 329 401 9 -a 329 618 10 -a 329 29 4 -a 329 596 8 -a 329 563 2 -a 329 918 8 -a 329 317 10 -a 329 370 8 -a 329 944 10 -a 329 237 3 -a 329 42 1 -a 329 147 5 -a 329 434 7 -a 329 40 7 -a 329 593 5 -a 329 236 9 -a 329 878 1 -a 329 382 1 -a 329 54 3 -a 329 905 9 -a 329 752 10 -a 329 680 2 -a 329 777 8 -a 329 484 4 -a 329 109 1 -a 329 572 10 -a 329 909 7 -a 329 323 10 -a 329 579 1 -a 329 704 8 -a 329 724 1 -a 329 172 5 -a 329 690 6 -a 329 752 6 -a 329 768 8 -a 329 228 3 -a 329 645 10 -a 329 60 4 -a 329 597 6 -a 329 564 6 -a 329 296 5 -a 329 638 2 -a 329 710 3 -a 329 730 6 -a 329 678 1 -a 329 279 7 -a 329 965 7 -a 329 531 1 -a 329 660 9 -a 329 412 1 -a 329 387 1 -a 329 673 1 -a 329 164 5 -a 329 871 5 -a 329 782 2 -a 329 735 10 -a 329 755 7 -a 329 80 9 -a 329 289 1 -a 329 435 3 -a 329 803 6 -a 329 461 5 -a 329 100 8 -a 329 530 9 -a 329 204 9 -a 329 328 8 -a 329 150 5 -a 329 263 8 -a 329 924 4 -a 329 713 4 -a 329 558 4 -a 329 538 3 -a 329 399 1 -a 329 263 6 -a 329 191 10 -a 329 677 8 -a 329 203 6 -a 329 721 10 -a 329 312 3 -a 329 197 8 -a 329 108 3 -a 329 698 9 -a 329 869 3 -a 329 271 8 -a 329 544 6 -a 329 626 10 -a 329 275 8 -a 329 706 3 -a 329 270 1 -a 330 709 2 -a 330 484 2 -a 330 730 4 -a 330 808 3 -a 330 933 10 -a 330 111 6 -a 330 139 3 -a 330 171 8 -a 330 11 8 -a 330 852 5 -a 330 729 3 -a 330 548 6 -a 330 226 2 -a 330 991 9 -a 330 738 9 -a 330 902 6 -a 330 170 8 -a 330 434 9 -a 330 189 6 -a 330 366 6 -a 330 542 2 -a 330 886 6 -a 330 210 1 -a 330 812 4 -a 330 406 2 -a 330 836 8 -a 330 793 1 -a 330 680 2 -a 330 517 3 -a 330 39 9 -a 330 364 5 -a 330 1000 8 -a 330 768 9 -a 330 147 5 -a 330 989 3 -a 330 677 2 -a 330 258 5 -a 330 104 8 -a 330 847 9 -a 330 268 4 -a 330 955 2 -a 330 551 3 -a 330 815 7 -a 330 156 2 -a 330 518 3 -a 330 528 2 -a 330 33 9 -a 330 687 2 -a 330 961 7 -a 330 221 4 -a 330 28 8 -a 330 478 3 -a 330 82 5 -a 330 237 4 -a 330 266 7 -a 330 487 7 -a 330 48 5 -a 330 34 8 -a 330 142 2 -a 330 564 10 -a 330 72 9 -a 330 505 4 -a 330 540 8 -a 330 840 5 -a 330 652 7 -a 330 504 10 -a 330 492 8 -a 330 909 2 -a 330 607 6 -a 330 314 10 -a 330 152 5 -a 330 537 10 -a 330 865 5 -a 330 966 6 -a 330 692 1 -a 330 358 3 -a 330 469 6 -a 330 724 4 -a 330 20 6 -a 330 405 7 -a 330 944 4 -a 330 47 7 -a 330 883 3 -a 330 2 5 -a 330 283 1 -a 330 124 8 -a 330 488 10 -a 330 331 7 -a 330 157 8 -a 330 630 3 -a 330 894 5 -a 330 229 6 -a 331 110 9 -a 331 409 7 -a 331 44 1 -a 331 761 8 -a 331 913 8 -a 331 535 3 -a 331 645 5 -a 331 495 4 -a 331 848 1 -a 331 796 9 -a 331 8 7 -a 331 688 2 -a 331 737 5 -a 331 699 5 -a 331 21 1 -a 331 181 3 -a 331 399 9 -a 331 40 5 -a 331 586 2 -a 331 318 2 -a 331 86 3 -a 331 444 6 -a 331 319 10 -a 331 369 8 -a 331 567 7 -a 331 807 10 -a 331 699 10 -a 331 723 7 -a 331 412 10 -a 331 568 1 -a 331 951 8 -a 331 521 4 -a 331 977 6 -a 331 994 7 -a 331 258 6 -a 331 865 8 -a 331 504 5 -a 331 902 3 -a 331 335 5 -a 331 328 7 -a 331 674 5 -a 331 342 1 -a 331 386 2 -a 331 17 10 -a 331 12 1 -a 331 567 4 -a 331 415 5 -a 331 51 8 -a 331 128 1 -a 331 732 5 -a 331 137 6 -a 331 571 7 -a 331 27 10 -a 331 505 1 -a 331 113 9 -a 331 833 3 -a 331 179 3 -a 331 835 3 -a 331 220 1 -a 331 746 1 -a 331 762 1 -a 331 740 10 -a 331 698 6 -a 331 731 2 -a 331 997 7 -a 331 538 1 -a 331 211 7 -a 331 875 1 -a 331 873 6 -a 331 538 5 -a 331 524 9 -a 331 190 6 -a 331 528 8 -a 331 909 9 -a 331 206 8 -a 331 539 6 -a 331 451 6 -a 331 620 7 -a 331 590 7 -a 331 578 7 -a 331 328 7 -a 331 726 2 -a 331 124 2 -a 331 354 4 -a 331 206 7 -a 331 236 5 -a 331 162 1 -a 331 384 4 -a 331 47 6 -a 331 381 8 -a 331 105 4 -a 331 808 5 -a 331 96 6 -a 331 803 10 -a 331 514 6 -a 331 69 2 -a 331 316 3 -a 331 724 1 -a 331 943 2 -a 331 164 3 -a 331 237 7 -a 331 442 9 -a 331 354 5 -a 331 765 8 -a 331 326 1 -a 332 559 1 -a 332 279 6 -a 332 777 7 -a 332 155 5 -a 332 868 2 -a 332 330 9 -a 332 482 8 -a 332 569 2 -a 332 454 3 -a 332 835 2 -a 332 774 3 -a 332 689 5 -a 332 996 2 -a 332 133 4 -a 332 735 3 -a 332 352 8 -a 332 238 8 -a 332 518 10 -a 332 447 3 -a 332 16 7 -a 332 8 7 -a 332 515 3 -a 332 331 6 -a 332 731 8 -a 332 433 8 -a 332 495 8 -a 332 968 6 -a 332 874 6 -a 332 848 4 -a 332 708 3 -a 332 176 6 -a 332 382 4 -a 332 986 2 -a 332 952 6 -a 332 536 7 -a 332 830 7 -a 332 257 8 -a 332 374 2 -a 332 710 5 -a 332 827 2 -a 332 124 9 -a 332 375 2 -a 332 798 1 -a 332 256 5 -a 332 85 4 -a 332 125 4 -a 332 493 10 -a 332 603 9 -a 332 572 2 -a 332 508 3 -a 332 610 9 -a 332 62 3 -a 332 839 4 -a 332 316 5 -a 332 495 8 -a 332 309 3 -a 332 259 9 -a 332 344 7 -a 332 132 5 -a 332 966 2 -a 332 519 4 -a 332 513 1 -a 332 928 2 -a 332 446 2 -a 332 25 10 -a 332 733 2 -a 332 703 7 -a 332 17 10 -a 332 82 10 -a 332 388 5 -a 332 844 2 -a 332 205 4 -a 332 762 10 -a 332 617 4 -a 332 461 2 -a 332 847 5 -a 332 742 1 -a 332 953 2 -a 332 425 1 -a 332 289 3 -a 332 437 10 -a 332 10 9 -a 332 350 7 -a 332 251 4 -a 332 325 5 -a 332 844 5 -a 332 559 9 -a 332 584 6 -a 332 164 10 -a 332 690 5 -a 332 525 9 -a 332 682 4 -a 332 178 8 -a 332 428 8 -a 332 104 2 -a 332 202 9 -a 332 136 6 -a 332 806 9 -a 332 219 3 -a 332 218 1 -a 332 169 9 -a 332 38 3 -a 332 422 3 -a 332 931 2 -a 332 654 6 -a 332 882 8 -a 333 753 3 -a 333 371 5 -a 333 811 5 -a 333 153 9 -a 333 659 9 -a 333 223 8 -a 333 162 3 -a 333 473 2 -a 333 486 8 -a 333 828 1 -a 333 7 9 -a 333 45 10 -a 333 991 2 -a 333 696 1 -a 333 570 10 -a 333 649 4 -a 333 873 3 -a 333 997 6 -a 333 752 6 -a 333 51 4 -a 333 109 8 -a 333 533 7 -a 333 269 6 -a 333 326 3 -a 333 701 6 -a 333 306 5 -a 333 747 7 -a 333 607 8 -a 333 959 8 -a 333 605 10 -a 333 335 1 -a 333 306 6 -a 333 391 1 -a 333 487 7 -a 333 964 4 -a 333 613 5 -a 333 648 9 -a 333 948 9 -a 333 61 10 -a 333 110 9 -a 333 752 4 -a 333 67 10 -a 333 154 3 -a 333 718 2 -a 333 762 7 -a 333 723 9 -a 333 342 9 -a 333 610 3 -a 333 696 7 -a 333 69 10 -a 333 660 5 -a 333 804 3 -a 333 601 4 -a 333 928 3 -a 333 105 4 -a 333 278 1 -a 333 209 4 -a 333 851 7 -a 333 884 8 -a 333 144 9 -a 333 431 1 -a 333 195 8 -a 333 449 7 -a 333 821 5 -a 333 681 8 -a 333 388 3 -a 333 409 6 -a 333 305 8 -a 333 312 7 -a 333 469 1 -a 333 414 9 -a 333 39 3 -a 333 535 4 -a 333 567 5 -a 333 756 2 -a 333 272 4 -a 333 266 2 -a 333 74 5 -a 333 882 1 -a 333 961 10 -a 333 142 9 -a 333 517 1 -a 333 740 4 -a 333 743 10 -a 333 421 7 -a 333 844 8 -a 333 629 9 -a 333 670 6 -a 333 879 5 -a 333 772 4 -a 333 77 5 -a 333 49 8 -a 333 196 7 -a 333 897 2 -a 333 730 9 -a 333 584 2 -a 333 282 6 -a 333 10 10 -a 333 895 2 -a 333 750 9 -a 333 423 4 -a 334 933 8 -a 334 261 1 -a 334 989 5 -a 334 664 10 -a 334 532 2 -a 334 230 5 -a 334 737 3 -a 334 389 3 -a 334 166 7 -a 334 879 9 -a 334 906 1 -a 334 905 4 -a 334 597 7 -a 334 302 9 -a 334 724 8 -a 334 592 2 -a 334 930 2 -a 334 370 9 -a 334 446 10 -a 334 678 5 -a 334 446 10 -a 334 495 1 -a 334 873 5 -a 334 318 4 -a 334 200 10 -a 334 432 6 -a 334 599 3 -a 334 209 7 -a 334 302 2 -a 334 325 9 -a 334 631 8 -a 334 210 2 -a 334 585 10 -a 334 595 8 -a 334 874 5 -a 334 92 4 -a 334 825 7 -a 334 586 5 -a 334 481 1 -a 334 990 7 -a 334 440 5 -a 334 362 2 -a 334 871 9 -a 334 12 5 -a 334 663 1 -a 334 570 8 -a 334 603 6 -a 334 568 6 -a 334 939 5 -a 334 25 3 -a 334 221 6 -a 334 360 6 -a 334 519 10 -a 334 70 9 -a 334 678 8 -a 334 718 1 -a 334 501 6 -a 334 252 10 -a 334 926 3 -a 334 803 9 -a 334 576 9 -a 334 532 6 -a 334 136 5 -a 334 102 1 -a 334 861 5 -a 334 228 10 -a 334 926 6 -a 334 423 5 -a 334 708 7 -a 334 892 6 -a 334 862 3 -a 334 45 2 -a 334 738 1 -a 334 874 2 -a 334 707 1 -a 334 283 9 -a 334 452 3 -a 334 250 7 -a 334 198 7 -a 334 476 2 -a 334 471 6 -a 334 557 6 -a 334 994 5 -a 334 540 10 -a 334 210 4 -a 334 687 1 -a 334 16 4 -a 334 462 2 -a 334 588 6 -a 334 818 8 -a 334 13 8 -a 334 95 10 -a 334 806 6 -a 334 149 10 -a 334 197 1 -a 334 642 9 -a 335 376 1 -a 335 98 2 -a 335 40 4 -a 335 59 1 -a 335 989 8 -a 335 902 5 -a 335 103 3 -a 335 702 10 -a 335 751 6 -a 335 809 1 -a 335 985 8 -a 335 178 9 -a 335 34 1 -a 335 158 10 -a 335 654 6 -a 335 504 3 -a 335 714 1 -a 335 623 1 -a 335 19 6 -a 335 924 6 -a 335 286 6 -a 335 35 9 -a 335 361 7 -a 335 873 3 -a 335 852 10 -a 335 373 3 -a 335 968 7 -a 335 633 1 -a 335 521 9 -a 335 140 7 -a 335 251 5 -a 335 896 5 -a 335 237 1 -a 335 290 5 -a 335 954 9 -a 335 202 5 -a 335 167 7 -a 335 32 2 -a 335 903 10 -a 335 917 10 -a 335 840 3 -a 335 863 10 -a 335 71 6 -a 335 874 8 -a 335 724 6 -a 335 353 9 -a 335 710 4 -a 335 322 8 -a 335 372 2 -a 335 609 10 -a 335 607 2 -a 335 406 6 -a 335 969 10 -a 335 456 4 -a 335 233 7 -a 335 317 2 -a 335 399 6 -a 335 866 8 -a 335 838 10 -a 335 538 5 -a 335 92 4 -a 335 709 2 -a 335 774 10 -a 335 381 7 -a 335 639 7 -a 335 975 2 -a 335 548 6 -a 335 670 7 -a 335 854 7 -a 335 440 9 -a 335 486 1 -a 335 692 6 -a 335 510 6 -a 335 335 9 -a 335 688 3 -a 335 209 8 -a 335 687 7 -a 335 373 9 -a 335 531 10 -a 335 34 1 -a 335 981 5 -a 335 113 10 -a 335 439 10 -a 335 925 9 -a 335 568 3 -a 335 672 9 -a 335 217 9 -a 335 966 1 -a 335 513 10 -a 335 30 7 -a 335 479 5 -a 335 604 9 -a 335 739 10 -a 335 229 2 -a 335 984 2 -a 335 353 4 -a 335 179 10 -a 335 507 5 -a 335 8 1 -a 335 947 4 -a 335 483 8 -a 335 700 6 -a 335 432 7 -a 336 817 1 -a 336 363 2 -a 336 641 1 -a 336 480 3 -a 336 735 10 -a 336 147 3 -a 336 513 9 -a 336 691 10 -a 336 259 10 -a 336 952 2 -a 336 591 6 -a 336 827 10 -a 336 599 8 -a 336 807 1 -a 336 768 9 -a 336 87 1 -a 336 837 9 -a 336 223 4 -a 336 690 2 -a 336 551 4 -a 336 451 3 -a 336 649 6 -a 336 903 8 -a 336 629 10 -a 336 132 9 -a 336 900 3 -a 336 637 4 -a 336 54 6 -a 336 359 5 -a 336 312 9 -a 336 485 10 -a 336 151 1 -a 336 674 9 -a 336 101 5 -a 336 630 1 -a 336 384 5 -a 336 247 3 -a 336 119 6 -a 336 50 1 -a 336 506 9 -a 336 46 1 -a 336 640 8 -a 336 308 3 -a 336 644 8 -a 336 422 6 -a 336 51 6 -a 336 730 6 -a 336 234 9 -a 336 273 6 -a 336 395 8 -a 336 784 6 -a 336 723 3 -a 336 19 8 -a 336 662 2 -a 336 328 5 -a 336 150 9 -a 336 538 6 -a 336 964 5 -a 336 203 2 -a 336 896 2 -a 336 251 7 -a 336 688 8 -a 336 22 10 -a 336 924 7 -a 336 788 3 -a 336 652 1 -a 336 283 7 -a 336 11 10 -a 336 770 9 -a 336 332 1 -a 336 516 10 -a 336 815 8 -a 336 971 3 -a 336 823 8 -a 336 434 5 -a 336 368 7 -a 336 873 5 -a 336 139 10 -a 336 602 9 -a 336 122 1 -a 336 533 6 -a 336 361 2 -a 336 844 8 -a 336 551 2 -a 336 147 4 -a 336 701 4 -a 336 536 5 -a 336 86 4 -a 336 903 4 -a 336 407 7 -a 336 336 1 -a 336 566 3 -a 336 428 9 -a 336 235 9 -a 336 330 3 -a 336 55 1 -a 336 517 7 -a 336 340 6 -a 336 824 6 -a 336 848 3 -a 336 855 7 -a 336 614 10 -a 337 794 6 -a 337 653 1 -a 337 23 9 -a 337 138 5 -a 337 501 3 -a 337 161 3 -a 337 739 6 -a 337 622 4 -a 337 693 5 -a 337 75 7 -a 337 442 4 -a 337 220 10 -a 337 73 3 -a 337 588 2 -a 337 920 8 -a 337 608 1 -a 337 674 7 -a 337 798 3 -a 337 340 3 -a 337 418 3 -a 337 220 2 -a 337 669 5 -a 337 472 6 -a 337 736 8 -a 337 272 8 -a 337 560 6 -a 337 838 3 -a 337 885 10 -a 337 329 2 -a 337 466 6 -a 337 908 5 -a 337 466 8 -a 337 966 8 -a 337 44 6 -a 337 180 7 -a 337 564 3 -a 337 737 7 -a 337 255 9 -a 337 956 4 -a 337 327 1 -a 337 568 1 -a 337 851 6 -a 337 935 2 -a 337 217 5 -a 337 624 6 -a 337 924 4 -a 337 202 1 -a 337 963 4 -a 337 317 4 -a 337 421 2 -a 337 607 3 -a 337 789 4 -a 337 132 9 -a 337 590 10 -a 337 36 9 -a 337 691 6 -a 337 403 5 -a 337 920 5 -a 337 868 9 -a 337 803 3 -a 337 461 10 -a 337 810 3 -a 337 847 5 -a 337 641 7 -a 337 349 8 -a 337 559 3 -a 337 895 6 -a 337 329 3 -a 337 490 9 -a 337 197 10 -a 337 896 6 -a 337 316 6 -a 337 107 9 -a 337 89 7 -a 337 939 9 -a 337 7 3 -a 337 290 6 -a 337 878 1 -a 337 323 3 -a 337 710 5 -a 337 460 1 -a 337 87 4 -a 337 841 5 -a 337 26 3 -a 337 122 9 -a 337 508 10 -a 337 428 8 -a 337 18 6 -a 337 503 1 -a 337 272 6 -a 337 820 10 -a 337 963 4 -a 337 57 2 -a 337 642 10 -a 337 579 3 -a 337 405 9 -a 338 176 5 -a 338 449 3 -a 338 733 7 -a 338 665 4 -a 338 646 9 -a 338 604 8 -a 338 980 4 -a 338 752 8 -a 338 692 1 -a 338 895 4 -a 338 758 7 -a 338 981 10 -a 338 748 5 -a 338 57 8 -a 338 666 3 -a 338 183 5 -a 338 143 6 -a 338 483 7 -a 338 208 7 -a 338 265 10 -a 338 990 4 -a 338 636 8 -a 338 282 7 -a 338 468 10 -a 338 907 6 -a 338 77 1 -a 338 406 10 -a 338 963 9 -a 338 719 1 -a 338 985 9 -a 338 343 7 -a 338 894 3 -a 338 409 10 -a 338 51 3 -a 338 535 7 -a 338 30 1 -a 338 654 9 -a 338 490 3 -a 338 782 3 -a 338 322 9 -a 338 360 4 -a 338 515 10 -a 338 278 2 -a 338 83 1 -a 338 571 6 -a 338 944 6 -a 338 266 8 -a 338 714 7 -a 338 402 1 -a 338 473 6 -a 338 978 6 -a 338 367 3 -a 338 84 8 -a 338 235 9 -a 338 834 6 -a 338 990 2 -a 338 311 8 -a 338 215 9 -a 338 928 2 -a 338 5 7 -a 338 175 7 -a 338 246 4 -a 338 899 7 -a 338 584 2 -a 338 296 2 -a 338 409 9 -a 338 613 1 -a 338 950 7 -a 338 898 9 -a 338 370 10 -a 338 247 3 -a 338 234 10 -a 338 885 4 -a 338 524 10 -a 338 316 8 -a 338 431 9 -a 338 443 3 -a 338 581 8 -a 338 120 4 -a 338 844 9 -a 338 30 6 -a 338 73 1 -a 338 186 6 -a 338 113 8 -a 338 307 2 -a 338 79 3 -a 338 618 3 -a 338 210 1 -a 338 622 9 -a 338 384 8 -a 338 228 6 -a 338 496 8 -a 338 967 1 -a 338 523 9 -a 338 904 1 -a 338 556 4 -a 338 448 2 -a 338 778 9 -a 338 925 3 -a 338 694 10 -a 338 785 3 -a 338 194 7 -a 339 302 2 -a 339 192 2 -a 339 636 7 -a 339 883 7 -a 339 311 9 -a 339 456 9 -a 339 912 10 -a 339 384 8 -a 339 641 10 -a 339 690 4 -a 339 636 3 -a 339 78 9 -a 339 283 8 -a 339 845 1 -a 339 60 1 -a 339 905 2 -a 339 204 9 -a 339 287 1 -a 339 376 3 -a 339 147 9 -a 339 809 5 -a 339 256 3 -a 339 702 6 -a 339 233 10 -a 339 9 5 -a 339 602 2 -a 339 926 6 -a 339 363 7 -a 339 95 10 -a 339 296 4 -a 339 554 5 -a 339 731 5 -a 339 154 6 -a 339 864 9 -a 339 162 1 -a 339 41 6 -a 339 223 9 -a 339 802 7 -a 339 41 3 -a 339 913 10 -a 339 413 1 -a 339 118 2 -a 339 171 3 -a 339 233 5 -a 339 177 4 -a 339 51 3 -a 339 437 6 -a 339 463 9 -a 339 427 8 -a 339 583 2 -a 339 248 7 -a 339 682 4 -a 339 260 7 -a 339 480 9 -a 339 690 7 -a 339 861 9 -a 339 381 9 -a 339 684 1 -a 339 199 9 -a 339 476 3 -a 339 979 5 -a 339 752 3 -a 339 182 1 -a 339 109 7 -a 339 592 5 -a 339 343 3 -a 339 149 6 -a 339 814 2 -a 339 120 10 -a 339 189 2 -a 339 702 2 -a 339 533 4 -a 339 307 8 -a 339 873 7 -a 339 765 8 -a 339 483 6 -a 339 923 9 -a 339 177 3 -a 339 946 6 -a 339 325 3 -a 339 759 6 -a 339 169 1 -a 339 648 6 -a 339 671 7 -a 339 855 4 -a 339 4 8 -a 339 330 10 -a 339 29 6 -a 339 479 6 -a 339 285 7 -a 339 781 9 -a 339 660 1 -a 339 393 7 -a 339 348 8 -a 339 541 5 -a 339 137 3 -a 339 98 8 -a 339 730 4 -a 339 839 10 -a 339 630 10 -a 339 12 10 -a 339 687 5 -a 339 370 1 -a 339 494 2 -a 339 585 1 -a 339 547 5 -a 339 415 2 -a 339 910 8 -a 339 281 3 -a 339 583 9 -a 339 891 5 -a 339 275 4 -a 339 206 1 -a 339 538 6 -a 339 105 6 -a 339 210 9 -a 339 867 5 -a 340 133 2 -a 340 688 9 -a 340 127 9 -a 340 913 2 -a 340 324 10 -a 340 519 4 -a 340 236 10 -a 340 301 9 -a 340 36 10 -a 340 373 3 -a 340 398 7 -a 340 765 8 -a 340 187 5 -a 340 3 2 -a 340 776 7 -a 340 873 8 -a 340 373 3 -a 340 245 7 -a 340 433 7 -a 340 919 8 -a 340 660 1 -a 340 318 9 -a 340 175 4 -a 340 218 2 -a 340 185 2 -a 340 449 8 -a 340 424 5 -a 340 722 2 -a 340 553 4 -a 340 633 6 -a 340 564 2 -a 340 686 7 -a 340 296 5 -a 340 691 3 -a 340 574 2 -a 340 619 2 -a 340 185 9 -a 340 810 9 -a 340 920 3 -a 340 220 2 -a 340 158 3 -a 340 293 1 -a 340 984 8 -a 340 344 7 -a 340 296 7 -a 340 735 9 -a 340 192 8 -a 340 668 6 -a 340 980 2 -a 340 624 3 -a 340 562 7 -a 340 615 6 -a 340 942 1 -a 340 736 5 -a 340 832 1 -a 340 102 3 -a 340 161 1 -a 340 231 3 -a 340 823 10 -a 340 713 8 -a 340 863 8 -a 340 362 6 -a 340 374 9 -a 340 135 6 -a 340 28 10 -a 340 948 3 -a 340 753 6 -a 340 213 10 -a 340 733 4 -a 340 648 5 -a 340 432 7 -a 340 890 6 -a 340 941 4 -a 340 392 1 -a 340 209 4 -a 340 212 1 -a 340 102 6 -a 340 400 2 -a 340 879 7 -a 340 57 9 -a 340 416 3 -a 340 671 7 -a 340 940 1 -a 340 127 10 -a 340 479 6 -a 340 17 3 -a 340 287 8 -a 340 709 8 -a 340 839 7 -a 340 1000 7 -a 340 548 10 -a 340 177 3 -a 340 349 2 -a 340 682 10 -a 340 204 6 -a 340 272 10 -a 340 410 7 -a 340 416 6 -a 340 34 4 -a 340 848 9 -a 340 869 9 -a 340 974 9 -a 340 215 2 -a 340 53 10 -a 340 161 4 -a 340 316 7 -a 341 452 5 -a 341 15 7 -a 341 373 10 -a 341 451 3 -a 341 430 5 -a 341 19 6 -a 341 366 6 -a 341 556 10 -a 341 497 9 -a 341 383 4 -a 341 843 2 -a 341 182 7 -a 341 197 3 -a 341 818 9 -a 341 729 7 -a 341 373 6 -a 341 142 2 -a 341 386 3 -a 341 577 8 -a 341 414 8 -a 341 795 5 -a 341 992 7 -a 341 393 2 -a 341 828 10 -a 341 815 9 -a 341 238 3 -a 341 777 2 -a 341 5 3 -a 341 290 1 -a 341 937 4 -a 341 321 5 -a 341 742 7 -a 341 951 4 -a 341 693 4 -a 341 168 10 -a 341 356 10 -a 341 711 5 -a 341 533 7 -a 341 912 1 -a 341 184 9 -a 341 915 5 -a 341 730 7 -a 341 365 1 -a 341 88 8 -a 341 523 9 -a 341 69 10 -a 341 460 7 -a 341 664 10 -a 341 454 8 -a 341 12 10 -a 341 53 8 -a 341 224 8 -a 341 446 4 -a 341 28 3 -a 341 794 7 -a 341 683 8 -a 341 804 7 -a 341 799 3 -a 341 972 1 -a 341 717 10 -a 341 95 1 -a 341 689 9 -a 341 643 7 -a 341 787 3 -a 341 856 8 -a 341 999 10 -a 341 473 9 -a 341 365 4 -a 341 886 10 -a 341 656 8 -a 341 255 1 -a 341 591 2 -a 341 342 5 -a 341 89 5 -a 341 64 7 -a 341 802 10 -a 341 752 6 -a 341 517 2 -a 341 813 2 -a 341 805 1 -a 341 741 4 -a 341 792 1 -a 341 226 1 -a 341 768 1 -a 341 562 10 -a 341 908 8 -a 341 547 6 -a 341 336 6 -a 341 855 9 -a 341 239 7 -a 341 430 3 -a 341 520 4 -a 341 882 7 -a 341 192 4 -a 341 351 8 -a 341 856 2 -a 341 664 9 -a 341 715 4 -a 341 717 4 -a 341 296 5 -a 341 970 4 -a 341 283 5 -a 341 291 5 -a 341 287 6 -a 341 371 7 -a 342 355 9 -a 342 64 10 -a 342 98 8 -a 342 871 6 -a 342 877 6 -a 342 902 8 -a 342 587 9 -a 342 644 5 -a 342 103 1 -a 342 330 7 -a 342 181 4 -a 342 877 2 -a 342 516 7 -a 342 841 2 -a 342 91 5 -a 342 945 9 -a 342 336 9 -a 342 972 4 -a 342 112 6 -a 342 686 10 -a 342 803 4 -a 342 776 2 -a 342 377 2 -a 342 495 9 -a 342 47 9 -a 342 322 1 -a 342 777 4 -a 342 337 4 -a 342 608 1 -a 342 123 10 -a 342 691 7 -a 342 672 8 -a 342 221 7 -a 342 538 5 -a 342 524 5 -a 342 98 6 -a 342 100 9 -a 342 143 3 -a 342 201 9 -a 342 430 1 -a 342 324 6 -a 342 186 2 -a 342 282 9 -a 342 839 3 -a 342 2 1 -a 342 372 2 -a 342 760 6 -a 342 337 1 -a 342 320 6 -a 342 871 9 -a 342 98 2 -a 342 622 10 -a 342 375 1 -a 342 593 3 -a 342 668 4 -a 342 696 5 -a 342 345 8 -a 342 279 2 -a 342 468 2 -a 342 671 8 -a 342 950 2 -a 342 688 2 -a 342 184 10 -a 342 449 10 -a 342 785 10 -a 342 284 10 -a 342 592 10 -a 342 985 3 -a 342 713 8 -a 342 915 1 -a 342 147 7 -a 342 994 10 -a 342 729 2 -a 342 148 10 -a 342 341 4 -a 342 464 2 -a 342 485 6 -a 342 660 7 -a 342 311 6 -a 342 483 4 -a 342 758 4 -a 342 932 9 -a 342 857 6 -a 342 326 3 -a 342 576 6 -a 342 528 1 -a 342 670 3 -a 342 556 6 -a 342 806 10 -a 342 113 6 -a 342 202 2 -a 342 732 8 -a 342 800 1 -a 342 386 8 -a 342 156 3 -a 342 561 9 -a 342 669 7 -a 342 747 5 -a 342 521 5 -a 342 357 10 -a 342 637 4 -a 342 667 5 -a 342 326 8 -a 342 342 10 -a 342 815 8 -a 342 666 9 -a 342 805 10 -a 342 275 2 -a 342 302 2 -a 342 91 10 -a 342 757 1 -a 342 35 10 -a 342 589 9 -a 343 360 3 -a 343 574 5 -a 343 92 1 -a 343 5 2 -a 343 105 5 -a 343 897 7 -a 343 118 7 -a 343 306 10 -a 343 604 6 -a 343 917 5 -a 343 691 10 -a 343 760 2 -a 343 453 2 -a 343 335 4 -a 343 482 9 -a 343 974 3 -a 343 691 2 -a 343 95 7 -a 343 616 1 -a 343 436 7 -a 343 406 10 -a 343 658 3 -a 343 216 9 -a 343 680 3 -a 343 959 9 -a 343 307 8 -a 343 412 1 -a 343 993 5 -a 343 305 10 -a 343 1000 5 -a 343 328 1 -a 343 878 9 -a 343 67 6 -a 343 332 10 -a 343 982 2 -a 343 964 6 -a 343 449 5 -a 343 263 2 -a 343 543 8 -a 343 342 10 -a 343 954 7 -a 343 278 8 -a 343 794 9 -a 343 264 1 -a 343 760 10 -a 343 743 10 -a 343 955 10 -a 343 854 2 -a 343 335 7 -a 343 946 7 -a 343 265 7 -a 343 740 2 -a 343 579 8 -a 343 480 4 -a 343 396 6 -a 343 513 5 -a 343 786 1 -a 343 807 7 -a 343 481 4 -a 343 66 9 -a 343 783 1 -a 343 808 9 -a 343 943 6 -a 343 849 1 -a 343 116 5 -a 343 900 8 -a 343 788 10 -a 343 564 8 -a 343 139 9 -a 343 307 4 -a 343 905 10 -a 343 68 7 -a 343 584 2 -a 343 675 7 -a 343 331 6 -a 343 319 7 -a 343 393 7 -a 343 261 6 -a 343 148 5 -a 343 727 6 -a 343 183 3 -a 343 412 3 -a 343 443 4 -a 343 761 8 -a 343 892 3 -a 343 838 5 -a 343 250 7 -a 343 653 7 -a 343 620 2 -a 343 730 10 -a 343 719 10 -a 343 378 8 -a 343 514 2 -a 343 637 6 -a 343 203 1 -a 343 629 3 -a 343 513 4 -a 343 990 5 -a 343 168 9 -a 343 651 6 -a 343 272 7 -a 343 49 6 -a 343 718 1 -a 343 856 8 -a 343 723 4 -a 343 24 4 -a 343 150 1 -a 344 91 10 -a 344 285 2 -a 344 298 9 -a 344 818 8 -a 344 467 3 -a 344 709 2 -a 344 236 7 -a 344 203 2 -a 344 576 5 -a 344 49 3 -a 344 452 5 -a 344 205 10 -a 344 668 10 -a 344 158 8 -a 344 923 6 -a 344 22 5 -a 344 671 1 -a 344 535 1 -a 344 224 9 -a 344 275 10 -a 344 23 8 -a 344 189 10 -a 344 442 8 -a 344 673 4 -a 344 461 9 -a 344 490 8 -a 344 366 4 -a 344 292 8 -a 344 188 7 -a 344 390 2 -a 344 441 10 -a 344 279 10 -a 344 674 10 -a 344 738 5 -a 344 72 7 -a 344 116 5 -a 344 423 10 -a 344 307 1 -a 344 318 2 -a 344 998 2 -a 344 355 10 -a 344 770 9 -a 344 178 2 -a 344 927 9 -a 344 76 4 -a 344 19 7 -a 344 573 10 -a 344 611 8 -a 344 242 4 -a 344 847 3 -a 344 633 5 -a 344 431 3 -a 344 264 1 -a 344 282 10 -a 344 891 3 -a 344 754 7 -a 344 647 6 -a 344 158 8 -a 344 941 7 -a 344 12 10 -a 344 598 2 -a 344 195 10 -a 344 685 6 -a 344 312 9 -a 344 266 4 -a 344 800 10 -a 344 734 4 -a 344 572 7 -a 344 94 2 -a 344 707 6 -a 344 926 4 -a 344 863 6 -a 344 885 10 -a 344 924 2 -a 344 765 3 -a 344 960 3 -a 344 942 10 -a 344 313 9 -a 344 546 7 -a 344 160 10 -a 344 135 10 -a 344 155 1 -a 344 590 5 -a 344 398 3 -a 344 436 6 -a 344 456 3 -a 344 127 9 -a 344 58 10 -a 344 613 6 -a 344 44 7 -a 344 70 5 -a 344 186 10 -a 344 238 4 -a 344 754 9 -a 344 497 9 -a 344 504 7 -a 344 530 1 -a 344 206 4 -a 344 51 3 -a 344 623 10 -a 344 913 4 -a 344 977 10 -a 344 461 8 -a 344 773 10 -a 344 876 10 -a 344 201 7 -a 344 708 6 -a 344 793 4 -a 344 513 5 -a 344 230 3 -a 344 952 3 -a 345 647 10 -a 345 384 4 -a 345 517 7 -a 345 20 2 -a 345 819 9 -a 345 972 5 -a 345 147 9 -a 345 876 8 -a 345 560 7 -a 345 190 3 -a 345 945 6 -a 345 746 5 -a 345 427 2 -a 345 675 3 -a 345 218 7 -a 345 930 7 -a 345 180 5 -a 345 424 9 -a 345 981 2 -a 345 802 4 -a 345 312 3 -a 345 933 1 -a 345 238 9 -a 345 60 2 -a 345 784 4 -a 345 438 6 -a 345 767 2 -a 345 552 2 -a 345 950 4 -a 345 996 8 -a 345 480 4 -a 345 572 9 -a 345 355 8 -a 345 996 7 -a 345 591 2 -a 345 149 10 -a 345 944 8 -a 345 737 5 -a 345 1 7 -a 345 479 9 -a 345 926 9 -a 345 945 3 -a 345 200 6 -a 345 329 5 -a 345 595 9 -a 345 418 1 -a 345 234 8 -a 345 774 10 -a 345 841 2 -a 345 190 1 -a 345 551 6 -a 345 128 4 -a 345 98 5 -a 345 788 4 -a 345 187 6 -a 345 881 5 -a 345 201 3 -a 345 953 5 -a 345 409 3 -a 345 126 2 -a 345 925 1 -a 345 888 1 -a 345 697 9 -a 345 255 5 -a 345 859 10 -a 345 264 5 -a 345 404 6 -a 345 778 7 -a 345 1000 7 -a 345 404 1 -a 345 233 10 -a 345 902 3 -a 345 324 6 -a 345 432 4 -a 345 206 6 -a 345 919 8 -a 345 849 6 -a 345 439 8 -a 345 668 10 -a 345 665 10 -a 345 629 10 -a 345 195 6 -a 345 792 5 -a 345 726 4 -a 345 982 5 -a 345 978 10 -a 345 583 9 -a 345 159 4 -a 345 907 6 -a 345 991 9 -a 345 284 2 -a 345 807 1 -a 345 854 10 -a 345 981 4 -a 345 37 9 -a 345 688 9 -a 345 220 6 -a 345 440 7 -a 345 442 10 -a 345 195 10 -a 345 843 5 -a 345 674 2 -a 345 72 10 -a 345 143 1 -a 345 81 10 -a 345 277 5 -a 345 37 10 -a 345 930 7 -a 345 716 6 -a 345 704 10 -a 345 570 6 -a 345 320 6 -a 345 898 3 -a 345 338 3 -a 345 21 6 -a 345 856 1 -a 345 291 10 -a 345 603 10 -a 345 173 5 -a 346 569 4 -a 346 273 6 -a 346 979 7 -a 346 398 5 -a 346 229 10 -a 346 62 1 -a 346 448 7 -a 346 431 1 -a 346 503 4 -a 346 643 9 -a 346 250 1 -a 346 152 6 -a 346 714 4 -a 346 392 4 -a 346 232 10 -a 346 991 9 -a 346 428 7 -a 346 137 2 -a 346 682 9 -a 346 107 1 -a 346 707 5 -a 346 20 7 -a 346 836 10 -a 346 310 2 -a 346 600 6 -a 346 825 8 -a 346 483 4 -a 346 144 8 -a 346 73 3 -a 346 437 7 -a 346 542 5 -a 346 302 6 -a 346 428 1 -a 346 603 8 -a 346 749 9 -a 346 859 7 -a 346 81 6 -a 346 367 4 -a 346 84 1 -a 346 232 7 -a 346 57 1 -a 346 475 4 -a 346 463 5 -a 346 23 10 -a 346 902 4 -a 346 600 6 -a 346 704 2 -a 346 282 8 -a 346 680 8 -a 346 988 5 -a 346 301 8 -a 346 676 3 -a 346 799 8 -a 346 610 10 -a 346 251 9 -a 346 599 1 -a 346 68 4 -a 346 395 1 -a 346 672 5 -a 346 505 1 -a 346 936 8 -a 346 973 10 -a 346 932 6 -a 346 514 2 -a 346 697 8 -a 346 766 2 -a 346 594 2 -a 346 40 1 -a 346 849 1 -a 346 825 10 -a 346 96 5 -a 346 299 1 -a 346 263 1 -a 346 118 8 -a 346 176 8 -a 346 862 8 -a 346 821 10 -a 346 160 5 -a 346 119 10 -a 346 476 9 -a 346 123 1 -a 346 419 4 -a 346 127 2 -a 346 922 10 -a 346 5 1 -a 346 378 10 -a 346 496 2 -a 346 72 2 -a 346 772 1 -a 346 143 3 -a 346 576 10 -a 346 683 1 -a 346 91 10 -a 346 484 2 -a 346 172 1 -a 346 788 6 -a 346 225 9 -a 346 765 5 -a 346 827 10 -a 346 50 4 -a 346 565 3 -a 346 922 9 -a 346 348 3 -a 346 827 1 -a 346 15 8 -a 346 524 4 -a 347 665 1 -a 347 835 4 -a 347 683 10 -a 347 783 2 -a 347 286 6 -a 347 805 5 -a 347 178 2 -a 347 412 8 -a 347 702 8 -a 347 182 4 -a 347 789 9 -a 347 174 5 -a 347 253 4 -a 347 536 2 -a 347 316 9 -a 347 829 7 -a 347 194 6 -a 347 407 3 -a 347 288 6 -a 347 365 6 -a 347 170 5 -a 347 512 8 -a 347 105 9 -a 347 996 9 -a 347 561 2 -a 347 669 8 -a 347 893 4 -a 347 909 10 -a 347 472 7 -a 347 907 7 -a 347 408 2 -a 347 112 3 -a 347 717 6 -a 347 66 5 -a 347 894 7 -a 347 870 6 -a 347 47 4 -a 347 389 2 -a 347 548 2 -a 347 228 7 -a 347 154 10 -a 347 721 3 -a 347 481 3 -a 347 689 7 -a 347 12 8 -a 347 285 4 -a 347 883 5 -a 347 418 10 -a 347 572 7 -a 347 223 6 -a 347 587 10 -a 347 59 6 -a 347 328 1 -a 347 558 6 -a 347 620 4 -a 347 996 1 -a 347 426 1 -a 347 504 4 -a 347 443 7 -a 347 308 5 -a 347 911 3 -a 347 554 8 -a 347 976 1 -a 347 424 10 -a 347 821 8 -a 347 470 6 -a 347 366 5 -a 347 344 1 -a 347 698 1 -a 347 519 3 -a 347 40 6 -a 347 154 2 -a 347 183 6 -a 347 52 7 -a 347 438 7 -a 347 41 3 -a 347 469 10 -a 347 264 8 -a 347 32 3 -a 347 43 1 -a 347 591 9 -a 347 589 10 -a 347 662 5 -a 347 562 5 -a 347 141 5 -a 347 298 8 -a 347 27 10 -a 347 534 5 -a 347 298 2 -a 347 957 2 -a 347 274 10 -a 347 799 6 -a 347 403 2 -a 347 639 10 -a 347 118 9 -a 347 76 8 -a 347 133 6 -a 347 158 10 -a 347 229 1 -a 347 316 6 -a 347 209 8 -a 347 666 2 -a 347 356 2 -a 347 677 1 -a 347 650 10 -a 347 619 10 -a 347 708 5 -a 347 692 6 -a 347 185 1 -a 347 273 2 -a 347 330 6 -a 348 747 4 -a 348 263 8 -a 348 470 4 -a 348 727 5 -a 348 560 1 -a 348 497 10 -a 348 236 5 -a 348 857 1 -a 348 474 6 -a 348 169 9 -a 348 107 3 -a 348 248 3 -a 348 571 4 -a 348 745 5 -a 348 366 10 -a 348 646 8 -a 348 878 9 -a 348 523 9 -a 348 874 5 -a 348 169 6 -a 348 731 9 -a 348 515 9 -a 348 524 6 -a 348 383 8 -a 348 140 5 -a 348 119 8 -a 348 67 3 -a 348 831 7 -a 348 303 7 -a 348 339 1 -a 348 136 3 -a 348 25 6 -a 348 601 3 -a 348 606 7 -a 348 751 3 -a 348 136 5 -a 348 78 9 -a 348 987 4 -a 348 993 8 -a 348 551 1 -a 348 131 9 -a 348 75 6 -a 348 799 7 -a 348 701 7 -a 348 819 10 -a 348 140 1 -a 348 322 8 -a 348 672 4 -a 348 662 4 -a 348 171 3 -a 348 840 2 -a 348 368 4 -a 348 685 5 -a 348 340 6 -a 348 750 7 -a 348 824 1 -a 348 458 4 -a 348 816 1 -a 348 630 5 -a 348 760 8 -a 348 130 7 -a 348 766 8 -a 348 785 3 -a 348 730 6 -a 348 347 9 -a 348 511 7 -a 348 866 10 -a 348 424 9 -a 348 473 3 -a 348 834 1 -a 348 974 4 -a 348 603 5 -a 348 908 9 -a 348 748 4 -a 348 279 6 -a 348 702 9 -a 348 887 7 -a 348 600 6 -a 348 350 3 -a 348 524 6 -a 348 770 5 -a 348 165 2 -a 348 891 9 -a 348 430 8 -a 348 504 1 -a 348 617 6 -a 348 229 2 -a 348 961 1 -a 348 408 2 -a 348 859 4 -a 348 697 8 -a 348 538 10 -a 348 600 1 -a 348 457 1 -a 348 243 9 -a 348 946 7 -a 348 967 4 -a 348 84 6 -a 348 345 10 -a 348 416 9 -a 348 917 10 -a 348 294 6 -a 348 800 5 -a 348 18 5 -a 348 273 5 -a 348 478 6 -a 348 904 2 -a 348 872 7 -a 348 827 8 -a 348 404 8 -a 348 618 6 -a 348 991 6 -a 348 270 5 -a 348 23 6 -a 348 471 5 -a 348 886 1 -a 348 252 4 -a 348 407 4 -a 348 270 9 -a 349 86 10 -a 349 79 1 -a 349 807 2 -a 349 685 9 -a 349 535 4 -a 349 25 10 -a 349 606 4 -a 349 478 10 -a 349 109 7 -a 349 950 2 -a 349 893 3 -a 349 1 9 -a 349 219 8 -a 349 886 2 -a 349 801 7 -a 349 236 8 -a 349 134 1 -a 349 254 3 -a 349 116 6 -a 349 56 3 -a 349 519 9 -a 349 599 5 -a 349 22 8 -a 349 788 8 -a 349 621 5 -a 349 492 5 -a 349 650 10 -a 349 872 3 -a 349 899 6 -a 349 919 3 -a 349 957 7 -a 349 977 5 -a 349 701 10 -a 349 617 2 -a 349 488 2 -a 349 725 5 -a 349 198 7 -a 349 965 6 -a 349 833 7 -a 349 123 4 -a 349 833 2 -a 349 834 3 -a 349 342 10 -a 349 694 8 -a 349 610 3 -a 349 577 10 -a 349 828 5 -a 349 863 10 -a 349 692 4 -a 349 809 7 -a 349 918 7 -a 349 186 9 -a 349 383 7 -a 349 939 10 -a 349 974 4 -a 349 407 8 -a 349 599 2 -a 349 851 3 -a 349 281 3 -a 349 493 1 -a 349 783 6 -a 349 233 4 -a 349 169 3 -a 349 376 10 -a 349 720 3 -a 349 893 8 -a 349 573 8 -a 349 660 1 -a 349 702 1 -a 349 696 7 -a 349 468 9 -a 349 511 6 -a 349 13 3 -a 349 138 6 -a 349 96 6 -a 349 589 4 -a 349 965 2 -a 349 958 6 -a 349 257 4 -a 349 749 7 -a 349 851 4 -a 349 442 8 -a 349 107 9 -a 349 765 2 -a 349 391 2 -a 349 85 1 -a 349 147 7 -a 349 989 9 -a 349 935 7 -a 349 427 5 -a 349 457 1 -a 349 694 6 -a 349 660 4 -a 349 625 1 -a 350 45 9 -a 350 355 4 -a 350 494 5 -a 350 617 8 -a 350 171 2 -a 350 288 7 -a 350 458 10 -a 350 681 6 -a 350 300 8 -a 350 595 6 -a 350 776 6 -a 350 889 2 -a 350 535 9 -a 350 709 8 -a 350 121 7 -a 350 259 4 -a 350 535 8 -a 350 562 1 -a 350 365 9 -a 350 275 9 -a 350 953 4 -a 350 450 10 -a 350 422 5 -a 350 917 7 -a 350 360 5 -a 350 848 6 -a 350 350 1 -a 350 29 1 -a 350 483 6 -a 350 974 9 -a 350 73 6 -a 350 838 4 -a 350 443 2 -a 350 690 8 -a 350 828 5 -a 350 613 10 -a 350 977 7 -a 350 261 5 -a 350 269 1 -a 350 253 6 -a 350 856 4 -a 350 20 2 -a 350 117 1 -a 350 366 2 -a 350 728 1 -a 350 237 10 -a 350 625 10 -a 350 238 5 -a 350 798 4 -a 350 989 7 -a 350 513 1 -a 350 726 6 -a 350 414 10 -a 350 934 4 -a 350 619 6 -a 350 774 7 -a 350 757 10 -a 350 968 1 -a 350 802 6 -a 350 216 8 -a 350 917 5 -a 350 875 10 -a 350 29 8 -a 350 336 1 -a 350 540 10 -a 350 856 7 -a 350 948 2 -a 350 492 10 -a 350 92 1 -a 350 193 5 -a 350 744 9 -a 350 947 5 -a 350 212 9 -a 350 860 7 -a 350 289 3 -a 350 940 7 -a 350 72 8 -a 350 913 10 -a 350 153 1 -a 350 870 7 -a 350 877 5 -a 350 665 1 -a 350 571 5 -a 350 267 9 -a 350 574 9 -a 350 165 2 -a 350 16 4 -a 350 307 9 -a 350 108 10 -a 350 817 10 -a 350 522 4 -a 350 1 9 -a 350 667 10 -a 350 550 8 -a 350 336 1 -a 350 182 7 -a 350 381 7 -a 350 259 8 -a 350 674 2 -a 350 472 7 -a 350 451 4 -a 350 393 6 -a 350 395 6 -a 350 663 4 -a 350 229 4 -a 350 683 3 -a 350 578 2 -a 350 300 7 -a 350 571 5 -a 350 730 10 -a 350 145 3 -a 350 423 2 -a 350 371 3 -a 351 716 1 -a 351 689 10 -a 351 944 7 -a 351 880 2 -a 351 704 7 -a 351 226 4 -a 351 988 3 -a 351 497 7 -a 351 747 8 -a 351 988 3 -a 351 139 10 -a 351 272 6 -a 351 299 10 -a 351 321 2 -a 351 652 10 -a 351 557 9 -a 351 994 6 -a 351 100 2 -a 351 362 8 -a 351 494 3 -a 351 646 8 -a 351 590 4 -a 351 152 4 -a 351 199 3 -a 351 890 2 -a 351 722 10 -a 351 928 5 -a 351 10 8 -a 351 120 7 -a 351 274 5 -a 351 725 3 -a 351 809 7 -a 351 194 9 -a 351 581 3 -a 351 488 1 -a 351 419 2 -a 351 544 1 -a 351 984 3 -a 351 142 2 -a 351 507 9 -a 351 99 9 -a 351 413 5 -a 351 805 3 -a 351 419 2 -a 351 41 6 -a 351 337 3 -a 351 388 3 -a 351 140 9 -a 351 320 7 -a 351 749 5 -a 351 633 9 -a 351 965 7 -a 351 315 9 -a 351 784 1 -a 351 139 7 -a 351 180 1 -a 351 481 5 -a 351 43 9 -a 351 189 1 -a 351 600 7 -a 351 316 9 -a 351 914 9 -a 351 384 7 -a 351 509 2 -a 351 470 9 -a 351 872 8 -a 351 928 1 -a 351 831 10 -a 351 45 4 -a 351 495 8 -a 351 929 7 -a 351 457 4 -a 351 275 5 -a 351 323 7 -a 351 497 4 -a 351 611 4 -a 351 710 1 -a 351 636 4 -a 351 931 4 -a 351 435 7 -a 351 244 2 -a 351 871 8 -a 351 749 1 -a 351 3 2 -a 351 928 10 -a 351 483 6 -a 351 28 1 -a 351 92 7 -a 351 59 7 -a 351 343 5 -a 351 442 5 -a 351 852 4 -a 351 450 8 -a 351 289 4 -a 351 755 10 -a 351 438 2 -a 351 96 3 -a 351 799 6 -a 351 932 9 -a 351 231 4 -a 352 182 10 -a 352 323 3 -a 352 728 7 -a 352 793 10 -a 352 8 4 -a 352 339 10 -a 352 699 10 -a 352 442 8 -a 352 583 10 -a 352 545 3 -a 352 166 10 -a 352 585 1 -a 352 530 9 -a 352 69 3 -a 352 44 6 -a 352 557 8 -a 352 161 8 -a 352 102 3 -a 352 900 7 -a 352 141 6 -a 352 543 5 -a 352 727 9 -a 352 591 9 -a 352 832 2 -a 352 457 8 -a 352 4 1 -a 352 927 8 -a 352 231 4 -a 352 936 7 -a 352 926 2 -a 352 461 8 -a 352 93 3 -a 352 224 4 -a 352 164 5 -a 352 885 2 -a 352 232 6 -a 352 503 10 -a 352 559 9 -a 352 673 8 -a 352 61 1 -a 352 80 6 -a 352 839 7 -a 352 645 10 -a 352 609 8 -a 352 907 5 -a 352 688 9 -a 352 142 6 -a 352 43 3 -a 352 789 5 -a 352 17 7 -a 352 184 10 -a 352 308 9 -a 352 743 1 -a 352 774 10 -a 352 115 8 -a 352 175 2 -a 352 777 3 -a 352 17 2 -a 352 405 3 -a 352 688 9 -a 352 942 2 -a 352 865 8 -a 352 781 7 -a 352 142 7 -a 352 5 1 -a 352 641 4 -a 352 373 6 -a 352 507 5 -a 352 176 6 -a 352 21 3 -a 352 567 2 -a 352 255 9 -a 352 859 1 -a 352 187 3 -a 352 863 5 -a 352 742 8 -a 352 875 7 -a 352 784 6 -a 352 639 1 -a 352 967 5 -a 352 946 2 -a 352 738 2 -a 352 716 8 -a 352 36 4 -a 352 912 5 -a 352 469 2 -a 352 52 3 -a 352 292 4 -a 352 132 8 -a 352 994 1 -a 352 133 10 -a 352 912 8 -a 352 111 7 -a 352 137 10 -a 352 529 6 -a 352 483 2 -a 352 643 4 -a 352 704 2 -a 352 503 3 -a 352 185 1 -a 352 958 3 -a 352 338 9 -a 352 371 8 -a 352 796 6 -a 352 55 9 -a 352 221 4 -a 352 776 4 -a 352 838 2 -a 352 860 8 -a 353 771 9 -a 353 781 9 -a 353 781 6 -a 353 485 5 -a 353 472 6 -a 353 817 6 -a 353 372 5 -a 353 940 6 -a 353 868 8 -a 353 664 10 -a 353 48 1 -a 353 837 2 -a 353 796 9 -a 353 959 6 -a 353 947 6 -a 353 932 3 -a 353 463 7 -a 353 405 10 -a 353 550 10 -a 353 142 3 -a 353 908 6 -a 353 734 4 -a 353 75 9 -a 353 221 9 -a 353 80 8 -a 353 871 9 -a 353 275 5 -a 353 301 3 -a 353 622 10 -a 353 88 3 -a 353 136 4 -a 353 368 4 -a 353 868 5 -a 353 916 9 -a 353 852 9 -a 353 316 1 -a 353 708 8 -a 353 200 7 -a 353 231 6 -a 353 552 5 -a 353 863 5 -a 353 278 7 -a 353 364 3 -a 353 634 5 -a 353 213 1 -a 353 287 9 -a 353 541 2 -a 353 675 8 -a 353 691 10 -a 353 66 7 -a 353 817 5 -a 353 574 1 -a 353 799 3 -a 353 891 8 -a 353 794 5 -a 353 878 5 -a 353 737 3 -a 353 44 8 -a 353 154 7 -a 353 334 5 -a 353 132 4 -a 353 289 7 -a 353 702 3 -a 353 999 4 -a 353 181 1 -a 353 529 2 -a 353 290 3 -a 353 888 9 -a 353 728 8 -a 353 521 2 -a 353 415 6 -a 353 566 3 -a 353 798 10 -a 353 779 7 -a 353 175 7 -a 353 41 2 -a 353 715 4 -a 353 661 5 -a 353 731 1 -a 353 780 10 -a 353 453 9 -a 353 281 1 -a 353 554 3 -a 353 319 1 -a 353 50 2 -a 353 408 2 -a 353 32 5 -a 353 94 6 -a 353 561 1 -a 353 365 1 -a 353 225 7 -a 353 850 4 -a 353 42 5 -a 353 199 7 -a 353 6 5 -a 353 571 9 -a 353 489 5 -a 353 893 8 -a 353 274 9 -a 353 284 7 -a 353 840 2 -a 354 782 10 -a 354 38 2 -a 354 768 3 -a 354 78 9 -a 354 705 2 -a 354 404 5 -a 354 808 4 -a 354 460 7 -a 354 856 2 -a 354 64 4 -a 354 150 7 -a 354 114 8 -a 354 397 7 -a 354 181 3 -a 354 207 7 -a 354 957 2 -a 354 546 1 -a 354 431 7 -a 354 782 2 -a 354 587 10 -a 354 629 3 -a 354 787 3 -a 354 133 6 -a 354 93 7 -a 354 656 10 -a 354 407 5 -a 354 77 6 -a 354 939 2 -a 354 222 1 -a 354 859 3 -a 354 976 5 -a 354 211 3 -a 354 602 8 -a 354 29 4 -a 354 915 10 -a 354 836 8 -a 354 351 5 -a 354 836 10 -a 354 900 10 -a 354 340 1 -a 354 985 10 -a 354 736 4 -a 354 142 8 -a 354 195 8 -a 354 668 5 -a 354 687 3 -a 354 625 5 -a 354 426 9 -a 354 249 1 -a 354 229 10 -a 354 188 4 -a 354 382 1 -a 354 322 1 -a 354 843 2 -a 354 788 10 -a 354 398 8 -a 354 757 6 -a 354 232 9 -a 354 708 1 -a 354 195 3 -a 354 833 5 -a 354 736 2 -a 354 86 1 -a 354 813 4 -a 354 548 2 -a 354 436 6 -a 354 624 10 -a 354 423 3 -a 354 775 4 -a 354 585 6 -a 354 411 5 -a 354 486 6 -a 354 726 2 -a 354 605 7 -a 354 129 4 -a 354 388 10 -a 354 205 5 -a 354 554 8 -a 354 636 6 -a 354 433 8 -a 354 742 10 -a 354 754 5 -a 354 560 9 -a 354 780 5 -a 354 128 4 -a 354 293 4 -a 354 764 1 -a 354 359 2 -a 354 1000 5 -a 354 959 10 -a 354 168 6 -a 354 712 10 -a 354 20 6 -a 354 980 4 -a 355 235 7 -a 355 455 7 -a 355 580 10 -a 355 657 4 -a 355 205 10 -a 355 140 4 -a 355 43 2 -a 355 690 2 -a 355 865 7 -a 355 647 3 -a 355 818 10 -a 355 228 7 -a 355 851 5 -a 355 348 9 -a 355 863 6 -a 355 259 2 -a 355 65 10 -a 355 856 7 -a 355 624 8 -a 355 611 3 -a 355 116 6 -a 355 916 3 -a 355 351 5 -a 355 474 6 -a 355 892 8 -a 355 285 6 -a 355 641 6 -a 355 579 3 -a 355 304 1 -a 355 597 7 -a 355 813 8 -a 355 758 9 -a 355 152 8 -a 355 445 5 -a 355 962 6 -a 355 291 4 -a 355 487 6 -a 355 627 7 -a 355 131 4 -a 355 109 2 -a 355 420 3 -a 355 358 6 -a 355 959 10 -a 355 767 1 -a 355 196 3 -a 355 193 7 -a 355 831 7 -a 355 27 2 -a 355 181 6 -a 355 431 6 -a 355 638 9 -a 355 296 7 -a 355 322 7 -a 355 988 6 -a 355 770 1 -a 355 189 7 -a 355 248 7 -a 355 386 3 -a 355 767 5 -a 355 551 6 -a 355 982 10 -a 355 555 1 -a 355 284 9 -a 355 109 4 -a 355 999 1 -a 355 221 4 -a 355 399 6 -a 355 461 4 -a 355 847 6 -a 355 529 4 -a 355 569 5 -a 355 242 4 -a 355 886 9 -a 355 503 10 -a 355 58 3 -a 355 696 2 -a 355 815 6 -a 355 84 9 -a 355 876 5 -a 355 221 1 -a 355 721 2 -a 355 148 5 -a 355 543 1 -a 355 684 1 -a 355 917 1 -a 355 731 9 -a 355 931 1 -a 355 278 2 -a 355 474 1 -a 355 457 2 -a 355 236 2 -a 355 4 7 -a 355 740 5 -a 356 344 7 -a 356 960 10 -a 356 743 10 -a 356 439 2 -a 356 782 9 -a 356 247 10 -a 356 109 10 -a 356 486 8 -a 356 166 8 -a 356 157 8 -a 356 798 8 -a 356 249 9 -a 356 9 3 -a 356 970 10 -a 356 156 4 -a 356 537 9 -a 356 629 2 -a 356 48 9 -a 356 243 6 -a 356 536 2 -a 356 325 2 -a 356 716 5 -a 356 992 3 -a 356 560 1 -a 356 720 2 -a 356 708 10 -a 356 904 10 -a 356 698 3 -a 356 643 1 -a 356 622 1 -a 356 112 8 -a 356 401 5 -a 356 868 9 -a 356 95 8 -a 356 400 8 -a 356 976 3 -a 356 581 1 -a 356 383 3 -a 356 117 8 -a 356 737 8 -a 356 156 1 -a 356 366 10 -a 356 745 3 -a 356 150 10 -a 356 311 9 -a 356 900 4 -a 356 686 3 -a 356 939 2 -a 356 947 4 -a 356 929 5 -a 356 450 2 -a 356 248 2 -a 356 620 6 -a 356 418 9 -a 356 807 2 -a 356 315 8 -a 356 101 4 -a 356 686 10 -a 356 743 6 -a 356 283 9 -a 356 100 8 -a 356 119 8 -a 356 127 5 -a 356 194 8 -a 356 518 10 -a 356 78 7 -a 356 774 4 -a 356 900 9 -a 356 195 6 -a 356 487 1 -a 356 32 7 -a 356 560 2 -a 356 207 3 -a 356 181 1 -a 356 870 4 -a 356 83 7 -a 356 867 5 -a 356 784 5 -a 356 5 8 -a 356 771 3 -a 356 210 4 -a 356 252 8 -a 356 366 4 -a 356 627 2 -a 356 35 6 -a 356 681 9 -a 356 727 8 -a 356 720 9 -a 356 668 6 -a 356 445 1 -a 356 767 6 -a 356 564 5 -a 356 105 7 -a 356 961 4 -a 356 57 8 -a 356 182 3 -a 356 710 10 -a 356 957 10 -a 356 376 6 -a 357 172 5 -a 357 988 9 -a 357 935 2 -a 357 379 3 -a 357 144 3 -a 357 780 8 -a 357 461 3 -a 357 540 8 -a 357 465 8 -a 357 756 2 -a 357 749 3 -a 357 717 7 -a 357 98 5 -a 357 351 10 -a 357 751 9 -a 357 778 5 -a 357 53 7 -a 357 446 10 -a 357 421 8 -a 357 497 4 -a 357 424 9 -a 357 164 6 -a 357 36 6 -a 357 528 8 -a 357 100 6 -a 357 93 9 -a 357 710 7 -a 357 809 10 -a 357 25 7 -a 357 61 5 -a 357 981 5 -a 357 996 9 -a 357 335 6 -a 357 131 4 -a 357 751 5 -a 357 795 5 -a 357 117 7 -a 357 266 5 -a 357 235 9 -a 357 872 8 -a 357 951 4 -a 357 969 10 -a 357 340 4 -a 357 677 3 -a 357 722 6 -a 357 392 1 -a 357 99 3 -a 357 119 7 -a 357 889 3 -a 357 522 1 -a 357 282 2 -a 357 924 10 -a 357 26 2 -a 357 381 6 -a 357 735 4 -a 357 165 4 -a 357 16 6 -a 357 795 1 -a 357 121 10 -a 357 3 9 -a 357 766 7 -a 357 455 6 -a 357 134 6 -a 357 493 10 -a 357 225 2 -a 357 250 5 -a 357 758 3 -a 357 460 4 -a 357 97 10 -a 357 748 3 -a 357 386 2 -a 357 42 9 -a 357 63 4 -a 357 39 10 -a 357 763 9 -a 357 455 2 -a 357 137 1 -a 357 881 10 -a 357 319 7 -a 357 658 2 -a 357 138 5 -a 357 218 7 -a 357 683 6 -a 357 518 10 -a 357 210 9 -a 357 393 4 -a 357 683 1 -a 357 225 3 -a 357 164 9 -a 357 803 5 -a 357 228 6 -a 357 929 2 -a 357 234 6 -a 357 361 6 -a 357 397 6 -a 357 458 3 -a 357 610 7 -a 357 131 1 -a 357 917 7 -a 358 706 3 -a 358 878 5 -a 358 279 2 -a 358 747 1 -a 358 940 4 -a 358 317 7 -a 358 486 1 -a 358 370 3 -a 358 453 2 -a 358 342 9 -a 358 688 7 -a 358 86 7 -a 358 480 4 -a 358 906 7 -a 358 769 2 -a 358 997 2 -a 358 91 4 -a 358 137 7 -a 358 655 5 -a 358 315 9 -a 358 300 3 -a 358 434 6 -a 358 542 10 -a 358 205 5 -a 358 667 6 -a 358 902 4 -a 358 601 9 -a 358 100 5 -a 358 487 6 -a 358 731 2 -a 358 169 7 -a 358 584 6 -a 358 271 3 -a 358 915 8 -a 358 500 1 -a 358 587 4 -a 358 376 10 -a 358 869 7 -a 358 15 1 -a 358 718 5 -a 358 533 1 -a 358 100 9 -a 358 173 8 -a 358 414 7 -a 358 868 2 -a 358 145 7 -a 358 504 4 -a 358 800 2 -a 358 818 3 -a 358 280 4 -a 358 209 2 -a 358 336 4 -a 358 484 7 -a 358 875 9 -a 358 213 5 -a 358 61 6 -a 358 974 3 -a 358 700 3 -a 358 791 8 -a 358 966 8 -a 358 868 6 -a 358 351 10 -a 358 212 5 -a 358 758 8 -a 358 850 2 -a 358 798 4 -a 358 110 2 -a 358 694 6 -a 358 812 10 -a 358 827 9 -a 358 202 4 -a 358 912 4 -a 358 999 8 -a 358 615 5 -a 358 755 10 -a 358 119 4 -a 358 94 2 -a 358 735 9 -a 358 918 3 -a 358 912 9 -a 358 102 9 -a 358 223 10 -a 358 474 7 -a 358 976 3 -a 358 435 10 -a 358 534 10 -a 358 926 8 -a 358 110 3 -a 358 301 1 -a 358 867 10 -a 358 977 6 -a 358 651 1 -a 358 55 8 -a 358 711 3 -a 358 476 7 -a 358 852 8 -a 358 820 8 -a 358 145 2 -a 358 640 4 -a 358 622 3 -a 358 347 1 -a 358 527 6 -a 358 596 9 -a 358 961 5 -a 358 257 3 -a 358 714 2 -a 358 31 2 -a 358 992 5 -a 358 608 4 -a 358 942 4 -a 358 982 5 -a 358 709 1 -a 358 140 2 -a 358 431 9 -a 358 661 5 -a 358 574 10 -a 358 965 7 -a 358 562 9 -a 359 684 10 -a 359 241 6 -a 359 404 9 -a 359 636 4 -a 359 891 4 -a 359 458 9 -a 359 322 8 -a 359 342 8 -a 359 286 6 -a 359 117 9 -a 359 486 3 -a 359 925 10 -a 359 738 8 -a 359 832 8 -a 359 427 8 -a 359 309 4 -a 359 769 8 -a 359 683 6 -a 359 799 3 -a 359 650 5 -a 359 606 8 -a 359 716 3 -a 359 607 7 -a 359 290 1 -a 359 855 9 -a 359 14 6 -a 359 950 4 -a 359 404 1 -a 359 978 6 -a 359 487 7 -a 359 63 7 -a 359 194 2 -a 359 891 8 -a 359 699 2 -a 359 60 4 -a 359 324 10 -a 359 401 5 -a 359 609 1 -a 359 113 7 -a 359 886 1 -a 359 509 1 -a 359 850 4 -a 359 694 2 -a 359 935 6 -a 359 135 1 -a 359 438 5 -a 359 594 7 -a 359 133 1 -a 359 212 10 -a 359 219 1 -a 359 738 7 -a 359 927 7 -a 359 826 7 -a 359 3 8 -a 359 757 9 -a 359 839 4 -a 359 953 2 -a 359 136 2 -a 359 792 3 -a 359 415 6 -a 359 199 10 -a 359 985 9 -a 359 281 6 -a 359 897 7 -a 359 20 3 -a 359 605 5 -a 359 892 7 -a 359 420 5 -a 359 189 2 -a 359 281 5 -a 359 698 3 -a 359 830 8 -a 359 974 1 -a 359 608 4 -a 359 964 10 -a 359 387 9 -a 359 177 8 -a 359 72 6 -a 359 598 7 -a 359 396 2 -a 359 809 2 -a 359 500 10 -a 359 197 2 -a 359 811 10 -a 359 232 8 -a 359 11 8 -a 359 739 8 -a 359 368 10 -a 359 802 9 -a 359 130 8 -a 359 566 6 -a 359 762 8 -a 359 410 1 -a 359 438 4 -a 359 781 10 -a 359 305 8 -a 359 176 7 -a 359 179 9 -a 359 285 8 -a 360 456 8 -a 360 876 2 -a 360 90 5 -a 360 406 6 -a 360 459 5 -a 360 29 3 -a 360 792 5 -a 360 636 1 -a 360 100 8 -a 360 366 1 -a 360 7 7 -a 360 908 10 -a 360 865 9 -a 360 203 8 -a 360 694 4 -a 360 73 5 -a 360 213 9 -a 360 409 1 -a 360 440 2 -a 360 538 1 -a 360 751 10 -a 360 947 4 -a 360 418 1 -a 360 507 8 -a 360 937 4 -a 360 722 9 -a 360 682 9 -a 360 91 2 -a 360 113 10 -a 360 966 3 -a 360 71 2 -a 360 518 10 -a 360 400 10 -a 360 99 6 -a 360 286 2 -a 360 11 10 -a 360 198 2 -a 360 651 1 -a 360 17 8 -a 360 81 1 -a 360 491 1 -a 360 219 2 -a 360 775 1 -a 360 563 6 -a 360 431 5 -a 360 159 6 -a 360 420 8 -a 360 696 10 -a 360 982 2 -a 360 146 3 -a 360 618 5 -a 360 375 5 -a 360 652 4 -a 360 530 9 -a 360 73 6 -a 360 309 4 -a 360 620 7 -a 360 54 5 -a 360 422 1 -a 360 561 1 -a 360 125 1 -a 360 939 1 -a 360 961 3 -a 360 223 6 -a 360 200 7 -a 360 971 6 -a 360 421 2 -a 360 850 8 -a 360 988 7 -a 360 501 2 -a 360 317 5 -a 360 182 7 -a 360 251 2 -a 360 879 4 -a 360 613 6 -a 360 409 4 -a 360 857 6 -a 360 8 5 -a 360 80 2 -a 360 814 6 -a 360 154 4 -a 360 698 2 -a 360 165 5 -a 360 805 7 -a 360 203 8 -a 360 237 8 -a 360 90 6 -a 360 823 4 -a 360 290 7 -a 361 511 1 -a 361 359 2 -a 361 414 1 -a 361 425 6 -a 361 295 7 -a 361 637 2 -a 361 625 6 -a 361 242 4 -a 361 33 3 -a 361 450 10 -a 361 205 1 -a 361 533 8 -a 361 766 7 -a 361 386 9 -a 361 784 3 -a 361 621 5 -a 361 998 10 -a 361 168 3 -a 361 453 9 -a 361 248 3 -a 361 242 6 -a 361 135 5 -a 361 945 9 -a 361 406 8 -a 361 939 8 -a 361 123 8 -a 361 642 5 -a 361 4 8 -a 361 945 6 -a 361 932 4 -a 361 514 8 -a 361 280 1 -a 361 321 8 -a 361 939 1 -a 361 574 1 -a 361 957 10 -a 361 539 4 -a 361 815 10 -a 361 989 5 -a 361 988 10 -a 361 498 5 -a 361 730 7 -a 361 381 5 -a 361 257 2 -a 361 326 5 -a 361 354 1 -a 361 424 7 -a 361 778 7 -a 361 335 4 -a 361 671 10 -a 361 469 7 -a 361 591 4 -a 361 401 10 -a 361 384 9 -a 361 714 4 -a 361 18 7 -a 361 387 3 -a 361 634 5 -a 361 949 10 -a 361 901 2 -a 361 913 3 -a 361 246 6 -a 361 815 1 -a 361 463 2 -a 361 178 10 -a 361 329 2 -a 361 253 5 -a 361 143 6 -a 361 292 9 -a 361 248 7 -a 361 640 2 -a 361 628 1 -a 361 896 9 -a 361 322 8 -a 361 981 4 -a 361 295 4 -a 361 75 6 -a 361 292 4 -a 361 966 2 -a 361 70 5 -a 361 760 4 -a 361 532 10 -a 361 470 6 -a 361 119 10 -a 361 221 1 -a 361 487 1 -a 361 506 8 -a 361 855 10 -a 361 412 3 -a 361 382 8 -a 361 743 7 -a 361 657 6 -a 361 172 9 -a 361 181 2 -a 361 834 5 -a 361 500 9 -a 361 434 10 -a 361 976 9 -a 361 791 2 -a 362 681 3 -a 362 591 7 -a 362 788 6 -a 362 284 9 -a 362 462 6 -a 362 85 2 -a 362 240 6 -a 362 757 9 -a 362 160 6 -a 362 531 8 -a 362 698 5 -a 362 229 4 -a 362 267 7 -a 362 205 4 -a 362 698 6 -a 362 385 9 -a 362 426 10 -a 362 160 10 -a 362 890 9 -a 362 256 5 -a 362 571 8 -a 362 247 2 -a 362 998 7 -a 362 203 7 -a 362 418 1 -a 362 155 3 -a 362 13 9 -a 362 917 8 -a 362 588 4 -a 362 988 9 -a 362 684 5 -a 362 244 6 -a 362 555 1 -a 362 447 6 -a 362 527 9 -a 362 531 6 -a 362 766 1 -a 362 748 3 -a 362 690 9 -a 362 273 10 -a 362 421 6 -a 362 918 2 -a 362 539 9 -a 362 626 8 -a 362 591 1 -a 362 923 1 -a 362 27 1 -a 362 751 10 -a 362 789 9 -a 362 282 8 -a 362 297 6 -a 362 11 3 -a 362 255 8 -a 362 500 7 -a 362 429 7 -a 362 409 2 -a 362 512 3 -a 362 321 2 -a 362 996 3 -a 362 475 10 -a 362 215 8 -a 362 5 7 -a 362 426 2 -a 362 741 9 -a 362 957 9 -a 362 483 9 -a 362 744 6 -a 362 622 9 -a 362 755 2 -a 362 141 6 -a 362 516 7 -a 362 269 8 -a 362 766 4 -a 362 82 5 -a 362 167 5 -a 362 792 2 -a 362 832 1 -a 362 955 3 -a 362 49 3 -a 362 105 5 -a 362 966 3 -a 362 303 1 -a 362 604 8 -a 362 370 6 -a 362 712 1 -a 362 91 8 -a 362 690 6 -a 362 683 8 -a 362 565 5 -a 362 670 9 -a 362 898 9 -a 362 570 10 -a 362 71 9 -a 362 614 6 -a 362 566 9 -a 362 3 10 -a 362 72 10 -a 362 285 9 -a 362 625 7 -a 362 826 9 -a 362 425 4 -a 362 116 8 -a 362 70 10 -a 362 166 4 -a 363 197 10 -a 363 237 9 -a 363 957 4 -a 363 5 2 -a 363 167 8 -a 363 109 6 -a 363 108 5 -a 363 284 5 -a 363 712 8 -a 363 477 5 -a 363 995 10 -a 363 802 8 -a 363 143 1 -a 363 653 3 -a 363 342 4 -a 363 812 6 -a 363 526 4 -a 363 911 10 -a 363 882 10 -a 363 116 3 -a 363 452 4 -a 363 885 4 -a 363 187 3 -a 363 737 7 -a 363 485 6 -a 363 137 6 -a 363 600 10 -a 363 58 1 -a 363 303 5 -a 363 796 4 -a 363 294 2 -a 363 235 1 -a 363 800 9 -a 363 461 2 -a 363 216 5 -a 363 908 7 -a 363 568 2 -a 363 499 1 -a 363 595 3 -a 363 21 4 -a 363 469 10 -a 363 372 8 -a 363 163 7 -a 363 97 8 -a 363 714 5 -a 363 974 4 -a 363 623 2 -a 363 600 1 -a 363 831 7 -a 363 738 4 -a 363 28 2 -a 363 691 3 -a 363 924 3 -a 363 764 2 -a 363 151 8 -a 363 912 6 -a 363 900 3 -a 363 750 3 -a 363 970 10 -a 363 178 6 -a 363 522 9 -a 363 239 1 -a 363 413 3 -a 363 297 7 -a 363 699 10 -a 363 628 5 -a 363 181 5 -a 363 243 8 -a 363 102 6 -a 363 775 9 -a 363 263 1 -a 363 570 5 -a 363 123 2 -a 363 425 2 -a 363 666 7 -a 363 836 9 -a 363 374 9 -a 363 264 5 -a 363 411 9 -a 363 180 4 -a 363 438 2 -a 363 871 1 -a 363 901 2 -a 363 177 3 -a 363 788 2 -a 363 53 7 -a 363 747 3 -a 363 733 10 -a 363 230 8 -a 363 244 8 -a 363 972 1 -a 363 642 7 -a 363 540 5 -a 363 646 8 -a 363 245 6 -a 363 720 3 -a 363 888 8 -a 363 346 1 -a 363 471 10 -a 363 126 5 -a 363 915 5 -a 363 593 8 -a 363 550 3 -a 364 557 3 -a 364 404 4 -a 364 923 3 -a 364 820 4 -a 364 814 9 -a 364 79 6 -a 364 797 8 -a 364 228 2 -a 364 949 7 -a 364 673 6 -a 364 404 4 -a 364 945 6 -a 364 436 10 -a 364 456 3 -a 364 667 9 -a 364 145 10 -a 364 686 7 -a 364 910 3 -a 364 92 6 -a 364 303 1 -a 364 426 1 -a 364 737 1 -a 364 548 3 -a 364 121 7 -a 364 601 1 -a 364 893 10 -a 364 591 7 -a 364 726 2 -a 364 784 1 -a 364 159 6 -a 364 252 1 -a 364 316 3 -a 364 562 7 -a 364 150 5 -a 364 111 9 -a 364 352 2 -a 364 228 9 -a 364 907 9 -a 364 579 1 -a 364 152 8 -a 364 555 5 -a 364 982 1 -a 364 73 6 -a 364 991 3 -a 364 414 8 -a 364 739 9 -a 364 111 2 -a 364 75 2 -a 364 625 10 -a 364 202 2 -a 364 377 4 -a 364 26 6 -a 364 938 10 -a 364 924 9 -a 364 146 4 -a 364 514 2 -a 364 793 4 -a 364 737 5 -a 364 216 5 -a 364 552 5 -a 364 895 5 -a 364 467 2 -a 364 867 9 -a 364 433 5 -a 364 616 7 -a 364 977 3 -a 364 784 10 -a 364 844 2 -a 364 860 6 -a 364 338 1 -a 364 995 7 -a 364 390 5 -a 364 295 10 -a 364 43 4 -a 364 356 2 -a 364 708 8 -a 364 782 5 -a 364 466 1 -a 364 782 7 -a 364 382 5 -a 364 667 4 -a 364 135 8 -a 364 407 8 -a 364 581 7 -a 364 34 7 -a 364 552 9 -a 364 70 10 -a 364 826 5 -a 364 264 5 -a 364 285 10 -a 364 353 9 -a 364 135 4 -a 364 751 7 -a 365 195 6 -a 365 567 5 -a 365 343 5 -a 365 148 10 -a 365 326 2 -a 365 162 10 -a 365 663 8 -a 365 132 3 -a 365 372 10 -a 365 957 1 -a 365 175 10 -a 365 728 9 -a 365 641 5 -a 365 956 2 -a 365 169 4 -a 365 398 6 -a 365 313 9 -a 365 836 1 -a 365 532 6 -a 365 719 5 -a 365 392 6 -a 365 566 10 -a 365 246 9 -a 365 461 10 -a 365 367 10 -a 365 510 9 -a 365 746 9 -a 365 720 2 -a 365 644 7 -a 365 472 1 -a 365 914 5 -a 365 186 5 -a 365 814 7 -a 365 37 8 -a 365 511 4 -a 365 975 9 -a 365 19 7 -a 365 149 10 -a 365 83 4 -a 365 391 2 -a 365 81 5 -a 365 257 8 -a 365 94 1 -a 365 721 10 -a 365 188 1 -a 365 262 9 -a 365 95 9 -a 365 500 10 -a 365 73 3 -a 365 626 2 -a 365 194 2 -a 365 464 4 -a 365 167 8 -a 365 439 4 -a 365 925 7 -a 365 534 1 -a 365 948 1 -a 365 646 6 -a 365 229 6 -a 365 567 7 -a 365 93 9 -a 365 118 1 -a 365 752 6 -a 365 907 10 -a 365 155 4 -a 365 238 3 -a 365 857 7 -a 365 173 2 -a 365 386 1 -a 365 939 3 -a 365 563 8 -a 365 467 9 -a 365 171 10 -a 365 656 10 -a 365 163 1 -a 365 358 10 -a 365 918 8 -a 365 257 10 -a 365 857 6 -a 365 990 10 -a 365 883 8 -a 365 26 6 -a 365 430 7 -a 365 25 2 -a 365 465 9 -a 365 330 10 -a 365 558 1 -a 365 388 7 -a 365 975 8 -a 365 786 9 -a 365 955 1 -a 365 43 2 -a 365 904 6 -a 365 682 2 -a 365 949 9 -a 365 34 8 -a 365 920 6 -a 365 782 7 -a 365 206 2 -a 365 281 7 -a 365 696 4 -a 365 769 6 -a 366 747 9 -a 366 867 10 -a 366 400 6 -a 366 910 3 -a 366 200 2 -a 366 293 3 -a 366 142 3 -a 366 33 3 -a 366 259 4 -a 366 58 1 -a 366 688 8 -a 366 25 7 -a 366 522 2 -a 366 582 8 -a 366 910 4 -a 366 967 9 -a 366 344 10 -a 366 840 2 -a 366 223 6 -a 366 497 4 -a 366 934 10 -a 366 256 2 -a 366 392 4 -a 366 691 7 -a 366 461 1 -a 366 673 6 -a 366 362 4 -a 366 205 1 -a 366 395 6 -a 366 204 7 -a 366 605 1 -a 366 280 3 -a 366 404 3 -a 366 897 4 -a 366 422 1 -a 366 436 8 -a 366 131 8 -a 366 421 10 -a 366 493 9 -a 366 818 5 -a 366 445 9 -a 366 810 3 -a 366 3 4 -a 366 900 3 -a 366 752 3 -a 366 346 2 -a 366 715 8 -a 366 737 6 -a 366 568 8 -a 366 187 6 -a 366 646 4 -a 366 823 6 -a 366 579 7 -a 366 312 6 -a 366 259 4 -a 366 227 8 -a 366 673 7 -a 366 464 3 -a 366 621 2 -a 366 877 7 -a 366 44 10 -a 366 901 9 -a 366 256 1 -a 366 940 3 -a 366 298 9 -a 366 691 1 -a 366 47 1 -a 366 718 8 -a 366 159 6 -a 366 864 1 -a 366 139 5 -a 366 149 8 -a 366 650 6 -a 366 141 8 -a 366 24 5 -a 366 377 6 -a 366 486 6 -a 366 738 7 -a 366 89 7 -a 366 29 1 -a 366 925 3 -a 366 734 4 -a 366 851 1 -a 366 479 9 -a 366 21 1 -a 366 85 9 -a 366 705 8 -a 366 694 7 -a 366 548 6 -a 366 301 9 -a 366 546 6 -a 366 591 1 -a 366 177 9 -a 366 801 10 -a 366 507 8 -a 366 474 2 -a 366 467 7 -a 366 553 2 -a 366 168 7 -a 366 625 9 -a 366 392 7 -a 367 306 9 -a 367 774 3 -a 367 17 5 -a 367 446 6 -a 367 797 5 -a 367 394 5 -a 367 931 1 -a 367 511 2 -a 367 482 2 -a 367 959 7 -a 367 411 7 -a 367 192 10 -a 367 785 7 -a 367 889 2 -a 367 212 6 -a 367 869 7 -a 367 569 5 -a 367 905 1 -a 367 393 9 -a 367 869 9 -a 367 426 6 -a 367 983 1 -a 367 22 3 -a 367 202 8 -a 367 465 7 -a 367 495 5 -a 367 668 3 -a 367 662 2 -a 367 269 7 -a 367 385 2 -a 367 967 8 -a 367 18 9 -a 367 401 6 -a 367 388 2 -a 367 814 4 -a 367 794 3 -a 367 294 9 -a 367 300 10 -a 367 252 2 -a 367 228 2 -a 367 710 10 -a 367 443 3 -a 367 574 3 -a 367 654 10 -a 367 857 5 -a 367 118 10 -a 367 535 4 -a 367 225 7 -a 367 987 8 -a 367 960 9 -a 367 183 6 -a 367 138 3 -a 367 648 10 -a 367 478 5 -a 367 805 2 -a 367 640 10 -a 367 116 6 -a 367 49 5 -a 367 58 7 -a 367 66 9 -a 367 401 9 -a 367 446 10 -a 367 880 2 -a 367 170 4 -a 367 739 5 -a 367 155 9 -a 367 421 5 -a 367 967 3 -a 367 865 1 -a 367 863 8 -a 367 954 5 -a 367 414 2 -a 367 493 3 -a 367 786 3 -a 367 532 10 -a 367 3 1 -a 367 494 9 -a 367 962 8 -a 367 169 3 -a 367 477 4 -a 367 75 1 -a 367 816 2 -a 367 954 9 -a 367 880 2 -a 367 431 7 -a 367 45 1 -a 367 928 2 -a 367 431 6 -a 367 103 3 -a 367 994 9 -a 367 831 7 -a 367 548 6 -a 367 849 5 -a 367 1000 10 -a 367 262 8 -a 367 397 7 -a 368 204 3 -a 368 843 8 -a 368 235 7 -a 368 134 3 -a 368 233 2 -a 368 727 3 -a 368 919 5 -a 368 764 6 -a 368 729 3 -a 368 905 3 -a 368 233 4 -a 368 667 9 -a 368 49 4 -a 368 709 10 -a 368 741 9 -a 368 864 10 -a 368 638 5 -a 368 596 4 -a 368 270 7 -a 368 683 10 -a 368 500 8 -a 368 700 2 -a 368 785 3 -a 368 469 9 -a 368 506 4 -a 368 308 6 -a 368 293 1 -a 368 482 5 -a 368 569 7 -a 368 271 1 -a 368 878 9 -a 368 773 6 -a 368 90 7 -a 368 88 10 -a 368 906 8 -a 368 322 1 -a 368 815 9 -a 368 800 1 -a 368 61 2 -a 368 519 7 -a 368 680 10 -a 368 293 1 -a 368 161 10 -a 368 728 9 -a 368 902 4 -a 368 567 6 -a 368 614 10 -a 368 473 1 -a 368 837 4 -a 368 272 3 -a 368 972 3 -a 368 512 10 -a 368 32 4 -a 368 416 1 -a 368 339 8 -a 368 708 5 -a 368 475 3 -a 368 908 2 -a 368 979 9 -a 368 328 10 -a 368 656 10 -a 368 44 5 -a 368 415 2 -a 368 537 7 -a 368 365 2 -a 368 205 1 -a 368 312 4 -a 368 425 1 -a 368 724 10 -a 368 992 5 -a 368 717 10 -a 368 884 10 -a 368 695 8 -a 368 693 7 -a 368 761 3 -a 368 238 7 -a 368 282 7 -a 368 210 1 -a 368 50 9 -a 368 554 10 -a 368 157 9 -a 368 561 3 -a 368 585 3 -a 368 573 2 -a 368 554 7 -a 368 924 4 -a 368 256 8 -a 368 4 9 -a 368 807 5 -a 368 210 5 -a 368 331 3 -a 368 438 10 -a 368 253 5 -a 368 746 6 -a 368 974 5 -a 368 617 9 -a 368 950 8 -a 368 261 7 -a 368 17 5 -a 368 649 2 -a 368 228 8 -a 368 733 5 -a 368 509 10 -a 368 923 1 -a 368 401 3 -a 369 245 3 -a 369 136 6 -a 369 683 6 -a 369 454 10 -a 369 185 1 -a 369 212 10 -a 369 611 4 -a 369 745 8 -a 369 796 7 -a 369 159 2 -a 369 275 10 -a 369 695 9 -a 369 414 2 -a 369 278 4 -a 369 477 4 -a 369 624 5 -a 369 609 6 -a 369 914 8 -a 369 876 6 -a 369 330 5 -a 369 863 8 -a 369 469 3 -a 369 255 8 -a 369 100 8 -a 369 485 7 -a 369 904 8 -a 369 327 7 -a 369 194 3 -a 369 388 1 -a 369 225 10 -a 369 594 7 -a 369 632 7 -a 369 360 2 -a 369 252 5 -a 369 62 3 -a 369 544 4 -a 369 463 2 -a 369 672 2 -a 369 265 8 -a 369 235 7 -a 369 830 7 -a 369 539 5 -a 369 929 3 -a 369 219 4 -a 369 816 5 -a 369 382 1 -a 369 842 2 -a 369 400 8 -a 369 271 4 -a 369 694 8 -a 369 729 10 -a 369 110 5 -a 369 138 2 -a 369 984 4 -a 369 209 9 -a 369 622 4 -a 369 863 1 -a 369 535 6 -a 369 815 9 -a 369 226 5 -a 369 760 2 -a 369 385 3 -a 369 857 6 -a 369 95 6 -a 369 636 6 -a 369 918 7 -a 369 639 4 -a 369 75 7 -a 369 565 10 -a 369 903 3 -a 369 309 4 -a 369 370 10 -a 369 417 2 -a 369 213 8 -a 369 589 5 -a 369 208 7 -a 369 594 7 -a 369 406 7 -a 369 608 8 -a 369 865 3 -a 369 75 3 -a 369 312 2 -a 369 974 9 -a 369 212 8 -a 369 271 7 -a 369 158 5 -a 369 834 3 -a 369 109 4 -a 369 692 5 -a 369 624 8 -a 369 334 6 -a 369 427 7 -a 369 167 4 -a 369 522 10 -a 369 620 3 -a 370 60 10 -a 370 136 1 -a 370 694 10 -a 370 625 3 -a 370 14 6 -a 370 994 4 -a 370 430 5 -a 370 190 1 -a 370 558 5 -a 370 637 9 -a 370 784 1 -a 370 964 3 -a 370 220 3 -a 370 624 7 -a 370 14 9 -a 370 532 8 -a 370 573 1 -a 370 226 8 -a 370 802 10 -a 370 730 1 -a 370 35 9 -a 370 911 1 -a 370 397 2 -a 370 658 6 -a 370 220 3 -a 370 824 7 -a 370 642 3 -a 370 386 7 -a 370 321 4 -a 370 237 8 -a 370 446 7 -a 370 456 8 -a 370 930 4 -a 370 46 8 -a 370 469 3 -a 370 907 9 -a 370 15 7 -a 370 898 2 -a 370 72 6 -a 370 573 5 -a 370 510 6 -a 370 855 6 -a 370 512 7 -a 370 730 7 -a 370 454 6 -a 370 525 7 -a 370 237 8 -a 370 2 10 -a 370 750 1 -a 370 14 5 -a 370 731 6 -a 370 784 9 -a 370 924 4 -a 370 104 9 -a 370 418 6 -a 370 120 8 -a 370 927 10 -a 370 35 3 -a 370 505 2 -a 370 223 9 -a 370 271 8 -a 370 950 6 -a 370 678 5 -a 370 176 3 -a 370 995 10 -a 370 122 4 -a 370 58 7 -a 370 129 3 -a 370 558 1 -a 370 504 9 -a 370 984 9 -a 370 45 1 -a 370 209 8 -a 370 413 4 -a 370 569 8 -a 370 445 2 -a 370 415 2 -a 370 295 6 -a 370 459 4 -a 370 121 7 -a 370 54 5 -a 370 358 7 -a 370 224 3 -a 370 471 1 -a 370 477 1 -a 370 126 7 -a 370 505 1 -a 370 982 9 -a 371 348 5 -a 371 775 7 -a 371 907 10 -a 371 1 7 -a 371 950 8 -a 371 878 7 -a 371 122 3 -a 371 863 9 -a 371 116 1 -a 371 112 9 -a 371 396 7 -a 371 620 8 -a 371 71 8 -a 371 440 7 -a 371 828 6 -a 371 483 4 -a 371 249 2 -a 371 897 2 -a 371 278 9 -a 371 707 8 -a 371 332 6 -a 371 40 6 -a 371 217 4 -a 371 802 7 -a 371 517 1 -a 371 343 7 -a 371 283 3 -a 371 474 1 -a 371 690 3 -a 371 33 2 -a 371 356 3 -a 371 691 10 -a 371 983 9 -a 371 209 9 -a 371 812 10 -a 371 965 3 -a 371 47 8 -a 371 928 4 -a 371 52 4 -a 371 442 5 -a 371 523 2 -a 371 122 10 -a 371 881 10 -a 371 326 7 -a 371 605 1 -a 371 865 8 -a 371 574 7 -a 371 477 10 -a 371 118 7 -a 371 256 7 -a 371 470 5 -a 371 449 2 -a 371 296 3 -a 371 687 7 -a 371 227 4 -a 371 812 5 -a 371 5 1 -a 371 509 10 -a 371 261 9 -a 371 694 1 -a 371 541 2 -a 371 616 6 -a 371 360 1 -a 371 499 5 -a 371 825 10 -a 371 148 6 -a 371 440 4 -a 371 871 9 -a 371 51 1 -a 371 491 9 -a 371 289 4 -a 371 573 1 -a 371 613 6 -a 371 145 1 -a 371 898 3 -a 371 193 8 -a 371 448 8 -a 371 669 6 -a 371 103 8 -a 371 703 1 -a 371 115 9 -a 371 551 1 -a 371 998 1 -a 371 801 1 -a 371 777 6 -a 371 785 1 -a 371 805 3 -a 371 261 9 -a 371 21 2 -a 371 474 9 -a 371 802 5 -a 371 637 2 -a 371 834 1 -a 371 276 8 -a 371 437 4 -a 371 981 5 -a 371 715 5 -a 371 283 4 -a 371 7 7 -a 371 182 3 -a 372 571 4 -a 372 579 3 -a 372 794 2 -a 372 716 3 -a 372 452 4 -a 372 986 4 -a 372 700 3 -a 372 899 3 -a 372 630 3 -a 372 802 4 -a 372 578 6 -a 372 744 6 -a 372 329 2 -a 372 551 9 -a 372 520 10 -a 372 81 8 -a 372 312 10 -a 372 300 4 -a 372 342 5 -a 372 332 4 -a 372 774 1 -a 372 119 2 -a 372 968 6 -a 372 583 3 -a 372 394 4 -a 372 380 6 -a 372 539 10 -a 372 85 3 -a 372 663 4 -a 372 545 10 -a 372 266 2 -a 372 209 8 -a 372 99 6 -a 372 35 5 -a 372 924 10 -a 372 550 9 -a 372 600 8 -a 372 425 8 -a 372 625 5 -a 372 377 5 -a 372 345 3 -a 372 705 5 -a 372 528 4 -a 372 864 5 -a 372 786 7 -a 372 839 7 -a 372 140 5 -a 372 103 5 -a 372 147 2 -a 372 913 7 -a 372 221 5 -a 372 90 2 -a 372 471 1 -a 372 614 2 -a 372 470 7 -a 372 698 6 -a 372 108 5 -a 372 529 6 -a 372 963 3 -a 372 316 8 -a 372 627 1 -a 372 997 5 -a 372 216 7 -a 372 152 5 -a 372 992 8 -a 372 815 7 -a 372 576 3 -a 372 593 1 -a 372 167 5 -a 372 553 1 -a 372 937 4 -a 372 872 9 -a 372 57 2 -a 372 776 10 -a 372 633 8 -a 372 895 3 -a 372 915 8 -a 372 735 4 -a 372 17 5 -a 372 803 4 -a 372 955 8 -a 372 107 5 -a 372 249 10 -a 372 544 1 -a 372 576 10 -a 372 233 2 -a 372 218 10 -a 372 683 5 -a 372 761 6 -a 372 156 8 -a 372 998 9 -a 372 363 10 -a 372 129 10 -a 372 189 9 -a 372 515 9 -a 372 96 8 -a 372 66 2 -a 372 688 6 -a 372 146 1 -a 372 619 9 -a 372 600 7 -a 372 675 9 -a 372 352 4 -a 372 625 10 -a 372 545 6 -a 372 242 5 -a 372 335 3 -a 372 562 5 -a 372 21 3 -a 372 265 4 -a 372 668 7 -a 372 269 4 -a 372 808 4 -a 373 219 7 -a 373 502 10 -a 373 1 1 -a 373 901 3 -a 373 238 6 -a 373 157 10 -a 373 874 8 -a 373 601 5 -a 373 285 9 -a 373 39 2 -a 373 91 6 -a 373 380 6 -a 373 17 10 -a 373 156 6 -a 373 44 8 -a 373 162 1 -a 373 774 9 -a 373 643 5 -a 373 154 6 -a 373 424 8 -a 373 994 4 -a 373 778 9 -a 373 969 3 -a 373 212 3 -a 373 88 2 -a 373 506 9 -a 373 232 7 -a 373 352 10 -a 373 149 4 -a 373 500 4 -a 373 136 9 -a 373 367 8 -a 373 136 2 -a 373 243 5 -a 373 215 7 -a 373 292 10 -a 373 92 1 -a 373 815 5 -a 373 576 4 -a 373 130 9 -a 373 905 7 -a 373 956 1 -a 373 147 10 -a 373 36 3 -a 373 999 1 -a 373 308 4 -a 373 810 8 -a 373 617 8 -a 373 462 5 -a 373 209 3 -a 373 587 1 -a 373 215 2 -a 373 153 1 -a 373 798 8 -a 373 303 9 -a 373 658 7 -a 373 5 6 -a 373 654 10 -a 373 806 9 -a 373 504 2 -a 373 789 10 -a 373 148 2 -a 373 481 8 -a 373 925 9 -a 373 390 4 -a 373 695 2 -a 373 192 3 -a 373 482 3 -a 373 485 7 -a 373 768 6 -a 373 611 2 -a 373 365 10 -a 373 699 4 -a 373 757 6 -a 373 400 4 -a 373 673 6 -a 373 41 6 -a 373 185 2 -a 373 265 9 -a 373 502 7 -a 373 394 2 -a 373 851 6 -a 373 716 3 -a 373 546 4 -a 373 624 6 -a 373 180 6 -a 373 628 7 -a 373 648 8 -a 373 985 9 -a 373 108 5 -a 373 412 10 -a 373 109 10 -a 374 588 4 -a 374 312 8 -a 374 498 9 -a 374 258 2 -a 374 504 6 -a 374 979 1 -a 374 742 9 -a 374 247 6 -a 374 566 6 -a 374 82 10 -a 374 945 4 -a 374 298 9 -a 374 481 2 -a 374 593 7 -a 374 338 6 -a 374 666 6 -a 374 857 10 -a 374 839 4 -a 374 35 9 -a 374 684 8 -a 374 531 7 -a 374 580 6 -a 374 283 7 -a 374 524 5 -a 374 759 8 -a 374 911 4 -a 374 147 1 -a 374 720 10 -a 374 559 5 -a 374 828 5 -a 374 581 6 -a 374 870 6 -a 374 301 4 -a 374 838 4 -a 374 349 9 -a 374 256 9 -a 374 555 2 -a 374 595 7 -a 374 821 7 -a 374 636 5 -a 374 515 5 -a 374 94 10 -a 374 92 2 -a 374 83 6 -a 374 432 2 -a 374 757 2 -a 374 940 2 -a 374 246 3 -a 374 791 2 -a 374 599 6 -a 374 776 5 -a 374 347 2 -a 374 881 9 -a 374 276 7 -a 374 81 10 -a 374 767 1 -a 374 422 1 -a 374 800 8 -a 374 760 7 -a 374 980 6 -a 374 603 5 -a 374 316 10 -a 374 826 2 -a 374 904 4 -a 374 129 5 -a 374 150 3 -a 374 135 9 -a 374 683 6 -a 374 745 2 -a 374 955 10 -a 374 294 7 -a 374 235 4 -a 374 24 1 -a 374 386 3 -a 374 318 1 -a 374 455 8 -a 374 118 1 -a 374 233 2 -a 374 701 2 -a 374 909 6 -a 374 831 7 -a 374 452 8 -a 374 231 5 -a 374 687 6 -a 374 727 2 -a 374 311 10 -a 374 430 1 -a 374 125 2 -a 374 87 4 -a 374 165 6 -a 374 80 6 -a 374 689 7 -a 374 481 8 -a 374 905 6 -a 374 568 6 -a 374 609 5 -a 374 31 4 -a 374 702 4 -a 374 268 10 -a 374 775 8 -a 374 632 6 -a 374 561 10 -a 374 656 4 -a 374 946 7 -a 374 302 4 -a 374 86 4 -a 374 40 6 -a 374 534 10 -a 374 786 5 -a 374 948 10 -a 374 340 4 -a 374 214 8 -a 374 154 10 -a 374 3 4 -a 374 940 5 -a 374 464 6 -a 374 432 8 -a 374 40 8 -a 374 550 9 -a 374 596 1 -a 374 120 8 -a 375 215 9 -a 375 52 9 -a 375 782 6 -a 375 661 2 -a 375 30 3 -a 375 460 5 -a 375 928 9 -a 375 804 1 -a 375 67 5 -a 375 464 5 -a 375 789 4 -a 375 722 3 -a 375 386 9 -a 375 66 2 -a 375 808 6 -a 375 425 9 -a 375 600 4 -a 375 569 1 -a 375 348 9 -a 375 939 1 -a 375 782 3 -a 375 501 1 -a 375 941 9 -a 375 698 6 -a 375 964 10 -a 375 348 9 -a 375 737 8 -a 375 490 1 -a 375 944 8 -a 375 856 9 -a 375 704 8 -a 375 995 2 -a 375 856 4 -a 375 461 8 -a 375 631 3 -a 375 885 8 -a 375 920 7 -a 375 534 7 -a 375 665 2 -a 375 987 1 -a 375 998 4 -a 375 429 9 -a 375 684 2 -a 375 359 4 -a 375 494 3 -a 375 467 10 -a 375 783 3 -a 375 69 8 -a 375 12 6 -a 375 106 6 -a 375 793 9 -a 375 606 7 -a 375 924 7 -a 375 466 4 -a 375 545 5 -a 375 248 5 -a 375 179 3 -a 375 10 8 -a 375 167 2 -a 375 10 6 -a 375 713 9 -a 375 137 5 -a 375 865 8 -a 375 150 3 -a 375 768 7 -a 375 726 2 -a 375 45 2 -a 375 277 7 -a 375 366 7 -a 375 7 8 -a 375 250 2 -a 375 794 8 -a 375 691 3 -a 375 608 5 -a 375 263 8 -a 375 133 2 -a 375 366 1 -a 375 332 3 -a 375 144 6 -a 375 471 8 -a 375 315 8 -a 375 937 10 -a 375 52 7 -a 375 214 4 -a 375 378 6 -a 375 597 8 -a 375 461 2 -a 375 556 7 -a 375 606 6 -a 375 627 6 -a 375 566 3 -a 375 295 5 -a 375 764 1 -a 375 406 7 -a 375 444 1 -a 375 507 5 -a 375 107 1 -a 376 488 7 -a 376 783 8 -a 376 472 3 -a 376 495 5 -a 376 9 6 -a 376 241 10 -a 376 161 5 -a 376 616 7 -a 376 504 1 -a 376 293 5 -a 376 982 7 -a 376 835 10 -a 376 437 8 -a 376 428 4 -a 376 125 1 -a 376 349 10 -a 376 480 8 -a 376 338 7 -a 376 726 8 -a 376 52 6 -a 376 799 5 -a 376 258 9 -a 376 657 10 -a 376 401 5 -a 376 823 6 -a 376 951 1 -a 376 140 10 -a 376 204 10 -a 376 370 7 -a 376 646 4 -a 376 311 4 -a 376 858 9 -a 376 405 2 -a 376 782 1 -a 376 328 8 -a 376 413 2 -a 376 488 7 -a 376 4 3 -a 376 502 2 -a 376 780 1 -a 376 985 1 -a 376 312 7 -a 376 192 2 -a 376 389 6 -a 376 436 10 -a 376 540 8 -a 376 868 5 -a 376 773 9 -a 376 242 5 -a 376 919 1 -a 376 547 3 -a 376 499 4 -a 376 551 4 -a 376 948 9 -a 376 297 7 -a 376 478 10 -a 376 63 8 -a 376 500 3 -a 376 847 9 -a 376 709 2 -a 376 810 3 -a 376 680 1 -a 376 89 10 -a 376 568 5 -a 376 501 6 -a 376 566 2 -a 376 470 2 -a 376 504 10 -a 376 43 3 -a 376 226 6 -a 376 465 6 -a 376 354 6 -a 376 417 10 -a 376 853 4 -a 376 789 8 -a 376 957 9 -a 376 696 1 -a 376 537 3 -a 376 174 5 -a 376 590 8 -a 377 60 8 -a 377 672 1 -a 377 116 4 -a 377 968 3 -a 377 593 3 -a 377 45 5 -a 377 443 5 -a 377 416 7 -a 377 753 10 -a 377 229 7 -a 377 71 5 -a 377 841 8 -a 377 796 9 -a 377 54 4 -a 377 317 9 -a 377 337 6 -a 377 523 5 -a 377 821 1 -a 377 379 3 -a 377 748 1 -a 377 261 2 -a 377 732 3 -a 377 141 3 -a 377 89 2 -a 377 496 7 -a 377 73 8 -a 377 784 8 -a 377 8 8 -a 377 246 7 -a 377 349 10 -a 377 67 3 -a 377 917 2 -a 377 464 5 -a 377 49 6 -a 377 860 1 -a 377 33 5 -a 377 94 7 -a 377 278 6 -a 377 448 2 -a 377 846 3 -a 377 506 9 -a 377 518 9 -a 377 663 5 -a 377 277 5 -a 377 571 6 -a 377 979 9 -a 377 613 7 -a 377 70 6 -a 377 775 10 -a 377 991 2 -a 377 817 6 -a 377 11 4 -a 377 698 9 -a 377 957 1 -a 377 99 4 -a 377 169 9 -a 377 5 5 -a 377 882 10 -a 377 177 6 -a 377 250 8 -a 377 206 4 -a 377 243 3 -a 377 142 2 -a 377 670 8 -a 377 292 6 -a 377 702 3 -a 377 385 2 -a 377 255 5 -a 377 125 8 -a 377 206 5 -a 377 760 7 -a 377 642 4 -a 377 868 2 -a 377 13 7 -a 377 189 8 -a 377 823 4 -a 377 625 4 -a 377 258 6 -a 377 573 5 -a 377 592 1 -a 377 50 9 -a 377 584 1 -a 377 265 10 -a 377 682 8 -a 377 434 6 -a 377 540 6 -a 377 610 3 -a 377 237 3 -a 377 745 4 -a 377 852 2 -a 377 378 10 -a 377 390 6 -a 377 119 9 -a 377 355 5 -a 377 67 3 -a 377 503 1 -a 377 609 1 -a 377 191 3 -a 377 709 9 -a 377 344 2 -a 377 833 7 -a 377 552 3 -a 377 356 5 -a 377 350 2 -a 377 981 7 -a 377 254 3 -a 377 923 8 -a 377 548 3 -a 377 303 1 -a 377 482 10 -a 377 812 3 -a 377 285 8 -a 377 139 7 -a 377 221 7 -a 377 272 4 -a 377 678 9 -a 377 830 7 -a 377 508 4 -a 377 399 6 -a 377 658 10 -a 377 885 5 -a 377 788 7 -a 377 776 7 -a 377 215 8 -a 377 855 5 -a 377 255 9 -a 377 823 5 -a 377 21 5 -a 377 963 5 -a 377 143 4 -a 377 853 7 -a 377 490 5 -a 378 498 3 -a 378 849 2 -a 378 840 7 -a 378 454 2 -a 378 78 1 -a 378 738 2 -a 378 381 7 -a 378 195 10 -a 378 789 7 -a 378 665 6 -a 378 333 6 -a 378 936 10 -a 378 815 1 -a 378 419 1 -a 378 385 4 -a 378 448 6 -a 378 280 5 -a 378 148 8 -a 378 199 9 -a 378 494 3 -a 378 453 4 -a 378 293 7 -a 378 391 2 -a 378 435 3 -a 378 851 3 -a 378 881 9 -a 378 932 3 -a 378 676 5 -a 378 696 10 -a 378 362 2 -a 378 753 8 -a 378 409 5 -a 378 338 7 -a 378 109 1 -a 378 603 1 -a 378 102 2 -a 378 774 2 -a 378 935 1 -a 378 87 5 -a 378 685 7 -a 378 921 5 -a 378 901 8 -a 378 80 3 -a 378 281 5 -a 378 324 4 -a 378 359 1 -a 378 429 2 -a 378 522 7 -a 378 852 9 -a 378 406 9 -a 378 975 3 -a 378 120 4 -a 378 404 5 -a 378 341 3 -a 378 554 6 -a 378 231 3 -a 378 197 7 -a 378 462 4 -a 378 906 7 -a 378 892 5 -a 378 823 7 -a 378 634 3 -a 378 276 9 -a 378 136 2 -a 378 743 9 -a 378 878 5 -a 378 238 8 -a 378 492 2 -a 378 789 1 -a 378 324 6 -a 378 152 4 -a 378 685 7 -a 378 200 9 -a 378 231 10 -a 378 966 3 -a 378 523 6 -a 378 589 2 -a 378 370 10 -a 378 20 2 -a 378 417 2 -a 378 775 8 -a 378 994 1 -a 378 536 5 -a 378 155 3 -a 378 311 7 -a 378 66 1 -a 378 385 1 -a 378 507 7 -a 378 527 4 -a 378 266 2 -a 378 375 4 -a 378 325 10 -a 378 899 3 -a 378 650 9 -a 378 460 1 -a 378 617 5 -a 378 504 2 -a 379 697 1 -a 379 84 4 -a 379 268 3 -a 379 236 2 -a 379 952 2 -a 379 195 9 -a 379 466 1 -a 379 893 2 -a 379 717 7 -a 379 31 7 -a 379 238 1 -a 379 737 2 -a 379 447 8 -a 379 706 2 -a 379 982 5 -a 379 143 2 -a 379 23 1 -a 379 527 5 -a 379 499 3 -a 379 549 7 -a 379 792 6 -a 379 873 5 -a 379 873 7 -a 379 666 6 -a 379 498 6 -a 379 309 6 -a 379 259 7 -a 379 342 10 -a 379 244 8 -a 379 577 5 -a 379 172 8 -a 379 171 9 -a 379 19 9 -a 379 40 10 -a 379 888 5 -a 379 49 6 -a 379 278 1 -a 379 600 2 -a 379 495 3 -a 379 266 2 -a 379 281 1 -a 379 452 4 -a 379 408 6 -a 379 273 9 -a 379 475 3 -a 379 934 5 -a 379 771 1 -a 379 701 1 -a 379 619 5 -a 379 872 2 -a 379 342 9 -a 379 92 8 -a 379 156 4 -a 379 600 3 -a 379 69 10 -a 379 136 3 -a 379 942 3 -a 379 312 7 -a 379 112 6 -a 379 494 4 -a 379 483 6 -a 379 283 8 -a 379 512 1 -a 379 523 9 -a 379 146 7 -a 379 560 2 -a 379 800 8 -a 379 745 2 -a 379 30 6 -a 379 41 10 -a 379 1 7 -a 379 482 10 -a 379 448 5 -a 379 273 6 -a 379 956 6 -a 379 357 2 -a 379 19 2 -a 379 954 4 -a 379 33 5 -a 379 637 10 -a 379 801 10 -a 379 374 10 -a 379 729 8 -a 379 956 5 -a 379 974 1 -a 379 797 1 -a 379 68 8 -a 380 891 6 -a 380 84 2 -a 380 179 7 -a 380 360 5 -a 380 567 6 -a 380 461 9 -a 380 872 10 -a 380 65 4 -a 380 606 7 -a 380 407 9 -a 380 864 4 -a 380 326 7 -a 380 437 6 -a 380 904 6 -a 380 327 2 -a 380 918 7 -a 380 327 7 -a 380 599 8 -a 380 849 6 -a 380 683 6 -a 380 618 7 -a 380 778 10 -a 380 715 8 -a 380 230 4 -a 380 555 1 -a 380 64 6 -a 380 958 6 -a 380 486 9 -a 380 13 4 -a 380 730 2 -a 380 553 5 -a 380 903 7 -a 380 814 6 -a 380 732 6 -a 380 239 2 -a 380 356 8 -a 380 168 4 -a 380 86 5 -a 380 420 6 -a 380 774 9 -a 380 492 3 -a 380 259 5 -a 380 75 7 -a 380 928 5 -a 380 138 5 -a 380 401 4 -a 380 821 4 -a 380 464 10 -a 380 1000 6 -a 380 645 8 -a 380 122 7 -a 380 593 6 -a 380 399 2 -a 380 836 1 -a 380 822 7 -a 380 953 4 -a 380 899 9 -a 380 756 8 -a 380 414 6 -a 380 912 3 -a 380 461 1 -a 380 967 3 -a 380 790 6 -a 380 250 4 -a 380 674 2 -a 380 4 2 -a 380 605 2 -a 380 841 9 -a 380 89 8 -a 380 590 5 -a 380 581 5 -a 380 258 7 -a 380 665 10 -a 380 484 6 -a 380 395 8 -a 380 41 1 -a 380 281 2 -a 380 858 3 -a 380 16 2 -a 380 925 1 -a 380 979 9 -a 380 608 10 -a 380 299 6 -a 380 790 5 -a 380 406 8 -a 380 227 9 -a 380 665 6 -a 380 137 10 -a 380 641 9 -a 380 552 5 -a 380 597 10 -a 380 583 6 -a 380 317 3 -a 380 847 10 -a 380 232 7 -a 380 321 2 -a 380 427 1 -a 380 48 7 -a 380 409 8 -a 380 427 8 -a 380 638 10 -a 380 989 8 -a 380 684 4 -a 380 278 4 -a 380 449 4 -a 380 55 9 -a 380 318 4 -a 381 729 9 -a 381 912 2 -a 381 334 9 -a 381 629 8 -a 381 867 6 -a 381 941 3 -a 381 928 3 -a 381 632 3 -a 381 322 6 -a 381 130 2 -a 381 272 10 -a 381 458 1 -a 381 770 10 -a 381 823 4 -a 381 31 8 -a 381 328 3 -a 381 116 3 -a 381 877 10 -a 381 559 8 -a 381 436 1 -a 381 279 4 -a 381 607 7 -a 381 844 7 -a 381 705 9 -a 381 220 9 -a 381 809 2 -a 381 365 10 -a 381 497 2 -a 381 233 9 -a 381 419 3 -a 381 814 9 -a 381 961 5 -a 381 306 2 -a 381 123 6 -a 381 565 4 -a 381 148 5 -a 381 40 1 -a 381 468 7 -a 381 780 10 -a 381 361 10 -a 381 598 4 -a 381 27 10 -a 381 819 8 -a 381 343 8 -a 381 850 4 -a 381 849 5 -a 381 671 10 -a 381 965 1 -a 381 701 6 -a 381 205 2 -a 381 376 2 -a 381 979 4 -a 381 811 1 -a 381 195 7 -a 381 660 6 -a 381 6 10 -a 381 502 7 -a 381 211 1 -a 381 418 8 -a 381 292 10 -a 381 147 4 -a 381 723 3 -a 381 414 3 -a 381 712 7 -a 381 871 5 -a 381 453 2 -a 381 155 1 -a 381 626 3 -a 381 814 5 -a 381 752 1 -a 381 652 10 -a 381 608 10 -a 381 71 10 -a 381 477 4 -a 381 432 8 -a 381 741 2 -a 381 417 2 -a 381 108 6 -a 381 945 3 -a 381 792 6 -a 381 62 9 -a 381 732 9 -a 381 987 4 -a 381 721 5 -a 381 737 3 -a 381 965 10 -a 381 720 4 -a 381 215 2 -a 381 152 5 -a 381 113 2 -a 382 506 9 -a 382 298 2 -a 382 836 9 -a 382 919 2 -a 382 682 2 -a 382 348 3 -a 382 140 5 -a 382 283 9 -a 382 137 2 -a 382 891 7 -a 382 934 2 -a 382 744 7 -a 382 961 7 -a 382 387 10 -a 382 151 1 -a 382 677 4 -a 382 803 10 -a 382 258 8 -a 382 598 7 -a 382 571 6 -a 382 319 5 -a 382 305 6 -a 382 533 7 -a 382 16 8 -a 382 17 3 -a 382 473 1 -a 382 735 4 -a 382 231 7 -a 382 624 2 -a 382 848 9 -a 382 736 5 -a 382 922 8 -a 382 659 8 -a 382 631 8 -a 382 906 10 -a 382 316 1 -a 382 978 3 -a 382 21 6 -a 382 598 7 -a 382 90 4 -a 382 912 2 -a 382 507 3 -a 382 833 10 -a 382 848 8 -a 382 893 4 -a 382 983 9 -a 382 501 10 -a 382 672 3 -a 382 216 8 -a 382 74 4 -a 382 218 8 -a 382 534 10 -a 382 378 2 -a 382 750 3 -a 382 549 2 -a 382 394 8 -a 382 198 8 -a 382 260 10 -a 382 625 4 -a 382 822 3 -a 382 83 9 -a 382 336 1 -a 382 719 2 -a 382 741 5 -a 382 966 2 -a 382 600 10 -a 382 32 6 -a 382 919 2 -a 382 621 8 -a 382 629 1 -a 382 508 1 -a 382 111 2 -a 382 816 3 -a 382 331 3 -a 382 774 7 -a 382 831 5 -a 382 651 2 -a 382 989 10 -a 382 904 10 -a 382 868 10 -a 382 499 5 -a 382 257 5 -a 382 593 9 -a 382 23 5 -a 382 651 2 -a 382 790 2 -a 382 282 3 -a 382 251 10 -a 382 587 5 -a 382 364 10 -a 382 586 10 -a 382 281 6 -a 382 80 6 -a 382 528 9 -a 382 881 2 -a 382 111 3 -a 382 422 3 -a 382 477 8 -a 382 739 10 -a 382 406 6 -a 382 984 5 -a 382 850 4 -a 382 197 9 -a 382 290 8 -a 382 829 3 -a 382 971 1 -a 382 97 1 -a 382 455 10 -a 382 935 3 -a 382 1000 2 -a 382 298 9 -a 382 409 5 -a 382 233 10 -a 382 890 7 -a 382 432 3 -a 382 883 7 -a 382 655 3 -a 382 713 10 -a 382 109 7 -a 383 218 9 -a 383 53 6 -a 383 694 10 -a 383 498 1 -a 383 132 3 -a 383 197 6 -a 383 354 8 -a 383 243 5 -a 383 619 1 -a 383 830 8 -a 383 981 6 -a 383 789 5 -a 383 806 2 -a 383 196 1 -a 383 55 3 -a 383 610 5 -a 383 142 5 -a 383 151 2 -a 383 40 4 -a 383 53 5 -a 383 126 9 -a 383 337 1 -a 383 461 4 -a 383 358 2 -a 383 202 6 -a 383 892 2 -a 383 216 6 -a 383 857 5 -a 383 581 1 -a 383 324 9 -a 383 50 2 -a 383 633 4 -a 383 547 8 -a 383 764 8 -a 383 190 9 -a 383 901 1 -a 383 808 3 -a 383 706 8 -a 383 963 6 -a 383 807 1 -a 383 471 7 -a 383 744 2 -a 383 525 4 -a 383 330 9 -a 383 120 8 -a 383 675 4 -a 383 369 9 -a 383 172 10 -a 383 800 10 -a 383 706 10 -a 383 633 5 -a 383 134 4 -a 383 907 8 -a 383 500 9 -a 383 349 8 -a 383 739 9 -a 383 56 2 -a 383 673 6 -a 383 788 1 -a 383 688 9 -a 383 666 8 -a 383 311 1 -a 383 428 1 -a 383 855 7 -a 383 187 7 -a 383 409 3 -a 383 639 5 -a 383 892 4 -a 383 347 7 -a 383 421 2 -a 383 338 5 -a 383 67 7 -a 383 399 10 -a 383 862 9 -a 383 396 10 -a 383 519 8 -a 383 512 9 -a 383 764 4 -a 383 690 9 -a 383 288 4 -a 383 445 7 -a 383 298 4 -a 383 421 9 -a 383 328 10 -a 383 798 4 -a 383 769 1 -a 383 42 3 -a 384 853 4 -a 384 417 3 -a 384 830 9 -a 384 517 2 -a 384 58 4 -a 384 116 8 -a 384 944 4 -a 384 913 2 -a 384 302 8 -a 384 328 6 -a 384 527 2 -a 384 169 9 -a 384 675 6 -a 384 947 3 -a 384 507 10 -a 384 741 9 -a 384 322 3 -a 384 344 10 -a 384 112 3 -a 384 840 10 -a 384 856 9 -a 384 875 6 -a 384 505 8 -a 384 119 3 -a 384 296 3 -a 384 803 8 -a 384 539 10 -a 384 623 9 -a 384 576 5 -a 384 283 7 -a 384 664 6 -a 384 404 6 -a 384 700 2 -a 384 469 9 -a 384 920 1 -a 384 757 10 -a 384 584 3 -a 384 839 7 -a 384 645 2 -a 384 885 8 -a 384 143 5 -a 384 147 1 -a 384 30 8 -a 384 817 6 -a 384 70 4 -a 384 536 9 -a 384 533 10 -a 384 391 8 -a 384 879 2 -a 384 644 9 -a 384 206 2 -a 384 710 10 -a 384 494 1 -a 384 710 1 -a 384 828 3 -a 384 789 1 -a 384 488 3 -a 384 342 7 -a 384 387 10 -a 384 39 9 -a 384 625 5 -a 384 27 4 -a 384 443 3 -a 384 300 4 -a 384 495 3 -a 384 338 2 -a 384 32 3 -a 384 55 10 -a 384 153 1 -a 384 677 10 -a 384 939 10 -a 384 295 8 -a 384 823 3 -a 384 968 8 -a 384 87 3 -a 384 892 8 -a 384 479 8 -a 384 619 4 -a 384 258 8 -a 384 334 5 -a 384 238 5 -a 384 463 8 -a 384 19 9 -a 384 731 2 -a 384 149 5 -a 384 847 9 -a 384 496 6 -a 384 636 4 -a 384 164 5 -a 384 882 6 -a 384 675 5 -a 384 788 9 -a 384 908 6 -a 384 93 10 -a 384 63 3 -a 384 379 9 -a 384 430 2 -a 384 95 7 -a 384 433 8 -a 384 582 6 -a 384 771 5 -a 384 347 7 -a 384 876 10 -a 384 569 10 -a 384 291 5 -a 384 962 8 -a 384 437 8 -a 384 769 1 -a 384 556 2 -a 384 694 1 -a 384 78 6 -a 384 793 6 -a 385 133 5 -a 385 97 3 -a 385 500 4 -a 385 281 7 -a 385 943 3 -a 385 995 2 -a 385 916 8 -a 385 82 8 -a 385 852 5 -a 385 566 1 -a 385 870 9 -a 385 736 8 -a 385 658 7 -a 385 932 6 -a 385 90 5 -a 385 64 5 -a 385 2 7 -a 385 522 5 -a 385 645 7 -a 385 772 2 -a 385 868 3 -a 385 497 4 -a 385 317 7 -a 385 134 4 -a 385 434 8 -a 385 753 7 -a 385 903 3 -a 385 990 10 -a 385 422 2 -a 385 980 5 -a 385 758 5 -a 385 554 7 -a 385 52 4 -a 385 233 9 -a 385 834 6 -a 385 994 8 -a 385 203 4 -a 385 726 1 -a 385 52 3 -a 385 31 7 -a 385 267 2 -a 385 921 3 -a 385 766 5 -a 385 925 8 -a 385 828 8 -a 385 855 3 -a 385 988 9 -a 385 830 7 -a 385 352 2 -a 385 608 6 -a 385 577 1 -a 385 195 3 -a 385 80 10 -a 385 893 5 -a 385 329 9 -a 385 514 5 -a 385 621 1 -a 385 207 9 -a 385 479 1 -a 385 19 1 -a 385 162 7 -a 385 212 3 -a 385 572 8 -a 385 214 9 -a 385 445 3 -a 385 382 10 -a 385 183 5 -a 385 647 5 -a 385 83 4 -a 385 234 6 -a 385 677 5 -a 385 349 7 -a 385 130 5 -a 385 418 2 -a 385 249 7 -a 385 958 4 -a 385 248 7 -a 385 212 6 -a 385 763 6 -a 385 599 9 -a 385 820 3 -a 385 315 2 -a 385 794 7 -a 385 899 8 -a 385 184 6 -a 385 98 10 -a 385 388 1 -a 385 804 9 -a 385 304 4 -a 385 866 10 -a 385 822 2 -a 385 465 6 -a 385 54 5 -a 385 370 3 -a 385 678 8 -a 385 498 4 -a 385 751 7 -a 385 861 6 -a 385 120 3 -a 385 833 3 -a 385 70 4 -a 385 797 7 -a 385 157 2 -a 385 200 9 -a 385 190 4 -a 385 406 1 -a 385 133 8 -a 386 438 7 -a 386 617 3 -a 386 895 5 -a 386 12 5 -a 386 412 3 -a 386 185 7 -a 386 805 7 -a 386 287 10 -a 386 368 4 -a 386 902 10 -a 386 674 10 -a 386 148 7 -a 386 181 5 -a 386 516 6 -a 386 969 9 -a 386 646 3 -a 386 569 1 -a 386 314 5 -a 386 299 9 -a 386 42 8 -a 386 40 10 -a 386 135 4 -a 386 161 9 -a 386 872 1 -a 386 205 10 -a 386 957 8 -a 386 5 10 -a 386 404 1 -a 386 123 7 -a 386 410 10 -a 386 536 10 -a 386 560 8 -a 386 2 3 -a 386 406 3 -a 386 571 3 -a 386 414 9 -a 386 590 8 -a 386 352 8 -a 386 700 1 -a 386 958 10 -a 386 229 8 -a 386 349 5 -a 386 81 8 -a 386 410 1 -a 386 864 3 -a 386 25 5 -a 386 31 1 -a 386 408 8 -a 386 339 8 -a 386 329 8 -a 386 449 8 -a 386 378 7 -a 386 464 7 -a 386 610 3 -a 386 226 8 -a 386 668 10 -a 386 542 2 -a 386 230 10 -a 386 47 1 -a 386 664 4 -a 386 639 10 -a 386 582 2 -a 386 199 2 -a 386 640 3 -a 386 987 9 -a 386 770 1 -a 386 29 3 -a 386 552 8 -a 386 97 7 -a 386 728 9 -a 386 485 4 -a 386 325 4 -a 386 53 5 -a 386 565 9 -a 386 734 5 -a 386 916 3 -a 386 590 4 -a 386 764 3 -a 386 300 7 -a 386 928 1 -a 386 69 4 -a 386 748 3 -a 386 281 7 -a 386 532 3 -a 386 333 9 -a 386 506 10 -a 386 175 1 -a 386 875 1 -a 386 735 8 -a 386 221 4 -a 386 514 5 -a 386 349 3 -a 386 802 3 -a 386 713 7 -a 386 989 5 -a 386 764 1 -a 386 458 4 -a 386 291 3 -a 387 554 5 -a 387 721 6 -a 387 776 10 -a 387 878 7 -a 387 773 1 -a 387 316 10 -a 387 588 9 -a 387 664 3 -a 387 905 9 -a 387 327 10 -a 387 963 4 -a 387 808 2 -a 387 395 1 -a 387 687 5 -a 387 65 10 -a 387 926 9 -a 387 570 9 -a 387 76 10 -a 387 869 7 -a 387 281 1 -a 387 296 7 -a 387 359 10 -a 387 629 7 -a 387 73 3 -a 387 47 4 -a 387 593 2 -a 387 836 3 -a 387 504 10 -a 387 586 4 -a 387 103 10 -a 387 33 2 -a 387 282 5 -a 387 878 7 -a 387 910 7 -a 387 30 7 -a 387 169 3 -a 387 473 2 -a 387 693 3 -a 387 50 1 -a 387 800 10 -a 387 632 1 -a 387 857 10 -a 387 170 9 -a 387 294 10 -a 387 921 1 -a 387 72 7 -a 387 288 2 -a 387 467 5 -a 387 147 9 -a 387 133 5 -a 387 747 6 -a 387 443 3 -a 387 491 4 -a 387 351 10 -a 387 515 10 -a 387 537 10 -a 387 944 7 -a 387 327 8 -a 387 16 5 -a 387 505 2 -a 387 429 1 -a 387 48 4 -a 387 786 8 -a 387 282 9 -a 387 957 4 -a 387 815 2 -a 387 450 6 -a 387 406 6 -a 387 483 7 -a 387 499 4 -a 387 181 6 -a 387 90 5 -a 387 332 10 -a 387 350 5 -a 387 383 10 -a 387 228 4 -a 387 421 6 -a 387 671 4 -a 387 694 6 -a 387 568 5 -a 387 803 1 -a 387 416 10 -a 387 269 6 -a 387 767 5 -a 387 500 5 -a 387 805 6 -a 387 686 8 -a 387 826 7 -a 387 820 3 -a 387 166 6 -a 387 230 2 -a 387 867 1 -a 387 951 7 -a 387 511 5 -a 387 799 6 -a 387 741 8 -a 387 961 2 -a 387 180 1 -a 387 199 3 -a 387 435 2 -a 387 360 8 -a 387 289 2 -a 387 766 7 -a 387 710 6 -a 387 671 6 -a 387 994 1 -a 387 106 10 -a 387 317 10 -a 387 663 6 -a 387 673 10 -a 387 95 10 -a 388 55 7 -a 388 658 8 -a 388 363 5 -a 388 821 2 -a 388 134 7 -a 388 143 1 -a 388 482 9 -a 388 959 7 -a 388 962 9 -a 388 647 4 -a 388 165 6 -a 388 804 8 -a 388 573 1 -a 388 675 1 -a 388 579 10 -a 388 289 5 -a 388 611 10 -a 388 758 3 -a 388 487 1 -a 388 22 8 -a 388 94 6 -a 388 775 10 -a 388 787 2 -a 388 803 6 -a 388 422 7 -a 388 756 3 -a 388 908 4 -a 388 738 7 -a 388 395 7 -a 388 557 3 -a 388 833 3 -a 388 449 3 -a 388 190 2 -a 388 171 7 -a 388 245 6 -a 388 323 7 -a 388 314 9 -a 388 726 7 -a 388 258 6 -a 388 251 2 -a 388 348 10 -a 388 422 7 -a 388 31 6 -a 388 920 7 -a 388 72 10 -a 388 609 10 -a 388 184 2 -a 388 683 1 -a 388 342 2 -a 388 670 8 -a 388 704 5 -a 388 435 7 -a 388 421 6 -a 388 466 4 -a 388 213 3 -a 388 842 5 -a 388 198 5 -a 388 97 5 -a 388 555 8 -a 388 592 8 -a 388 653 6 -a 388 363 10 -a 388 16 8 -a 388 842 1 -a 388 534 9 -a 388 260 7 -a 388 141 6 -a 388 847 9 -a 388 985 7 -a 388 398 7 -a 388 73 5 -a 388 308 4 -a 388 819 9 -a 388 103 7 -a 388 203 9 -a 388 890 7 -a 388 711 3 -a 388 386 3 -a 388 548 6 -a 388 29 7 -a 388 31 3 -a 388 227 3 -a 388 463 6 -a 388 451 2 -a 388 693 8 -a 388 676 7 -a 388 268 1 -a 388 890 2 -a 388 772 9 -a 388 823 9 -a 388 457 2 -a 388 400 4 -a 388 161 3 -a 388 472 6 -a 388 217 10 -a 388 694 5 -a 388 731 2 -a 388 357 4 -a 388 516 9 -a 388 691 3 -a 388 754 1 -a 388 589 9 -a 388 998 8 -a 388 548 3 -a 389 691 6 -a 389 176 4 -a 389 414 7 -a 389 378 8 -a 389 561 1 -a 389 961 2 -a 389 406 5 -a 389 591 6 -a 389 164 1 -a 389 868 10 -a 389 18 2 -a 389 856 5 -a 389 519 5 -a 389 285 9 -a 389 721 7 -a 389 266 8 -a 389 83 10 -a 389 153 7 -a 389 665 8 -a 389 244 3 -a 389 624 2 -a 389 882 2 -a 389 937 1 -a 389 330 2 -a 389 214 4 -a 389 429 5 -a 389 968 3 -a 389 993 4 -a 389 491 1 -a 389 683 4 -a 389 144 4 -a 389 904 5 -a 389 36 2 -a 389 704 9 -a 389 841 4 -a 389 441 8 -a 389 270 6 -a 389 285 2 -a 389 287 10 -a 389 835 7 -a 389 803 3 -a 389 572 1 -a 389 531 9 -a 389 45 4 -a 389 654 4 -a 389 683 2 -a 389 709 7 -a 389 897 9 -a 389 282 10 -a 389 566 9 -a 389 810 3 -a 389 611 7 -a 389 780 2 -a 389 214 2 -a 389 606 5 -a 389 723 10 -a 389 206 5 -a 389 574 5 -a 389 189 8 -a 389 888 7 -a 389 717 10 -a 389 69 3 -a 389 924 9 -a 389 396 6 -a 389 909 10 -a 389 340 2 -a 389 665 5 -a 389 888 10 -a 389 624 1 -a 389 952 6 -a 389 698 10 -a 389 403 10 -a 389 499 7 -a 389 204 4 -a 389 447 8 -a 389 128 2 -a 389 886 7 -a 389 131 8 -a 389 1 6 -a 389 143 5 -a 389 697 4 -a 389 810 5 -a 389 753 6 -a 389 452 8 -a 389 334 3 -a 389 150 1 -a 389 204 6 -a 389 907 5 -a 389 338 8 -a 389 67 6 -a 389 599 5 -a 389 406 1 -a 389 990 1 -a 389 994 10 -a 389 290 4 -a 389 306 8 -a 389 634 9 -a 389 153 2 -a 389 929 6 -a 389 561 1 -a 389 850 5 -a 389 307 4 -a 389 35 7 -a 389 29 1 -a 389 753 2 -a 389 163 3 -a 389 914 7 -a 389 884 5 -a 389 163 2 -a 389 32 1 -a 389 556 7 -a 389 972 6 -a 389 784 10 -a 389 970 3 -a 389 93 1 -a 389 132 10 -a 389 149 3 -a 389 999 5 -a 389 469 6 -a 390 215 2 -a 390 573 4 -a 390 875 3 -a 390 181 1 -a 390 542 3 -a 390 140 3 -a 390 486 5 -a 390 152 6 -a 390 293 7 -a 390 390 4 -a 390 712 3 -a 390 118 9 -a 390 697 3 -a 390 747 7 -a 390 147 6 -a 390 425 8 -a 390 909 1 -a 390 36 8 -a 390 284 9 -a 390 47 10 -a 390 68 10 -a 390 839 3 -a 390 851 4 -a 390 821 2 -a 390 963 6 -a 390 944 3 -a 390 952 8 -a 390 87 7 -a 390 918 4 -a 390 397 6 -a 390 301 2 -a 390 467 10 -a 390 247 2 -a 390 481 5 -a 390 386 2 -a 390 966 4 -a 390 135 10 -a 390 678 2 -a 390 332 5 -a 390 847 5 -a 390 796 4 -a 390 4 3 -a 390 569 4 -a 390 942 7 -a 390 428 5 -a 390 453 7 -a 390 977 3 -a 390 712 8 -a 390 499 9 -a 390 20 9 -a 390 526 5 -a 390 492 8 -a 390 871 10 -a 390 323 10 -a 390 430 6 -a 390 790 5 -a 390 250 10 -a 390 516 5 -a 390 683 5 -a 390 646 6 -a 390 816 4 -a 390 125 9 -a 390 892 9 -a 390 273 7 -a 390 109 10 -a 390 254 1 -a 390 214 7 -a 390 243 6 -a 390 931 3 -a 390 545 5 -a 390 65 2 -a 390 702 3 -a 390 548 9 -a 390 633 10 -a 390 619 2 -a 390 976 6 -a 390 61 3 -a 390 572 2 -a 390 663 8 -a 390 559 10 -a 390 591 9 -a 390 164 2 -a 390 26 4 -a 390 437 2 -a 391 486 2 -a 391 455 10 -a 391 202 8 -a 391 736 10 -a 391 970 8 -a 391 885 5 -a 391 357 4 -a 391 762 6 -a 391 225 6 -a 391 10 1 -a 391 93 4 -a 391 478 3 -a 391 223 5 -a 391 336 8 -a 391 384 1 -a 391 768 5 -a 391 400 4 -a 391 62 6 -a 391 291 2 -a 391 9 3 -a 391 680 6 -a 391 242 10 -a 391 69 3 -a 391 227 6 -a 391 904 9 -a 391 628 10 -a 391 818 10 -a 391 44 2 -a 391 653 9 -a 391 230 6 -a 391 529 10 -a 391 84 1 -a 391 432 1 -a 391 240 4 -a 391 29 3 -a 391 292 10 -a 391 597 1 -a 391 790 4 -a 391 276 5 -a 391 821 3 -a 391 799 7 -a 391 369 1 -a 391 274 5 -a 391 704 3 -a 391 657 1 -a 391 765 10 -a 391 79 8 -a 391 718 10 -a 391 31 8 -a 391 87 3 -a 391 374 1 -a 391 273 9 -a 391 156 2 -a 391 600 6 -a 391 152 3 -a 391 783 8 -a 391 393 8 -a 391 195 3 -a 391 411 2 -a 391 623 9 -a 391 724 6 -a 391 494 9 -a 391 30 2 -a 391 963 3 -a 391 523 9 -a 391 321 4 -a 391 535 10 -a 391 288 10 -a 391 596 10 -a 391 331 9 -a 391 63 2 -a 391 964 1 -a 391 604 8 -a 391 60 7 -a 391 643 10 -a 391 237 5 -a 391 824 8 -a 391 722 10 -a 391 954 4 -a 391 854 1 -a 391 808 7 -a 391 303 6 -a 391 102 6 -a 391 963 5 -a 391 903 7 -a 391 254 7 -a 391 721 3 -a 391 271 9 -a 391 448 2 -a 391 108 9 -a 391 893 2 -a 391 147 1 -a 391 601 1 -a 391 922 3 -a 391 86 1 -a 391 99 8 -a 391 218 9 -a 391 620 2 -a 391 387 6 -a 391 814 3 -a 391 951 2 -a 391 449 7 -a 391 753 1 -a 391 530 3 -a 391 508 8 -a 391 372 2 -a 391 766 1 -a 391 307 6 -a 391 69 3 -a 391 696 6 -a 391 136 6 -a 391 876 4 -a 391 998 7 -a 391 238 4 -a 391 815 10 -a 392 876 4 -a 392 491 6 -a 392 511 2 -a 392 123 2 -a 392 938 7 -a 392 618 8 -a 392 61 4 -a 392 195 4 -a 392 913 4 -a 392 146 5 -a 392 293 10 -a 392 106 4 -a 392 765 7 -a 392 679 6 -a 392 919 7 -a 392 691 7 -a 392 103 5 -a 392 648 9 -a 392 197 10 -a 392 610 10 -a 392 962 7 -a 392 916 5 -a 392 63 1 -a 392 633 5 -a 392 28 4 -a 392 938 5 -a 392 607 1 -a 392 265 6 -a 392 728 8 -a 392 458 5 -a 392 755 10 -a 392 215 3 -a 392 580 4 -a 392 668 1 -a 392 832 10 -a 392 571 1 -a 392 728 6 -a 392 2 10 -a 392 459 8 -a 392 873 3 -a 392 295 6 -a 392 564 7 -a 392 614 6 -a 392 973 3 -a 392 459 4 -a 392 280 10 -a 392 52 3 -a 392 82 8 -a 392 476 6 -a 392 661 1 -a 392 76 1 -a 392 414 2 -a 392 553 4 -a 392 138 2 -a 392 22 9 -a 392 580 5 -a 392 51 3 -a 392 628 1 -a 392 844 1 -a 392 779 6 -a 392 62 4 -a 392 574 8 -a 392 993 9 -a 392 641 10 -a 392 217 6 -a 392 800 8 -a 392 187 3 -a 392 945 8 -a 392 802 4 -a 392 645 5 -a 392 793 6 -a 392 72 1 -a 392 185 10 -a 392 382 2 -a 392 20 3 -a 392 643 10 -a 392 662 5 -a 392 71 4 -a 392 724 5 -a 392 113 5 -a 392 732 9 -a 392 799 8 -a 392 526 1 -a 392 260 1 -a 392 936 2 -a 392 548 9 -a 392 839 2 -a 392 986 7 -a 392 151 6 -a 392 658 1 -a 392 740 6 -a 392 212 1 -a 392 207 9 -a 392 708 6 -a 392 853 8 -a 392 423 8 -a 393 484 2 -a 393 15 2 -a 393 343 5 -a 393 261 6 -a 393 660 5 -a 393 112 3 -a 393 332 3 -a 393 844 4 -a 393 493 4 -a 393 351 5 -a 393 462 5 -a 393 130 6 -a 393 422 4 -a 393 161 5 -a 393 243 5 -a 393 129 6 -a 393 959 8 -a 393 768 10 -a 393 388 7 -a 393 870 7 -a 393 291 8 -a 393 202 3 -a 393 831 4 -a 393 442 5 -a 393 859 1 -a 393 547 1 -a 393 653 4 -a 393 41 3 -a 393 230 3 -a 393 481 1 -a 393 463 1 -a 393 713 4 -a 393 496 5 -a 393 806 2 -a 393 973 3 -a 393 131 9 -a 393 917 8 -a 393 280 3 -a 393 974 4 -a 393 385 9 -a 393 631 9 -a 393 411 3 -a 393 515 2 -a 393 28 10 -a 393 571 4 -a 393 757 3 -a 393 156 2 -a 393 505 3 -a 393 500 5 -a 393 543 1 -a 393 350 8 -a 393 791 1 -a 393 744 4 -a 393 156 3 -a 393 208 5 -a 393 578 5 -a 393 702 6 -a 393 860 3 -a 393 618 8 -a 393 932 6 -a 393 317 1 -a 393 56 8 -a 393 620 10 -a 393 812 1 -a 393 861 7 -a 393 569 1 -a 393 942 3 -a 393 753 5 -a 393 848 5 -a 393 891 2 -a 393 114 5 -a 393 454 2 -a 393 277 5 -a 393 628 4 -a 393 481 10 -a 393 847 4 -a 393 360 9 -a 393 636 6 -a 393 327 7 -a 393 859 6 -a 393 154 6 -a 393 676 5 -a 393 625 9 -a 393 897 4 -a 393 831 8 -a 393 832 2 -a 393 450 1 -a 393 509 10 -a 393 668 2 -a 393 43 8 -a 393 416 10 -a 393 984 4 -a 393 99 6 -a 393 11 10 -a 393 771 7 -a 393 959 4 -a 394 579 9 -a 394 688 10 -a 394 688 3 -a 394 403 3 -a 394 554 3 -a 394 801 8 -a 394 856 4 -a 394 830 6 -a 394 404 7 -a 394 313 7 -a 394 652 9 -a 394 763 1 -a 394 948 10 -a 394 978 5 -a 394 597 10 -a 394 78 8 -a 394 629 3 -a 394 198 2 -a 394 974 9 -a 394 435 2 -a 394 5 10 -a 394 400 2 -a 394 943 6 -a 394 672 4 -a 394 442 1 -a 394 334 8 -a 394 631 5 -a 394 540 7 -a 394 345 3 -a 394 377 10 -a 394 475 3 -a 394 923 9 -a 394 40 7 -a 394 138 9 -a 394 301 1 -a 394 593 4 -a 394 938 9 -a 394 133 8 -a 394 398 3 -a 394 317 8 -a 394 445 7 -a 394 25 10 -a 394 55 10 -a 394 368 5 -a 394 651 2 -a 394 445 6 -a 394 606 5 -a 394 848 3 -a 394 395 4 -a 394 17 10 -a 394 853 7 -a 394 794 4 -a 394 959 2 -a 394 500 1 -a 394 211 3 -a 394 269 6 -a 394 107 8 -a 394 751 5 -a 394 613 10 -a 394 483 6 -a 394 201 2 -a 394 511 9 -a 394 523 8 -a 394 338 6 -a 394 812 6 -a 394 91 8 -a 394 251 10 -a 394 944 1 -a 394 489 9 -a 394 567 5 -a 394 364 3 -a 394 513 2 -a 394 621 6 -a 394 731 2 -a 394 491 9 -a 394 247 5 -a 394 152 9 -a 394 72 4 -a 394 71 2 -a 394 546 10 -a 394 88 9 -a 394 923 4 -a 394 315 8 -a 394 23 1 -a 394 398 10 -a 394 525 5 -a 394 291 5 -a 394 504 3 -a 394 251 9 -a 394 903 1 -a 394 987 10 -a 394 451 4 -a 394 389 3 -a 394 485 4 -a 394 788 8 -a 394 176 6 -a 394 575 5 -a 395 14 2 -a 395 95 8 -a 395 39 9 -a 395 580 5 -a 395 458 7 -a 395 552 4 -a 395 176 1 -a 395 165 9 -a 395 18 6 -a 395 423 10 -a 395 316 7 -a 395 89 7 -a 395 493 10 -a 395 861 1 -a 395 177 5 -a 395 391 4 -a 395 151 4 -a 395 199 9 -a 395 788 2 -a 395 675 6 -a 395 489 5 -a 395 268 2 -a 395 926 8 -a 395 367 10 -a 395 230 9 -a 395 352 3 -a 395 755 6 -a 395 714 10 -a 395 116 9 -a 395 931 3 -a 395 264 3 -a 395 129 7 -a 395 1 4 -a 395 303 3 -a 395 709 1 -a 395 459 5 -a 395 854 1 -a 395 884 10 -a 395 623 1 -a 395 871 6 -a 395 282 7 -a 395 938 6 -a 395 959 3 -a 395 774 1 -a 395 774 9 -a 395 111 10 -a 395 140 2 -a 395 924 6 -a 395 309 4 -a 395 928 5 -a 395 574 8 -a 395 797 4 -a 395 171 5 -a 395 475 3 -a 395 139 8 -a 395 400 4 -a 395 827 1 -a 395 894 8 -a 395 89 1 -a 395 942 7 -a 395 800 2 -a 395 352 4 -a 395 46 10 -a 395 800 9 -a 395 654 4 -a 395 754 3 -a 395 234 5 -a 395 483 4 -a 395 614 10 -a 395 856 8 -a 395 329 2 -a 395 895 4 -a 395 769 4 -a 395 264 2 -a 395 645 7 -a 395 518 4 -a 395 374 10 -a 395 784 3 -a 395 417 5 -a 395 683 5 -a 395 687 3 -a 395 991 4 -a 395 455 6 -a 395 857 4 -a 395 441 4 -a 395 594 5 -a 395 232 8 -a 395 243 3 -a 395 463 5 -a 395 320 2 -a 395 160 9 -a 395 238 3 -a 395 672 3 -a 395 206 4 -a 395 13 5 -a 395 301 6 -a 395 959 7 -a 395 247 10 -a 395 784 9 -a 395 548 2 -a 395 78 3 -a 395 88 2 -a 395 419 5 -a 395 847 7 -a 395 351 3 -a 395 39 10 -a 396 340 6 -a 396 725 3 -a 396 822 2 -a 396 757 1 -a 396 383 3 -a 396 485 5 -a 396 723 2 -a 396 837 9 -a 396 317 8 -a 396 139 5 -a 396 406 6 -a 396 549 1 -a 396 382 1 -a 396 868 9 -a 396 868 2 -a 396 541 2 -a 396 81 5 -a 396 515 5 -a 396 746 10 -a 396 94 3 -a 396 816 3 -a 396 681 2 -a 396 340 8 -a 396 575 3 -a 396 204 6 -a 396 417 2 -a 396 662 4 -a 396 622 1 -a 396 239 3 -a 396 660 6 -a 396 579 3 -a 396 713 5 -a 396 458 8 -a 396 311 3 -a 396 71 5 -a 396 942 7 -a 396 9 1 -a 396 907 6 -a 396 234 8 -a 396 147 10 -a 396 289 8 -a 396 782 3 -a 396 528 10 -a 396 132 5 -a 396 626 5 -a 396 45 6 -a 396 213 2 -a 396 116 2 -a 396 790 6 -a 396 306 4 -a 396 931 7 -a 396 446 7 -a 396 645 2 -a 396 481 2 -a 396 650 2 -a 396 37 8 -a 396 119 2 -a 396 247 8 -a 396 276 1 -a 396 107 6 -a 396 907 4 -a 396 854 10 -a 396 819 1 -a 396 340 8 -a 396 140 5 -a 396 889 8 -a 396 257 10 -a 396 148 9 -a 396 771 5 -a 396 490 1 -a 396 294 10 -a 396 35 7 -a 396 248 9 -a 396 822 9 -a 396 167 8 -a 396 873 10 -a 396 866 10 -a 396 379 1 -a 396 988 8 -a 396 631 2 -a 396 684 3 -a 396 895 4 -a 396 53 5 -a 396 304 2 -a 396 351 5 -a 396 702 4 -a 396 340 9 -a 396 469 3 -a 396 948 2 -a 396 615 1 -a 396 575 10 -a 396 830 4 -a 396 444 3 -a 396 369 2 -a 396 145 10 -a 396 583 8 -a 396 233 7 -a 396 401 9 -a 396 730 2 -a 396 891 1 -a 396 14 10 -a 396 114 5 -a 396 821 5 -a 396 180 2 -a 396 986 8 -a 396 662 1 -a 396 558 3 -a 396 949 2 -a 397 268 9 -a 397 217 9 -a 397 819 7 -a 397 320 8 -a 397 520 8 -a 397 146 3 -a 397 860 6 -a 397 614 8 -a 397 945 5 -a 397 450 1 -a 397 165 3 -a 397 750 5 -a 397 894 9 -a 397 533 6 -a 397 895 2 -a 397 452 6 -a 397 766 1 -a 397 271 1 -a 397 158 3 -a 397 745 8 -a 397 137 4 -a 397 157 2 -a 397 758 6 -a 397 250 6 -a 397 977 7 -a 397 938 3 -a 397 211 5 -a 397 614 5 -a 397 471 1 -a 397 136 5 -a 397 881 9 -a 397 688 7 -a 397 954 9 -a 397 177 9 -a 397 183 10 -a 397 75 5 -a 397 173 8 -a 397 18 5 -a 397 689 4 -a 397 93 10 -a 397 468 4 -a 397 853 2 -a 397 843 3 -a 397 337 8 -a 397 361 8 -a 397 713 6 -a 397 788 10 -a 397 102 10 -a 397 983 10 -a 397 945 1 -a 397 846 5 -a 397 96 5 -a 397 77 9 -a 397 580 1 -a 397 345 4 -a 397 29 2 -a 397 493 8 -a 397 556 2 -a 397 642 5 -a 397 963 6 -a 397 691 8 -a 397 499 7 -a 397 626 7 -a 397 620 4 -a 397 675 1 -a 397 809 9 -a 397 695 3 -a 397 847 8 -a 397 826 8 -a 397 359 1 -a 397 940 1 -a 397 269 10 -a 397 187 5 -a 397 758 4 -a 397 605 5 -a 397 547 3 -a 397 446 4 -a 397 369 10 -a 397 649 8 -a 397 404 8 -a 397 289 6 -a 397 470 5 -a 397 499 2 -a 397 366 4 -a 397 25 9 -a 397 844 4 -a 397 394 8 -a 397 517 9 -a 397 375 3 -a 397 12 7 -a 397 456 6 -a 397 41 2 -a 397 510 6 -a 397 57 1 -a 397 660 8 -a 397 160 1 -a 397 865 9 -a 397 330 6 -a 397 667 4 -a 397 688 10 -a 397 921 6 -a 397 935 3 -a 397 874 1 -a 397 654 6 -a 397 516 6 -a 397 397 8 -a 397 75 3 -a 397 884 1 -a 397 21 6 -a 397 479 4 -a 397 148 3 -a 397 490 5 -a 397 977 3 -a 397 513 10 -a 397 515 5 -a 397 796 9 -a 397 907 8 -a 397 7 7 -a 398 146 8 -a 398 918 4 -a 398 462 10 -a 398 186 9 -a 398 403 5 -a 398 519 7 -a 398 846 2 -a 398 562 2 -a 398 359 7 -a 398 151 2 -a 398 543 9 -a 398 1 10 -a 398 839 6 -a 398 440 9 -a 398 936 5 -a 398 688 5 -a 398 69 6 -a 398 427 3 -a 398 60 9 -a 398 144 4 -a 398 286 1 -a 398 80 4 -a 398 622 8 -a 398 433 8 -a 398 570 7 -a 398 574 1 -a 398 946 5 -a 398 60 10 -a 398 346 6 -a 398 828 1 -a 398 66 8 -a 398 491 7 -a 398 721 7 -a 398 528 1 -a 398 677 6 -a 398 99 6 -a 398 22 7 -a 398 498 2 -a 398 660 10 -a 398 380 7 -a 398 648 4 -a 398 178 10 -a 398 381 10 -a 398 462 4 -a 398 617 5 -a 398 292 3 -a 398 126 1 -a 398 686 1 -a 398 718 10 -a 398 185 6 -a 398 829 2 -a 398 265 10 -a 398 426 8 -a 398 411 9 -a 398 834 10 -a 398 999 6 -a 398 332 9 -a 398 893 7 -a 398 320 5 -a 398 135 5 -a 398 958 10 -a 398 811 3 -a 398 855 10 -a 398 461 9 -a 398 463 4 -a 398 953 9 -a 398 482 2 -a 398 960 9 -a 398 588 10 -a 398 862 2 -a 398 583 1 -a 398 766 5 -a 398 218 7 -a 398 21 3 -a 398 358 10 -a 398 509 3 -a 398 146 1 -a 398 19 2 -a 398 202 9 -a 398 330 6 -a 398 847 6 -a 398 180 3 -a 398 594 4 -a 398 248 3 -a 398 590 6 -a 398 403 8 -a 398 223 5 -a 398 922 7 -a 399 271 4 -a 399 542 2 -a 399 32 9 -a 399 205 3 -a 399 328 2 -a 399 887 6 -a 399 665 3 -a 399 790 6 -a 399 815 4 -a 399 123 6 -a 399 725 7 -a 399 379 7 -a 399 984 8 -a 399 284 7 -a 399 120 9 -a 399 177 8 -a 399 304 4 -a 399 477 10 -a 399 685 8 -a 399 449 9 -a 399 496 1 -a 399 886 2 -a 399 778 7 -a 399 318 4 -a 399 41 3 -a 399 348 3 -a 399 566 5 -a 399 630 1 -a 399 750 6 -a 399 788 2 -a 399 527 8 -a 399 305 10 -a 399 559 2 -a 399 201 8 -a 399 633 9 -a 399 421 2 -a 399 865 6 -a 399 398 1 -a 399 211 6 -a 399 987 2 -a 399 99 7 -a 399 589 6 -a 399 946 5 -a 399 382 9 -a 399 708 1 -a 399 98 7 -a 399 685 2 -a 399 161 7 -a 399 782 6 -a 399 109 7 -a 399 656 8 -a 399 643 5 -a 399 886 7 -a 399 973 4 -a 399 683 8 -a 399 209 9 -a 399 514 9 -a 399 289 1 -a 399 959 10 -a 399 277 4 -a 399 815 6 -a 399 955 6 -a 399 582 5 -a 399 349 9 -a 399 131 7 -a 399 190 7 -a 399 769 4 -a 399 995 7 -a 399 587 1 -a 399 980 2 -a 399 958 6 -a 399 685 10 -a 399 544 10 -a 399 879 3 -a 399 42 10 -a 399 228 7 -a 399 977 10 -a 399 726 1 -a 399 388 4 -a 399 734 4 -a 399 834 3 -a 399 19 7 -a 399 353 3 -a 399 696 9 -a 399 991 9 -a 399 11 8 -a 399 904 6 -a 399 481 8 -a 399 299 8 -a 399 838 7 -a 399 757 6 -a 399 90 6 -a 399 768 6 -a 399 314 9 -a 399 438 1 -a 399 898 9 -a 399 503 1 -a 399 183 2 -a 399 869 4 -a 399 66 2 -a 399 138 3 -a 399 802 1 -a 399 750 9 -a 399 681 3 -a 399 656 5 -a 399 792 2 -a 400 908 5 -a 400 608 10 -a 400 493 7 -a 400 271 10 -a 400 318 5 -a 400 303 10 -a 400 289 2 -a 400 670 3 -a 400 998 10 -a 400 256 1 -a 400 680 2 -a 400 877 8 -a 400 736 2 -a 400 979 5 -a 400 691 8 -a 400 468 10 -a 400 44 1 -a 400 434 10 -a 400 782 4 -a 400 481 3 -a 400 308 6 -a 400 260 9 -a 400 663 9 -a 400 152 4 -a 400 325 4 -a 400 800 9 -a 400 953 3 -a 400 51 10 -a 400 457 2 -a 400 584 10 -a 400 842 3 -a 400 340 4 -a 400 168 7 -a 400 310 5 -a 400 611 8 -a 400 485 4 -a 400 612 3 -a 400 899 2 -a 400 130 7 -a 400 585 9 -a 400 130 3 -a 400 809 2 -a 400 438 4 -a 400 865 6 -a 400 763 5 -a 400 104 6 -a 400 309 2 -a 400 806 8 -a 400 537 2 -a 400 66 1 -a 400 263 2 -a 400 844 7 -a 400 325 5 -a 400 925 4 -a 400 995 10 -a 400 650 4 -a 400 701 5 -a 400 923 2 -a 400 700 7 -a 400 133 7 -a 400 483 3 -a 400 517 4 -a 400 472 1 -a 400 650 5 -a 400 826 3 -a 400 58 6 -a 400 110 3 -a 400 414 9 -a 400 957 3 -a 400 239 10 -a 400 998 4 -a 400 62 10 -a 400 23 10 -a 400 411 1 -a 400 927 3 -a 400 786 6 -a 400 514 2 -a 400 211 9 -a 400 567 8 -a 400 27 1 -a 400 276 2 -a 400 829 9 -a 400 870 6 -a 400 600 8 -a 400 730 9 -a 400 841 4 -a 400 225 3 -a 400 406 6 -a 400 739 9 -a 400 924 9 -a 400 538 10 -a 400 197 5 -a 400 416 10 -a 401 846 3 -a 401 218 2 -a 401 43 1 -a 401 955 9 -a 401 631 6 -a 401 999 8 -a 401 169 10 -a 401 604 5 -a 401 36 1 -a 401 192 4 -a 401 962 9 -a 401 977 3 -a 401 504 8 -a 401 148 2 -a 401 519 7 -a 401 530 1 -a 401 423 4 -a 401 324 10 -a 401 376 10 -a 401 29 2 -a 401 192 8 -a 401 223 7 -a 401 434 5 -a 401 930 2 -a 401 123 1 -a 401 971 2 -a 401 103 8 -a 401 538 1 -a 401 955 5 -a 401 948 7 -a 401 755 5 -a 401 997 8 -a 401 879 4 -a 401 361 5 -a 401 971 2 -a 401 23 8 -a 401 965 4 -a 401 214 1 -a 401 955 4 -a 401 944 6 -a 401 166 2 -a 401 434 3 -a 401 68 7 -a 401 685 1 -a 401 964 5 -a 401 490 1 -a 401 315 9 -a 401 488 1 -a 401 12 7 -a 401 506 5 -a 401 711 9 -a 401 445 5 -a 401 411 3 -a 401 833 8 -a 401 391 9 -a 401 513 7 -a 401 346 9 -a 401 321 1 -a 401 437 5 -a 401 77 3 -a 401 294 6 -a 401 291 5 -a 401 437 1 -a 401 240 7 -a 401 313 7 -a 401 377 4 -a 401 222 4 -a 401 527 1 -a 401 307 3 -a 401 142 9 -a 401 692 8 -a 401 741 1 -a 401 209 1 -a 401 352 3 -a 401 680 9 -a 401 698 5 -a 401 335 3 -a 401 994 5 -a 401 162 2 -a 401 346 4 -a 401 475 5 -a 401 872 1 -a 401 790 10 -a 401 885 5 -a 401 680 8 -a 401 156 9 -a 401 374 10 -a 401 1 9 -a 401 477 4 -a 401 810 2 -a 402 77 1 -a 402 770 4 -a 402 76 3 -a 402 514 7 -a 402 388 1 -a 402 890 6 -a 402 207 9 -a 402 914 5 -a 402 173 9 -a 402 348 9 -a 402 582 8 -a 402 913 7 -a 402 556 9 -a 402 933 4 -a 402 568 5 -a 402 229 1 -a 402 244 4 -a 402 537 8 -a 402 390 10 -a 402 589 10 -a 402 237 10 -a 402 355 3 -a 402 871 3 -a 402 916 6 -a 402 510 7 -a 402 220 2 -a 402 917 10 -a 402 986 7 -a 402 5 8 -a 402 993 3 -a 402 731 2 -a 402 80 4 -a 402 482 9 -a 402 716 10 -a 402 468 7 -a 402 348 10 -a 402 922 3 -a 402 357 10 -a 402 520 1 -a 402 245 7 -a 402 938 4 -a 402 408 1 -a 402 800 10 -a 402 847 9 -a 402 975 3 -a 402 4 9 -a 402 66 9 -a 402 487 7 -a 402 394 2 -a 402 654 2 -a 402 473 8 -a 402 630 7 -a 402 319 4 -a 402 522 9 -a 402 494 10 -a 402 539 2 -a 402 414 1 -a 402 455 8 -a 402 543 3 -a 402 382 2 -a 402 162 8 -a 402 623 3 -a 402 864 8 -a 402 877 3 -a 402 66 8 -a 402 187 7 -a 402 774 7 -a 402 422 8 -a 402 706 2 -a 402 336 1 -a 402 89 2 -a 402 793 4 -a 402 158 5 -a 402 39 3 -a 402 796 2 -a 402 223 3 -a 402 525 9 -a 402 165 3 -a 402 876 6 -a 402 997 3 -a 402 795 1 -a 402 860 9 -a 402 291 1 -a 402 292 8 -a 402 329 6 -a 402 829 8 -a 402 705 9 -a 402 783 7 -a 402 348 7 -a 402 62 3 -a 402 944 2 -a 402 970 8 -a 402 925 5 -a 402 796 4 -a 402 11 9 -a 402 87 6 -a 402 545 10 -a 402 432 5 -a 402 792 3 -a 403 538 7 -a 403 767 8 -a 403 880 9 -a 403 306 1 -a 403 924 9 -a 403 918 5 -a 403 78 4 -a 403 122 10 -a 403 418 2 -a 403 242 4 -a 403 998 9 -a 403 390 6 -a 403 12 1 -a 403 833 3 -a 403 681 6 -a 403 303 3 -a 403 137 9 -a 403 485 7 -a 403 919 2 -a 403 832 2 -a 403 45 9 -a 403 839 6 -a 403 777 9 -a 403 969 1 -a 403 610 6 -a 403 787 3 -a 403 32 9 -a 403 131 1 -a 403 195 5 -a 403 823 8 -a 403 668 8 -a 403 961 10 -a 403 679 2 -a 403 974 1 -a 403 861 1 -a 403 572 3 -a 403 27 2 -a 403 982 4 -a 403 990 6 -a 403 268 1 -a 403 955 6 -a 403 355 7 -a 403 280 9 -a 403 763 10 -a 403 11 2 -a 403 582 2 -a 403 899 1 -a 403 496 5 -a 403 565 6 -a 403 794 6 -a 403 303 2 -a 403 609 1 -a 403 608 1 -a 403 56 10 -a 403 553 1 -a 403 193 3 -a 403 842 4 -a 403 584 2 -a 403 323 7 -a 403 12 4 -a 403 383 4 -a 403 991 2 -a 403 973 2 -a 403 37 3 -a 403 940 2 -a 403 809 2 -a 403 608 10 -a 403 966 4 -a 403 766 5 -a 403 573 1 -a 403 209 6 -a 403 697 9 -a 403 928 3 -a 403 488 9 -a 403 435 1 -a 403 938 4 -a 403 46 8 -a 403 310 6 -a 403 409 10 -a 403 610 1 -a 403 79 9 -a 403 712 2 -a 403 194 7 -a 403 686 3 -a 403 767 5 -a 403 746 4 -a 403 878 8 -a 403 584 2 -a 403 306 8 -a 403 177 3 -a 403 596 10 -a 403 688 1 -a 403 143 8 -a 403 544 3 -a 403 724 3 -a 403 58 3 -a 404 328 3 -a 404 307 6 -a 404 69 1 -a 404 880 2 -a 404 207 8 -a 404 765 4 -a 404 783 7 -a 404 695 10 -a 404 176 6 -a 404 696 3 -a 404 740 10 -a 404 485 9 -a 404 81 2 -a 404 325 6 -a 404 563 2 -a 404 792 2 -a 404 518 4 -a 404 224 5 -a 404 534 2 -a 404 239 7 -a 404 77 7 -a 404 93 7 -a 404 544 1 -a 404 253 1 -a 404 688 2 -a 404 207 10 -a 404 395 7 -a 404 207 8 -a 404 930 6 -a 404 452 5 -a 404 534 5 -a 404 213 8 -a 404 450 2 -a 404 603 4 -a 404 68 1 -a 404 657 10 -a 404 343 5 -a 404 850 6 -a 404 327 7 -a 404 518 2 -a 404 521 1 -a 404 42 6 -a 404 601 8 -a 404 366 6 -a 404 540 9 -a 404 368 7 -a 404 883 2 -a 404 763 5 -a 404 901 7 -a 404 97 2 -a 404 840 6 -a 404 994 3 -a 404 641 7 -a 404 68 4 -a 404 657 3 -a 404 847 8 -a 404 463 8 -a 404 864 9 -a 404 753 9 -a 404 914 8 -a 404 373 7 -a 404 965 8 -a 404 340 9 -a 404 975 3 -a 404 8 2 -a 404 996 8 -a 404 294 5 -a 404 857 1 -a 404 298 10 -a 404 811 9 -a 404 353 7 -a 404 339 4 -a 404 789 2 -a 404 954 4 -a 404 704 4 -a 404 304 7 -a 404 297 7 -a 404 562 6 -a 404 43 6 -a 404 174 6 -a 404 658 8 -a 404 882 3 -a 404 143 10 -a 404 274 2 -a 404 949 9 -a 404 799 3 -a 404 97 5 -a 404 387 5 -a 404 638 4 -a 404 849 8 -a 404 277 10 -a 404 789 5 -a 404 616 3 -a 404 961 10 -a 404 796 7 -a 404 587 10 -a 404 230 5 -a 404 628 7 -a 404 884 4 -a 404 17 2 -a 404 980 5 -a 404 198 2 -a 404 805 7 -a 404 909 10 -a 404 901 10 -a 404 84 3 -a 404 182 5 -a 404 438 7 -a 404 126 4 -a 405 355 5 -a 405 71 8 -a 405 497 2 -a 405 345 10 -a 405 932 7 -a 405 271 10 -a 405 441 4 -a 405 294 7 -a 405 909 4 -a 405 265 8 -a 405 570 1 -a 405 895 10 -a 405 29 7 -a 405 161 4 -a 405 831 2 -a 405 824 9 -a 405 747 8 -a 405 37 7 -a 405 427 6 -a 405 606 1 -a 405 53 10 -a 405 382 10 -a 405 803 3 -a 405 857 5 -a 405 267 4 -a 405 679 5 -a 405 940 9 -a 405 448 5 -a 405 92 5 -a 405 42 6 -a 405 802 4 -a 405 163 1 -a 405 24 5 -a 405 274 6 -a 405 507 2 -a 405 955 5 -a 405 544 7 -a 405 947 4 -a 405 225 3 -a 405 428 8 -a 405 187 9 -a 405 794 6 -a 405 298 10 -a 405 215 7 -a 405 955 7 -a 405 105 9 -a 405 14 1 -a 405 677 7 -a 405 141 3 -a 405 440 4 -a 405 259 9 -a 405 193 6 -a 405 821 9 -a 405 37 10 -a 405 25 5 -a 405 63 3 -a 405 716 9 -a 405 964 10 -a 405 510 4 -a 405 807 6 -a 405 287 4 -a 405 969 8 -a 405 5 9 -a 405 560 2 -a 405 451 6 -a 405 959 3 -a 405 80 3 -a 405 373 2 -a 405 159 8 -a 405 507 10 -a 405 559 7 -a 405 953 6 -a 405 805 4 -a 405 773 6 -a 405 883 7 -a 405 909 2 -a 405 786 1 -a 405 535 9 -a 405 25 4 -a 405 201 9 -a 405 793 9 -a 405 217 2 -a 405 830 6 -a 405 241 7 -a 405 60 4 -a 405 521 9 -a 405 180 10 -a 405 570 4 -a 405 303 4 -a 405 161 10 -a 405 856 10 -a 405 248 5 -a 405 165 7 -a 405 392 3 -a 405 698 6 -a 405 99 1 -a 405 471 3 -a 405 47 6 -a 405 258 9 -a 405 977 1 -a 406 605 8 -a 406 186 9 -a 406 757 3 -a 406 354 3 -a 406 44 8 -a 406 641 10 -a 406 115 10 -a 406 578 7 -a 406 665 2 -a 406 316 5 -a 406 347 10 -a 406 881 8 -a 406 313 8 -a 406 152 7 -a 406 97 1 -a 406 372 1 -a 406 672 7 -a 406 277 6 -a 406 941 8 -a 406 974 1 -a 406 437 8 -a 406 773 3 -a 406 197 8 -a 406 601 10 -a 406 140 5 -a 406 895 3 -a 406 699 1 -a 406 610 5 -a 406 941 7 -a 406 956 6 -a 406 562 1 -a 406 521 8 -a 406 117 1 -a 406 295 1 -a 406 874 6 -a 406 160 5 -a 406 935 5 -a 406 989 10 -a 406 738 6 -a 406 576 7 -a 406 280 9 -a 406 60 5 -a 406 432 10 -a 406 592 2 -a 406 211 2 -a 406 529 9 -a 406 963 4 -a 406 882 7 -a 406 805 5 -a 406 880 4 -a 406 831 3 -a 406 217 1 -a 406 628 9 -a 406 4 2 -a 406 817 9 -a 406 767 5 -a 406 898 4 -a 406 491 2 -a 406 352 3 -a 406 814 3 -a 406 423 1 -a 406 913 1 -a 406 310 3 -a 406 539 2 -a 406 183 3 -a 406 160 6 -a 406 699 8 -a 406 94 7 -a 406 124 1 -a 406 412 10 -a 406 669 1 -a 406 403 4 -a 406 471 10 -a 406 76 8 -a 406 994 6 -a 406 681 4 -a 406 604 10 -a 406 932 3 -a 406 538 2 -a 406 384 6 -a 406 787 5 -a 406 344 2 -a 406 600 1 -a 406 390 2 -a 406 347 4 -a 406 392 8 -a 406 132 1 -a 406 220 3 -a 406 883 1 -a 406 483 8 -a 406 9 2 -a 406 281 8 -a 406 372 1 -a 406 319 6 -a 406 819 7 -a 406 554 4 -a 406 478 2 -a 406 493 3 -a 406 647 1 -a 406 601 2 -a 406 904 5 -a 406 291 5 -a 406 350 3 -a 406 367 5 -a 406 972 3 -a 406 6 5 -a 407 970 8 -a 407 879 10 -a 407 543 5 -a 407 330 10 -a 407 642 6 -a 407 887 8 -a 407 929 5 -a 407 7 10 -a 407 209 1 -a 407 297 6 -a 407 139 6 -a 407 429 8 -a 407 155 7 -a 407 621 3 -a 407 437 1 -a 407 435 5 -a 407 992 5 -a 407 755 6 -a 407 229 9 -a 407 522 9 -a 407 208 5 -a 407 722 4 -a 407 144 3 -a 407 808 4 -a 407 601 10 -a 407 435 4 -a 407 786 4 -a 407 951 4 -a 407 801 10 -a 407 733 1 -a 407 956 1 -a 407 746 7 -a 407 588 1 -a 407 475 3 -a 407 51 4 -a 407 205 1 -a 407 337 7 -a 407 980 2 -a 407 211 9 -a 407 545 5 -a 407 252 8 -a 407 349 4 -a 407 973 8 -a 407 406 8 -a 407 970 10 -a 407 386 5 -a 407 840 7 -a 407 937 3 -a 407 116 1 -a 407 44 5 -a 407 434 5 -a 407 324 5 -a 407 765 4 -a 407 578 4 -a 407 107 8 -a 407 342 8 -a 407 893 4 -a 407 268 5 -a 407 788 4 -a 407 601 5 -a 407 199 2 -a 407 509 3 -a 407 164 10 -a 407 673 5 -a 407 560 8 -a 407 368 2 -a 407 515 5 -a 407 579 3 -a 407 530 6 -a 407 766 3 -a 407 927 2 -a 407 478 10 -a 407 147 8 -a 407 872 1 -a 407 863 6 -a 407 986 7 -a 407 785 5 -a 407 979 9 -a 407 5 4 -a 407 194 8 -a 407 278 5 -a 407 770 2 -a 407 771 9 -a 407 384 5 -a 407 87 5 -a 407 758 3 -a 407 252 10 -a 408 354 8 -a 408 521 6 -a 408 853 8 -a 408 552 9 -a 408 6 9 -a 408 201 6 -a 408 565 10 -a 408 360 6 -a 408 185 9 -a 408 55 9 -a 408 938 7 -a 408 714 1 -a 408 820 8 -a 408 840 9 -a 408 168 10 -a 408 966 7 -a 408 688 1 -a 408 6 10 -a 408 927 6 -a 408 448 1 -a 408 984 4 -a 408 931 2 -a 408 641 9 -a 408 237 3 -a 408 676 1 -a 408 388 5 -a 408 621 10 -a 408 762 8 -a 408 121 7 -a 408 872 10 -a 408 91 7 -a 408 642 6 -a 408 700 4 -a 408 643 5 -a 408 647 10 -a 408 692 1 -a 408 843 5 -a 408 187 8 -a 408 27 2 -a 408 3 5 -a 408 241 5 -a 408 964 6 -a 408 717 2 -a 408 36 7 -a 408 779 1 -a 408 884 6 -a 408 442 4 -a 408 889 4 -a 408 903 6 -a 408 889 9 -a 408 849 7 -a 408 809 3 -a 408 506 6 -a 408 61 10 -a 408 461 7 -a 408 893 7 -a 408 681 7 -a 408 198 10 -a 408 529 4 -a 408 289 3 -a 408 630 2 -a 408 204 8 -a 408 931 4 -a 408 252 7 -a 408 895 4 -a 408 749 3 -a 408 438 4 -a 408 921 10 -a 408 751 6 -a 408 678 2 -a 408 860 3 -a 408 443 8 -a 408 713 6 -a 408 615 3 -a 408 302 1 -a 408 689 9 -a 408 32 6 -a 408 167 10 -a 408 567 10 -a 408 921 8 -a 408 352 9 -a 408 402 7 -a 408 51 7 -a 408 812 3 -a 408 270 10 -a 408 732 7 -a 408 258 3 -a 408 236 5 -a 408 273 6 -a 408 888 2 -a 408 439 8 -a 408 179 1 -a 408 115 2 -a 408 310 9 -a 409 927 2 -a 409 553 10 -a 409 206 7 -a 409 654 2 -a 409 206 9 -a 409 42 4 -a 409 72 1 -a 409 919 6 -a 409 656 10 -a 409 374 7 -a 409 583 8 -a 409 687 3 -a 409 540 10 -a 409 126 2 -a 409 583 1 -a 409 530 3 -a 409 477 8 -a 409 984 5 -a 409 580 1 -a 409 264 2 -a 409 229 4 -a 409 287 9 -a 409 248 8 -a 409 487 1 -a 409 522 6 -a 409 521 9 -a 409 350 3 -a 409 961 2 -a 409 699 7 -a 409 464 4 -a 409 246 3 -a 409 602 4 -a 409 451 5 -a 409 231 4 -a 409 198 3 -a 409 492 8 -a 409 302 2 -a 409 92 5 -a 409 123 2 -a 409 675 4 -a 409 674 2 -a 409 810 8 -a 409 190 2 -a 409 799 3 -a 409 368 3 -a 409 719 2 -a 409 251 9 -a 409 328 2 -a 409 275 1 -a 409 514 2 -a 409 556 2 -a 409 561 3 -a 409 762 8 -a 409 18 6 -a 409 59 10 -a 409 258 2 -a 409 367 2 -a 409 956 8 -a 409 831 3 -a 409 240 6 -a 409 533 6 -a 409 822 4 -a 409 690 4 -a 409 763 1 -a 409 158 7 -a 409 41 5 -a 409 86 8 -a 409 280 2 -a 409 715 6 -a 409 760 4 -a 409 65 8 -a 409 905 3 -a 409 534 6 -a 409 433 7 -a 409 599 3 -a 409 785 7 -a 409 760 8 -a 409 873 5 -a 409 274 4 -a 409 291 7 -a 409 410 3 -a 409 11 5 -a 409 309 4 -a 409 468 4 -a 409 268 6 -a 409 675 6 -a 409 462 9 -a 409 200 1 -a 409 481 2 -a 409 701 8 -a 409 732 1 -a 409 279 8 -a 409 366 2 -a 409 471 5 -a 409 273 4 -a 409 523 10 -a 410 511 5 -a 410 359 7 -a 410 803 5 -a 410 201 3 -a 410 94 1 -a 410 867 9 -a 410 81 6 -a 410 627 4 -a 410 275 9 -a 410 680 8 -a 410 387 2 -a 410 10 5 -a 410 528 1 -a 410 661 7 -a 410 301 7 -a 410 937 1 -a 410 671 9 -a 410 609 5 -a 410 380 2 -a 410 939 9 -a 410 259 10 -a 410 841 1 -a 410 114 10 -a 410 740 10 -a 410 517 1 -a 410 845 7 -a 410 883 1 -a 410 291 6 -a 410 266 7 -a 410 381 3 -a 410 801 7 -a 410 624 9 -a 410 159 5 -a 410 717 8 -a 410 2 6 -a 410 58 1 -a 410 320 9 -a 410 276 10 -a 410 737 10 -a 410 706 6 -a 410 286 6 -a 410 241 4 -a 410 342 7 -a 410 586 10 -a 410 153 10 -a 410 170 10 -a 410 533 6 -a 410 927 10 -a 410 428 4 -a 410 349 9 -a 410 16 6 -a 410 143 7 -a 410 866 7 -a 410 860 4 -a 410 136 5 -a 410 724 8 -a 410 127 5 -a 410 402 8 -a 410 80 5 -a 410 927 10 -a 410 1 2 -a 410 239 5 -a 410 904 5 -a 410 718 4 -a 410 240 8 -a 410 962 10 -a 410 13 8 -a 410 515 7 -a 410 674 3 -a 410 718 7 -a 410 800 8 -a 410 914 2 -a 410 36 2 -a 410 361 6 -a 410 43 9 -a 410 24 10 -a 410 530 10 -a 410 575 9 -a 410 950 1 -a 410 958 2 -a 410 923 9 -a 410 965 5 -a 410 76 8 -a 410 764 2 -a 410 800 1 -a 410 212 2 -a 410 463 8 -a 410 926 1 -a 410 613 3 -a 410 543 7 -a 410 829 1 -a 410 613 8 -a 410 781 5 -a 410 708 6 -a 410 306 1 -a 410 645 9 -a 410 318 10 -a 410 510 9 -a 410 295 9 -a 410 12 5 -a 410 286 5 -a 410 184 1 -a 410 47 5 -a 410 646 5 -a 410 226 7 -a 410 70 2 -a 410 152 10 -a 411 800 2 -a 411 85 3 -a 411 699 4 -a 411 959 2 -a 411 160 8 -a 411 438 8 -a 411 734 6 -a 411 371 7 -a 411 901 3 -a 411 636 4 -a 411 983 3 -a 411 419 4 -a 411 440 3 -a 411 572 1 -a 411 175 4 -a 411 123 5 -a 411 877 9 -a 411 170 10 -a 411 768 4 -a 411 171 6 -a 411 679 8 -a 411 38 2 -a 411 182 8 -a 411 964 4 -a 411 221 10 -a 411 228 9 -a 411 586 7 -a 411 447 1 -a 411 297 6 -a 411 737 4 -a 411 222 4 -a 411 291 1 -a 411 821 1 -a 411 920 1 -a 411 225 9 -a 411 980 10 -a 411 334 4 -a 411 958 3 -a 411 327 1 -a 411 210 7 -a 411 569 8 -a 411 285 7 -a 411 628 4 -a 411 856 3 -a 411 802 8 -a 411 107 1 -a 411 709 2 -a 411 971 4 -a 411 874 10 -a 411 879 10 -a 411 625 6 -a 411 911 2 -a 411 36 3 -a 411 565 3 -a 411 107 2 -a 411 263 3 -a 411 126 3 -a 411 553 10 -a 411 559 6 -a 411 862 6 -a 411 775 10 -a 411 849 1 -a 411 658 6 -a 411 670 4 -a 411 49 9 -a 411 613 2 -a 411 939 9 -a 411 188 5 -a 411 551 5 -a 411 200 10 -a 411 815 4 -a 411 534 6 -a 411 31 3 -a 411 592 8 -a 411 640 6 -a 411 739 2 -a 411 538 9 -a 411 489 3 -a 411 593 10 -a 411 139 8 -a 411 375 2 -a 411 628 4 -a 411 703 2 -a 411 482 8 -a 411 890 8 -a 411 828 1 -a 411 10 3 -a 411 424 7 -a 411 665 6 -a 411 784 1 -a 411 248 8 -a 411 298 1 -a 411 430 5 -a 411 296 2 -a 411 910 5 -a 411 408 7 -a 411 278 2 -a 411 825 10 -a 411 596 3 -a 411 828 1 -a 411 386 3 -a 411 337 3 -a 411 30 3 -a 411 978 2 -a 411 977 9 -a 411 769 4 -a 411 491 3 -a 411 441 4 -a 411 337 3 -a 411 629 9 -a 411 816 10 -a 411 965 5 -a 411 307 2 -a 412 273 9 -a 412 830 4 -a 412 110 7 -a 412 282 2 -a 412 230 8 -a 412 774 5 -a 412 42 3 -a 412 477 1 -a 412 47 5 -a 412 471 1 -a 412 773 2 -a 412 957 8 -a 412 878 3 -a 412 26 9 -a 412 757 3 -a 412 449 7 -a 412 853 7 -a 412 756 1 -a 412 835 6 -a 412 165 9 -a 412 785 9 -a 412 788 5 -a 412 117 6 -a 412 529 6 -a 412 254 6 -a 412 558 9 -a 412 866 3 -a 412 883 10 -a 412 349 10 -a 412 806 2 -a 412 165 10 -a 412 621 9 -a 412 611 1 -a 412 275 7 -a 412 902 2 -a 412 840 8 -a 412 24 4 -a 412 943 8 -a 412 293 8 -a 412 71 3 -a 412 389 1 -a 412 41 1 -a 412 3 7 -a 412 243 2 -a 412 66 8 -a 412 759 9 -a 412 691 2 -a 412 918 3 -a 412 490 6 -a 412 501 8 -a 412 58 1 -a 412 250 9 -a 412 264 8 -a 412 175 7 -a 412 779 10 -a 412 518 10 -a 412 732 1 -a 412 620 7 -a 412 376 7 -a 412 56 6 -a 412 401 3 -a 412 540 5 -a 412 676 4 -a 412 814 5 -a 412 553 1 -a 412 827 10 -a 412 838 8 -a 412 472 2 -a 412 95 2 -a 412 908 10 -a 412 860 10 -a 412 135 6 -a 412 910 4 -a 412 78 8 -a 412 200 4 -a 412 644 1 -a 412 769 4 -a 412 93 7 -a 412 109 5 -a 412 245 1 -a 412 150 1 -a 412 358 10 -a 412 509 8 -a 412 324 10 -a 412 112 3 -a 412 2 4 -a 412 31 1 -a 412 731 6 -a 412 377 9 -a 412 86 4 -a 412 107 6 -a 412 916 3 -a 412 761 4 -a 412 94 7 -a 412 706 7 -a 412 290 8 -a 412 920 2 -a 412 519 1 -a 412 761 9 -a 412 402 7 -a 413 596 3 -a 413 124 7 -a 413 287 10 -a 413 674 3 -a 413 323 6 -a 413 930 2 -a 413 418 5 -a 413 415 10 -a 413 14 3 -a 413 662 7 -a 413 564 9 -a 413 371 6 -a 413 146 3 -a 413 888 8 -a 413 483 4 -a 413 147 9 -a 413 918 7 -a 413 189 8 -a 413 523 8 -a 413 296 1 -a 413 415 10 -a 413 740 10 -a 413 389 3 -a 413 96 9 -a 413 5 1 -a 413 284 5 -a 413 614 2 -a 413 765 10 -a 413 273 7 -a 413 337 9 -a 413 396 2 -a 413 277 9 -a 413 718 8 -a 413 182 9 -a 413 403 7 -a 413 108 4 -a 413 195 1 -a 413 40 8 -a 413 671 5 -a 413 565 2 -a 413 186 3 -a 413 534 7 -a 413 23 5 -a 413 332 5 -a 413 428 4 -a 413 212 10 -a 413 855 4 -a 413 407 6 -a 413 507 7 -a 413 245 7 -a 413 122 2 -a 413 895 9 -a 413 340 6 -a 413 127 4 -a 413 154 10 -a 413 953 5 -a 413 891 1 -a 413 426 2 -a 413 943 1 -a 413 203 6 -a 413 821 2 -a 413 195 8 -a 413 188 3 -a 413 514 2 -a 413 376 1 -a 413 590 9 -a 413 621 8 -a 413 570 10 -a 413 630 8 -a 413 267 5 -a 413 110 1 -a 413 815 6 -a 413 801 8 -a 413 133 5 -a 413 122 2 -a 413 204 9 -a 413 344 2 -a 413 976 6 -a 413 610 1 -a 413 850 2 -a 413 196 4 -a 413 731 8 -a 413 720 5 -a 413 535 9 -a 413 857 5 -a 413 873 10 -a 413 463 6 -a 413 724 10 -a 413 274 4 -a 413 381 3 -a 413 926 7 -a 413 70 1 -a 413 575 10 -a 413 90 6 -a 413 583 10 -a 413 950 3 -a 413 679 10 -a 413 179 1 -a 413 495 8 -a 413 284 9 -a 413 445 8 -a 413 605 1 -a 413 74 2 -a 413 221 10 -a 414 737 7 -a 414 196 4 -a 414 424 1 -a 414 56 3 -a 414 147 1 -a 414 9 3 -a 414 905 1 -a 414 343 7 -a 414 740 1 -a 414 600 7 -a 414 877 10 -a 414 572 3 -a 414 448 7 -a 414 316 8 -a 414 271 7 -a 414 721 8 -a 414 696 6 -a 414 173 8 -a 414 790 9 -a 414 247 8 -a 414 262 1 -a 414 348 10 -a 414 172 10 -a 414 940 1 -a 414 526 10 -a 414 667 7 -a 414 200 3 -a 414 970 3 -a 414 247 6 -a 414 273 7 -a 414 167 1 -a 414 983 5 -a 414 468 8 -a 414 590 4 -a 414 14 7 -a 414 615 8 -a 414 599 2 -a 414 918 5 -a 414 957 1 -a 414 314 9 -a 414 493 3 -a 414 809 10 -a 414 885 3 -a 414 940 3 -a 414 100 10 -a 414 132 3 -a 414 636 2 -a 414 796 3 -a 414 304 1 -a 414 401 8 -a 414 18 6 -a 414 565 10 -a 414 748 3 -a 414 189 10 -a 414 480 1 -a 414 249 2 -a 414 855 10 -a 414 679 8 -a 414 194 1 -a 414 77 1 -a 414 952 5 -a 414 360 3 -a 414 35 9 -a 414 395 6 -a 414 950 8 -a 414 48 4 -a 414 524 9 -a 414 965 6 -a 414 941 1 -a 414 837 10 -a 414 433 5 -a 414 726 4 -a 414 697 3 -a 414 348 4 -a 414 825 5 -a 414 828 6 -a 414 983 5 -a 414 596 6 -a 414 107 1 -a 414 359 8 -a 414 613 8 -a 414 671 3 -a 414 82 2 -a 414 802 2 -a 414 127 9 -a 414 330 1 -a 414 632 5 -a 414 805 1 -a 414 524 7 -a 414 709 4 -a 414 732 3 -a 414 883 7 -a 414 743 1 -a 414 103 4 -a 414 808 9 -a 414 791 10 -a 414 87 1 -a 414 307 1 -a 414 731 3 -a 414 4 3 -a 415 119 1 -a 415 140 4 -a 415 729 5 -a 415 816 2 -a 415 487 9 -a 415 529 5 -a 415 619 1 -a 415 446 5 -a 415 101 1 -a 415 726 5 -a 415 804 2 -a 415 713 8 -a 415 372 3 -a 415 886 1 -a 415 490 2 -a 415 498 2 -a 415 191 4 -a 415 98 8 -a 415 279 4 -a 415 714 8 -a 415 806 9 -a 415 573 8 -a 415 524 4 -a 415 88 10 -a 415 356 6 -a 415 290 2 -a 415 175 7 -a 415 663 8 -a 415 178 5 -a 415 781 10 -a 415 136 7 -a 415 906 1 -a 415 572 1 -a 415 622 1 -a 415 410 2 -a 415 167 7 -a 415 43 5 -a 415 510 2 -a 415 892 1 -a 415 847 8 -a 415 199 8 -a 415 239 8 -a 415 708 9 -a 415 688 5 -a 415 737 6 -a 415 898 5 -a 415 785 8 -a 415 588 5 -a 415 566 5 -a 415 1000 6 -a 415 136 5 -a 415 66 6 -a 415 64 4 -a 415 491 7 -a 415 355 5 -a 415 238 5 -a 415 129 3 -a 415 351 10 -a 415 415 5 -a 415 910 9 -a 415 486 2 -a 415 296 4 -a 415 457 10 -a 415 84 7 -a 415 705 6 -a 415 623 5 -a 415 126 10 -a 415 191 5 -a 415 490 3 -a 415 972 10 -a 415 389 6 -a 415 729 4 -a 415 655 1 -a 415 52 2 -a 415 441 6 -a 415 529 1 -a 415 837 7 -a 415 431 1 -a 415 92 1 -a 415 378 9 -a 415 406 1 -a 415 227 6 -a 415 443 8 -a 415 469 3 -a 415 717 8 -a 415 798 8 -a 415 706 6 -a 415 846 9 -a 415 124 2 -a 415 96 7 -a 416 731 3 -a 416 610 6 -a 416 391 2 -a 416 163 10 -a 416 693 4 -a 416 72 3 -a 416 786 9 -a 416 818 3 -a 416 262 1 -a 416 251 4 -a 416 766 8 -a 416 650 9 -a 416 979 2 -a 416 396 7 -a 416 701 5 -a 416 395 7 -a 416 924 5 -a 416 513 5 -a 416 825 7 -a 416 891 3 -a 416 207 10 -a 416 217 5 -a 416 309 5 -a 416 675 8 -a 416 934 10 -a 416 82 6 -a 416 357 1 -a 416 755 8 -a 416 206 9 -a 416 452 10 -a 416 461 9 -a 416 815 10 -a 416 843 7 -a 416 623 6 -a 416 483 5 -a 416 914 3 -a 416 384 2 -a 416 276 9 -a 416 151 1 -a 416 635 7 -a 416 17 5 -a 416 800 7 -a 416 589 7 -a 416 413 1 -a 416 476 8 -a 416 984 8 -a 416 312 6 -a 416 989 3 -a 416 784 1 -a 416 303 8 -a 416 855 3 -a 416 990 9 -a 416 519 6 -a 416 139 1 -a 416 641 8 -a 416 428 10 -a 416 221 3 -a 416 997 3 -a 416 158 3 -a 416 426 1 -a 416 424 5 -a 416 618 6 -a 416 216 3 -a 416 242 8 -a 416 217 6 -a 416 698 5 -a 416 131 1 -a 416 600 6 -a 416 973 2 -a 416 281 4 -a 416 210 5 -a 416 990 2 -a 416 56 4 -a 416 799 6 -a 416 378 6 -a 416 532 1 -a 416 758 1 -a 416 689 6 -a 416 496 3 -a 416 517 4 -a 416 991 5 -a 416 326 2 -a 416 483 7 -a 416 486 7 -a 416 464 6 -a 416 99 5 -a 416 913 5 -a 416 684 10 -a 416 71 5 -a 416 47 7 -a 416 85 4 -a 416 494 9 -a 416 664 2 -a 416 300 3 -a 416 736 7 -a 416 880 8 -a 416 997 7 -a 416 866 6 -a 416 456 9 -a 416 946 10 -a 416 123 6 -a 416 665 5 -a 416 911 10 -a 416 178 9 -a 416 439 4 -a 416 264 8 -a 416 709 7 -a 417 172 9 -a 417 952 3 -a 417 180 10 -a 417 689 1 -a 417 919 9 -a 417 505 6 -a 417 147 1 -a 417 380 6 -a 417 969 5 -a 417 245 9 -a 417 268 7 -a 417 628 6 -a 417 315 2 -a 417 314 3 -a 417 713 10 -a 417 808 2 -a 417 978 5 -a 417 519 10 -a 417 833 7 -a 417 985 4 -a 417 361 10 -a 417 264 10 -a 417 906 7 -a 417 483 10 -a 417 929 3 -a 417 792 3 -a 417 660 10 -a 417 343 2 -a 417 31 10 -a 417 345 1 -a 417 515 3 -a 417 982 1 -a 417 524 7 -a 417 179 6 -a 417 876 8 -a 417 5 10 -a 417 325 7 -a 417 231 2 -a 417 973 1 -a 417 569 4 -a 417 499 2 -a 417 576 4 -a 417 883 6 -a 417 812 1 -a 417 264 4 -a 417 666 8 -a 417 765 7 -a 417 252 2 -a 417 161 9 -a 417 574 9 -a 417 212 8 -a 417 521 1 -a 417 837 1 -a 417 93 8 -a 417 741 7 -a 417 884 2 -a 417 638 3 -a 417 60 6 -a 417 914 2 -a 417 982 6 -a 417 574 3 -a 417 871 7 -a 417 482 1 -a 417 752 5 -a 417 723 5 -a 417 486 5 -a 417 52 5 -a 417 953 3 -a 417 434 6 -a 417 620 9 -a 417 427 3 -a 417 478 10 -a 417 215 9 -a 417 249 7 -a 417 119 5 -a 417 979 1 -a 417 500 10 -a 417 279 7 -a 417 528 3 -a 417 711 5 -a 417 799 8 -a 417 341 9 -a 417 803 7 -a 417 777 4 -a 417 57 1 -a 417 662 6 -a 417 391 6 -a 417 116 9 -a 417 551 8 -a 417 348 5 -a 417 689 6 -a 417 397 1 -a 417 829 1 -a 417 416 6 -a 417 95 5 -a 417 290 1 -a 417 467 7 -a 417 24 10 -a 418 723 2 -a 418 62 7 -a 418 450 1 -a 418 708 4 -a 418 539 3 -a 418 664 10 -a 418 956 1 -a 418 658 5 -a 418 619 8 -a 418 431 10 -a 418 936 8 -a 418 122 10 -a 418 117 4 -a 418 711 7 -a 418 462 6 -a 418 919 9 -a 418 463 8 -a 418 519 4 -a 418 556 5 -a 418 853 3 -a 418 634 7 -a 418 82 7 -a 418 177 7 -a 418 299 1 -a 418 478 10 -a 418 714 6 -a 418 573 3 -a 418 271 2 -a 418 157 1 -a 418 596 10 -a 418 993 3 -a 418 218 4 -a 418 21 3 -a 418 676 5 -a 418 757 7 -a 418 685 3 -a 418 607 8 -a 418 390 5 -a 418 279 2 -a 418 13 1 -a 418 301 4 -a 418 400 3 -a 418 129 2 -a 418 862 2 -a 418 23 9 -a 418 450 7 -a 418 356 9 -a 418 578 7 -a 418 278 5 -a 418 989 9 -a 418 659 9 -a 418 454 8 -a 418 263 8 -a 418 113 6 -a 418 435 10 -a 418 977 3 -a 418 685 10 -a 418 705 5 -a 418 109 1 -a 418 256 10 -a 418 673 10 -a 418 326 2 -a 418 276 9 -a 418 325 3 -a 418 58 2 -a 418 960 10 -a 418 931 2 -a 418 447 10 -a 418 214 8 -a 418 944 8 -a 418 748 1 -a 418 614 5 -a 418 48 8 -a 418 734 10 -a 418 451 4 -a 418 71 10 -a 418 159 4 -a 418 806 3 -a 418 648 4 -a 418 437 7 -a 418 770 2 -a 418 283 10 -a 418 890 3 -a 418 9 8 -a 418 395 9 -a 418 300 5 -a 418 985 7 -a 418 55 10 -a 418 69 5 -a 418 310 6 -a 419 653 7 -a 419 394 7 -a 419 585 7 -a 419 977 8 -a 419 452 10 -a 419 521 7 -a 419 883 4 -a 419 898 9 -a 419 734 2 -a 419 802 10 -a 419 621 2 -a 419 323 9 -a 419 850 2 -a 419 331 6 -a 419 773 4 -a 419 920 3 -a 419 489 2 -a 419 554 8 -a 419 543 10 -a 419 925 9 -a 419 300 8 -a 419 825 8 -a 419 791 1 -a 419 308 10 -a 419 195 3 -a 419 66 5 -a 419 268 8 -a 419 249 7 -a 419 46 8 -a 419 336 8 -a 419 558 6 -a 419 698 10 -a 419 729 4 -a 419 119 4 -a 419 650 1 -a 419 156 7 -a 419 639 4 -a 419 508 2 -a 419 30 6 -a 419 348 10 -a 419 286 8 -a 419 650 7 -a 419 671 7 -a 419 111 6 -a 419 980 2 -a 419 419 6 -a 419 6 2 -a 419 445 6 -a 419 973 7 -a 419 548 10 -a 419 345 4 -a 419 248 7 -a 419 349 5 -a 419 111 5 -a 419 555 2 -a 419 543 8 -a 419 177 2 -a 419 822 5 -a 419 792 4 -a 419 222 10 -a 419 133 10 -a 419 325 1 -a 419 919 3 -a 419 861 6 -a 419 443 4 -a 419 544 6 -a 419 57 2 -a 419 27 6 -a 419 22 5 -a 419 405 1 -a 419 312 10 -a 419 671 8 -a 419 51 10 -a 419 422 10 -a 419 627 5 -a 419 469 3 -a 419 427 8 -a 419 47 9 -a 419 417 1 -a 419 975 10 -a 419 391 1 -a 419 664 1 -a 419 299 5 -a 419 502 6 -a 419 194 1 -a 419 841 10 -a 419 678 10 -a 419 608 1 -a 419 899 4 -a 419 123 4 -a 419 933 10 -a 419 793 2 -a 419 984 10 -a 419 351 8 -a 419 312 4 -a 419 976 8 -a 419 408 5 -a 419 338 4 -a 419 997 6 -a 419 812 2 -a 420 650 4 -a 420 643 4 -a 420 862 3 -a 420 47 5 -a 420 245 3 -a 420 306 9 -a 420 474 8 -a 420 291 2 -a 420 723 1 -a 420 424 5 -a 420 682 4 -a 420 362 5 -a 420 722 7 -a 420 159 1 -a 420 556 6 -a 420 538 2 -a 420 836 9 -a 420 546 5 -a 420 122 8 -a 420 710 4 -a 420 669 10 -a 420 30 3 -a 420 478 7 -a 420 628 3 -a 420 380 5 -a 420 789 6 -a 420 579 4 -a 420 787 5 -a 420 102 1 -a 420 551 9 -a 420 574 8 -a 420 751 5 -a 420 169 7 -a 420 411 3 -a 420 798 4 -a 420 414 7 -a 420 717 6 -a 420 247 1 -a 420 704 4 -a 420 415 9 -a 420 670 10 -a 420 361 7 -a 420 776 2 -a 420 367 8 -a 420 519 10 -a 420 307 6 -a 420 904 10 -a 420 330 2 -a 420 853 6 -a 420 1 9 -a 420 15 4 -a 420 497 1 -a 420 30 2 -a 420 492 4 -a 420 100 9 -a 420 410 5 -a 420 256 3 -a 420 678 3 -a 420 172 9 -a 420 358 9 -a 420 204 6 -a 420 746 10 -a 420 84 4 -a 420 372 3 -a 420 132 9 -a 420 881 6 -a 420 785 3 -a 420 848 3 -a 420 103 1 -a 420 465 8 -a 420 238 9 -a 420 772 8 -a 420 825 2 -a 420 114 5 -a 420 320 1 -a 420 296 3 -a 420 649 7 -a 420 124 4 -a 420 664 3 -a 420 620 1 -a 420 24 5 -a 420 131 7 -a 420 719 6 -a 420 433 3 -a 420 387 6 -a 420 372 8 -a 420 604 5 -a 420 744 6 -a 420 575 4 -a 421 325 7 -a 421 827 6 -a 421 947 10 -a 421 457 3 -a 421 684 7 -a 421 707 8 -a 421 280 7 -a 421 786 7 -a 421 147 10 -a 421 518 9 -a 421 534 6 -a 421 972 5 -a 421 507 6 -a 421 647 9 -a 421 267 8 -a 421 802 3 -a 421 640 5 -a 421 915 5 -a 421 926 5 -a 421 634 9 -a 421 554 9 -a 421 521 5 -a 421 657 9 -a 421 685 7 -a 421 216 4 -a 421 65 7 -a 421 47 5 -a 421 587 10 -a 421 668 1 -a 421 790 2 -a 421 138 4 -a 421 993 10 -a 421 592 1 -a 421 60 9 -a 421 425 6 -a 421 251 3 -a 421 766 5 -a 421 704 4 -a 421 13 10 -a 421 913 4 -a 421 197 4 -a 421 546 1 -a 421 860 2 -a 421 703 9 -a 421 168 1 -a 421 102 10 -a 421 481 8 -a 421 808 5 -a 421 382 8 -a 421 417 8 -a 421 546 1 -a 421 902 10 -a 421 49 4 -a 421 206 8 -a 421 93 1 -a 421 113 1 -a 421 252 4 -a 421 680 10 -a 421 780 9 -a 421 17 7 -a 421 817 2 -a 421 748 2 -a 421 608 3 -a 421 876 7 -a 421 148 10 -a 421 859 8 -a 421 617 4 -a 421 852 7 -a 421 871 3 -a 421 505 9 -a 421 24 7 -a 421 392 3 -a 421 340 7 -a 421 727 3 -a 421 559 7 -a 421 441 5 -a 421 183 10 -a 421 342 8 -a 421 433 5 -a 421 564 9 -a 421 758 7 -a 421 978 7 -a 421 441 3 -a 421 806 1 -a 421 159 3 -a 421 534 1 -a 421 918 2 -a 421 410 1 -a 421 189 8 -a 421 674 8 -a 421 426 5 -a 421 397 1 -a 421 9 7 -a 421 856 7 -a 422 545 6 -a 422 867 6 -a 422 448 7 -a 422 372 5 -a 422 713 3 -a 422 953 1 -a 422 395 6 -a 422 80 1 -a 422 268 6 -a 422 97 10 -a 422 639 3 -a 422 709 10 -a 422 279 10 -a 422 980 9 -a 422 117 8 -a 422 842 7 -a 422 714 7 -a 422 70 7 -a 422 259 2 -a 422 495 8 -a 422 228 7 -a 422 792 9 -a 422 389 4 -a 422 637 8 -a 422 980 8 -a 422 38 1 -a 422 38 8 -a 422 960 3 -a 422 434 6 -a 422 46 9 -a 422 791 3 -a 422 978 8 -a 422 913 1 -a 422 214 6 -a 422 325 7 -a 422 601 9 -a 422 142 7 -a 422 720 7 -a 422 681 4 -a 422 410 3 -a 422 816 8 -a 422 295 1 -a 422 94 10 -a 422 71 9 -a 422 250 7 -a 422 210 2 -a 422 912 7 -a 422 963 9 -a 422 279 7 -a 422 146 6 -a 422 434 10 -a 422 506 7 -a 422 937 1 -a 422 822 4 -a 422 118 2 -a 422 892 9 -a 422 859 5 -a 422 155 10 -a 422 827 5 -a 422 268 2 -a 422 200 5 -a 422 593 2 -a 422 222 3 -a 422 88 5 -a 422 807 1 -a 422 546 2 -a 422 689 2 -a 422 948 3 -a 422 241 9 -a 422 345 5 -a 422 333 5 -a 422 33 5 -a 422 639 2 -a 422 426 1 -a 422 103 7 -a 422 888 4 -a 422 635 9 -a 422 827 5 -a 422 913 8 -a 422 136 7 -a 422 236 9 -a 422 394 10 -a 422 48 9 -a 422 33 5 -a 422 511 10 -a 422 940 9 -a 422 891 6 -a 422 665 5 -a 422 742 5 -a 422 134 3 -a 423 865 9 -a 423 311 10 -a 423 355 8 -a 423 952 10 -a 423 93 7 -a 423 901 3 -a 423 616 5 -a 423 16 1 -a 423 117 9 -a 423 960 4 -a 423 349 7 -a 423 149 2 -a 423 574 4 -a 423 774 8 -a 423 251 8 -a 423 438 1 -a 423 385 4 -a 423 241 1 -a 423 240 10 -a 423 273 6 -a 423 376 4 -a 423 475 6 -a 423 667 9 -a 423 423 9 -a 423 507 3 -a 423 153 2 -a 423 338 8 -a 423 373 2 -a 423 818 7 -a 423 56 2 -a 423 506 8 -a 423 658 10 -a 423 366 10 -a 423 861 1 -a 423 585 2 -a 423 458 1 -a 423 737 5 -a 423 177 10 -a 423 473 1 -a 423 853 6 -a 423 112 10 -a 423 821 6 -a 423 686 7 -a 423 571 9 -a 423 228 10 -a 423 99 10 -a 423 955 7 -a 423 468 7 -a 423 338 5 -a 423 203 1 -a 423 843 3 -a 423 812 2 -a 423 869 1 -a 423 242 6 -a 423 294 7 -a 423 579 10 -a 423 666 6 -a 423 815 6 -a 423 634 7 -a 423 147 9 -a 423 448 2 -a 423 999 6 -a 423 8 4 -a 423 432 3 -a 423 719 2 -a 423 184 9 -a 423 905 2 -a 423 548 2 -a 423 296 8 -a 423 701 5 -a 423 525 6 -a 423 981 7 -a 423 247 5 -a 423 752 8 -a 423 55 6 -a 423 177 6 -a 423 196 4 -a 423 392 6 -a 423 380 10 -a 423 14 1 -a 423 179 6 -a 423 224 2 -a 423 255 4 -a 423 472 10 -a 423 221 3 -a 423 834 9 -a 423 113 2 -a 423 11 4 -a 423 443 2 -a 423 259 10 -a 423 458 3 -a 423 418 9 -a 423 242 8 -a 423 466 5 -a 423 849 3 -a 423 960 6 -a 423 649 4 -a 423 729 3 -a 423 483 5 -a 423 944 9 -a 423 406 3 -a 423 900 10 -a 423 652 1 -a 423 735 10 -a 423 954 8 -a 423 829 5 -a 423 930 5 -a 423 321 8 -a 423 184 1 -a 423 943 4 -a 423 499 4 -a 423 407 5 -a 423 174 1 -a 424 970 8 -a 424 628 9 -a 424 58 10 -a 424 638 2 -a 424 425 3 -a 424 317 9 -a 424 72 6 -a 424 842 4 -a 424 558 10 -a 424 537 1 -a 424 667 3 -a 424 493 9 -a 424 161 7 -a 424 371 5 -a 424 976 7 -a 424 81 8 -a 424 776 10 -a 424 958 10 -a 424 980 6 -a 424 404 10 -a 424 668 9 -a 424 910 1 -a 424 208 1 -a 424 573 6 -a 424 206 2 -a 424 391 10 -a 424 492 7 -a 424 705 8 -a 424 797 7 -a 424 665 10 -a 424 650 10 -a 424 400 6 -a 424 647 7 -a 424 708 6 -a 424 14 2 -a 424 47 4 -a 424 85 9 -a 424 889 10 -a 424 557 3 -a 424 621 10 -a 424 531 10 -a 424 25 1 -a 424 781 4 -a 424 901 9 -a 424 1000 1 -a 424 861 9 -a 424 653 10 -a 424 934 10 -a 424 817 7 -a 424 32 7 -a 424 577 6 -a 424 702 4 -a 424 239 7 -a 424 126 5 -a 424 907 6 -a 424 629 6 -a 424 617 1 -a 424 587 9 -a 424 401 6 -a 424 257 2 -a 424 213 7 -a 424 801 4 -a 424 903 10 -a 424 920 3 -a 424 814 5 -a 424 949 9 -a 424 919 9 -a 424 898 4 -a 424 813 7 -a 424 451 10 -a 424 494 2 -a 424 319 3 -a 424 475 9 -a 424 250 2 -a 424 196 9 -a 424 451 6 -a 424 87 7 -a 424 848 10 -a 424 360 1 -a 424 903 5 -a 424 879 4 -a 424 936 8 -a 424 580 5 -a 424 93 3 -a 424 37 7 -a 424 462 8 -a 424 721 4 -a 424 653 3 -a 424 25 5 -a 424 97 4 -a 424 909 4 -a 424 237 2 -a 424 897 1 -a 424 787 2 -a 424 132 4 -a 424 686 3 -a 424 712 5 -a 424 26 5 -a 424 559 6 -a 424 500 9 -a 424 476 4 -a 425 28 4 -a 425 819 7 -a 425 950 1 -a 425 278 8 -a 425 376 10 -a 425 364 1 -a 425 837 2 -a 425 735 1 -a 425 242 6 -a 425 691 2 -a 425 647 7 -a 425 821 5 -a 425 783 1 -a 425 683 4 -a 425 258 10 -a 425 479 4 -a 425 312 9 -a 425 282 7 -a 425 575 1 -a 425 196 10 -a 425 518 6 -a 425 448 2 -a 425 983 1 -a 425 649 9 -a 425 109 9 -a 425 670 9 -a 425 674 7 -a 425 668 4 -a 425 145 10 -a 425 125 6 -a 425 695 10 -a 425 963 1 -a 425 51 2 -a 425 972 10 -a 425 952 10 -a 425 426 7 -a 425 311 7 -a 425 764 7 -a 425 137 6 -a 425 552 8 -a 425 430 6 -a 425 783 5 -a 425 348 3 -a 425 188 2 -a 425 441 5 -a 425 606 4 -a 425 666 3 -a 425 752 6 -a 425 887 9 -a 425 217 3 -a 425 948 5 -a 425 381 10 -a 425 664 2 -a 425 906 2 -a 425 5 9 -a 425 772 9 -a 425 551 7 -a 425 679 7 -a 425 415 10 -a 425 695 2 -a 425 803 5 -a 425 86 6 -a 425 634 8 -a 425 853 1 -a 425 33 5 -a 425 561 1 -a 425 255 8 -a 425 344 3 -a 425 301 7 -a 425 391 2 -a 425 895 10 -a 425 730 3 -a 425 149 4 -a 425 219 3 -a 425 918 4 -a 425 589 10 -a 425 824 9 -a 425 559 1 -a 425 317 3 -a 425 686 7 -a 425 775 3 -a 425 240 5 -a 425 42 2 -a 425 414 5 -a 425 121 6 -a 425 47 8 -a 425 162 9 -a 425 671 5 -a 425 725 3 -a 425 576 2 -a 425 341 5 -a 425 503 3 -a 425 661 3 -a 425 974 8 -a 425 332 1 -a 425 694 4 -a 425 511 7 -a 425 586 2 -a 425 13 7 -a 425 811 6 -a 426 976 5 -a 426 907 6 -a 426 516 10 -a 426 100 6 -a 426 101 4 -a 426 409 2 -a 426 688 9 -a 426 924 6 -a 426 968 5 -a 426 586 2 -a 426 718 3 -a 426 219 1 -a 426 627 4 -a 426 108 4 -a 426 339 3 -a 426 673 1 -a 426 269 5 -a 426 373 8 -a 426 844 5 -a 426 326 1 -a 426 876 5 -a 426 481 5 -a 426 275 5 -a 426 183 10 -a 426 150 10 -a 426 785 5 -a 426 768 1 -a 426 162 8 -a 426 571 10 -a 426 719 9 -a 426 44 9 -a 426 63 1 -a 426 818 1 -a 426 145 9 -a 426 471 9 -a 426 481 3 -a 426 44 7 -a 426 414 7 -a 426 461 2 -a 426 629 7 -a 426 108 6 -a 426 679 4 -a 426 232 4 -a 426 215 5 -a 426 904 4 -a 426 483 7 -a 426 253 9 -a 426 302 10 -a 426 303 8 -a 426 104 8 -a 426 782 10 -a 426 578 3 -a 426 286 5 -a 426 931 10 -a 426 338 1 -a 426 29 2 -a 426 68 4 -a 426 909 3 -a 426 747 8 -a 426 112 5 -a 426 971 10 -a 426 540 2 -a 426 256 4 -a 426 417 5 -a 426 299 8 -a 426 831 4 -a 426 456 7 -a 426 928 8 -a 426 938 4 -a 426 111 8 -a 426 135 1 -a 426 128 4 -a 426 104 3 -a 426 14 10 -a 426 610 6 -a 426 81 7 -a 426 266 3 -a 426 911 7 -a 426 384 3 -a 426 369 5 -a 426 669 10 -a 426 961 6 -a 426 654 8 -a 426 575 2 -a 426 274 2 -a 426 682 5 -a 426 643 10 -a 427 158 6 -a 427 404 1 -a 427 754 2 -a 427 104 9 -a 427 943 2 -a 427 521 2 -a 427 939 5 -a 427 283 8 -a 427 327 7 -a 427 370 2 -a 427 186 1 -a 427 240 10 -a 427 480 10 -a 427 320 6 -a 427 367 5 -a 427 583 1 -a 427 334 4 -a 427 976 5 -a 427 664 1 -a 427 599 7 -a 427 862 9 -a 427 23 7 -a 427 968 8 -a 427 506 5 -a 427 983 5 -a 427 597 3 -a 427 57 7 -a 427 232 9 -a 427 255 1 -a 427 699 4 -a 427 390 7 -a 427 658 2 -a 427 428 2 -a 427 493 3 -a 427 577 2 -a 427 412 6 -a 427 491 7 -a 427 694 7 -a 427 315 9 -a 427 860 1 -a 427 880 8 -a 427 554 4 -a 427 316 4 -a 427 175 10 -a 427 920 10 -a 427 898 9 -a 427 508 7 -a 427 871 10 -a 427 537 9 -a 427 83 5 -a 427 709 4 -a 427 559 6 -a 427 26 1 -a 427 190 8 -a 427 517 3 -a 427 622 6 -a 427 246 9 -a 427 749 4 -a 427 876 5 -a 427 944 3 -a 427 114 3 -a 427 510 2 -a 427 347 5 -a 427 606 6 -a 427 62 5 -a 427 758 7 -a 427 595 6 -a 427 552 10 -a 427 428 10 -a 427 909 5 -a 427 387 4 -a 427 283 10 -a 427 439 10 -a 427 702 2 -a 427 457 9 -a 427 334 3 -a 427 576 10 -a 427 965 4 -a 427 181 5 -a 427 88 7 -a 427 23 6 -a 427 889 7 -a 427 647 10 -a 427 48 10 -a 427 54 4 -a 427 139 9 -a 427 669 3 -a 427 300 3 -a 427 887 4 -a 427 521 2 -a 427 219 8 -a 427 1000 5 -a 427 6 5 -a 427 566 7 -a 428 582 5 -a 428 67 5 -a 428 299 2 -a 428 152 9 -a 428 618 10 -a 428 726 6 -a 428 36 8 -a 428 474 8 -a 428 682 9 -a 428 441 7 -a 428 808 9 -a 428 233 9 -a 428 381 2 -a 428 988 8 -a 428 320 7 -a 428 403 8 -a 428 852 5 -a 428 966 1 -a 428 450 2 -a 428 905 9 -a 428 81 4 -a 428 94 4 -a 428 180 10 -a 428 967 4 -a 428 614 4 -a 428 399 8 -a 428 943 2 -a 428 619 4 -a 428 964 10 -a 428 500 5 -a 428 685 4 -a 428 238 5 -a 428 651 2 -a 428 278 6 -a 428 964 6 -a 428 686 7 -a 428 258 6 -a 428 947 7 -a 428 136 5 -a 428 939 4 -a 428 363 8 -a 428 943 1 -a 428 147 7 -a 428 743 10 -a 428 906 7 -a 428 466 9 -a 428 121 6 -a 428 733 7 -a 428 408 2 -a 428 570 9 -a 428 613 4 -a 428 488 6 -a 428 664 10 -a 428 793 1 -a 428 430 3 -a 428 253 7 -a 428 167 4 -a 428 348 9 -a 428 872 6 -a 428 106 8 -a 428 847 1 -a 428 532 7 -a 428 343 10 -a 428 473 6 -a 428 810 1 -a 428 282 6 -a 428 135 10 -a 428 43 7 -a 428 205 9 -a 428 270 3 -a 428 981 10 -a 428 567 5 -a 428 188 6 -a 428 103 10 -a 428 286 4 -a 428 69 2 -a 428 568 10 -a 428 406 3 -a 428 801 1 -a 428 975 3 -a 428 976 1 -a 428 389 1 -a 428 438 7 -a 428 615 5 -a 428 157 2 -a 428 868 8 -a 428 867 3 -a 428 323 10 -a 428 191 1 -a 429 714 6 -a 429 428 6 -a 429 14 3 -a 429 222 3 -a 429 771 9 -a 429 486 10 -a 429 7 6 -a 429 28 1 -a 429 620 7 -a 429 49 6 -a 429 232 9 -a 429 889 7 -a 429 5 7 -a 429 799 9 -a 429 52 6 -a 429 107 5 -a 429 60 8 -a 429 120 6 -a 429 674 5 -a 429 465 8 -a 429 920 6 -a 429 625 10 -a 429 416 8 -a 429 285 5 -a 429 38 5 -a 429 6 4 -a 429 441 3 -a 429 905 10 -a 429 873 4 -a 429 764 4 -a 429 72 5 -a 429 562 5 -a 429 167 5 -a 429 85 1 -a 429 783 10 -a 429 937 4 -a 429 570 6 -a 429 789 9 -a 429 965 2 -a 429 166 6 -a 429 837 7 -a 429 172 7 -a 429 30 4 -a 429 841 3 -a 429 970 8 -a 429 82 2 -a 429 947 6 -a 429 5 6 -a 429 201 9 -a 429 597 9 -a 429 470 9 -a 429 97 7 -a 429 197 5 -a 429 885 10 -a 429 381 10 -a 429 234 3 -a 429 891 9 -a 429 821 4 -a 429 115 7 -a 429 739 4 -a 429 560 1 -a 429 186 8 -a 429 276 9 -a 429 727 7 -a 429 270 8 -a 429 35 10 -a 429 639 10 -a 429 839 2 -a 429 823 7 -a 429 579 7 -a 429 636 7 -a 429 751 4 -a 429 10 9 -a 429 452 10 -a 429 696 2 -a 429 91 5 -a 429 375 7 -a 429 701 9 -a 429 291 5 -a 429 971 10 -a 429 146 9 -a 429 387 3 -a 429 143 10 -a 429 6 10 -a 429 767 9 -a 429 376 5 -a 429 896 3 -a 429 564 10 -a 429 490 1 -a 429 610 2 -a 429 99 7 -a 429 675 8 -a 429 886 6 -a 429 825 5 -a 429 944 1 -a 429 920 1 -a 429 440 10 -a 429 759 2 -a 429 718 7 -a 429 738 1 -a 430 329 7 -a 430 744 7 -a 430 747 5 -a 430 781 9 -a 430 416 10 -a 430 837 2 -a 430 131 2 -a 430 92 7 -a 430 104 6 -a 430 77 8 -a 430 237 3 -a 430 490 8 -a 430 219 1 -a 430 242 1 -a 430 233 3 -a 430 594 4 -a 430 114 5 -a 430 796 3 -a 430 60 10 -a 430 723 2 -a 430 894 4 -a 430 734 10 -a 430 584 2 -a 430 695 5 -a 430 654 4 -a 430 479 7 -a 430 110 5 -a 430 388 8 -a 430 173 3 -a 430 103 4 -a 430 101 10 -a 430 501 5 -a 430 847 3 -a 430 848 9 -a 430 257 8 -a 430 238 5 -a 430 660 10 -a 430 387 9 -a 430 329 9 -a 430 763 7 -a 430 463 5 -a 430 565 8 -a 430 229 1 -a 430 681 3 -a 430 806 7 -a 430 461 5 -a 430 251 1 -a 430 919 3 -a 430 232 5 -a 430 310 9 -a 430 618 8 -a 430 101 7 -a 430 19 7 -a 430 177 4 -a 430 795 8 -a 430 672 9 -a 430 656 1 -a 430 904 5 -a 430 35 7 -a 430 828 10 -a 430 136 6 -a 430 304 2 -a 430 829 4 -a 430 983 6 -a 430 561 6 -a 430 42 3 -a 430 618 4 -a 430 947 10 -a 430 370 4 -a 430 357 6 -a 430 386 7 -a 430 934 8 -a 430 585 4 -a 430 42 10 -a 430 715 6 -a 430 21 5 -a 430 292 9 -a 430 610 5 -a 430 252 5 -a 430 601 5 -a 430 203 1 -a 430 352 1 -a 430 620 5 -a 430 379 10 -a 430 123 1 -a 430 267 7 -a 430 10 6 -a 430 2 4 -a 430 302 3 -a 430 837 9 -a 430 437 8 -a 430 117 3 -a 430 812 3 -a 430 395 1 -a 430 677 1 -a 430 853 2 -a 430 599 10 -a 431 198 6 -a 431 344 2 -a 431 984 10 -a 431 107 3 -a 431 928 6 -a 431 2 6 -a 431 822 6 -a 431 948 2 -a 431 293 6 -a 431 407 8 -a 431 175 3 -a 431 894 3 -a 431 609 9 -a 431 527 1 -a 431 489 2 -a 431 987 9 -a 431 649 1 -a 431 755 6 -a 431 997 1 -a 431 650 2 -a 431 32 6 -a 431 809 10 -a 431 634 10 -a 431 468 4 -a 431 925 8 -a 431 421 5 -a 431 862 3 -a 431 577 2 -a 431 250 1 -a 431 850 5 -a 431 152 3 -a 431 447 5 -a 431 169 2 -a 431 111 10 -a 431 554 1 -a 431 73 3 -a 431 112 7 -a 431 351 5 -a 431 405 8 -a 431 757 8 -a 431 171 5 -a 431 274 6 -a 431 341 7 -a 431 697 6 -a 431 762 8 -a 431 303 3 -a 431 321 1 -a 431 492 7 -a 431 275 6 -a 431 970 10 -a 431 524 9 -a 431 60 3 -a 431 579 10 -a 431 991 10 -a 431 984 7 -a 431 1000 9 -a 431 829 4 -a 431 537 6 -a 431 225 8 -a 431 654 9 -a 431 688 8 -a 431 671 2 -a 431 822 5 -a 431 798 2 -a 431 200 2 -a 431 894 6 -a 431 910 1 -a 431 550 9 -a 431 890 1 -a 431 290 5 -a 431 282 4 -a 431 36 9 -a 431 563 10 -a 431 622 8 -a 431 732 7 -a 431 300 8 -a 431 925 5 -a 431 28 3 -a 431 791 6 -a 431 175 3 -a 431 997 5 -a 431 290 10 -a 431 234 10 -a 431 552 6 -a 431 257 4 -a 431 194 8 -a 431 527 10 -a 431 61 8 -a 431 730 8 -a 431 751 10 -a 431 714 3 -a 431 393 5 -a 431 397 4 -a 431 511 7 -a 431 166 4 -a 431 597 7 -a 431 381 6 -a 431 51 1 -a 431 122 3 -a 431 246 5 -a 431 340 2 -a 431 404 7 -a 431 281 3 -a 431 902 4 -a 431 1 1 -a 432 177 7 -a 432 925 10 -a 432 15 3 -a 432 968 10 -a 432 76 6 -a 432 233 10 -a 432 309 1 -a 432 538 5 -a 432 489 3 -a 432 502 3 -a 432 40 9 -a 432 549 10 -a 432 207 9 -a 432 790 5 -a 432 238 10 -a 432 599 6 -a 432 163 7 -a 432 749 7 -a 432 765 10 -a 432 759 4 -a 432 105 8 -a 432 815 6 -a 432 880 9 -a 432 350 9 -a 432 131 7 -a 432 259 3 -a 432 630 5 -a 432 8 10 -a 432 260 3 -a 432 617 10 -a 432 185 2 -a 432 160 2 -a 432 631 10 -a 432 128 5 -a 432 235 10 -a 432 617 4 -a 432 360 4 -a 432 544 8 -a 432 131 7 -a 432 849 7 -a 432 21 7 -a 432 170 6 -a 432 373 7 -a 432 228 1 -a 432 960 2 -a 432 611 6 -a 432 826 9 -a 432 98 10 -a 432 335 5 -a 432 566 7 -a 432 856 1 -a 432 439 8 -a 432 357 4 -a 432 711 5 -a 432 788 1 -a 432 487 1 -a 432 970 3 -a 432 393 4 -a 432 494 6 -a 432 205 6 -a 432 678 10 -a 432 364 1 -a 432 615 5 -a 432 805 7 -a 432 599 1 -a 432 207 5 -a 432 141 7 -a 432 118 6 -a 432 337 2 -a 432 989 5 -a 432 138 5 -a 432 507 3 -a 432 337 8 -a 432 365 4 -a 432 442 3 -a 432 947 8 -a 432 167 6 -a 432 539 2 -a 432 257 7 -a 432 732 4 -a 432 370 3 -a 432 695 8 -a 432 64 3 -a 432 56 3 -a 432 458 2 -a 432 550 7 -a 432 1 1 -a 432 850 9 -a 432 20 5 -a 432 205 10 -a 432 834 9 -a 432 697 8 -a 432 569 9 -a 432 424 3 -a 432 478 8 -a 432 143 5 -a 432 631 4 -a 432 618 8 -a 432 260 1 -a 432 967 9 -a 432 582 6 -a 432 397 10 -a 432 449 8 -a 432 918 1 -a 432 762 1 -a 432 890 10 -a 432 841 4 -a 432 928 3 -a 432 404 4 -a 433 73 3 -a 433 635 9 -a 433 773 7 -a 433 768 5 -a 433 699 9 -a 433 829 7 -a 433 201 5 -a 433 224 8 -a 433 829 3 -a 433 27 9 -a 433 243 10 -a 433 10 10 -a 433 860 3 -a 433 940 3 -a 433 578 2 -a 433 260 6 -a 433 393 4 -a 433 720 4 -a 433 890 6 -a 433 979 10 -a 433 832 5 -a 433 567 3 -a 433 351 2 -a 433 257 1 -a 433 460 5 -a 433 88 3 -a 433 122 10 -a 433 276 9 -a 433 526 10 -a 433 349 2 -a 433 626 8 -a 433 274 5 -a 433 92 3 -a 433 300 6 -a 433 78 4 -a 433 292 10 -a 433 523 7 -a 433 907 5 -a 433 318 7 -a 433 766 3 -a 433 916 8 -a 433 154 8 -a 433 681 3 -a 433 469 6 -a 433 413 7 -a 433 49 2 -a 433 164 10 -a 433 278 9 -a 433 34 6 -a 433 118 8 -a 433 85 4 -a 433 600 4 -a 433 468 1 -a 433 341 5 -a 433 35 5 -a 433 556 5 -a 433 463 7 -a 433 311 4 -a 433 546 1 -a 433 988 10 -a 433 659 10 -a 433 147 8 -a 433 237 4 -a 433 750 1 -a 433 446 8 -a 433 315 10 -a 433 17 7 -a 433 969 9 -a 433 197 2 -a 433 335 2 -a 433 710 1 -a 433 88 8 -a 433 488 1 -a 433 366 1 -a 433 556 1 -a 433 900 8 -a 433 414 2 -a 433 719 3 -a 433 153 8 -a 433 447 9 -a 433 836 7 -a 433 237 6 -a 433 22 3 -a 433 279 4 -a 433 578 5 -a 433 56 10 -a 433 834 1 -a 433 16 8 -a 433 366 1 -a 433 356 5 -a 433 502 8 -a 433 215 1 -a 434 749 5 -a 434 948 6 -a 434 529 4 -a 434 766 7 -a 434 892 5 -a 434 725 8 -a 434 76 4 -a 434 577 4 -a 434 812 6 -a 434 563 6 -a 434 942 3 -a 434 343 5 -a 434 438 9 -a 434 331 2 -a 434 37 8 -a 434 590 1 -a 434 777 7 -a 434 872 5 -a 434 826 9 -a 434 798 9 -a 434 127 8 -a 434 379 5 -a 434 853 2 -a 434 960 1 -a 434 394 1 -a 434 195 6 -a 434 291 1 -a 434 372 5 -a 434 194 2 -a 434 793 3 -a 434 587 9 -a 434 943 9 -a 434 716 6 -a 434 91 3 -a 434 684 10 -a 434 583 8 -a 434 816 2 -a 434 759 6 -a 434 135 7 -a 434 603 6 -a 434 297 8 -a 434 52 10 -a 434 946 6 -a 434 734 10 -a 434 382 6 -a 434 982 7 -a 434 299 6 -a 434 134 3 -a 434 830 1 -a 434 100 6 -a 434 931 8 -a 434 956 8 -a 434 479 9 -a 434 759 5 -a 434 891 9 -a 434 872 4 -a 434 953 9 -a 434 158 3 -a 434 220 7 -a 434 123 2 -a 434 950 2 -a 434 806 10 -a 434 41 7 -a 434 641 7 -a 434 896 5 -a 434 724 7 -a 434 199 4 -a 434 687 2 -a 434 458 10 -a 434 333 2 -a 434 266 2 -a 434 754 8 -a 434 384 1 -a 434 187 2 -a 434 463 10 -a 434 765 3 -a 434 144 6 -a 434 761 7 -a 434 898 10 -a 434 973 6 -a 434 860 7 -a 434 804 5 -a 434 904 4 -a 434 314 2 -a 434 538 1 -a 434 771 4 -a 434 162 4 -a 434 467 5 -a 434 928 3 -a 434 381 8 -a 434 589 5 -a 434 853 3 -a 434 162 9 -a 434 629 3 -a 434 469 6 -a 434 33 5 -a 434 328 2 -a 434 667 4 -a 434 720 5 -a 434 785 5 -a 434 999 4 -a 434 985 3 -a 434 514 1 -a 434 358 1 -a 434 147 8 -a 434 976 5 -a 434 98 4 -a 434 290 7 -a 434 712 10 -a 434 995 4 -a 434 239 9 -a 434 547 3 -a 434 774 10 -a 434 118 4 -a 434 861 9 -a 434 287 8 -a 434 888 2 -a 434 753 8 -a 434 791 1 -a 434 378 10 -a 434 317 9 -a 434 619 10 -a 434 539 10 -a 434 945 5 -a 434 63 7 -a 434 571 9 -a 435 248 1 -a 435 729 5 -a 435 266 3 -a 435 8 6 -a 435 703 10 -a 435 226 6 -a 435 521 4 -a 435 36 7 -a 435 372 4 -a 435 472 6 -a 435 133 1 -a 435 662 9 -a 435 159 5 -a 435 103 1 -a 435 900 5 -a 435 706 4 -a 435 876 1 -a 435 542 5 -a 435 139 9 -a 435 881 5 -a 435 539 4 -a 435 891 1 -a 435 647 1 -a 435 916 5 -a 435 184 4 -a 435 242 5 -a 435 430 10 -a 435 104 4 -a 435 304 1 -a 435 1000 3 -a 435 352 2 -a 435 9 6 -a 435 242 3 -a 435 359 1 -a 435 711 6 -a 435 467 1 -a 435 880 3 -a 435 747 7 -a 435 839 8 -a 435 327 4 -a 435 879 6 -a 435 476 1 -a 435 486 1 -a 435 982 4 -a 435 351 5 -a 435 167 2 -a 435 833 6 -a 435 343 3 -a 435 708 1 -a 435 971 2 -a 435 199 1 -a 435 222 3 -a 435 838 6 -a 435 846 9 -a 435 113 3 -a 435 63 10 -a 435 542 4 -a 435 100 8 -a 435 366 8 -a 435 517 2 -a 435 451 8 -a 435 374 7 -a 435 758 8 -a 435 810 10 -a 435 61 10 -a 435 201 7 -a 435 665 2 -a 435 807 5 -a 435 15 6 -a 435 991 6 -a 435 661 3 -a 435 490 6 -a 435 452 1 -a 435 618 9 -a 435 840 8 -a 435 618 8 -a 435 427 4 -a 435 158 5 -a 435 301 5 -a 435 373 6 -a 435 357 1 -a 435 522 4 -a 435 186 5 -a 435 178 5 -a 435 634 1 -a 435 182 10 -a 435 240 2 -a 435 151 1 -a 435 282 1 -a 435 605 6 -a 435 668 2 -a 435 732 6 -a 435 979 4 -a 435 401 10 -a 435 517 4 -a 435 15 5 -a 435 601 2 -a 435 157 3 -a 435 821 4 -a 435 615 8 -a 435 124 9 -a 436 457 3 -a 436 80 8 -a 436 575 9 -a 436 51 10 -a 436 919 6 -a 436 169 10 -a 436 477 7 -a 436 53 9 -a 436 469 6 -a 436 849 1 -a 436 409 4 -a 436 991 5 -a 436 11 9 -a 436 586 9 -a 436 600 6 -a 436 192 7 -a 436 825 2 -a 436 751 8 -a 436 473 2 -a 436 405 1 -a 436 394 5 -a 436 181 10 -a 436 359 3 -a 436 794 3 -a 436 697 3 -a 436 373 10 -a 436 371 8 -a 436 854 3 -a 436 169 2 -a 436 985 9 -a 436 977 2 -a 436 626 3 -a 436 41 1 -a 436 527 5 -a 436 676 9 -a 436 959 9 -a 436 695 1 -a 436 128 7 -a 436 140 8 -a 436 976 9 -a 436 395 8 -a 436 106 2 -a 436 986 2 -a 436 980 10 -a 436 705 4 -a 436 154 7 -a 436 780 3 -a 436 431 10 -a 436 626 1 -a 436 161 3 -a 436 824 2 -a 436 806 3 -a 436 519 5 -a 436 594 3 -a 436 479 4 -a 436 892 3 -a 436 964 3 -a 436 308 9 -a 436 36 9 -a 436 924 2 -a 436 260 5 -a 436 661 6 -a 436 964 10 -a 436 786 7 -a 436 312 5 -a 436 899 5 -a 436 457 1 -a 436 439 3 -a 436 885 4 -a 436 596 5 -a 436 391 5 -a 436 256 10 -a 436 701 3 -a 436 352 2 -a 436 211 5 -a 436 381 8 -a 436 505 7 -a 436 991 5 -a 436 812 3 -a 436 107 4 -a 436 127 4 -a 436 611 8 -a 436 912 2 -a 436 645 3 -a 436 180 9 -a 436 366 7 -a 436 512 8 -a 436 119 5 -a 437 673 8 -a 437 548 7 -a 437 19 2 -a 437 932 10 -a 437 184 8 -a 437 982 1 -a 437 694 1 -a 437 496 4 -a 437 856 5 -a 437 126 1 -a 437 934 7 -a 437 717 9 -a 437 721 7 -a 437 300 3 -a 437 972 3 -a 437 397 7 -a 437 652 7 -a 437 158 10 -a 437 777 9 -a 437 132 1 -a 437 124 4 -a 437 564 8 -a 437 238 2 -a 437 250 6 -a 437 151 6 -a 437 126 3 -a 437 895 6 -a 437 330 9 -a 437 491 7 -a 437 382 2 -a 437 449 3 -a 437 140 2 -a 437 929 3 -a 437 467 1 -a 437 47 7 -a 437 89 5 -a 437 424 7 -a 437 740 3 -a 437 584 5 -a 437 256 5 -a 437 865 3 -a 437 493 2 -a 437 972 3 -a 437 561 5 -a 437 793 8 -a 437 919 8 -a 437 957 7 -a 437 420 3 -a 437 52 1 -a 437 710 2 -a 437 551 5 -a 437 176 10 -a 437 249 3 -a 437 789 1 -a 437 425 6 -a 437 399 1 -a 437 914 8 -a 437 295 9 -a 437 729 6 -a 437 380 7 -a 437 677 3 -a 437 153 10 -a 437 519 10 -a 437 581 5 -a 437 619 4 -a 437 566 4 -a 437 669 8 -a 437 18 4 -a 437 281 6 -a 437 228 6 -a 437 273 6 -a 437 122 7 -a 437 721 5 -a 437 220 6 -a 437 682 2 -a 437 489 3 -a 437 114 2 -a 437 615 5 -a 437 908 3 -a 437 166 9 -a 437 300 8 -a 437 434 2 -a 437 341 9 -a 437 548 4 -a 437 198 6 -a 437 765 1 -a 437 947 9 -a 437 87 6 -a 437 36 4 -a 437 651 8 -a 437 467 9 -a 437 712 6 -a 437 803 1 -a 437 985 1 -a 437 268 6 -a 437 397 5 -a 437 526 1 -a 437 937 7 -a 437 414 4 -a 437 807 3 -a 438 140 8 -a 438 687 8 -a 438 928 5 -a 438 860 1 -a 438 906 5 -a 438 585 4 -a 438 324 8 -a 438 175 7 -a 438 207 5 -a 438 161 5 -a 438 474 10 -a 438 641 5 -a 438 501 7 -a 438 838 1 -a 438 241 6 -a 438 944 6 -a 438 925 2 -a 438 276 10 -a 438 570 2 -a 438 367 1 -a 438 987 4 -a 438 348 8 -a 438 327 4 -a 438 231 8 -a 438 744 8 -a 438 853 8 -a 438 143 4 -a 438 133 7 -a 438 635 1 -a 438 282 1 -a 438 819 10 -a 438 538 5 -a 438 118 6 -a 438 701 4 -a 438 98 10 -a 438 441 3 -a 438 696 10 -a 438 273 10 -a 438 648 8 -a 438 856 2 -a 438 746 8 -a 438 264 2 -a 438 332 4 -a 438 743 10 -a 438 77 8 -a 438 572 7 -a 438 662 1 -a 438 848 10 -a 438 207 8 -a 438 343 10 -a 438 810 5 -a 438 554 10 -a 438 670 5 -a 438 16 10 -a 438 273 5 -a 438 498 7 -a 438 158 7 -a 438 406 5 -a 438 108 9 -a 438 440 8 -a 438 200 5 -a 438 645 10 -a 438 557 3 -a 438 900 3 -a 438 742 7 -a 438 997 9 -a 438 571 3 -a 438 620 6 -a 438 402 3 -a 438 736 10 -a 438 883 8 -a 438 733 1 -a 438 454 6 -a 438 960 8 -a 438 281 2 -a 438 92 7 -a 438 936 1 -a 438 104 7 -a 438 298 2 -a 438 255 3 -a 438 913 7 -a 438 852 7 -a 438 924 10 -a 438 929 9 -a 438 100 4 -a 438 397 2 -a 438 62 9 -a 438 505 4 -a 438 504 5 -a 438 501 7 -a 438 705 3 -a 438 124 1 -a 438 33 4 -a 438 580 7 -a 438 865 5 -a 438 6 1 -a 438 127 3 -a 438 855 5 -a 438 625 9 -a 438 528 6 -a 438 566 8 -a 438 484 8 -a 438 237 3 -a 438 419 3 -a 438 517 4 -a 438 86 7 -a 438 330 9 -a 438 620 3 -a 438 384 10 -a 438 584 7 -a 438 508 3 -a 438 211 8 -a 438 483 10 -a 438 412 3 -a 438 310 9 -a 438 879 5 -a 439 474 4 -a 439 815 4 -a 439 358 6 -a 439 974 8 -a 439 495 3 -a 439 481 1 -a 439 50 3 -a 439 322 7 -a 439 176 5 -a 439 152 4 -a 439 612 2 -a 439 704 1 -a 439 717 1 -a 439 71 9 -a 439 940 1 -a 439 711 6 -a 439 489 4 -a 439 432 5 -a 439 797 3 -a 439 819 2 -a 439 27 3 -a 439 156 9 -a 439 378 7 -a 439 534 1 -a 439 366 5 -a 439 861 10 -a 439 946 6 -a 439 675 4 -a 439 715 6 -a 439 395 6 -a 439 465 5 -a 439 49 8 -a 439 344 2 -a 439 959 4 -a 439 529 9 -a 439 326 8 -a 439 850 3 -a 439 313 3 -a 439 160 1 -a 439 925 8 -a 439 863 2 -a 439 693 6 -a 439 995 2 -a 439 778 9 -a 439 380 7 -a 439 460 4 -a 439 185 1 -a 439 152 1 -a 439 254 8 -a 439 211 8 -a 439 307 6 -a 439 631 7 -a 439 745 8 -a 439 672 4 -a 439 467 2 -a 439 666 4 -a 439 322 3 -a 439 158 3 -a 439 36 9 -a 439 787 4 -a 439 206 1 -a 439 379 6 -a 439 721 4 -a 439 734 2 -a 439 705 2 -a 439 705 2 -a 439 560 6 -a 439 865 9 -a 439 536 6 -a 439 917 2 -a 439 703 3 -a 439 205 10 -a 439 888 9 -a 439 457 4 -a 439 584 7 -a 439 323 8 -a 439 641 8 -a 439 735 2 -a 439 576 10 -a 439 852 4 -a 439 17 4 -a 439 182 7 -a 439 572 4 -a 439 688 5 -a 439 649 1 -a 439 213 8 -a 439 806 4 -a 439 248 2 -a 440 771 9 -a 440 626 3 -a 440 468 7 -a 440 720 3 -a 440 306 4 -a 440 148 6 -a 440 255 6 -a 440 299 3 -a 440 791 6 -a 440 191 10 -a 440 691 5 -a 440 995 2 -a 440 54 10 -a 440 123 8 -a 440 554 8 -a 440 376 5 -a 440 763 5 -a 440 264 2 -a 440 951 6 -a 440 590 8 -a 440 280 1 -a 440 109 2 -a 440 137 2 -a 440 967 1 -a 440 757 1 -a 440 349 4 -a 440 951 3 -a 440 538 4 -a 440 596 2 -a 440 698 1 -a 440 524 8 -a 440 198 6 -a 440 141 2 -a 440 219 2 -a 440 503 3 -a 440 288 4 -a 440 474 1 -a 440 801 8 -a 440 276 9 -a 440 240 9 -a 440 992 1 -a 440 966 7 -a 440 210 10 -a 440 21 10 -a 440 64 10 -a 440 763 10 -a 440 397 6 -a 440 826 1 -a 440 2 4 -a 440 323 3 -a 440 392 7 -a 440 281 6 -a 440 431 3 -a 440 528 6 -a 440 223 8 -a 440 163 1 -a 440 877 9 -a 440 149 9 -a 440 700 7 -a 440 448 9 -a 440 846 8 -a 440 199 3 -a 440 645 4 -a 440 986 3 -a 440 418 10 -a 440 124 9 -a 440 250 4 -a 440 891 9 -a 440 924 7 -a 440 525 6 -a 440 106 4 -a 440 891 3 -a 440 466 5 -a 440 315 9 -a 440 912 9 -a 440 529 7 -a 440 53 4 -a 440 284 1 -a 440 330 7 -a 440 54 1 -a 440 606 10 -a 440 721 10 -a 440 334 6 -a 440 13 10 -a 440 225 6 -a 440 556 4 -a 440 175 9 -a 440 77 5 -a 440 704 7 -a 441 875 1 -a 441 524 4 -a 441 526 10 -a 441 49 4 -a 441 145 5 -a 441 487 7 -a 441 466 6 -a 441 268 2 -a 441 736 5 -a 441 332 6 -a 441 167 9 -a 441 236 3 -a 441 437 9 -a 441 34 2 -a 441 701 4 -a 441 751 1 -a 441 945 10 -a 441 205 8 -a 441 803 7 -a 441 204 10 -a 441 535 2 -a 441 856 2 -a 441 809 1 -a 441 231 8 -a 441 165 8 -a 441 821 7 -a 441 455 1 -a 441 720 5 -a 441 996 4 -a 441 531 2 -a 441 400 9 -a 441 846 9 -a 441 31 1 -a 441 925 6 -a 441 894 8 -a 441 175 9 -a 441 387 8 -a 441 336 6 -a 441 442 9 -a 441 99 4 -a 441 667 6 -a 441 608 2 -a 441 334 7 -a 441 80 10 -a 441 641 1 -a 441 11 7 -a 441 830 8 -a 441 561 8 -a 441 215 6 -a 441 609 8 -a 441 764 9 -a 441 749 10 -a 441 440 5 -a 441 549 2 -a 441 980 10 -a 441 605 10 -a 441 345 9 -a 441 410 3 -a 441 300 2 -a 441 316 9 -a 441 941 8 -a 441 699 10 -a 441 137 6 -a 441 971 9 -a 441 599 6 -a 441 7 2 -a 441 121 6 -a 441 986 2 -a 441 342 10 -a 441 562 9 -a 441 60 2 -a 441 145 3 -a 441 393 9 -a 441 63 6 -a 441 786 2 -a 441 403 3 -a 441 893 7 -a 441 322 8 -a 441 618 5 -a 441 477 7 -a 441 62 3 -a 441 342 2 -a 441 916 2 -a 441 610 8 -a 441 297 7 -a 441 496 10 -a 441 954 3 -a 441 707 5 -a 441 796 1 -a 441 246 9 -a 441 623 3 -a 441 470 6 -a 441 382 6 -a 441 569 1 -a 441 45 8 -a 441 388 3 -a 441 689 2 -a 441 6 3 -a 441 729 1 -a 442 226 8 -a 442 65 4 -a 442 713 1 -a 442 370 10 -a 442 457 6 -a 442 775 2 -a 442 131 2 -a 442 860 8 -a 442 643 7 -a 442 453 8 -a 442 453 4 -a 442 95 9 -a 442 514 8 -a 442 794 2 -a 442 99 10 -a 442 67 2 -a 442 482 10 -a 442 28 1 -a 442 773 10 -a 442 253 2 -a 442 273 5 -a 442 371 10 -a 442 723 10 -a 442 655 9 -a 442 939 2 -a 442 767 6 -a 442 18 7 -a 442 603 4 -a 442 772 5 -a 442 747 2 -a 442 828 2 -a 442 836 5 -a 442 435 1 -a 442 173 9 -a 442 268 1 -a 442 185 2 -a 442 304 9 -a 442 103 1 -a 442 828 3 -a 442 756 10 -a 442 555 4 -a 442 922 3 -a 442 245 3 -a 442 325 10 -a 442 908 4 -a 442 343 10 -a 442 391 10 -a 442 366 3 -a 442 370 4 -a 442 139 10 -a 442 618 4 -a 442 643 2 -a 442 509 4 -a 442 316 2 -a 442 273 10 -a 442 423 6 -a 442 58 10 -a 442 290 8 -a 442 1 6 -a 442 829 6 -a 442 12 9 -a 442 828 2 -a 442 640 4 -a 442 446 6 -a 442 1000 8 -a 442 908 4 -a 442 631 1 -a 442 279 6 -a 442 434 6 -a 442 10 1 -a 442 541 9 -a 442 331 9 -a 442 254 1 -a 442 865 10 -a 442 215 6 -a 442 596 5 -a 442 231 5 -a 442 580 3 -a 442 966 10 -a 442 369 9 -a 442 173 5 -a 442 584 5 -a 442 877 3 -a 442 489 6 -a 442 856 9 -a 442 275 4 -a 442 546 1 -a 442 121 6 -a 442 275 8 -a 442 351 1 -a 442 133 4 -a 442 78 10 -a 442 990 4 -a 442 578 4 -a 442 53 2 -a 442 873 6 -a 442 184 3 -a 442 332 7 -a 442 859 8 -a 442 617 6 -a 442 341 5 -a 442 375 6 -a 442 948 2 -a 442 595 1 -a 442 215 2 -a 442 138 4 -a 442 166 7 -a 442 445 9 -a 442 717 7 -a 442 107 2 -a 442 813 8 -a 442 889 7 -a 442 690 3 -a 442 665 10 -a 442 353 1 -a 443 521 1 -a 443 939 9 -a 443 899 1 -a 443 642 1 -a 443 189 3 -a 443 225 7 -a 443 774 4 -a 443 266 7 -a 443 190 2 -a 443 327 7 -a 443 318 9 -a 443 39 10 -a 443 511 8 -a 443 649 1 -a 443 897 4 -a 443 103 7 -a 443 990 8 -a 443 247 9 -a 443 26 1 -a 443 560 5 -a 443 461 1 -a 443 163 10 -a 443 725 10 -a 443 905 8 -a 443 879 5 -a 443 832 5 -a 443 693 1 -a 443 744 8 -a 443 497 4 -a 443 333 7 -a 443 72 7 -a 443 247 3 -a 443 970 8 -a 443 635 9 -a 443 435 8 -a 443 170 1 -a 443 384 6 -a 443 700 5 -a 443 360 2 -a 443 710 10 -a 443 398 2 -a 443 196 4 -a 443 642 7 -a 443 270 8 -a 443 299 6 -a 443 607 5 -a 443 516 7 -a 443 324 6 -a 443 142 5 -a 443 976 3 -a 443 487 5 -a 443 866 5 -a 443 856 5 -a 443 341 10 -a 443 673 8 -a 443 524 2 -a 443 60 3 -a 443 146 6 -a 443 856 1 -a 443 132 4 -a 443 139 10 -a 443 78 1 -a 443 77 4 -a 443 773 1 -a 443 512 4 -a 443 247 9 -a 443 132 5 -a 443 187 10 -a 443 606 3 -a 443 841 8 -a 443 179 2 -a 443 13 5 -a 443 820 10 -a 443 248 7 -a 443 311 1 -a 443 402 7 -a 443 763 4 -a 443 634 7 -a 443 543 6 -a 443 714 9 -a 443 96 9 -a 443 385 7 -a 443 545 5 -a 443 437 10 -a 443 33 9 -a 443 44 3 -a 443 496 2 -a 443 178 2 -a 443 899 9 -a 443 627 2 -a 443 316 6 -a 443 976 4 -a 443 704 10 -a 443 64 5 -a 443 463 9 -a 443 950 9 -a 443 195 9 -a 443 649 10 -a 443 531 7 -a 443 12 7 -a 443 827 4 -a 444 509 4 -a 444 24 6 -a 444 623 9 -a 444 756 8 -a 444 334 8 -a 444 494 8 -a 444 967 9 -a 444 543 6 -a 444 183 9 -a 444 39 9 -a 444 927 6 -a 444 727 3 -a 444 475 3 -a 444 959 1 -a 444 770 9 -a 444 970 10 -a 444 113 5 -a 444 644 7 -a 444 573 3 -a 444 428 7 -a 444 595 10 -a 444 252 9 -a 444 492 5 -a 444 33 8 -a 444 177 6 -a 444 686 4 -a 444 681 5 -a 444 707 10 -a 444 697 5 -a 444 483 10 -a 444 191 2 -a 444 720 10 -a 444 81 6 -a 444 946 4 -a 444 29 6 -a 444 81 9 -a 444 415 8 -a 444 996 5 -a 444 623 10 -a 444 597 8 -a 444 10 1 -a 444 525 2 -a 444 299 9 -a 444 484 4 -a 444 459 6 -a 444 44 1 -a 444 429 6 -a 444 571 4 -a 444 687 10 -a 444 999 7 -a 444 257 3 -a 444 228 9 -a 444 466 4 -a 444 289 4 -a 444 404 8 -a 444 127 3 -a 444 969 6 -a 444 86 8 -a 444 824 1 -a 444 427 4 -a 444 276 5 -a 444 519 6 -a 444 508 5 -a 444 197 6 -a 444 548 9 -a 444 588 10 -a 444 611 3 -a 444 519 9 -a 444 186 8 -a 444 183 4 -a 444 528 10 -a 444 710 4 -a 444 481 2 -a 444 144 1 -a 444 524 5 -a 444 415 1 -a 444 715 3 -a 444 186 10 -a 444 392 8 -a 444 689 4 -a 444 442 6 -a 444 619 8 -a 444 130 6 -a 444 730 2 -a 444 256 9 -a 444 674 9 -a 444 84 1 -a 444 55 10 -a 444 77 8 -a 445 360 2 -a 445 574 8 -a 445 584 8 -a 445 556 8 -a 445 97 9 -a 445 147 9 -a 445 143 5 -a 445 615 1 -a 445 332 10 -a 445 325 8 -a 445 118 5 -a 445 17 4 -a 445 806 4 -a 445 104 2 -a 445 160 7 -a 445 305 6 -a 445 518 9 -a 445 874 7 -a 445 491 8 -a 445 909 1 -a 445 538 2 -a 445 932 9 -a 445 504 8 -a 445 667 6 -a 445 638 5 -a 445 502 1 -a 445 923 3 -a 445 287 9 -a 445 585 3 -a 445 977 3 -a 445 363 10 -a 445 944 10 -a 445 526 7 -a 445 946 10 -a 445 476 10 -a 445 622 10 -a 445 68 6 -a 445 618 7 -a 445 212 2 -a 445 399 10 -a 445 942 3 -a 445 329 5 -a 445 415 10 -a 445 723 4 -a 445 432 4 -a 445 575 5 -a 445 4 10 -a 445 950 9 -a 445 424 5 -a 445 494 7 -a 445 834 1 -a 445 962 4 -a 445 401 10 -a 445 313 8 -a 445 604 9 -a 445 14 10 -a 445 814 10 -a 445 502 3 -a 445 301 2 -a 445 375 7 -a 445 455 10 -a 445 663 9 -a 445 294 8 -a 445 980 1 -a 445 585 2 -a 445 769 8 -a 445 578 6 -a 445 652 3 -a 445 362 2 -a 445 789 5 -a 445 27 10 -a 445 280 3 -a 445 94 7 -a 445 441 3 -a 445 525 4 -a 445 450 10 -a 445 415 1 -a 445 474 8 -a 445 260 2 -a 445 352 5 -a 445 875 1 -a 445 572 4 -a 445 955 9 -a 445 888 5 -a 445 362 10 -a 445 433 7 -a 445 164 6 -a 445 736 4 -a 445 887 4 -a 445 827 6 -a 445 5 3 -a 445 842 8 -a 445 387 4 -a 445 774 5 -a 445 395 7 -a 445 14 1 -a 445 111 2 -a 445 160 7 -a 445 40 1 -a 445 390 3 -a 445 253 4 -a 445 481 7 -a 445 368 7 -a 446 777 5 -a 446 471 5 -a 446 348 3 -a 446 203 6 -a 446 885 1 -a 446 822 4 -a 446 462 3 -a 446 212 3 -a 446 672 6 -a 446 9 8 -a 446 143 10 -a 446 535 3 -a 446 370 7 -a 446 575 3 -a 446 699 4 -a 446 81 6 -a 446 437 2 -a 446 501 8 -a 446 86 5 -a 446 254 8 -a 446 887 9 -a 446 859 3 -a 446 649 7 -a 446 900 9 -a 446 969 4 -a 446 808 7 -a 446 940 3 -a 446 335 7 -a 446 36 10 -a 446 396 7 -a 446 702 6 -a 446 812 1 -a 446 866 6 -a 446 25 3 -a 446 727 4 -a 446 846 4 -a 446 451 9 -a 446 938 5 -a 446 493 4 -a 446 460 2 -a 446 56 6 -a 446 4 9 -a 446 829 9 -a 446 630 1 -a 446 702 2 -a 446 910 8 -a 446 42 3 -a 446 178 4 -a 446 995 8 -a 446 296 2 -a 446 40 2 -a 446 829 8 -a 446 944 2 -a 446 939 4 -a 446 773 10 -a 446 727 6 -a 446 854 7 -a 446 83 6 -a 446 762 9 -a 446 225 8 -a 446 784 10 -a 446 549 1 -a 446 67 8 -a 446 809 9 -a 446 539 4 -a 446 793 9 -a 446 630 4 -a 446 989 7 -a 446 706 6 -a 446 99 10 -a 446 424 5 -a 446 762 8 -a 446 102 3 -a 446 229 6 -a 446 367 8 -a 446 803 1 -a 446 114 7 -a 446 409 5 -a 446 980 9 -a 446 84 9 -a 446 704 6 -a 446 912 1 -a 446 623 10 -a 446 933 9 -a 446 660 9 -a 446 325 9 -a 446 763 9 -a 446 743 6 -a 446 62 2 -a 446 987 8 -a 446 502 9 -a 446 610 2 -a 446 29 7 -a 446 286 2 -a 446 124 10 -a 446 821 4 -a 446 916 4 -a 446 89 1 -a 446 503 2 -a 446 512 7 -a 446 240 10 -a 446 91 6 -a 446 740 2 -a 447 606 2 -a 447 893 8 -a 447 853 3 -a 447 848 4 -a 447 936 2 -a 447 693 5 -a 447 842 2 -a 447 823 2 -a 447 291 9 -a 447 750 10 -a 447 459 7 -a 447 615 3 -a 447 488 9 -a 447 177 4 -a 447 676 6 -a 447 451 2 -a 447 678 1 -a 447 262 6 -a 447 479 1 -a 447 964 7 -a 447 385 9 -a 447 276 5 -a 447 855 4 -a 447 473 6 -a 447 778 2 -a 447 844 10 -a 447 985 4 -a 447 934 2 -a 447 700 10 -a 447 598 9 -a 447 802 10 -a 447 529 8 -a 447 588 2 -a 447 625 3 -a 447 440 7 -a 447 256 5 -a 447 442 1 -a 447 239 5 -a 447 547 10 -a 447 167 1 -a 447 697 10 -a 447 137 1 -a 447 655 6 -a 447 873 2 -a 447 813 6 -a 447 81 10 -a 447 526 5 -a 447 50 7 -a 447 559 7 -a 447 465 1 -a 447 434 4 -a 447 834 8 -a 447 295 9 -a 447 907 6 -a 447 587 7 -a 447 114 2 -a 447 867 3 -a 447 579 8 -a 447 23 3 -a 447 542 1 -a 447 153 4 -a 447 824 3 -a 447 46 9 -a 447 740 9 -a 447 424 3 -a 447 486 4 -a 447 995 3 -a 447 865 1 -a 447 724 10 -a 447 517 9 -a 447 8 10 -a 447 396 7 -a 447 654 2 -a 447 662 4 -a 447 244 6 -a 447 442 10 -a 447 742 7 -a 447 769 2 -a 447 491 3 -a 447 276 4 -a 447 210 1 -a 447 924 6 -a 447 86 9 -a 447 504 4 -a 447 806 3 -a 447 672 7 -a 447 618 5 -a 447 648 1 -a 447 227 7 -a 447 640 10 -a 448 166 3 -a 448 379 6 -a 448 440 2 -a 448 211 9 -a 448 94 6 -a 448 863 7 -a 448 696 8 -a 448 64 3 -a 448 704 10 -a 448 395 6 -a 448 581 8 -a 448 711 10 -a 448 790 9 -a 448 210 8 -a 448 348 5 -a 448 9 1 -a 448 651 9 -a 448 65 5 -a 448 778 7 -a 448 117 1 -a 448 340 9 -a 448 987 4 -a 448 16 3 -a 448 425 3 -a 448 466 5 -a 448 822 9 -a 448 73 3 -a 448 59 7 -a 448 445 7 -a 448 299 5 -a 448 699 1 -a 448 610 5 -a 448 677 10 -a 448 114 8 -a 448 821 2 -a 448 770 3 -a 448 976 10 -a 448 492 10 -a 448 833 3 -a 448 655 1 -a 448 887 8 -a 448 389 3 -a 448 341 6 -a 448 652 3 -a 448 598 10 -a 448 688 10 -a 448 661 4 -a 448 224 1 -a 448 752 1 -a 448 414 1 -a 448 340 10 -a 448 68 8 -a 448 376 7 -a 448 356 10 -a 448 492 5 -a 448 841 10 -a 448 153 8 -a 448 564 3 -a 448 900 10 -a 448 597 10 -a 448 862 2 -a 448 574 4 -a 448 183 6 -a 448 514 7 -a 448 687 9 -a 448 259 7 -a 448 638 8 -a 448 470 9 -a 448 68 4 -a 448 269 4 -a 448 332 5 -a 448 456 3 -a 448 609 9 -a 448 984 5 -a 448 30 7 -a 448 273 5 -a 448 620 9 -a 448 253 3 -a 448 9 10 -a 448 593 7 -a 448 67 4 -a 448 384 6 -a 448 948 10 -a 448 559 5 -a 448 200 4 -a 448 76 9 -a 448 98 8 -a 448 75 2 -a 448 672 5 -a 448 960 7 -a 448 648 9 -a 448 854 1 -a 448 449 6 -a 448 310 7 -a 448 832 6 -a 448 708 1 -a 448 948 5 -a 448 278 3 -a 448 775 1 -a 448 192 8 -a 448 609 8 -a 449 206 10 -a 449 800 6 -a 449 568 3 -a 449 235 9 -a 449 48 10 -a 449 163 6 -a 449 488 7 -a 449 48 2 -a 449 171 8 -a 449 56 1 -a 449 114 2 -a 449 554 3 -a 449 672 10 -a 449 754 3 -a 449 54 8 -a 449 770 8 -a 449 828 6 -a 449 725 1 -a 449 705 5 -a 449 452 10 -a 449 555 2 -a 449 129 5 -a 449 761 2 -a 449 362 7 -a 449 836 4 -a 449 684 5 -a 449 639 4 -a 449 586 10 -a 449 875 7 -a 449 224 1 -a 449 792 3 -a 449 651 1 -a 449 791 3 -a 449 2 5 -a 449 698 10 -a 449 954 5 -a 449 489 9 -a 449 745 2 -a 449 100 9 -a 449 544 7 -a 449 859 6 -a 449 654 5 -a 449 522 1 -a 449 506 8 -a 449 383 4 -a 449 575 5 -a 449 251 9 -a 449 186 10 -a 449 276 1 -a 449 955 4 -a 449 637 5 -a 449 830 7 -a 449 60 9 -a 449 374 1 -a 449 167 1 -a 449 895 1 -a 449 33 1 -a 449 806 2 -a 449 457 6 -a 449 908 10 -a 449 5 6 -a 449 224 2 -a 449 534 2 -a 449 795 1 -a 449 225 3 -a 449 207 8 -a 449 724 8 -a 449 714 8 -a 449 952 2 -a 449 824 8 -a 449 233 10 -a 449 786 1 -a 449 453 8 -a 449 755 10 -a 449 267 6 -a 449 835 10 -a 449 305 7 -a 449 518 10 -a 449 580 1 -a 449 448 3 -a 449 633 6 -a 449 385 5 -a 449 507 7 -a 449 552 6 -a 449 378 5 -a 449 14 5 -a 449 333 9 -a 449 834 6 -a 449 921 8 -a 449 337 5 -a 449 33 6 -a 449 430 5 -a 450 107 4 -a 450 257 8 -a 450 637 3 -a 450 831 10 -a 450 970 1 -a 450 564 3 -a 450 630 5 -a 450 179 4 -a 450 325 9 -a 450 58 1 -a 450 933 8 -a 450 591 6 -a 450 892 5 -a 450 213 2 -a 450 84 9 -a 450 887 4 -a 450 793 9 -a 450 532 10 -a 450 495 9 -a 450 153 2 -a 450 14 1 -a 450 476 3 -a 450 704 4 -a 450 391 3 -a 450 490 7 -a 450 12 6 -a 450 200 2 -a 450 386 8 -a 450 348 2 -a 450 232 4 -a 450 816 7 -a 450 455 10 -a 450 489 3 -a 450 428 5 -a 450 261 5 -a 450 434 10 -a 450 991 2 -a 450 890 7 -a 450 612 7 -a 450 291 3 -a 450 947 8 -a 450 520 9 -a 450 881 7 -a 450 814 2 -a 450 733 1 -a 450 965 7 -a 450 676 2 -a 450 501 4 -a 450 472 8 -a 450 147 5 -a 450 653 8 -a 450 485 4 -a 450 622 6 -a 450 333 9 -a 450 876 9 -a 450 87 2 -a 450 344 10 -a 450 51 8 -a 450 473 6 -a 450 692 1 -a 450 283 3 -a 450 264 7 -a 450 122 7 -a 450 771 9 -a 450 691 5 -a 450 382 9 -a 450 180 1 -a 450 657 8 -a 450 247 9 -a 450 792 6 -a 450 947 6 -a 450 169 9 -a 450 287 1 -a 450 803 4 -a 450 982 2 -a 450 743 4 -a 450 633 7 -a 450 495 8 -a 450 190 4 -a 450 779 9 -a 450 124 7 -a 450 675 4 -a 450 377 9 -a 450 456 3 -a 450 526 9 -a 450 463 10 -a 450 799 8 -a 450 576 7 -a 450 935 3 -a 450 466 6 -a 450 858 5 -a 450 174 10 -a 450 587 6 -a 450 604 5 -a 450 864 2 -a 450 968 6 -a 450 784 5 -a 450 496 6 -a 450 190 9 -a 450 551 3 -a 450 418 8 -a 450 358 3 -a 450 837 7 -a 450 197 2 -a 450 315 1 -a 450 832 4 -a 450 939 7 -a 450 948 4 -a 450 302 9 -a 450 105 9 -a 450 702 4 -a 450 425 8 -a 450 779 9 -a 450 54 2 -a 450 880 4 -a 450 280 2 -a 450 517 5 -a 450 655 7 -a 450 855 8 -a 450 427 1 -a 450 96 10 -a 451 689 4 -a 451 601 4 -a 451 683 4 -a 451 268 1 -a 451 440 4 -a 451 626 1 -a 451 27 4 -a 451 936 1 -a 451 816 10 -a 451 577 6 -a 451 329 4 -a 451 149 8 -a 451 390 7 -a 451 525 8 -a 451 464 2 -a 451 197 7 -a 451 440 9 -a 451 387 1 -a 451 498 9 -a 451 544 9 -a 451 64 7 -a 451 923 8 -a 451 298 7 -a 451 118 2 -a 451 778 5 -a 451 577 10 -a 451 634 2 -a 451 408 8 -a 451 407 10 -a 451 36 5 -a 451 504 9 -a 451 71 9 -a 451 636 1 -a 451 162 2 -a 451 339 5 -a 451 52 7 -a 451 787 9 -a 451 365 8 -a 451 987 9 -a 451 578 4 -a 451 942 8 -a 451 291 10 -a 451 727 7 -a 451 307 2 -a 451 816 8 -a 451 166 8 -a 451 503 6 -a 451 231 6 -a 451 552 7 -a 451 1000 10 -a 451 774 7 -a 451 615 8 -a 451 898 2 -a 451 47 10 -a 451 732 8 -a 451 652 1 -a 451 623 5 -a 451 341 3 -a 451 35 4 -a 451 5 1 -a 451 377 5 -a 451 538 2 -a 451 76 6 -a 451 699 6 -a 451 414 6 -a 451 39 1 -a 451 462 1 -a 451 778 8 -a 451 1 1 -a 451 15 3 -a 451 695 9 -a 451 292 8 -a 451 741 3 -a 451 83 4 -a 451 906 4 -a 451 479 8 -a 451 313 1 -a 451 433 8 -a 451 455 2 -a 451 62 6 -a 451 24 7 -a 451 328 1 -a 451 108 4 -a 451 755 6 -a 451 979 8 -a 451 730 10 -a 451 72 8 -a 451 734 5 -a 451 448 9 -a 451 527 8 -a 451 809 8 -a 451 435 2 -a 451 202 6 -a 451 198 4 -a 451 474 3 -a 451 663 7 -a 451 976 8 -a 451 474 5 -a 451 677 4 -a 451 646 9 -a 451 765 10 -a 451 394 7 -a 451 623 6 -a 451 847 8 -a 451 275 4 -a 451 77 6 -a 452 135 9 -a 452 708 10 -a 452 531 2 -a 452 196 3 -a 452 731 1 -a 452 859 3 -a 452 303 2 -a 452 461 7 -a 452 813 6 -a 452 8 5 -a 452 532 6 -a 452 802 2 -a 452 742 4 -a 452 979 3 -a 452 305 6 -a 452 526 5 -a 452 390 2 -a 452 506 4 -a 452 724 1 -a 452 863 1 -a 452 144 4 -a 452 675 1 -a 452 312 4 -a 452 820 9 -a 452 296 9 -a 452 53 2 -a 452 189 10 -a 452 918 2 -a 452 899 3 -a 452 464 3 -a 452 995 9 -a 452 10 2 -a 452 147 7 -a 452 501 5 -a 452 205 1 -a 452 877 8 -a 452 335 5 -a 452 508 4 -a 452 313 9 -a 452 124 9 -a 452 515 4 -a 452 845 8 -a 452 925 5 -a 452 232 2 -a 452 799 7 -a 452 205 2 -a 452 758 8 -a 452 164 4 -a 452 710 6 -a 452 457 7 -a 452 2 8 -a 452 853 3 -a 452 107 5 -a 452 314 3 -a 452 649 4 -a 452 402 6 -a 452 366 3 -a 452 837 9 -a 452 296 10 -a 452 240 4 -a 452 276 8 -a 452 266 2 -a 452 249 6 -a 452 422 2 -a 452 766 9 -a 452 454 1 -a 452 274 8 -a 452 77 7 -a 452 961 2 -a 452 587 2 -a 452 200 1 -a 452 451 2 -a 452 407 9 -a 452 100 7 -a 452 683 6 -a 452 181 7 -a 452 305 9 -a 452 416 10 -a 452 345 10 -a 452 872 3 -a 452 346 8 -a 452 843 3 -a 452 978 9 -a 452 659 10 -a 452 467 8 -a 452 355 6 -a 452 279 7 -a 452 650 9 -a 452 240 10 -a 452 555 6 -a 452 915 10 -a 452 488 2 -a 452 976 2 -a 452 657 6 -a 452 941 9 -a 452 226 7 -a 452 733 8 -a 452 877 9 -a 452 812 2 -a 453 932 9 -a 453 304 5 -a 453 194 10 -a 453 7 6 -a 453 986 5 -a 453 374 2 -a 453 311 8 -a 453 377 2 -a 453 718 1 -a 453 301 8 -a 453 224 4 -a 453 40 9 -a 453 119 5 -a 453 177 1 -a 453 698 9 -a 453 585 10 -a 453 531 4 -a 453 698 10 -a 453 863 2 -a 453 157 6 -a 453 937 1 -a 453 393 10 -a 453 47 5 -a 453 400 8 -a 453 345 5 -a 453 703 9 -a 453 317 5 -a 453 570 2 -a 453 411 5 -a 453 169 9 -a 453 357 8 -a 453 318 7 -a 453 472 1 -a 453 550 7 -a 453 325 2 -a 453 433 7 -a 453 923 1 -a 453 635 10 -a 453 809 1 -a 453 617 4 -a 453 935 3 -a 453 8 2 -a 453 656 2 -a 453 29 8 -a 453 184 3 -a 453 329 1 -a 453 613 2 -a 453 715 1 -a 453 2 8 -a 453 452 6 -a 453 871 10 -a 453 938 6 -a 453 844 4 -a 453 917 8 -a 453 314 7 -a 453 164 8 -a 453 596 4 -a 453 630 10 -a 453 733 10 -a 453 798 1 -a 453 65 1 -a 453 300 9 -a 453 246 1 -a 453 614 4 -a 453 624 2 -a 453 678 6 -a 453 513 2 -a 453 234 4 -a 453 463 2 -a 453 105 3 -a 453 145 5 -a 453 470 3 -a 453 760 10 -a 453 173 6 -a 453 654 6 -a 453 64 6 -a 453 786 4 -a 453 344 4 -a 453 66 9 -a 453 213 2 -a 453 190 9 -a 453 32 2 -a 453 82 9 -a 453 292 10 -a 453 196 5 -a 453 677 1 -a 453 921 6 -a 453 928 2 -a 453 659 3 -a 453 695 8 -a 453 993 7 -a 453 958 5 -a 453 940 2 -a 453 582 1 -a 453 557 7 -a 453 593 3 -a 453 70 5 -a 453 790 3 -a 453 31 2 -a 453 174 8 -a 453 934 6 -a 453 501 10 -a 453 933 9 -a 453 83 2 -a 453 130 2 -a 453 997 10 -a 454 868 10 -a 454 473 4 -a 454 38 6 -a 454 56 8 -a 454 662 9 -a 454 16 6 -a 454 87 8 -a 454 743 5 -a 454 308 1 -a 454 282 6 -a 454 396 1 -a 454 204 8 -a 454 186 4 -a 454 30 10 -a 454 898 8 -a 454 154 3 -a 454 987 1 -a 454 813 10 -a 454 735 3 -a 454 519 9 -a 454 382 8 -a 454 805 7 -a 454 284 2 -a 454 412 3 -a 454 978 5 -a 454 194 7 -a 454 912 1 -a 454 887 7 -a 454 276 3 -a 454 17 4 -a 454 859 2 -a 454 119 8 -a 454 489 10 -a 454 896 10 -a 454 174 3 -a 454 126 6 -a 454 911 9 -a 454 260 5 -a 454 869 5 -a 454 194 1 -a 454 542 2 -a 454 240 10 -a 454 398 4 -a 454 727 8 -a 454 269 3 -a 454 271 9 -a 454 880 6 -a 454 231 10 -a 454 60 10 -a 454 590 6 -a 454 749 1 -a 454 441 4 -a 454 370 10 -a 454 8 6 -a 454 852 2 -a 454 324 5 -a 454 201 3 -a 454 740 7 -a 454 186 4 -a 454 476 1 -a 454 756 8 -a 454 20 3 -a 454 594 4 -a 454 221 7 -a 454 915 1 -a 454 767 2 -a 454 346 8 -a 454 801 1 -a 454 3 2 -a 454 190 1 -a 454 995 1 -a 454 544 2 -a 454 429 9 -a 454 368 2 -a 454 246 8 -a 454 697 10 -a 454 638 6 -a 454 101 6 -a 454 927 4 -a 454 697 8 -a 454 690 9 -a 454 651 10 -a 454 113 4 -a 454 36 6 -a 454 659 10 -a 454 965 6 -a 454 359 7 -a 454 859 7 -a 454 680 5 -a 454 544 1 -a 454 311 7 -a 454 411 1 -a 454 563 1 -a 454 904 10 -a 454 631 2 -a 454 453 9 -a 454 647 7 -a 454 977 1 -a 454 229 10 -a 454 649 9 -a 454 142 6 -a 454 199 4 -a 454 168 1 -a 454 571 7 -a 454 566 7 -a 454 413 7 -a 454 243 8 -a 454 180 4 -a 454 513 10 -a 454 146 4 -a 454 876 5 -a 454 178 7 -a 454 796 5 -a 454 989 5 -a 455 213 1 -a 455 430 8 -a 455 929 9 -a 455 571 6 -a 455 265 8 -a 455 584 8 -a 455 90 4 -a 455 575 6 -a 455 994 8 -a 455 652 4 -a 455 454 9 -a 455 601 9 -a 455 80 2 -a 455 76 3 -a 455 553 5 -a 455 309 1 -a 455 724 9 -a 455 694 3 -a 455 507 5 -a 455 891 8 -a 455 240 9 -a 455 49 8 -a 455 279 5 -a 455 483 8 -a 455 228 3 -a 455 791 8 -a 455 628 5 -a 455 79 10 -a 455 969 5 -a 455 399 2 -a 455 43 4 -a 455 157 6 -a 455 829 9 -a 455 971 8 -a 455 728 2 -a 455 69 1 -a 455 530 4 -a 455 817 4 -a 455 643 5 -a 455 500 4 -a 455 445 8 -a 455 72 9 -a 455 76 3 -a 455 524 4 -a 455 148 1 -a 455 628 10 -a 455 832 8 -a 455 871 9 -a 455 297 9 -a 455 315 10 -a 455 738 4 -a 455 537 8 -a 455 363 3 -a 455 590 5 -a 455 783 4 -a 455 622 5 -a 455 668 4 -a 455 727 9 -a 455 711 8 -a 455 883 10 -a 455 824 4 -a 455 657 3 -a 455 586 5 -a 455 892 5 -a 455 163 10 -a 455 379 4 -a 455 510 9 -a 455 662 7 -a 455 823 9 -a 455 582 4 -a 455 737 8 -a 455 322 2 -a 455 729 10 -a 455 340 3 -a 455 130 6 -a 455 575 2 -a 455 636 4 -a 455 444 10 -a 455 288 7 -a 455 148 8 -a 455 806 10 -a 455 280 9 -a 455 142 10 -a 455 371 4 -a 455 38 10 -a 455 763 10 -a 455 14 7 -a 455 764 5 -a 455 759 3 -a 456 724 6 -a 456 622 10 -a 456 558 5 -a 456 357 7 -a 456 184 9 -a 456 426 1 -a 456 519 5 -a 456 562 2 -a 456 935 7 -a 456 156 7 -a 456 360 1 -a 456 492 2 -a 456 892 10 -a 456 681 8 -a 456 196 8 -a 456 207 1 -a 456 810 1 -a 456 771 8 -a 456 842 7 -a 456 229 4 -a 456 34 9 -a 456 990 10 -a 456 10 9 -a 456 313 4 -a 456 107 1 -a 456 380 8 -a 456 350 2 -a 456 870 9 -a 456 394 3 -a 456 89 6 -a 456 604 6 -a 456 93 10 -a 456 711 6 -a 456 137 7 -a 456 449 9 -a 456 894 5 -a 456 562 6 -a 456 967 8 -a 456 431 4 -a 456 473 1 -a 456 98 1 -a 456 790 7 -a 456 964 4 -a 456 989 7 -a 456 446 9 -a 456 136 8 -a 456 171 8 -a 456 232 1 -a 456 906 4 -a 456 460 7 -a 456 939 3 -a 456 978 9 -a 456 470 2 -a 456 228 4 -a 456 60 6 -a 456 849 9 -a 456 577 2 -a 456 929 4 -a 456 218 10 -a 456 666 9 -a 456 508 7 -a 456 311 9 -a 456 352 10 -a 456 645 7 -a 456 759 8 -a 456 221 10 -a 456 182 6 -a 456 702 3 -a 456 651 4 -a 456 654 2 -a 456 799 7 -a 456 416 5 -a 456 594 2 -a 456 764 4 -a 456 861 7 -a 456 729 5 -a 456 934 10 -a 456 68 6 -a 456 610 1 -a 456 922 7 -a 456 528 7 -a 456 524 1 -a 456 875 1 -a 456 997 4 -a 456 751 10 -a 456 935 8 -a 456 821 10 -a 456 304 4 -a 456 839 2 -a 456 15 2 -a 456 969 3 -a 456 323 8 -a 456 325 3 -a 456 296 1 -a 456 967 4 -a 456 59 1 -a 456 516 1 -a 456 124 6 -a 456 760 8 -a 456 142 3 -a 457 778 8 -a 457 535 2 -a 457 557 10 -a 457 347 10 -a 457 274 5 -a 457 393 3 -a 457 51 9 -a 457 183 5 -a 457 461 2 -a 457 660 1 -a 457 81 3 -a 457 988 3 -a 457 159 10 -a 457 955 1 -a 457 960 10 -a 457 910 4 -a 457 865 4 -a 457 756 3 -a 457 189 2 -a 457 680 5 -a 457 770 9 -a 457 133 6 -a 457 70 3 -a 457 428 5 -a 457 944 1 -a 457 129 9 -a 457 943 3 -a 457 43 5 -a 457 888 7 -a 457 60 2 -a 457 820 9 -a 457 398 8 -a 457 616 2 -a 457 142 8 -a 457 671 10 -a 457 192 5 -a 457 854 4 -a 457 444 3 -a 457 851 5 -a 457 934 2 -a 457 407 9 -a 457 864 6 -a 457 342 1 -a 457 895 7 -a 457 705 5 -a 457 74 6 -a 457 59 10 -a 457 360 2 -a 457 843 3 -a 457 191 1 -a 457 337 9 -a 457 913 10 -a 457 618 1 -a 457 256 9 -a 457 17 4 -a 457 536 4 -a 457 298 9 -a 457 904 5 -a 457 595 7 -a 457 94 1 -a 457 278 3 -a 457 186 3 -a 457 235 3 -a 457 948 7 -a 457 169 7 -a 457 427 1 -a 457 777 2 -a 457 613 6 -a 457 253 10 -a 457 686 9 -a 457 238 7 -a 457 526 1 -a 457 337 5 -a 457 108 8 -a 457 206 1 -a 457 410 4 -a 457 166 8 -a 457 565 9 -a 457 228 8 -a 457 356 4 -a 457 901 10 -a 457 116 1 -a 457 973 5 -a 457 132 3 -a 457 132 7 -a 457 484 1 -a 457 429 9 -a 457 12 8 -a 457 54 9 -a 457 522 9 -a 457 289 2 -a 457 239 2 -a 457 757 7 -a 457 212 10 -a 457 408 8 -a 457 159 6 -a 458 989 5 -a 458 411 3 -a 458 650 7 -a 458 649 6 -a 458 151 6 -a 458 326 5 -a 458 756 4 -a 458 356 1 -a 458 735 10 -a 458 922 9 -a 458 920 1 -a 458 963 1 -a 458 253 10 -a 458 796 3 -a 458 54 7 -a 458 202 10 -a 458 927 5 -a 458 186 1 -a 458 685 6 -a 458 332 2 -a 458 197 5 -a 458 739 6 -a 458 853 4 -a 458 485 3 -a 458 977 1 -a 458 585 1 -a 458 696 4 -a 458 360 4 -a 458 743 2 -a 458 660 1 -a 458 355 7 -a 458 130 8 -a 458 286 7 -a 458 345 9 -a 458 778 10 -a 458 436 7 -a 458 670 3 -a 458 509 8 -a 458 792 9 -a 458 381 1 -a 458 406 5 -a 458 687 6 -a 458 319 5 -a 458 659 7 -a 458 459 5 -a 458 372 5 -a 458 860 8 -a 458 361 8 -a 458 557 3 -a 458 520 10 -a 458 692 1 -a 458 753 8 -a 458 234 10 -a 458 521 8 -a 458 213 6 -a 458 187 6 -a 458 81 8 -a 458 909 2 -a 458 546 10 -a 458 824 10 -a 458 544 2 -a 458 901 8 -a 458 953 2 -a 458 829 9 -a 458 221 6 -a 458 706 3 -a 458 241 7 -a 458 890 1 -a 458 190 4 -a 458 8 4 -a 458 246 8 -a 458 596 4 -a 458 694 6 -a 458 564 1 -a 458 230 6 -a 458 128 9 -a 458 936 6 -a 458 65 3 -a 458 489 8 -a 458 468 10 -a 458 584 4 -a 458 156 7 -a 458 197 8 -a 458 818 7 -a 458 676 3 -a 458 409 9 -a 458 757 10 -a 458 293 3 -a 459 525 10 -a 459 556 5 -a 459 837 6 -a 459 401 5 -a 459 484 1 -a 459 641 9 -a 459 621 9 -a 459 165 9 -a 459 881 6 -a 459 487 2 -a 459 354 9 -a 459 888 1 -a 459 732 3 -a 459 949 9 -a 459 558 2 -a 459 272 6 -a 459 154 6 -a 459 685 4 -a 459 183 10 -a 459 218 3 -a 459 149 7 -a 459 650 5 -a 459 802 4 -a 459 305 3 -a 459 846 9 -a 459 595 3 -a 459 980 9 -a 459 231 6 -a 459 574 6 -a 459 712 7 -a 459 523 9 -a 459 74 8 -a 459 243 9 -a 459 335 3 -a 459 475 1 -a 459 726 4 -a 459 976 5 -a 459 71 2 -a 459 890 8 -a 459 832 9 -a 459 557 2 -a 459 220 10 -a 459 696 5 -a 459 265 3 -a 459 144 8 -a 459 229 9 -a 459 536 7 -a 459 298 5 -a 459 913 1 -a 459 718 6 -a 459 515 9 -a 459 38 3 -a 459 343 6 -a 459 292 10 -a 459 342 5 -a 459 165 6 -a 459 886 5 -a 459 297 9 -a 459 395 9 -a 459 435 1 -a 459 917 1 -a 459 509 1 -a 459 227 2 -a 459 228 6 -a 459 983 8 -a 459 953 4 -a 459 179 7 -a 459 29 5 -a 459 818 8 -a 459 586 7 -a 459 13 10 -a 459 681 3 -a 459 850 7 -a 459 157 5 -a 459 909 4 -a 459 361 1 -a 459 454 10 -a 459 798 10 -a 459 54 5 -a 459 968 9 -a 459 835 2 -a 459 396 10 -a 459 236 2 -a 459 152 5 -a 459 560 4 -a 459 97 8 -a 459 448 10 -a 459 954 1 -a 459 532 7 -a 459 432 1 -a 459 847 3 -a 459 16 10 -a 459 659 3 -a 459 50 7 -a 460 998 9 -a 460 587 3 -a 460 228 2 -a 460 2 3 -a 460 380 6 -a 460 213 7 -a 460 587 4 -a 460 393 8 -a 460 894 1 -a 460 412 1 -a 460 549 8 -a 460 778 6 -a 460 772 1 -a 460 551 6 -a 460 825 1 -a 460 945 5 -a 460 361 10 -a 460 197 7 -a 460 156 1 -a 460 512 10 -a 460 756 3 -a 460 253 9 -a 460 960 8 -a 460 686 6 -a 460 784 5 -a 460 367 9 -a 460 508 8 -a 460 799 4 -a 460 1 9 -a 460 557 2 -a 460 772 2 -a 460 587 9 -a 460 784 7 -a 460 773 6 -a 460 967 10 -a 460 996 8 -a 460 336 10 -a 460 335 4 -a 460 865 1 -a 460 747 4 -a 460 883 10 -a 460 619 3 -a 460 495 1 -a 460 860 8 -a 460 145 10 -a 460 295 10 -a 460 780 2 -a 460 506 1 -a 460 491 8 -a 460 936 5 -a 460 223 8 -a 460 164 3 -a 460 952 5 -a 460 908 9 -a 460 947 6 -a 460 295 9 -a 460 391 2 -a 460 721 2 -a 460 295 9 -a 460 947 6 -a 460 468 5 -a 460 882 7 -a 460 706 10 -a 460 216 8 -a 460 824 7 -a 460 677 9 -a 460 551 3 -a 460 134 9 -a 460 518 2 -a 460 274 5 -a 460 112 7 -a 460 768 7 -a 460 851 8 -a 460 256 5 -a 460 38 7 -a 460 606 4 -a 460 761 4 -a 460 529 8 -a 460 517 8 -a 460 754 4 -a 460 751 4 -a 460 680 2 -a 460 681 6 -a 460 634 5 -a 460 602 4 -a 460 975 1 -a 460 298 4 -a 460 246 1 -a 460 946 6 -a 460 765 2 -a 460 103 1 -a 460 627 8 -a 460 981 3 -a 460 926 4 -a 460 279 6 -a 460 507 4 -a 460 35 2 -a 460 796 8 -a 460 780 5 -a 460 26 2 -a 460 907 9 -a 460 523 2 -a 460 876 3 -a 460 139 6 -a 460 561 6 -a 460 457 10 -a 460 899 5 -a 460 65 10 -a 460 974 1 -a 460 628 1 -a 460 815 2 -a 460 629 2 -a 460 285 6 -a 460 424 7 -a 460 207 1 -a 461 235 1 -a 461 423 9 -a 461 504 2 -a 461 480 7 -a 461 344 7 -a 461 245 5 -a 461 582 4 -a 461 970 9 -a 461 201 9 -a 461 483 9 -a 461 224 3 -a 461 707 9 -a 461 517 9 -a 461 463 4 -a 461 542 6 -a 461 902 5 -a 461 985 1 -a 461 393 5 -a 461 16 7 -a 461 521 2 -a 461 850 8 -a 461 915 2 -a 461 585 5 -a 461 799 4 -a 461 518 1 -a 461 375 2 -a 461 403 8 -a 461 802 4 -a 461 798 2 -a 461 609 2 -a 461 13 10 -a 461 196 9 -a 461 89 1 -a 461 492 8 -a 461 539 6 -a 461 333 2 -a 461 50 9 -a 461 484 3 -a 461 533 4 -a 461 532 8 -a 461 708 9 -a 461 215 8 -a 461 25 9 -a 461 703 10 -a 461 677 2 -a 461 566 2 -a 461 580 4 -a 461 638 10 -a 461 959 10 -a 461 596 4 -a 461 134 10 -a 461 784 1 -a 461 486 10 -a 461 719 2 -a 461 558 7 -a 461 69 5 -a 461 960 1 -a 461 781 5 -a 461 867 1 -a 461 545 8 -a 461 793 9 -a 461 38 3 -a 461 633 5 -a 461 260 2 -a 461 577 4 -a 461 965 5 -a 461 309 9 -a 461 36 8 -a 461 473 7 -a 461 841 6 -a 461 743 1 -a 461 687 7 -a 461 865 5 -a 461 421 7 -a 461 340 6 -a 461 406 1 -a 461 977 4 -a 461 340 10 -a 461 572 9 -a 461 86 8 -a 461 99 6 -a 461 33 4 -a 461 804 6 -a 461 656 3 -a 461 11 3 -a 461 873 10 -a 461 592 2 -a 461 791 4 -a 461 715 4 -a 461 112 3 -a 461 559 10 -a 461 752 7 -a 461 744 1 -a 461 819 9 -a 461 304 9 -a 461 684 8 -a 461 103 7 -a 461 340 2 -a 461 132 6 -a 461 943 10 -a 461 58 1 -a 462 818 8 -a 462 783 5 -a 462 479 4 -a 462 133 1 -a 462 165 2 -a 462 455 9 -a 462 85 9 -a 462 504 9 -a 462 2 4 -a 462 171 7 -a 462 603 4 -a 462 34 5 -a 462 974 3 -a 462 234 7 -a 462 44 3 -a 462 822 1 -a 462 825 10 -a 462 835 5 -a 462 512 6 -a 462 936 8 -a 462 369 5 -a 462 240 9 -a 462 655 4 -a 462 163 2 -a 462 543 8 -a 462 314 3 -a 462 266 2 -a 462 882 10 -a 462 445 2 -a 462 184 4 -a 462 940 5 -a 462 239 10 -a 462 967 1 -a 462 394 8 -a 462 371 4 -a 462 107 5 -a 462 848 8 -a 462 456 6 -a 462 610 4 -a 462 849 8 -a 462 626 3 -a 462 188 4 -a 462 882 3 -a 462 575 9 -a 462 422 5 -a 462 925 6 -a 462 373 10 -a 462 222 8 -a 462 735 5 -a 462 884 2 -a 462 134 6 -a 462 80 5 -a 462 99 6 -a 462 788 3 -a 462 242 1 -a 462 642 2 -a 462 78 3 -a 462 507 4 -a 462 499 9 -a 462 522 1 -a 462 691 6 -a 462 414 4 -a 462 760 5 -a 462 633 2 -a 462 807 6 -a 462 107 6 -a 462 739 6 -a 462 630 2 -a 462 562 2 -a 462 324 1 -a 462 454 6 -a 462 163 3 -a 462 512 8 -a 462 311 1 -a 462 737 6 -a 462 933 6 -a 462 212 3 -a 462 85 2 -a 462 130 2 -a 462 946 5 -a 462 969 6 -a 462 263 1 -a 462 1 9 -a 462 43 5 -a 462 27 1 -a 462 243 2 -a 462 684 8 -a 462 104 6 -a 462 749 3 -a 462 159 9 -a 462 625 7 -a 462 415 8 -a 462 572 2 -a 462 361 3 -a 462 23 3 -a 462 355 2 -a 462 467 8 -a 462 761 8 -a 462 984 4 -a 463 4 8 -a 463 61 9 -a 463 414 1 -a 463 166 5 -a 463 572 10 -a 463 724 4 -a 463 902 4 -a 463 480 4 -a 463 935 8 -a 463 987 8 -a 463 609 4 -a 463 857 10 -a 463 931 8 -a 463 872 5 -a 463 857 1 -a 463 973 7 -a 463 898 10 -a 463 75 4 -a 463 633 5 -a 463 824 5 -a 463 791 1 -a 463 601 7 -a 463 214 6 -a 463 338 8 -a 463 961 9 -a 463 237 6 -a 463 692 9 -a 463 403 3 -a 463 997 7 -a 463 652 7 -a 463 406 10 -a 463 33 10 -a 463 41 4 -a 463 571 5 -a 463 604 2 -a 463 764 7 -a 463 449 9 -a 463 59 6 -a 463 675 1 -a 463 411 8 -a 463 668 9 -a 463 507 2 -a 463 317 2 -a 463 515 6 -a 463 339 4 -a 463 265 4 -a 463 388 3 -a 463 414 7 -a 463 897 2 -a 463 364 9 -a 463 213 2 -a 463 663 6 -a 463 964 7 -a 463 426 7 -a 463 901 6 -a 463 662 4 -a 463 668 2 -a 463 279 5 -a 463 635 9 -a 463 295 4 -a 463 685 10 -a 463 667 5 -a 463 335 3 -a 463 231 6 -a 463 247 4 -a 463 75 6 -a 463 679 8 -a 463 305 10 -a 463 749 7 -a 463 65 1 -a 463 972 6 -a 463 231 4 -a 463 381 2 -a 463 462 3 -a 463 569 8 -a 463 646 2 -a 463 849 9 -a 463 982 1 -a 463 518 8 -a 463 188 5 -a 463 170 8 -a 463 157 6 -a 463 128 2 -a 463 596 5 -a 463 133 9 -a 463 4 7 -a 463 233 2 -a 463 800 6 -a 463 282 3 -a 463 867 3 -a 463 71 5 -a 463 966 10 -a 463 510 2 -a 463 405 10 -a 463 173 7 -a 463 756 1 -a 463 479 4 -a 463 851 8 -a 463 36 9 -a 463 203 1 -a 463 916 1 -a 463 433 2 -a 463 272 9 -a 463 445 10 -a 463 917 3 -a 463 270 4 -a 463 959 2 -a 463 411 3 -a 463 457 6 -a 463 105 2 -a 463 567 7 -a 463 584 7 -a 463 700 8 -a 463 699 1 -a 463 587 7 -a 463 932 3 -a 464 474 1 -a 464 869 10 -a 464 775 4 -a 464 544 4 -a 464 810 1 -a 464 260 10 -a 464 949 5 -a 464 982 9 -a 464 403 8 -a 464 809 10 -a 464 26 10 -a 464 606 6 -a 464 700 7 -a 464 9 1 -a 464 14 9 -a 464 971 3 -a 464 454 3 -a 464 864 1 -a 464 723 6 -a 464 950 9 -a 464 250 7 -a 464 155 9 -a 464 30 4 -a 464 816 10 -a 464 739 7 -a 464 729 6 -a 464 490 6 -a 464 301 6 -a 464 636 3 -a 464 963 4 -a 464 145 2 -a 464 386 8 -a 464 483 1 -a 464 955 6 -a 464 645 1 -a 464 407 1 -a 464 912 8 -a 464 635 7 -a 464 809 9 -a 464 696 2 -a 464 661 6 -a 464 390 8 -a 464 371 4 -a 464 669 3 -a 464 404 10 -a 464 318 6 -a 464 98 5 -a 464 394 9 -a 464 157 3 -a 464 820 9 -a 464 319 4 -a 464 406 9 -a 464 975 4 -a 464 348 4 -a 464 197 3 -a 464 689 10 -a 464 52 2 -a 464 686 4 -a 464 989 8 -a 464 688 3 -a 464 624 8 -a 464 110 4 -a 464 49 1 -a 464 82 9 -a 464 40 6 -a 464 694 4 -a 464 488 9 -a 464 951 10 -a 464 304 8 -a 464 273 4 -a 464 623 7 -a 464 964 2 -a 464 662 4 -a 464 993 8 -a 464 609 10 -a 464 41 6 -a 464 286 6 -a 464 706 6 -a 464 435 1 -a 464 442 7 -a 464 502 4 -a 464 753 10 -a 464 847 6 -a 464 452 5 -a 464 77 1 -a 464 19 5 -a 464 116 8 -a 464 128 7 -a 464 704 3 -a 465 80 9 -a 465 815 2 -a 465 304 4 -a 465 189 1 -a 465 864 1 -a 465 385 4 -a 465 228 1 -a 465 533 9 -a 465 873 8 -a 465 155 1 -a 465 836 1 -a 465 121 2 -a 465 777 3 -a 465 776 8 -a 465 782 1 -a 465 745 5 -a 465 360 6 -a 465 823 1 -a 465 7 1 -a 465 41 1 -a 465 233 8 -a 465 448 2 -a 465 542 1 -a 465 985 3 -a 465 271 1 -a 465 993 9 -a 465 37 10 -a 465 289 10 -a 465 84 10 -a 465 165 7 -a 465 993 8 -a 465 164 2 -a 465 979 8 -a 465 272 1 -a 465 352 1 -a 465 818 4 -a 465 656 7 -a 465 580 4 -a 465 326 7 -a 465 504 6 -a 465 734 2 -a 465 138 7 -a 465 624 3 -a 465 486 7 -a 465 913 3 -a 465 382 5 -a 465 206 10 -a 465 248 1 -a 465 180 2 -a 465 212 10 -a 465 288 8 -a 465 412 1 -a 465 660 4 -a 465 830 5 -a 465 372 7 -a 465 930 7 -a 465 798 9 -a 465 409 3 -a 465 194 3 -a 465 882 5 -a 465 573 9 -a 465 162 7 -a 465 21 10 -a 465 527 3 -a 465 433 4 -a 465 372 10 -a 465 321 1 -a 465 65 5 -a 465 951 4 -a 465 646 9 -a 465 568 5 -a 465 660 7 -a 465 783 6 -a 465 168 4 -a 465 121 5 -a 465 671 2 -a 465 549 6 -a 465 327 5 -a 465 918 8 -a 465 728 8 -a 465 538 8 -a 465 182 10 -a 465 115 6 -a 465 173 3 -a 465 486 1 -a 465 78 2 -a 465 784 1 -a 465 894 4 -a 465 272 5 -a 465 641 4 -a 465 442 2 -a 465 433 8 -a 465 661 6 -a 465 969 2 -a 465 866 4 -a 465 9 1 -a 465 265 8 -a 465 930 2 -a 465 959 1 -a 465 910 3 -a 465 473 1 -a 465 595 6 -a 465 669 10 -a 465 640 8 -a 465 715 3 -a 465 315 8 -a 465 164 5 -a 465 17 9 -a 465 209 6 -a 465 891 9 -a 465 555 4 -a 465 390 9 -a 465 727 6 -a 465 376 8 -a 465 467 8 -a 465 805 8 -a 465 135 9 -a 465 336 1 -a 465 52 4 -a 465 776 8 -a 465 778 4 -a 465 484 10 -a 466 412 9 -a 466 722 3 -a 466 325 4 -a 466 420 5 -a 466 986 6 -a 466 230 1 -a 466 355 10 -a 466 871 5 -a 466 703 7 -a 466 949 8 -a 466 515 7 -a 466 318 3 -a 466 639 3 -a 466 830 10 -a 466 482 8 -a 466 656 2 -a 466 14 3 -a 466 348 5 -a 466 186 7 -a 466 403 8 -a 466 329 1 -a 466 912 1 -a 466 778 3 -a 466 795 5 -a 466 692 8 -a 466 912 1 -a 466 106 2 -a 466 743 5 -a 466 663 3 -a 466 883 7 -a 466 203 10 -a 466 51 9 -a 466 580 1 -a 466 527 6 -a 466 470 2 -a 466 541 3 -a 466 757 7 -a 466 824 5 -a 466 388 5 -a 466 435 7 -a 466 748 8 -a 466 902 4 -a 466 752 3 -a 466 363 2 -a 466 707 3 -a 466 209 7 -a 466 720 2 -a 466 557 6 -a 466 179 1 -a 466 98 10 -a 466 885 7 -a 466 66 6 -a 466 875 4 -a 466 655 4 -a 466 758 2 -a 466 763 4 -a 466 760 9 -a 466 476 1 -a 466 401 6 -a 466 619 9 -a 466 678 8 -a 466 451 7 -a 466 174 10 -a 466 181 8 -a 466 921 6 -a 466 715 8 -a 466 937 4 -a 466 720 1 -a 466 78 8 -a 466 347 10 -a 466 444 1 -a 466 979 10 -a 466 74 2 -a 466 806 9 -a 466 662 8 -a 466 283 5 -a 466 799 2 -a 466 357 8 -a 466 839 10 -a 466 977 10 -a 466 455 6 -a 466 699 5 -a 466 18 1 -a 466 305 3 -a 466 329 1 -a 466 775 7 -a 466 43 6 -a 466 64 4 -a 466 227 7 -a 466 444 4 -a 466 682 4 -a 466 904 5 -a 466 894 1 -a 466 856 3 -a 466 60 1 -a 466 790 3 -a 466 546 6 -a 466 996 4 -a 466 486 7 -a 466 623 7 -a 466 318 1 -a 466 929 5 -a 466 577 2 -a 466 392 6 -a 466 710 1 -a 466 214 1 -a 466 674 8 -a 466 484 7 -a 467 571 3 -a 467 488 10 -a 467 436 8 -a 467 1 9 -a 467 162 10 -a 467 453 1 -a 467 305 6 -a 467 490 6 -a 467 204 3 -a 467 348 9 -a 467 553 9 -a 467 430 2 -a 467 791 3 -a 467 211 9 -a 467 309 1 -a 467 660 3 -a 467 42 1 -a 467 369 4 -a 467 426 3 -a 467 587 2 -a 467 340 2 -a 467 911 5 -a 467 185 9 -a 467 658 9 -a 467 815 8 -a 467 761 9 -a 467 25 2 -a 467 500 8 -a 467 975 10 -a 467 698 8 -a 467 983 8 -a 467 521 10 -a 467 161 10 -a 467 394 5 -a 467 521 3 -a 467 322 8 -a 467 846 10 -a 467 825 8 -a 467 811 10 -a 467 25 7 -a 467 148 8 -a 467 339 3 -a 467 454 8 -a 467 938 3 -a 467 549 3 -a 467 763 9 -a 467 574 1 -a 467 590 3 -a 467 107 9 -a 467 999 2 -a 467 152 1 -a 467 446 5 -a 467 885 10 -a 467 336 10 -a 467 79 4 -a 467 675 1 -a 467 73 8 -a 467 103 10 -a 467 150 9 -a 467 23 6 -a 467 800 9 -a 467 108 4 -a 467 543 1 -a 467 960 3 -a 467 501 10 -a 467 39 2 -a 467 257 8 -a 467 322 4 -a 467 863 7 -a 467 43 10 -a 467 347 5 -a 467 382 5 -a 467 800 4 -a 467 924 2 -a 467 930 2 -a 467 538 4 -a 467 473 9 -a 467 496 8 -a 467 644 8 -a 467 447 3 -a 467 647 1 -a 467 66 7 -a 467 307 6 -a 467 983 7 -a 467 144 8 -a 467 981 2 -a 467 31 1 -a 467 247 9 -a 467 106 2 -a 467 53 7 -a 467 22 7 -a 467 213 6 -a 467 595 10 -a 467 982 7 -a 467 713 4 -a 467 633 7 -a 467 214 5 -a 467 11 8 -a 467 471 7 -a 467 257 5 -a 467 357 5 -a 467 457 5 -a 467 638 2 -a 467 132 5 -a 467 357 9 -a 467 543 9 -a 467 670 7 -a 467 829 10 -a 467 14 2 -a 467 289 9 -a 467 252 2 -a 467 661 8 -a 467 354 5 -a 467 558 10 -a 467 619 10 -a 467 498 6 -a 467 515 7 -a 467 649 7 -a 467 744 1 -a 467 620 4 -a 468 701 9 -a 468 765 6 -a 468 833 2 -a 468 271 5 -a 468 722 9 -a 468 521 8 -a 468 903 5 -a 468 936 2 -a 468 531 6 -a 468 349 3 -a 468 168 7 -a 468 887 6 -a 468 806 1 -a 468 805 6 -a 468 138 1 -a 468 323 7 -a 468 664 9 -a 468 966 5 -a 468 337 7 -a 468 952 3 -a 468 193 4 -a 468 997 2 -a 468 282 10 -a 468 751 2 -a 468 591 1 -a 468 779 1 -a 468 241 3 -a 468 215 6 -a 468 498 5 -a 468 860 3 -a 468 915 10 -a 468 238 10 -a 468 668 6 -a 468 161 2 -a 468 960 6 -a 468 165 5 -a 468 39 1 -a 468 871 3 -a 468 695 5 -a 468 387 5 -a 468 14 9 -a 468 558 6 -a 468 168 9 -a 468 818 8 -a 468 552 1 -a 468 305 6 -a 468 116 6 -a 468 191 4 -a 468 247 7 -a 468 452 3 -a 468 118 8 -a 468 439 1 -a 468 424 5 -a 468 399 5 -a 468 165 2 -a 468 153 4 -a 468 405 2 -a 468 204 9 -a 468 650 6 -a 468 241 1 -a 468 94 4 -a 468 888 4 -a 468 908 3 -a 468 254 1 -a 468 823 2 -a 468 48 7 -a 468 292 4 -a 468 669 5 -a 468 743 6 -a 468 679 7 -a 468 682 9 -a 468 276 8 -a 468 846 9 -a 468 475 10 -a 468 827 5 -a 468 127 1 -a 468 590 4 -a 468 373 4 -a 468 18 8 -a 468 110 7 -a 468 811 9 -a 468 441 1 -a 468 509 6 -a 468 976 4 -a 468 431 10 -a 468 661 9 -a 468 356 10 -a 468 634 6 -a 468 287 4 -a 468 596 10 -a 468 728 6 -a 468 150 8 -a 468 480 4 -a 468 981 2 -a 468 972 3 -a 468 527 6 -a 468 249 3 -a 468 616 9 -a 468 245 9 -a 469 927 6 -a 469 273 7 -a 469 520 10 -a 469 748 5 -a 469 747 5 -a 469 322 10 -a 469 874 3 -a 469 312 10 -a 469 314 4 -a 469 222 6 -a 469 329 8 -a 469 424 9 -a 469 9 4 -a 469 770 6 -a 469 932 5 -a 469 984 5 -a 469 176 9 -a 469 568 7 -a 469 315 6 -a 469 809 2 -a 469 854 10 -a 469 911 10 -a 469 512 1 -a 469 366 7 -a 469 469 5 -a 469 950 1 -a 469 892 7 -a 469 717 9 -a 469 541 5 -a 469 113 2 -a 469 619 4 -a 469 813 6 -a 469 632 6 -a 469 342 9 -a 469 535 2 -a 469 954 4 -a 469 192 6 -a 469 847 3 -a 469 243 8 -a 469 413 1 -a 469 151 6 -a 469 666 6 -a 469 421 4 -a 469 920 3 -a 469 573 9 -a 469 380 9 -a 469 71 6 -a 469 117 5 -a 469 695 6 -a 469 880 10 -a 469 970 7 -a 469 581 6 -a 469 367 3 -a 469 949 5 -a 469 946 3 -a 469 835 7 -a 469 874 4 -a 469 813 4 -a 469 527 9 -a 469 391 8 -a 469 925 6 -a 469 121 3 -a 469 179 6 -a 469 533 2 -a 469 463 2 -a 469 714 7 -a 469 462 7 -a 469 654 7 -a 469 536 6 -a 469 704 2 -a 469 42 5 -a 469 686 9 -a 469 346 4 -a 469 463 4 -a 469 582 2 -a 469 918 9 -a 469 842 7 -a 469 652 6 -a 469 10 1 -a 469 512 10 -a 469 507 4 -a 469 980 1 -a 469 68 3 -a 469 874 8 -a 469 904 1 -a 469 684 5 -a 469 753 4 -a 469 802 3 -a 469 187 8 -a 469 119 7 -a 469 702 5 -a 469 307 4 -a 469 298 1 -a 469 210 4 -a 469 769 9 -a 469 671 2 -a 469 398 4 -a 469 522 9 -a 469 351 3 -a 469 440 4 -a 469 183 2 -a 469 696 2 -a 469 902 10 -a 469 764 5 -a 469 589 4 -a 469 719 3 -a 469 392 4 -a 469 599 3 -a 469 207 1 -a 469 898 2 -a 469 554 5 -a 469 274 8 -a 470 747 9 -a 470 433 9 -a 470 263 9 -a 470 407 10 -a 470 161 2 -a 470 40 7 -a 470 593 5 -a 470 280 6 -a 470 741 9 -a 470 899 9 -a 470 577 7 -a 470 951 6 -a 470 644 10 -a 470 563 2 -a 470 597 10 -a 470 17 1 -a 470 60 8 -a 470 947 4 -a 470 456 6 -a 470 242 4 -a 470 618 8 -a 470 333 3 -a 470 183 6 -a 470 28 8 -a 470 373 8 -a 470 781 9 -a 470 234 5 -a 470 246 5 -a 470 310 6 -a 470 507 1 -a 470 993 3 -a 470 742 3 -a 470 769 1 -a 470 375 6 -a 470 902 7 -a 470 808 5 -a 470 967 4 -a 470 157 3 -a 470 525 7 -a 470 841 2 -a 470 733 2 -a 470 451 3 -a 470 460 9 -a 470 271 9 -a 470 23 1 -a 470 477 2 -a 470 330 5 -a 470 970 8 -a 470 932 2 -a 470 572 4 -a 470 563 8 -a 470 241 4 -a 470 553 2 -a 470 745 10 -a 470 268 4 -a 470 925 9 -a 470 501 9 -a 470 501 4 -a 470 146 9 -a 470 810 9 -a 470 114 8 -a 470 527 9 -a 470 752 5 -a 470 488 9 -a 470 405 6 -a 470 535 6 -a 470 430 1 -a 470 561 4 -a 470 35 2 -a 470 247 7 -a 470 270 4 -a 470 485 5 -a 470 706 8 -a 470 540 8 -a 470 508 4 -a 470 158 6 -a 470 870 6 -a 470 453 3 -a 470 66 9 -a 470 417 5 -a 470 306 1 -a 470 969 6 -a 470 736 8 -a 471 573 2 -a 471 869 3 -a 471 212 6 -a 471 49 6 -a 471 31 7 -a 471 104 4 -a 471 524 4 -a 471 782 8 -a 471 591 10 -a 471 928 9 -a 471 293 10 -a 471 465 9 -a 471 327 7 -a 471 243 5 -a 471 734 1 -a 471 812 4 -a 471 948 7 -a 471 249 6 -a 471 295 10 -a 471 82 5 -a 471 94 4 -a 471 747 3 -a 471 147 2 -a 471 510 5 -a 471 737 5 -a 471 452 10 -a 471 454 7 -a 471 448 8 -a 471 298 1 -a 471 660 6 -a 471 48 7 -a 471 288 5 -a 471 657 9 -a 471 78 5 -a 471 391 4 -a 471 156 2 -a 471 860 10 -a 471 981 3 -a 471 60 5 -a 471 128 3 -a 471 977 2 -a 471 524 7 -a 471 454 1 -a 471 195 5 -a 471 233 6 -a 471 241 10 -a 471 119 5 -a 471 481 5 -a 471 535 8 -a 471 200 9 -a 471 575 3 -a 471 257 6 -a 471 346 1 -a 471 60 7 -a 471 994 9 -a 471 797 2 -a 471 514 7 -a 471 417 9 -a 471 796 5 -a 471 811 9 -a 471 52 6 -a 471 843 8 -a 471 74 10 -a 471 708 5 -a 471 920 8 -a 471 464 10 -a 471 864 10 -a 471 755 5 -a 471 421 4 -a 471 923 3 -a 471 882 3 -a 471 373 4 -a 471 422 5 -a 471 312 9 -a 471 568 1 -a 471 654 4 -a 471 552 6 -a 471 686 3 -a 471 110 8 -a 471 63 8 -a 471 885 7 -a 471 684 3 -a 471 319 4 -a 471 206 1 -a 471 744 10 -a 471 288 10 -a 471 233 9 -a 471 705 6 -a 471 773 2 -a 471 19 7 -a 471 756 2 -a 471 591 7 -a 471 93 7 -a 471 440 1 -a 471 486 2 -a 471 556 3 -a 471 279 9 -a 471 217 9 -a 471 976 10 -a 471 177 8 -a 471 74 5 -a 471 325 7 -a 471 598 9 -a 471 385 3 -a 471 892 6 -a 471 227 1 -a 471 937 1 -a 471 553 1 -a 471 336 5 -a 471 999 2 -a 471 413 9 -a 471 293 1 -a 471 618 10 -a 471 739 10 -a 472 581 2 -a 472 595 6 -a 472 971 1 -a 472 261 1 -a 472 343 1 -a 472 989 5 -a 472 933 1 -a 472 57 8 -a 472 431 7 -a 472 394 6 -a 472 613 9 -a 472 709 5 -a 472 610 6 -a 472 564 4 -a 472 885 4 -a 472 684 4 -a 472 888 8 -a 472 458 6 -a 472 44 5 -a 472 755 2 -a 472 684 5 -a 472 980 3 -a 472 283 6 -a 472 954 8 -a 472 695 9 -a 472 223 1 -a 472 288 9 -a 472 729 5 -a 472 803 8 -a 472 882 3 -a 472 675 6 -a 472 39 3 -a 472 200 6 -a 472 639 8 -a 472 30 10 -a 472 108 9 -a 472 696 2 -a 472 461 9 -a 472 502 6 -a 472 284 4 -a 472 145 8 -a 472 87 6 -a 472 847 8 -a 472 6 4 -a 472 770 10 -a 472 711 4 -a 472 463 2 -a 472 814 2 -a 472 441 10 -a 472 123 9 -a 472 769 3 -a 472 724 5 -a 472 118 3 -a 472 699 6 -a 472 394 7 -a 472 108 2 -a 472 921 5 -a 472 682 2 -a 472 836 4 -a 472 699 7 -a 472 539 4 -a 472 486 3 -a 472 737 10 -a 472 739 2 -a 472 100 3 -a 472 766 10 -a 472 846 1 -a 472 795 7 -a 472 202 2 -a 472 323 8 -a 472 54 10 -a 472 347 2 -a 472 410 2 -a 472 901 1 -a 472 352 4 -a 472 155 4 -a 472 587 7 -a 472 814 5 -a 472 968 9 -a 472 3 3 -a 472 936 1 -a 472 713 10 -a 472 726 2 -a 472 29 4 -a 472 387 1 -a 472 96 1 -a 472 136 4 -a 472 283 3 -a 472 777 8 -a 472 971 2 -a 472 981 4 -a 472 291 10 -a 472 432 4 -a 472 693 6 -a 472 5 5 -a 472 532 1 -a 472 434 1 -a 472 851 2 -a 472 302 7 -a 472 636 7 -a 472 149 8 -a 472 356 10 -a 472 982 7 -a 472 558 2 -a 472 232 2 -a 472 309 9 -a 472 713 5 -a 472 818 6 -a 472 98 1 -a 472 656 9 -a 473 820 1 -a 473 10 4 -a 473 344 9 -a 473 522 6 -a 473 38 9 -a 473 730 7 -a 473 617 2 -a 473 174 7 -a 473 369 7 -a 473 120 3 -a 473 968 7 -a 473 659 2 -a 473 552 2 -a 473 636 8 -a 473 664 10 -a 473 59 7 -a 473 46 1 -a 473 490 8 -a 473 360 8 -a 473 681 6 -a 473 638 8 -a 473 715 8 -a 473 638 6 -a 473 172 4 -a 473 946 6 -a 473 946 10 -a 473 884 3 -a 473 739 4 -a 473 19 6 -a 473 515 6 -a 473 535 1 -a 473 28 7 -a 473 859 9 -a 473 32 2 -a 473 66 8 -a 473 564 9 -a 473 648 7 -a 473 239 1 -a 473 552 5 -a 473 358 2 -a 473 495 10 -a 473 650 8 -a 473 909 5 -a 473 107 3 -a 473 289 1 -a 473 967 1 -a 473 152 4 -a 473 778 5 -a 473 303 6 -a 473 832 5 -a 473 392 4 -a 473 445 4 -a 473 563 9 -a 473 939 5 -a 473 366 10 -a 473 422 8 -a 473 653 5 -a 473 384 7 -a 473 936 3 -a 473 163 10 -a 473 412 5 -a 473 770 3 -a 473 194 5 -a 473 477 2 -a 473 310 8 -a 473 841 7 -a 473 715 2 -a 473 861 8 -a 473 832 6 -a 473 48 2 -a 473 331 10 -a 473 458 7 -a 473 957 2 -a 473 437 3 -a 473 746 2 -a 473 899 9 -a 473 588 10 -a 473 500 7 -a 473 177 5 -a 473 395 6 -a 473 891 2 -a 473 170 4 -a 473 839 6 -a 473 429 1 -a 473 84 8 -a 473 180 7 -a 473 850 8 -a 473 736 9 -a 473 564 4 -a 473 761 10 -a 473 899 10 -a 473 975 9 -a 473 507 9 -a 473 68 1 -a 473 427 4 -a 473 816 4 -a 473 909 3 -a 473 117 6 -a 473 652 5 -a 473 716 9 -a 473 164 4 -a 473 982 10 -a 473 149 2 -a 473 96 2 -a 473 395 5 -a 473 895 6 -a 473 995 9 -a 474 982 3 -a 474 370 7 -a 474 147 6 -a 474 353 7 -a 474 236 1 -a 474 316 2 -a 474 167 6 -a 474 664 9 -a 474 399 6 -a 474 347 3 -a 474 489 3 -a 474 111 1 -a 474 910 9 -a 474 225 2 -a 474 860 6 -a 474 731 1 -a 474 52 6 -a 474 262 7 -a 474 522 9 -a 474 960 8 -a 474 378 1 -a 474 149 4 -a 474 652 6 -a 474 541 9 -a 474 107 1 -a 474 800 6 -a 474 637 6 -a 474 501 5 -a 474 670 2 -a 474 607 9 -a 474 458 4 -a 474 15 1 -a 474 753 6 -a 474 810 3 -a 474 250 1 -a 474 45 2 -a 474 977 1 -a 474 913 4 -a 474 443 8 -a 474 299 1 -a 474 377 7 -a 474 553 1 -a 474 184 10 -a 474 602 2 -a 474 537 4 -a 474 19 2 -a 474 308 8 -a 474 589 10 -a 474 280 9 -a 474 830 9 -a 474 524 2 -a 474 657 6 -a 474 978 2 -a 474 151 1 -a 474 173 8 -a 474 60 2 -a 474 951 9 -a 474 809 6 -a 474 560 2 -a 474 596 3 -a 474 391 8 -a 474 611 4 -a 474 120 4 -a 474 803 7 -a 474 860 5 -a 474 164 8 -a 474 755 4 -a 474 749 7 -a 474 606 3 -a 474 29 10 -a 474 101 7 -a 474 135 5 -a 474 212 4 -a 474 702 1 -a 474 671 7 -a 474 230 9 -a 474 235 10 -a 474 509 5 -a 474 815 6 -a 474 759 5 -a 474 141 2 -a 474 768 3 -a 474 909 5 -a 474 314 9 -a 474 828 2 -a 474 835 10 -a 474 98 5 -a 474 363 9 -a 474 407 1 -a 474 489 4 -a 474 356 5 -a 474 608 7 -a 474 135 9 -a 474 852 8 -a 474 771 6 -a 474 889 3 -a 474 576 8 -a 474 352 2 -a 474 918 10 -a 474 677 4 -a 474 486 9 -a 474 105 2 -a 474 354 1 -a 474 133 3 -a 474 335 10 -a 474 339 6 -a 474 367 2 -a 474 843 3 -a 475 129 8 -a 475 101 1 -a 475 984 5 -a 475 897 10 -a 475 273 4 -a 475 700 10 -a 475 820 7 -a 475 370 7 -a 475 38 5 -a 475 202 8 -a 475 858 3 -a 475 394 7 -a 475 194 4 -a 475 441 10 -a 475 528 9 -a 475 22 7 -a 475 187 9 -a 475 392 8 -a 475 597 6 -a 475 539 2 -a 475 285 4 -a 475 249 9 -a 475 390 5 -a 475 603 1 -a 475 132 3 -a 475 724 4 -a 475 941 3 -a 475 499 6 -a 475 542 10 -a 475 46 10 -a 475 599 5 -a 475 501 3 -a 475 942 8 -a 475 584 2 -a 475 773 3 -a 475 617 4 -a 475 380 1 -a 475 119 4 -a 475 654 6 -a 475 581 10 -a 475 976 2 -a 475 23 2 -a 475 775 5 -a 475 393 9 -a 475 550 5 -a 475 796 9 -a 475 579 6 -a 475 942 10 -a 475 368 10 -a 475 93 9 -a 475 202 5 -a 475 617 6 -a 475 93 8 -a 475 591 1 -a 475 195 9 -a 475 224 4 -a 475 290 5 -a 475 111 5 -a 475 722 1 -a 475 832 7 -a 475 156 4 -a 475 297 5 -a 475 308 7 -a 475 73 2 -a 475 880 5 -a 475 57 4 -a 475 689 9 -a 475 235 4 -a 475 175 9 -a 475 319 8 -a 475 816 9 -a 475 126 6 -a 475 341 1 -a 475 566 4 -a 475 518 6 -a 475 891 3 -a 475 337 5 -a 475 73 8 -a 475 808 4 -a 475 704 2 -a 475 165 9 -a 475 296 2 -a 475 257 7 -a 475 576 10 -a 475 490 2 -a 475 481 3 -a 475 865 3 -a 475 601 10 -a 475 178 6 -a 475 672 6 -a 475 756 5 -a 475 474 1 -a 475 980 1 -a 476 829 8 -a 476 330 4 -a 476 12 6 -a 476 493 2 -a 476 564 7 -a 476 186 3 -a 476 811 3 -a 476 355 5 -a 476 311 10 -a 476 128 6 -a 476 920 2 -a 476 829 6 -a 476 232 7 -a 476 901 9 -a 476 801 1 -a 476 936 10 -a 476 41 6 -a 476 785 2 -a 476 207 6 -a 476 298 5 -a 476 336 2 -a 476 697 8 -a 476 778 2 -a 476 177 6 -a 476 273 1 -a 476 955 1 -a 476 848 6 -a 476 4 3 -a 476 405 3 -a 476 803 4 -a 476 832 3 -a 476 734 1 -a 476 814 2 -a 476 301 4 -a 476 273 3 -a 476 999 5 -a 476 87 5 -a 476 628 3 -a 476 286 2 -a 476 214 2 -a 476 523 1 -a 476 90 9 -a 476 207 3 -a 476 755 6 -a 476 990 9 -a 476 666 4 -a 476 6 10 -a 476 768 5 -a 476 872 3 -a 476 303 4 -a 476 79 1 -a 476 544 10 -a 476 56 3 -a 476 255 3 -a 476 816 7 -a 476 79 1 -a 476 820 6 -a 476 391 2 -a 476 881 6 -a 476 627 8 -a 476 100 5 -a 476 671 4 -a 476 927 10 -a 476 372 4 -a 476 645 5 -a 476 999 8 -a 476 930 1 -a 476 203 6 -a 476 498 6 -a 476 410 8 -a 476 228 3 -a 476 984 3 -a 476 392 8 -a 476 893 5 -a 476 990 6 -a 476 135 4 -a 476 740 3 -a 476 268 6 -a 476 214 9 -a 476 260 3 -a 476 324 7 -a 476 468 10 -a 476 51 9 -a 476 310 10 -a 476 546 3 -a 476 870 10 -a 476 700 7 -a 476 403 4 -a 476 473 4 -a 476 799 7 -a 476 49 9 -a 476 375 9 -a 476 146 7 -a 476 693 1 -a 476 364 5 -a 476 121 8 -a 476 599 1 -a 476 567 2 -a 476 618 4 -a 476 593 7 -a 476 976 3 -a 476 845 6 -a 476 553 1 -a 476 343 8 -a 476 713 10 -a 476 518 8 -a 476 478 5 -a 477 428 4 -a 477 785 2 -a 477 691 7 -a 477 687 2 -a 477 84 8 -a 477 134 5 -a 477 738 3 -a 477 393 10 -a 477 680 2 -a 477 583 1 -a 477 68 2 -a 477 58 5 -a 477 31 6 -a 477 866 10 -a 477 106 2 -a 477 406 9 -a 477 798 9 -a 477 769 7 -a 477 108 2 -a 477 372 4 -a 477 311 3 -a 477 725 10 -a 477 965 9 -a 477 262 7 -a 477 545 8 -a 477 493 8 -a 477 605 10 -a 477 233 2 -a 477 58 8 -a 477 660 2 -a 477 770 7 -a 477 748 3 -a 477 323 10 -a 477 854 7 -a 477 881 4 -a 477 36 6 -a 477 222 4 -a 477 536 3 -a 477 618 7 -a 477 290 2 -a 477 593 9 -a 477 649 1 -a 477 131 3 -a 477 698 1 -a 477 30 8 -a 477 118 4 -a 477 472 3 -a 477 798 6 -a 477 225 8 -a 477 843 6 -a 477 85 8 -a 477 949 3 -a 477 783 3 -a 477 346 7 -a 477 469 9 -a 477 251 10 -a 477 950 10 -a 477 701 9 -a 477 236 3 -a 477 337 6 -a 477 730 7 -a 477 659 3 -a 477 835 8 -a 477 587 7 -a 477 694 4 -a 477 32 7 -a 477 98 6 -a 477 287 8 -a 477 321 9 -a 477 691 2 -a 477 935 7 -a 477 452 2 -a 477 364 7 -a 477 964 5 -a 477 569 10 -a 477 835 2 -a 477 738 6 -a 477 794 4 -a 477 654 3 -a 477 822 4 -a 477 718 9 -a 477 412 1 -a 477 143 6 -a 477 163 8 -a 477 663 9 -a 477 69 6 -a 477 863 7 -a 477 898 9 -a 477 51 4 -a 478 175 7 -a 478 879 1 -a 478 781 3 -a 478 833 8 -a 478 689 8 -a 478 343 1 -a 478 502 1 -a 478 721 6 -a 478 440 2 -a 478 789 1 -a 478 17 9 -a 478 106 1 -a 478 699 8 -a 478 468 6 -a 478 470 6 -a 478 639 3 -a 478 13 4 -a 478 280 3 -a 478 352 3 -a 478 806 3 -a 478 933 6 -a 478 149 3 -a 478 499 2 -a 478 321 10 -a 478 291 2 -a 478 661 9 -a 478 983 10 -a 478 359 7 -a 478 500 8 -a 478 856 1 -a 478 410 8 -a 478 674 4 -a 478 711 9 -a 478 166 3 -a 478 483 5 -a 478 375 7 -a 478 508 2 -a 478 984 10 -a 478 71 3 -a 478 947 7 -a 478 748 4 -a 478 88 7 -a 478 29 9 -a 478 423 10 -a 478 555 4 -a 478 498 5 -a 478 37 7 -a 478 567 6 -a 478 777 2 -a 478 388 4 -a 478 348 1 -a 478 686 9 -a 478 536 6 -a 478 847 6 -a 478 826 7 -a 478 483 5 -a 478 964 5 -a 478 161 8 -a 478 982 4 -a 478 795 6 -a 478 570 10 -a 478 632 8 -a 478 481 8 -a 478 735 2 -a 478 90 2 -a 478 856 8 -a 478 218 8 -a 478 49 7 -a 478 926 8 -a 478 140 7 -a 478 797 10 -a 478 168 1 -a 478 195 9 -a 478 544 6 -a 478 665 8 -a 478 231 5 -a 478 86 1 -a 479 418 3 -a 479 618 9 -a 479 434 6 -a 479 79 9 -a 479 129 1 -a 479 256 7 -a 479 60 2 -a 479 954 2 -a 479 738 5 -a 479 90 9 -a 479 696 3 -a 479 793 6 -a 479 659 1 -a 479 303 6 -a 479 250 5 -a 479 369 4 -a 479 392 9 -a 479 81 7 -a 479 586 7 -a 479 440 7 -a 479 726 2 -a 479 212 1 -a 479 995 7 -a 479 893 10 -a 479 406 6 -a 479 514 9 -a 479 534 10 -a 479 636 6 -a 479 599 10 -a 479 951 4 -a 479 229 4 -a 479 8 6 -a 479 5 1 -a 479 357 4 -a 479 263 2 -a 479 64 7 -a 479 287 6 -a 479 62 1 -a 479 376 3 -a 479 672 7 -a 479 854 2 -a 479 11 5 -a 479 974 3 -a 479 79 4 -a 479 379 9 -a 479 341 1 -a 479 159 7 -a 479 965 9 -a 479 780 10 -a 479 141 10 -a 479 666 7 -a 479 992 7 -a 479 111 2 -a 479 534 10 -a 479 373 3 -a 479 624 3 -a 479 43 4 -a 479 198 9 -a 479 993 10 -a 479 213 9 -a 479 206 7 -a 479 997 1 -a 479 570 3 -a 479 468 9 -a 479 36 9 -a 479 856 7 -a 479 444 3 -a 479 97 4 -a 479 207 8 -a 479 91 9 -a 479 951 4 -a 479 217 4 -a 479 40 6 -a 479 5 1 -a 479 596 10 -a 479 380 5 -a 479 164 3 -a 479 536 9 -a 479 136 4 -a 479 304 8 -a 479 177 1 -a 479 103 9 -a 479 414 2 -a 479 710 5 -a 479 475 4 -a 479 13 8 -a 479 753 3 -a 479 459 2 -a 479 210 7 -a 479 721 6 -a 479 672 6 -a 479 415 2 -a 479 694 6 -a 479 217 5 -a 479 883 6 -a 479 729 3 -a 479 48 7 -a 479 302 3 -a 479 826 3 -a 479 254 5 -a 479 393 9 -a 479 752 3 -a 480 471 5 -a 480 432 2 -a 480 756 1 -a 480 42 3 -a 480 812 3 -a 480 919 5 -a 480 577 6 -a 480 947 1 -a 480 198 1 -a 480 753 7 -a 480 25 7 -a 480 611 3 -a 480 438 2 -a 480 499 8 -a 480 623 9 -a 480 166 7 -a 480 958 10 -a 480 833 4 -a 480 887 2 -a 480 605 1 -a 480 223 6 -a 480 556 1 -a 480 821 8 -a 480 81 6 -a 480 260 5 -a 480 868 5 -a 480 383 2 -a 480 61 5 -a 480 97 5 -a 480 775 2 -a 480 812 3 -a 480 567 10 -a 480 182 3 -a 480 544 4 -a 480 608 1 -a 480 993 8 -a 480 438 8 -a 480 160 1 -a 480 915 10 -a 480 636 9 -a 480 912 8 -a 480 939 9 -a 480 222 1 -a 480 326 1 -a 480 414 8 -a 480 845 7 -a 480 491 10 -a 480 347 8 -a 480 653 7 -a 480 353 2 -a 480 951 5 -a 480 875 7 -a 480 908 10 -a 480 747 1 -a 480 956 3 -a 480 144 1 -a 480 590 1 -a 480 314 9 -a 480 204 9 -a 480 686 4 -a 480 64 6 -a 480 229 5 -a 480 245 4 -a 480 535 5 -a 480 836 1 -a 480 214 1 -a 480 972 7 -a 480 996 9 -a 480 104 5 -a 480 583 5 -a 480 883 8 -a 480 19 5 -a 480 805 9 -a 480 184 3 -a 480 432 2 -a 480 625 3 -a 480 675 3 -a 480 778 4 -a 480 253 10 -a 480 3 1 -a 480 704 4 -a 480 103 4 -a 480 911 4 -a 480 426 4 -a 480 34 8 -a 480 30 2 -a 480 347 10 -a 480 233 6 -a 480 676 10 -a 480 410 4 -a 480 224 4 -a 480 904 1 -a 480 655 2 -a 480 758 8 -a 480 716 9 -a 480 868 4 -a 481 706 3 -a 481 687 7 -a 481 971 1 -a 481 264 10 -a 481 545 10 -a 481 989 7 -a 481 44 5 -a 481 729 6 -a 481 396 7 -a 481 668 4 -a 481 379 2 -a 481 149 7 -a 481 920 10 -a 481 381 5 -a 481 852 4 -a 481 267 4 -a 481 253 4 -a 481 32 7 -a 481 296 7 -a 481 243 8 -a 481 379 5 -a 481 529 1 -a 481 919 2 -a 481 788 1 -a 481 752 10 -a 481 798 2 -a 481 418 8 -a 481 486 2 -a 481 489 1 -a 481 261 2 -a 481 167 8 -a 481 151 2 -a 481 208 3 -a 481 430 5 -a 481 696 7 -a 481 172 2 -a 481 474 1 -a 481 400 8 -a 481 568 5 -a 481 117 6 -a 481 778 1 -a 481 716 7 -a 481 13 1 -a 481 134 7 -a 481 544 10 -a 481 11 1 -a 481 401 9 -a 481 796 3 -a 481 42 10 -a 481 696 4 -a 481 15 1 -a 481 420 3 -a 481 200 2 -a 481 933 1 -a 481 184 1 -a 481 952 6 -a 481 706 7 -a 481 601 2 -a 481 413 6 -a 481 171 3 -a 481 862 9 -a 481 579 2 -a 481 321 7 -a 481 45 3 -a 481 216 6 -a 481 457 5 -a 481 391 2 -a 481 783 6 -a 481 574 6 -a 481 144 8 -a 481 475 10 -a 481 586 8 -a 481 278 1 -a 481 596 10 -a 481 678 2 -a 481 789 7 -a 481 637 3 -a 481 349 7 -a 481 803 9 -a 481 33 7 -a 481 549 6 -a 481 711 5 -a 481 216 2 -a 481 476 9 -a 481 393 3 -a 481 816 1 -a 481 888 4 -a 481 563 1 -a 481 653 2 -a 481 442 8 -a 481 883 8 -a 482 697 9 -a 482 425 9 -a 482 875 1 -a 482 913 4 -a 482 882 10 -a 482 241 7 -a 482 671 1 -a 482 431 4 -a 482 385 10 -a 482 121 2 -a 482 662 9 -a 482 114 2 -a 482 587 1 -a 482 315 7 -a 482 903 2 -a 482 199 10 -a 482 663 4 -a 482 681 10 -a 482 231 2 -a 482 187 10 -a 482 368 2 -a 482 446 2 -a 482 662 7 -a 482 760 10 -a 482 238 10 -a 482 525 7 -a 482 298 3 -a 482 890 10 -a 482 966 10 -a 482 156 2 -a 482 563 4 -a 482 367 5 -a 482 6 3 -a 482 451 7 -a 482 224 3 -a 482 247 10 -a 482 97 4 -a 482 654 3 -a 482 631 7 -a 482 218 6 -a 482 645 6 -a 482 268 7 -a 482 331 7 -a 482 207 2 -a 482 582 1 -a 482 209 8 -a 482 405 2 -a 482 220 4 -a 482 890 10 -a 482 636 3 -a 482 407 1 -a 482 233 1 -a 482 57 8 -a 482 44 3 -a 482 992 5 -a 482 294 6 -a 482 569 10 -a 482 265 8 -a 482 160 8 -a 482 510 4 -a 482 420 4 -a 482 722 3 -a 482 876 10 -a 482 426 10 -a 482 148 10 -a 482 75 3 -a 482 672 6 -a 482 244 1 -a 482 728 7 -a 482 278 4 -a 482 461 2 -a 482 348 4 -a 482 545 9 -a 482 792 2 -a 482 554 6 -a 482 102 6 -a 482 1000 4 -a 482 959 2 -a 482 321 10 -a 482 865 2 -a 482 570 8 -a 482 727 6 -a 482 73 8 -a 482 626 8 -a 482 771 7 -a 482 40 10 -a 482 920 4 -a 482 315 7 -a 482 304 3 -a 482 55 7 -a 482 824 3 -a 482 724 4 -a 483 776 6 -a 483 676 6 -a 483 125 8 -a 483 923 5 -a 483 750 1 -a 483 796 8 -a 483 142 10 -a 483 454 3 -a 483 49 3 -a 483 603 2 -a 483 801 1 -a 483 593 9 -a 483 370 4 -a 483 331 4 -a 483 694 2 -a 483 345 6 -a 483 265 6 -a 483 186 8 -a 483 834 3 -a 483 717 8 -a 483 258 5 -a 483 435 6 -a 483 463 9 -a 483 298 6 -a 483 330 4 -a 483 777 5 -a 483 601 3 -a 483 384 3 -a 483 576 7 -a 483 300 4 -a 483 135 4 -a 483 227 6 -a 483 424 9 -a 483 33 3 -a 483 977 1 -a 483 195 7 -a 483 175 10 -a 483 406 1 -a 483 243 7 -a 483 777 6 -a 483 182 5 -a 483 835 6 -a 483 122 5 -a 483 512 4 -a 483 504 7 -a 483 466 10 -a 483 776 3 -a 483 494 6 -a 483 651 2 -a 483 585 8 -a 483 186 1 -a 483 909 4 -a 483 648 2 -a 483 182 1 -a 483 325 3 -a 483 400 1 -a 483 782 7 -a 483 709 6 -a 483 975 7 -a 483 58 2 -a 483 843 3 -a 483 178 7 -a 483 481 8 -a 483 876 6 -a 483 130 6 -a 483 676 3 -a 483 26 10 -a 483 535 3 -a 483 918 3 -a 483 802 4 -a 483 716 5 -a 483 729 3 -a 483 923 2 -a 483 204 7 -a 483 208 10 -a 483 364 2 -a 483 979 10 -a 483 701 2 -a 483 540 9 -a 483 886 3 -a 483 899 9 -a 483 535 1 -a 483 509 5 -a 483 56 2 -a 483 859 8 -a 483 908 10 -a 483 837 8 -a 483 543 4 -a 483 859 1 -a 483 894 7 -a 483 362 4 -a 483 12 3 -a 483 351 3 -a 483 213 6 -a 483 141 4 -a 483 2 9 -a 483 238 5 -a 483 675 3 -a 483 919 10 -a 483 15 6 -a 483 366 6 -a 483 623 5 -a 483 937 6 -a 483 569 8 -a 483 831 4 -a 483 276 10 -a 483 524 4 -a 483 507 4 -a 483 266 3 -a 484 39 10 -a 484 369 3 -a 484 140 5 -a 484 573 8 -a 484 877 6 -a 484 195 7 -a 484 407 10 -a 484 761 10 -a 484 8 3 -a 484 950 9 -a 484 595 5 -a 484 901 3 -a 484 287 3 -a 484 606 2 -a 484 227 8 -a 484 499 7 -a 484 746 8 -a 484 228 5 -a 484 736 2 -a 484 396 10 -a 484 123 8 -a 484 750 6 -a 484 761 8 -a 484 745 10 -a 484 662 3 -a 484 306 8 -a 484 551 9 -a 484 937 10 -a 484 829 5 -a 484 34 6 -a 484 179 7 -a 484 867 9 -a 484 402 7 -a 484 318 4 -a 484 415 1 -a 484 254 10 -a 484 513 2 -a 484 821 5 -a 484 520 9 -a 484 746 6 -a 484 584 3 -a 484 396 4 -a 484 8 5 -a 484 165 4 -a 484 623 5 -a 484 506 1 -a 484 910 5 -a 484 850 2 -a 484 217 10 -a 484 281 9 -a 484 972 8 -a 484 966 1 -a 484 18 5 -a 484 693 1 -a 484 603 8 -a 484 323 6 -a 484 219 3 -a 484 516 1 -a 484 127 3 -a 484 252 1 -a 484 694 6 -a 484 993 10 -a 484 653 1 -a 484 383 9 -a 484 907 4 -a 484 499 9 -a 484 179 5 -a 484 896 5 -a 484 925 10 -a 484 456 6 -a 484 390 3 -a 484 932 1 -a 484 620 5 -a 484 414 6 -a 484 506 1 -a 484 837 3 -a 484 630 9 -a 484 786 3 -a 484 785 3 -a 484 572 9 -a 484 803 4 -a 484 453 1 -a 484 150 6 -a 484 101 9 -a 484 671 9 -a 484 665 8 -a 484 227 3 -a 484 923 1 -a 484 334 7 -a 484 195 7 -a 484 551 1 -a 484 321 7 -a 484 577 7 -a 484 433 8 -a 484 819 2 -a 484 756 1 -a 484 305 7 -a 484 813 7 -a 484 656 1 -a 484 760 5 -a 484 178 9 -a 484 563 1 -a 484 355 3 -a 484 165 5 -a 484 976 3 -a 484 860 7 -a 484 582 2 -a 484 622 9 -a 484 761 9 -a 484 129 1 -a 484 400 3 -a 484 189 6 -a 485 278 8 -a 485 501 10 -a 485 860 7 -a 485 943 9 -a 485 727 9 -a 485 758 4 -a 485 252 6 -a 485 922 9 -a 485 284 1 -a 485 572 1 -a 485 474 5 -a 485 717 5 -a 485 367 8 -a 485 205 3 -a 485 155 6 -a 485 860 2 -a 485 756 1 -a 485 332 5 -a 485 399 3 -a 485 86 4 -a 485 496 9 -a 485 350 5 -a 485 946 8 -a 485 472 7 -a 485 931 6 -a 485 543 9 -a 485 209 5 -a 485 35 2 -a 485 942 3 -a 485 397 5 -a 485 313 4 -a 485 418 8 -a 485 232 6 -a 485 231 5 -a 485 121 8 -a 485 989 1 -a 485 482 5 -a 485 18 7 -a 485 249 10 -a 485 30 6 -a 485 491 5 -a 485 965 6 -a 485 396 6 -a 485 696 9 -a 485 961 1 -a 485 550 5 -a 485 531 7 -a 485 692 1 -a 485 881 5 -a 485 929 5 -a 485 777 10 -a 485 352 5 -a 485 255 9 -a 485 698 1 -a 485 823 3 -a 485 161 10 -a 485 216 8 -a 485 7 4 -a 485 196 4 -a 485 134 3 -a 485 404 10 -a 485 508 9 -a 485 551 1 -a 485 635 2 -a 485 738 9 -a 485 671 2 -a 485 600 7 -a 485 195 7 -a 485 688 2 -a 485 848 8 -a 485 224 1 -a 485 155 8 -a 485 788 5 -a 485 619 5 -a 485 850 1 -a 485 724 1 -a 485 144 2 -a 485 356 4 -a 485 391 10 -a 485 261 4 -a 485 143 7 -a 485 351 1 -a 485 515 5 -a 485 841 7 -a 485 150 5 -a 485 675 9 -a 485 32 6 -a 485 156 9 -a 485 870 6 -a 485 165 8 -a 485 559 4 -a 485 353 10 -a 485 716 4 -a 485 170 8 -a 485 66 4 -a 485 362 4 -a 485 769 7 -a 485 261 6 -a 485 26 2 -a 485 592 3 -a 485 484 5 -a 485 180 7 -a 485 355 3 -a 485 79 10 -a 486 5 7 -a 486 54 2 -a 486 222 9 -a 486 360 2 -a 486 444 2 -a 486 222 1 -a 486 620 9 -a 486 586 5 -a 486 572 5 -a 486 110 6 -a 486 402 5 -a 486 721 7 -a 486 785 7 -a 486 434 4 -a 486 877 5 -a 486 630 2 -a 486 598 6 -a 486 411 10 -a 486 983 5 -a 486 289 9 -a 486 580 3 -a 486 24 7 -a 486 651 2 -a 486 324 8 -a 486 284 3 -a 486 676 7 -a 486 915 9 -a 486 768 2 -a 486 855 9 -a 486 245 4 -a 486 846 2 -a 486 859 4 -a 486 298 9 -a 486 43 3 -a 486 194 9 -a 486 741 2 -a 486 264 5 -a 486 814 3 -a 486 303 9 -a 486 836 1 -a 486 923 7 -a 486 704 3 -a 486 532 9 -a 486 683 8 -a 486 113 1 -a 486 384 7 -a 486 289 10 -a 486 711 1 -a 486 795 9 -a 486 247 2 -a 486 999 2 -a 486 350 10 -a 486 270 4 -a 486 625 5 -a 486 674 2 -a 486 554 9 -a 486 276 8 -a 486 564 4 -a 486 297 6 -a 486 106 6 -a 486 809 4 -a 486 118 2 -a 486 964 4 -a 486 82 9 -a 486 160 10 -a 486 134 1 -a 486 823 1 -a 486 424 1 -a 486 947 7 -a 486 101 5 -a 486 235 8 -a 486 845 1 -a 486 804 9 -a 486 766 9 -a 486 504 10 -a 486 917 5 -a 486 126 6 -a 486 792 1 -a 486 603 1 -a 486 920 3 -a 486 14 6 -a 486 577 2 -a 486 245 7 -a 486 283 3 -a 486 178 10 -a 486 918 9 -a 486 836 2 -a 486 453 1 -a 486 458 6 -a 486 108 10 -a 486 559 3 -a 486 242 5 -a 486 225 6 -a 486 498 6 -a 486 323 8 -a 486 385 5 -a 486 631 8 -a 486 121 8 -a 486 808 5 -a 486 553 3 -a 486 221 7 -a 486 18 3 -a 487 374 5 -a 487 1 2 -a 487 783 10 -a 487 877 10 -a 487 917 7 -a 487 908 10 -a 487 644 8 -a 487 495 9 -a 487 803 2 -a 487 657 6 -a 487 47 3 -a 487 24 8 -a 487 939 10 -a 487 224 2 -a 487 941 10 -a 487 751 3 -a 487 677 6 -a 487 374 4 -a 487 858 10 -a 487 211 5 -a 487 615 8 -a 487 59 8 -a 487 708 7 -a 487 938 8 -a 487 443 8 -a 487 315 3 -a 487 34 1 -a 487 226 10 -a 487 867 7 -a 487 255 1 -a 487 243 3 -a 487 216 10 -a 487 255 4 -a 487 1 7 -a 487 68 8 -a 487 147 9 -a 487 909 6 -a 487 711 9 -a 487 641 10 -a 487 687 8 -a 487 343 8 -a 487 687 5 -a 487 710 2 -a 487 258 6 -a 487 911 7 -a 487 627 6 -a 487 563 1 -a 487 1000 6 -a 487 841 4 -a 487 773 1 -a 487 591 4 -a 487 899 1 -a 487 456 1 -a 487 504 5 -a 487 317 10 -a 487 770 10 -a 487 537 8 -a 487 542 7 -a 487 613 2 -a 487 791 1 -a 487 784 8 -a 487 828 10 -a 487 21 7 -a 487 785 7 -a 487 896 10 -a 487 167 2 -a 487 669 7 -a 487 582 5 -a 487 807 2 -a 487 331 8 -a 487 925 10 -a 487 470 4 -a 487 17 10 -a 487 158 8 -a 487 356 3 -a 487 643 1 -a 487 141 3 -a 487 918 10 -a 487 618 3 -a 487 981 4 -a 487 666 7 -a 487 184 1 -a 487 856 3 -a 487 97 10 -a 487 687 1 -a 487 148 2 -a 487 867 5 -a 487 200 8 -a 487 690 2 -a 487 455 9 -a 487 990 4 -a 487 449 4 -a 487 258 7 -a 487 209 4 -a 487 129 10 -a 487 153 9 -a 487 877 6 -a 487 711 7 -a 487 960 7 -a 487 184 2 -a 488 611 8 -a 488 405 3 -a 488 200 4 -a 488 768 4 -a 488 760 2 -a 488 842 1 -a 488 908 8 -a 488 653 2 -a 488 435 7 -a 488 864 8 -a 488 294 10 -a 488 619 3 -a 488 695 5 -a 488 390 9 -a 488 281 8 -a 488 843 5 -a 488 232 8 -a 488 480 1 -a 488 508 1 -a 488 686 10 -a 488 446 7 -a 488 956 1 -a 488 944 7 -a 488 432 7 -a 488 141 3 -a 488 48 10 -a 488 584 10 -a 488 758 10 -a 488 519 5 -a 488 176 8 -a 488 344 4 -a 488 923 9 -a 488 375 3 -a 488 87 10 -a 488 658 10 -a 488 192 5 -a 488 994 9 -a 488 286 2 -a 488 627 4 -a 488 834 9 -a 488 579 8 -a 488 221 2 -a 488 504 4 -a 488 969 8 -a 488 501 4 -a 488 322 8 -a 488 176 6 -a 488 981 3 -a 488 829 3 -a 488 862 4 -a 488 402 3 -a 488 761 8 -a 488 781 6 -a 488 833 2 -a 488 901 9 -a 488 828 10 -a 488 392 10 -a 488 893 10 -a 488 562 3 -a 488 911 2 -a 488 45 7 -a 488 905 3 -a 488 809 5 -a 488 419 8 -a 488 992 1 -a 488 443 1 -a 488 611 6 -a 488 961 3 -a 488 728 10 -a 488 213 8 -a 488 770 4 -a 488 283 5 -a 488 433 3 -a 488 250 6 -a 488 227 5 -a 488 933 9 -a 488 571 1 -a 488 402 1 -a 488 889 9 -a 488 376 3 -a 488 239 3 -a 488 266 8 -a 488 112 2 -a 488 74 8 -a 488 823 5 -a 488 466 3 -a 488 880 4 -a 488 360 1 -a 488 352 1 -a 488 924 3 -a 488 240 6 -a 488 136 4 -a 488 319 4 -a 488 207 1 -a 488 578 7 -a 489 929 5 -a 489 144 5 -a 489 282 2 -a 489 117 4 -a 489 913 6 -a 489 564 3 -a 489 549 7 -a 489 138 9 -a 489 790 10 -a 489 457 9 -a 489 709 9 -a 489 167 2 -a 489 322 2 -a 489 60 6 -a 489 406 6 -a 489 587 10 -a 489 171 7 -a 489 400 7 -a 489 661 8 -a 489 158 4 -a 489 198 4 -a 489 102 1 -a 489 13 9 -a 489 557 6 -a 489 453 8 -a 489 937 6 -a 489 797 6 -a 489 588 7 -a 489 231 7 -a 489 142 2 -a 489 135 6 -a 489 122 2 -a 489 423 8 -a 489 251 5 -a 489 11 9 -a 489 986 2 -a 489 799 3 -a 489 148 10 -a 489 751 2 -a 489 231 7 -a 489 856 1 -a 489 917 4 -a 489 552 6 -a 489 915 10 -a 489 298 10 -a 489 115 7 -a 489 61 6 -a 489 698 4 -a 489 775 10 -a 489 218 8 -a 489 895 9 -a 489 876 2 -a 489 231 6 -a 489 428 6 -a 489 304 3 -a 489 143 3 -a 489 200 1 -a 489 891 1 -a 489 373 8 -a 489 178 10 -a 489 8 5 -a 489 507 9 -a 489 300 10 -a 489 430 8 -a 489 757 7 -a 489 310 2 -a 489 391 6 -a 489 531 1 -a 489 457 5 -a 489 117 9 -a 489 761 10 -a 489 289 4 -a 489 10 8 -a 489 289 1 -a 489 179 6 -a 489 307 5 -a 489 403 8 -a 489 240 6 -a 489 153 7 -a 489 457 1 -a 489 875 6 -a 489 4 9 -a 489 687 5 -a 489 278 2 -a 489 307 4 -a 489 829 3 -a 489 477 9 -a 489 173 3 -a 489 177 2 -a 489 654 1 -a 489 181 5 -a 489 683 4 -a 489 953 8 -a 489 610 5 -a 489 415 3 -a 489 238 4 -a 489 945 10 -a 489 695 7 -a 489 93 2 -a 489 682 2 -a 489 983 8 -a 490 102 6 -a 490 970 8 -a 490 137 7 -a 490 409 1 -a 490 348 4 -a 490 376 7 -a 490 388 6 -a 490 500 7 -a 490 833 2 -a 490 238 9 -a 490 503 5 -a 490 495 1 -a 490 515 7 -a 490 809 4 -a 490 300 9 -a 490 991 5 -a 490 981 10 -a 490 476 9 -a 490 621 4 -a 490 137 1 -a 490 135 5 -a 490 549 9 -a 490 747 8 -a 490 549 8 -a 490 787 7 -a 490 723 6 -a 490 470 9 -a 490 457 4 -a 490 815 4 -a 490 127 10 -a 490 415 1 -a 490 917 10 -a 490 72 1 -a 490 551 3 -a 490 301 2 -a 490 419 7 -a 490 927 2 -a 490 688 10 -a 490 918 5 -a 490 735 2 -a 490 926 9 -a 490 396 3 -a 490 205 7 -a 490 416 5 -a 490 180 3 -a 490 504 2 -a 490 383 9 -a 490 136 7 -a 490 980 5 -a 490 273 10 -a 490 90 4 -a 490 527 3 -a 490 638 4 -a 490 289 2 -a 490 717 5 -a 490 83 9 -a 490 745 6 -a 490 507 8 -a 490 209 6 -a 490 135 9 -a 490 399 3 -a 490 280 3 -a 490 686 2 -a 490 699 9 -a 490 698 4 -a 490 588 10 -a 490 363 8 -a 490 591 4 -a 490 298 4 -a 490 264 10 -a 490 986 3 -a 490 502 2 -a 490 679 1 -a 490 141 4 -a 490 37 4 -a 490 277 9 -a 490 961 6 -a 490 15 1 -a 490 549 3 -a 490 26 6 -a 490 542 1 -a 490 543 4 -a 490 663 9 -a 490 830 7 -a 490 235 2 -a 490 746 6 -a 490 551 2 -a 490 741 2 -a 490 954 9 -a 490 685 5 -a 490 116 2 -a 491 210 8 -a 491 346 1 -a 491 814 9 -a 491 907 4 -a 491 933 7 -a 491 152 10 -a 491 474 10 -a 491 206 4 -a 491 415 10 -a 491 435 10 -a 491 708 7 -a 491 70 6 -a 491 576 3 -a 491 689 4 -a 491 106 3 -a 491 852 2 -a 491 625 5 -a 491 121 6 -a 491 376 6 -a 491 650 7 -a 491 662 7 -a 491 918 2 -a 491 288 7 -a 491 467 1 -a 491 128 10 -a 491 9 6 -a 491 868 6 -a 491 963 2 -a 491 678 5 -a 491 983 4 -a 491 148 7 -a 491 773 4 -a 491 30 8 -a 491 932 9 -a 491 924 10 -a 491 503 10 -a 491 113 9 -a 491 315 10 -a 491 938 2 -a 491 820 8 -a 491 384 1 -a 491 489 6 -a 491 484 7 -a 491 489 6 -a 491 316 6 -a 491 84 10 -a 491 609 6 -a 491 691 4 -a 491 733 10 -a 491 246 3 -a 491 584 2 -a 491 713 10 -a 491 711 10 -a 491 5 8 -a 491 705 6 -a 491 554 3 -a 491 967 9 -a 491 358 2 -a 491 513 9 -a 491 90 9 -a 491 357 7 -a 491 261 7 -a 491 120 2 -a 491 264 5 -a 491 160 6 -a 491 622 7 -a 491 376 1 -a 491 474 10 -a 491 535 7 -a 491 172 1 -a 491 857 8 -a 491 655 9 -a 491 322 1 -a 491 314 10 -a 491 739 4 -a 491 930 10 -a 491 447 3 -a 491 152 6 -a 491 563 4 -a 491 443 7 -a 491 864 3 -a 491 249 10 -a 491 448 5 -a 491 544 5 -a 491 803 7 -a 491 390 8 -a 491 902 3 -a 491 291 5 -a 491 480 3 -a 491 234 7 -a 491 551 3 -a 491 599 6 -a 491 497 8 -a 491 710 6 -a 492 196 10 -a 492 872 9 -a 492 160 4 -a 492 731 3 -a 492 19 5 -a 492 729 7 -a 492 674 1 -a 492 313 10 -a 492 19 5 -a 492 388 2 -a 492 219 1 -a 492 834 7 -a 492 370 7 -a 492 561 10 -a 492 253 3 -a 492 209 6 -a 492 809 8 -a 492 700 8 -a 492 752 5 -a 492 587 1 -a 492 65 5 -a 492 629 2 -a 492 877 1 -a 492 544 10 -a 492 862 9 -a 492 403 7 -a 492 118 9 -a 492 334 4 -a 492 89 3 -a 492 314 5 -a 492 182 4 -a 492 248 8 -a 492 20 3 -a 492 200 10 -a 492 239 7 -a 492 748 5 -a 492 873 3 -a 492 552 4 -a 492 766 3 -a 492 236 4 -a 492 770 5 -a 492 764 7 -a 492 46 7 -a 492 115 4 -a 492 300 10 -a 492 298 9 -a 492 323 10 -a 492 84 2 -a 492 997 5 -a 492 50 4 -a 492 671 9 -a 492 37 7 -a 492 679 2 -a 492 523 10 -a 492 581 9 -a 492 516 5 -a 492 926 1 -a 492 698 1 -a 492 850 8 -a 492 7 8 -a 492 237 7 -a 492 6 5 -a 492 206 4 -a 492 475 3 -a 492 754 8 -a 492 55 2 -a 492 2 10 -a 492 495 2 -a 492 290 5 -a 492 771 9 -a 492 234 2 -a 492 335 9 -a 492 885 3 -a 492 533 8 -a 492 632 7 -a 492 183 4 -a 492 617 4 -a 492 604 2 -a 492 233 3 -a 492 263 2 -a 492 641 4 -a 492 911 1 -a 492 785 1 -a 492 197 4 -a 492 402 2 -a 492 686 8 -a 492 894 3 -a 492 227 9 -a 492 675 7 -a 492 881 2 -a 492 233 9 -a 492 911 1 -a 493 886 1 -a 493 439 4 -a 493 362 10 -a 493 615 1 -a 493 493 5 -a 493 363 6 -a 493 86 1 -a 493 782 5 -a 493 110 6 -a 493 319 8 -a 493 93 5 -a 493 994 2 -a 493 852 2 -a 493 724 3 -a 493 153 7 -a 493 444 2 -a 493 304 3 -a 493 385 2 -a 493 706 6 -a 493 944 10 -a 493 271 10 -a 493 466 7 -a 493 116 2 -a 493 672 7 -a 493 128 2 -a 493 899 7 -a 493 802 10 -a 493 865 9 -a 493 107 9 -a 493 689 7 -a 493 727 2 -a 493 545 3 -a 493 26 1 -a 493 317 5 -a 493 13 10 -a 493 388 7 -a 493 402 2 -a 493 795 7 -a 493 497 10 -a 493 721 4 -a 493 887 8 -a 493 467 7 -a 493 548 2 -a 493 586 9 -a 493 619 2 -a 493 991 1 -a 493 889 10 -a 493 672 10 -a 493 808 9 -a 493 249 10 -a 493 113 10 -a 493 923 5 -a 493 920 8 -a 493 240 3 -a 493 908 7 -a 493 794 2 -a 493 18 6 -a 493 748 5 -a 493 901 8 -a 493 706 3 -a 493 450 7 -a 493 421 10 -a 493 731 2 -a 493 767 8 -a 493 434 5 -a 493 94 1 -a 493 144 7 -a 493 204 5 -a 493 591 10 -a 493 864 1 -a 493 66 3 -a 493 33 3 -a 493 387 1 -a 493 651 3 -a 493 651 9 -a 493 353 7 -a 493 516 1 -a 493 629 6 -a 493 299 5 -a 493 877 6 -a 493 113 3 -a 493 198 7 -a 493 772 8 -a 493 352 4 -a 493 81 9 -a 493 542 5 -a 493 369 2 -a 493 828 7 -a 493 418 4 -a 494 50 10 -a 494 254 2 -a 494 838 5 -a 494 780 2 -a 494 247 2 -a 494 874 2 -a 494 139 1 -a 494 450 6 -a 494 440 3 -a 494 515 3 -a 494 472 8 -a 494 365 9 -a 494 142 3 -a 494 98 1 -a 494 718 2 -a 494 657 2 -a 494 726 9 -a 494 717 6 -a 494 955 10 -a 494 578 6 -a 494 829 4 -a 494 128 6 -a 494 325 8 -a 494 157 3 -a 494 208 8 -a 494 866 10 -a 494 525 2 -a 494 12 4 -a 494 259 10 -a 494 575 6 -a 494 265 8 -a 494 73 3 -a 494 330 7 -a 494 260 9 -a 494 319 9 -a 494 179 6 -a 494 398 5 -a 494 769 4 -a 494 618 3 -a 494 376 4 -a 494 259 2 -a 494 65 10 -a 494 741 6 -a 494 400 2 -a 494 162 5 -a 494 434 8 -a 494 32 7 -a 494 887 3 -a 494 126 2 -a 494 987 1 -a 494 440 7 -a 494 955 6 -a 494 90 8 -a 494 765 8 -a 494 87 3 -a 494 298 1 -a 494 606 2 -a 494 611 8 -a 494 309 5 -a 494 865 7 -a 494 161 3 -a 494 573 1 -a 494 937 8 -a 494 491 2 -a 494 832 2 -a 494 231 3 -a 494 669 4 -a 494 205 3 -a 494 999 7 -a 494 263 4 -a 494 581 4 -a 494 234 9 -a 494 327 7 -a 494 297 8 -a 494 633 7 -a 494 489 5 -a 494 730 8 -a 494 665 2 -a 494 351 10 -a 494 855 2 -a 494 627 8 -a 494 791 9 -a 494 785 10 -a 494 716 2 -a 494 531 10 -a 494 871 4 -a 494 112 6 -a 494 458 1 -a 494 297 5 -a 494 976 2 -a 494 618 1 -a 494 869 5 -a 494 888 10 -a 494 84 7 -a 494 676 9 -a 494 95 1 -a 494 753 8 -a 494 881 3 -a 494 69 10 -a 494 437 5 -a 494 302 9 -a 494 317 8 -a 494 733 4 -a 494 935 3 -a 494 805 7 -a 494 438 8 -a 495 575 8 -a 495 132 5 -a 495 268 5 -a 495 177 10 -a 495 922 2 -a 495 29 3 -a 495 892 6 -a 495 428 4 -a 495 899 2 -a 495 881 10 -a 495 539 3 -a 495 332 6 -a 495 153 1 -a 495 491 5 -a 495 950 1 -a 495 354 4 -a 495 9 7 -a 495 673 9 -a 495 448 2 -a 495 761 10 -a 495 529 9 -a 495 517 2 -a 495 751 6 -a 495 965 9 -a 495 818 3 -a 495 44 2 -a 495 673 1 -a 495 728 10 -a 495 848 4 -a 495 86 7 -a 495 278 9 -a 495 979 3 -a 495 354 10 -a 495 454 9 -a 495 876 6 -a 495 382 5 -a 495 322 5 -a 495 279 9 -a 495 256 2 -a 495 178 1 -a 495 818 5 -a 495 588 4 -a 495 330 4 -a 495 284 6 -a 495 513 7 -a 495 327 6 -a 495 637 7 -a 495 521 1 -a 495 1000 9 -a 495 61 1 -a 495 258 4 -a 495 504 10 -a 495 577 4 -a 495 445 3 -a 495 370 2 -a 495 27 1 -a 495 93 1 -a 495 74 6 -a 495 875 7 -a 495 179 4 -a 495 351 6 -a 495 829 7 -a 495 532 6 -a 495 805 3 -a 495 681 3 -a 495 913 6 -a 495 102 3 -a 495 959 5 -a 495 144 6 -a 495 279 3 -a 495 752 1 -a 495 731 2 -a 495 608 1 -a 495 11 3 -a 495 219 4 -a 495 935 2 -a 495 648 10 -a 495 740 6 -a 495 910 8 -a 495 708 6 -a 495 997 8 -a 495 389 4 -a 495 260 8 -a 495 980 10 -a 495 833 9 -a 495 629 3 -a 495 926 8 -a 495 702 9 -a 495 857 4 -a 495 80 3 -a 495 29 4 -a 495 661 5 -a 495 611 4 -a 495 833 2 -a 495 317 4 -a 495 499 5 -a 495 934 4 -a 495 252 7 -a 495 642 4 -a 495 188 5 -a 495 349 1 -a 495 795 1 -a 495 567 10 -a 495 705 9 -a 496 637 6 -a 496 282 5 -a 496 590 7 -a 496 320 8 -a 496 254 8 -a 496 979 6 -a 496 579 2 -a 496 210 8 -a 496 787 5 -a 496 183 10 -a 496 192 8 -a 496 688 6 -a 496 885 3 -a 496 24 6 -a 496 767 5 -a 496 913 8 -a 496 684 1 -a 496 353 1 -a 496 721 5 -a 496 851 9 -a 496 630 4 -a 496 228 7 -a 496 469 1 -a 496 817 7 -a 496 206 5 -a 496 817 2 -a 496 587 1 -a 496 195 6 -a 496 359 10 -a 496 268 9 -a 496 831 5 -a 496 641 8 -a 496 857 9 -a 496 126 2 -a 496 894 8 -a 496 811 4 -a 496 704 3 -a 496 79 7 -a 496 574 7 -a 496 887 7 -a 496 270 2 -a 496 237 6 -a 496 747 10 -a 496 293 10 -a 496 635 1 -a 496 977 2 -a 496 332 2 -a 496 331 2 -a 496 953 10 -a 496 159 8 -a 496 960 2 -a 496 156 5 -a 496 627 9 -a 496 752 1 -a 496 361 6 -a 496 419 4 -a 496 314 5 -a 496 556 8 -a 496 777 10 -a 496 581 4 -a 496 362 7 -a 496 393 3 -a 496 414 4 -a 496 488 8 -a 496 263 9 -a 496 200 2 -a 496 167 4 -a 496 341 6 -a 496 773 8 -a 496 29 1 -a 496 611 7 -a 496 775 2 -a 496 903 8 -a 496 989 2 -a 496 385 3 -a 496 855 1 -a 496 296 8 -a 496 715 2 -a 496 783 1 -a 496 454 6 -a 496 650 8 -a 496 938 5 -a 496 56 9 -a 496 377 5 -a 496 275 8 -a 496 474 3 -a 496 691 10 -a 496 830 4 -a 496 227 9 -a 496 247 3 -a 496 167 7 -a 496 619 8 -a 496 660 6 -a 496 654 7 -a 496 881 7 -a 496 860 9 -a 496 821 9 -a 496 198 1 -a 496 608 4 -a 496 849 1 -a 496 808 2 -a 496 593 4 -a 496 600 7 -a 496 686 9 -a 496 557 6 -a 496 984 3 -a 496 517 5 -a 496 853 1 -a 496 675 8 -a 496 275 1 -a 496 282 4 -a 496 300 8 -a 496 189 10 -a 496 338 5 -a 496 677 2 -a 496 463 6 -a 496 811 9 -a 497 343 9 -a 497 268 4 -a 497 13 4 -a 497 589 8 -a 497 434 2 -a 497 632 2 -a 497 225 3 -a 497 64 10 -a 497 488 8 -a 497 60 6 -a 497 884 3 -a 497 685 7 -a 497 667 2 -a 497 708 1 -a 497 468 10 -a 497 236 2 -a 497 283 10 -a 497 130 6 -a 497 792 1 -a 497 243 3 -a 497 646 9 -a 497 620 4 -a 497 917 6 -a 497 920 7 -a 497 902 1 -a 497 192 5 -a 497 84 2 -a 497 215 3 -a 497 868 10 -a 497 546 8 -a 497 1 4 -a 497 186 10 -a 497 813 5 -a 497 14 1 -a 497 775 4 -a 497 223 6 -a 497 645 5 -a 497 999 3 -a 497 286 7 -a 497 108 4 -a 497 34 8 -a 497 145 3 -a 497 793 4 -a 497 700 8 -a 497 852 10 -a 497 236 3 -a 497 935 3 -a 497 111 5 -a 497 365 2 -a 497 703 8 -a 497 353 6 -a 497 298 6 -a 497 245 9 -a 497 906 9 -a 497 175 3 -a 497 436 7 -a 497 989 2 -a 497 389 5 -a 497 280 4 -a 497 511 2 -a 497 390 10 -a 497 465 8 -a 497 299 2 -a 497 403 1 -a 497 215 2 -a 497 521 5 -a 497 23 6 -a 497 189 5 -a 497 806 3 -a 497 130 6 -a 497 222 8 -a 497 950 3 -a 497 922 9 -a 497 922 7 -a 497 778 2 -a 497 134 8 -a 497 832 1 -a 497 888 10 -a 497 498 7 -a 497 510 8 -a 497 216 8 -a 497 484 8 -a 497 808 8 -a 497 460 9 -a 497 365 3 -a 497 982 2 -a 497 895 1 -a 497 329 8 -a 497 347 6 -a 497 150 5 -a 497 839 7 -a 497 736 1 -a 497 615 3 -a 497 114 4 -a 497 114 3 -a 497 829 3 -a 497 634 10 -a 497 136 5 -a 497 416 10 -a 497 265 2 -a 497 215 6 -a 497 341 4 -a 497 163 1 -a 497 112 3 -a 497 94 6 -a 497 296 4 -a 497 944 6 -a 497 981 2 -a 497 793 1 -a 497 429 8 -a 497 172 6 -a 497 252 1 -a 497 212 9 -a 497 631 6 -a 497 616 7 -a 497 170 10 -a 497 502 9 -a 497 945 8 -a 497 516 6 -a 497 651 1 -a 498 759 6 -a 498 227 1 -a 498 241 9 -a 498 872 3 -a 498 340 8 -a 498 46 3 -a 498 482 4 -a 498 475 2 -a 498 39 7 -a 498 897 6 -a 498 739 2 -a 498 253 4 -a 498 213 10 -a 498 901 8 -a 498 365 2 -a 498 307 3 -a 498 172 10 -a 498 284 3 -a 498 263 7 -a 498 965 8 -a 498 712 8 -a 498 435 7 -a 498 192 3 -a 498 924 9 -a 498 41 2 -a 498 808 7 -a 498 69 3 -a 498 542 4 -a 498 728 9 -a 498 584 9 -a 498 169 2 -a 498 462 8 -a 498 810 6 -a 498 409 7 -a 498 310 8 -a 498 125 7 -a 498 454 6 -a 498 791 10 -a 498 599 5 -a 498 492 5 -a 498 663 3 -a 498 313 7 -a 498 745 6 -a 498 875 7 -a 498 190 4 -a 498 85 8 -a 498 157 10 -a 498 361 6 -a 498 368 3 -a 498 420 3 -a 498 301 10 -a 498 55 2 -a 498 854 5 -a 498 493 9 -a 498 978 6 -a 498 894 5 -a 498 276 10 -a 498 22 9 -a 498 412 2 -a 498 605 10 -a 498 580 7 -a 498 440 5 -a 498 390 6 -a 498 988 6 -a 498 749 3 -a 498 514 7 -a 498 418 3 -a 498 515 8 -a 498 88 9 -a 498 909 1 -a 498 153 10 -a 498 401 3 -a 498 629 7 -a 498 4 10 -a 498 590 4 -a 498 713 2 -a 498 160 1 -a 498 950 6 -a 498 56 8 -a 498 579 5 -a 498 227 6 -a 498 111 4 -a 498 408 3 -a 498 719 1 -a 498 64 2 -a 498 278 6 -a 498 994 4 -a 498 86 5 -a 498 689 8 -a 498 972 8 -a 498 690 5 -a 498 244 2 -a 498 387 5 -a 498 56 3 -a 498 207 6 -a 498 112 9 -a 498 569 3 -a 498 624 8 -a 498 626 5 -a 498 657 1 -a 498 509 2 -a 498 779 1 -a 498 33 6 -a 498 113 1 -a 499 782 8 -a 499 622 4 -a 499 826 1 -a 499 941 3 -a 499 547 5 -a 499 881 6 -a 499 496 4 -a 499 773 7 -a 499 991 4 -a 499 903 4 -a 499 467 2 -a 499 31 3 -a 499 156 6 -a 499 436 3 -a 499 116 4 -a 499 844 8 -a 499 383 9 -a 499 805 8 -a 499 63 8 -a 499 770 9 -a 499 860 5 -a 499 270 7 -a 499 881 7 -a 499 405 2 -a 499 893 3 -a 499 482 4 -a 499 37 6 -a 499 377 10 -a 499 236 4 -a 499 69 9 -a 499 490 2 -a 499 690 10 -a 499 291 8 -a 499 934 4 -a 499 212 8 -a 499 147 6 -a 499 405 3 -a 499 985 9 -a 499 114 2 -a 499 283 2 -a 499 427 3 -a 499 144 10 -a 499 439 6 -a 499 863 9 -a 499 259 5 -a 499 258 5 -a 499 221 3 -a 499 39 4 -a 499 321 1 -a 499 990 6 -a 499 899 7 -a 499 590 6 -a 499 846 10 -a 499 279 7 -a 499 458 2 -a 499 304 3 -a 499 315 1 -a 499 835 10 -a 499 539 5 -a 499 383 7 -a 499 300 6 -a 499 532 2 -a 499 48 10 -a 499 590 6 -a 499 441 9 -a 499 259 2 -a 499 736 2 -a 499 845 9 -a 499 219 10 -a 499 849 4 -a 499 103 6 -a 499 646 1 -a 499 992 3 -a 499 541 9 -a 499 484 4 -a 499 226 3 -a 499 799 2 -a 499 704 6 -a 499 265 9 -a 499 95 10 -a 499 670 10 -a 499 139 9 -a 499 684 7 -a 499 491 5 -a 499 417 8 -a 499 117 3 -a 499 794 6 -a 499 731 7 -a 499 951 5 -a 499 309 5 -a 499 89 3 -a 499 226 2 -a 499 840 8 -a 499 136 10 -a 499 815 3 -a 499 256 2 -a 499 394 6 -a 499 527 4 -a 500 76 4 -a 500 613 10 -a 500 351 9 -a 500 178 2 -a 500 234 5 -a 500 319 5 -a 500 719 9 -a 500 717 4 -a 500 544 10 -a 500 493 7 -a 500 396 6 -a 500 808 4 -a 500 587 5 -a 500 41 2 -a 500 946 6 -a 500 246 5 -a 500 532 8 -a 500 338 4 -a 500 362 8 -a 500 301 5 -a 500 44 9 -a 500 289 9 -a 500 609 8 -a 500 132 7 -a 500 514 7 -a 500 424 3 -a 500 267 5 -a 500 305 8 -a 500 679 1 -a 500 661 9 -a 500 831 9 -a 500 754 6 -a 500 249 3 -a 500 157 10 -a 500 932 6 -a 500 482 10 -a 500 475 9 -a 500 626 4 -a 500 174 6 -a 500 94 8 -a 500 569 3 -a 500 802 4 -a 500 680 2 -a 500 610 10 -a 500 724 6 -a 500 925 6 -a 500 117 6 -a 500 37 2 -a 500 262 6 -a 500 417 10 -a 500 81 6 -a 500 550 7 -a 500 2 9 -a 500 212 8 -a 500 40 1 -a 500 425 7 -a 500 479 2 -a 500 344 6 -a 500 80 3 -a 500 115 7 -a 500 150 5 -a 500 833 7 -a 500 363 9 -a 500 306 10 -a 500 740 10 -a 500 844 3 -a 500 781 4 -a 500 341 8 -a 500 775 5 -a 500 434 2 -a 500 561 7 -a 500 552 5 -a 500 89 10 -a 500 146 5 -a 500 251 3 -a 500 262 10 -a 500 288 9 -a 500 251 9 -a 500 679 9 -a 500 368 4 -a 500 800 7 -a 500 680 10 -a 500 579 9 -a 500 839 3 -a 500 80 7 -a 500 33 9 -a 500 158 5 -a 500 159 8 -a 500 147 4 -a 500 307 8 -a 500 992 5 -a 500 509 1 -a 500 613 6 -a 501 707 5 -a 501 328 8 -a 501 369 8 -a 501 24 5 -a 501 320 3 -a 501 119 4 -a 501 457 2 -a 501 881 7 -a 501 670 3 -a 501 546 10 -a 501 2 1 -a 501 921 7 -a 501 534 4 -a 501 264 8 -a 501 184 8 -a 501 784 9 -a 501 942 6 -a 501 551 8 -a 501 560 4 -a 501 597 3 -a 501 105 3 -a 501 374 7 -a 501 676 4 -a 501 138 4 -a 501 532 6 -a 501 835 1 -a 501 284 7 -a 501 838 7 -a 501 802 2 -a 501 793 10 -a 501 426 8 -a 501 484 5 -a 501 96 3 -a 501 794 5 -a 501 507 1 -a 501 416 4 -a 501 912 8 -a 501 964 1 -a 501 272 3 -a 501 558 6 -a 501 485 1 -a 501 273 4 -a 501 454 10 -a 501 536 8 -a 501 637 4 -a 501 778 4 -a 501 453 5 -a 501 163 1 -a 501 313 2 -a 501 25 1 -a 501 267 1 -a 501 686 8 -a 501 701 1 -a 501 404 2 -a 501 193 3 -a 501 511 3 -a 501 688 2 -a 501 7 6 -a 501 288 9 -a 501 456 6 -a 501 432 6 -a 501 771 10 -a 501 551 9 -a 501 202 6 -a 501 254 10 -a 501 966 6 -a 501 89 10 -a 501 193 2 -a 501 213 8 -a 501 646 10 -a 501 677 2 -a 501 486 3 -a 501 75 1 -a 501 670 2 -a 501 711 3 -a 501 423 2 -a 501 450 5 -a 501 873 10 -a 501 735 3 -a 501 474 10 -a 501 116 3 -a 501 397 1 -a 501 150 9 -a 501 519 8 -a 501 589 6 -a 501 660 7 -a 501 182 1 -a 501 595 4 -a 501 947 3 -a 501 637 8 -a 501 3 9 -a 501 694 1 -a 501 164 10 -a 501 204 3 -a 501 947 10 -a 501 105 5 -a 501 292 10 -a 501 115 4 -a 501 318 10 -a 501 938 5 -a 501 791 3 -a 501 803 7 -a 501 436 10 -a 501 799 5 -a 501 699 7 -a 501 859 2 -a 501 224 8 -a 501 547 10 -a 501 569 9 -a 502 698 2 -a 502 662 4 -a 502 965 4 -a 502 847 2 -a 502 157 7 -a 502 530 8 -a 502 483 5 -a 502 338 4 -a 502 100 3 -a 502 405 10 -a 502 975 9 -a 502 102 4 -a 502 74 10 -a 502 114 1 -a 502 305 5 -a 502 218 7 -a 502 597 3 -a 502 110 8 -a 502 535 4 -a 502 510 7 -a 502 900 10 -a 502 313 1 -a 502 497 4 -a 502 312 8 -a 502 88 7 -a 502 171 8 -a 502 146 5 -a 502 311 8 -a 502 718 7 -a 502 714 8 -a 502 355 7 -a 502 655 6 -a 502 831 1 -a 502 511 9 -a 502 160 8 -a 502 289 8 -a 502 849 8 -a 502 259 3 -a 502 693 2 -a 502 799 9 -a 502 361 4 -a 502 767 1 -a 502 912 2 -a 502 665 10 -a 502 762 10 -a 502 105 2 -a 502 237 6 -a 502 872 9 -a 502 640 5 -a 502 746 4 -a 502 747 1 -a 502 952 10 -a 502 219 8 -a 502 34 2 -a 502 15 8 -a 502 389 7 -a 502 179 8 -a 502 326 7 -a 502 82 2 -a 502 893 1 -a 502 309 1 -a 502 437 9 -a 502 523 2 -a 502 115 9 -a 502 947 2 -a 502 682 1 -a 502 403 1 -a 502 771 9 -a 502 940 3 -a 502 72 6 -a 502 545 5 -a 502 276 4 -a 502 838 4 -a 502 432 4 -a 502 941 8 -a 502 575 5 -a 502 537 1 -a 502 153 8 -a 502 422 5 -a 502 152 1 -a 502 899 3 -a 502 145 9 -a 502 79 2 -a 502 93 2 -a 502 178 9 -a 502 94 8 -a 502 481 6 -a 502 357 5 -a 502 419 8 -a 502 563 10 -a 502 225 6 -a 502 727 6 -a 502 999 3 -a 502 747 9 -a 502 842 9 -a 502 921 6 -a 502 404 6 -a 502 220 8 -a 502 668 2 -a 503 319 4 -a 503 291 8 -a 503 188 4 -a 503 595 3 -a 503 104 6 -a 503 620 10 -a 503 511 7 -a 503 679 9 -a 503 132 2 -a 503 663 1 -a 503 76 7 -a 503 283 5 -a 503 537 3 -a 503 220 1 -a 503 361 8 -a 503 629 3 -a 503 398 10 -a 503 454 7 -a 503 86 7 -a 503 754 7 -a 503 872 4 -a 503 648 8 -a 503 978 7 -a 503 575 5 -a 503 622 10 -a 503 700 4 -a 503 392 1 -a 503 518 7 -a 503 79 7 -a 503 611 8 -a 503 161 2 -a 503 397 5 -a 503 902 1 -a 503 349 3 -a 503 991 9 -a 503 968 2 -a 503 477 6 -a 503 659 9 -a 503 75 7 -a 503 116 10 -a 503 735 4 -a 503 357 4 -a 503 652 6 -a 503 954 4 -a 503 717 9 -a 503 257 2 -a 503 327 1 -a 503 147 3 -a 503 342 3 -a 503 56 1 -a 503 989 4 -a 503 9 8 -a 503 568 2 -a 503 586 1 -a 503 708 3 -a 503 959 9 -a 503 79 6 -a 503 786 3 -a 503 546 2 -a 503 240 9 -a 503 159 2 -a 503 423 7 -a 503 588 9 -a 503 125 7 -a 503 403 10 -a 503 531 2 -a 503 602 8 -a 503 38 10 -a 503 605 4 -a 503 717 6 -a 503 772 3 -a 503 961 1 -a 503 344 6 -a 503 701 9 -a 503 653 7 -a 503 600 3 -a 503 4 9 -a 503 799 3 -a 503 941 5 -a 503 59 6 -a 503 793 1 -a 503 905 3 -a 503 68 2 -a 503 336 8 -a 503 466 6 -a 503 775 5 -a 503 271 1 -a 503 545 7 -a 503 537 10 -a 503 816 1 -a 503 784 6 -a 503 695 2 -a 503 214 2 -a 503 347 2 -a 503 819 10 -a 503 616 8 -a 503 877 8 -a 503 396 9 -a 504 653 7 -a 504 457 10 -a 504 88 9 -a 504 400 7 -a 504 393 8 -a 504 432 3 -a 504 77 3 -a 504 21 2 -a 504 7 8 -a 504 80 8 -a 504 820 3 -a 504 948 8 -a 504 138 9 -a 504 588 4 -a 504 828 9 -a 504 205 2 -a 504 923 3 -a 504 270 1 -a 504 980 10 -a 504 169 6 -a 504 814 3 -a 504 492 9 -a 504 984 3 -a 504 573 4 -a 504 162 7 -a 504 173 9 -a 504 919 9 -a 504 980 5 -a 504 789 7 -a 504 771 6 -a 504 352 8 -a 504 417 1 -a 504 203 5 -a 504 439 10 -a 504 817 8 -a 504 595 1 -a 504 870 1 -a 504 893 8 -a 504 615 8 -a 504 877 8 -a 504 972 9 -a 504 410 2 -a 504 800 10 -a 504 85 6 -a 504 997 7 -a 504 603 1 -a 504 290 4 -a 504 896 9 -a 504 872 8 -a 504 245 4 -a 504 40 1 -a 504 661 9 -a 504 736 4 -a 504 209 4 -a 504 897 6 -a 504 172 2 -a 504 103 10 -a 504 852 8 -a 504 960 10 -a 504 873 3 -a 504 179 8 -a 504 353 5 -a 504 51 8 -a 504 618 2 -a 504 145 4 -a 504 645 5 -a 504 463 6 -a 504 13 9 -a 504 236 9 -a 504 315 7 -a 504 984 4 -a 504 645 3 -a 504 90 4 -a 504 44 10 -a 504 618 2 -a 504 693 10 -a 504 333 2 -a 504 489 3 -a 504 540 9 -a 504 577 10 -a 504 528 1 -a 504 177 2 -a 504 288 2 -a 504 527 3 -a 504 385 5 -a 504 160 8 -a 504 699 1 -a 504 488 2 -a 504 634 9 -a 504 336 8 -a 504 166 3 -a 504 986 1 -a 504 387 7 -a 504 783 10 -a 504 106 10 -a 504 7 5 -a 504 222 8 -a 504 118 7 -a 504 242 1 -a 504 536 4 -a 504 77 1 -a 504 887 1 -a 504 626 4 -a 504 121 8 -a 504 480 4 -a 504 294 7 -a 504 453 4 -a 504 968 9 -a 504 833 8 -a 504 6 9 -a 504 471 7 -a 504 293 2 -a 504 998 2 -a 505 370 2 -a 505 453 9 -a 505 672 1 -a 505 857 1 -a 505 440 7 -a 505 281 3 -a 505 168 4 -a 505 605 3 -a 505 243 9 -a 505 554 6 -a 505 364 2 -a 505 348 7 -a 505 561 3 -a 505 585 10 -a 505 466 4 -a 505 802 10 -a 505 96 6 -a 505 542 4 -a 505 664 5 -a 505 721 7 -a 505 662 3 -a 505 119 4 -a 505 91 7 -a 505 62 2 -a 505 823 5 -a 505 96 10 -a 505 533 1 -a 505 807 4 -a 505 388 1 -a 505 506 3 -a 505 152 6 -a 505 840 5 -a 505 153 5 -a 505 255 4 -a 505 433 10 -a 505 152 9 -a 505 860 6 -a 505 675 4 -a 505 705 3 -a 505 199 8 -a 505 241 7 -a 505 783 6 -a 505 464 10 -a 505 19 10 -a 505 878 9 -a 505 682 1 -a 505 575 2 -a 505 643 1 -a 505 801 7 -a 505 564 6 -a 505 733 2 -a 505 862 9 -a 505 362 6 -a 505 828 9 -a 505 370 9 -a 505 145 7 -a 505 191 8 -a 505 875 3 -a 505 296 3 -a 505 7 1 -a 505 3 1 -a 505 280 8 -a 505 261 4 -a 505 436 3 -a 505 431 7 -a 505 96 10 -a 505 86 5 -a 505 111 3 -a 505 294 9 -a 505 84 9 -a 505 352 9 -a 505 52 9 -a 505 547 2 -a 505 370 10 -a 505 930 8 -a 505 528 5 -a 505 27 5 -a 505 480 8 -a 505 146 10 -a 505 827 10 -a 505 19 5 -a 505 878 6 -a 505 665 8 -a 505 381 8 -a 505 681 3 -a 505 10 8 -a 505 525 6 -a 505 871 4 -a 505 885 1 -a 505 820 10 -a 505 877 8 -a 505 887 2 -a 505 75 10 -a 505 114 9 -a 505 298 7 -a 505 505 10 -a 505 209 2 -a 505 384 9 -a 505 616 6 -a 505 503 3 -a 505 467 3 -a 505 967 1 -a 505 554 3 -a 505 312 3 -a 505 459 3 -a 505 517 6 -a 506 338 1 -a 506 938 9 -a 506 662 3 -a 506 141 10 -a 506 957 2 -a 506 515 8 -a 506 805 7 -a 506 313 10 -a 506 171 9 -a 506 814 9 -a 506 837 9 -a 506 17 5 -a 506 674 6 -a 506 632 9 -a 506 894 2 -a 506 537 9 -a 506 707 9 -a 506 834 6 -a 506 187 2 -a 506 191 8 -a 506 193 9 -a 506 802 6 -a 506 693 2 -a 506 660 2 -a 506 744 4 -a 506 223 1 -a 506 649 9 -a 506 31 5 -a 506 681 9 -a 506 141 4 -a 506 369 3 -a 506 595 4 -a 506 802 9 -a 506 509 7 -a 506 527 5 -a 506 292 1 -a 506 289 1 -a 506 839 1 -a 506 462 10 -a 506 78 7 -a 506 651 5 -a 506 478 3 -a 506 752 6 -a 506 258 1 -a 506 347 6 -a 506 264 7 -a 506 964 1 -a 506 329 1 -a 506 73 10 -a 506 127 2 -a 506 520 3 -a 506 266 4 -a 506 928 6 -a 506 188 7 -a 506 925 4 -a 506 648 6 -a 506 410 7 -a 506 549 6 -a 506 678 5 -a 506 67 10 -a 506 689 4 -a 506 22 2 -a 506 661 3 -a 506 466 4 -a 506 530 4 -a 506 163 3 -a 506 757 10 -a 506 818 10 -a 506 194 10 -a 506 896 9 -a 506 627 3 -a 506 671 10 -a 506 623 10 -a 506 884 1 -a 506 886 2 -a 506 824 7 -a 506 322 6 -a 506 958 5 -a 506 950 3 -a 506 841 10 -a 506 199 7 -a 506 853 3 -a 506 5 5 -a 506 99 5 -a 506 476 2 -a 506 414 8 -a 506 647 7 -a 506 130 2 -a 506 480 6 -a 506 311 5 -a 506 151 10 -a 506 116 6 -a 506 776 7 -a 506 681 3 -a 506 278 4 -a 506 508 5 -a 506 474 5 -a 506 254 7 -a 506 701 8 -a 506 345 8 -a 506 880 5 -a 506 348 5 -a 506 967 3 -a 506 740 3 -a 506 341 4 -a 507 828 6 -a 507 539 10 -a 507 662 7 -a 507 762 3 -a 507 464 4 -a 507 479 9 -a 507 960 3 -a 507 292 8 -a 507 483 4 -a 507 35 8 -a 507 768 6 -a 507 896 6 -a 507 681 2 -a 507 897 9 -a 507 352 1 -a 507 992 7 -a 507 23 3 -a 507 467 10 -a 507 743 10 -a 507 703 7 -a 507 745 3 -a 507 227 5 -a 507 153 6 -a 507 998 1 -a 507 927 7 -a 507 497 5 -a 507 854 5 -a 507 250 7 -a 507 440 5 -a 507 569 7 -a 507 590 2 -a 507 243 9 -a 507 83 9 -a 507 228 10 -a 507 546 1 -a 507 706 5 -a 507 940 7 -a 507 837 1 -a 507 164 7 -a 507 974 2 -a 507 580 2 -a 507 35 3 -a 507 630 1 -a 507 452 6 -a 507 386 7 -a 507 597 2 -a 507 475 1 -a 507 853 8 -a 507 316 10 -a 507 153 3 -a 507 573 6 -a 507 542 5 -a 507 305 9 -a 507 546 10 -a 507 444 5 -a 507 802 9 -a 507 375 7 -a 507 694 4 -a 507 217 3 -a 507 943 6 -a 507 259 10 -a 507 459 4 -a 507 1 8 -a 507 486 10 -a 507 439 10 -a 507 546 6 -a 507 167 4 -a 507 354 6 -a 507 359 6 -a 507 330 1 -a 507 303 8 -a 507 938 3 -a 507 365 3 -a 507 932 8 -a 507 366 8 -a 507 750 1 -a 507 505 2 -a 507 840 8 -a 507 578 7 -a 507 820 5 -a 507 992 7 -a 507 126 10 -a 507 337 10 -a 507 273 1 -a 507 672 1 -a 507 780 6 -a 507 50 4 -a 507 22 7 -a 507 449 1 -a 507 266 4 -a 507 965 1 -a 507 708 9 -a 507 724 6 -a 507 965 5 -a 507 169 5 -a 507 138 2 -a 507 487 2 -a 507 336 4 -a 507 491 2 -a 507 845 3 -a 507 665 9 -a 507 793 8 -a 507 758 2 -a 507 5 2 -a 507 701 1 -a 507 99 2 -a 508 755 2 -a 508 181 4 -a 508 938 5 -a 508 308 8 -a 508 1000 3 -a 508 906 2 -a 508 434 3 -a 508 312 2 -a 508 154 1 -a 508 81 6 -a 508 67 9 -a 508 203 10 -a 508 102 7 -a 508 516 9 -a 508 468 10 -a 508 42 7 -a 508 199 8 -a 508 167 7 -a 508 367 5 -a 508 305 1 -a 508 469 3 -a 508 702 2 -a 508 795 4 -a 508 289 1 -a 508 343 1 -a 508 564 10 -a 508 22 3 -a 508 347 8 -a 508 240 6 -a 508 121 7 -a 508 77 4 -a 508 420 3 -a 508 34 1 -a 508 385 7 -a 508 395 9 -a 508 939 10 -a 508 818 7 -a 508 706 10 -a 508 68 1 -a 508 898 4 -a 508 772 7 -a 508 270 4 -a 508 999 2 -a 508 263 10 -a 508 737 1 -a 508 17 6 -a 508 461 7 -a 508 904 9 -a 508 828 2 -a 508 184 7 -a 508 467 9 -a 508 505 1 -a 508 978 7 -a 508 755 9 -a 508 847 8 -a 508 517 3 -a 508 776 1 -a 508 170 9 -a 508 756 3 -a 508 896 8 -a 508 246 6 -a 508 151 3 -a 508 930 7 -a 508 630 1 -a 508 545 8 -a 508 844 7 -a 508 423 6 -a 508 226 7 -a 508 912 8 -a 508 296 4 -a 508 998 7 -a 508 157 9 -a 508 271 1 -a 508 236 8 -a 508 894 9 -a 508 287 10 -a 508 697 10 -a 508 773 5 -a 508 285 2 -a 508 500 1 -a 508 956 8 -a 508 751 6 -a 508 909 4 -a 508 481 2 -a 508 827 4 -a 508 402 8 -a 508 232 4 -a 508 996 8 -a 508 133 4 -a 508 104 4 -a 508 217 10 -a 508 284 3 -a 508 9 6 -a 508 847 9 -a 508 828 4 -a 508 852 5 -a 508 245 10 -a 508 30 8 -a 508 739 8 -a 508 541 5 -a 508 3 6 -a 508 896 8 -a 508 811 3 -a 508 238 3 -a 508 765 2 -a 508 73 3 -a 508 934 10 -a 508 513 8 -a 508 357 4 -a 508 409 4 -a 508 444 1 -a 508 83 4 -a 508 389 7 -a 508 328 4 -a 508 563 10 -a 508 191 6 -a 508 729 7 -a 509 794 5 -a 509 162 10 -a 509 862 5 -a 509 897 10 -a 509 378 2 -a 509 121 7 -a 509 905 9 -a 509 200 4 -a 509 948 6 -a 509 733 10 -a 509 445 6 -a 509 977 2 -a 509 447 9 -a 509 985 4 -a 509 979 6 -a 509 318 9 -a 509 771 1 -a 509 193 7 -a 509 58 3 -a 509 843 1 -a 509 102 7 -a 509 570 1 -a 509 175 10 -a 509 511 2 -a 509 257 3 -a 509 899 7 -a 509 317 4 -a 509 819 8 -a 509 65 4 -a 509 21 7 -a 509 588 2 -a 509 226 9 -a 509 882 1 -a 509 461 2 -a 509 603 2 -a 509 341 2 -a 509 803 2 -a 509 926 9 -a 509 49 3 -a 509 223 9 -a 509 878 9 -a 509 496 2 -a 509 183 4 -a 509 833 9 -a 509 813 6 -a 509 953 9 -a 509 1 6 -a 509 871 4 -a 509 771 9 -a 509 102 2 -a 509 416 5 -a 509 945 1 -a 509 612 3 -a 509 405 4 -a 509 177 2 -a 509 486 4 -a 509 721 2 -a 509 995 2 -a 509 550 3 -a 509 741 10 -a 509 558 5 -a 509 775 2 -a 509 599 3 -a 509 354 1 -a 509 576 4 -a 509 335 6 -a 509 132 7 -a 509 477 2 -a 509 383 3 -a 509 354 2 -a 509 331 5 -a 509 878 4 -a 509 536 9 -a 509 139 6 -a 509 667 3 -a 509 464 1 -a 509 139 1 -a 509 513 1 -a 509 210 10 -a 509 240 5 -a 509 928 2 -a 509 130 9 -a 509 852 2 -a 509 308 8 -a 509 306 9 -a 509 313 2 -a 509 4 9 -a 510 276 3 -a 510 863 5 -a 510 745 6 -a 510 833 5 -a 510 613 1 -a 510 319 8 -a 510 827 8 -a 510 966 10 -a 510 894 5 -a 510 137 3 -a 510 73 2 -a 510 347 5 -a 510 519 6 -a 510 426 1 -a 510 677 9 -a 510 373 4 -a 510 961 6 -a 510 815 2 -a 510 15 1 -a 510 400 4 -a 510 953 10 -a 510 527 7 -a 510 609 6 -a 510 168 6 -a 510 430 1 -a 510 738 10 -a 510 738 2 -a 510 19 3 -a 510 308 8 -a 510 741 4 -a 510 294 5 -a 510 146 6 -a 510 461 1 -a 510 103 4 -a 510 758 6 -a 510 779 9 -a 510 929 7 -a 510 700 6 -a 510 649 9 -a 510 41 4 -a 510 772 5 -a 510 995 8 -a 510 559 1 -a 510 174 8 -a 510 647 1 -a 510 931 3 -a 510 110 8 -a 510 437 3 -a 510 945 8 -a 510 510 8 -a 510 365 10 -a 510 447 7 -a 510 94 9 -a 510 532 10 -a 510 877 4 -a 510 832 2 -a 510 527 9 -a 510 590 5 -a 510 850 9 -a 510 834 3 -a 510 306 10 -a 510 120 1 -a 510 979 5 -a 510 767 5 -a 510 222 5 -a 510 712 10 -a 510 521 6 -a 510 126 4 -a 510 387 7 -a 510 145 7 -a 510 166 7 -a 510 135 2 -a 510 115 5 -a 510 724 7 -a 510 308 7 -a 510 761 2 -a 510 631 9 -a 510 417 6 -a 510 173 8 -a 510 551 3 -a 510 926 10 -a 510 537 4 -a 510 998 10 -a 510 45 8 -a 510 850 1 -a 510 827 10 -a 510 571 5 -a 510 415 1 -a 510 652 7 -a 510 380 6 -a 510 720 5 -a 510 771 5 -a 510 334 3 -a 510 462 4 -a 510 992 9 -a 510 21 3 -a 510 983 7 -a 510 93 9 -a 510 408 6 -a 510 103 9 -a 510 258 2 -a 511 542 9 -a 511 218 7 -a 511 982 6 -a 511 849 2 -a 511 978 10 -a 511 588 2 -a 511 241 6 -a 511 127 6 -a 511 114 4 -a 511 143 9 -a 511 663 4 -a 511 87 10 -a 511 138 7 -a 511 707 5 -a 511 936 2 -a 511 964 6 -a 511 253 6 -a 511 326 6 -a 511 591 4 -a 511 632 7 -a 511 22 3 -a 511 338 2 -a 511 965 8 -a 511 483 9 -a 511 305 6 -a 511 986 7 -a 511 441 4 -a 511 398 4 -a 511 369 1 -a 511 544 2 -a 511 655 10 -a 511 910 7 -a 511 761 1 -a 511 612 6 -a 511 734 10 -a 511 714 8 -a 511 175 9 -a 511 974 5 -a 511 840 9 -a 511 289 5 -a 511 92 2 -a 511 479 6 -a 511 375 1 -a 511 229 6 -a 511 161 6 -a 511 287 4 -a 511 168 9 -a 511 414 9 -a 511 612 4 -a 511 759 2 -a 511 21 9 -a 511 633 9 -a 511 72 8 -a 511 986 5 -a 511 92 5 -a 511 376 2 -a 511 947 10 -a 511 532 8 -a 511 773 2 -a 511 291 4 -a 511 51 8 -a 511 404 3 -a 511 176 3 -a 511 811 10 -a 511 909 3 -a 511 501 8 -a 511 166 5 -a 511 858 1 -a 511 316 9 -a 511 454 5 -a 511 950 3 -a 511 794 6 -a 511 828 9 -a 511 154 2 -a 511 955 8 -a 511 90 9 -a 511 322 9 -a 511 344 4 -a 511 702 8 -a 511 56 1 -a 511 364 5 -a 511 310 1 -a 511 127 7 -a 511 325 8 -a 511 401 7 -a 511 502 1 -a 511 247 7 -a 511 933 7 -a 511 251 6 -a 511 537 7 -a 512 983 5 -a 512 654 2 -a 512 712 3 -a 512 770 6 -a 512 644 5 -a 512 596 4 -a 512 246 6 -a 512 809 10 -a 512 430 6 -a 512 561 4 -a 512 238 10 -a 512 355 9 -a 512 331 8 -a 512 42 10 -a 512 508 8 -a 512 261 4 -a 512 131 6 -a 512 829 10 -a 512 604 6 -a 512 832 5 -a 512 884 5 -a 512 967 7 -a 512 118 2 -a 512 268 6 -a 512 518 10 -a 512 488 6 -a 512 514 5 -a 512 426 8 -a 512 738 7 -a 512 27 3 -a 512 385 3 -a 512 367 2 -a 512 738 6 -a 512 130 7 -a 512 310 4 -a 512 375 9 -a 512 795 9 -a 512 739 8 -a 512 935 7 -a 512 8 4 -a 512 69 3 -a 512 241 2 -a 512 49 5 -a 512 576 3 -a 512 501 1 -a 512 180 6 -a 512 381 8 -a 512 80 8 -a 512 240 2 -a 512 23 10 -a 512 104 2 -a 512 226 4 -a 512 290 4 -a 512 622 5 -a 512 713 7 -a 512 803 7 -a 512 23 9 -a 512 426 4 -a 512 829 10 -a 512 407 9 -a 512 792 6 -a 512 543 3 -a 512 536 1 -a 512 777 10 -a 512 852 5 -a 512 910 9 -a 512 547 6 -a 512 566 4 -a 512 821 8 -a 512 555 8 -a 512 634 9 -a 512 37 4 -a 512 603 6 -a 512 185 9 -a 512 538 1 -a 512 782 10 -a 512 565 3 -a 512 617 10 -a 512 769 8 -a 512 805 3 -a 512 639 3 -a 512 872 1 -a 512 6 2 -a 512 928 1 -a 512 469 7 -a 512 718 7 -a 512 707 5 -a 512 492 6 -a 512 119 3 -a 512 511 8 -a 512 898 10 -a 512 910 8 -a 512 29 7 -a 512 410 4 -a 512 662 6 -a 513 880 7 -a 513 295 5 -a 513 185 9 -a 513 421 7 -a 513 91 9 -a 513 739 9 -a 513 30 9 -a 513 128 7 -a 513 317 10 -a 513 215 3 -a 513 665 1 -a 513 75 7 -a 513 779 2 -a 513 257 8 -a 513 843 6 -a 513 559 8 -a 513 896 4 -a 513 690 6 -a 513 564 10 -a 513 799 10 -a 513 135 8 -a 513 257 5 -a 513 481 4 -a 513 626 10 -a 513 375 9 -a 513 992 10 -a 513 499 1 -a 513 260 5 -a 513 908 1 -a 513 922 10 -a 513 876 2 -a 513 179 1 -a 513 82 10 -a 513 272 10 -a 513 269 4 -a 513 820 9 -a 513 302 9 -a 513 396 2 -a 513 112 4 -a 513 516 6 -a 513 36 7 -a 513 186 2 -a 513 270 8 -a 513 293 10 -a 513 4 7 -a 513 829 10 -a 513 164 2 -a 513 694 4 -a 513 368 7 -a 513 962 5 -a 513 828 7 -a 513 625 7 -a 513 419 8 -a 513 429 3 -a 513 999 1 -a 513 386 9 -a 513 927 2 -a 513 235 9 -a 513 381 5 -a 513 811 1 -a 513 132 2 -a 513 232 4 -a 513 989 2 -a 513 213 8 -a 513 504 8 -a 513 233 1 -a 513 8 5 -a 513 805 6 -a 513 629 1 -a 513 119 5 -a 513 296 4 -a 513 664 7 -a 513 305 6 -a 513 565 9 -a 513 956 8 -a 513 308 10 -a 513 369 9 -a 513 95 7 -a 513 737 10 -a 513 33 8 -a 513 804 10 -a 513 337 9 -a 513 451 5 -a 513 208 10 -a 513 311 4 -a 513 836 1 -a 513 111 5 -a 513 545 8 -a 513 192 4 -a 513 921 5 -a 513 676 9 -a 513 424 2 -a 513 885 5 -a 513 888 3 -a 513 927 9 -a 513 93 2 -a 513 895 8 -a 513 707 4 -a 513 721 10 -a 513 361 2 -a 513 294 4 -a 513 542 6 -a 513 292 4 -a 513 601 3 -a 513 911 1 -a 513 387 3 -a 513 578 9 -a 513 623 5 -a 513 419 10 -a 513 357 10 -a 513 959 5 -a 514 869 5 -a 514 565 1 -a 514 245 2 -a 514 680 9 -a 514 675 9 -a 514 790 9 -a 514 871 7 -a 514 571 9 -a 514 441 10 -a 514 270 5 -a 514 431 4 -a 514 305 10 -a 514 172 9 -a 514 523 7 -a 514 175 7 -a 514 878 4 -a 514 220 8 -a 514 164 6 -a 514 855 8 -a 514 580 5 -a 514 457 10 -a 514 373 10 -a 514 871 5 -a 514 34 4 -a 514 259 4 -a 514 233 10 -a 514 611 8 -a 514 881 3 -a 514 651 7 -a 514 967 7 -a 514 815 6 -a 514 495 10 -a 514 507 5 -a 514 35 3 -a 514 150 5 -a 514 157 8 -a 514 824 5 -a 514 727 2 -a 514 241 7 -a 514 266 3 -a 514 133 3 -a 514 545 5 -a 514 438 7 -a 514 656 8 -a 514 719 6 -a 514 291 2 -a 514 875 6 -a 514 883 1 -a 514 122 3 -a 514 430 1 -a 514 315 10 -a 514 494 7 -a 514 276 3 -a 514 348 6 -a 514 752 10 -a 514 509 10 -a 514 958 10 -a 514 608 5 -a 514 135 2 -a 514 901 10 -a 514 398 8 -a 514 630 6 -a 514 383 1 -a 514 432 4 -a 514 779 2 -a 514 540 1 -a 514 232 10 -a 514 775 9 -a 514 242 6 -a 514 472 5 -a 514 17 9 -a 514 375 8 -a 514 454 5 -a 514 6 2 -a 514 710 7 -a 514 744 3 -a 514 880 8 -a 514 568 8 -a 514 865 9 -a 514 285 9 -a 514 883 4 -a 514 334 8 -a 514 560 1 -a 514 206 9 -a 514 61 9 -a 514 44 10 -a 514 140 8 -a 514 668 10 -a 514 179 1 -a 514 16 3 -a 514 41 5 -a 514 808 6 -a 514 398 9 -a 514 473 3 -a 514 562 10 -a 514 937 6 -a 515 704 2 -a 515 313 2 -a 515 155 9 -a 515 151 9 -a 515 329 10 -a 515 529 7 -a 515 142 1 -a 515 782 1 -a 515 534 5 -a 515 851 7 -a 515 501 1 -a 515 389 5 -a 515 395 10 -a 515 342 6 -a 515 673 8 -a 515 253 10 -a 515 675 7 -a 515 208 3 -a 515 458 2 -a 515 736 1 -a 515 252 5 -a 515 597 6 -a 515 379 7 -a 515 430 5 -a 515 612 5 -a 515 420 6 -a 515 213 2 -a 515 892 3 -a 515 774 1 -a 515 922 8 -a 515 571 10 -a 515 62 7 -a 515 52 2 -a 515 721 6 -a 515 390 8 -a 515 580 9 -a 515 862 10 -a 515 147 3 -a 515 89 7 -a 515 688 6 -a 515 648 8 -a 515 477 10 -a 515 58 7 -a 515 989 1 -a 515 125 6 -a 515 310 4 -a 515 639 7 -a 515 333 6 -a 515 768 7 -a 515 350 10 -a 515 584 1 -a 515 340 9 -a 515 729 2 -a 515 952 6 -a 515 124 5 -a 515 201 5 -a 515 937 7 -a 515 974 2 -a 515 834 4 -a 515 561 2 -a 515 12 1 -a 515 886 5 -a 515 257 7 -a 515 401 7 -a 515 441 5 -a 515 94 4 -a 515 548 1 -a 515 530 3 -a 515 781 10 -a 515 171 1 -a 515 839 8 -a 515 135 5 -a 515 107 10 -a 515 124 6 -a 515 773 10 -a 515 439 1 -a 515 891 7 -a 515 99 1 -a 515 207 4 -a 515 827 3 -a 515 134 7 -a 515 950 3 -a 515 186 4 -a 515 46 2 -a 515 940 3 -a 515 135 5 -a 515 879 5 -a 515 476 10 -a 515 146 3 -a 515 740 3 -a 515 732 3 -a 515 547 10 -a 515 157 7 -a 515 825 9 -a 515 70 8 -a 515 686 6 -a 515 581 1 -a 515 240 5 -a 515 667 7 -a 515 395 8 -a 515 374 9 -a 515 773 2 -a 515 519 5 -a 516 122 6 -a 516 187 4 -a 516 385 8 -a 516 220 7 -a 516 184 3 -a 516 591 10 -a 516 22 9 -a 516 169 4 -a 516 724 4 -a 516 971 7 -a 516 354 10 -a 516 769 1 -a 516 886 2 -a 516 489 5 -a 516 624 8 -a 516 337 6 -a 516 634 10 -a 516 339 3 -a 516 44 7 -a 516 156 2 -a 516 495 7 -a 516 868 1 -a 516 225 3 -a 516 156 2 -a 516 425 1 -a 516 464 3 -a 516 823 5 -a 516 819 2 -a 516 837 1 -a 516 571 6 -a 516 313 1 -a 516 959 8 -a 516 758 8 -a 516 698 2 -a 516 154 5 -a 516 941 3 -a 516 264 1 -a 516 176 5 -a 516 86 7 -a 516 988 10 -a 516 122 2 -a 516 439 8 -a 516 732 4 -a 516 927 8 -a 516 331 9 -a 516 320 7 -a 516 537 9 -a 516 670 8 -a 516 364 3 -a 516 692 8 -a 516 140 6 -a 516 207 3 -a 516 917 10 -a 516 296 10 -a 516 631 3 -a 516 356 6 -a 516 94 10 -a 516 426 10 -a 516 169 5 -a 516 664 1 -a 516 738 10 -a 516 103 3 -a 516 397 7 -a 516 411 7 -a 516 256 2 -a 516 314 8 -a 516 675 10 -a 516 431 4 -a 516 399 2 -a 516 638 10 -a 516 553 8 -a 516 837 9 -a 516 345 9 -a 516 536 7 -a 516 740 4 -a 516 676 10 -a 516 855 9 -a 516 252 8 -a 516 321 9 -a 516 194 2 -a 516 943 7 -a 517 460 2 -a 517 401 9 -a 517 835 8 -a 517 755 8 -a 517 7 9 -a 517 167 9 -a 517 848 1 -a 517 432 5 -a 517 335 3 -a 517 488 6 -a 517 146 5 -a 517 437 9 -a 517 884 5 -a 517 556 2 -a 517 692 2 -a 517 173 6 -a 517 206 4 -a 517 99 6 -a 517 571 3 -a 517 843 1 -a 517 651 10 -a 517 384 5 -a 517 164 1 -a 517 162 8 -a 517 99 9 -a 517 839 4 -a 517 350 5 -a 517 135 10 -a 517 186 1 -a 517 268 7 -a 517 594 9 -a 517 586 6 -a 517 79 10 -a 517 325 5 -a 517 592 9 -a 517 245 1 -a 517 148 6 -a 517 579 7 -a 517 635 8 -a 517 145 6 -a 517 495 5 -a 517 700 1 -a 517 682 7 -a 517 667 7 -a 517 906 8 -a 517 780 3 -a 517 214 8 -a 517 724 3 -a 517 406 2 -a 517 597 1 -a 517 887 8 -a 517 567 4 -a 517 695 1 -a 517 701 10 -a 517 559 4 -a 517 20 2 -a 517 835 9 -a 517 744 2 -a 517 287 6 -a 517 405 6 -a 517 305 4 -a 517 365 1 -a 517 729 1 -a 517 896 3 -a 517 609 8 -a 517 876 9 -a 517 895 3 -a 517 163 8 -a 517 487 4 -a 517 15 9 -a 517 153 6 -a 517 981 2 -a 517 715 2 -a 517 835 7 -a 517 623 3 -a 517 596 7 -a 517 590 6 -a 517 836 4 -a 517 295 6 -a 517 996 3 -a 517 408 2 -a 517 158 7 -a 517 538 7 -a 517 78 9 -a 517 858 9 -a 517 72 3 -a 517 97 4 -a 517 669 6 -a 517 815 7 -a 517 384 5 -a 517 49 3 -a 517 95 10 -a 517 748 8 -a 517 777 10 -a 517 991 9 -a 517 333 9 -a 517 628 5 -a 517 861 5 -a 517 495 8 -a 517 90 6 -a 518 876 5 -a 518 648 3 -a 518 46 5 -a 518 566 4 -a 518 458 8 -a 518 669 3 -a 518 137 9 -a 518 23 3 -a 518 480 9 -a 518 431 5 -a 518 888 2 -a 518 588 10 -a 518 532 3 -a 518 965 4 -a 518 422 5 -a 518 603 3 -a 518 38 4 -a 518 66 7 -a 518 394 8 -a 518 421 9 -a 518 114 7 -a 518 488 4 -a 518 144 4 -a 518 890 6 -a 518 454 7 -a 518 476 8 -a 518 493 4 -a 518 291 10 -a 518 971 6 -a 518 583 2 -a 518 142 1 -a 518 594 5 -a 518 628 8 -a 518 707 3 -a 518 27 2 -a 518 272 3 -a 518 843 10 -a 518 49 9 -a 518 752 1 -a 518 249 2 -a 518 43 4 -a 518 615 3 -a 518 837 9 -a 518 574 5 -a 518 555 10 -a 518 234 9 -a 518 152 2 -a 518 592 9 -a 518 299 5 -a 518 545 8 -a 518 412 6 -a 518 9 7 -a 518 132 9 -a 518 277 10 -a 518 462 1 -a 518 607 8 -a 518 769 9 -a 518 752 10 -a 518 553 4 -a 518 327 9 -a 518 893 2 -a 518 122 5 -a 518 955 8 -a 518 575 10 -a 518 148 4 -a 518 202 5 -a 518 393 7 -a 518 197 1 -a 518 953 10 -a 518 642 4 -a 518 239 8 -a 518 543 8 -a 518 454 3 -a 518 812 3 -a 518 74 1 -a 518 687 3 -a 518 963 9 -a 518 665 1 -a 518 985 3 -a 518 484 10 -a 518 653 5 -a 518 372 5 -a 518 492 7 -a 518 784 8 -a 518 648 8 -a 518 953 5 -a 518 366 2 -a 518 392 9 -a 518 681 8 -a 518 919 2 -a 518 719 7 -a 519 549 10 -a 519 16 3 -a 519 649 5 -a 519 100 6 -a 519 164 5 -a 519 850 7 -a 519 492 8 -a 519 360 3 -a 519 779 3 -a 519 109 1 -a 519 598 1 -a 519 297 7 -a 519 562 5 -a 519 385 7 -a 519 370 2 -a 519 224 10 -a 519 323 6 -a 519 11 9 -a 519 184 7 -a 519 806 8 -a 519 663 2 -a 519 555 9 -a 519 273 4 -a 519 422 4 -a 519 178 1 -a 519 202 9 -a 519 787 4 -a 519 570 8 -a 519 882 6 -a 519 681 9 -a 519 264 2 -a 519 406 9 -a 519 697 3 -a 519 912 3 -a 519 505 1 -a 519 860 5 -a 519 737 3 -a 519 997 6 -a 519 195 8 -a 519 491 4 -a 519 81 3 -a 519 792 8 -a 519 788 6 -a 519 643 6 -a 519 152 10 -a 519 133 1 -a 519 866 3 -a 519 474 8 -a 519 143 5 -a 519 26 10 -a 519 256 10 -a 519 805 3 -a 519 580 2 -a 519 528 9 -a 519 202 8 -a 519 758 1 -a 519 729 10 -a 519 989 9 -a 519 303 3 -a 519 586 1 -a 519 645 6 -a 519 566 2 -a 519 992 10 -a 519 317 8 -a 519 453 2 -a 519 472 4 -a 519 152 2 -a 519 165 2 -a 519 444 7 -a 519 346 9 -a 519 656 2 -a 519 525 2 -a 519 113 10 -a 519 419 1 -a 519 143 4 -a 519 264 9 -a 519 551 4 -a 519 738 3 -a 519 694 1 -a 519 9 10 -a 519 993 8 -a 519 474 2 -a 520 589 3 -a 520 496 5 -a 520 676 4 -a 520 322 6 -a 520 201 8 -a 520 640 10 -a 520 624 6 -a 520 786 5 -a 520 260 8 -a 520 165 3 -a 520 753 8 -a 520 577 3 -a 520 617 5 -a 520 201 1 -a 520 728 5 -a 520 781 2 -a 520 644 8 -a 520 50 6 -a 520 412 5 -a 520 144 10 -a 520 162 2 -a 520 830 3 -a 520 286 1 -a 520 426 4 -a 520 357 10 -a 520 270 5 -a 520 139 10 -a 520 26 6 -a 520 278 9 -a 520 107 2 -a 520 499 3 -a 520 866 2 -a 520 602 4 -a 520 150 5 -a 520 163 2 -a 520 802 2 -a 520 789 1 -a 520 786 6 -a 520 564 7 -a 520 25 1 -a 520 950 7 -a 520 292 7 -a 520 601 4 -a 520 542 1 -a 520 492 8 -a 520 304 2 -a 520 299 5 -a 520 112 2 -a 520 353 9 -a 520 710 6 -a 520 255 3 -a 520 515 7 -a 520 516 6 -a 520 541 8 -a 520 940 8 -a 520 872 5 -a 520 810 6 -a 520 54 10 -a 520 897 3 -a 520 63 6 -a 520 160 6 -a 520 371 5 -a 520 929 8 -a 520 761 10 -a 520 521 2 -a 520 67 10 -a 520 539 1 -a 520 285 4 -a 520 853 7 -a 520 78 3 -a 520 309 2 -a 520 778 10 -a 520 369 1 -a 520 909 3 -a 520 296 6 -a 520 861 2 -a 520 189 10 -a 520 594 3 -a 520 972 2 -a 520 541 6 -a 520 279 2 -a 520 202 10 -a 520 31 3 -a 520 794 5 -a 520 742 9 -a 520 970 5 -a 520 641 6 -a 521 527 8 -a 521 513 9 -a 521 590 1 -a 521 158 6 -a 521 884 8 -a 521 494 7 -a 521 919 8 -a 521 380 10 -a 521 560 1 -a 521 433 3 -a 521 664 8 -a 521 388 4 -a 521 510 2 -a 521 973 10 -a 521 142 3 -a 521 878 5 -a 521 857 8 -a 521 437 5 -a 521 714 9 -a 521 21 1 -a 521 6 6 -a 521 661 8 -a 521 562 10 -a 521 284 2 -a 521 863 1 -a 521 592 8 -a 521 54 2 -a 521 580 8 -a 521 538 4 -a 521 694 2 -a 521 83 7 -a 521 536 8 -a 521 183 4 -a 521 672 1 -a 521 694 1 -a 521 42 6 -a 521 141 5 -a 521 588 8 -a 521 421 8 -a 521 700 10 -a 521 60 8 -a 521 64 2 -a 521 505 9 -a 521 8 5 -a 521 205 2 -a 521 358 5 -a 521 865 1 -a 521 641 6 -a 521 48 6 -a 521 885 4 -a 521 646 7 -a 521 708 10 -a 521 422 7 -a 521 929 10 -a 521 546 7 -a 521 982 10 -a 521 102 6 -a 521 527 3 -a 521 652 6 -a 521 184 2 -a 521 38 10 -a 521 834 8 -a 521 855 9 -a 521 731 3 -a 521 875 5 -a 521 995 9 -a 521 294 1 -a 521 271 5 -a 521 670 3 -a 521 289 5 -a 521 330 4 -a 521 733 10 -a 521 793 10 -a 521 338 3 -a 521 937 8 -a 521 127 2 -a 521 178 7 -a 521 553 2 -a 521 174 2 -a 521 38 8 -a 521 174 4 -a 521 881 7 -a 521 460 5 -a 521 79 7 -a 521 403 3 -a 521 449 9 -a 521 36 7 -a 521 504 1 -a 521 975 9 -a 521 687 5 -a 521 687 2 -a 521 496 2 -a 521 517 2 -a 521 719 5 -a 521 346 10 -a 521 487 10 -a 521 616 6 -a 521 132 7 -a 521 277 1 -a 521 946 1 -a 521 865 8 -a 521 45 8 -a 521 259 4 -a 521 777 6 -a 522 171 8 -a 522 436 8 -a 522 306 4 -a 522 344 10 -a 522 473 5 -a 522 479 3 -a 522 201 5 -a 522 932 3 -a 522 557 3 -a 522 603 3 -a 522 356 7 -a 522 593 5 -a 522 82 5 -a 522 306 9 -a 522 255 9 -a 522 768 2 -a 522 294 9 -a 522 751 1 -a 522 260 1 -a 522 72 6 -a 522 746 9 -a 522 999 1 -a 522 688 8 -a 522 877 6 -a 522 251 10 -a 522 609 4 -a 522 717 8 -a 522 296 6 -a 522 867 10 -a 522 470 7 -a 522 466 10 -a 522 278 9 -a 522 775 6 -a 522 810 1 -a 522 750 4 -a 522 229 1 -a 522 658 4 -a 522 786 8 -a 522 588 4 -a 522 354 10 -a 522 669 6 -a 522 295 6 -a 522 608 3 -a 522 412 1 -a 522 588 3 -a 522 334 3 -a 522 671 7 -a 522 575 9 -a 522 406 10 -a 522 392 7 -a 522 549 8 -a 522 69 6 -a 522 244 8 -a 522 800 2 -a 522 677 5 -a 522 961 6 -a 522 71 3 -a 522 519 4 -a 522 406 10 -a 522 536 7 -a 522 796 1 -a 522 156 8 -a 522 321 5 -a 522 521 3 -a 522 384 10 -a 522 306 3 -a 522 154 2 -a 522 145 9 -a 522 893 7 -a 522 143 10 -a 522 498 9 -a 522 537 5 -a 522 437 8 -a 522 82 9 -a 522 948 2 -a 522 415 6 -a 522 594 8 -a 522 574 3 -a 522 820 5 -a 522 985 8 -a 522 98 10 -a 522 888 10 -a 522 205 6 -a 522 897 7 -a 522 540 7 -a 523 141 10 -a 523 967 8 -a 523 34 7 -a 523 546 2 -a 523 479 1 -a 523 829 6 -a 523 701 5 -a 523 799 2 -a 523 326 10 -a 523 60 7 -a 523 81 1 -a 523 479 9 -a 523 205 2 -a 523 973 8 -a 523 621 3 -a 523 702 9 -a 523 486 6 -a 523 33 3 -a 523 783 4 -a 523 409 7 -a 523 32 9 -a 523 174 4 -a 523 605 8 -a 523 993 7 -a 523 963 3 -a 523 703 8 -a 523 857 5 -a 523 143 9 -a 523 575 10 -a 523 372 10 -a 523 283 4 -a 523 518 1 -a 523 406 7 -a 523 828 5 -a 523 996 9 -a 523 210 8 -a 523 504 2 -a 523 770 9 -a 523 535 4 -a 523 564 7 -a 523 850 3 -a 523 768 2 -a 523 799 9 -a 523 610 7 -a 523 445 8 -a 523 260 2 -a 523 643 10 -a 523 204 8 -a 523 668 7 -a 523 674 3 -a 523 377 5 -a 523 646 6 -a 523 255 1 -a 523 345 6 -a 523 585 5 -a 523 957 7 -a 523 177 1 -a 523 727 8 -a 523 507 4 -a 523 549 4 -a 523 954 6 -a 523 813 1 -a 523 995 10 -a 523 139 5 -a 523 293 5 -a 523 741 2 -a 523 674 4 -a 523 856 4 -a 523 566 4 -a 523 663 1 -a 523 599 2 -a 523 340 3 -a 523 248 1 -a 523 19 8 -a 523 599 5 -a 523 890 5 -a 523 222 4 -a 523 243 4 -a 523 540 6 -a 523 598 1 -a 523 888 9 -a 523 794 4 -a 523 943 6 -a 523 448 6 -a 523 726 6 -a 523 95 3 -a 523 151 7 -a 523 208 1 -a 523 643 10 -a 523 136 3 -a 523 208 4 -a 523 572 10 -a 523 948 4 -a 523 178 7 -a 523 711 10 -a 523 216 3 -a 524 918 7 -a 524 360 2 -a 524 47 2 -a 524 460 2 -a 524 645 5 -a 524 799 6 -a 524 245 2 -a 524 664 2 -a 524 374 5 -a 524 111 7 -a 524 885 5 -a 524 616 1 -a 524 650 7 -a 524 459 7 -a 524 479 7 -a 524 419 1 -a 524 377 1 -a 524 927 10 -a 524 120 10 -a 524 471 5 -a 524 53 4 -a 524 327 7 -a 524 90 1 -a 524 188 2 -a 524 534 9 -a 524 661 5 -a 524 111 9 -a 524 712 5 -a 524 347 10 -a 524 327 9 -a 524 605 9 -a 524 706 10 -a 524 373 8 -a 524 40 1 -a 524 703 6 -a 524 839 5 -a 524 948 1 -a 524 657 6 -a 524 188 10 -a 524 34 10 -a 524 517 9 -a 524 803 5 -a 524 683 9 -a 524 975 1 -a 524 257 6 -a 524 77 7 -a 524 327 8 -a 524 159 1 -a 524 196 5 -a 524 798 7 -a 524 211 1 -a 524 522 10 -a 524 887 1 -a 524 398 9 -a 524 32 10 -a 524 523 9 -a 524 509 7 -a 524 743 7 -a 524 870 8 -a 524 835 1 -a 524 323 4 -a 524 551 4 -a 524 183 10 -a 524 363 2 -a 524 230 8 -a 524 176 2 -a 524 177 8 -a 524 153 9 -a 524 832 6 -a 524 364 3 -a 524 186 8 -a 524 325 4 -a 524 142 5 -a 524 868 8 -a 524 275 6 -a 524 398 4 -a 524 944 8 -a 524 602 6 -a 524 557 9 -a 524 115 6 -a 524 375 6 -a 524 767 3 -a 524 636 9 -a 524 237 8 -a 524 141 10 -a 524 667 5 -a 524 759 8 -a 524 649 1 -a 524 385 3 -a 524 604 6 -a 524 459 6 -a 524 708 6 -a 524 131 4 -a 524 641 1 -a 524 46 1 -a 524 360 2 -a 524 817 9 -a 524 222 4 -a 524 512 1 -a 524 624 1 -a 524 585 6 -a 524 697 3 -a 524 948 1 -a 524 726 6 -a 525 540 7 -a 525 199 10 -a 525 99 1 -a 525 459 6 -a 525 800 8 -a 525 655 4 -a 525 573 9 -a 525 150 3 -a 525 398 3 -a 525 184 1 -a 525 386 5 -a 525 538 2 -a 525 851 5 -a 525 120 9 -a 525 162 2 -a 525 211 9 -a 525 724 5 -a 525 620 8 -a 525 918 4 -a 525 854 5 -a 525 236 10 -a 525 963 5 -a 525 189 2 -a 525 28 9 -a 525 160 6 -a 525 700 3 -a 525 652 7 -a 525 744 5 -a 525 372 6 -a 525 575 2 -a 525 445 6 -a 525 911 10 -a 525 773 10 -a 525 544 3 -a 525 345 6 -a 525 548 8 -a 525 174 10 -a 525 917 10 -a 525 697 5 -a 525 571 8 -a 525 76 4 -a 525 58 6 -a 525 84 9 -a 525 926 3 -a 525 178 10 -a 525 245 2 -a 525 113 6 -a 525 901 9 -a 525 864 10 -a 525 6 6 -a 525 730 2 -a 525 76 6 -a 525 969 7 -a 525 918 5 -a 525 103 7 -a 525 104 6 -a 525 593 10 -a 525 754 6 -a 525 848 2 -a 525 964 3 -a 525 305 10 -a 525 268 10 -a 525 850 5 -a 525 53 5 -a 525 811 3 -a 525 170 1 -a 525 601 6 -a 525 985 8 -a 525 62 9 -a 525 273 2 -a 525 531 1 -a 525 137 3 -a 525 331 6 -a 525 615 4 -a 525 39 7 -a 525 508 8 -a 525 859 3 -a 525 151 6 -a 525 384 8 -a 525 699 4 -a 525 156 5 -a 525 89 1 -a 525 774 7 -a 525 100 6 -a 525 876 10 -a 525 204 10 -a 525 574 4 -a 525 606 4 -a 525 27 4 -a 525 513 2 -a 525 910 2 -a 525 294 10 -a 525 338 5 -a 525 962 1 -a 525 81 4 -a 525 507 4 -a 525 538 7 -a 525 41 9 -a 525 568 8 -a 525 811 4 -a 525 571 1 -a 525 704 2 -a 525 117 7 -a 525 161 5 -a 525 742 7 -a 525 624 3 -a 525 892 6 -a 525 694 1 -a 525 24 10 -a 525 71 5 -a 525 443 9 -a 525 123 2 -a 525 52 6 -a 525 294 10 -a 525 326 10 -a 525 625 10 -a 526 899 1 -a 526 352 9 -a 526 113 9 -a 526 784 9 -a 526 646 1 -a 526 450 6 -a 526 722 9 -a 526 726 7 -a 526 956 4 -a 526 235 5 -a 526 766 3 -a 526 499 6 -a 526 21 8 -a 526 312 5 -a 526 178 1 -a 526 137 1 -a 526 473 6 -a 526 920 9 -a 526 760 7 -a 526 468 5 -a 526 787 7 -a 526 742 6 -a 526 137 3 -a 526 810 8 -a 526 812 5 -a 526 579 3 -a 526 933 3 -a 526 863 2 -a 526 872 9 -a 526 234 1 -a 526 463 2 -a 526 747 2 -a 526 586 9 -a 526 575 1 -a 526 506 2 -a 526 207 10 -a 526 203 7 -a 526 932 5 -a 526 955 3 -a 526 438 10 -a 526 673 5 -a 526 429 2 -a 526 458 1 -a 526 984 1 -a 526 607 8 -a 526 595 2 -a 526 432 3 -a 526 502 10 -a 526 330 4 -a 526 899 2 -a 526 264 3 -a 526 48 5 -a 526 11 1 -a 526 50 6 -a 526 859 9 -a 526 589 5 -a 526 982 4 -a 526 698 10 -a 526 437 8 -a 526 191 9 -a 526 136 7 -a 526 159 6 -a 526 776 8 -a 526 711 2 -a 526 664 7 -a 526 982 1 -a 526 710 4 -a 526 867 10 -a 526 889 10 -a 526 641 9 -a 526 280 5 -a 526 537 10 -a 526 45 7 -a 526 737 5 -a 526 497 5 -a 526 651 4 -a 526 307 10 -a 526 928 8 -a 526 128 6 -a 526 637 10 -a 526 803 7 -a 526 392 3 -a 526 684 5 -a 526 813 3 -a 526 441 4 -a 526 518 1 -a 526 378 8 -a 526 398 4 -a 526 191 5 -a 526 814 1 -a 526 588 3 -a 526 327 2 -a 526 972 7 -a 526 340 8 -a 526 13 1 -a 526 611 4 -a 526 297 5 -a 526 722 7 -a 526 453 1 -a 526 162 7 -a 526 338 5 -a 526 732 6 -a 526 698 8 -a 526 383 5 -a 526 445 9 -a 526 170 10 -a 526 9 1 -a 526 751 1 -a 526 74 6 -a 527 137 5 -a 527 363 9 -a 527 876 10 -a 527 528 1 -a 527 22 5 -a 527 664 10 -a 527 968 4 -a 527 540 6 -a 527 17 7 -a 527 341 3 -a 527 730 2 -a 527 830 10 -a 527 928 1 -a 527 32 9 -a 527 777 6 -a 527 243 6 -a 527 44 4 -a 527 364 4 -a 527 540 9 -a 527 766 2 -a 527 816 9 -a 527 701 6 -a 527 79 9 -a 527 524 9 -a 527 374 2 -a 527 461 8 -a 527 968 9 -a 527 544 10 -a 527 470 10 -a 527 694 8 -a 527 617 3 -a 527 606 7 -a 527 33 8 -a 527 468 2 -a 527 109 3 -a 527 54 8 -a 527 107 2 -a 527 52 8 -a 527 593 1 -a 527 124 9 -a 527 392 10 -a 527 299 1 -a 527 953 2 -a 527 295 9 -a 527 330 7 -a 527 706 10 -a 527 538 1 -a 527 374 8 -a 527 45 5 -a 527 53 3 -a 527 115 10 -a 527 860 7 -a 527 753 3 -a 527 193 9 -a 527 359 6 -a 527 102 8 -a 527 654 8 -a 527 302 9 -a 527 645 10 -a 527 99 4 -a 527 996 3 -a 527 237 10 -a 527 704 5 -a 527 4 7 -a 527 704 3 -a 527 812 8 -a 527 57 5 -a 527 811 5 -a 527 863 1 -a 527 650 3 -a 527 934 9 -a 527 230 4 -a 527 948 6 -a 527 862 5 -a 527 524 2 -a 527 253 1 -a 527 543 3 -a 527 37 5 -a 527 626 4 -a 527 587 7 -a 527 89 1 -a 527 740 1 -a 527 423 4 -a 527 841 3 -a 527 933 9 -a 527 781 9 -a 527 943 7 -a 527 562 9 -a 527 59 3 -a 527 563 6 -a 527 660 2 -a 527 30 7 -a 527 800 8 -a 527 339 5 -a 527 33 6 -a 527 479 1 -a 527 126 7 -a 527 89 9 -a 528 265 5 -a 528 988 5 -a 528 738 5 -a 528 174 3 -a 528 193 8 -a 528 661 9 -a 528 12 3 -a 528 716 4 -a 528 914 2 -a 528 554 7 -a 528 753 8 -a 528 515 8 -a 528 117 9 -a 528 841 9 -a 528 231 3 -a 528 539 4 -a 528 658 9 -a 528 139 3 -a 528 295 10 -a 528 576 1 -a 528 700 8 -a 528 353 5 -a 528 114 10 -a 528 335 6 -a 528 382 9 -a 528 913 8 -a 528 673 6 -a 528 414 9 -a 528 368 3 -a 528 798 2 -a 528 503 10 -a 528 632 8 -a 528 761 9 -a 528 216 4 -a 528 806 7 -a 528 953 4 -a 528 877 6 -a 528 817 10 -a 528 644 9 -a 528 766 3 -a 528 346 1 -a 528 372 9 -a 528 256 6 -a 528 462 1 -a 528 189 3 -a 528 486 10 -a 528 1000 9 -a 528 846 3 -a 528 624 4 -a 528 271 2 -a 528 397 2 -a 528 299 5 -a 528 623 9 -a 528 510 4 -a 528 633 4 -a 528 399 10 -a 528 281 7 -a 528 394 2 -a 528 766 4 -a 528 54 2 -a 528 896 10 -a 528 373 6 -a 528 814 9 -a 528 88 6 -a 528 154 1 -a 528 742 1 -a 528 964 6 -a 528 970 7 -a 528 362 9 -a 528 705 1 -a 528 292 10 -a 528 733 6 -a 528 960 7 -a 528 753 2 -a 528 921 9 -a 528 422 2 -a 528 729 1 -a 528 742 5 -a 528 21 3 -a 528 999 7 -a 528 114 6 -a 528 320 7 -a 528 597 10 -a 528 624 9 -a 528 952 4 -a 528 577 5 -a 528 209 9 -a 528 971 6 -a 528 763 6 -a 528 262 8 -a 528 842 9 -a 528 111 2 -a 528 52 6 -a 528 929 1 -a 528 265 6 -a 528 793 1 -a 529 868 6 -a 529 210 4 -a 529 130 3 -a 529 548 3 -a 529 501 7 -a 529 863 7 -a 529 484 6 -a 529 230 5 -a 529 759 9 -a 529 905 3 -a 529 958 10 -a 529 477 6 -a 529 925 9 -a 529 932 7 -a 529 590 1 -a 529 220 6 -a 529 504 7 -a 529 189 3 -a 529 148 5 -a 529 57 5 -a 529 186 10 -a 529 356 2 -a 529 3 2 -a 529 948 4 -a 529 617 9 -a 529 844 9 -a 529 35 6 -a 529 668 3 -a 529 749 4 -a 529 299 9 -a 529 437 4 -a 529 592 3 -a 529 508 9 -a 529 566 8 -a 529 116 8 -a 529 404 10 -a 529 599 10 -a 529 214 9 -a 529 139 4 -a 529 479 1 -a 529 147 2 -a 529 615 4 -a 529 379 5 -a 529 54 2 -a 529 180 1 -a 529 599 9 -a 529 557 9 -a 529 369 3 -a 529 746 8 -a 529 613 6 -a 529 554 6 -a 529 77 4 -a 529 615 10 -a 529 478 6 -a 529 693 7 -a 529 435 7 -a 529 512 5 -a 529 337 6 -a 529 159 2 -a 529 810 5 -a 529 773 10 -a 529 750 6 -a 529 293 9 -a 529 314 6 -a 529 865 6 -a 529 277 1 -a 529 718 6 -a 529 439 9 -a 529 490 5 -a 529 856 5 -a 529 917 10 -a 529 636 9 -a 529 446 3 -a 529 272 7 -a 529 689 9 -a 529 625 8 -a 529 870 2 -a 529 222 7 -a 529 993 6 -a 529 591 4 -a 529 834 5 -a 529 523 9 -a 529 667 10 -a 529 425 8 -a 529 1000 1 -a 529 335 7 -a 529 859 4 -a 529 487 3 -a 529 671 2 -a 529 272 2 -a 529 419 7 -a 529 742 10 -a 529 564 6 -a 529 733 2 -a 529 583 6 -a 529 841 7 -a 529 426 8 -a 529 306 3 -a 529 257 7 -a 529 914 7 -a 529 942 3 -a 529 702 7 -a 529 161 7 -a 529 606 7 -a 529 302 4 -a 529 6 5 -a 529 827 2 -a 529 271 7 -a 529 596 7 -a 529 637 1 -a 529 793 3 -a 529 238 1 -a 529 37 2 -a 529 768 2 -a 530 572 4 -a 530 895 5 -a 530 230 5 -a 530 219 1 -a 530 887 7 -a 530 501 2 -a 530 637 4 -a 530 604 9 -a 530 40 1 -a 530 345 10 -a 530 162 3 -a 530 880 10 -a 530 770 1 -a 530 159 4 -a 530 162 7 -a 530 2 10 -a 530 48 9 -a 530 79 10 -a 530 703 5 -a 530 208 8 -a 530 684 6 -a 530 213 6 -a 530 487 8 -a 530 251 1 -a 530 808 7 -a 530 99 2 -a 530 19 10 -a 530 21 6 -a 530 135 2 -a 530 786 3 -a 530 592 9 -a 530 5 2 -a 530 810 2 -a 530 891 5 -a 530 491 5 -a 530 423 6 -a 530 470 8 -a 530 530 1 -a 530 767 2 -a 530 632 3 -a 530 386 9 -a 530 513 8 -a 530 790 5 -a 530 547 6 -a 530 514 9 -a 530 837 6 -a 530 625 1 -a 530 193 8 -a 530 20 6 -a 530 284 10 -a 530 173 7 -a 530 232 2 -a 530 770 3 -a 530 423 7 -a 530 15 3 -a 530 868 8 -a 530 441 5 -a 530 35 3 -a 530 202 9 -a 530 626 9 -a 530 192 3 -a 530 412 8 -a 530 872 7 -a 530 682 6 -a 530 834 4 -a 530 318 6 -a 530 187 3 -a 530 576 5 -a 530 949 4 -a 530 572 9 -a 530 64 3 -a 530 714 2 -a 530 94 5 -a 530 578 1 -a 530 526 3 -a 530 718 8 -a 530 770 3 -a 530 545 3 -a 530 942 8 -a 530 776 7 -a 530 747 7 -a 530 340 9 -a 530 790 2 -a 530 591 9 -a 530 780 7 -a 530 824 6 -a 530 568 10 -a 530 981 4 -a 530 425 2 -a 530 550 7 -a 530 148 4 -a 530 836 5 -a 530 397 6 -a 530 829 6 -a 530 645 7 -a 530 714 4 -a 530 197 7 -a 530 638 6 -a 530 563 10 -a 530 260 1 -a 530 327 3 -a 530 656 6 -a 530 837 9 -a 530 852 7 -a 530 350 4 -a 530 582 8 -a 530 372 10 -a 530 327 2 -a 530 499 9 -a 530 123 3 -a 530 49 5 -a 531 838 6 -a 531 912 2 -a 531 639 7 -a 531 593 3 -a 531 711 10 -a 531 183 7 -a 531 549 5 -a 531 112 4 -a 531 732 10 -a 531 696 5 -a 531 947 10 -a 531 104 7 -a 531 500 3 -a 531 568 6 -a 531 818 6 -a 531 491 7 -a 531 764 3 -a 531 431 2 -a 531 29 3 -a 531 758 4 -a 531 684 6 -a 531 836 3 -a 531 585 6 -a 531 9 7 -a 531 393 2 -a 531 957 10 -a 531 335 1 -a 531 892 4 -a 531 55 1 -a 531 384 10 -a 531 705 7 -a 531 967 9 -a 531 274 6 -a 531 653 8 -a 531 180 5 -a 531 822 6 -a 531 764 10 -a 531 911 6 -a 531 494 8 -a 531 687 9 -a 531 993 3 -a 531 230 2 -a 531 808 7 -a 531 459 4 -a 531 993 10 -a 531 214 8 -a 531 487 6 -a 531 991 9 -a 531 971 1 -a 531 147 6 -a 531 802 2 -a 531 532 10 -a 531 155 8 -a 531 171 7 -a 531 464 3 -a 531 490 6 -a 531 38 7 -a 531 518 4 -a 531 873 7 -a 531 742 6 -a 531 460 4 -a 531 870 1 -a 531 89 3 -a 531 26 7 -a 531 813 6 -a 531 852 9 -a 531 936 3 -a 531 282 7 -a 531 514 3 -a 531 926 3 -a 531 250 8 -a 531 743 2 -a 531 709 5 -a 531 709 8 -a 531 711 4 -a 531 923 5 -a 531 171 7 -a 531 678 1 -a 531 869 2 -a 531 317 3 -a 531 455 7 -a 531 376 6 -a 531 472 9 -a 531 625 5 -a 531 839 6 -a 531 961 4 -a 531 662 1 -a 531 333 10 -a 531 809 10 -a 531 380 3 -a 531 792 2 -a 531 654 3 -a 531 370 10 -a 531 880 3 -a 531 679 10 -a 531 158 1 -a 531 708 7 -a 531 591 1 -a 531 439 8 -a 531 197 3 -a 531 492 2 -a 531 689 9 -a 531 940 5 -a 531 177 1 -a 531 373 10 -a 531 626 7 -a 531 75 5 -a 531 543 4 -a 532 279 9 -a 532 943 4 -a 532 860 5 -a 532 734 2 -a 532 295 7 -a 532 307 3 -a 532 334 9 -a 532 109 9 -a 532 243 5 -a 532 996 7 -a 532 441 7 -a 532 27 3 -a 532 351 7 -a 532 209 5 -a 532 680 3 -a 532 720 7 -a 532 64 4 -a 532 335 6 -a 532 878 4 -a 532 771 4 -a 532 925 5 -a 532 292 3 -a 532 968 10 -a 532 392 3 -a 532 980 8 -a 532 883 1 -a 532 568 1 -a 532 328 1 -a 532 484 7 -a 532 642 1 -a 532 871 4 -a 532 763 9 -a 532 561 8 -a 532 706 5 -a 532 472 6 -a 532 855 7 -a 532 805 6 -a 532 963 10 -a 532 230 3 -a 532 776 1 -a 532 380 9 -a 532 256 1 -a 532 102 3 -a 532 588 6 -a 532 935 2 -a 532 822 10 -a 532 651 3 -a 532 245 9 -a 532 675 3 -a 532 398 10 -a 532 145 10 -a 532 966 8 -a 532 341 7 -a 532 537 4 -a 532 922 6 -a 532 199 10 -a 532 80 3 -a 532 225 4 -a 532 682 4 -a 532 722 9 -a 532 71 5 -a 532 420 9 -a 532 258 1 -a 532 776 6 -a 532 891 5 -a 532 88 8 -a 532 763 10 -a 532 672 6 -a 532 26 3 -a 532 992 9 -a 532 423 2 -a 532 405 6 -a 532 223 7 -a 532 525 4 -a 532 992 9 -a 532 134 2 -a 532 322 5 -a 532 619 5 -a 532 378 4 -a 532 996 5 -a 532 523 1 -a 532 937 4 -a 532 332 3 -a 532 35 5 -a 532 834 6 -a 532 530 5 -a 532 114 7 -a 532 35 7 -a 532 187 1 -a 532 835 7 -a 533 105 10 -a 533 607 4 -a 533 68 7 -a 533 881 6 -a 533 473 2 -a 533 155 4 -a 533 619 4 -a 533 120 3 -a 533 181 2 -a 533 587 8 -a 533 543 2 -a 533 585 5 -a 533 809 2 -a 533 43 4 -a 533 553 6 -a 533 942 2 -a 533 364 8 -a 533 147 10 -a 533 296 9 -a 533 335 4 -a 533 138 9 -a 533 818 2 -a 533 247 3 -a 533 469 6 -a 533 852 6 -a 533 57 5 -a 533 998 1 -a 533 965 8 -a 533 91 5 -a 533 160 9 -a 533 776 3 -a 533 195 8 -a 533 766 10 -a 533 843 5 -a 533 51 4 -a 533 215 1 -a 533 998 5 -a 533 670 5 -a 533 334 9 -a 533 154 1 -a 533 232 9 -a 533 876 5 -a 533 738 9 -a 533 16 7 -a 533 918 5 -a 533 266 2 -a 533 958 9 -a 533 257 3 -a 533 412 1 -a 533 229 10 -a 533 591 6 -a 533 549 5 -a 533 22 7 -a 533 838 10 -a 533 873 3 -a 533 894 9 -a 533 990 4 -a 533 813 6 -a 533 984 5 -a 533 126 2 -a 533 564 9 -a 533 154 7 -a 533 891 8 -a 533 383 1 -a 533 205 9 -a 533 81 8 -a 533 356 9 -a 533 874 4 -a 533 415 8 -a 533 509 2 -a 533 81 4 -a 533 266 6 -a 533 222 4 -a 533 96 6 -a 533 160 8 -a 533 488 1 -a 533 29 4 -a 533 416 6 -a 533 899 3 -a 533 257 1 -a 533 424 7 -a 533 278 8 -a 533 820 10 -a 533 416 1 -a 533 126 3 -a 533 689 5 -a 533 382 1 -a 533 939 1 -a 533 648 5 -a 533 507 1 -a 533 478 9 -a 533 801 9 -a 533 373 6 -a 533 860 10 -a 533 454 1 -a 533 191 9 -a 533 854 4 -a 533 868 10 -a 533 699 6 -a 533 934 3 -a 533 109 8 -a 533 921 5 -a 533 6 8 -a 533 268 7 -a 533 384 1 -a 533 34 3 -a 534 684 7 -a 534 258 3 -a 534 291 6 -a 534 666 7 -a 534 681 1 -a 534 568 5 -a 534 461 1 -a 534 73 8 -a 534 694 5 -a 534 125 9 -a 534 454 4 -a 534 608 1 -a 534 772 5 -a 534 960 6 -a 534 61 3 -a 534 548 6 -a 534 308 5 -a 534 921 2 -a 534 529 5 -a 534 761 8 -a 534 87 2 -a 534 358 5 -a 534 604 7 -a 534 786 7 -a 534 268 8 -a 534 713 10 -a 534 682 8 -a 534 273 10 -a 534 980 1 -a 534 41 4 -a 534 306 7 -a 534 639 6 -a 534 298 2 -a 534 596 1 -a 534 280 3 -a 534 979 8 -a 534 140 7 -a 534 740 2 -a 534 27 3 -a 534 833 2 -a 534 864 3 -a 534 480 7 -a 534 416 9 -a 534 611 8 -a 534 415 5 -a 534 476 8 -a 534 135 9 -a 534 722 2 -a 534 372 3 -a 534 663 2 -a 534 459 2 -a 534 459 7 -a 534 38 9 -a 534 220 7 -a 534 263 4 -a 534 750 10 -a 534 901 4 -a 534 535 5 -a 534 706 3 -a 534 941 8 -a 534 841 4 -a 534 320 10 -a 534 214 6 -a 534 412 7 -a 534 600 3 -a 534 168 8 -a 534 551 4 -a 534 315 7 -a 534 194 5 -a 534 359 2 -a 534 155 5 -a 534 673 7 -a 534 774 4 -a 534 765 8 -a 534 63 2 -a 534 226 2 -a 534 899 1 -a 534 785 9 -a 534 597 1 -a 534 537 2 -a 534 219 6 -a 534 31 2 -a 534 533 1 -a 534 256 8 -a 534 250 9 -a 534 795 4 -a 534 126 10 -a 534 306 10 -a 534 687 4 -a 534 42 8 -a 534 122 7 -a 534 256 10 -a 534 533 1 -a 534 581 8 -a 534 423 3 -a 534 60 5 -a 534 896 10 -a 534 617 5 -a 534 418 4 -a 535 26 10 -a 535 265 4 -a 535 168 2 -a 535 790 6 -a 535 328 7 -a 535 393 2 -a 535 665 5 -a 535 88 3 -a 535 989 2 -a 535 177 4 -a 535 306 8 -a 535 709 3 -a 535 561 5 -a 535 245 8 -a 535 480 10 -a 535 542 6 -a 535 371 2 -a 535 785 6 -a 535 204 3 -a 535 412 5 -a 535 906 7 -a 535 186 8 -a 535 667 6 -a 535 414 10 -a 535 766 4 -a 535 66 4 -a 535 473 6 -a 535 637 6 -a 535 682 6 -a 535 891 4 -a 535 662 9 -a 535 946 7 -a 535 34 2 -a 535 428 8 -a 535 249 9 -a 535 426 2 -a 535 68 9 -a 535 336 4 -a 535 390 7 -a 535 244 10 -a 535 641 9 -a 535 385 10 -a 535 953 1 -a 535 178 9 -a 535 630 4 -a 535 408 10 -a 535 719 8 -a 535 1000 8 -a 535 168 4 -a 535 923 3 -a 535 387 3 -a 535 49 2 -a 535 84 6 -a 535 30 2 -a 535 462 5 -a 535 849 7 -a 535 95 8 -a 535 935 6 -a 535 462 3 -a 535 776 1 -a 535 801 6 -a 535 99 4 -a 535 697 10 -a 535 834 1 -a 535 526 8 -a 535 946 10 -a 535 235 9 -a 535 593 1 -a 535 257 3 -a 535 624 6 -a 535 837 5 -a 535 898 8 -a 535 765 7 -a 535 51 1 -a 535 614 5 -a 535 148 2 -a 535 769 2 -a 535 589 9 -a 535 315 7 -a 535 667 10 -a 535 975 4 -a 535 363 9 -a 535 750 5 -a 535 824 4 -a 535 575 8 -a 535 74 9 -a 535 734 5 -a 535 12 2 -a 535 849 4 -a 535 510 2 -a 535 110 2 -a 535 522 10 -a 535 319 6 -a 535 636 1 -a 535 443 1 -a 535 553 1 -a 535 204 10 -a 535 699 5 -a 535 153 5 -a 535 16 4 -a 535 572 8 -a 535 137 9 -a 535 780 8 -a 535 622 7 -a 535 750 8 -a 535 927 2 -a 535 367 9 -a 535 314 5 -a 535 217 8 -a 535 9 5 -a 535 264 8 -a 535 579 7 -a 535 759 9 -a 535 244 2 -a 535 379 3 -a 535 309 9 -a 535 317 9 -a 535 88 7 -a 535 320 5 -a 535 142 10 -a 536 598 10 -a 536 429 9 -a 536 663 6 -a 536 916 10 -a 536 40 5 -a 536 81 6 -a 536 445 1 -a 536 244 8 -a 536 779 4 -a 536 597 7 -a 536 259 4 -a 536 327 6 -a 536 733 5 -a 536 15 5 -a 536 948 8 -a 536 458 2 -a 536 941 1 -a 536 290 4 -a 536 771 10 -a 536 134 4 -a 536 299 9 -a 536 10 9 -a 536 712 8 -a 536 33 8 -a 536 253 8 -a 536 66 6 -a 536 341 9 -a 536 570 7 -a 536 154 3 -a 536 660 6 -a 536 711 8 -a 536 751 3 -a 536 64 5 -a 536 349 6 -a 536 642 3 -a 536 104 9 -a 536 429 1 -a 536 62 2 -a 536 347 10 -a 536 183 10 -a 536 658 9 -a 536 605 1 -a 536 509 1 -a 536 366 7 -a 536 619 2 -a 536 433 4 -a 536 823 7 -a 536 536 7 -a 536 722 3 -a 536 569 9 -a 536 669 9 -a 536 579 5 -a 536 356 3 -a 536 28 4 -a 536 831 7 -a 536 422 10 -a 536 368 8 -a 536 376 9 -a 536 575 10 -a 536 3 9 -a 536 62 2 -a 536 301 3 -a 536 67 2 -a 536 410 3 -a 536 942 3 -a 536 170 5 -a 536 838 8 -a 536 516 6 -a 536 637 6 -a 536 96 5 -a 536 505 8 -a 536 715 7 -a 536 937 3 -a 536 801 1 -a 536 226 7 -a 536 635 6 -a 536 346 5 -a 536 894 8 -a 536 630 9 -a 536 924 1 -a 536 225 4 -a 536 658 1 -a 536 730 2 -a 536 646 8 -a 536 1 2 -a 536 82 8 -a 537 196 1 -a 537 4 6 -a 537 143 8 -a 537 496 8 -a 537 70 5 -a 537 553 6 -a 537 414 2 -a 537 239 6 -a 537 366 5 -a 537 393 5 -a 537 754 2 -a 537 362 8 -a 537 5 7 -a 537 849 3 -a 537 867 8 -a 537 539 3 -a 537 779 4 -a 537 784 7 -a 537 764 2 -a 537 389 9 -a 537 105 10 -a 537 633 1 -a 537 4 10 -a 537 858 9 -a 537 652 4 -a 537 733 3 -a 537 479 8 -a 537 652 8 -a 537 814 2 -a 537 675 1 -a 537 655 9 -a 537 957 10 -a 537 146 2 -a 537 724 6 -a 537 485 9 -a 537 559 9 -a 537 962 8 -a 537 850 4 -a 537 951 7 -a 537 691 9 -a 537 188 2 -a 537 956 6 -a 537 516 5 -a 537 30 6 -a 537 938 3 -a 537 30 7 -a 537 808 8 -a 537 697 6 -a 537 794 5 -a 537 173 1 -a 537 801 8 -a 537 402 2 -a 537 167 3 -a 537 804 3 -a 537 235 10 -a 537 818 9 -a 537 513 10 -a 537 714 6 -a 537 445 7 -a 537 302 10 -a 537 364 8 -a 537 76 8 -a 537 234 3 -a 537 509 5 -a 537 799 5 -a 537 718 8 -a 537 44 4 -a 537 737 4 -a 537 544 4 -a 537 994 1 -a 537 403 1 -a 537 731 4 -a 537 925 3 -a 537 918 5 -a 537 760 4 -a 537 839 3 -a 537 948 1 -a 537 543 3 -a 537 511 9 -a 537 717 10 -a 537 715 10 -a 537 288 3 -a 537 94 8 -a 537 881 4 -a 537 67 1 -a 537 329 7 -a 537 674 7 -a 537 579 4 -a 537 18 7 -a 537 95 1 -a 537 881 5 -a 537 381 7 -a 537 170 8 -a 537 90 1 -a 537 889 9 -a 537 968 6 -a 537 808 4 -a 538 932 9 -a 538 680 6 -a 538 327 7 -a 538 902 4 -a 538 59 8 -a 538 33 10 -a 538 802 4 -a 538 976 1 -a 538 792 7 -a 538 616 1 -a 538 899 8 -a 538 310 2 -a 538 103 7 -a 538 591 5 -a 538 1 9 -a 538 390 8 -a 538 685 9 -a 538 881 6 -a 538 456 5 -a 538 531 3 -a 538 11 9 -a 538 6 1 -a 538 625 1 -a 538 891 8 -a 538 386 10 -a 538 794 4 -a 538 980 5 -a 538 250 6 -a 538 737 2 -a 538 763 5 -a 538 158 3 -a 538 393 1 -a 538 65 3 -a 538 35 9 -a 538 451 5 -a 538 97 9 -a 538 836 8 -a 538 402 4 -a 538 888 1 -a 538 428 1 -a 538 277 6 -a 538 174 10 -a 538 530 5 -a 538 867 3 -a 538 174 9 -a 538 919 1 -a 538 527 4 -a 538 30 6 -a 538 350 4 -a 538 515 2 -a 538 560 2 -a 538 360 7 -a 538 520 4 -a 538 160 4 -a 538 226 9 -a 538 905 3 -a 538 953 9 -a 538 182 1 -a 538 131 6 -a 538 666 10 -a 538 944 6 -a 538 288 10 -a 538 34 1 -a 538 322 3 -a 538 484 4 -a 538 81 5 -a 538 133 4 -a 538 885 2 -a 538 969 6 -a 538 560 1 -a 538 137 8 -a 538 118 5 -a 538 65 4 -a 538 291 2 -a 538 983 4 -a 538 506 7 -a 538 320 10 -a 538 309 4 -a 538 880 10 -a 538 668 7 -a 538 516 2 -a 538 15 5 -a 538 894 4 -a 538 397 4 -a 538 968 10 -a 538 51 3 -a 538 527 5 -a 538 609 8 -a 538 994 10 -a 538 814 9 -a 538 642 1 -a 538 978 2 -a 538 111 2 -a 538 101 9 -a 538 35 7 -a 538 243 3 -a 538 985 10 -a 538 803 9 -a 538 98 4 -a 538 96 2 -a 539 867 7 -a 539 77 10 -a 539 386 3 -a 539 826 1 -a 539 582 3 -a 539 705 5 -a 539 110 7 -a 539 578 7 -a 539 560 4 -a 539 777 5 -a 539 70 2 -a 539 575 4 -a 539 646 1 -a 539 466 5 -a 539 518 2 -a 539 696 8 -a 539 992 1 -a 539 102 8 -a 539 666 2 -a 539 781 9 -a 539 743 5 -a 539 619 1 -a 539 891 2 -a 539 843 5 -a 539 653 3 -a 539 109 3 -a 539 803 8 -a 539 631 8 -a 539 911 4 -a 539 900 6 -a 539 726 2 -a 539 754 8 -a 539 976 7 -a 539 87 5 -a 539 555 8 -a 539 534 6 -a 539 792 10 -a 539 664 9 -a 539 87 4 -a 539 327 7 -a 539 416 1 -a 539 156 4 -a 539 901 2 -a 539 38 8 -a 539 621 7 -a 539 394 10 -a 539 733 7 -a 539 588 9 -a 539 495 6 -a 539 374 3 -a 539 344 3 -a 539 213 4 -a 539 993 4 -a 539 210 10 -a 539 31 10 -a 539 621 9 -a 539 319 1 -a 539 834 2 -a 539 228 10 -a 539 205 3 -a 539 709 8 -a 539 953 10 -a 539 958 7 -a 539 661 5 -a 539 16 3 -a 539 488 9 -a 539 170 9 -a 539 807 8 -a 539 127 3 -a 539 256 6 -a 539 109 1 -a 539 543 7 -a 539 412 5 -a 539 580 6 -a 539 8 7 -a 539 379 4 -a 539 288 8 -a 539 596 9 -a 539 874 7 -a 539 662 3 -a 539 939 1 -a 539 62 4 -a 539 630 3 -a 539 125 5 -a 539 93 2 -a 539 226 5 -a 539 443 8 -a 539 926 10 -a 539 453 8 -a 539 647 2 -a 539 610 3 -a 539 382 10 -a 539 581 8 -a 539 246 10 -a 539 397 7 -a 539 44 6 -a 539 415 5 -a 540 179 6 -a 540 171 1 -a 540 671 7 -a 540 287 6 -a 540 713 4 -a 540 58 10 -a 540 272 5 -a 540 268 8 -a 540 65 5 -a 540 651 6 -a 540 555 3 -a 540 660 10 -a 540 500 2 -a 540 192 8 -a 540 575 7 -a 540 561 9 -a 540 821 8 -a 540 699 8 -a 540 653 6 -a 540 23 1 -a 540 117 1 -a 540 554 10 -a 540 475 5 -a 540 763 5 -a 540 140 5 -a 540 856 5 -a 540 319 10 -a 540 385 9 -a 540 228 3 -a 540 363 3 -a 540 800 3 -a 540 406 4 -a 540 533 3 -a 540 446 7 -a 540 693 2 -a 540 221 9 -a 540 503 6 -a 540 964 3 -a 540 488 10 -a 540 567 4 -a 540 590 4 -a 540 18 8 -a 540 203 3 -a 540 65 7 -a 540 210 1 -a 540 777 9 -a 540 626 8 -a 540 6 10 -a 540 451 10 -a 540 254 5 -a 540 28 3 -a 540 567 6 -a 540 808 8 -a 540 503 7 -a 540 305 8 -a 540 947 2 -a 540 334 2 -a 540 624 2 -a 540 307 8 -a 540 562 2 -a 540 986 1 -a 540 82 7 -a 540 967 10 -a 540 494 3 -a 540 527 2 -a 540 635 2 -a 540 714 6 -a 540 5 8 -a 540 575 2 -a 540 177 4 -a 540 572 5 -a 540 140 6 -a 540 194 4 -a 540 774 3 -a 540 205 8 -a 540 403 9 -a 540 526 10 -a 540 830 4 -a 540 409 1 -a 540 976 10 -a 540 59 5 -a 540 436 6 -a 540 518 9 -a 540 866 1 -a 540 938 8 -a 540 822 5 -a 540 788 10 -a 540 248 1 -a 540 421 1 -a 540 71 5 -a 540 809 3 -a 540 382 8 -a 540 152 6 -a 540 751 10 -a 540 875 4 -a 540 679 6 -a 540 362 6 -a 540 564 7 -a 540 683 4 -a 540 936 3 -a 540 740 3 -a 540 230 9 -a 540 51 9 -a 541 934 9 -a 541 255 1 -a 541 312 7 -a 541 504 4 -a 541 60 6 -a 541 720 4 -a 541 455 10 -a 541 119 6 -a 541 132 7 -a 541 972 8 -a 541 984 1 -a 541 45 3 -a 541 770 1 -a 541 748 2 -a 541 292 6 -a 541 166 4 -a 541 818 5 -a 541 76 8 -a 541 548 6 -a 541 969 3 -a 541 827 5 -a 541 398 6 -a 541 623 6 -a 541 164 1 -a 541 962 10 -a 541 282 1 -a 541 75 4 -a 541 677 8 -a 541 511 6 -a 541 125 7 -a 541 586 6 -a 541 490 6 -a 541 380 8 -a 541 898 7 -a 541 993 8 -a 541 439 4 -a 541 593 7 -a 541 424 3 -a 541 557 5 -a 541 724 7 -a 541 371 4 -a 541 517 1 -a 541 769 9 -a 541 116 2 -a 541 240 8 -a 541 36 10 -a 541 282 5 -a 541 33 4 -a 541 112 7 -a 541 829 3 -a 541 938 2 -a 541 202 7 -a 541 600 9 -a 541 77 2 -a 541 139 6 -a 541 881 1 -a 541 151 7 -a 541 816 10 -a 541 367 9 -a 541 275 8 -a 541 377 1 -a 541 856 2 -a 541 654 1 -a 541 250 7 -a 541 825 3 -a 541 69 2 -a 541 843 8 -a 541 224 9 -a 541 625 5 -a 541 542 4 -a 541 594 9 -a 541 117 6 -a 541 286 7 -a 541 710 2 -a 541 356 3 -a 541 322 4 -a 541 991 3 -a 541 388 10 -a 541 433 7 -a 541 795 1 -a 541 365 8 -a 541 346 6 -a 541 996 3 -a 541 964 8 -a 541 422 10 -a 541 111 9 -a 541 820 10 -a 541 572 2 -a 541 926 10 -a 541 162 5 -a 541 846 5 -a 541 278 2 -a 541 476 4 -a 541 528 10 -a 541 818 8 -a 541 544 2 -a 542 346 5 -a 542 17 9 -a 542 144 8 -a 542 887 6 -a 542 610 5 -a 542 261 1 -a 542 149 3 -a 542 295 4 -a 542 616 5 -a 542 470 4 -a 542 261 9 -a 542 902 6 -a 542 31 2 -a 542 344 3 -a 542 223 3 -a 542 3 7 -a 542 283 8 -a 542 644 6 -a 542 113 4 -a 542 78 6 -a 542 191 4 -a 542 14 4 -a 542 239 10 -a 542 12 5 -a 542 291 7 -a 542 232 10 -a 542 487 8 -a 542 818 2 -a 542 25 2 -a 542 6 1 -a 542 139 6 -a 542 41 9 -a 542 150 7 -a 542 2 8 -a 542 651 6 -a 542 410 1 -a 542 150 1 -a 542 945 10 -a 542 1 10 -a 542 619 9 -a 542 182 8 -a 542 496 4 -a 542 212 2 -a 542 323 6 -a 542 718 1 -a 542 214 2 -a 542 605 6 -a 542 337 6 -a 542 326 8 -a 542 682 1 -a 542 527 6 -a 542 339 7 -a 542 921 8 -a 542 538 3 -a 542 630 5 -a 542 128 3 -a 542 1 7 -a 542 423 5 -a 542 153 5 -a 542 6 7 -a 542 562 1 -a 542 193 8 -a 542 155 6 -a 542 563 3 -a 542 843 6 -a 542 564 4 -a 542 712 10 -a 542 764 10 -a 542 565 7 -a 542 306 7 -a 542 945 2 -a 542 544 9 -a 542 801 5 -a 542 132 2 -a 542 867 3 -a 542 494 8 -a 542 346 3 -a 542 447 6 -a 542 830 6 -a 542 671 10 -a 542 105 3 -a 542 332 5 -a 542 1 6 -a 542 869 1 -a 542 615 5 -a 542 128 9 -a 542 869 10 -a 542 13 8 -a 542 280 8 -a 542 875 9 -a 542 574 7 -a 542 473 8 -a 543 5 9 -a 543 112 3 -a 543 291 7 -a 543 569 1 -a 543 823 5 -a 543 30 3 -a 543 109 5 -a 543 104 5 -a 543 974 5 -a 543 652 10 -a 543 904 7 -a 543 82 1 -a 543 494 5 -a 543 373 7 -a 543 427 7 -a 543 941 10 -a 543 178 5 -a 543 73 5 -a 543 21 1 -a 543 509 7 -a 543 58 7 -a 543 21 7 -a 543 354 3 -a 543 672 8 -a 543 148 1 -a 543 198 10 -a 543 685 10 -a 543 428 5 -a 543 48 4 -a 543 234 8 -a 543 900 10 -a 543 53 8 -a 543 346 4 -a 543 166 7 -a 543 621 9 -a 543 144 2 -a 543 196 2 -a 543 729 1 -a 543 248 3 -a 543 145 8 -a 543 356 3 -a 543 127 10 -a 543 226 2 -a 543 850 3 -a 543 500 4 -a 543 652 8 -a 543 766 2 -a 543 677 8 -a 543 725 6 -a 543 786 1 -a 543 162 5 -a 543 782 10 -a 543 806 10 -a 543 515 2 -a 543 430 7 -a 543 953 4 -a 543 712 9 -a 543 90 9 -a 543 356 10 -a 543 760 9 -a 543 323 3 -a 543 231 2 -a 543 812 3 -a 543 668 5 -a 543 397 5 -a 543 408 10 -a 543 812 10 -a 543 592 1 -a 543 112 10 -a 543 35 4 -a 543 736 7 -a 543 467 3 -a 543 161 3 -a 543 962 6 -a 543 292 4 -a 543 660 6 -a 543 589 5 -a 543 33 8 -a 543 313 6 -a 543 289 6 -a 543 818 3 -a 543 474 8 -a 543 47 3 -a 543 599 2 -a 543 988 5 -a 543 476 7 -a 544 528 1 -a 544 675 10 -a 544 565 9 -a 544 883 10 -a 544 410 3 -a 544 887 9 -a 544 90 9 -a 544 197 9 -a 544 531 6 -a 544 486 1 -a 544 604 1 -a 544 318 6 -a 544 53 4 -a 544 715 6 -a 544 352 10 -a 544 788 4 -a 544 158 6 -a 544 512 7 -a 544 725 1 -a 544 449 4 -a 544 148 6 -a 544 290 10 -a 544 482 2 -a 544 460 2 -a 544 578 7 -a 544 275 10 -a 544 933 7 -a 544 624 1 -a 544 874 4 -a 544 896 7 -a 544 75 1 -a 544 377 9 -a 544 546 10 -a 544 639 6 -a 544 235 2 -a 544 956 8 -a 544 502 2 -a 544 324 1 -a 544 128 6 -a 544 8 1 -a 544 809 3 -a 544 732 10 -a 544 325 6 -a 544 861 7 -a 544 422 2 -a 544 676 9 -a 544 625 2 -a 544 579 3 -a 544 163 3 -a 544 325 5 -a 544 4 8 -a 544 310 6 -a 544 614 3 -a 544 485 10 -a 544 769 6 -a 544 168 10 -a 544 759 9 -a 544 677 10 -a 544 791 9 -a 544 608 4 -a 544 548 5 -a 544 866 9 -a 544 984 2 -a 544 70 10 -a 544 480 4 -a 544 195 1 -a 544 1 5 -a 544 981 9 -a 544 518 7 -a 544 128 4 -a 544 988 9 -a 544 303 8 -a 544 859 9 -a 544 288 9 -a 544 139 3 -a 544 257 7 -a 544 963 2 -a 544 763 4 -a 544 835 6 -a 544 102 3 -a 544 64 1 -a 544 838 1 -a 544 411 7 -a 544 677 9 -a 544 298 2 -a 544 156 2 -a 544 844 1 -a 544 33 10 -a 544 832 10 -a 544 611 7 -a 544 640 7 -a 544 356 5 -a 544 452 2 -a 544 600 9 -a 544 425 7 -a 544 931 4 -a 545 794 9 -a 545 425 3 -a 545 888 3 -a 545 287 5 -a 545 552 5 -a 545 851 5 -a 545 589 1 -a 545 387 2 -a 545 115 10 -a 545 728 10 -a 545 643 4 -a 545 53 8 -a 545 466 10 -a 545 453 1 -a 545 154 1 -a 545 529 10 -a 545 267 7 -a 545 565 5 -a 545 182 4 -a 545 564 4 -a 545 720 3 -a 545 1 8 -a 545 596 2 -a 545 527 9 -a 545 611 5 -a 545 212 2 -a 545 882 1 -a 545 38 7 -a 545 811 2 -a 545 282 10 -a 545 969 5 -a 545 580 6 -a 545 706 7 -a 545 832 5 -a 545 866 2 -a 545 234 10 -a 545 658 8 -a 545 431 5 -a 545 620 10 -a 545 772 9 -a 545 134 2 -a 545 238 1 -a 545 825 5 -a 545 599 3 -a 545 690 1 -a 545 978 5 -a 545 104 2 -a 545 956 7 -a 545 518 2 -a 545 285 8 -a 545 496 2 -a 545 213 9 -a 545 285 6 -a 545 67 7 -a 545 740 5 -a 545 896 2 -a 545 278 10 -a 545 597 9 -a 545 933 2 -a 545 64 10 -a 545 879 6 -a 545 877 8 -a 545 643 6 -a 545 560 9 -a 545 684 4 -a 545 485 10 -a 545 793 2 -a 545 318 2 -a 545 915 6 -a 545 388 3 -a 545 65 5 -a 545 24 5 -a 545 625 4 -a 545 889 2 -a 545 622 5 -a 545 291 10 -a 545 843 10 -a 545 725 7 -a 545 222 5 -a 545 336 1 -a 545 717 2 -a 545 549 6 -a 545 270 7 -a 545 784 9 -a 545 264 4 -a 545 141 9 -a 545 37 10 -a 545 860 10 -a 545 49 6 -a 545 101 6 -a 545 714 10 -a 545 926 4 -a 545 743 7 -a 545 250 5 -a 545 585 1 -a 545 203 3 -a 545 18 5 -a 545 902 4 -a 546 93 5 -a 546 406 5 -a 546 967 2 -a 546 116 3 -a 546 6 10 -a 546 831 7 -a 546 738 4 -a 546 296 1 -a 546 649 10 -a 546 438 6 -a 546 518 7 -a 546 985 7 -a 546 423 10 -a 546 210 2 -a 546 509 7 -a 546 692 6 -a 546 993 4 -a 546 772 8 -a 546 832 4 -a 546 6 7 -a 546 607 7 -a 546 880 3 -a 546 106 2 -a 546 297 7 -a 546 781 10 -a 546 848 3 -a 546 546 3 -a 546 342 9 -a 546 27 7 -a 546 563 5 -a 546 219 8 -a 546 119 3 -a 546 968 2 -a 546 161 5 -a 546 235 8 -a 546 974 8 -a 546 992 1 -a 546 972 9 -a 546 245 2 -a 546 616 5 -a 546 385 4 -a 546 762 2 -a 546 576 10 -a 546 807 4 -a 546 972 7 -a 546 60 10 -a 546 474 8 -a 546 940 5 -a 546 831 2 -a 546 281 7 -a 546 945 9 -a 546 414 9 -a 546 137 2 -a 546 26 6 -a 546 710 3 -a 546 917 2 -a 546 874 1 -a 546 231 3 -a 546 234 2 -a 546 900 8 -a 546 793 6 -a 546 453 2 -a 546 737 9 -a 546 613 1 -a 546 228 7 -a 546 686 6 -a 546 580 5 -a 546 175 7 -a 546 930 3 -a 546 172 1 -a 546 560 2 -a 546 668 10 -a 546 747 5 -a 546 342 3 -a 546 615 1 -a 546 807 7 -a 546 816 6 -a 546 530 7 -a 546 613 9 -a 546 72 7 -a 546 451 7 -a 546 2 1 -a 546 208 8 -a 547 476 10 -a 547 711 9 -a 547 101 1 -a 547 325 7 -a 547 941 4 -a 547 334 1 -a 547 200 10 -a 547 710 1 -a 547 786 8 -a 547 194 5 -a 547 422 7 -a 547 375 1 -a 547 421 9 -a 547 83 8 -a 547 954 8 -a 547 596 4 -a 547 101 4 -a 547 131 5 -a 547 655 5 -a 547 848 7 -a 547 472 4 -a 547 245 6 -a 547 630 9 -a 547 263 8 -a 547 775 1 -a 547 218 10 -a 547 335 1 -a 547 201 10 -a 547 220 6 -a 547 542 9 -a 547 676 1 -a 547 930 3 -a 547 642 6 -a 547 847 6 -a 547 976 1 -a 547 176 3 -a 547 532 5 -a 547 737 4 -a 547 369 1 -a 547 953 4 -a 547 87 3 -a 547 790 7 -a 547 11 8 -a 547 17 6 -a 547 361 9 -a 547 117 7 -a 547 491 9 -a 547 653 10 -a 547 964 7 -a 547 962 2 -a 547 897 7 -a 547 569 5 -a 547 201 2 -a 547 647 10 -a 547 787 9 -a 547 535 4 -a 547 847 8 -a 547 52 3 -a 547 499 4 -a 547 911 5 -a 547 694 1 -a 547 475 2 -a 547 733 7 -a 547 645 5 -a 547 650 5 -a 547 240 6 -a 547 357 6 -a 547 168 3 -a 547 444 7 -a 547 784 8 -a 547 178 8 -a 547 460 5 -a 547 120 2 -a 547 176 6 -a 547 576 1 -a 547 610 5 -a 547 828 9 -a 547 516 8 -a 547 547 1 -a 547 700 6 -a 547 60 2 -a 547 747 2 -a 547 323 10 -a 547 846 6 -a 547 257 6 -a 547 145 7 -a 547 827 3 -a 547 309 5 -a 547 643 5 -a 547 714 3 -a 547 93 10 -a 547 422 5 -a 547 622 2 -a 547 743 4 -a 547 662 10 -a 547 978 9 -a 547 737 5 -a 547 829 3 -a 547 397 1 -a 547 496 2 -a 547 856 1 -a 547 615 8 -a 547 158 7 -a 547 408 7 -a 547 200 6 -a 547 985 9 -a 548 923 9 -a 548 746 10 -a 548 660 10 -a 548 982 9 -a 548 469 5 -a 548 982 5 -a 548 804 4 -a 548 725 2 -a 548 103 7 -a 548 606 8 -a 548 9 1 -a 548 745 8 -a 548 295 5 -a 548 838 3 -a 548 717 9 -a 548 607 5 -a 548 556 10 -a 548 354 5 -a 548 561 7 -a 548 268 1 -a 548 158 4 -a 548 957 6 -a 548 763 3 -a 548 140 7 -a 548 789 9 -a 548 353 8 -a 548 297 6 -a 548 172 4 -a 548 552 4 -a 548 257 9 -a 548 70 4 -a 548 273 10 -a 548 917 1 -a 548 27 9 -a 548 741 9 -a 548 874 2 -a 548 830 1 -a 548 442 2 -a 548 976 2 -a 548 412 6 -a 548 450 8 -a 548 697 2 -a 548 706 7 -a 548 436 8 -a 548 510 4 -a 548 398 3 -a 548 18 4 -a 548 41 7 -a 548 751 4 -a 548 578 1 -a 548 308 5 -a 548 909 7 -a 548 511 10 -a 548 46 5 -a 548 24 6 -a 548 275 1 -a 548 398 2 -a 548 321 7 -a 548 446 7 -a 548 949 7 -a 548 577 4 -a 548 515 8 -a 548 197 1 -a 548 469 4 -a 548 541 2 -a 548 938 3 -a 548 319 1 -a 548 347 4 -a 548 355 4 -a 548 270 4 -a 548 758 3 -a 548 804 7 -a 548 966 9 -a 548 439 2 -a 548 215 3 -a 548 451 4 -a 548 837 2 -a 548 233 4 -a 548 491 5 -a 548 563 10 -a 548 810 5 -a 548 798 8 -a 548 447 2 -a 548 296 1 -a 548 843 8 -a 548 471 1 -a 548 570 2 -a 548 216 8 -a 548 791 2 -a 548 140 6 -a 549 343 4 -a 549 505 8 -a 549 337 6 -a 549 812 6 -a 549 22 9 -a 549 250 1 -a 549 106 4 -a 549 368 10 -a 549 604 9 -a 549 375 5 -a 549 101 9 -a 549 383 4 -a 549 317 7 -a 549 539 5 -a 549 598 6 -a 549 767 3 -a 549 351 3 -a 549 830 2 -a 549 234 1 -a 549 914 9 -a 549 615 9 -a 549 7 7 -a 549 336 4 -a 549 911 6 -a 549 850 6 -a 549 806 9 -a 549 456 7 -a 549 41 10 -a 549 572 8 -a 549 447 4 -a 549 181 3 -a 549 915 3 -a 549 951 2 -a 549 517 2 -a 549 702 5 -a 549 972 1 -a 549 766 8 -a 549 807 9 -a 549 315 6 -a 549 345 1 -a 549 157 7 -a 549 415 3 -a 549 727 2 -a 549 473 6 -a 549 954 5 -a 549 300 2 -a 549 216 7 -a 549 280 3 -a 549 105 2 -a 549 449 9 -a 549 169 5 -a 549 720 4 -a 549 455 7 -a 549 505 9 -a 549 606 2 -a 549 280 6 -a 549 286 9 -a 549 37 1 -a 549 321 2 -a 549 858 6 -a 549 483 8 -a 549 501 6 -a 549 748 2 -a 549 410 5 -a 549 425 3 -a 549 357 10 -a 549 758 6 -a 549 207 8 -a 549 672 10 -a 549 78 4 -a 549 363 7 -a 549 62 7 -a 549 804 6 -a 549 836 9 -a 549 80 10 -a 549 27 6 -a 549 271 2 -a 549 184 8 -a 549 475 3 -a 549 439 10 -a 549 903 9 -a 549 929 9 -a 549 943 6 -a 549 484 9 -a 549 185 3 -a 549 205 5 -a 549 521 3 -a 549 505 6 -a 549 38 9 -a 549 785 4 -a 549 388 7 -a 549 997 5 -a 549 185 6 -a 549 745 7 -a 549 730 8 -a 549 391 5 -a 550 392 3 -a 550 807 10 -a 550 753 2 -a 550 453 4 -a 550 586 4 -a 550 564 6 -a 550 444 4 -a 550 665 6 -a 550 590 5 -a 550 714 2 -a 550 849 5 -a 550 40 9 -a 550 128 10 -a 550 727 6 -a 550 969 2 -a 550 47 4 -a 550 187 9 -a 550 129 9 -a 550 251 10 -a 550 707 6 -a 550 633 9 -a 550 288 10 -a 550 685 4 -a 550 613 10 -a 550 48 2 -a 550 49 1 -a 550 585 10 -a 550 232 9 -a 550 793 3 -a 550 290 6 -a 550 622 6 -a 550 160 4 -a 550 72 9 -a 550 350 8 -a 550 612 10 -a 550 657 1 -a 550 914 5 -a 550 31 7 -a 550 298 10 -a 550 479 10 -a 550 744 5 -a 550 122 2 -a 550 519 3 -a 550 872 8 -a 550 848 2 -a 550 463 5 -a 550 918 6 -a 550 10 7 -a 550 591 1 -a 550 144 9 -a 550 716 9 -a 550 199 2 -a 550 431 10 -a 550 377 2 -a 550 811 5 -a 550 478 9 -a 550 425 2 -a 550 371 9 -a 550 709 3 -a 550 193 4 -a 550 660 5 -a 550 306 9 -a 550 352 6 -a 550 731 3 -a 550 655 6 -a 550 963 6 -a 550 363 7 -a 550 544 2 -a 550 994 8 -a 550 660 7 -a 550 713 9 -a 550 781 6 -a 550 517 10 -a 550 560 4 -a 550 605 5 -a 550 979 4 -a 550 453 6 -a 550 614 8 -a 550 545 10 -a 550 596 3 -a 550 306 9 -a 550 743 3 -a 550 2 7 -a 550 682 2 -a 550 529 8 -a 550 479 4 -a 550 82 2 -a 550 899 10 -a 550 163 6 -a 550 274 2 -a 550 534 7 -a 550 468 10 -a 550 625 7 -a 551 240 3 -a 551 99 10 -a 551 563 7 -a 551 602 8 -a 551 642 6 -a 551 532 8 -a 551 238 10 -a 551 640 7 -a 551 221 4 -a 551 132 9 -a 551 780 4 -a 551 598 8 -a 551 86 10 -a 551 209 1 -a 551 188 1 -a 551 630 7 -a 551 804 1 -a 551 493 1 -a 551 348 6 -a 551 806 3 -a 551 150 2 -a 551 876 8 -a 551 260 7 -a 551 231 5 -a 551 750 9 -a 551 423 10 -a 551 504 1 -a 551 259 8 -a 551 890 8 -a 551 104 7 -a 551 498 3 -a 551 988 6 -a 551 666 2 -a 551 76 8 -a 551 606 6 -a 551 174 3 -a 551 313 1 -a 551 221 1 -a 551 394 3 -a 551 306 1 -a 551 353 5 -a 551 149 10 -a 551 904 8 -a 551 438 1 -a 551 357 9 -a 551 67 8 -a 551 44 1 -a 551 137 7 -a 551 559 3 -a 551 391 9 -a 551 942 6 -a 551 708 8 -a 551 243 10 -a 551 177 9 -a 551 938 9 -a 551 992 9 -a 551 599 9 -a 551 417 4 -a 551 227 6 -a 551 465 9 -a 551 520 1 -a 551 724 2 -a 551 428 1 -a 551 161 4 -a 551 799 3 -a 551 9 9 -a 551 334 9 -a 551 87 10 -a 551 230 3 -a 551 727 6 -a 551 393 7 -a 551 582 4 -a 551 876 8 -a 551 272 8 -a 551 208 1 -a 551 338 3 -a 551 38 10 -a 551 344 3 -a 551 896 8 -a 551 429 9 -a 551 261 1 -a 551 579 6 -a 551 671 1 -a 551 438 10 -a 551 492 3 -a 551 638 4 -a 551 12 2 -a 551 908 6 -a 551 864 7 -a 551 476 3 -a 551 403 4 -a 551 564 6 -a 551 904 6 -a 551 563 7 -a 551 338 7 -a 552 912 10 -a 552 897 8 -a 552 425 2 -a 552 117 4 -a 552 599 8 -a 552 817 1 -a 552 698 2 -a 552 450 2 -a 552 64 7 -a 552 693 9 -a 552 658 10 -a 552 401 3 -a 552 730 4 -a 552 272 9 -a 552 134 6 -a 552 238 8 -a 552 850 6 -a 552 804 4 -a 552 675 6 -a 552 317 4 -a 552 418 2 -a 552 686 2 -a 552 200 9 -a 552 257 7 -a 552 138 10 -a 552 602 7 -a 552 820 9 -a 552 17 7 -a 552 140 1 -a 552 134 1 -a 552 928 4 -a 552 12 10 -a 552 558 7 -a 552 21 8 -a 552 611 7 -a 552 350 2 -a 552 718 1 -a 552 36 5 -a 552 413 2 -a 552 386 10 -a 552 693 6 -a 552 813 9 -a 552 92 5 -a 552 670 6 -a 552 60 1 -a 552 225 6 -a 552 907 10 -a 552 909 3 -a 552 5 6 -a 552 557 4 -a 552 201 1 -a 552 422 3 -a 552 218 1 -a 552 400 1 -a 552 678 2 -a 552 355 2 -a 552 474 5 -a 552 371 7 -a 552 116 2 -a 552 607 1 -a 552 275 2 -a 552 128 7 -a 552 140 10 -a 552 295 9 -a 552 738 4 -a 552 489 8 -a 552 773 8 -a 552 901 10 -a 552 374 8 -a 552 442 10 -a 552 689 4 -a 552 465 3 -a 552 87 10 -a 552 748 4 -a 552 689 10 -a 552 993 1 -a 552 632 3 -a 552 693 7 -a 552 525 7 -a 552 832 2 -a 552 90 8 -a 552 742 8 -a 552 207 2 -a 552 768 1 -a 552 73 10 -a 552 183 10 -a 552 217 5 -a 552 443 6 -a 552 298 8 -a 552 823 1 -a 552 717 3 -a 552 425 7 -a 552 962 4 -a 552 138 5 -a 552 426 7 -a 552 999 4 -a 552 911 9 -a 552 302 5 -a 552 348 4 -a 552 328 3 -a 552 990 7 -a 552 812 9 -a 552 414 5 -a 552 713 7 -a 552 476 7 -a 552 382 10 -a 553 320 9 -a 553 145 8 -a 553 906 4 -a 553 127 2 -a 553 234 9 -a 553 623 9 -a 553 333 7 -a 553 695 6 -a 553 515 9 -a 553 193 9 -a 553 114 2 -a 553 812 1 -a 553 830 3 -a 553 213 6 -a 553 952 4 -a 553 817 5 -a 553 350 1 -a 553 353 9 -a 553 791 4 -a 553 236 9 -a 553 654 8 -a 553 114 9 -a 553 563 6 -a 553 619 4 -a 553 925 2 -a 553 976 9 -a 553 307 10 -a 553 376 4 -a 553 333 4 -a 553 626 6 -a 553 520 7 -a 553 214 4 -a 553 752 5 -a 553 754 8 -a 553 837 1 -a 553 60 2 -a 553 730 8 -a 553 507 10 -a 553 574 7 -a 553 923 9 -a 553 620 1 -a 553 362 10 -a 553 913 8 -a 553 426 9 -a 553 574 6 -a 553 841 3 -a 553 218 9 -a 553 923 8 -a 553 169 7 -a 553 135 6 -a 553 823 10 -a 553 97 10 -a 553 697 2 -a 553 417 1 -a 553 649 9 -a 553 724 10 -a 553 372 9 -a 553 981 2 -a 553 325 9 -a 553 892 1 -a 553 171 4 -a 553 53 6 -a 553 621 8 -a 553 112 3 -a 553 326 3 -a 553 489 1 -a 553 686 8 -a 553 224 3 -a 553 85 10 -a 553 23 8 -a 553 113 6 -a 553 510 7 -a 553 596 5 -a 553 953 1 -a 553 727 4 -a 553 494 5 -a 553 97 2 -a 553 710 4 -a 553 628 10 -a 553 919 8 -a 553 806 9 -a 553 301 5 -a 553 312 3 -a 553 802 6 -a 553 949 6 -a 553 11 6 -a 553 149 3 -a 553 905 4 -a 553 335 8 -a 553 16 3 -a 553 51 1 -a 553 387 5 -a 553 636 9 -a 553 33 7 -a 553 499 9 -a 553 962 4 -a 553 522 7 -a 553 160 8 -a 553 161 8 -a 553 606 7 -a 553 182 2 -a 553 273 10 -a 553 91 10 -a 553 777 7 -a 553 201 8 -a 553 817 5 -a 553 246 4 -a 553 298 1 -a 553 502 7 -a 553 874 7 -a 553 192 8 -a 553 283 4 -a 553 150 10 -a 553 503 8 -a 554 60 8 -a 554 74 2 -a 554 513 5 -a 554 208 5 -a 554 978 10 -a 554 848 3 -a 554 224 6 -a 554 5 7 -a 554 210 4 -a 554 859 5 -a 554 37 1 -a 554 708 1 -a 554 796 1 -a 554 558 8 -a 554 867 6 -a 554 957 9 -a 554 139 2 -a 554 24 1 -a 554 205 4 -a 554 229 3 -a 554 800 5 -a 554 406 1 -a 554 21 10 -a 554 22 1 -a 554 703 2 -a 554 522 8 -a 554 895 5 -a 554 894 9 -a 554 804 10 -a 554 20 1 -a 554 373 4 -a 554 863 5 -a 554 93 2 -a 554 885 4 -a 554 47 1 -a 554 46 2 -a 554 708 4 -a 554 270 4 -a 554 50 6 -a 554 918 2 -a 554 104 2 -a 554 87 10 -a 554 601 3 -a 554 900 3 -a 554 644 3 -a 554 444 10 -a 554 832 2 -a 554 783 6 -a 554 467 8 -a 554 12 2 -a 554 243 1 -a 554 417 1 -a 554 8 1 -a 554 264 3 -a 554 95 1 -a 554 529 4 -a 554 134 5 -a 554 989 6 -a 554 309 4 -a 554 153 6 -a 554 337 1 -a 554 147 7 -a 554 245 9 -a 554 197 6 -a 554 193 8 -a 554 290 10 -a 554 905 10 -a 554 462 6 -a 554 340 2 -a 554 798 3 -a 554 566 4 -a 554 426 1 -a 554 374 2 -a 554 441 5 -a 554 45 1 -a 554 817 2 -a 554 248 4 -a 554 827 2 -a 554 260 6 -a 554 259 9 -a 554 814 2 -a 554 502 1 -a 554 676 7 -a 554 821 1 -a 554 765 2 -a 554 770 6 -a 554 325 10 -a 554 898 8 -a 554 734 5 -a 554 633 3 -a 554 26 7 -a 554 46 2 -a 554 780 9 -a 554 270 3 -a 554 243 2 -a 554 972 10 -a 554 559 7 -a 554 123 2 -a 554 410 7 -a 555 898 9 -a 555 920 7 -a 555 975 4 -a 555 299 5 -a 555 269 7 -a 555 391 6 -a 555 344 3 -a 555 62 1 -a 555 638 1 -a 555 146 7 -a 555 321 7 -a 555 896 6 -a 555 959 8 -a 555 822 7 -a 555 547 8 -a 555 755 9 -a 555 562 10 -a 555 293 10 -a 555 56 8 -a 555 435 9 -a 555 2 5 -a 555 688 8 -a 555 460 5 -a 555 48 2 -a 555 443 1 -a 555 729 3 -a 555 290 6 -a 555 391 7 -a 555 263 8 -a 555 412 9 -a 555 800 3 -a 555 137 6 -a 555 307 3 -a 555 750 3 -a 555 435 7 -a 555 575 9 -a 555 116 9 -a 555 778 5 -a 555 636 5 -a 555 753 8 -a 555 924 3 -a 555 956 1 -a 555 624 5 -a 555 858 10 -a 555 753 9 -a 555 147 9 -a 555 589 1 -a 555 290 4 -a 555 439 4 -a 555 644 3 -a 555 724 4 -a 555 440 10 -a 555 307 6 -a 555 159 7 -a 555 487 7 -a 555 750 10 -a 555 887 4 -a 555 776 6 -a 555 116 5 -a 555 126 9 -a 555 163 4 -a 555 915 4 -a 555 262 6 -a 555 469 5 -a 555 640 2 -a 555 696 4 -a 555 20 3 -a 555 755 6 -a 555 450 4 -a 555 655 9 -a 555 483 7 -a 555 349 4 -a 555 587 3 -a 555 82 6 -a 555 182 2 -a 555 315 2 -a 555 228 1 -a 555 770 8 -a 555 605 10 -a 555 666 4 -a 555 389 1 -a 555 304 3 -a 555 82 9 -a 555 696 3 -a 555 463 8 -a 556 568 2 -a 556 421 4 -a 556 325 6 -a 556 320 10 -a 556 536 9 -a 556 450 6 -a 556 482 5 -a 556 426 5 -a 556 711 7 -a 556 951 6 -a 556 41 3 -a 556 383 4 -a 556 970 6 -a 556 795 10 -a 556 832 9 -a 556 600 5 -a 556 253 8 -a 556 156 4 -a 556 162 5 -a 556 334 7 -a 556 337 4 -a 556 477 6 -a 556 562 2 -a 556 83 3 -a 556 57 7 -a 556 203 6 -a 556 471 1 -a 556 360 9 -a 556 284 2 -a 556 142 5 -a 556 822 2 -a 556 852 3 -a 556 562 6 -a 556 123 9 -a 556 147 6 -a 556 73 9 -a 556 572 7 -a 556 628 3 -a 556 498 7 -a 556 259 1 -a 556 554 8 -a 556 538 6 -a 556 641 2 -a 556 499 8 -a 556 308 6 -a 556 448 1 -a 556 75 4 -a 556 560 6 -a 556 603 10 -a 556 236 5 -a 556 894 2 -a 556 939 6 -a 556 712 2 -a 556 431 7 -a 556 768 7 -a 556 633 1 -a 556 468 4 -a 556 104 3 -a 556 917 10 -a 556 609 8 -a 556 925 3 -a 556 744 1 -a 556 147 2 -a 556 23 4 -a 556 890 3 -a 556 219 2 -a 556 595 2 -a 556 493 7 -a 556 717 7 -a 556 853 4 -a 556 23 6 -a 556 230 9 -a 556 469 5 -a 556 521 5 -a 556 538 6 -a 556 916 1 -a 556 595 4 -a 556 73 2 -a 556 494 10 -a 556 831 2 -a 556 966 7 -a 556 408 5 -a 556 518 8 -a 556 372 7 -a 556 405 8 -a 556 262 5 -a 556 872 9 -a 556 365 7 -a 556 897 10 -a 556 456 10 -a 556 265 7 -a 556 616 3 -a 556 602 8 -a 556 288 10 -a 556 481 4 -a 556 821 10 -a 556 882 7 -a 556 973 6 -a 556 513 4 -a 556 710 6 -a 556 995 4 -a 556 742 4 -a 556 154 10 -a 556 492 3 -a 557 255 5 -a 557 45 5 -a 557 62 10 -a 557 328 1 -a 557 538 5 -a 557 892 3 -a 557 269 8 -a 557 945 7 -a 557 386 1 -a 557 641 6 -a 557 325 10 -a 557 647 9 -a 557 621 4 -a 557 172 8 -a 557 493 9 -a 557 628 7 -a 557 251 4 -a 557 84 10 -a 557 205 7 -a 557 538 7 -a 557 564 4 -a 557 1 10 -a 557 395 4 -a 557 512 1 -a 557 513 5 -a 557 80 5 -a 557 483 9 -a 557 231 8 -a 557 233 6 -a 557 974 10 -a 557 485 4 -a 557 277 10 -a 557 11 2 -a 557 812 1 -a 557 814 4 -a 557 903 7 -a 557 57 9 -a 557 735 3 -a 557 264 7 -a 557 697 9 -a 557 35 10 -a 557 910 3 -a 557 293 1 -a 557 207 1 -a 557 896 6 -a 557 785 10 -a 557 834 5 -a 557 122 6 -a 557 868 3 -a 557 14 6 -a 557 660 10 -a 557 407 3 -a 557 15 3 -a 557 30 6 -a 557 918 6 -a 557 527 7 -a 557 110 1 -a 557 376 5 -a 557 757 3 -a 557 342 3 -a 557 325 6 -a 557 218 1 -a 557 619 2 -a 557 336 6 -a 557 5 5 -a 557 408 8 -a 557 214 3 -a 557 61 7 -a 557 118 2 -a 557 477 8 -a 557 757 1 -a 557 153 10 -a 557 362 2 -a 557 25 8 -a 557 359 5 -a 557 233 5 -a 557 809 7 -a 557 168 3 -a 557 354 3 -a 557 652 1 -a 557 181 3 -a 557 34 3 -a 557 195 7 -a 557 19 6 -a 557 952 2 -a 557 722 7 -a 557 128 9 -a 557 303 7 -a 557 454 3 -a 557 469 2 -a 557 628 1 -a 557 671 9 -a 557 63 10 -a 557 963 5 -a 557 676 4 -a 557 471 8 -a 557 152 9 -a 557 736 4 -a 557 588 5 -a 557 628 6 -a 557 469 7 -a 557 740 4 -a 557 989 9 -a 557 493 1 -a 557 74 1 -a 557 197 7 -a 557 278 6 -a 557 241 8 -a 558 550 8 -a 558 929 4 -a 558 422 9 -a 558 539 8 -a 558 963 6 -a 558 616 3 -a 558 557 3 -a 558 890 4 -a 558 313 8 -a 558 684 10 -a 558 168 3 -a 558 767 2 -a 558 128 8 -a 558 795 10 -a 558 413 4 -a 558 191 10 -a 558 733 1 -a 558 64 10 -a 558 661 7 -a 558 884 1 -a 558 800 5 -a 558 224 6 -a 558 487 1 -a 558 244 3 -a 558 964 3 -a 558 451 2 -a 558 736 8 -a 558 13 3 -a 558 647 4 -a 558 254 10 -a 558 173 5 -a 558 918 5 -a 558 675 7 -a 558 711 6 -a 558 856 1 -a 558 266 10 -a 558 243 4 -a 558 721 5 -a 558 579 5 -a 558 926 9 -a 558 888 5 -a 558 321 8 -a 558 29 4 -a 558 659 9 -a 558 733 2 -a 558 219 6 -a 558 367 9 -a 558 797 10 -a 558 879 4 -a 558 227 7 -a 558 572 5 -a 558 79 1 -a 558 713 10 -a 558 815 7 -a 558 18 7 -a 558 140 7 -a 558 526 4 -a 558 30 3 -a 558 786 7 -a 558 515 6 -a 558 283 2 -a 558 958 9 -a 558 408 9 -a 558 957 2 -a 558 644 1 -a 558 239 8 -a 558 199 7 -a 558 886 7 -a 558 959 5 -a 558 777 10 -a 558 787 4 -a 558 822 8 -a 558 73 6 -a 558 816 1 -a 558 456 4 -a 558 805 3 -a 558 10 7 -a 558 823 7 -a 558 577 5 -a 558 889 4 -a 558 25 7 -a 558 124 6 -a 558 967 9 -a 558 737 5 -a 558 938 1 -a 558 984 7 -a 558 876 1 -a 558 440 4 -a 559 638 9 -a 559 954 4 -a 559 272 4 -a 559 571 3 -a 559 337 9 -a 559 204 3 -a 559 191 3 -a 559 575 10 -a 559 402 10 -a 559 52 6 -a 559 509 10 -a 559 154 2 -a 559 839 2 -a 559 306 1 -a 559 226 2 -a 559 630 7 -a 559 762 4 -a 559 7 8 -a 559 639 7 -a 559 560 6 -a 559 583 3 -a 559 503 7 -a 559 584 2 -a 559 707 2 -a 559 445 10 -a 559 296 9 -a 559 620 1 -a 559 404 7 -a 559 148 2 -a 559 35 9 -a 559 393 3 -a 559 785 8 -a 559 988 4 -a 559 664 4 -a 559 331 5 -a 559 300 7 -a 559 867 1 -a 559 521 9 -a 559 874 8 -a 559 245 6 -a 559 573 6 -a 559 358 5 -a 559 398 7 -a 559 387 9 -a 559 664 1 -a 559 624 6 -a 559 401 9 -a 559 630 8 -a 559 630 7 -a 559 960 5 -a 559 188 9 -a 559 109 1 -a 559 519 7 -a 559 894 4 -a 559 553 6 -a 559 814 8 -a 559 490 8 -a 559 957 6 -a 559 961 7 -a 559 524 3 -a 559 325 7 -a 559 721 1 -a 559 488 3 -a 559 988 4 -a 559 28 3 -a 559 787 3 -a 559 830 10 -a 559 548 9 -a 559 637 9 -a 559 50 1 -a 559 96 1 -a 559 994 4 -a 559 448 9 -a 559 482 7 -a 559 633 5 -a 559 47 3 -a 559 473 5 -a 559 9 3 -a 559 676 8 -a 559 79 3 -a 559 968 8 -a 559 863 1 -a 559 187 5 -a 559 462 2 -a 559 733 3 -a 559 739 7 -a 559 252 5 -a 559 198 4 -a 559 671 10 -a 559 188 1 -a 559 721 1 -a 559 995 10 -a 559 909 3 -a 560 184 1 -a 560 958 5 -a 560 936 3 -a 560 971 1 -a 560 764 3 -a 560 459 6 -a 560 583 10 -a 560 813 4 -a 560 555 2 -a 560 552 9 -a 560 236 1 -a 560 12 9 -a 560 161 6 -a 560 282 6 -a 560 485 9 -a 560 169 8 -a 560 957 1 -a 560 563 3 -a 560 113 5 -a 560 796 1 -a 560 749 9 -a 560 574 4 -a 560 504 10 -a 560 463 4 -a 560 825 4 -a 560 701 4 -a 560 110 3 -a 560 397 6 -a 560 80 1 -a 560 897 8 -a 560 581 5 -a 560 14 10 -a 560 808 1 -a 560 527 8 -a 560 777 9 -a 560 242 8 -a 560 85 7 -a 560 565 1 -a 560 796 4 -a 560 636 1 -a 560 801 6 -a 560 808 9 -a 560 796 9 -a 560 58 10 -a 560 268 2 -a 560 965 10 -a 560 830 10 -a 560 53 3 -a 560 786 1 -a 560 554 6 -a 560 626 1 -a 560 265 6 -a 560 427 7 -a 560 965 8 -a 560 101 3 -a 560 415 7 -a 560 337 3 -a 560 181 4 -a 560 287 3 -a 560 917 2 -a 560 194 5 -a 560 70 8 -a 560 419 5 -a 560 970 4 -a 560 311 8 -a 560 503 7 -a 560 510 1 -a 560 83 1 -a 560 115 10 -a 560 286 3 -a 560 890 10 -a 560 910 8 -a 560 344 6 -a 560 133 9 -a 560 850 8 -a 560 334 3 -a 560 962 4 -a 560 902 5 -a 560 95 5 -a 560 491 2 -a 560 504 9 -a 560 359 7 -a 560 482 4 -a 560 930 9 -a 560 299 3 -a 560 583 1 -a 560 320 9 -a 560 635 9 -a 560 763 6 -a 560 606 2 -a 560 528 7 -a 560 956 10 -a 560 675 4 -a 560 946 7 -a 560 901 9 -a 560 985 6 -a 560 425 4 -a 560 386 9 -a 560 43 8 -a 560 539 5 -a 560 672 9 -a 561 932 4 -a 561 424 9 -a 561 40 2 -a 561 250 9 -a 561 324 1 -a 561 127 4 -a 561 418 9 -a 561 467 1 -a 561 630 6 -a 561 776 5 -a 561 949 2 -a 561 535 10 -a 561 50 7 -a 561 507 1 -a 561 854 7 -a 561 684 5 -a 561 245 7 -a 561 435 4 -a 561 187 1 -a 561 176 4 -a 561 85 7 -a 561 109 4 -a 561 52 5 -a 561 46 8 -a 561 533 8 -a 561 437 1 -a 561 88 4 -a 561 47 6 -a 561 84 9 -a 561 470 3 -a 561 74 9 -a 561 35 10 -a 561 719 1 -a 561 397 10 -a 561 12 8 -a 561 846 9 -a 561 814 8 -a 561 478 1 -a 561 451 5 -a 561 565 3 -a 561 402 10 -a 561 986 3 -a 561 614 9 -a 561 908 8 -a 561 815 7 -a 561 274 8 -a 561 128 8 -a 561 226 6 -a 561 460 8 -a 561 303 2 -a 561 310 9 -a 561 568 6 -a 561 354 6 -a 561 355 6 -a 561 76 4 -a 561 791 10 -a 561 443 3 -a 561 122 4 -a 561 874 5 -a 561 438 9 -a 561 592 8 -a 561 948 8 -a 561 472 5 -a 561 286 10 -a 561 320 4 -a 561 483 2 -a 561 107 6 -a 561 110 9 -a 561 961 6 -a 561 558 8 -a 561 674 9 -a 561 338 6 -a 561 519 2 -a 561 264 5 -a 561 222 4 -a 561 309 3 -a 561 537 6 -a 561 349 7 -a 561 534 8 -a 561 996 10 -a 561 652 1 -a 561 844 6 -a 562 540 2 -a 562 174 8 -a 562 615 6 -a 562 771 1 -a 562 616 10 -a 562 737 2 -a 562 621 1 -a 562 29 5 -a 562 304 10 -a 562 544 10 -a 562 501 2 -a 562 589 3 -a 562 863 9 -a 562 983 7 -a 562 696 2 -a 562 972 10 -a 562 919 5 -a 562 229 7 -a 562 622 10 -a 562 233 8 -a 562 747 9 -a 562 885 4 -a 562 454 6 -a 562 31 7 -a 562 397 4 -a 562 802 9 -a 562 565 7 -a 562 368 2 -a 562 429 7 -a 562 384 2 -a 562 907 7 -a 562 410 4 -a 562 557 8 -a 562 498 6 -a 562 156 2 -a 562 149 6 -a 562 210 9 -a 562 776 6 -a 562 177 1 -a 562 513 3 -a 562 295 5 -a 562 677 5 -a 562 77 4 -a 562 134 2 -a 562 636 10 -a 562 772 5 -a 562 81 9 -a 562 530 7 -a 562 1000 7 -a 562 702 3 -a 562 762 2 -a 562 722 7 -a 562 562 4 -a 562 191 3 -a 562 753 1 -a 562 958 8 -a 562 993 3 -a 562 293 4 -a 562 302 7 -a 562 397 1 -a 562 676 3 -a 562 184 1 -a 562 806 1 -a 562 208 5 -a 562 681 5 -a 562 962 2 -a 562 356 1 -a 562 890 4 -a 562 713 5 -a 562 533 2 -a 562 378 9 -a 562 185 10 -a 562 455 3 -a 562 117 1 -a 562 820 3 -a 562 202 2 -a 562 197 5 -a 562 326 3 -a 562 178 5 -a 562 899 1 -a 562 63 2 -a 562 899 1 -a 562 436 5 -a 562 254 1 -a 562 627 9 -a 562 370 6 -a 562 222 10 -a 562 919 9 -a 562 671 5 -a 562 618 7 -a 562 570 6 -a 562 854 8 -a 562 400 5 -a 562 778 2 -a 562 511 6 -a 562 337 5 -a 562 109 4 -a 562 376 8 -a 562 25 4 -a 562 641 8 -a 562 754 10 -a 562 8 1 -a 562 826 4 -a 562 184 1 -a 562 124 5 -a 562 621 1 -a 562 385 9 -a 562 321 2 -a 562 946 2 -a 562 562 5 -a 562 195 7 -a 562 437 9 -a 562 630 3 -a 562 238 1 -a 562 39 10 -a 562 999 3 -a 562 459 3 -a 563 958 8 -a 563 645 6 -a 563 52 7 -a 563 503 1 -a 563 475 5 -a 563 451 8 -a 563 256 2 -a 563 985 7 -a 563 787 4 -a 563 365 9 -a 563 336 6 -a 563 812 2 -a 563 65 1 -a 563 819 1 -a 563 806 4 -a 563 248 1 -a 563 943 2 -a 563 403 3 -a 563 633 9 -a 563 239 9 -a 563 324 3 -a 563 170 3 -a 563 433 6 -a 563 308 2 -a 563 606 6 -a 563 38 10 -a 563 545 10 -a 563 645 5 -a 563 13 6 -a 563 578 7 -a 563 657 7 -a 563 31 3 -a 563 56 5 -a 563 107 6 -a 563 481 2 -a 563 312 7 -a 563 67 2 -a 563 244 10 -a 563 676 2 -a 563 403 7 -a 563 31 5 -a 563 656 3 -a 563 467 6 -a 563 849 5 -a 563 438 8 -a 563 715 2 -a 563 767 6 -a 563 840 6 -a 563 323 7 -a 563 139 3 -a 563 492 8 -a 563 413 4 -a 563 447 7 -a 563 74 6 -a 563 451 10 -a 563 991 8 -a 563 718 1 -a 563 463 6 -a 563 970 10 -a 563 271 2 -a 563 95 1 -a 563 1000 1 -a 563 326 3 -a 563 202 4 -a 563 456 8 -a 563 637 4 -a 563 268 4 -a 563 699 7 -a 563 288 1 -a 563 670 10 -a 563 729 4 -a 563 944 6 -a 563 113 4 -a 563 554 7 -a 563 357 1 -a 563 827 2 -a 563 296 10 -a 563 172 2 -a 563 125 10 -a 563 277 3 -a 563 310 3 -a 563 616 9 -a 563 689 10 -a 563 756 5 -a 563 689 8 -a 563 115 8 -a 563 723 4 -a 563 382 7 -a 563 577 10 -a 563 668 7 -a 563 652 8 -a 563 672 8 -a 563 643 8 -a 563 978 1 -a 563 873 7 -a 563 74 6 -a 563 590 9 -a 563 116 1 -a 563 773 5 -a 563 878 9 -a 563 786 1 -a 563 477 4 -a 563 797 3 -a 563 898 5 -a 563 6 10 -a 563 129 7 -a 563 700 4 -a 563 302 5 -a 563 300 10 -a 563 824 3 -a 563 578 3 -a 563 609 2 -a 563 415 1 -a 563 242 9 -a 563 341 8 -a 564 80 5 -a 564 357 10 -a 564 39 10 -a 564 461 6 -a 564 933 6 -a 564 706 10 -a 564 89 4 -a 564 580 2 -a 564 324 2 -a 564 42 6 -a 564 428 5 -a 564 397 8 -a 564 631 9 -a 564 544 1 -a 564 145 3 -a 564 484 6 -a 564 305 1 -a 564 622 9 -a 564 256 8 -a 564 178 2 -a 564 627 6 -a 564 384 9 -a 564 877 7 -a 564 928 3 -a 564 683 10 -a 564 676 5 -a 564 481 4 -a 564 268 9 -a 564 66 8 -a 564 723 4 -a 564 608 4 -a 564 145 1 -a 564 55 6 -a 564 646 9 -a 564 606 6 -a 564 987 2 -a 564 327 7 -a 564 694 5 -a 564 543 1 -a 564 650 7 -a 564 735 5 -a 564 970 2 -a 564 22 3 -a 564 341 6 -a 564 489 5 -a 564 167 1 -a 564 825 9 -a 564 793 10 -a 564 788 1 -a 564 56 1 -a 564 970 3 -a 564 390 1 -a 564 440 4 -a 564 822 1 -a 564 294 9 -a 564 98 7 -a 564 473 6 -a 564 774 10 -a 564 365 4 -a 564 539 6 -a 564 472 2 -a 564 972 1 -a 564 683 2 -a 564 526 6 -a 564 593 7 -a 564 264 7 -a 564 489 4 -a 564 919 7 -a 564 957 6 -a 564 7 9 -a 564 544 7 -a 564 667 9 -a 564 976 4 -a 564 566 3 -a 564 441 2 -a 564 732 6 -a 564 808 1 -a 564 209 1 -a 564 495 2 -a 564 863 4 -a 564 155 7 -a 564 884 8 -a 564 278 7 -a 564 976 6 -a 564 153 4 -a 564 376 3 -a 564 425 5 -a 564 927 3 -a 564 740 2 -a 564 963 2 -a 564 374 8 -a 564 688 5 -a 564 621 10 -a 564 900 9 -a 564 256 2 -a 564 885 6 -a 564 364 6 -a 564 151 7 -a 564 817 4 -a 564 370 2 -a 564 694 7 -a 564 460 2 -a 564 321 2 -a 564 235 8 -a 564 443 5 -a 564 761 9 -a 564 966 6 -a 564 226 5 -a 564 970 8 -a 564 436 9 -a 564 64 3 -a 565 100 4 -a 565 296 4 -a 565 342 2 -a 565 51 1 -a 565 448 10 -a 565 717 3 -a 565 475 2 -a 565 350 8 -a 565 432 2 -a 565 413 1 -a 565 724 3 -a 565 95 2 -a 565 10 5 -a 565 599 7 -a 565 351 10 -a 565 894 4 -a 565 962 1 -a 565 501 9 -a 565 686 7 -a 565 307 1 -a 565 170 9 -a 565 121 8 -a 565 627 8 -a 565 405 9 -a 565 563 7 -a 565 364 6 -a 565 346 8 -a 565 788 4 -a 565 309 9 -a 565 782 5 -a 565 852 9 -a 565 408 7 -a 565 53 4 -a 565 169 4 -a 565 458 3 -a 565 500 9 -a 565 885 6 -a 565 933 1 -a 565 850 8 -a 565 292 7 -a 565 321 8 -a 565 549 7 -a 565 387 1 -a 565 330 4 -a 565 123 10 -a 565 737 2 -a 565 199 4 -a 565 60 2 -a 565 213 10 -a 565 885 6 -a 565 366 2 -a 565 382 2 -a 565 992 10 -a 565 786 6 -a 565 544 2 -a 565 331 10 -a 565 108 5 -a 565 307 5 -a 565 639 2 -a 565 889 2 -a 565 134 8 -a 565 22 3 -a 565 941 5 -a 565 302 7 -a 565 480 7 -a 565 416 10 -a 565 162 3 -a 565 388 3 -a 565 241 9 -a 565 454 8 -a 565 708 8 -a 565 789 9 -a 565 840 9 -a 565 14 8 -a 565 911 5 -a 565 552 2 -a 565 212 7 -a 565 970 10 -a 565 764 5 -a 565 72 5 -a 565 311 9 -a 565 121 10 -a 565 53 7 -a 565 279 10 -a 565 907 1 -a 565 596 9 -a 565 609 7 -a 565 902 4 -a 565 224 5 -a 565 878 7 -a 565 12 2 -a 565 245 8 -a 565 794 6 -a 565 313 9 -a 565 724 3 -a 565 185 1 -a 565 475 7 -a 565 87 6 -a 565 426 8 -a 565 928 8 -a 565 795 2 -a 565 190 1 -a 566 743 6 -a 566 808 8 -a 566 77 9 -a 566 270 2 -a 566 22 9 -a 566 9 4 -a 566 67 7 -a 566 333 4 -a 566 129 6 -a 566 119 10 -a 566 611 7 -a 566 11 2 -a 566 714 8 -a 566 195 3 -a 566 591 10 -a 566 418 3 -a 566 877 8 -a 566 602 3 -a 566 663 7 -a 566 646 8 -a 566 915 4 -a 566 362 3 -a 566 831 6 -a 566 365 1 -a 566 449 8 -a 566 232 2 -a 566 268 7 -a 566 219 9 -a 566 421 10 -a 566 2 10 -a 566 497 4 -a 566 255 5 -a 566 519 6 -a 566 263 7 -a 566 62 7 -a 566 851 1 -a 566 391 10 -a 566 180 1 -a 566 437 4 -a 566 402 9 -a 566 893 10 -a 566 631 9 -a 566 401 7 -a 566 460 4 -a 566 25 5 -a 566 254 7 -a 566 37 6 -a 566 687 1 -a 566 899 1 -a 566 951 4 -a 566 24 10 -a 566 705 3 -a 566 291 1 -a 566 472 9 -a 566 936 8 -a 566 558 1 -a 566 690 7 -a 566 333 7 -a 566 543 4 -a 566 691 8 -a 566 829 8 -a 566 797 6 -a 566 687 6 -a 566 323 3 -a 566 35 2 -a 566 748 7 -a 566 149 3 -a 566 426 3 -a 566 928 10 -a 566 585 10 -a 566 827 4 -a 566 796 6 -a 566 192 10 -a 566 203 1 -a 566 231 3 -a 566 216 1 -a 566 456 10 -a 566 268 4 -a 566 902 5 -a 566 331 1 -a 566 194 1 -a 566 925 10 -a 566 11 6 -a 566 485 8 -a 566 373 2 -a 566 947 9 -a 566 18 4 -a 566 38 4 -a 566 255 5 -a 566 561 6 -a 566 729 1 -a 566 59 2 -a 566 333 10 -a 566 391 9 -a 566 382 3 -a 566 368 5 -a 566 114 7 -a 566 530 9 -a 566 793 7 -a 566 17 10 -a 566 91 5 -a 566 595 7 -a 566 813 6 -a 566 282 7 -a 566 797 10 -a 566 19 9 -a 566 497 8 -a 566 229 5 -a 567 286 4 -a 567 374 6 -a 567 559 8 -a 567 480 3 -a 567 274 2 -a 567 569 3 -a 567 964 9 -a 567 646 9 -a 567 491 8 -a 567 981 8 -a 567 684 2 -a 567 745 1 -a 567 517 8 -a 567 388 6 -a 567 804 1 -a 567 850 1 -a 567 778 8 -a 567 161 5 -a 567 193 8 -a 567 891 9 -a 567 690 10 -a 567 985 1 -a 567 908 3 -a 567 780 4 -a 567 555 9 -a 567 696 5 -a 567 37 4 -a 567 327 5 -a 567 714 2 -a 567 533 5 -a 567 555 5 -a 567 1000 10 -a 567 906 8 -a 567 89 7 -a 567 455 3 -a 567 156 4 -a 567 658 3 -a 567 394 8 -a 567 801 8 -a 567 124 8 -a 567 350 3 -a 567 460 10 -a 567 869 7 -a 567 867 7 -a 567 847 2 -a 567 648 3 -a 567 692 5 -a 567 600 7 -a 567 808 9 -a 567 884 8 -a 567 467 4 -a 567 473 5 -a 567 844 4 -a 567 350 10 -a 567 229 2 -a 567 374 5 -a 567 21 8 -a 567 265 7 -a 567 700 6 -a 567 734 7 -a 567 798 8 -a 567 231 5 -a 567 709 8 -a 567 679 2 -a 567 319 9 -a 567 139 4 -a 567 834 8 -a 567 976 4 -a 567 532 3 -a 567 611 7 -a 567 76 2 -a 567 882 8 -a 567 46 1 -a 567 944 3 -a 567 724 6 -a 567 893 4 -a 567 567 10 -a 567 391 3 -a 567 468 10 -a 567 350 9 -a 567 250 8 -a 567 934 8 -a 567 822 5 -a 567 69 3 -a 567 259 7 -a 567 26 7 -a 567 442 7 -a 567 279 5 -a 567 291 2 -a 567 117 4 -a 567 64 2 -a 567 347 7 -a 567 697 9 -a 567 742 10 -a 568 666 7 -a 568 836 3 -a 568 552 3 -a 568 617 3 -a 568 343 10 -a 568 138 10 -a 568 692 9 -a 568 200 4 -a 568 183 4 -a 568 611 9 -a 568 923 1 -a 568 51 7 -a 568 153 3 -a 568 289 5 -a 568 519 5 -a 568 502 5 -a 568 538 8 -a 568 428 4 -a 568 300 2 -a 568 606 9 -a 568 687 1 -a 568 325 10 -a 568 23 9 -a 568 965 10 -a 568 615 2 -a 568 140 5 -a 568 953 5 -a 568 678 1 -a 568 486 8 -a 568 626 4 -a 568 396 8 -a 568 127 2 -a 568 437 2 -a 568 947 5 -a 568 744 3 -a 568 779 6 -a 568 60 9 -a 568 411 7 -a 568 979 8 -a 568 242 6 -a 568 877 8 -a 568 293 5 -a 568 150 1 -a 568 142 4 -a 568 811 7 -a 568 652 1 -a 568 679 3 -a 568 214 1 -a 568 951 8 -a 568 261 10 -a 568 900 5 -a 568 251 2 -a 568 283 6 -a 568 841 1 -a 568 866 3 -a 568 422 7 -a 568 769 10 -a 568 519 4 -a 568 908 5 -a 568 370 5 -a 568 914 8 -a 568 10 6 -a 568 806 4 -a 568 836 2 -a 568 753 5 -a 568 561 6 -a 568 895 5 -a 568 140 2 -a 568 515 6 -a 568 113 10 -a 568 137 7 -a 568 367 9 -a 568 405 3 -a 568 286 1 -a 568 508 9 -a 568 191 5 -a 568 937 4 -a 568 163 9 -a 568 404 7 -a 568 863 5 -a 568 423 2 -a 568 280 10 -a 568 90 1 -a 568 705 4 -a 568 96 9 -a 568 955 6 -a 568 103 9 -a 568 864 2 -a 568 449 9 -a 568 210 6 -a 568 339 6 -a 568 150 8 -a 568 748 4 -a 568 551 9 -a 568 21 7 -a 568 887 3 -a 568 41 4 -a 568 133 10 -a 569 408 6 -a 569 537 6 -a 569 284 4 -a 569 915 3 -a 569 727 9 -a 569 197 5 -a 569 53 2 -a 569 106 2 -a 569 35 3 -a 569 475 1 -a 569 385 1 -a 569 124 2 -a 569 156 3 -a 569 480 1 -a 569 54 6 -a 569 258 8 -a 569 320 5 -a 569 503 6 -a 569 243 2 -a 569 529 2 -a 569 841 3 -a 569 237 7 -a 569 519 7 -a 569 990 2 -a 569 984 10 -a 569 46 10 -a 569 846 9 -a 569 86 9 -a 569 118 10 -a 569 844 10 -a 569 493 8 -a 569 654 8 -a 569 104 10 -a 569 384 9 -a 569 356 8 -a 569 300 5 -a 569 436 4 -a 569 462 10 -a 569 334 5 -a 569 911 7 -a 569 846 9 -a 569 458 8 -a 569 42 5 -a 569 302 8 -a 569 511 2 -a 569 299 3 -a 569 621 1 -a 569 541 10 -a 569 125 4 -a 569 829 5 -a 569 777 6 -a 569 643 1 -a 569 795 5 -a 569 737 7 -a 569 688 3 -a 569 780 6 -a 569 558 1 -a 569 774 2 -a 569 898 9 -a 569 378 10 -a 569 242 1 -a 569 527 6 -a 569 481 7 -a 569 625 8 -a 569 883 6 -a 569 780 6 -a 569 37 10 -a 569 320 8 -a 569 89 6 -a 569 947 9 -a 569 141 2 -a 569 546 8 -a 569 988 8 -a 569 442 9 -a 569 33 9 -a 569 262 6 -a 569 38 3 -a 569 21 3 -a 569 802 8 -a 569 162 3 -a 569 850 10 -a 569 554 6 -a 569 805 1 -a 569 620 6 -a 569 266 3 -a 569 468 9 -a 569 375 5 -a 569 824 7 -a 569 217 5 -a 569 248 3 -a 569 177 6 -a 569 459 10 -a 569 775 3 -a 569 657 5 -a 569 59 10 -a 569 633 1 -a 569 412 5 -a 569 95 10 -a 569 952 5 -a 569 500 2 -a 569 17 4 -a 569 68 5 -a 569 22 3 -a 569 510 10 -a 569 54 2 -a 569 241 7 -a 569 547 7 -a 569 74 5 -a 569 18 10 -a 570 709 2 -a 570 923 3 -a 570 572 3 -a 570 489 2 -a 570 518 2 -a 570 837 9 -a 570 956 2 -a 570 893 9 -a 570 636 7 -a 570 149 5 -a 570 116 1 -a 570 812 6 -a 570 607 8 -a 570 890 1 -a 570 444 10 -a 570 665 7 -a 570 498 5 -a 570 855 3 -a 570 760 4 -a 570 425 6 -a 570 331 2 -a 570 776 10 -a 570 493 10 -a 570 352 1 -a 570 756 7 -a 570 405 2 -a 570 996 7 -a 570 524 7 -a 570 478 7 -a 570 208 7 -a 570 377 3 -a 570 561 4 -a 570 696 4 -a 570 894 10 -a 570 373 4 -a 570 628 1 -a 570 762 2 -a 570 776 9 -a 570 878 7 -a 570 796 9 -a 570 358 7 -a 570 743 8 -a 570 216 7 -a 570 217 6 -a 570 46 1 -a 570 757 6 -a 570 641 7 -a 570 376 2 -a 570 509 2 -a 570 109 3 -a 570 727 8 -a 570 240 9 -a 570 86 9 -a 570 107 10 -a 570 211 5 -a 570 610 3 -a 570 585 8 -a 570 200 10 -a 570 817 1 -a 570 961 8 -a 570 760 7 -a 570 489 2 -a 570 830 3 -a 570 109 8 -a 570 92 5 -a 570 568 1 -a 570 93 10 -a 570 867 1 -a 570 421 6 -a 570 888 2 -a 570 200 1 -a 570 139 8 -a 570 79 9 -a 570 197 9 -a 570 355 1 -a 570 125 6 -a 570 954 3 -a 570 996 8 -a 570 500 2 -a 570 438 6 -a 570 80 2 -a 570 203 7 -a 570 677 3 -a 570 166 9 -a 570 309 10 -a 570 887 10 -a 570 775 4 -a 570 893 8 -a 570 63 4 -a 570 567 7 -a 570 829 6 -a 570 822 4 -a 570 31 5 -a 570 635 5 -a 570 930 5 -a 570 122 3 -a 570 178 3 -a 570 988 3 -a 570 598 1 -a 570 886 7 -a 570 163 10 -a 570 736 2 -a 570 964 5 -a 570 360 3 -a 570 67 10 -a 570 64 5 -a 570 289 4 -a 570 38 3 -a 570 564 7 -a 570 726 5 -a 570 117 10 -a 570 766 6 -a 570 378 5 -a 570 282 2 -a 571 50 7 -a 571 240 9 -a 571 32 1 -a 571 943 7 -a 571 302 1 -a 571 599 1 -a 571 747 1 -a 571 100 3 -a 571 629 5 -a 571 357 5 -a 571 5 9 -a 571 751 10 -a 571 534 3 -a 571 3 7 -a 571 714 9 -a 571 107 2 -a 571 888 6 -a 571 877 10 -a 571 843 10 -a 571 827 1 -a 571 212 9 -a 571 909 1 -a 571 891 4 -a 571 500 9 -a 571 946 1 -a 571 430 2 -a 571 201 6 -a 571 38 1 -a 571 171 6 -a 571 578 3 -a 571 320 1 -a 571 220 5 -a 571 817 10 -a 571 351 5 -a 571 138 4 -a 571 95 9 -a 571 949 7 -a 571 885 7 -a 571 194 6 -a 571 554 6 -a 571 217 9 -a 571 198 5 -a 571 280 6 -a 571 751 10 -a 571 200 3 -a 571 993 8 -a 571 857 9 -a 571 63 8 -a 571 845 8 -a 571 675 2 -a 571 890 4 -a 571 32 2 -a 571 559 9 -a 571 756 10 -a 571 531 1 -a 571 480 8 -a 571 161 4 -a 571 731 8 -a 571 518 3 -a 571 331 10 -a 571 284 2 -a 571 837 4 -a 571 550 8 -a 571 77 5 -a 571 163 2 -a 571 688 2 -a 571 171 1 -a 571 88 5 -a 571 548 2 -a 571 364 10 -a 571 641 10 -a 571 764 3 -a 571 561 10 -a 571 920 2 -a 571 490 8 -a 571 761 6 -a 571 888 6 -a 571 323 9 -a 571 823 5 -a 571 709 7 -a 571 997 1 -a 571 688 1 -a 571 740 2 -a 571 532 6 -a 571 419 6 -a 571 247 7 -a 571 579 1 -a 571 977 1 -a 571 504 7 -a 571 909 10 -a 571 237 6 -a 571 316 5 -a 571 435 9 -a 571 313 10 -a 571 479 2 -a 571 98 7 -a 571 483 2 -a 571 566 7 -a 571 645 2 -a 571 846 8 -a 571 182 2 -a 571 384 1 -a 571 382 8 -a 571 77 1 -a 571 874 9 -a 572 118 6 -a 572 964 5 -a 572 172 9 -a 572 941 9 -a 572 648 5 -a 572 144 9 -a 572 604 2 -a 572 364 4 -a 572 675 10 -a 572 610 6 -a 572 662 1 -a 572 577 2 -a 572 562 2 -a 572 141 8 -a 572 462 1 -a 572 798 8 -a 572 457 9 -a 572 896 8 -a 572 86 10 -a 572 935 9 -a 572 993 5 -a 572 568 10 -a 572 476 8 -a 572 613 9 -a 572 389 6 -a 572 657 5 -a 572 996 5 -a 572 771 10 -a 572 733 6 -a 572 845 8 -a 572 888 5 -a 572 672 6 -a 572 804 1 -a 572 296 8 -a 572 136 6 -a 572 384 3 -a 572 659 1 -a 572 810 2 -a 572 382 6 -a 572 244 7 -a 572 447 10 -a 572 958 4 -a 572 805 4 -a 572 588 8 -a 572 395 1 -a 572 579 5 -a 572 20 7 -a 572 266 10 -a 572 664 4 -a 572 954 10 -a 572 234 8 -a 572 208 9 -a 572 405 5 -a 572 846 8 -a 572 596 5 -a 572 37 10 -a 572 818 3 -a 572 342 8 -a 572 769 4 -a 572 638 5 -a 572 206 4 -a 572 416 8 -a 572 630 2 -a 572 711 8 -a 572 765 6 -a 572 368 10 -a 572 345 5 -a 572 550 3 -a 572 749 8 -a 572 588 5 -a 572 997 10 -a 572 683 9 -a 572 369 2 -a 572 560 5 -a 572 53 9 -a 572 947 1 -a 572 579 5 -a 572 319 5 -a 572 586 3 -a 572 508 8 -a 572 552 5 -a 572 793 7 -a 572 912 7 -a 572 374 4 -a 572 365 5 -a 572 948 1 -a 572 167 7 -a 572 706 8 -a 572 692 3 -a 572 804 1 -a 572 911 8 -a 572 83 2 -a 572 409 3 -a 572 896 2 -a 572 794 9 -a 572 149 1 -a 572 239 5 -a 572 114 5 -a 572 699 9 -a 572 988 1 -a 572 702 6 -a 572 671 5 -a 572 646 3 -a 573 46 1 -a 573 206 2 -a 573 698 5 -a 573 992 1 -a 573 784 9 -a 573 553 2 -a 573 267 4 -a 573 544 2 -a 573 322 3 -a 573 154 4 -a 573 917 10 -a 573 686 8 -a 573 77 8 -a 573 59 9 -a 573 367 4 -a 573 768 6 -a 573 862 5 -a 573 254 3 -a 573 850 5 -a 573 247 3 -a 573 125 7 -a 573 619 5 -a 573 395 9 -a 573 363 9 -a 573 733 1 -a 573 69 8 -a 573 326 2 -a 573 410 5 -a 573 739 9 -a 573 971 4 -a 573 455 1 -a 573 944 6 -a 573 645 7 -a 573 422 10 -a 573 703 2 -a 573 636 9 -a 573 974 2 -a 573 969 7 -a 573 155 6 -a 573 271 10 -a 573 98 1 -a 573 47 9 -a 573 956 3 -a 573 174 6 -a 573 105 8 -a 573 299 7 -a 573 941 5 -a 573 967 8 -a 573 552 3 -a 573 767 2 -a 573 189 8 -a 573 676 9 -a 573 361 8 -a 573 583 2 -a 573 14 5 -a 573 69 1 -a 573 652 4 -a 573 340 4 -a 573 478 6 -a 573 366 1 -a 573 286 5 -a 573 932 2 -a 573 286 3 -a 573 930 6 -a 573 329 7 -a 573 988 4 -a 573 542 3 -a 573 279 6 -a 573 933 3 -a 573 696 5 -a 573 549 7 -a 573 6 10 -a 573 743 4 -a 573 481 7 -a 573 180 3 -a 573 847 8 -a 573 779 1 -a 573 96 8 -a 573 789 5 -a 573 306 3 -a 573 862 7 -a 573 977 2 -a 573 981 1 -a 573 199 6 -a 573 536 7 -a 574 994 2 -a 574 267 10 -a 574 163 3 -a 574 309 5 -a 574 745 1 -a 574 528 1 -a 574 595 5 -a 574 652 4 -a 574 813 4 -a 574 500 7 -a 574 981 8 -a 574 777 1 -a 574 17 2 -a 574 235 7 -a 574 685 8 -a 574 713 3 -a 574 783 6 -a 574 690 7 -a 574 431 8 -a 574 239 5 -a 574 869 8 -a 574 253 8 -a 574 965 10 -a 574 18 9 -a 574 298 3 -a 574 802 5 -a 574 994 4 -a 574 254 5 -a 574 1000 3 -a 574 505 9 -a 574 224 1 -a 574 243 6 -a 574 667 9 -a 574 532 4 -a 574 987 10 -a 574 171 7 -a 574 102 2 -a 574 614 6 -a 574 983 8 -a 574 602 6 -a 574 570 10 -a 574 735 4 -a 574 618 6 -a 574 804 6 -a 574 395 10 -a 574 306 3 -a 574 563 1 -a 574 61 1 -a 574 736 7 -a 574 801 1 -a 574 929 6 -a 574 989 5 -a 574 794 9 -a 574 869 6 -a 574 67 3 -a 574 647 5 -a 574 975 3 -a 574 321 5 -a 574 622 4 -a 574 456 3 -a 574 544 1 -a 574 864 8 -a 574 98 10 -a 574 51 10 -a 574 826 5 -a 574 268 6 -a 574 153 10 -a 574 416 3 -a 574 227 3 -a 574 754 5 -a 574 985 5 -a 574 961 6 -a 574 347 6 -a 574 765 4 -a 574 332 9 -a 575 653 10 -a 575 303 8 -a 575 392 3 -a 575 364 1 -a 575 79 8 -a 575 296 8 -a 575 328 2 -a 575 872 7 -a 575 141 5 -a 575 309 7 -a 575 939 5 -a 575 787 9 -a 575 260 7 -a 575 235 9 -a 575 384 7 -a 575 715 10 -a 575 778 6 -a 575 224 2 -a 575 812 3 -a 575 828 5 -a 575 25 1 -a 575 56 2 -a 575 980 6 -a 575 440 3 -a 575 282 2 -a 575 709 10 -a 575 401 7 -a 575 218 5 -a 575 32 2 -a 575 141 10 -a 575 549 6 -a 575 684 6 -a 575 443 8 -a 575 940 2 -a 575 23 5 -a 575 521 5 -a 575 212 7 -a 575 351 6 -a 575 369 9 -a 575 352 4 -a 575 659 3 -a 575 283 10 -a 575 114 6 -a 575 918 8 -a 575 517 7 -a 575 497 5 -a 575 608 2 -a 575 270 2 -a 575 720 5 -a 575 396 3 -a 575 73 8 -a 575 745 6 -a 575 451 5 -a 575 29 3 -a 575 160 4 -a 575 732 2 -a 575 737 4 -a 575 560 10 -a 575 949 1 -a 575 768 9 -a 575 700 3 -a 575 474 5 -a 575 427 10 -a 575 118 3 -a 575 389 7 -a 575 450 7 -a 575 639 2 -a 575 600 8 -a 575 800 3 -a 575 951 4 -a 575 434 5 -a 575 265 6 -a 575 40 1 -a 575 328 5 -a 575 781 1 -a 575 537 9 -a 575 935 8 -a 575 26 2 -a 575 232 3 -a 575 306 3 -a 575 98 9 -a 575 976 5 -a 575 756 1 -a 575 126 3 -a 575 112 1 -a 575 463 8 -a 575 863 10 -a 575 671 4 -a 575 388 9 -a 575 606 9 -a 575 347 10 -a 575 861 7 -a 575 9 5 -a 575 464 5 -a 575 225 6 -a 575 458 7 -a 575 78 2 -a 575 825 8 -a 575 233 4 -a 575 60 10 -a 575 751 4 -a 575 666 2 -a 575 324 9 -a 575 791 7 -a 575 993 9 -a 575 80 9 -a 575 303 3 -a 575 904 6 -a 575 105 3 -a 575 534 3 -a 575 185 3 -a 575 203 9 -a 575 486 2 -a 575 941 4 -a 575 328 2 -a 575 597 8 -a 575 379 1 -a 576 166 2 -a 576 243 7 -a 576 766 4 -a 576 772 5 -a 576 589 10 -a 576 602 8 -a 576 780 5 -a 576 29 6 -a 576 827 2 -a 576 213 4 -a 576 106 8 -a 576 627 3 -a 576 445 6 -a 576 166 10 -a 576 353 5 -a 576 86 3 -a 576 489 7 -a 576 119 8 -a 576 55 4 -a 576 569 4 -a 576 421 1 -a 576 958 4 -a 576 673 4 -a 576 955 2 -a 576 118 10 -a 576 875 5 -a 576 416 4 -a 576 34 4 -a 576 179 2 -a 576 413 6 -a 576 344 3 -a 576 230 3 -a 576 154 10 -a 576 91 8 -a 576 819 3 -a 576 756 3 -a 576 870 10 -a 576 847 9 -a 576 558 3 -a 576 58 4 -a 576 952 1 -a 576 160 6 -a 576 502 4 -a 576 93 6 -a 576 512 3 -a 576 588 7 -a 576 582 7 -a 576 631 2 -a 576 642 6 -a 576 126 3 -a 576 27 1 -a 576 575 2 -a 576 798 4 -a 576 981 2 -a 576 692 9 -a 576 649 2 -a 576 372 8 -a 576 726 6 -a 576 827 8 -a 576 359 4 -a 576 114 5 -a 576 146 9 -a 576 589 7 -a 576 267 1 -a 576 237 8 -a 576 383 3 -a 576 82 7 -a 576 205 3 -a 576 555 8 -a 576 140 3 -a 576 132 7 -a 576 714 4 -a 576 641 8 -a 576 225 1 -a 576 202 7 -a 576 204 3 -a 576 806 5 -a 576 832 7 -a 576 845 8 -a 576 931 7 -a 576 858 5 -a 576 395 1 -a 576 704 1 -a 576 815 7 -a 576 63 3 -a 576 328 8 -a 576 162 5 -a 576 788 10 -a 576 130 8 -a 577 521 1 -a 577 901 4 -a 577 276 7 -a 577 85 2 -a 577 143 4 -a 577 512 8 -a 577 467 4 -a 577 141 8 -a 577 593 7 -a 577 671 6 -a 577 695 7 -a 577 732 4 -a 577 802 5 -a 577 385 2 -a 577 349 5 -a 577 2 1 -a 577 586 8 -a 577 552 3 -a 577 807 10 -a 577 393 7 -a 577 373 3 -a 577 713 3 -a 577 226 2 -a 577 767 10 -a 577 393 8 -a 577 16 3 -a 577 829 7 -a 577 720 5 -a 577 178 5 -a 577 592 1 -a 577 850 10 -a 577 698 2 -a 577 468 7 -a 577 101 6 -a 577 782 2 -a 577 611 6 -a 577 612 4 -a 577 224 2 -a 577 751 3 -a 577 180 8 -a 577 894 1 -a 577 421 6 -a 577 912 3 -a 577 671 8 -a 577 805 3 -a 577 236 10 -a 577 673 9 -a 577 366 1 -a 577 787 5 -a 577 455 6 -a 577 758 6 -a 577 135 7 -a 577 144 3 -a 577 984 8 -a 577 902 1 -a 577 536 6 -a 577 999 4 -a 577 706 7 -a 577 231 1 -a 577 152 9 -a 577 274 10 -a 577 56 8 -a 577 849 9 -a 577 741 9 -a 577 156 4 -a 577 606 5 -a 577 327 7 -a 577 767 6 -a 577 829 6 -a 577 53 10 -a 577 947 3 -a 577 698 3 -a 577 474 10 -a 577 834 3 -a 577 345 2 -a 577 254 10 -a 577 45 4 -a 577 620 2 -a 577 831 2 -a 577 447 10 -a 577 353 10 -a 577 966 5 -a 577 590 7 -a 577 312 4 -a 577 843 9 -a 577 101 10 -a 577 287 8 -a 577 524 8 -a 577 332 4 -a 577 438 5 -a 578 797 2 -a 578 387 2 -a 578 263 2 -a 578 514 4 -a 578 543 4 -a 578 868 6 -a 578 840 6 -a 578 285 5 -a 578 673 10 -a 578 893 8 -a 578 207 9 -a 578 346 9 -a 578 342 2 -a 578 16 8 -a 578 690 8 -a 578 595 6 -a 578 60 2 -a 578 682 5 -a 578 190 3 -a 578 891 10 -a 578 105 6 -a 578 543 3 -a 578 832 3 -a 578 694 2 -a 578 854 4 -a 578 650 8 -a 578 795 8 -a 578 116 9 -a 578 149 6 -a 578 102 6 -a 578 554 7 -a 578 946 4 -a 578 488 9 -a 578 816 7 -a 578 435 2 -a 578 6 3 -a 578 659 7 -a 578 250 8 -a 578 291 8 -a 578 307 5 -a 578 118 10 -a 578 497 7 -a 578 653 3 -a 578 459 8 -a 578 513 9 -a 578 318 5 -a 578 30 8 -a 578 572 2 -a 578 1000 10 -a 578 219 7 -a 578 438 5 -a 578 80 3 -a 578 761 8 -a 578 245 6 -a 578 773 8 -a 578 591 9 -a 578 894 6 -a 578 543 3 -a 578 706 6 -a 578 19 10 -a 578 644 1 -a 578 235 3 -a 578 964 7 -a 578 108 8 -a 578 26 7 -a 578 374 1 -a 578 113 2 -a 578 685 2 -a 578 623 9 -a 578 403 3 -a 578 991 3 -a 578 741 5 -a 578 900 2 -a 578 619 8 -a 578 175 2 -a 578 388 9 -a 578 937 3 -a 578 204 1 -a 578 959 8 -a 578 912 3 -a 578 423 4 -a 578 373 1 -a 578 991 4 -a 578 159 7 -a 578 617 6 -a 578 739 4 -a 578 749 6 -a 578 487 2 -a 578 258 8 -a 578 431 9 -a 578 505 3 -a 578 901 3 -a 578 665 2 -a 578 444 7 -a 578 691 5 -a 578 817 9 -a 578 97 8 -a 579 351 5 -a 579 415 2 -a 579 499 6 -a 579 317 1 -a 579 131 9 -a 579 374 8 -a 579 936 6 -a 579 306 10 -a 579 761 2 -a 579 848 2 -a 579 509 1 -a 579 696 5 -a 579 735 2 -a 579 931 4 -a 579 44 9 -a 579 701 10 -a 579 66 5 -a 579 660 4 -a 579 415 2 -a 579 814 6 -a 579 122 2 -a 579 672 3 -a 579 220 4 -a 579 626 2 -a 579 549 4 -a 579 885 10 -a 579 45 6 -a 579 532 5 -a 579 551 7 -a 579 861 1 -a 579 628 2 -a 579 901 2 -a 579 252 5 -a 579 103 3 -a 579 193 8 -a 579 382 9 -a 579 476 4 -a 579 104 10 -a 579 687 7 -a 579 213 1 -a 579 951 10 -a 579 172 2 -a 579 908 8 -a 579 661 1 -a 579 78 3 -a 579 951 5 -a 579 337 9 -a 579 143 6 -a 579 586 4 -a 579 752 10 -a 579 957 6 -a 579 708 10 -a 579 399 10 -a 579 152 8 -a 579 309 9 -a 579 947 6 -a 579 12 7 -a 579 354 9 -a 579 455 4 -a 579 562 5 -a 579 190 9 -a 579 58 10 -a 579 438 6 -a 579 441 7 -a 579 160 6 -a 579 631 9 -a 579 823 8 -a 579 636 10 -a 579 734 2 -a 579 485 4 -a 579 848 5 -a 579 661 2 -a 579 656 8 -a 579 731 10 -a 579 297 1 -a 579 734 7 -a 579 657 3 -a 579 634 9 -a 579 876 10 -a 579 218 6 -a 579 361 2 -a 579 808 1 -a 579 925 8 -a 579 759 2 -a 579 960 9 -a 579 210 7 -a 579 682 7 -a 579 971 8 -a 579 563 3 -a 579 112 5 -a 579 509 5 -a 579 752 6 -a 579 169 6 -a 579 946 1 -a 579 169 7 -a 579 329 4 -a 579 552 2 -a 579 991 10 -a 579 964 9 -a 579 262 7 -a 580 451 4 -a 580 787 1 -a 580 922 3 -a 580 83 5 -a 580 493 5 -a 580 194 1 -a 580 816 9 -a 580 125 2 -a 580 827 6 -a 580 667 8 -a 580 342 7 -a 580 163 1 -a 580 451 8 -a 580 243 4 -a 580 922 7 -a 580 386 6 -a 580 452 6 -a 580 579 9 -a 580 332 4 -a 580 690 10 -a 580 840 2 -a 580 741 6 -a 580 858 8 -a 580 762 9 -a 580 909 9 -a 580 162 8 -a 580 289 6 -a 580 875 8 -a 580 101 10 -a 580 550 4 -a 580 302 10 -a 580 887 8 -a 580 447 5 -a 580 384 7 -a 580 355 5 -a 580 641 4 -a 580 175 6 -a 580 479 10 -a 580 443 1 -a 580 841 6 -a 580 821 4 -a 580 606 9 -a 580 267 5 -a 580 39 3 -a 580 503 5 -a 580 652 8 -a 580 490 3 -a 580 57 2 -a 580 984 9 -a 580 479 4 -a 580 746 10 -a 580 799 7 -a 580 195 8 -a 580 579 7 -a 580 536 3 -a 580 80 1 -a 580 741 8 -a 580 825 1 -a 580 954 6 -a 580 841 9 -a 580 350 1 -a 580 231 8 -a 580 704 8 -a 580 797 5 -a 580 614 5 -a 580 34 10 -a 580 413 2 -a 580 788 9 -a 580 513 1 -a 580 855 3 -a 580 605 9 -a 580 309 4 -a 580 436 2 -a 580 871 8 -a 580 347 7 -a 580 938 1 -a 580 499 7 -a 580 836 7 -a 580 994 3 -a 580 458 6 -a 580 290 10 -a 580 715 6 -a 580 232 6 -a 580 484 4 -a 580 270 6 -a 580 768 5 -a 580 563 10 -a 580 568 8 -a 580 493 9 -a 580 826 2 -a 580 917 1 -a 580 723 1 -a 580 505 5 -a 580 689 3 -a 580 313 8 -a 580 539 1 -a 580 77 8 -a 580 76 9 -a 580 27 7 -a 580 932 8 -a 580 680 10 -a 580 335 3 -a 580 343 8 -a 581 527 3 -a 581 681 9 -a 581 257 7 -a 581 1 6 -a 581 492 2 -a 581 226 2 -a 581 458 1 -a 581 781 9 -a 581 941 5 -a 581 689 8 -a 581 240 7 -a 581 186 9 -a 581 432 8 -a 581 803 10 -a 581 171 4 -a 581 999 9 -a 581 271 10 -a 581 996 1 -a 581 892 1 -a 581 993 8 -a 581 477 8 -a 581 556 10 -a 581 281 3 -a 581 633 2 -a 581 357 8 -a 581 17 3 -a 581 540 2 -a 581 12 6 -a 581 351 3 -a 581 882 10 -a 581 538 10 -a 581 7 1 -a 581 114 7 -a 581 538 3 -a 581 498 8 -a 581 340 4 -a 581 995 1 -a 581 254 7 -a 581 256 8 -a 581 660 10 -a 581 493 2 -a 581 441 8 -a 581 67 10 -a 581 271 9 -a 581 611 3 -a 581 42 3 -a 581 541 5 -a 581 582 8 -a 581 933 4 -a 581 510 3 -a 581 34 9 -a 581 464 5 -a 581 790 8 -a 581 24 3 -a 581 72 8 -a 581 122 10 -a 581 40 1 -a 581 611 3 -a 581 134 7 -a 581 390 8 -a 581 469 4 -a 581 671 2 -a 581 396 4 -a 581 582 9 -a 581 185 2 -a 581 893 4 -a 581 921 1 -a 581 155 2 -a 581 122 4 -a 581 152 4 -a 581 814 8 -a 581 615 4 -a 581 592 6 -a 581 881 8 -a 581 885 6 -a 581 178 9 -a 581 922 4 -a 581 402 5 -a 581 760 7 -a 581 830 6 -a 581 911 10 -a 581 793 8 -a 581 269 6 -a 581 676 4 -a 581 817 3 -a 581 341 4 -a 581 798 5 -a 581 856 7 -a 581 951 6 -a 581 931 6 -a 581 222 9 -a 581 395 3 -a 581 577 6 -a 581 617 9 -a 581 977 6 -a 581 761 1 -a 581 486 9 -a 581 873 3 -a 581 916 8 -a 581 607 10 -a 581 1 1 -a 581 705 2 -a 581 197 6 -a 582 592 5 -a 582 561 10 -a 582 58 3 -a 582 770 8 -a 582 458 6 -a 582 459 10 -a 582 505 8 -a 582 263 4 -a 582 345 5 -a 582 273 6 -a 582 532 5 -a 582 65 5 -a 582 872 8 -a 582 793 2 -a 582 921 5 -a 582 798 9 -a 582 699 4 -a 582 118 3 -a 582 169 7 -a 582 252 6 -a 582 734 8 -a 582 121 1 -a 582 195 6 -a 582 993 4 -a 582 903 5 -a 582 802 9 -a 582 993 8 -a 582 584 10 -a 582 998 7 -a 582 561 7 -a 582 120 5 -a 582 31 1 -a 582 306 2 -a 582 578 4 -a 582 489 9 -a 582 810 9 -a 582 840 2 -a 582 833 6 -a 582 58 2 -a 582 347 3 -a 582 829 5 -a 582 123 5 -a 582 194 7 -a 582 597 4 -a 582 19 7 -a 582 992 6 -a 582 272 4 -a 582 136 4 -a 582 136 10 -a 582 523 4 -a 582 869 5 -a 582 256 6 -a 582 510 8 -a 582 40 4 -a 582 224 5 -a 582 389 7 -a 582 841 1 -a 582 193 6 -a 582 972 2 -a 582 814 4 -a 582 753 4 -a 582 67 3 -a 582 845 6 -a 582 34 8 -a 582 644 8 -a 582 309 7 -a 582 843 8 -a 582 460 9 -a 582 118 4 -a 582 900 8 -a 582 806 9 -a 582 946 4 -a 582 1000 4 -a 582 518 8 -a 582 16 10 -a 582 967 10 -a 582 789 7 -a 582 151 5 -a 582 78 2 -a 582 287 8 -a 582 333 8 -a 582 797 6 -a 582 35 4 -a 582 556 5 -a 582 161 1 -a 582 875 8 -a 582 748 1 -a 582 108 2 -a 582 664 6 -a 582 476 4 -a 582 174 10 -a 582 484 3 -a 582 509 6 -a 582 818 7 -a 582 793 4 -a 582 327 10 -a 582 253 10 -a 582 910 5 -a 582 203 5 -a 582 34 3 -a 582 831 7 -a 582 200 3 -a 582 9 8 -a 582 324 10 -a 582 216 7 -a 582 975 8 -a 583 89 8 -a 583 366 8 -a 583 28 5 -a 583 375 8 -a 583 361 10 -a 583 360 9 -a 583 147 6 -a 583 395 5 -a 583 916 2 -a 583 307 8 -a 583 245 1 -a 583 639 2 -a 583 414 10 -a 583 909 10 -a 583 91 9 -a 583 588 4 -a 583 368 1 -a 583 599 6 -a 583 381 8 -a 583 136 9 -a 583 926 4 -a 583 633 4 -a 583 21 5 -a 583 104 5 -a 583 666 9 -a 583 851 10 -a 583 303 10 -a 583 675 10 -a 583 151 5 -a 583 518 1 -a 583 625 10 -a 583 239 2 -a 583 884 3 -a 583 653 9 -a 583 613 1 -a 583 220 1 -a 583 760 2 -a 583 615 4 -a 583 903 1 -a 583 42 1 -a 583 859 9 -a 583 518 8 -a 583 456 9 -a 583 743 5 -a 583 608 7 -a 583 19 9 -a 583 87 8 -a 583 182 3 -a 583 399 2 -a 583 222 9 -a 583 83 6 -a 583 7 4 -a 583 243 2 -a 583 186 4 -a 583 672 5 -a 583 69 3 -a 583 489 7 -a 583 322 7 -a 583 219 2 -a 583 947 7 -a 583 457 10 -a 583 865 5 -a 583 575 5 -a 583 46 6 -a 583 61 7 -a 583 562 9 -a 583 805 8 -a 583 675 6 -a 583 441 1 -a 583 846 9 -a 583 509 2 -a 583 958 5 -a 583 277 1 -a 583 228 1 -a 583 541 1 -a 583 295 7 -a 583 314 8 -a 583 722 4 -a 583 693 4 -a 583 535 8 -a 583 805 2 -a 583 699 9 -a 583 777 6 -a 583 990 6 -a 583 347 5 -a 583 846 2 -a 583 454 2 -a 583 668 10 -a 583 40 10 -a 583 436 8 -a 583 590 8 -a 583 497 2 -a 583 276 4 -a 583 140 9 -a 583 542 7 -a 583 336 2 -a 583 702 4 -a 583 322 7 -a 583 118 3 -a 583 143 9 -a 583 495 5 -a 583 51 8 -a 583 420 6 -a 583 722 5 -a 583 591 3 -a 583 714 6 -a 583 11 10 -a 584 288 8 -a 584 383 4 -a 584 545 6 -a 584 68 9 -a 584 57 7 -a 584 298 7 -a 584 34 2 -a 584 403 4 -a 584 119 9 -a 584 487 1 -a 584 47 6 -a 584 158 3 -a 584 922 4 -a 584 636 9 -a 584 654 7 -a 584 174 10 -a 584 776 8 -a 584 171 1 -a 584 509 2 -a 584 453 6 -a 584 492 5 -a 584 495 4 -a 584 570 1 -a 584 635 6 -a 584 989 7 -a 584 620 9 -a 584 30 5 -a 584 686 8 -a 584 186 4 -a 584 743 10 -a 584 696 10 -a 584 473 8 -a 584 101 9 -a 584 216 9 -a 584 541 6 -a 584 158 10 -a 584 513 9 -a 584 574 7 -a 584 560 1 -a 584 631 1 -a 584 36 7 -a 584 606 1 -a 584 789 3 -a 584 958 5 -a 584 218 7 -a 584 418 9 -a 584 107 10 -a 584 993 6 -a 584 589 2 -a 584 615 7 -a 584 421 9 -a 584 56 1 -a 584 85 3 -a 584 990 9 -a 584 690 2 -a 584 49 4 -a 584 585 2 -a 584 719 10 -a 584 734 4 -a 584 770 3 -a 584 438 5 -a 584 405 5 -a 584 218 4 -a 584 538 1 -a 584 621 4 -a 584 758 9 -a 584 695 3 -a 584 109 2 -a 584 307 10 -a 584 231 10 -a 584 740 4 -a 584 343 10 -a 584 836 10 -a 584 504 7 -a 584 276 2 -a 584 29 9 -a 584 921 8 -a 584 382 4 -a 584 485 3 -a 584 996 7 -a 584 417 5 -a 584 541 6 -a 584 57 7 -a 584 382 5 -a 584 206 9 -a 584 105 9 -a 584 966 4 -a 584 925 7 -a 584 839 9 -a 584 711 6 -a 584 338 7 -a 584 219 3 -a 584 929 10 -a 584 875 2 -a 585 839 4 -a 585 662 7 -a 585 546 1 -a 585 948 7 -a 585 969 10 -a 585 776 2 -a 585 663 8 -a 585 287 4 -a 585 587 7 -a 585 142 6 -a 585 562 8 -a 585 616 2 -a 585 38 9 -a 585 943 6 -a 585 612 6 -a 585 523 4 -a 585 914 8 -a 585 5 4 -a 585 39 7 -a 585 970 2 -a 585 386 10 -a 585 244 8 -a 585 51 2 -a 585 328 2 -a 585 144 7 -a 585 889 8 -a 585 14 4 -a 585 481 1 -a 585 83 1 -a 585 942 2 -a 585 332 2 -a 585 922 10 -a 585 580 9 -a 585 877 9 -a 585 845 5 -a 585 524 3 -a 585 628 10 -a 585 483 2 -a 585 810 5 -a 585 190 10 -a 585 624 7 -a 585 347 7 -a 585 805 8 -a 585 661 1 -a 585 265 7 -a 585 393 4 -a 585 159 7 -a 585 154 9 -a 585 397 5 -a 585 197 10 -a 585 100 6 -a 585 782 3 -a 585 441 3 -a 585 150 4 -a 585 85 9 -a 585 584 2 -a 585 14 5 -a 585 99 10 -a 585 41 1 -a 585 96 9 -a 585 16 5 -a 585 372 4 -a 585 595 5 -a 585 224 10 -a 585 837 2 -a 585 94 6 -a 585 851 8 -a 585 295 8 -a 585 903 9 -a 585 16 4 -a 585 918 8 -a 585 225 3 -a 585 821 7 -a 585 555 5 -a 585 489 9 -a 585 189 2 -a 585 713 8 -a 585 643 6 -a 585 585 6 -a 585 910 6 -a 585 742 7 -a 585 342 10 -a 585 326 7 -a 585 891 8 -a 585 427 2 -a 585 909 2 -a 585 904 5 -a 585 525 6 -a 585 949 6 -a 585 999 8 -a 585 540 6 -a 585 296 4 -a 586 992 9 -a 586 111 4 -a 586 519 1 -a 586 804 8 -a 586 204 8 -a 586 345 2 -a 586 75 2 -a 586 83 7 -a 586 361 5 -a 586 992 7 -a 586 307 4 -a 586 157 2 -a 586 522 1 -a 586 796 6 -a 586 345 3 -a 586 211 6 -a 586 414 9 -a 586 929 4 -a 586 96 2 -a 586 131 3 -a 586 246 9 -a 586 421 1 -a 586 672 6 -a 586 305 1 -a 586 900 4 -a 586 172 3 -a 586 230 2 -a 586 874 10 -a 586 712 5 -a 586 525 8 -a 586 841 8 -a 586 822 6 -a 586 20 10 -a 586 621 5 -a 586 1 4 -a 586 364 3 -a 586 695 7 -a 586 83 7 -a 586 724 7 -a 586 662 3 -a 586 390 9 -a 586 880 1 -a 586 160 2 -a 586 161 5 -a 586 200 4 -a 586 370 6 -a 586 574 10 -a 586 104 4 -a 586 465 4 -a 586 704 4 -a 586 350 2 -a 586 885 6 -a 586 700 8 -a 586 165 4 -a 586 575 1 -a 586 169 1 -a 586 394 9 -a 586 424 5 -a 586 880 1 -a 586 919 1 -a 586 241 2 -a 586 677 4 -a 586 938 4 -a 586 861 3 -a 586 677 2 -a 586 277 5 -a 586 531 5 -a 586 760 4 -a 586 168 2 -a 586 125 2 -a 586 856 3 -a 586 327 8 -a 586 285 8 -a 586 32 8 -a 586 696 2 -a 586 858 8 -a 586 135 8 -a 586 136 10 -a 586 537 6 -a 586 484 10 -a 586 212 5 -a 586 481 8 -a 586 161 10 -a 586 786 10 -a 586 649 5 -a 586 554 4 -a 586 185 2 -a 586 504 3 -a 586 448 5 -a 586 425 5 -a 586 156 8 -a 586 361 9 -a 586 261 2 -a 586 832 7 -a 586 638 3 -a 586 791 9 -a 586 567 4 -a 586 614 4 -a 586 959 1 -a 586 691 6 -a 586 445 7 -a 586 261 7 -a 586 975 10 -a 586 476 2 -a 586 957 2 -a 586 808 1 -a 586 611 1 -a 587 68 10 -a 587 320 9 -a 587 70 4 -a 587 64 10 -a 587 531 1 -a 587 550 8 -a 587 224 8 -a 587 292 5 -a 587 174 1 -a 587 777 7 -a 587 477 2 -a 587 677 9 -a 587 201 5 -a 587 901 9 -a 587 832 5 -a 587 561 2 -a 587 138 9 -a 587 640 8 -a 587 174 10 -a 587 928 8 -a 587 182 4 -a 587 787 2 -a 587 862 6 -a 587 873 7 -a 587 208 3 -a 587 99 5 -a 587 823 2 -a 587 683 5 -a 587 31 4 -a 587 607 3 -a 587 269 8 -a 587 98 5 -a 587 926 3 -a 587 339 9 -a 587 161 2 -a 587 433 1 -a 587 888 9 -a 587 384 9 -a 587 724 10 -a 587 38 1 -a 587 137 5 -a 587 176 2 -a 587 714 1 -a 587 337 10 -a 587 53 5 -a 587 522 1 -a 587 897 10 -a 587 190 9 -a 587 137 3 -a 587 47 5 -a 587 93 10 -a 587 318 10 -a 587 833 5 -a 587 955 9 -a 587 166 5 -a 587 16 8 -a 587 29 1 -a 587 989 8 -a 587 699 6 -a 587 59 9 -a 587 571 6 -a 587 967 5 -a 587 156 8 -a 587 472 4 -a 587 281 3 -a 587 317 6 -a 587 904 9 -a 587 145 7 -a 587 700 2 -a 587 604 7 -a 587 182 9 -a 587 836 3 -a 587 779 8 -a 587 895 9 -a 588 148 5 -a 588 831 8 -a 588 392 3 -a 588 21 1 -a 588 528 10 -a 588 67 1 -a 588 89 1 -a 588 846 6 -a 588 899 10 -a 588 19 9 -a 588 915 1 -a 588 47 1 -a 588 975 6 -a 588 589 6 -a 588 105 7 -a 588 521 5 -a 588 531 4 -a 588 260 5 -a 588 993 8 -a 588 812 1 -a 588 576 4 -a 588 872 9 -a 588 956 5 -a 588 252 3 -a 588 451 5 -a 588 113 4 -a 588 63 5 -a 588 206 10 -a 588 211 5 -a 588 12 7 -a 588 375 9 -a 588 231 6 -a 588 8 3 -a 588 902 10 -a 588 297 8 -a 588 96 4 -a 588 723 10 -a 588 171 3 -a 588 114 7 -a 588 710 2 -a 588 61 3 -a 588 160 2 -a 588 660 6 -a 588 649 5 -a 588 264 10 -a 588 157 6 -a 588 156 5 -a 588 523 10 -a 588 125 1 -a 588 967 4 -a 588 75 5 -a 588 996 4 -a 588 898 6 -a 588 326 5 -a 588 423 3 -a 588 388 2 -a 588 628 10 -a 588 992 6 -a 588 598 7 -a 588 639 8 -a 588 342 2 -a 588 828 8 -a 588 646 6 -a 588 220 2 -a 588 100 3 -a 588 741 1 -a 588 942 2 -a 588 271 2 -a 588 854 1 -a 588 627 1 -a 588 331 4 -a 588 263 3 -a 588 980 2 -a 588 252 1 -a 588 419 7 -a 588 111 7 -a 588 775 8 -a 588 543 3 -a 588 53 5 -a 588 849 10 -a 588 514 7 -a 588 950 7 -a 588 150 8 -a 588 936 3 -a 588 935 2 -a 588 537 4 -a 588 539 4 -a 588 902 1 -a 588 111 1 -a 588 154 2 -a 588 220 2 -a 588 938 6 -a 588 799 1 -a 588 439 3 -a 588 14 6 -a 588 516 5 -a 589 356 5 -a 589 284 7 -a 589 345 5 -a 589 983 1 -a 589 614 8 -a 589 334 9 -a 589 221 3 -a 589 569 2 -a 589 585 4 -a 589 639 2 -a 589 679 9 -a 589 335 7 -a 589 157 3 -a 589 731 10 -a 589 159 10 -a 589 670 9 -a 589 656 3 -a 589 308 2 -a 589 582 2 -a 589 566 9 -a 589 845 7 -a 589 96 2 -a 589 444 6 -a 589 955 2 -a 589 249 9 -a 589 663 5 -a 589 868 10 -a 589 24 5 -a 589 77 3 -a 589 881 6 -a 589 539 6 -a 589 432 5 -a 589 140 7 -a 589 883 5 -a 589 390 4 -a 589 754 10 -a 589 192 2 -a 589 610 1 -a 589 298 7 -a 589 777 4 -a 589 224 3 -a 589 977 8 -a 589 87 9 -a 589 380 10 -a 589 683 2 -a 589 246 10 -a 589 26 2 -a 589 315 7 -a 589 553 3 -a 589 607 6 -a 589 880 9 -a 589 373 10 -a 589 702 10 -a 589 299 10 -a 589 303 4 -a 589 951 6 -a 589 961 10 -a 589 147 5 -a 589 974 3 -a 589 13 7 -a 589 3 3 -a 589 488 3 -a 589 445 3 -a 589 143 1 -a 589 346 9 -a 589 834 7 -a 589 896 2 -a 589 538 4 -a 589 420 10 -a 589 169 10 -a 589 290 3 -a 589 643 4 -a 589 121 10 -a 589 376 10 -a 589 804 9 -a 589 621 7 -a 589 24 6 -a 589 94 3 -a 589 150 8 -a 589 630 2 -a 589 973 5 -a 589 522 3 -a 589 307 2 -a 589 248 2 -a 589 825 8 -a 589 233 1 -a 589 184 10 -a 589 971 9 -a 589 182 3 -a 589 197 4 -a 589 973 1 -a 589 669 3 -a 589 641 10 -a 589 91 8 -a 589 450 5 -a 589 986 7 -a 589 528 4 -a 589 869 5 -a 589 131 3 -a 589 817 4 -a 589 488 4 -a 589 251 5 -a 589 168 5 -a 589 486 9 -a 589 30 1 -a 589 789 4 -a 589 509 8 -a 589 123 1 -a 589 938 3 -a 589 114 3 -a 589 72 3 -a 589 435 4 -a 590 420 3 -a 590 319 3 -a 590 235 7 -a 590 653 5 -a 590 502 3 -a 590 181 9 -a 590 834 1 -a 590 698 1 -a 590 130 6 -a 590 479 9 -a 590 314 2 -a 590 220 9 -a 590 469 3 -a 590 764 9 -a 590 182 5 -a 590 996 1 -a 590 608 7 -a 590 312 8 -a 590 788 3 -a 590 71 6 -a 590 562 5 -a 590 955 8 -a 590 556 10 -a 590 592 7 -a 590 719 4 -a 590 40 8 -a 590 714 1 -a 590 632 7 -a 590 153 3 -a 590 785 9 -a 590 43 8 -a 590 573 3 -a 590 79 4 -a 590 277 10 -a 590 201 4 -a 590 581 2 -a 590 458 7 -a 590 10 6 -a 590 254 7 -a 590 587 2 -a 590 488 2 -a 590 568 5 -a 590 806 4 -a 590 956 5 -a 590 307 4 -a 590 987 2 -a 590 927 6 -a 590 914 10 -a 590 274 8 -a 590 690 4 -a 590 985 2 -a 590 836 3 -a 590 621 2 -a 590 516 2 -a 590 403 1 -a 590 315 4 -a 590 556 10 -a 590 92 10 -a 590 947 4 -a 590 708 9 -a 590 877 5 -a 590 989 4 -a 590 256 6 -a 590 955 9 -a 590 241 3 -a 590 456 9 -a 590 511 10 -a 590 698 3 -a 590 466 7 -a 590 765 7 -a 590 260 5 -a 590 953 9 -a 590 308 6 -a 590 42 9 -a 590 885 8 -a 590 614 7 -a 590 4 8 -a 590 787 1 -a 590 503 7 -a 590 278 10 -a 590 453 9 -a 590 463 4 -a 590 89 6 -a 590 49 3 -a 590 979 5 -a 590 491 6 -a 590 363 9 -a 590 510 6 -a 590 582 8 -a 590 285 5 -a 590 193 6 -a 590 434 7 -a 590 249 1 -a 590 449 3 -a 590 365 4 -a 591 490 7 -a 591 904 1 -a 591 875 1 -a 591 163 6 -a 591 345 7 -a 591 615 4 -a 591 423 9 -a 591 274 8 -a 591 922 8 -a 591 464 1 -a 591 134 3 -a 591 511 9 -a 591 467 6 -a 591 920 10 -a 591 744 8 -a 591 348 5 -a 591 452 9 -a 591 832 3 -a 591 396 10 -a 591 406 3 -a 591 298 10 -a 591 759 5 -a 591 915 9 -a 591 880 7 -a 591 19 9 -a 591 84 2 -a 591 289 2 -a 591 268 9 -a 591 532 3 -a 591 653 1 -a 591 757 3 -a 591 411 6 -a 591 504 5 -a 591 919 3 -a 591 756 9 -a 591 94 5 -a 591 317 7 -a 591 5 4 -a 591 780 10 -a 591 138 6 -a 591 502 3 -a 591 223 8 -a 591 33 3 -a 591 491 1 -a 591 966 3 -a 591 381 2 -a 591 943 4 -a 591 774 10 -a 591 776 6 -a 591 324 10 -a 591 47 4 -a 591 510 6 -a 591 215 5 -a 591 926 7 -a 591 529 10 -a 591 298 1 -a 591 191 9 -a 591 796 9 -a 591 829 2 -a 591 843 2 -a 591 528 7 -a 591 215 4 -a 591 322 2 -a 591 422 9 -a 591 970 6 -a 591 416 3 -a 591 739 9 -a 591 974 1 -a 591 407 1 -a 591 494 2 -a 591 87 10 -a 591 908 2 -a 591 716 6 -a 591 120 5 -a 591 375 10 -a 591 658 5 -a 591 500 9 -a 591 293 6 -a 591 407 6 -a 591 251 2 -a 591 616 2 -a 591 453 1 -a 591 761 9 -a 591 830 3 -a 591 355 8 -a 591 265 8 -a 591 103 8 -a 591 545 2 -a 591 36 6 -a 591 931 2 -a 591 363 6 -a 591 563 3 -a 591 122 4 -a 591 685 8 -a 591 984 7 -a 591 67 5 -a 591 76 8 -a 592 698 6 -a 592 17 2 -a 592 482 5 -a 592 168 10 -a 592 103 1 -a 592 365 1 -a 592 883 8 -a 592 222 7 -a 592 739 10 -a 592 516 2 -a 592 721 7 -a 592 7 8 -a 592 922 4 -a 592 972 10 -a 592 623 3 -a 592 351 3 -a 592 708 10 -a 592 428 3 -a 592 705 4 -a 592 972 4 -a 592 531 9 -a 592 225 5 -a 592 437 4 -a 592 587 6 -a 592 545 8 -a 592 558 8 -a 592 247 7 -a 592 504 7 -a 592 625 1 -a 592 322 8 -a 592 178 9 -a 592 641 7 -a 592 803 5 -a 592 345 1 -a 592 743 10 -a 592 144 3 -a 592 203 3 -a 592 965 7 -a 592 882 7 -a 592 719 7 -a 592 661 3 -a 592 889 4 -a 592 616 3 -a 592 608 1 -a 592 487 2 -a 592 966 2 -a 592 291 5 -a 592 914 6 -a 592 646 9 -a 592 238 2 -a 592 420 4 -a 592 870 3 -a 592 220 7 -a 592 857 1 -a 592 433 2 -a 592 764 2 -a 592 390 1 -a 592 679 5 -a 592 244 4 -a 592 421 2 -a 592 630 10 -a 592 779 4 -a 592 765 9 -a 592 349 2 -a 592 922 3 -a 592 967 7 -a 592 289 1 -a 592 780 8 -a 592 661 6 -a 592 949 1 -a 592 644 9 -a 592 253 3 -a 592 533 3 -a 592 106 5 -a 592 194 3 -a 592 823 6 -a 592 840 1 -a 592 37 4 -a 592 415 5 -a 592 685 7 -a 592 256 1 -a 592 247 4 -a 592 93 7 -a 592 636 5 -a 592 772 1 -a 592 239 8 -a 592 626 8 -a 592 748 7 -a 592 659 2 -a 592 231 8 -a 592 502 1 -a 593 399 1 -a 593 579 6 -a 593 400 3 -a 593 341 9 -a 593 867 2 -a 593 155 5 -a 593 792 2 -a 593 798 4 -a 593 230 7 -a 593 300 4 -a 593 903 5 -a 593 423 5 -a 593 98 3 -a 593 897 8 -a 593 238 6 -a 593 134 4 -a 593 287 3 -a 593 923 7 -a 593 390 1 -a 593 533 7 -a 593 385 8 -a 593 145 7 -a 593 762 9 -a 593 623 9 -a 593 770 6 -a 593 485 8 -a 593 257 10 -a 593 1000 2 -a 593 987 1 -a 593 655 4 -a 593 555 6 -a 593 362 4 -a 593 995 1 -a 593 397 1 -a 593 516 7 -a 593 972 6 -a 593 164 10 -a 593 289 5 -a 593 177 3 -a 593 463 10 -a 593 167 9 -a 593 600 5 -a 593 561 2 -a 593 39 8 -a 593 837 7 -a 593 694 7 -a 593 326 8 -a 593 735 10 -a 593 59 4 -a 593 858 10 -a 593 726 4 -a 593 443 4 -a 593 463 8 -a 593 41 8 -a 593 747 6 -a 593 948 3 -a 593 297 4 -a 593 723 1 -a 593 910 5 -a 593 951 10 -a 593 253 1 -a 593 247 8 -a 593 922 7 -a 593 649 8 -a 593 762 1 -a 593 869 5 -a 593 813 7 -a 593 26 2 -a 593 22 9 -a 593 251 10 -a 593 192 7 -a 593 621 4 -a 593 811 8 -a 593 230 10 -a 593 433 8 -a 593 481 10 -a 593 555 4 -a 593 144 2 -a 593 539 4 -a 593 389 7 -a 593 869 9 -a 593 982 3 -a 593 366 7 -a 593 307 9 -a 593 89 8 -a 593 230 7 -a 593 295 3 -a 593 811 5 -a 593 115 3 -a 593 221 7 -a 593 39 1 -a 593 361 8 -a 593 118 5 -a 593 687 4 -a 593 98 3 -a 593 987 7 -a 593 475 7 -a 594 123 9 -a 594 726 4 -a 594 314 10 -a 594 604 7 -a 594 512 5 -a 594 544 6 -a 594 12 6 -a 594 992 2 -a 594 74 2 -a 594 155 9 -a 594 507 8 -a 594 462 4 -a 594 464 6 -a 594 828 7 -a 594 306 1 -a 594 461 3 -a 594 916 9 -a 594 535 5 -a 594 755 3 -a 594 702 9 -a 594 650 6 -a 594 976 2 -a 594 740 10 -a 594 69 2 -a 594 402 5 -a 594 84 1 -a 594 31 9 -a 594 877 7 -a 594 206 5 -a 594 14 1 -a 594 578 8 -a 594 520 9 -a 594 617 2 -a 594 65 2 -a 594 39 9 -a 594 629 9 -a 594 33 4 -a 594 112 2 -a 594 783 6 -a 594 539 1 -a 594 574 5 -a 594 782 3 -a 594 377 4 -a 594 63 7 -a 594 438 5 -a 594 268 1 -a 594 597 1 -a 594 169 9 -a 594 969 7 -a 594 222 10 -a 594 120 8 -a 594 684 10 -a 594 208 6 -a 594 188 4 -a 594 61 8 -a 594 291 6 -a 594 219 2 -a 594 937 6 -a 594 496 4 -a 594 232 6 -a 594 490 3 -a 594 849 7 -a 594 555 5 -a 594 29 1 -a 594 453 1 -a 594 587 10 -a 594 141 7 -a 594 211 4 -a 594 101 5 -a 594 714 7 -a 594 992 1 -a 594 78 10 -a 594 66 2 -a 594 30 8 -a 594 515 9 -a 594 333 5 -a 594 627 7 -a 594 683 5 -a 594 277 5 -a 594 848 8 -a 594 802 3 -a 594 960 10 -a 594 31 5 -a 594 990 6 -a 594 321 1 -a 594 184 8 -a 594 933 6 -a 594 817 5 -a 594 415 9 -a 594 398 2 -a 594 807 5 -a 594 239 8 -a 594 952 3 -a 594 836 10 -a 594 691 7 -a 595 514 3 -a 595 976 3 -a 595 902 8 -a 595 614 2 -a 595 665 1 -a 595 869 7 -a 595 691 1 -a 595 730 5 -a 595 899 9 -a 595 182 7 -a 595 38 4 -a 595 501 3 -a 595 864 4 -a 595 314 8 -a 595 324 1 -a 595 642 10 -a 595 249 5 -a 595 355 4 -a 595 607 6 -a 595 244 3 -a 595 675 2 -a 595 790 5 -a 595 152 5 -a 595 467 7 -a 595 180 3 -a 595 550 9 -a 595 250 8 -a 595 419 3 -a 595 477 8 -a 595 61 7 -a 595 85 9 -a 595 991 9 -a 595 12 8 -a 595 986 6 -a 595 580 8 -a 595 676 8 -a 595 831 4 -a 595 247 9 -a 595 381 4 -a 595 705 7 -a 595 428 3 -a 595 418 10 -a 595 181 4 -a 595 267 5 -a 595 731 2 -a 595 504 7 -a 595 908 2 -a 595 979 8 -a 595 858 2 -a 595 490 10 -a 595 198 4 -a 595 509 2 -a 595 255 2 -a 595 350 5 -a 595 975 7 -a 595 435 6 -a 595 899 6 -a 595 200 8 -a 595 853 9 -a 595 351 7 -a 595 260 1 -a 595 937 10 -a 595 317 2 -a 595 271 4 -a 595 899 3 -a 595 897 5 -a 595 946 8 -a 595 705 5 -a 595 119 4 -a 595 302 1 -a 595 385 4 -a 595 546 6 -a 595 719 2 -a 595 565 3 -a 595 812 6 -a 595 425 8 -a 595 44 5 -a 595 696 8 -a 595 379 4 -a 595 902 3 -a 595 161 4 -a 595 577 4 -a 595 386 4 -a 595 416 7 -a 595 926 6 -a 595 336 8 -a 595 850 10 -a 595 800 6 -a 595 536 5 -a 595 678 7 -a 595 126 9 -a 595 795 6 -a 595 590 7 -a 595 443 3 -a 595 42 6 -a 595 464 4 -a 595 315 2 -a 595 987 10 -a 595 144 6 -a 595 433 4 -a 595 265 1 -a 595 528 9 -a 595 978 3 -a 595 983 1 -a 595 68 6 -a 595 765 3 -a 595 384 7 -a 595 112 1 -a 595 436 2 -a 595 762 6 -a 595 597 3 -a 595 314 5 -a 595 374 7 -a 595 215 3 -a 595 709 7 -a 595 837 8 -a 595 220 1 -a 595 490 9 -a 596 116 3 -a 596 55 1 -a 596 558 5 -a 596 32 7 -a 596 519 10 -a 596 872 5 -a 596 662 7 -a 596 280 1 -a 596 258 3 -a 596 166 4 -a 596 233 8 -a 596 217 2 -a 596 233 7 -a 596 997 2 -a 596 600 7 -a 596 344 9 -a 596 409 6 -a 596 337 8 -a 596 332 5 -a 596 651 2 -a 596 705 8 -a 596 992 4 -a 596 865 9 -a 596 390 10 -a 596 804 9 -a 596 855 3 -a 596 609 5 -a 596 269 8 -a 596 970 1 -a 596 599 6 -a 596 323 1 -a 596 503 3 -a 596 630 3 -a 596 841 8 -a 596 350 1 -a 596 624 6 -a 596 479 5 -a 596 629 7 -a 596 881 7 -a 596 644 1 -a 596 861 10 -a 596 73 3 -a 596 876 2 -a 596 833 8 -a 596 672 9 -a 596 196 4 -a 596 217 7 -a 596 527 9 -a 596 197 6 -a 596 635 5 -a 596 208 6 -a 596 164 7 -a 596 475 7 -a 596 597 9 -a 596 967 2 -a 596 305 9 -a 596 181 8 -a 596 211 3 -a 596 250 8 -a 596 780 1 -a 596 534 8 -a 596 752 10 -a 596 385 3 -a 596 350 9 -a 596 77 4 -a 596 828 6 -a 596 705 6 -a 596 865 2 -a 596 447 8 -a 596 541 1 -a 596 937 8 -a 596 299 9 -a 596 350 1 -a 596 585 5 -a 596 494 2 -a 596 566 9 -a 596 569 5 -a 596 763 7 -a 596 179 7 -a 596 203 10 -a 596 926 9 -a 596 653 8 -a 596 799 1 -a 596 869 3 -a 596 958 9 -a 596 980 3 -a 596 55 10 -a 596 183 8 -a 596 735 10 -a 596 588 10 -a 596 935 8 -a 596 95 4 -a 596 938 7 -a 596 79 5 -a 596 741 2 -a 596 692 9 -a 596 943 3 -a 596 164 7 -a 596 208 4 -a 596 855 7 -a 596 462 10 -a 597 557 5 -a 597 415 7 -a 597 955 6 -a 597 99 1 -a 597 983 2 -a 597 950 5 -a 597 861 4 -a 597 137 4 -a 597 129 6 -a 597 762 7 -a 597 790 2 -a 597 927 2 -a 597 606 6 -a 597 723 1 -a 597 882 1 -a 597 661 5 -a 597 905 7 -a 597 592 2 -a 597 224 9 -a 597 815 8 -a 597 687 6 -a 597 137 10 -a 597 802 7 -a 597 765 6 -a 597 878 10 -a 597 469 1 -a 597 683 7 -a 597 17 10 -a 597 676 9 -a 597 513 3 -a 597 478 7 -a 597 209 1 -a 597 928 7 -a 597 408 7 -a 597 307 5 -a 597 886 6 -a 597 333 6 -a 597 143 8 -a 597 461 3 -a 597 904 3 -a 597 788 6 -a 597 364 9 -a 597 486 3 -a 597 486 2 -a 597 221 3 -a 597 122 4 -a 597 366 9 -a 597 813 6 -a 597 345 5 -a 597 157 3 -a 597 475 2 -a 597 482 9 -a 597 958 2 -a 597 215 7 -a 597 335 6 -a 597 402 7 -a 597 897 5 -a 597 351 4 -a 597 53 1 -a 597 385 6 -a 597 828 6 -a 597 261 8 -a 597 288 9 -a 597 211 8 -a 597 567 9 -a 597 150 4 -a 597 543 9 -a 597 709 8 -a 597 148 9 -a 597 589 4 -a 597 935 9 -a 597 343 4 -a 597 50 4 -a 597 396 5 -a 597 563 7 -a 597 171 4 -a 597 761 4 -a 597 351 9 -a 597 515 10 -a 597 917 1 -a 597 825 9 -a 597 996 4 -a 597 850 1 -a 597 15 4 -a 597 306 1 -a 597 227 7 -a 597 911 4 -a 597 656 6 -a 597 280 6 -a 597 272 2 -a 597 459 2 -a 597 540 10 -a 597 559 3 -a 597 669 1 -a 597 83 9 -a 597 708 4 -a 597 188 1 -a 597 791 5 -a 597 855 10 -a 597 167 6 -a 597 355 7 -a 597 765 6 -a 597 509 10 -a 597 404 2 -a 598 136 5 -a 598 47 6 -a 598 574 3 -a 598 897 7 -a 598 398 4 -a 598 65 6 -a 598 789 10 -a 598 198 8 -a 598 36 10 -a 598 615 4 -a 598 213 9 -a 598 342 10 -a 598 841 1 -a 598 99 5 -a 598 997 3 -a 598 96 7 -a 598 370 5 -a 598 432 5 -a 598 636 5 -a 598 929 2 -a 598 76 10 -a 598 718 4 -a 598 612 4 -a 598 263 1 -a 598 484 8 -a 598 443 5 -a 598 429 10 -a 598 839 4 -a 598 183 3 -a 598 937 9 -a 598 218 8 -a 598 319 2 -a 598 984 4 -a 598 792 6 -a 598 191 7 -a 598 357 2 -a 598 856 1 -a 598 979 1 -a 598 554 9 -a 598 891 4 -a 598 569 2 -a 598 766 8 -a 598 208 4 -a 598 386 9 -a 598 865 8 -a 598 181 10 -a 598 481 3 -a 598 210 2 -a 598 612 2 -a 598 92 5 -a 598 114 3 -a 598 687 1 -a 598 809 6 -a 598 726 6 -a 598 950 7 -a 598 269 7 -a 598 144 6 -a 598 354 2 -a 598 83 3 -a 598 326 3 -a 598 267 1 -a 598 300 3 -a 598 644 1 -a 598 226 9 -a 598 67 6 -a 598 834 3 -a 598 582 10 -a 598 922 6 -a 598 789 7 -a 598 111 4 -a 598 789 5 -a 598 333 1 -a 598 877 6 -a 598 996 2 -a 598 718 2 -a 598 717 7 -a 598 152 6 -a 598 175 5 -a 598 926 7 -a 598 763 5 -a 598 266 10 -a 598 16 1 -a 598 426 2 -a 598 51 3 -a 598 741 4 -a 598 351 5 -a 598 319 5 -a 598 884 4 -a 599 704 10 -a 599 401 7 -a 599 185 4 -a 599 970 3 -a 599 700 1 -a 599 829 9 -a 599 171 8 -a 599 767 2 -a 599 638 8 -a 599 752 8 -a 599 664 9 -a 599 402 3 -a 599 863 5 -a 599 428 7 -a 599 735 7 -a 599 715 2 -a 599 400 7 -a 599 428 1 -a 599 407 9 -a 599 551 5 -a 599 602 9 -a 599 308 9 -a 599 290 6 -a 599 868 9 -a 599 323 1 -a 599 715 6 -a 599 918 6 -a 599 39 10 -a 599 41 6 -a 599 212 4 -a 599 922 2 -a 599 744 8 -a 599 612 2 -a 599 83 8 -a 599 690 7 -a 599 287 3 -a 599 911 8 -a 599 860 6 -a 599 29 8 -a 599 524 2 -a 599 588 4 -a 599 693 3 -a 599 926 8 -a 599 426 2 -a 599 96 2 -a 599 636 6 -a 599 116 2 -a 599 495 3 -a 599 39 5 -a 599 522 7 -a 599 22 6 -a 599 641 9 -a 599 829 1 -a 599 311 3 -a 599 484 4 -a 599 128 10 -a 599 1 3 -a 599 377 3 -a 599 166 5 -a 599 41 10 -a 599 588 5 -a 599 64 8 -a 599 784 9 -a 599 175 9 -a 599 146 10 -a 599 449 8 -a 599 461 5 -a 599 32 10 -a 599 285 9 -a 599 490 6 -a 599 555 8 -a 599 872 8 -a 599 158 10 -a 599 456 7 -a 599 273 6 -a 599 253 1 -a 599 67 3 -a 599 388 2 -a 599 748 6 -a 599 106 3 -a 599 909 9 -a 599 769 3 -a 599 746 9 -a 599 713 4 -a 599 55 7 -a 599 205 2 -a 599 840 1 -a 599 55 1 -a 599 581 9 -a 599 95 4 -a 599 144 7 -a 599 45 3 -a 600 878 3 -a 600 318 6 -a 600 190 3 -a 600 303 7 -a 600 778 10 -a 600 221 4 -a 600 587 3 -a 600 243 1 -a 600 775 3 -a 600 434 10 -a 600 400 3 -a 600 207 9 -a 600 706 9 -a 600 653 6 -a 600 273 10 -a 600 69 6 -a 600 376 9 -a 600 378 8 -a 600 977 9 -a 600 120 2 -a 600 99 5 -a 600 665 4 -a 600 174 4 -a 600 303 4 -a 600 481 1 -a 600 228 7 -a 600 883 3 -a 600 462 10 -a 600 322 3 -a 600 2 3 -a 600 506 5 -a 600 175 5 -a 600 319 1 -a 600 695 8 -a 600 477 8 -a 600 73 1 -a 600 915 3 -a 600 39 1 -a 600 315 6 -a 600 665 4 -a 600 472 1 -a 600 715 2 -a 600 871 1 -a 600 153 4 -a 600 343 5 -a 600 120 4 -a 600 221 4 -a 600 718 2 -a 600 497 10 -a 600 173 6 -a 600 837 8 -a 600 596 9 -a 600 838 8 -a 600 898 8 -a 600 294 9 -a 600 213 4 -a 600 757 6 -a 600 755 1 -a 600 534 9 -a 600 758 2 -a 600 236 9 -a 600 708 1 -a 600 53 6 -a 600 930 4 -a 600 161 8 -a 600 125 6 -a 600 820 9 -a 600 199 2 -a 600 439 1 -a 600 460 1 -a 600 671 9 -a 600 129 6 -a 600 307 6 -a 600 823 4 -a 600 471 9 -a 600 426 3 -a 600 20 1 -a 600 164 1 -a 600 922 7 -a 600 192 2 -a 600 1000 7 -a 600 493 2 -a 600 5 10 -a 600 985 10 -a 600 367 9 -a 600 298 4 -a 600 173 8 -a 600 99 10 -a 600 28 3 -a 601 706 6 -a 601 856 7 -a 601 263 6 -a 601 390 3 -a 601 908 8 -a 601 168 3 -a 601 550 8 -a 601 8 3 -a 601 987 3 -a 601 748 5 -a 601 447 4 -a 601 423 1 -a 601 394 2 -a 601 575 10 -a 601 729 3 -a 601 193 8 -a 601 22 10 -a 601 130 7 -a 601 212 10 -a 601 185 6 -a 601 27 6 -a 601 403 2 -a 601 161 9 -a 601 520 3 -a 601 408 9 -a 601 121 2 -a 601 886 5 -a 601 705 9 -a 601 294 1 -a 601 984 7 -a 601 733 2 -a 601 999 3 -a 601 815 3 -a 601 995 9 -a 601 364 5 -a 601 699 5 -a 601 139 8 -a 601 913 6 -a 601 706 1 -a 601 101 1 -a 601 637 8 -a 601 128 10 -a 601 523 3 -a 601 6 2 -a 601 703 4 -a 601 227 4 -a 601 198 6 -a 601 724 10 -a 601 356 4 -a 601 409 5 -a 601 908 10 -a 601 383 6 -a 601 812 2 -a 601 44 7 -a 601 902 7 -a 601 195 9 -a 601 165 8 -a 601 763 6 -a 601 899 10 -a 601 458 6 -a 601 722 1 -a 601 607 8 -a 601 432 4 -a 601 512 2 -a 601 578 5 -a 601 796 9 -a 601 186 1 -a 601 716 3 -a 601 684 3 -a 601 892 9 -a 601 816 7 -a 601 296 7 -a 601 315 8 -a 601 302 1 -a 601 697 4 -a 601 541 10 -a 601 499 4 -a 601 396 3 -a 601 897 10 -a 601 908 2 -a 601 280 8 -a 601 255 6 -a 601 695 3 -a 601 323 5 -a 601 132 6 -a 601 889 9 -a 601 487 5 -a 601 894 8 -a 601 763 10 -a 601 944 7 -a 601 591 2 -a 601 346 8 -a 601 352 10 -a 601 78 5 -a 601 923 9 -a 601 123 2 -a 601 264 2 -a 601 614 8 -a 601 806 5 -a 601 131 4 -a 601 405 1 -a 601 78 7 -a 601 125 6 -a 602 719 9 -a 602 379 10 -a 602 822 10 -a 602 236 9 -a 602 877 3 -a 602 193 3 -a 602 108 5 -a 602 760 10 -a 602 472 1 -a 602 362 3 -a 602 430 7 -a 602 795 5 -a 602 493 4 -a 602 294 5 -a 602 257 8 -a 602 362 4 -a 602 33 2 -a 602 177 9 -a 602 952 5 -a 602 378 9 -a 602 528 8 -a 602 5 10 -a 602 276 4 -a 602 650 3 -a 602 268 9 -a 602 889 9 -a 602 431 4 -a 602 398 9 -a 602 269 4 -a 602 508 10 -a 602 523 9 -a 602 988 6 -a 602 886 8 -a 602 320 10 -a 602 199 3 -a 602 739 3 -a 602 512 6 -a 602 306 7 -a 602 474 10 -a 602 984 9 -a 602 667 8 -a 602 904 2 -a 602 754 5 -a 602 135 9 -a 602 173 2 -a 602 496 7 -a 602 205 8 -a 602 162 2 -a 602 423 6 -a 602 582 6 -a 602 689 10 -a 602 427 10 -a 602 857 6 -a 602 314 2 -a 602 695 1 -a 602 721 5 -a 602 745 3 -a 602 68 7 -a 602 990 1 -a 602 228 9 -a 602 590 9 -a 602 953 2 -a 602 90 6 -a 602 909 8 -a 602 127 2 -a 602 828 1 -a 602 397 3 -a 602 432 3 -a 602 277 8 -a 602 356 7 -a 602 74 3 -a 602 156 5 -a 602 85 3 -a 602 208 10 -a 602 329 5 -a 602 70 5 -a 602 703 7 -a 602 533 5 -a 602 232 8 -a 602 101 7 -a 602 91 6 -a 602 920 6 -a 602 527 5 -a 602 947 8 -a 602 210 6 -a 602 197 8 -a 602 644 4 -a 602 954 10 -a 602 265 9 -a 602 609 6 -a 602 157 1 -a 602 854 8 -a 602 537 5 -a 602 246 2 -a 602 739 3 -a 602 663 6 -a 602 49 5 -a 603 111 1 -a 603 70 4 -a 603 326 3 -a 603 466 5 -a 603 143 9 -a 603 481 10 -a 603 550 9 -a 603 350 4 -a 603 809 7 -a 603 619 6 -a 603 28 7 -a 603 318 1 -a 603 850 1 -a 603 128 4 -a 603 408 6 -a 603 746 7 -a 603 654 4 -a 603 330 4 -a 603 955 5 -a 603 851 9 -a 603 973 1 -a 603 884 3 -a 603 91 5 -a 603 557 7 -a 603 16 9 -a 603 944 3 -a 603 69 5 -a 603 262 8 -a 603 658 6 -a 603 731 5 -a 603 310 6 -a 603 768 2 -a 603 800 5 -a 603 635 2 -a 603 209 6 -a 603 942 10 -a 603 92 4 -a 603 758 7 -a 603 267 2 -a 603 900 6 -a 603 353 9 -a 603 294 10 -a 603 193 8 -a 603 178 8 -a 603 421 2 -a 603 600 5 -a 603 923 6 -a 603 51 6 -a 603 930 4 -a 603 853 6 -a 603 901 9 -a 603 878 8 -a 603 712 4 -a 603 991 3 -a 603 411 10 -a 603 728 2 -a 603 910 7 -a 603 479 3 -a 603 989 6 -a 603 544 7 -a 603 186 9 -a 603 274 6 -a 603 287 10 -a 603 985 10 -a 603 909 10 -a 603 496 8 -a 603 903 5 -a 603 1000 9 -a 603 229 10 -a 603 145 6 -a 603 875 1 -a 603 581 2 -a 603 439 3 -a 603 44 9 -a 603 759 4 -a 603 859 9 -a 603 643 1 -a 603 657 2 -a 603 909 8 -a 603 548 7 -a 603 486 3 -a 603 785 5 -a 603 402 4 -a 603 173 3 -a 603 751 10 -a 603 812 1 -a 603 900 5 -a 603 637 3 -a 603 266 10 -a 603 864 3 -a 603 156 5 -a 603 451 4 -a 603 114 10 -a 603 442 8 -a 603 412 3 -a 603 937 2 -a 603 290 8 -a 603 997 4 -a 603 142 10 -a 603 434 8 -a 603 847 1 -a 603 722 4 -a 603 872 1 -a 603 890 8 -a 603 456 4 -a 603 707 6 -a 603 509 4 -a 603 89 8 -a 603 591 9 -a 604 32 10 -a 604 574 4 -a 604 352 5 -a 604 433 1 -a 604 746 5 -a 604 78 7 -a 604 220 10 -a 604 622 4 -a 604 714 10 -a 604 486 8 -a 604 461 9 -a 604 869 5 -a 604 936 8 -a 604 574 3 -a 604 287 4 -a 604 323 4 -a 604 571 9 -a 604 199 7 -a 604 612 7 -a 604 543 5 -a 604 340 9 -a 604 22 1 -a 604 366 8 -a 604 38 6 -a 604 893 4 -a 604 231 10 -a 604 493 2 -a 604 575 6 -a 604 739 4 -a 604 581 8 -a 604 142 7 -a 604 771 6 -a 604 130 8 -a 604 493 6 -a 604 179 9 -a 604 876 2 -a 604 570 7 -a 604 399 8 -a 604 473 1 -a 604 260 10 -a 604 884 4 -a 604 933 7 -a 604 104 9 -a 604 795 8 -a 604 483 4 -a 604 390 5 -a 604 94 3 -a 604 29 2 -a 604 589 2 -a 604 705 7 -a 604 572 7 -a 604 928 4 -a 604 726 1 -a 604 937 10 -a 604 965 10 -a 604 595 8 -a 604 143 7 -a 604 434 3 -a 604 145 1 -a 604 882 10 -a 604 286 8 -a 604 628 2 -a 604 120 10 -a 604 778 3 -a 604 806 8 -a 604 995 9 -a 604 324 3 -a 604 180 7 -a 604 443 9 -a 604 583 10 -a 604 39 7 -a 604 351 7 -a 604 686 7 -a 604 834 7 -a 604 833 7 -a 604 52 7 -a 604 927 9 -a 604 862 3 -a 604 640 2 -a 604 607 4 -a 604 409 6 -a 604 543 8 -a 604 309 1 -a 604 321 7 -a 604 484 3 -a 604 903 9 -a 604 463 7 -a 604 917 8 -a 604 23 8 -a 605 320 9 -a 605 906 6 -a 605 309 4 -a 605 947 6 -a 605 1 7 -a 605 62 1 -a 605 729 1 -a 605 995 4 -a 605 385 10 -a 605 908 9 -a 605 413 1 -a 605 967 1 -a 605 947 2 -a 605 764 5 -a 605 629 2 -a 605 756 10 -a 605 572 2 -a 605 680 10 -a 605 658 7 -a 605 409 7 -a 605 295 5 -a 605 240 3 -a 605 817 3 -a 605 837 3 -a 605 548 8 -a 605 113 7 -a 605 296 1 -a 605 426 8 -a 605 576 5 -a 605 188 8 -a 605 449 10 -a 605 895 8 -a 605 70 1 -a 605 757 6 -a 605 818 4 -a 605 70 5 -a 605 818 8 -a 605 522 6 -a 605 41 3 -a 605 179 9 -a 605 405 9 -a 605 453 4 -a 605 121 3 -a 605 327 6 -a 605 192 1 -a 605 749 7 -a 605 58 5 -a 605 764 7 -a 605 404 7 -a 605 715 5 -a 605 148 4 -a 605 698 10 -a 605 955 10 -a 605 965 4 -a 605 511 7 -a 605 478 3 -a 605 53 3 -a 605 806 5 -a 605 904 6 -a 605 628 2 -a 605 994 5 -a 605 328 7 -a 605 499 10 -a 605 39 10 -a 605 60 5 -a 605 292 10 -a 605 108 3 -a 605 877 9 -a 605 813 7 -a 605 148 3 -a 605 31 9 -a 605 193 6 -a 605 601 1 -a 605 152 9 -a 605 520 10 -a 605 792 8 -a 605 900 6 -a 605 577 7 -a 605 531 6 -a 605 280 6 -a 605 268 9 -a 605 679 5 -a 605 977 4 -a 605 198 1 -a 605 619 7 -a 605 463 1 -a 605 675 3 -a 605 671 9 -a 605 245 8 -a 605 554 7 -a 605 275 6 -a 605 214 8 -a 605 881 6 -a 605 773 6 -a 605 252 1 -a 605 940 7 -a 605 40 1 -a 605 359 3 -a 605 793 4 -a 605 852 4 -a 605 507 2 -a 605 823 3 -a 605 20 8 -a 605 83 2 -a 605 974 4 -a 605 539 5 -a 605 874 6 -a 605 850 10 -a 606 92 8 -a 606 381 1 -a 606 105 10 -a 606 359 4 -a 606 35 7 -a 606 57 5 -a 606 556 2 -a 606 653 5 -a 606 520 1 -a 606 206 1 -a 606 299 8 -a 606 764 1 -a 606 760 8 -a 606 573 1 -a 606 977 9 -a 606 616 5 -a 606 321 4 -a 606 204 6 -a 606 532 7 -a 606 360 6 -a 606 562 2 -a 606 300 1 -a 606 187 9 -a 606 44 5 -a 606 98 2 -a 606 207 9 -a 606 126 10 -a 606 48 3 -a 606 745 4 -a 606 1000 5 -a 606 897 8 -a 606 836 4 -a 606 356 9 -a 606 170 3 -a 606 390 4 -a 606 33 4 -a 606 725 8 -a 606 18 2 -a 606 552 2 -a 606 931 8 -a 606 316 3 -a 606 291 1 -a 606 666 8 -a 606 889 7 -a 606 243 8 -a 606 257 9 -a 606 185 5 -a 606 446 5 -a 606 788 9 -a 606 545 7 -a 606 63 1 -a 606 731 4 -a 606 27 3 -a 606 161 8 -a 606 937 2 -a 606 153 1 -a 606 208 4 -a 606 658 2 -a 606 128 2 -a 606 80 9 -a 606 469 2 -a 606 483 1 -a 606 56 10 -a 606 639 1 -a 606 872 8 -a 606 88 5 -a 606 339 2 -a 606 889 9 -a 606 640 2 -a 606 245 4 -a 606 180 5 -a 606 930 2 -a 606 910 2 -a 606 44 4 -a 606 149 2 -a 606 143 7 -a 606 229 4 -a 606 594 6 -a 606 930 8 -a 606 773 4 -a 606 577 10 -a 606 993 6 -a 606 479 2 -a 606 604 6 -a 606 129 5 -a 606 392 6 -a 606 756 5 -a 606 336 6 -a 606 25 3 -a 606 883 5 -a 606 415 6 -a 607 493 3 -a 607 341 4 -a 607 470 8 -a 607 107 4 -a 607 188 6 -a 607 557 10 -a 607 446 1 -a 607 52 9 -a 607 172 8 -a 607 690 4 -a 607 231 2 -a 607 78 1 -a 607 576 7 -a 607 275 8 -a 607 226 5 -a 607 718 5 -a 607 503 7 -a 607 819 9 -a 607 623 3 -a 607 251 4 -a 607 372 6 -a 607 591 5 -a 607 729 5 -a 607 975 6 -a 607 719 5 -a 607 96 4 -a 607 706 8 -a 607 30 3 -a 607 120 8 -a 607 564 1 -a 607 444 2 -a 607 613 9 -a 607 904 5 -a 607 913 4 -a 607 719 2 -a 607 67 2 -a 607 446 5 -a 607 140 4 -a 607 118 9 -a 607 617 8 -a 607 830 1 -a 607 348 1 -a 607 694 3 -a 607 381 10 -a 607 622 5 -a 607 919 7 -a 607 74 6 -a 607 100 5 -a 607 714 3 -a 607 696 8 -a 607 350 2 -a 607 61 9 -a 607 263 10 -a 607 55 5 -a 607 11 5 -a 607 981 1 -a 607 150 9 -a 607 716 2 -a 607 270 2 -a 607 255 4 -a 607 430 3 -a 607 882 7 -a 607 134 1 -a 607 319 10 -a 607 576 6 -a 607 200 5 -a 607 764 8 -a 607 716 10 -a 607 317 6 -a 607 356 3 -a 607 521 1 -a 607 664 10 -a 607 26 7 -a 607 901 8 -a 607 262 2 -a 607 944 10 -a 607 974 4 -a 607 361 5 -a 607 633 3 -a 607 645 10 -a 607 711 7 -a 607 693 3 -a 607 907 5 -a 607 765 1 -a 607 703 10 -a 607 864 10 -a 607 914 9 -a 607 394 10 -a 607 850 4 -a 607 159 2 -a 607 648 1 -a 607 255 7 -a 607 16 10 -a 607 781 4 -a 607 573 7 -a 607 592 3 -a 607 980 7 -a 607 312 10 -a 607 283 2 -a 607 272 4 -a 607 668 3 -a 607 803 8 -a 608 936 3 -a 608 693 1 -a 608 679 7 -a 608 173 4 -a 608 612 8 -a 608 628 3 -a 608 533 9 -a 608 221 6 -a 608 248 3 -a 608 219 3 -a 608 913 2 -a 608 131 3 -a 608 983 4 -a 608 592 5 -a 608 994 5 -a 608 873 9 -a 608 985 2 -a 608 819 3 -a 608 7 10 -a 608 609 6 -a 608 49 5 -a 608 23 2 -a 608 365 10 -a 608 622 2 -a 608 614 9 -a 608 321 10 -a 608 933 8 -a 608 896 9 -a 608 592 2 -a 608 576 9 -a 608 674 1 -a 608 503 1 -a 608 244 2 -a 608 328 2 -a 608 675 1 -a 608 856 9 -a 608 955 6 -a 608 184 4 -a 608 52 2 -a 608 178 10 -a 608 402 5 -a 608 964 6 -a 608 308 5 -a 608 361 10 -a 608 531 4 -a 608 277 10 -a 608 209 5 -a 608 492 7 -a 608 71 8 -a 608 215 3 -a 608 76 7 -a 608 120 4 -a 608 237 1 -a 608 440 9 -a 608 741 2 -a 608 850 4 -a 608 760 7 -a 608 649 9 -a 608 721 10 -a 608 328 2 -a 608 201 8 -a 608 370 10 -a 608 830 3 -a 608 444 1 -a 608 697 2 -a 608 481 9 -a 608 275 9 -a 608 627 8 -a 608 664 2 -a 608 326 3 -a 608 805 10 -a 608 41 4 -a 608 266 8 -a 608 88 2 -a 608 401 1 -a 608 796 4 -a 609 365 10 -a 609 609 9 -a 609 263 1 -a 609 435 5 -a 609 824 7 -a 609 338 9 -a 609 554 5 -a 609 36 8 -a 609 778 4 -a 609 270 9 -a 609 886 3 -a 609 513 9 -a 609 919 10 -a 609 582 5 -a 609 840 9 -a 609 95 10 -a 609 952 8 -a 609 646 6 -a 609 538 4 -a 609 624 3 -a 609 102 7 -a 609 813 2 -a 609 227 7 -a 609 765 6 -a 609 114 7 -a 609 7 3 -a 609 805 10 -a 609 379 5 -a 609 94 4 -a 609 182 8 -a 609 151 3 -a 609 458 4 -a 609 790 9 -a 609 413 3 -a 609 893 3 -a 609 589 8 -a 609 751 6 -a 609 422 10 -a 609 625 1 -a 609 504 10 -a 609 692 1 -a 609 486 3 -a 609 586 6 -a 609 43 9 -a 609 832 8 -a 609 680 2 -a 609 994 9 -a 609 453 2 -a 609 193 6 -a 609 594 7 -a 609 554 9 -a 609 820 9 -a 609 294 4 -a 609 95 2 -a 609 826 6 -a 609 74 4 -a 609 473 10 -a 609 919 9 -a 609 255 7 -a 609 623 10 -a 609 353 2 -a 609 21 7 -a 609 12 1 -a 609 221 4 -a 609 609 4 -a 609 762 5 -a 609 642 6 -a 609 209 6 -a 609 241 2 -a 609 309 3 -a 609 694 8 -a 609 232 7 -a 609 894 1 -a 609 737 7 -a 609 39 7 -a 609 549 4 -a 609 706 8 -a 609 491 5 -a 609 742 10 -a 609 275 2 -a 609 20 7 -a 609 722 5 -a 609 70 10 -a 609 313 4 -a 609 816 10 -a 609 895 7 -a 609 387 3 -a 609 265 2 -a 609 790 8 -a 609 641 3 -a 609 887 2 -a 609 118 10 -a 609 661 9 -a 609 898 10 -a 609 338 3 -a 609 246 10 -a 610 635 3 -a 610 979 7 -a 610 454 5 -a 610 875 4 -a 610 264 9 -a 610 124 9 -a 610 83 7 -a 610 133 7 -a 610 860 1 -a 610 121 8 -a 610 682 3 -a 610 541 5 -a 610 612 1 -a 610 399 7 -a 610 816 9 -a 610 631 2 -a 610 96 8 -a 610 885 5 -a 610 944 3 -a 610 912 1 -a 610 756 5 -a 610 306 10 -a 610 152 6 -a 610 521 5 -a 610 946 10 -a 610 14 6 -a 610 638 5 -a 610 583 2 -a 610 912 1 -a 610 975 7 -a 610 828 8 -a 610 522 5 -a 610 929 10 -a 610 257 9 -a 610 373 1 -a 610 168 8 -a 610 380 2 -a 610 455 6 -a 610 301 9 -a 610 215 5 -a 610 575 2 -a 610 982 10 -a 610 756 7 -a 610 162 7 -a 610 356 6 -a 610 547 8 -a 610 793 6 -a 610 451 6 -a 610 407 7 -a 610 712 5 -a 610 338 1 -a 610 138 8 -a 610 489 8 -a 610 658 2 -a 610 938 7 -a 610 503 1 -a 610 271 1 -a 610 496 2 -a 610 390 8 -a 610 221 1 -a 610 299 8 -a 610 911 6 -a 610 126 7 -a 610 556 10 -a 610 259 6 -a 610 293 5 -a 610 935 7 -a 610 713 7 -a 610 593 7 -a 610 126 2 -a 610 264 6 -a 610 550 8 -a 610 881 1 -a 610 425 8 -a 610 905 9 -a 610 403 2 -a 610 193 10 -a 610 332 3 -a 610 809 5 -a 610 904 5 -a 610 669 3 -a 610 947 9 -a 610 896 1 -a 610 134 3 -a 610 580 9 -a 610 810 8 -a 610 636 10 -a 610 851 2 -a 610 281 7 -a 610 1 10 -a 610 47 4 -a 610 580 9 -a 610 911 7 -a 610 172 6 -a 610 111 4 -a 610 146 4 -a 610 465 7 -a 610 21 8 -a 610 858 2 -a 610 33 5 -a 610 146 7 -a 610 97 10 -a 611 583 8 -a 611 2 2 -a 611 522 4 -a 611 463 5 -a 611 404 5 -a 611 714 4 -a 611 794 1 -a 611 189 3 -a 611 594 7 -a 611 439 10 -a 611 111 10 -a 611 465 9 -a 611 572 3 -a 611 690 7 -a 611 250 7 -a 611 183 5 -a 611 516 1 -a 611 531 2 -a 611 183 1 -a 611 563 6 -a 611 86 9 -a 611 69 7 -a 611 734 8 -a 611 196 3 -a 611 214 10 -a 611 174 2 -a 611 216 7 -a 611 48 5 -a 611 207 8 -a 611 362 1 -a 611 144 1 -a 611 789 10 -a 611 363 7 -a 611 665 2 -a 611 227 5 -a 611 767 8 -a 611 355 4 -a 611 955 9 -a 611 948 4 -a 611 435 6 -a 611 41 2 -a 611 388 6 -a 611 730 9 -a 611 638 2 -a 611 164 7 -a 611 222 2 -a 611 144 9 -a 611 346 3 -a 611 784 10 -a 611 229 10 -a 611 414 7 -a 611 493 9 -a 611 424 2 -a 611 628 2 -a 611 667 10 -a 611 639 4 -a 611 675 10 -a 611 873 5 -a 611 1000 1 -a 611 818 9 -a 611 637 7 -a 611 339 6 -a 611 459 5 -a 611 863 9 -a 611 81 3 -a 611 813 6 -a 611 859 4 -a 611 11 7 -a 611 736 5 -a 611 269 7 -a 611 51 2 -a 611 99 5 -a 611 250 1 -a 611 780 3 -a 611 736 7 -a 611 413 4 -a 611 879 1 -a 611 758 7 -a 611 760 7 -a 611 83 4 -a 611 148 3 -a 611 229 6 -a 611 506 1 -a 611 775 2 -a 611 895 8 -a 611 121 3 -a 611 425 1 -a 611 743 8 -a 611 96 5 -a 611 218 6 -a 611 355 6 -a 611 434 5 -a 611 676 8 -a 611 193 1 -a 611 514 3 -a 611 464 1 -a 611 28 4 -a 611 524 8 -a 611 175 8 -a 611 296 8 -a 612 574 3 -a 612 274 10 -a 612 546 3 -a 612 330 8 -a 612 958 2 -a 612 306 6 -a 612 864 7 -a 612 692 3 -a 612 42 7 -a 612 946 7 -a 612 839 3 -a 612 270 3 -a 612 428 2 -a 612 589 1 -a 612 140 4 -a 612 548 4 -a 612 882 1 -a 612 643 2 -a 612 206 9 -a 612 212 5 -a 612 53 5 -a 612 882 6 -a 612 404 7 -a 612 566 1 -a 612 321 4 -a 612 431 3 -a 612 66 1 -a 612 496 9 -a 612 727 7 -a 612 639 6 -a 612 769 5 -a 612 248 2 -a 612 968 8 -a 612 753 5 -a 612 181 9 -a 612 250 9 -a 612 592 5 -a 612 872 3 -a 612 291 8 -a 612 514 5 -a 612 686 3 -a 612 560 4 -a 612 941 9 -a 612 250 7 -a 612 699 9 -a 612 464 2 -a 612 238 9 -a 612 556 2 -a 612 82 4 -a 612 444 4 -a 612 767 10 -a 612 134 5 -a 612 301 8 -a 612 146 1 -a 612 700 8 -a 612 621 10 -a 612 577 1 -a 612 765 2 -a 612 92 5 -a 612 279 5 -a 612 379 7 -a 612 860 9 -a 612 526 10 -a 612 323 1 -a 612 589 4 -a 612 706 3 -a 612 572 5 -a 612 156 3 -a 612 554 4 -a 612 862 3 -a 612 669 4 -a 612 215 9 -a 612 397 7 -a 612 585 9 -a 612 465 9 -a 612 71 7 -a 612 24 10 -a 612 702 1 -a 612 626 9 -a 612 106 7 -a 612 121 6 -a 612 368 6 -a 612 239 1 -a 612 421 6 -a 612 513 10 -a 612 938 3 -a 612 18 4 -a 612 65 4 -a 612 678 7 -a 612 109 5 -a 612 343 10 -a 612 33 4 -a 612 969 2 -a 612 868 5 -a 612 355 1 -a 612 533 7 -a 612 550 1 -a 612 926 8 -a 613 688 2 -a 613 79 5 -a 613 763 8 -a 613 333 7 -a 613 293 10 -a 613 135 6 -a 613 917 1 -a 613 757 4 -a 613 205 6 -a 613 941 8 -a 613 435 4 -a 613 830 6 -a 613 22 8 -a 613 555 6 -a 613 173 5 -a 613 260 2 -a 613 976 6 -a 613 685 3 -a 613 174 8 -a 613 993 6 -a 613 750 7 -a 613 851 4 -a 613 77 6 -a 613 68 8 -a 613 883 2 -a 613 21 3 -a 613 936 3 -a 613 213 1 -a 613 553 7 -a 613 461 4 -a 613 114 5 -a 613 217 2 -a 613 539 4 -a 613 876 7 -a 613 549 8 -a 613 831 10 -a 613 441 4 -a 613 564 2 -a 613 190 7 -a 613 357 10 -a 613 998 6 -a 613 378 4 -a 613 528 2 -a 613 167 10 -a 613 638 6 -a 613 479 8 -a 613 852 2 -a 613 811 5 -a 613 447 9 -a 613 577 1 -a 613 637 5 -a 613 524 3 -a 613 644 6 -a 613 496 6 -a 613 544 9 -a 613 555 5 -a 613 708 7 -a 613 73 3 -a 613 822 3 -a 613 289 10 -a 613 529 7 -a 613 673 2 -a 613 837 1 -a 613 336 1 -a 613 659 2 -a 613 253 9 -a 613 899 5 -a 613 848 1 -a 613 610 9 -a 613 872 7 -a 613 843 3 -a 613 987 3 -a 613 375 2 -a 613 600 5 -a 613 854 2 -a 613 836 8 -a 613 386 8 -a 613 276 4 -a 613 388 9 -a 613 799 4 -a 613 8 5 -a 613 494 8 -a 613 319 3 -a 613 562 4 -a 613 177 9 -a 613 391 1 -a 613 553 9 -a 613 998 6 -a 613 679 6 -a 613 57 6 -a 613 647 2 -a 613 491 4 -a 613 392 8 -a 613 281 8 -a 613 743 6 -a 613 266 7 -a 613 104 5 -a 613 328 3 -a 613 113 1 -a 613 946 7 -a 613 291 3 -a 614 488 8 -a 614 931 9 -a 614 890 7 -a 614 317 1 -a 614 742 6 -a 614 252 7 -a 614 592 9 -a 614 106 4 -a 614 250 5 -a 614 367 9 -a 614 113 2 -a 614 743 4 -a 614 685 5 -a 614 674 7 -a 614 919 9 -a 614 51 2 -a 614 202 6 -a 614 893 6 -a 614 729 9 -a 614 259 6 -a 614 515 7 -a 614 195 6 -a 614 650 5 -a 614 795 6 -a 614 937 10 -a 614 916 6 -a 614 898 7 -a 614 241 9 -a 614 4 7 -a 614 820 10 -a 614 531 6 -a 614 491 9 -a 614 726 7 -a 614 396 9 -a 614 807 8 -a 614 443 5 -a 614 647 7 -a 614 375 4 -a 614 548 2 -a 614 896 3 -a 614 741 2 -a 614 660 8 -a 614 614 3 -a 614 401 3 -a 614 310 2 -a 614 509 9 -a 614 451 8 -a 614 511 8 -a 614 377 1 -a 614 155 2 -a 614 769 7 -a 614 891 8 -a 614 349 10 -a 614 395 6 -a 614 661 9 -a 614 261 6 -a 614 286 5 -a 614 534 3 -a 614 501 10 -a 614 289 8 -a 614 329 4 -a 614 7 5 -a 614 780 10 -a 614 30 2 -a 614 403 6 -a 614 562 1 -a 614 473 2 -a 614 25 3 -a 614 936 4 -a 614 921 4 -a 614 652 4 -a 614 656 4 -a 614 510 8 -a 614 28 10 -a 614 965 6 -a 614 478 3 -a 614 451 1 -a 614 370 5 -a 614 632 5 -a 614 196 8 -a 614 236 9 -a 614 980 9 -a 614 590 1 -a 614 896 10 -a 614 217 1 -a 614 875 6 -a 614 406 4 -a 614 717 1 -a 614 139 3 -a 614 734 7 -a 614 724 4 -a 614 918 2 -a 614 764 8 -a 614 102 5 -a 614 456 1 -a 614 212 4 -a 614 126 4 -a 614 367 1 -a 614 207 2 -a 614 22 4 -a 614 862 8 -a 614 532 1 -a 614 22 5 -a 614 802 10 -a 614 525 5 -a 614 500 10 -a 615 229 7 -a 615 895 6 -a 615 107 6 -a 615 424 9 -a 615 106 9 -a 615 63 3 -a 615 279 6 -a 615 863 1 -a 615 383 10 -a 615 995 10 -a 615 92 1 -a 615 694 10 -a 615 895 2 -a 615 855 6 -a 615 795 1 -a 615 326 3 -a 615 42 9 -a 615 921 7 -a 615 692 8 -a 615 249 8 -a 615 942 1 -a 615 686 4 -a 615 86 8 -a 615 449 7 -a 615 708 1 -a 615 888 1 -a 615 974 7 -a 615 183 10 -a 615 92 4 -a 615 844 5 -a 615 289 7 -a 615 515 5 -a 615 949 5 -a 615 351 6 -a 615 503 4 -a 615 926 5 -a 615 629 4 -a 615 341 6 -a 615 284 2 -a 615 600 5 -a 615 317 9 -a 615 376 6 -a 615 269 5 -a 615 187 6 -a 615 206 6 -a 615 40 4 -a 615 512 9 -a 615 248 2 -a 615 960 4 -a 615 180 3 -a 615 496 3 -a 615 877 4 -a 615 865 9 -a 615 581 1 -a 615 302 4 -a 615 548 1 -a 615 444 8 -a 615 251 6 -a 615 730 1 -a 615 535 9 -a 615 70 6 -a 615 25 9 -a 615 345 10 -a 615 527 1 -a 615 920 2 -a 615 974 7 -a 615 867 2 -a 615 179 8 -a 615 549 5 -a 615 160 8 -a 615 554 7 -a 615 817 4 -a 615 346 9 -a 615 760 7 -a 615 856 3 -a 615 858 5 -a 615 791 4 -a 615 13 5 -a 615 478 8 -a 615 644 2 -a 615 877 5 -a 615 34 3 -a 615 945 8 -a 615 401 4 -a 615 478 7 -a 615 171 9 -a 615 106 8 -a 615 240 1 -a 615 100 10 -a 615 13 6 -a 615 233 1 -a 615 445 2 -a 615 539 4 -a 615 128 8 -a 615 394 8 -a 615 382 3 -a 615 307 1 -a 615 942 7 -a 615 541 1 -a 615 860 9 -a 615 734 7 -a 615 886 6 -a 615 595 4 -a 615 566 5 -a 616 719 6 -a 616 577 6 -a 616 332 1 -a 616 731 2 -a 616 30 9 -a 616 975 9 -a 616 584 9 -a 616 64 4 -a 616 895 3 -a 616 984 1 -a 616 541 6 -a 616 41 5 -a 616 65 4 -a 616 528 3 -a 616 280 2 -a 616 165 4 -a 616 540 4 -a 616 513 3 -a 616 609 9 -a 616 55 1 -a 616 640 5 -a 616 436 9 -a 616 946 2 -a 616 919 2 -a 616 976 6 -a 616 782 10 -a 616 628 10 -a 616 837 4 -a 616 352 1 -a 616 169 2 -a 616 532 10 -a 616 929 4 -a 616 501 7 -a 616 238 8 -a 616 958 8 -a 616 451 7 -a 616 821 6 -a 616 322 1 -a 616 780 9 -a 616 537 4 -a 616 362 10 -a 616 845 9 -a 616 41 8 -a 616 642 2 -a 616 580 10 -a 616 130 9 -a 616 593 8 -a 616 634 3 -a 616 769 2 -a 616 570 6 -a 616 45 5 -a 616 691 6 -a 616 464 3 -a 616 448 7 -a 616 67 4 -a 616 833 6 -a 616 799 3 -a 616 236 2 -a 616 340 1 -a 616 703 4 -a 616 736 6 -a 616 577 10 -a 616 637 3 -a 616 162 8 -a 616 374 6 -a 616 633 10 -a 616 483 5 -a 616 129 1 -a 616 146 7 -a 616 845 6 -a 616 973 6 -a 616 186 4 -a 616 462 6 -a 616 957 2 -a 616 765 3 -a 616 591 4 -a 616 525 4 -a 616 375 7 -a 616 335 5 -a 616 70 10 -a 616 419 3 -a 616 1 3 -a 616 533 3 -a 616 415 1 -a 616 448 5 -a 616 600 9 -a 616 223 2 -a 616 223 4 -a 617 835 2 -a 617 562 10 -a 617 925 7 -a 617 546 1 -a 617 114 5 -a 617 537 2 -a 617 707 1 -a 617 487 6 -a 617 146 4 -a 617 166 6 -a 617 616 3 -a 617 291 8 -a 617 564 6 -a 617 476 10 -a 617 447 1 -a 617 497 2 -a 617 216 6 -a 617 13 3 -a 617 590 5 -a 617 347 4 -a 617 67 8 -a 617 348 8 -a 617 599 5 -a 617 399 1 -a 617 795 3 -a 617 174 2 -a 617 621 7 -a 617 158 6 -a 617 918 2 -a 617 529 1 -a 617 271 4 -a 617 430 8 -a 617 212 9 -a 617 758 9 -a 617 575 2 -a 617 377 9 -a 617 349 6 -a 617 865 2 -a 617 362 1 -a 617 912 1 -a 617 316 9 -a 617 808 8 -a 617 384 5 -a 617 532 10 -a 617 820 10 -a 617 381 9 -a 617 97 9 -a 617 142 5 -a 617 447 2 -a 617 81 5 -a 617 489 2 -a 617 21 7 -a 617 479 6 -a 617 260 2 -a 617 195 1 -a 617 75 10 -a 617 252 9 -a 617 178 9 -a 617 232 2 -a 617 145 10 -a 617 707 1 -a 617 503 5 -a 617 575 2 -a 617 918 2 -a 617 236 2 -a 617 125 2 -a 617 270 9 -a 617 584 9 -a 617 990 6 -a 617 631 2 -a 617 471 2 -a 617 281 4 -a 617 414 10 -a 617 855 1 -a 617 812 4 -a 617 209 7 -a 617 211 4 -a 617 909 9 -a 617 350 1 -a 617 657 2 -a 617 989 7 -a 617 839 8 -a 617 677 10 -a 617 444 10 -a 617 74 2 -a 617 871 7 -a 617 518 3 -a 617 325 8 -a 617 25 3 -a 617 750 5 -a 617 470 10 -a 617 731 2 -a 617 228 8 -a 617 20 6 -a 617 624 5 -a 617 463 8 -a 617 144 9 -a 617 893 4 -a 618 22 5 -a 618 109 5 -a 618 499 1 -a 618 492 1 -a 618 390 1 -a 618 912 7 -a 618 322 4 -a 618 177 8 -a 618 96 6 -a 618 532 2 -a 618 61 6 -a 618 445 8 -a 618 164 9 -a 618 26 8 -a 618 259 4 -a 618 841 6 -a 618 469 5 -a 618 332 4 -a 618 687 4 -a 618 986 9 -a 618 657 10 -a 618 711 1 -a 618 711 1 -a 618 102 1 -a 618 417 10 -a 618 938 9 -a 618 121 6 -a 618 16 3 -a 618 376 10 -a 618 264 10 -a 618 908 2 -a 618 397 3 -a 618 373 9 -a 618 382 9 -a 618 889 5 -a 618 762 7 -a 618 269 1 -a 618 186 1 -a 618 938 1 -a 618 364 10 -a 618 718 1 -a 618 999 4 -a 618 809 10 -a 618 881 1 -a 618 43 6 -a 618 697 3 -a 618 468 10 -a 618 375 1 -a 618 360 9 -a 618 429 5 -a 618 7 1 -a 618 46 1 -a 618 116 10 -a 618 108 5 -a 618 463 4 -a 618 29 4 -a 618 228 6 -a 618 478 4 -a 618 405 6 -a 618 491 8 -a 618 362 7 -a 618 801 8 -a 618 863 4 -a 618 743 1 -a 618 665 10 -a 618 600 8 -a 618 851 9 -a 618 514 8 -a 618 351 8 -a 618 544 5 -a 618 488 6 -a 618 135 9 -a 618 400 1 -a 618 487 9 -a 618 178 9 -a 618 73 3 -a 618 954 3 -a 618 552 10 -a 618 432 8 -a 618 358 1 -a 618 558 8 -a 618 477 2 -a 618 473 8 -a 618 665 5 -a 618 939 7 -a 618 502 1 -a 618 892 2 -a 618 393 9 -a 618 906 10 -a 618 358 4 -a 618 754 8 -a 618 682 8 -a 618 197 5 -a 618 472 5 -a 618 323 7 -a 618 796 2 -a 619 459 4 -a 619 149 3 -a 619 285 4 -a 619 810 7 -a 619 692 6 -a 619 772 9 -a 619 944 8 -a 619 67 10 -a 619 234 5 -a 619 97 4 -a 619 139 6 -a 619 163 10 -a 619 648 5 -a 619 570 10 -a 619 521 4 -a 619 181 8 -a 619 23 2 -a 619 993 4 -a 619 845 3 -a 619 961 1 -a 619 470 7 -a 619 712 7 -a 619 329 3 -a 619 351 4 -a 619 46 7 -a 619 58 4 -a 619 9 2 -a 619 242 9 -a 619 530 7 -a 619 331 8 -a 619 13 3 -a 619 988 1 -a 619 479 5 -a 619 298 2 -a 619 773 2 -a 619 146 6 -a 619 45 4 -a 619 693 8 -a 619 212 1 -a 619 279 3 -a 619 789 6 -a 619 351 10 -a 619 441 10 -a 619 413 8 -a 619 920 4 -a 619 961 2 -a 619 593 2 -a 619 942 7 -a 619 930 2 -a 619 414 4 -a 619 879 3 -a 619 375 2 -a 619 101 2 -a 619 183 3 -a 619 726 1 -a 619 146 4 -a 619 241 10 -a 619 734 6 -a 619 387 1 -a 619 770 1 -a 619 40 5 -a 619 400 10 -a 619 733 9 -a 619 518 2 -a 619 697 4 -a 619 482 6 -a 619 663 5 -a 619 741 2 -a 619 150 6 -a 619 874 6 -a 619 938 3 -a 619 200 2 -a 619 436 4 -a 619 326 2 -a 619 96 4 -a 619 372 6 -a 619 919 7 -a 619 13 9 -a 619 277 6 -a 619 308 3 -a 619 891 5 -a 619 652 7 -a 619 408 2 -a 619 50 6 -a 619 353 6 -a 619 554 9 -a 619 290 7 -a 619 62 7 -a 619 940 6 -a 619 35 5 -a 619 101 4 -a 619 315 3 -a 619 767 6 -a 619 618 10 -a 619 224 6 -a 619 256 3 -a 619 728 2 -a 619 373 6 -a 619 105 4 -a 619 722 1 -a 619 287 9 -a 619 305 10 -a 620 133 8 -a 620 612 5 -a 620 400 5 -a 620 505 5 -a 620 506 2 -a 620 412 1 -a 620 781 10 -a 620 813 6 -a 620 279 4 -a 620 408 9 -a 620 197 8 -a 620 328 5 -a 620 760 8 -a 620 750 8 -a 620 617 2 -a 620 821 8 -a 620 665 10 -a 620 651 4 -a 620 921 4 -a 620 980 8 -a 620 393 5 -a 620 514 3 -a 620 966 2 -a 620 617 3 -a 620 769 6 -a 620 669 5 -a 620 989 3 -a 620 874 3 -a 620 367 2 -a 620 251 1 -a 620 154 9 -a 620 499 8 -a 620 863 5 -a 620 553 6 -a 620 344 7 -a 620 964 8 -a 620 760 9 -a 620 133 4 -a 620 218 4 -a 620 143 8 -a 620 329 9 -a 620 545 9 -a 620 903 10 -a 620 54 10 -a 620 137 7 -a 620 699 4 -a 620 718 2 -a 620 787 6 -a 620 596 2 -a 620 673 2 -a 620 156 8 -a 620 85 5 -a 620 615 6 -a 620 772 8 -a 620 854 3 -a 620 259 10 -a 620 736 4 -a 620 703 1 -a 620 625 4 -a 620 987 8 -a 620 856 4 -a 620 100 2 -a 620 825 3 -a 620 384 6 -a 620 78 10 -a 620 144 1 -a 620 323 7 -a 620 837 2 -a 620 276 2 -a 620 541 7 -a 620 980 9 -a 620 604 1 -a 620 61 7 -a 620 858 6 -a 620 657 4 -a 620 198 7 -a 620 532 2 -a 620 351 3 -a 620 984 2 -a 620 103 5 -a 620 115 5 -a 620 188 2 -a 620 613 3 -a 620 886 4 -a 620 17 10 -a 620 872 7 -a 620 598 4 -a 620 719 1 -a 620 472 7 -a 620 560 2 -a 620 550 5 -a 620 571 8 -a 620 360 6 -a 620 933 4 -a 620 649 9 -a 620 503 5 -a 620 231 5 -a 620 461 6 -a 620 779 10 -a 620 771 6 -a 621 416 10 -a 621 358 1 -a 621 832 7 -a 621 249 2 -a 621 5 8 -a 621 781 2 -a 621 341 6 -a 621 988 8 -a 621 883 8 -a 621 339 4 -a 621 79 7 -a 621 46 9 -a 621 952 9 -a 621 964 7 -a 621 62 10 -a 621 799 6 -a 621 537 1 -a 621 780 5 -a 621 246 7 -a 621 72 6 -a 621 305 1 -a 621 817 6 -a 621 431 9 -a 621 213 1 -a 621 441 3 -a 621 934 5 -a 621 444 2 -a 621 901 3 -a 621 688 7 -a 621 190 10 -a 621 293 3 -a 621 21 3 -a 621 541 9 -a 621 11 8 -a 621 1 7 -a 621 297 2 -a 621 351 6 -a 621 989 6 -a 621 156 4 -a 621 690 8 -a 621 43 6 -a 621 201 9 -a 621 617 1 -a 621 263 4 -a 621 391 9 -a 621 519 3 -a 621 18 9 -a 621 636 10 -a 621 590 7 -a 621 323 6 -a 621 428 10 -a 621 535 8 -a 621 868 9 -a 621 930 4 -a 621 978 1 -a 621 745 10 -a 621 593 1 -a 621 144 10 -a 621 13 4 -a 621 613 1 -a 621 140 10 -a 621 553 7 -a 621 624 1 -a 621 141 4 -a 621 850 5 -a 621 974 9 -a 621 105 4 -a 621 639 8 -a 621 147 9 -a 621 181 10 -a 621 231 1 -a 621 128 2 -a 621 443 5 -a 621 621 2 -a 621 646 10 -a 621 461 6 -a 621 233 1 -a 621 212 7 -a 621 783 7 -a 621 660 10 -a 621 208 7 -a 621 293 7 -a 621 504 10 -a 621 113 4 -a 621 247 10 -a 621 224 6 -a 621 705 7 -a 621 390 5 -a 621 236 2 -a 621 293 1 -a 621 529 9 -a 621 788 8 -a 621 916 2 -a 621 669 10 -a 621 613 8 -a 621 866 3 -a 621 773 9 -a 621 593 6 -a 621 480 8 -a 621 919 4 -a 621 774 9 -a 621 711 1 -a 621 23 9 -a 621 192 5 -a 622 307 6 -a 622 668 2 -a 622 652 4 -a 622 539 5 -a 622 879 10 -a 622 410 4 -a 622 175 6 -a 622 62 6 -a 622 703 1 -a 622 678 7 -a 622 174 4 -a 622 949 8 -a 622 901 10 -a 622 878 5 -a 622 314 2 -a 622 112 4 -a 622 147 5 -a 622 842 3 -a 622 899 10 -a 622 38 1 -a 622 487 6 -a 622 488 6 -a 622 903 1 -a 622 235 5 -a 622 56 2 -a 622 359 4 -a 622 130 9 -a 622 829 7 -a 622 45 4 -a 622 152 2 -a 622 351 5 -a 622 819 9 -a 622 648 3 -a 622 890 9 -a 622 674 4 -a 622 34 8 -a 622 40 5 -a 622 735 5 -a 622 736 7 -a 622 717 9 -a 622 909 7 -a 622 660 4 -a 622 593 1 -a 622 762 1 -a 622 973 3 -a 622 704 6 -a 622 908 1 -a 622 790 9 -a 622 578 3 -a 622 946 5 -a 622 252 7 -a 622 41 9 -a 622 824 6 -a 622 487 10 -a 622 97 9 -a 622 158 8 -a 622 616 2 -a 622 925 8 -a 622 202 6 -a 622 767 5 -a 622 921 8 -a 622 553 2 -a 622 561 5 -a 622 545 10 -a 622 418 1 -a 622 210 2 -a 622 578 4 -a 622 457 7 -a 622 945 2 -a 622 289 1 -a 622 149 10 -a 622 829 3 -a 622 948 5 -a 622 741 1 -a 622 566 9 -a 622 896 10 -a 622 420 9 -a 622 450 9 -a 622 661 1 -a 622 997 4 -a 622 371 5 -a 622 913 8 -a 622 14 5 -a 622 170 9 -a 622 375 4 -a 622 110 1 -a 622 328 5 -a 622 990 5 -a 622 10 9 -a 622 529 7 -a 622 732 5 -a 622 931 4 -a 622 57 6 -a 622 268 4 -a 622 451 4 -a 622 474 6 -a 622 478 8 -a 622 4 9 -a 622 930 6 -a 622 398 9 -a 622 292 6 -a 622 54 4 -a 622 202 7 -a 622 215 6 -a 622 794 9 -a 622 767 6 -a 622 86 4 -a 622 189 4 -a 622 192 10 -a 623 746 2 -a 623 162 6 -a 623 562 10 -a 623 634 10 -a 623 175 3 -a 623 732 9 -a 623 284 8 -a 623 35 3 -a 623 973 7 -a 623 293 4 -a 623 563 7 -a 623 680 6 -a 623 199 5 -a 623 620 9 -a 623 948 9 -a 623 649 7 -a 623 69 3 -a 623 401 9 -a 623 652 2 -a 623 999 6 -a 623 798 5 -a 623 943 9 -a 623 28 3 -a 623 999 9 -a 623 133 6 -a 623 822 8 -a 623 741 4 -a 623 218 5 -a 623 933 6 -a 623 964 7 -a 623 147 4 -a 623 470 10 -a 623 573 10 -a 623 321 4 -a 623 177 2 -a 623 557 6 -a 623 604 3 -a 623 211 8 -a 623 505 5 -a 623 897 8 -a 623 774 7 -a 623 161 8 -a 623 71 9 -a 623 369 4 -a 623 84 3 -a 623 720 8 -a 623 437 9 -a 623 484 3 -a 623 347 2 -a 623 411 10 -a 623 257 1 -a 623 266 7 -a 623 439 3 -a 623 231 9 -a 623 398 5 -a 623 236 8 -a 623 971 5 -a 623 616 6 -a 623 221 8 -a 623 879 2 -a 623 555 8 -a 623 368 5 -a 623 325 3 -a 623 103 10 -a 623 688 2 -a 623 501 9 -a 623 659 2 -a 623 268 9 -a 623 712 2 -a 623 140 3 -a 623 140 1 -a 623 461 1 -a 623 300 4 -a 623 210 8 -a 623 829 5 -a 623 383 3 -a 623 929 5 -a 623 241 10 -a 623 866 4 -a 623 252 9 -a 623 652 8 -a 623 98 2 -a 623 517 10 -a 623 66 6 -a 623 328 9 -a 623 914 9 -a 623 301 8 -a 623 274 4 -a 623 505 10 -a 623 521 8 -a 623 129 9 -a 623 35 4 -a 623 888 5 -a 623 453 5 -a 623 138 4 -a 623 552 3 -a 623 953 1 -a 623 796 3 -a 623 819 4 -a 623 640 4 -a 624 935 9 -a 624 958 3 -a 624 76 2 -a 624 210 5 -a 624 143 10 -a 624 904 2 -a 624 592 7 -a 624 48 6 -a 624 121 9 -a 624 433 8 -a 624 299 3 -a 624 772 10 -a 624 530 7 -a 624 815 6 -a 624 837 9 -a 624 857 9 -a 624 704 7 -a 624 113 1 -a 624 107 9 -a 624 185 6 -a 624 633 6 -a 624 235 8 -a 624 219 7 -a 624 497 3 -a 624 687 10 -a 624 356 5 -a 624 24 2 -a 624 615 4 -a 624 128 6 -a 624 842 2 -a 624 231 10 -a 624 38 10 -a 624 775 8 -a 624 306 5 -a 624 248 3 -a 624 917 6 -a 624 186 9 -a 624 839 3 -a 624 964 2 -a 624 306 1 -a 624 248 3 -a 624 238 7 -a 624 53 9 -a 624 777 10 -a 624 28 2 -a 624 889 5 -a 624 610 10 -a 624 732 8 -a 624 716 6 -a 624 916 8 -a 624 609 10 -a 624 950 9 -a 624 110 3 -a 624 81 10 -a 624 612 2 -a 624 466 10 -a 624 104 6 -a 624 202 7 -a 624 593 4 -a 624 945 5 -a 624 432 1 -a 624 630 6 -a 624 695 4 -a 624 738 6 -a 624 877 8 -a 624 588 9 -a 624 923 4 -a 624 692 5 -a 624 527 4 -a 624 204 9 -a 624 939 5 -a 624 765 8 -a 624 256 6 -a 624 691 5 -a 624 792 1 -a 624 120 8 -a 624 276 6 -a 624 499 5 -a 624 96 2 -a 624 991 3 -a 624 390 7 -a 624 704 8 -a 624 916 4 -a 624 500 2 -a 624 785 6 -a 624 503 5 -a 624 965 4 -a 624 888 4 -a 624 705 7 -a 624 533 5 -a 624 809 8 -a 624 112 5 -a 624 138 9 -a 624 479 2 -a 624 849 4 -a 624 42 6 -a 624 747 2 -a 624 682 5 -a 624 569 3 -a 625 950 2 -a 625 596 6 -a 625 309 5 -a 625 181 10 -a 625 262 1 -a 625 76 1 -a 625 300 8 -a 625 538 8 -a 625 575 4 -a 625 395 5 -a 625 504 5 -a 625 964 10 -a 625 75 1 -a 625 396 8 -a 625 439 7 -a 625 859 6 -a 625 898 9 -a 625 379 3 -a 625 722 2 -a 625 578 6 -a 625 911 5 -a 625 506 2 -a 625 690 7 -a 625 25 10 -a 625 985 5 -a 625 514 9 -a 625 15 5 -a 625 2 1 -a 625 237 4 -a 625 696 1 -a 625 570 7 -a 625 162 6 -a 625 267 7 -a 625 878 6 -a 625 343 10 -a 625 528 6 -a 625 954 1 -a 625 642 6 -a 625 41 1 -a 625 504 6 -a 625 13 1 -a 625 545 1 -a 625 443 2 -a 625 87 10 -a 625 940 9 -a 625 882 9 -a 625 945 3 -a 625 813 9 -a 625 236 4 -a 625 642 4 -a 625 367 2 -a 625 123 9 -a 625 124 7 -a 625 32 2 -a 625 147 10 -a 625 84 2 -a 625 545 10 -a 625 161 10 -a 625 85 5 -a 625 781 7 -a 625 856 9 -a 625 655 7 -a 625 943 9 -a 625 98 1 -a 625 508 1 -a 625 261 8 -a 625 625 6 -a 625 437 1 -a 625 902 8 -a 625 666 1 -a 625 940 4 -a 625 914 2 -a 625 186 6 -a 625 359 8 -a 625 1000 3 -a 625 101 8 -a 625 216 7 -a 625 920 1 -a 625 913 4 -a 625 451 7 -a 625 538 1 -a 625 255 4 -a 625 573 2 -a 625 661 3 -a 625 286 3 -a 625 719 6 -a 625 744 3 -a 625 831 6 -a 625 879 1 -a 626 828 4 -a 626 587 2 -a 626 710 6 -a 626 458 4 -a 626 505 2 -a 626 807 10 -a 626 966 9 -a 626 765 9 -a 626 408 1 -a 626 378 9 -a 626 643 6 -a 626 49 9 -a 626 294 9 -a 626 532 6 -a 626 234 9 -a 626 652 4 -a 626 508 6 -a 626 334 1 -a 626 867 8 -a 626 403 6 -a 626 222 10 -a 626 293 6 -a 626 940 6 -a 626 477 7 -a 626 866 7 -a 626 576 4 -a 626 762 3 -a 626 560 8 -a 626 295 8 -a 626 568 8 -a 626 415 5 -a 626 99 1 -a 626 131 3 -a 626 100 5 -a 626 556 3 -a 626 635 9 -a 626 907 5 -a 626 497 3 -a 626 376 1 -a 626 290 9 -a 626 875 9 -a 626 338 7 -a 626 144 7 -a 626 525 9 -a 626 571 6 -a 626 795 5 -a 626 8 3 -a 626 904 2 -a 626 637 9 -a 626 411 10 -a 626 101 10 -a 626 929 9 -a 626 326 9 -a 626 577 9 -a 626 770 9 -a 626 902 6 -a 626 315 3 -a 626 306 4 -a 626 172 5 -a 626 882 1 -a 626 720 6 -a 626 270 1 -a 626 819 2 -a 626 826 1 -a 626 623 10 -a 626 701 10 -a 626 298 8 -a 626 998 7 -a 626 990 3 -a 626 148 4 -a 626 991 10 -a 626 303 6 -a 626 291 7 -a 626 491 3 -a 626 873 2 -a 626 61 2 -a 626 499 6 -a 626 752 4 -a 626 697 5 -a 626 909 1 -a 626 853 2 -a 626 602 1 -a 626 210 4 -a 626 405 1 -a 626 347 10 -a 626 87 1 -a 626 719 3 -a 626 652 1 -a 626 259 6 -a 626 577 9 -a 626 347 4 -a 626 528 3 -a 626 564 2 -a 626 142 1 -a 626 329 4 -a 626 162 2 -a 626 842 4 -a 626 627 1 -a 626 135 7 -a 626 808 6 -a 626 774 10 -a 626 101 7 -a 626 86 5 -a 627 41 8 -a 627 592 8 -a 627 959 10 -a 627 101 2 -a 627 66 10 -a 627 686 10 -a 627 798 3 -a 627 974 7 -a 627 514 7 -a 627 375 6 -a 627 159 9 -a 627 919 8 -a 627 721 9 -a 627 246 8 -a 627 613 5 -a 627 349 1 -a 627 504 1 -a 627 165 5 -a 627 695 3 -a 627 7 5 -a 627 729 9 -a 627 836 10 -a 627 336 3 -a 627 890 7 -a 627 654 9 -a 627 962 1 -a 627 1 1 -a 627 437 7 -a 627 711 7 -a 627 101 7 -a 627 522 6 -a 627 751 9 -a 627 692 1 -a 627 456 10 -a 627 852 7 -a 627 757 1 -a 627 118 1 -a 627 625 7 -a 627 706 2 -a 627 631 9 -a 627 999 6 -a 627 865 3 -a 627 525 2 -a 627 695 3 -a 627 86 5 -a 627 114 9 -a 627 19 4 -a 627 589 6 -a 627 278 9 -a 627 714 4 -a 627 595 4 -a 627 525 10 -a 627 930 10 -a 627 872 5 -a 627 154 3 -a 627 867 3 -a 627 872 7 -a 627 590 9 -a 627 554 3 -a 627 972 10 -a 627 88 5 -a 627 280 6 -a 627 640 1 -a 627 543 4 -a 627 107 3 -a 627 372 9 -a 627 660 7 -a 627 731 8 -a 627 54 2 -a 627 267 4 -a 627 705 5 -a 627 918 3 -a 627 791 1 -a 627 376 3 -a 627 904 2 -a 627 394 2 -a 627 567 6 -a 627 158 4 -a 627 83 1 -a 627 137 2 -a 627 139 7 -a 627 608 3 -a 627 43 9 -a 627 761 6 -a 627 909 10 -a 627 857 7 -a 627 327 4 -a 627 438 6 -a 627 805 7 -a 627 414 2 -a 627 718 10 -a 627 420 2 -a 627 956 9 -a 627 824 1 -a 627 791 1 -a 627 592 10 -a 627 531 2 -a 627 844 6 -a 627 858 3 -a 627 211 10 -a 627 737 1 -a 627 624 4 -a 627 586 7 -a 627 715 5 -a 627 504 3 -a 627 980 8 -a 627 257 9 -a 627 661 9 -a 627 38 10 -a 627 394 5 -a 628 799 2 -a 628 645 7 -a 628 436 2 -a 628 785 8 -a 628 382 8 -a 628 320 7 -a 628 617 5 -a 628 708 8 -a 628 758 8 -a 628 397 10 -a 628 97 2 -a 628 451 5 -a 628 816 5 -a 628 28 6 -a 628 250 3 -a 628 583 7 -a 628 619 1 -a 628 780 3 -a 628 402 5 -a 628 452 9 -a 628 991 6 -a 628 115 9 -a 628 52 1 -a 628 552 5 -a 628 829 8 -a 628 555 7 -a 628 507 10 -a 628 62 2 -a 628 191 5 -a 628 545 1 -a 628 455 4 -a 628 989 3 -a 628 165 10 -a 628 890 4 -a 628 749 2 -a 628 546 8 -a 628 185 10 -a 628 342 6 -a 628 229 8 -a 628 942 9 -a 628 738 5 -a 628 325 5 -a 628 368 9 -a 628 530 6 -a 628 353 3 -a 628 618 6 -a 628 88 6 -a 628 971 10 -a 628 373 9 -a 628 489 3 -a 628 399 7 -a 628 339 10 -a 628 603 10 -a 628 450 1 -a 628 891 4 -a 628 408 9 -a 628 373 3 -a 628 469 9 -a 628 170 1 -a 628 917 9 -a 628 923 4 -a 628 134 1 -a 628 58 2 -a 628 788 4 -a 628 883 3 -a 628 603 10 -a 628 972 10 -a 628 200 5 -a 628 832 4 -a 628 890 10 -a 628 937 10 -a 628 132 9 -a 628 233 3 -a 628 442 2 -a 628 484 9 -a 628 850 4 -a 628 529 10 -a 628 431 2 -a 628 199 2 -a 628 829 10 -a 628 537 4 -a 628 596 2 -a 628 254 4 -a 628 403 6 -a 628 233 5 -a 628 776 2 -a 628 447 6 -a 628 402 7 -a 628 668 6 -a 628 345 6 -a 628 535 4 -a 628 725 8 -a 628 108 3 -a 628 393 6 -a 628 304 6 -a 628 56 8 -a 628 592 7 -a 628 111 6 -a 628 945 1 -a 628 505 2 -a 628 242 9 -a 628 153 10 -a 628 946 9 -a 628 726 8 -a 629 451 2 -a 629 132 3 -a 629 177 2 -a 629 444 5 -a 629 960 8 -a 629 713 7 -a 629 15 8 -a 629 189 6 -a 629 92 5 -a 629 421 8 -a 629 867 10 -a 629 440 2 -a 629 822 2 -a 629 510 6 -a 629 785 7 -a 629 332 2 -a 629 211 8 -a 629 892 7 -a 629 725 10 -a 629 514 5 -a 629 947 7 -a 629 292 10 -a 629 624 8 -a 629 867 8 -a 629 796 8 -a 629 865 9 -a 629 718 2 -a 629 566 4 -a 629 998 1 -a 629 144 5 -a 629 697 8 -a 629 150 2 -a 629 587 10 -a 629 632 3 -a 629 862 4 -a 629 601 4 -a 629 820 6 -a 629 953 3 -a 629 594 2 -a 629 216 2 -a 629 795 5 -a 629 10 10 -a 629 13 4 -a 629 281 4 -a 629 794 8 -a 629 345 5 -a 629 491 5 -a 629 661 3 -a 629 45 10 -a 629 584 4 -a 629 336 8 -a 629 603 7 -a 629 426 6 -a 629 108 7 -a 629 443 10 -a 629 421 9 -a 629 825 6 -a 629 394 8 -a 629 968 7 -a 629 681 7 -a 629 543 3 -a 629 530 8 -a 629 289 3 -a 629 381 7 -a 629 106 1 -a 629 84 6 -a 629 309 3 -a 629 700 4 -a 629 300 2 -a 629 80 10 -a 629 709 9 -a 629 312 5 -a 629 360 8 -a 629 478 4 -a 629 656 3 -a 629 850 10 -a 629 114 1 -a 629 700 9 -a 629 829 3 -a 629 697 9 -a 629 12 5 -a 629 407 4 -a 629 99 5 -a 629 119 8 -a 629 849 5 -a 629 519 7 -a 629 943 1 -a 629 833 8 -a 629 913 10 -a 629 886 5 -a 629 490 4 -a 629 431 4 -a 629 391 7 -a 629 778 7 -a 630 811 2 -a 630 496 1 -a 630 861 7 -a 630 96 10 -a 630 171 3 -a 630 136 1 -a 630 175 10 -a 630 879 4 -a 630 448 2 -a 630 534 8 -a 630 332 9 -a 630 79 5 -a 630 359 3 -a 630 446 10 -a 630 779 3 -a 630 163 3 -a 630 118 1 -a 630 790 7 -a 630 569 4 -a 630 216 3 -a 630 908 3 -a 630 393 5 -a 630 735 9 -a 630 826 4 -a 630 202 5 -a 630 623 8 -a 630 687 8 -a 630 691 10 -a 630 29 4 -a 630 53 10 -a 630 444 3 -a 630 840 6 -a 630 548 4 -a 630 280 7 -a 630 935 8 -a 630 719 9 -a 630 416 10 -a 630 85 4 -a 630 573 1 -a 630 863 2 -a 630 618 3 -a 630 905 2 -a 630 941 7 -a 630 976 5 -a 630 326 9 -a 630 695 2 -a 630 114 2 -a 630 443 5 -a 630 460 9 -a 630 682 4 -a 630 659 8 -a 630 343 9 -a 630 50 10 -a 630 369 1 -a 630 144 6 -a 630 251 9 -a 630 991 8 -a 630 830 7 -a 630 941 1 -a 630 882 9 -a 630 360 4 -a 630 834 3 -a 630 406 8 -a 630 640 9 -a 630 744 9 -a 630 100 5 -a 630 31 7 -a 630 828 8 -a 630 672 6 -a 630 893 7 -a 630 421 6 -a 630 552 2 -a 630 809 2 -a 630 372 9 -a 630 877 8 -a 630 480 7 -a 630 485 10 -a 630 296 4 -a 630 939 10 -a 630 142 1 -a 630 954 9 -a 630 258 3 -a 630 192 10 -a 630 298 1 -a 630 401 8 -a 630 442 4 -a 630 264 3 -a 630 207 9 -a 630 359 9 -a 630 258 10 -a 630 64 2 -a 630 718 7 -a 630 68 9 -a 630 469 1 -a 630 333 8 -a 630 811 7 -a 630 568 9 -a 630 363 1 -a 631 615 10 -a 631 216 2 -a 631 231 4 -a 631 11 6 -a 631 767 3 -a 631 16 7 -a 631 383 9 -a 631 620 1 -a 631 495 9 -a 631 867 1 -a 631 915 2 -a 631 409 6 -a 631 844 1 -a 631 666 1 -a 631 176 9 -a 631 117 3 -a 631 43 7 -a 631 617 9 -a 631 380 7 -a 631 249 3 -a 631 975 10 -a 631 637 10 -a 631 312 3 -a 631 669 7 -a 631 704 7 -a 631 781 7 -a 631 491 6 -a 631 324 7 -a 631 340 3 -a 631 81 1 -a 631 539 5 -a 631 570 5 -a 631 91 2 -a 631 282 5 -a 631 585 4 -a 631 473 4 -a 631 901 8 -a 631 55 6 -a 631 316 8 -a 631 791 4 -a 631 464 9 -a 631 300 3 -a 631 610 5 -a 631 105 8 -a 631 475 7 -a 631 726 7 -a 631 147 3 -a 631 67 7 -a 631 81 7 -a 631 395 5 -a 631 18 10 -a 631 717 6 -a 631 707 5 -a 631 686 5 -a 631 397 10 -a 631 463 10 -a 631 662 1 -a 631 887 6 -a 631 786 5 -a 631 967 6 -a 631 301 8 -a 631 547 10 -a 631 33 5 -a 631 582 5 -a 631 107 5 -a 631 506 7 -a 631 458 3 -a 631 162 8 -a 631 821 9 -a 631 224 6 -a 631 625 6 -a 631 96 2 -a 631 833 3 -a 631 729 3 -a 631 570 6 -a 631 534 2 -a 631 876 5 -a 631 636 3 -a 631 614 10 -a 631 246 2 -a 631 653 1 -a 631 306 8 -a 631 952 3 -a 631 314 9 -a 631 702 5 -a 631 390 1 -a 631 976 9 -a 631 564 1 -a 631 152 1 -a 631 952 1 -a 631 506 2 -a 631 452 3 -a 631 474 1 -a 631 539 8 -a 631 9 2 -a 631 581 7 -a 631 20 10 -a 631 466 9 -a 632 742 2 -a 632 840 6 -a 632 689 7 -a 632 342 8 -a 632 935 1 -a 632 497 5 -a 632 46 4 -a 632 480 2 -a 632 6 7 -a 632 921 7 -a 632 91 7 -a 632 619 5 -a 632 143 10 -a 632 744 10 -a 632 924 6 -a 632 70 10 -a 632 33 10 -a 632 602 6 -a 632 460 8 -a 632 141 2 -a 632 611 5 -a 632 936 10 -a 632 647 4 -a 632 38 9 -a 632 385 1 -a 632 161 1 -a 632 46 6 -a 632 965 7 -a 632 180 2 -a 632 511 4 -a 632 682 6 -a 632 175 10 -a 632 929 10 -a 632 671 9 -a 632 45 6 -a 632 384 3 -a 632 676 1 -a 632 965 7 -a 632 474 7 -a 632 270 5 -a 632 83 2 -a 632 193 10 -a 632 169 6 -a 632 153 2 -a 632 226 6 -a 632 770 7 -a 632 612 8 -a 632 209 2 -a 632 911 6 -a 632 198 5 -a 632 120 1 -a 632 533 2 -a 632 235 2 -a 632 505 1 -a 632 693 8 -a 632 280 5 -a 632 445 3 -a 632 872 10 -a 632 790 2 -a 632 103 4 -a 632 866 8 -a 632 964 9 -a 632 101 9 -a 632 770 5 -a 632 610 10 -a 632 145 6 -a 632 129 3 -a 632 261 6 -a 632 86 3 -a 632 602 6 -a 632 530 4 -a 632 168 6 -a 632 795 10 -a 632 698 5 -a 632 320 2 -a 632 444 3 -a 632 931 9 -a 632 204 10 -a 632 330 3 -a 632 104 8 -a 632 324 10 -a 632 862 7 -a 632 338 1 -a 632 828 9 -a 632 530 10 -a 632 617 7 -a 632 248 1 -a 632 377 4 -a 632 382 9 -a 632 350 6 -a 632 218 9 -a 632 321 6 -a 632 451 6 -a 632 987 2 -a 632 930 4 -a 632 595 10 -a 632 91 6 -a 632 166 2 -a 632 680 9 -a 632 692 4 -a 632 695 6 -a 632 848 2 -a 632 462 10 -a 632 369 7 -a 632 143 1 -a 632 457 3 -a 632 812 2 -a 632 50 10 -a 632 661 9 -a 632 117 2 -a 632 153 2 -a 632 984 7 -a 632 978 1 -a 632 491 5 -a 632 787 3 -a 632 483 10 -a 632 83 4 -a 632 10 6 -a 632 859 2 -a 632 465 7 -a 632 360 1 -a 633 52 7 -a 633 785 10 -a 633 810 6 -a 633 14 8 -a 633 691 4 -a 633 380 8 -a 633 104 6 -a 633 856 2 -a 633 36 4 -a 633 795 5 -a 633 527 4 -a 633 883 8 -a 633 233 1 -a 633 895 1 -a 633 1 4 -a 633 689 1 -a 633 682 6 -a 633 50 6 -a 633 325 6 -a 633 798 4 -a 633 203 6 -a 633 284 9 -a 633 751 7 -a 633 693 3 -a 633 46 3 -a 633 209 4 -a 633 775 1 -a 633 56 2 -a 633 43 10 -a 633 215 4 -a 633 415 5 -a 633 94 8 -a 633 1000 10 -a 633 200 2 -a 633 107 1 -a 633 666 3 -a 633 579 5 -a 633 210 3 -a 633 497 1 -a 633 614 10 -a 633 472 4 -a 633 212 3 -a 633 893 9 -a 633 473 1 -a 633 901 9 -a 633 550 2 -a 633 522 5 -a 633 201 4 -a 633 323 2 -a 633 724 6 -a 633 485 5 -a 633 49 2 -a 633 392 2 -a 633 530 3 -a 633 257 8 -a 633 143 5 -a 633 585 3 -a 633 299 7 -a 633 357 3 -a 633 999 9 -a 633 392 7 -a 633 332 7 -a 633 174 10 -a 633 498 2 -a 633 997 8 -a 633 753 8 -a 633 707 4 -a 633 470 7 -a 633 342 2 -a 633 687 4 -a 633 468 4 -a 633 814 3 -a 633 898 5 -a 633 337 7 -a 633 262 7 -a 633 774 8 -a 633 886 9 -a 633 783 7 -a 633 975 2 -a 633 185 8 -a 633 483 5 -a 633 435 1 -a 633 233 4 -a 633 874 8 -a 633 964 7 -a 633 490 1 -a 633 525 1 -a 633 788 4 -a 633 349 1 -a 633 499 8 -a 633 156 1 -a 633 680 7 -a 633 673 2 -a 633 653 10 -a 633 653 9 -a 633 401 7 -a 633 336 3 -a 633 98 5 -a 633 742 3 -a 633 565 6 -a 633 531 10 -a 633 895 4 -a 633 901 1 -a 633 792 10 -a 634 645 4 -a 634 763 10 -a 634 551 10 -a 634 595 7 -a 634 947 10 -a 634 9 1 -a 634 5 9 -a 634 155 3 -a 634 882 1 -a 634 968 10 -a 634 644 7 -a 634 874 2 -a 634 468 2 -a 634 408 2 -a 634 198 5 -a 634 967 2 -a 634 563 10 -a 634 877 8 -a 634 615 2 -a 634 191 3 -a 634 505 7 -a 634 526 5 -a 634 602 4 -a 634 732 6 -a 634 523 10 -a 634 143 9 -a 634 239 6 -a 634 394 2 -a 634 19 5 -a 634 6 2 -a 634 14 8 -a 634 781 9 -a 634 556 6 -a 634 608 10 -a 634 703 7 -a 634 564 7 -a 634 612 10 -a 634 858 2 -a 634 422 9 -a 634 555 7 -a 634 477 6 -a 634 271 10 -a 634 884 1 -a 634 468 3 -a 634 965 4 -a 634 422 7 -a 634 320 5 -a 634 555 1 -a 634 613 7 -a 634 825 10 -a 634 545 2 -a 634 114 2 -a 634 402 4 -a 634 252 9 -a 634 637 7 -a 634 544 5 -a 634 490 5 -a 634 6 6 -a 634 563 5 -a 634 496 5 -a 634 19 5 -a 634 319 9 -a 634 27 8 -a 634 626 7 -a 634 591 7 -a 634 213 6 -a 634 855 3 -a 634 767 5 -a 634 307 10 -a 634 258 3 -a 634 765 3 -a 634 167 4 -a 634 725 1 -a 634 705 7 -a 634 588 4 -a 634 20 2 -a 634 235 2 -a 634 176 3 -a 634 844 7 -a 634 779 6 -a 634 290 4 -a 634 222 4 -a 634 7 8 -a 634 926 6 -a 634 765 1 -a 634 496 9 -a 634 931 3 -a 634 303 10 -a 634 991 8 -a 634 949 3 -a 634 622 1 -a 634 550 3 -a 634 619 1 -a 634 584 9 -a 634 762 4 -a 634 449 8 -a 634 571 9 -a 634 504 2 -a 634 755 2 -a 634 828 3 -a 634 245 3 -a 634 921 10 -a 634 528 2 -a 635 949 4 -a 635 485 6 -a 635 547 8 -a 635 160 9 -a 635 660 10 -a 635 367 4 -a 635 938 1 -a 635 949 8 -a 635 588 1 -a 635 944 1 -a 635 850 4 -a 635 328 8 -a 635 416 3 -a 635 756 1 -a 635 631 8 -a 635 382 4 -a 635 680 10 -a 635 228 4 -a 635 375 1 -a 635 205 6 -a 635 846 6 -a 635 958 7 -a 635 966 9 -a 635 270 6 -a 635 504 4 -a 635 446 7 -a 635 307 5 -a 635 690 1 -a 635 921 8 -a 635 834 3 -a 635 614 1 -a 635 381 3 -a 635 357 2 -a 635 773 7 -a 635 16 9 -a 635 723 10 -a 635 687 9 -a 635 965 9 -a 635 286 2 -a 635 606 8 -a 635 790 8 -a 635 613 5 -a 635 522 2 -a 635 219 6 -a 635 379 1 -a 635 177 1 -a 635 446 7 -a 635 753 9 -a 635 382 10 -a 635 267 5 -a 635 687 10 -a 635 323 4 -a 635 536 3 -a 635 166 6 -a 635 768 4 -a 635 536 10 -a 635 473 3 -a 635 433 7 -a 635 432 9 -a 635 282 6 -a 635 23 7 -a 635 812 3 -a 635 638 8 -a 635 795 8 -a 635 827 10 -a 635 336 2 -a 635 457 9 -a 635 767 2 -a 635 621 10 -a 635 39 5 -a 635 533 1 -a 635 210 7 -a 635 35 6 -a 635 30 3 -a 635 428 1 -a 635 413 5 -a 635 206 7 -a 635 874 1 -a 635 142 6 -a 635 587 7 -a 635 116 3 -a 635 828 8 -a 635 910 2 -a 635 652 10 -a 635 993 4 -a 635 653 8 -a 635 163 1 -a 635 441 9 -a 635 62 2 -a 635 594 10 -a 635 723 10 -a 635 84 10 -a 635 381 5 -a 635 336 4 -a 635 878 7 -a 635 183 8 -a 635 672 5 -a 635 311 7 -a 636 950 7 -a 636 268 6 -a 636 349 3 -a 636 458 8 -a 636 477 10 -a 636 383 6 -a 636 487 10 -a 636 905 3 -a 636 796 7 -a 636 692 6 -a 636 754 3 -a 636 937 8 -a 636 255 6 -a 636 869 6 -a 636 740 5 -a 636 140 10 -a 636 496 5 -a 636 708 8 -a 636 792 1 -a 636 658 5 -a 636 125 5 -a 636 853 6 -a 636 227 10 -a 636 847 6 -a 636 936 2 -a 636 607 6 -a 636 158 2 -a 636 790 2 -a 636 790 5 -a 636 829 6 -a 636 76 4 -a 636 715 3 -a 636 73 2 -a 636 424 6 -a 636 148 2 -a 636 549 10 -a 636 806 9 -a 636 634 8 -a 636 429 8 -a 636 577 9 -a 636 301 5 -a 636 158 10 -a 636 489 9 -a 636 555 5 -a 636 3 7 -a 636 204 7 -a 636 694 2 -a 636 498 1 -a 636 912 3 -a 636 462 9 -a 636 132 8 -a 636 12 9 -a 636 290 5 -a 636 358 8 -a 636 858 3 -a 636 202 7 -a 636 965 10 -a 636 991 9 -a 636 730 3 -a 636 820 7 -a 636 42 10 -a 636 420 7 -a 636 892 10 -a 636 465 9 -a 636 567 4 -a 636 416 3 -a 636 246 8 -a 636 176 7 -a 636 845 3 -a 636 823 7 -a 636 476 10 -a 636 287 3 -a 636 7 4 -a 636 491 1 -a 636 700 8 -a 636 478 4 -a 636 378 6 -a 636 137 10 -a 636 609 7 -a 636 389 3 -a 636 427 1 -a 636 966 5 -a 636 222 7 -a 636 628 3 -a 636 906 2 -a 636 212 3 -a 637 594 1 -a 637 611 9 -a 637 7 8 -a 637 635 2 -a 637 6 6 -a 637 898 7 -a 637 75 8 -a 637 572 7 -a 637 290 10 -a 637 320 3 -a 637 747 4 -a 637 110 6 -a 637 118 8 -a 637 199 4 -a 637 87 8 -a 637 405 6 -a 637 205 3 -a 637 67 7 -a 637 895 7 -a 637 904 9 -a 637 544 5 -a 637 248 7 -a 637 17 7 -a 637 128 8 -a 637 636 6 -a 637 443 8 -a 637 69 2 -a 637 857 2 -a 637 46 7 -a 637 975 10 -a 637 44 6 -a 637 639 1 -a 637 561 2 -a 637 51 4 -a 637 249 4 -a 637 567 8 -a 637 948 3 -a 637 323 1 -a 637 114 2 -a 637 213 2 -a 637 642 2 -a 637 861 9 -a 637 322 3 -a 637 760 9 -a 637 35 9 -a 637 409 5 -a 637 140 3 -a 637 239 9 -a 637 475 9 -a 637 10 10 -a 637 118 2 -a 637 257 2 -a 637 134 3 -a 637 121 9 -a 637 892 1 -a 637 576 10 -a 637 189 2 -a 637 724 2 -a 637 621 9 -a 637 139 2 -a 637 767 10 -a 637 235 1 -a 637 700 8 -a 637 817 4 -a 637 483 10 -a 637 242 1 -a 637 741 9 -a 637 805 5 -a 637 355 9 -a 637 953 6 -a 637 423 6 -a 637 191 4 -a 637 251 2 -a 637 158 10 -a 637 225 9 -a 637 659 2 -a 637 297 4 -a 637 463 1 -a 637 109 8 -a 637 306 8 -a 637 581 10 -a 637 102 6 -a 637 562 6 -a 637 714 4 -a 637 222 2 -a 637 429 6 -a 637 266 6 -a 637 410 3 -a 637 128 5 -a 637 886 3 -a 637 549 10 -a 637 894 2 -a 637 97 3 -a 637 224 1 -a 637 687 1 -a 637 579 8 -a 637 465 8 -a 638 403 8 -a 638 360 9 -a 638 819 2 -a 638 331 10 -a 638 782 3 -a 638 581 9 -a 638 939 3 -a 638 210 8 -a 638 215 7 -a 638 211 10 -a 638 673 3 -a 638 323 3 -a 638 516 5 -a 638 229 7 -a 638 424 2 -a 638 53 2 -a 638 942 1 -a 638 645 3 -a 638 481 5 -a 638 183 3 -a 638 31 5 -a 638 608 1 -a 638 45 5 -a 638 579 6 -a 638 477 9 -a 638 141 1 -a 638 802 7 -a 638 139 10 -a 638 719 9 -a 638 242 7 -a 638 541 1 -a 638 54 5 -a 638 36 3 -a 638 872 10 -a 638 835 7 -a 638 21 5 -a 638 428 8 -a 638 749 9 -a 638 231 1 -a 638 643 8 -a 638 959 6 -a 638 903 3 -a 638 965 10 -a 638 450 9 -a 638 107 6 -a 638 365 5 -a 638 502 5 -a 638 24 7 -a 638 982 3 -a 638 207 4 -a 638 15 10 -a 638 565 4 -a 638 251 4 -a 638 593 2 -a 638 18 5 -a 638 391 7 -a 638 370 8 -a 638 156 5 -a 638 85 1 -a 638 611 1 -a 638 697 2 -a 638 139 10 -a 638 647 9 -a 638 544 8 -a 638 973 10 -a 638 667 9 -a 638 971 9 -a 638 698 1 -a 638 897 6 -a 638 589 6 -a 638 632 10 -a 638 775 8 -a 638 530 1 -a 638 58 8 -a 638 881 4 -a 638 894 3 -a 638 559 10 -a 638 905 5 -a 638 878 8 -a 638 517 9 -a 638 87 9 -a 638 893 10 -a 638 57 9 -a 638 337 1 -a 638 461 1 -a 638 74 7 -a 638 727 6 -a 638 831 3 -a 638 230 8 -a 638 811 9 -a 638 417 5 -a 638 926 9 -a 638 949 2 -a 638 39 6 -a 638 445 10 -a 638 898 3 -a 638 706 2 -a 638 391 3 -a 638 571 9 -a 638 578 9 -a 638 980 10 -a 638 178 8 -a 638 329 6 -a 638 485 4 -a 638 235 4 -a 638 185 6 -a 638 354 7 -a 638 794 7 -a 638 65 6 -a 638 207 5 -a 638 286 4 -a 638 151 8 -a 638 75 5 -a 638 342 7 -a 638 487 6 -a 638 536 9 -a 638 416 3 -a 639 189 9 -a 639 342 8 -a 639 645 4 -a 639 1000 5 -a 639 758 9 -a 639 546 4 -a 639 924 9 -a 639 797 2 -a 639 990 3 -a 639 797 7 -a 639 478 2 -a 639 356 6 -a 639 343 2 -a 639 31 1 -a 639 311 8 -a 639 521 1 -a 639 359 7 -a 639 795 9 -a 639 755 6 -a 639 544 10 -a 639 124 7 -a 639 524 8 -a 639 608 9 -a 639 331 7 -a 639 809 2 -a 639 759 6 -a 639 405 1 -a 639 127 4 -a 639 221 7 -a 639 940 6 -a 639 542 7 -a 639 410 3 -a 639 257 2 -a 639 162 3 -a 639 385 9 -a 639 707 9 -a 639 284 6 -a 639 787 5 -a 639 672 5 -a 639 57 7 -a 639 240 9 -a 639 3 3 -a 639 399 6 -a 639 270 4 -a 639 314 9 -a 639 919 4 -a 639 629 7 -a 639 84 4 -a 639 650 10 -a 639 148 10 -a 639 208 7 -a 639 149 2 -a 639 755 4 -a 639 538 6 -a 639 958 9 -a 639 489 1 -a 639 942 3 -a 639 60 7 -a 639 710 7 -a 639 858 4 -a 639 601 9 -a 639 95 10 -a 639 90 9 -a 639 762 2 -a 639 479 4 -a 639 80 9 -a 639 444 3 -a 639 762 6 -a 639 866 6 -a 639 91 1 -a 639 818 10 -a 639 81 2 -a 639 93 8 -a 639 193 5 -a 639 351 9 -a 639 406 7 -a 639 87 8 -a 639 979 1 -a 639 490 5 -a 639 736 3 -a 639 102 8 -a 639 697 10 -a 639 885 9 -a 639 856 3 -a 639 210 3 -a 639 818 8 -a 639 321 8 -a 639 127 4 -a 639 877 5 -a 639 6 1 -a 639 984 9 -a 639 453 4 -a 639 100 8 -a 639 50 2 -a 639 190 3 -a 639 578 1 -a 639 129 7 -a 639 633 5 -a 639 315 7 -a 639 995 8 -a 639 723 6 -a 639 109 7 -a 639 51 4 -a 639 815 5 -a 639 301 1 -a 639 401 4 -a 639 197 10 -a 639 387 1 -a 639 355 5 -a 639 686 6 -a 640 99 9 -a 640 456 3 -a 640 358 2 -a 640 983 10 -a 640 288 3 -a 640 567 6 -a 640 776 3 -a 640 608 1 -a 640 693 3 -a 640 628 1 -a 640 613 2 -a 640 653 4 -a 640 56 9 -a 640 712 9 -a 640 702 4 -a 640 245 7 -a 640 265 1 -a 640 830 5 -a 640 877 6 -a 640 579 8 -a 640 800 8 -a 640 575 7 -a 640 687 4 -a 640 851 1 -a 640 365 9 -a 640 987 9 -a 640 227 9 -a 640 561 9 -a 640 350 6 -a 640 582 10 -a 640 222 9 -a 640 448 8 -a 640 13 8 -a 640 579 1 -a 640 406 7 -a 640 300 5 -a 640 121 10 -a 640 157 2 -a 640 907 3 -a 640 814 9 -a 640 784 2 -a 640 495 2 -a 640 442 8 -a 640 839 7 -a 640 182 7 -a 640 119 2 -a 640 59 6 -a 640 446 1 -a 640 948 3 -a 640 935 10 -a 640 1 9 -a 640 724 8 -a 640 485 9 -a 640 687 2 -a 640 550 1 -a 640 849 10 -a 640 650 1 -a 640 776 7 -a 640 386 8 -a 640 999 6 -a 640 333 7 -a 640 607 3 -a 640 422 3 -a 640 346 1 -a 640 162 8 -a 640 827 9 -a 640 645 8 -a 640 282 4 -a 640 983 3 -a 640 528 2 -a 640 71 2 -a 640 742 2 -a 640 512 2 -a 640 556 8 -a 640 180 1 -a 640 630 6 -a 640 614 8 -a 640 625 5 -a 640 554 6 -a 640 524 2 -a 640 625 3 -a 640 253 4 -a 640 288 1 -a 640 802 9 -a 640 832 7 -a 640 937 3 -a 640 553 3 -a 640 193 10 -a 640 911 3 -a 640 886 5 -a 640 800 6 -a 640 308 4 -a 640 207 7 -a 640 961 1 -a 640 110 8 -a 640 851 3 -a 640 218 5 -a 640 68 6 -a 640 354 3 -a 640 289 10 -a 640 809 1 -a 641 352 8 -a 641 800 2 -a 641 340 5 -a 641 531 1 -a 641 406 2 -a 641 953 1 -a 641 131 10 -a 641 959 8 -a 641 452 1 -a 641 756 1 -a 641 187 6 -a 641 435 3 -a 641 19 7 -a 641 988 7 -a 641 242 9 -a 641 955 4 -a 641 516 4 -a 641 435 4 -a 641 841 5 -a 641 377 5 -a 641 210 2 -a 641 124 6 -a 641 583 6 -a 641 146 8 -a 641 233 7 -a 641 410 7 -a 641 363 1 -a 641 300 5 -a 641 763 4 -a 641 651 4 -a 641 84 7 -a 641 90 4 -a 641 427 10 -a 641 423 6 -a 641 620 2 -a 641 832 2 -a 641 351 10 -a 641 751 5 -a 641 766 6 -a 641 802 9 -a 641 482 1 -a 641 952 8 -a 641 212 5 -a 641 500 2 -a 641 915 3 -a 641 453 10 -a 641 430 7 -a 641 406 1 -a 641 887 5 -a 641 246 2 -a 641 783 10 -a 641 72 9 -a 641 369 8 -a 641 341 3 -a 641 217 4 -a 641 601 8 -a 641 750 5 -a 641 580 1 -a 641 900 5 -a 641 489 7 -a 641 206 6 -a 641 983 4 -a 641 578 4 -a 641 632 7 -a 641 381 6 -a 641 174 4 -a 641 439 10 -a 641 731 9 -a 641 924 4 -a 641 180 1 -a 641 508 7 -a 641 381 5 -a 641 107 5 -a 641 719 8 -a 641 880 7 -a 641 147 5 -a 641 285 7 -a 641 403 9 -a 641 10 5 -a 641 530 3 -a 641 161 8 -a 641 81 9 -a 641 898 6 -a 641 501 1 -a 641 298 9 -a 641 474 9 -a 641 227 7 -a 641 877 3 -a 641 349 9 -a 641 715 3 -a 641 58 6 -a 641 307 10 -a 641 268 1 -a 641 690 4 -a 641 687 8 -a 641 441 10 -a 641 104 2 -a 641 393 3 -a 641 340 1 -a 641 284 10 -a 641 900 7 -a 641 720 5 -a 641 390 5 -a 641 594 8 -a 641 575 2 -a 642 387 2 -a 642 740 7 -a 642 859 10 -a 642 789 2 -a 642 749 10 -a 642 364 7 -a 642 949 9 -a 642 830 10 -a 642 237 7 -a 642 425 1 -a 642 103 4 -a 642 710 8 -a 642 651 3 -a 642 979 4 -a 642 34 2 -a 642 341 1 -a 642 12 6 -a 642 340 4 -a 642 609 10 -a 642 701 6 -a 642 2 5 -a 642 25 9 -a 642 805 3 -a 642 394 6 -a 642 365 5 -a 642 64 7 -a 642 269 4 -a 642 60 1 -a 642 453 10 -a 642 862 4 -a 642 635 2 -a 642 839 2 -a 642 578 8 -a 642 469 3 -a 642 603 1 -a 642 302 8 -a 642 833 1 -a 642 527 6 -a 642 107 6 -a 642 45 4 -a 642 952 8 -a 642 209 8 -a 642 755 6 -a 642 578 2 -a 642 163 6 -a 642 788 1 -a 642 919 9 -a 642 175 1 -a 642 104 10 -a 642 503 7 -a 642 875 4 -a 642 105 8 -a 642 527 8 -a 642 655 2 -a 642 499 8 -a 642 891 1 -a 642 718 3 -a 642 767 8 -a 642 951 4 -a 642 147 5 -a 642 605 9 -a 642 561 10 -a 642 985 10 -a 642 158 9 -a 642 5 6 -a 642 564 10 -a 642 459 9 -a 642 837 6 -a 642 66 2 -a 642 566 9 -a 642 882 8 -a 642 774 9 -a 642 612 7 -a 642 571 5 -a 642 937 7 -a 642 375 9 -a 642 465 1 -a 642 87 4 -a 642 478 1 -a 642 967 2 -a 642 961 9 -a 642 583 3 -a 642 469 1 -a 642 592 10 -a 642 57 5 -a 642 336 9 -a 642 285 4 -a 642 823 2 -a 642 262 3 -a 642 431 5 -a 642 403 1 -a 642 822 6 -a 642 392 10 -a 642 560 7 -a 642 826 10 -a 642 955 10 -a 642 639 4 -a 642 560 3 -a 642 496 3 -a 642 309 6 -a 642 83 1 -a 642 559 9 -a 642 221 9 -a 642 457 5 -a 642 307 1 -a 642 935 3 -a 642 965 8 -a 642 244 5 -a 642 493 8 -a 642 409 2 -a 642 835 9 -a 642 549 8 -a 642 744 1 -a 642 95 3 -a 643 347 2 -a 643 526 2 -a 643 750 3 -a 643 802 5 -a 643 917 7 -a 643 285 4 -a 643 604 1 -a 643 847 5 -a 643 279 6 -a 643 218 8 -a 643 842 3 -a 643 838 10 -a 643 713 3 -a 643 830 9 -a 643 123 5 -a 643 795 7 -a 643 364 7 -a 643 343 1 -a 643 227 3 -a 643 362 9 -a 643 650 1 -a 643 137 3 -a 643 302 1 -a 643 893 6 -a 643 629 2 -a 643 711 7 -a 643 703 9 -a 643 153 2 -a 643 430 9 -a 643 797 7 -a 643 500 10 -a 643 411 8 -a 643 298 6 -a 643 225 6 -a 643 188 10 -a 643 190 5 -a 643 509 5 -a 643 791 1 -a 643 12 6 -a 643 788 1 -a 643 854 3 -a 643 601 3 -a 643 696 9 -a 643 659 4 -a 643 723 1 -a 643 466 1 -a 643 42 1 -a 643 693 7 -a 643 360 8 -a 643 691 2 -a 643 829 2 -a 643 662 5 -a 643 559 10 -a 643 434 4 -a 643 348 7 -a 643 237 10 -a 643 586 8 -a 643 777 1 -a 643 9 6 -a 643 61 5 -a 643 163 6 -a 643 307 2 -a 643 285 5 -a 643 351 8 -a 643 496 4 -a 643 794 4 -a 643 117 7 -a 643 508 5 -a 643 557 7 -a 643 101 3 -a 643 337 6 -a 643 133 10 -a 643 796 10 -a 643 995 7 -a 643 856 4 -a 643 238 4 -a 643 993 1 -a 643 897 8 -a 643 930 6 -a 643 329 8 -a 643 563 8 -a 643 734 2 -a 643 990 2 -a 643 97 6 -a 643 143 5 -a 643 313 1 -a 643 333 2 -a 643 729 8 -a 643 65 4 -a 643 341 5 -a 643 789 1 -a 643 228 7 -a 643 647 5 -a 643 50 8 -a 643 578 10 -a 643 119 6 -a 643 843 5 -a 643 694 5 -a 643 626 1 -a 643 375 1 -a 643 794 9 -a 643 962 8 -a 643 507 8 -a 643 566 10 -a 643 932 6 -a 644 338 9 -a 644 803 10 -a 644 901 5 -a 644 210 9 -a 644 708 4 -a 644 205 7 -a 644 772 9 -a 644 417 3 -a 644 170 6 -a 644 868 2 -a 644 560 10 -a 644 482 6 -a 644 176 5 -a 644 264 10 -a 644 546 6 -a 644 517 2 -a 644 28 6 -a 644 773 7 -a 644 139 6 -a 644 77 5 -a 644 326 1 -a 644 257 10 -a 644 919 4 -a 644 882 6 -a 644 269 10 -a 644 789 9 -a 644 819 1 -a 644 776 5 -a 644 330 3 -a 644 727 10 -a 644 89 10 -a 644 108 4 -a 644 603 4 -a 644 299 3 -a 644 815 9 -a 644 807 8 -a 644 46 4 -a 644 208 10 -a 644 976 4 -a 644 914 1 -a 644 767 4 -a 644 433 10 -a 644 65 2 -a 644 6 9 -a 644 978 1 -a 644 581 9 -a 644 33 9 -a 644 727 6 -a 644 720 2 -a 644 110 8 -a 644 28 10 -a 644 976 4 -a 644 4 4 -a 644 23 7 -a 644 834 8 -a 644 273 1 -a 644 812 2 -a 644 628 1 -a 644 24 5 -a 644 117 2 -a 644 330 8 -a 644 112 7 -a 644 225 10 -a 644 932 6 -a 644 410 10 -a 644 15 6 -a 644 714 10 -a 644 456 4 -a 644 222 7 -a 644 665 5 -a 644 345 3 -a 644 988 6 -a 644 73 6 -a 644 409 10 -a 644 993 5 -a 644 27 10 -a 644 990 6 -a 644 2 7 -a 644 753 6 -a 644 685 1 -a 644 111 9 -a 644 780 10 -a 644 636 7 -a 644 114 10 -a 644 803 8 -a 644 445 6 -a 644 386 6 -a 644 590 5 -a 644 49 9 -a 644 409 3 -a 644 706 9 -a 644 378 3 -a 644 521 2 -a 644 930 4 -a 644 286 9 -a 644 930 10 -a 644 945 6 -a 644 999 9 -a 644 361 4 -a 644 142 5 -a 644 640 2 -a 644 705 3 -a 644 106 4 -a 644 712 9 -a 644 90 9 -a 644 74 3 -a 644 738 2 -a 644 55 9 -a 644 75 5 -a 644 466 6 -a 644 739 9 -a 645 185 9 -a 645 222 8 -a 645 350 8 -a 645 299 9 -a 645 795 3 -a 645 684 1 -a 645 589 5 -a 645 843 9 -a 645 69 7 -a 645 270 6 -a 645 196 2 -a 645 589 7 -a 645 176 4 -a 645 481 2 -a 645 494 7 -a 645 96 4 -a 645 456 8 -a 645 855 5 -a 645 237 8 -a 645 71 6 -a 645 535 5 -a 645 342 3 -a 645 782 2 -a 645 624 5 -a 645 416 10 -a 645 496 10 -a 645 678 10 -a 645 490 4 -a 645 961 4 -a 645 392 7 -a 645 675 2 -a 645 158 10 -a 645 742 3 -a 645 973 4 -a 645 157 2 -a 645 512 7 -a 645 632 2 -a 645 745 1 -a 645 330 8 -a 645 700 8 -a 645 525 1 -a 645 264 2 -a 645 166 4 -a 645 758 6 -a 645 261 1 -a 645 437 8 -a 645 588 6 -a 645 497 6 -a 645 507 1 -a 645 98 5 -a 645 839 2 -a 645 264 8 -a 645 722 5 -a 645 230 1 -a 645 759 9 -a 645 375 2 -a 645 719 1 -a 645 696 3 -a 645 767 8 -a 645 369 10 -a 645 853 10 -a 645 484 2 -a 645 317 8 -a 645 995 4 -a 645 949 5 -a 645 730 9 -a 645 300 2 -a 645 624 1 -a 645 720 7 -a 645 824 1 -a 645 888 5 -a 645 885 8 -a 645 805 4 -a 645 621 7 -a 645 121 5 -a 645 217 2 -a 645 184 6 -a 645 618 8 -a 645 723 8 -a 645 281 6 -a 645 432 10 -a 645 987 10 -a 645 661 3 -a 645 721 5 -a 645 353 3 -a 645 355 5 -a 645 392 2 -a 645 95 3 -a 645 724 9 -a 645 221 9 -a 645 578 4 -a 645 16 5 -a 645 206 7 -a 645 548 7 -a 645 964 5 -a 645 935 2 -a 645 847 3 -a 645 564 9 -a 645 631 3 -a 645 646 8 -a 646 427 3 -a 646 491 9 -a 646 427 9 -a 646 23 7 -a 646 612 2 -a 646 643 8 -a 646 206 10 -a 646 205 1 -a 646 342 5 -a 646 486 2 -a 646 636 4 -a 646 304 4 -a 646 464 8 -a 646 272 10 -a 646 816 6 -a 646 626 3 -a 646 392 2 -a 646 910 5 -a 646 325 4 -a 646 612 3 -a 646 463 9 -a 646 341 4 -a 646 817 8 -a 646 280 5 -a 646 727 1 -a 646 832 9 -a 646 843 3 -a 646 333 1 -a 646 453 3 -a 646 245 4 -a 646 824 1 -a 646 879 10 -a 646 267 4 -a 646 411 6 -a 646 498 5 -a 646 472 5 -a 646 615 9 -a 646 839 9 -a 646 958 8 -a 646 226 9 -a 646 118 10 -a 646 397 9 -a 646 497 4 -a 646 117 6 -a 646 188 8 -a 646 98 10 -a 646 508 2 -a 646 73 3 -a 646 423 2 -a 646 95 9 -a 646 535 1 -a 646 763 6 -a 646 911 1 -a 646 520 6 -a 646 18 9 -a 646 614 1 -a 646 327 10 -a 646 861 3 -a 646 946 9 -a 646 779 2 -a 646 81 1 -a 646 745 6 -a 646 634 7 -a 646 348 3 -a 646 131 8 -a 646 107 10 -a 646 819 6 -a 646 745 10 -a 646 945 3 -a 646 752 5 -a 646 970 10 -a 646 38 5 -a 646 124 5 -a 646 442 2 -a 646 154 10 -a 646 311 10 -a 646 540 6 -a 646 662 4 -a 646 383 8 -a 646 962 8 -a 646 756 5 -a 646 917 3 -a 646 700 8 -a 646 643 10 -a 646 412 10 -a 646 717 3 -a 646 232 6 -a 646 738 6 -a 646 553 4 -a 646 153 2 -a 646 493 8 -a 646 634 1 -a 646 898 5 -a 646 102 3 -a 646 981 3 -a 646 4 9 -a 646 208 1 -a 646 775 8 -a 647 749 10 -a 647 128 6 -a 647 503 7 -a 647 694 2 -a 647 165 5 -a 647 626 9 -a 647 112 7 -a 647 318 7 -a 647 937 1 -a 647 651 8 -a 647 979 4 -a 647 295 4 -a 647 588 9 -a 647 711 5 -a 647 188 8 -a 647 263 7 -a 647 329 2 -a 647 599 1 -a 647 979 7 -a 647 560 2 -a 647 313 8 -a 647 508 7 -a 647 712 3 -a 647 805 2 -a 647 117 8 -a 647 585 10 -a 647 906 5 -a 647 73 7 -a 647 589 6 -a 647 89 9 -a 647 847 8 -a 647 313 2 -a 647 216 4 -a 647 325 1 -a 647 380 6 -a 647 951 4 -a 647 93 8 -a 647 697 5 -a 647 863 8 -a 647 743 2 -a 647 652 6 -a 647 133 1 -a 647 306 6 -a 647 338 10 -a 647 320 4 -a 647 568 2 -a 647 666 10 -a 647 919 9 -a 647 523 10 -a 647 201 6 -a 647 207 1 -a 647 6 10 -a 647 912 1 -a 647 122 4 -a 647 473 9 -a 647 892 1 -a 647 194 7 -a 647 37 2 -a 647 980 10 -a 647 16 6 -a 647 349 3 -a 647 171 7 -a 647 341 9 -a 647 330 6 -a 647 550 8 -a 647 267 8 -a 647 423 5 -a 647 222 3 -a 647 105 7 -a 647 141 6 -a 647 873 3 -a 647 237 8 -a 647 447 4 -a 647 186 3 -a 647 557 8 -a 647 851 3 -a 647 451 9 -a 647 512 6 -a 647 27 3 -a 647 657 10 -a 647 517 4 -a 647 939 9 -a 647 643 1 -a 647 638 1 -a 647 387 9 -a 647 510 3 -a 647 831 6 -a 647 423 5 -a 647 465 8 -a 647 847 5 -a 647 771 9 -a 647 635 10 -a 647 163 3 -a 647 76 1 -a 647 160 6 -a 647 429 9 -a 647 498 7 -a 647 381 8 -a 647 533 7 -a 647 639 9 -a 647 230 6 -a 647 769 4 -a 647 61 8 -a 648 415 3 -a 648 301 3 -a 648 50 7 -a 648 242 4 -a 648 751 4 -a 648 562 10 -a 648 268 6 -a 648 383 1 -a 648 54 1 -a 648 182 9 -a 648 1 5 -a 648 692 7 -a 648 568 4 -a 648 510 4 -a 648 498 4 -a 648 990 7 -a 648 974 6 -a 648 320 9 -a 648 736 8 -a 648 584 5 -a 648 482 8 -a 648 812 9 -a 648 743 6 -a 648 910 7 -a 648 285 8 -a 648 100 4 -a 648 418 3 -a 648 923 1 -a 648 329 3 -a 648 163 9 -a 648 983 2 -a 648 743 1 -a 648 463 9 -a 648 9 2 -a 648 984 1 -a 648 190 9 -a 648 570 7 -a 648 228 7 -a 648 572 1 -a 648 623 10 -a 648 409 3 -a 648 573 2 -a 648 290 8 -a 648 977 4 -a 648 58 9 -a 648 788 4 -a 648 942 6 -a 648 8 1 -a 648 83 6 -a 648 654 9 -a 648 591 4 -a 648 565 5 -a 648 441 4 -a 648 310 6 -a 648 450 10 -a 648 725 6 -a 648 409 9 -a 648 868 5 -a 648 624 6 -a 648 737 2 -a 648 6 7 -a 648 582 3 -a 648 455 3 -a 648 468 6 -a 648 590 9 -a 648 415 6 -a 648 657 5 -a 648 135 4 -a 648 642 1 -a 648 205 2 -a 648 758 8 -a 648 26 7 -a 648 777 8 -a 648 23 1 -a 648 834 8 -a 648 810 5 -a 648 920 3 -a 648 841 2 -a 648 893 8 -a 648 549 7 -a 648 408 9 -a 648 433 6 -a 648 989 9 -a 648 717 4 -a 648 882 6 -a 648 689 4 -a 648 101 4 -a 648 725 7 -a 648 288 10 -a 648 837 10 -a 648 730 6 -a 648 870 4 -a 648 267 4 -a 648 174 2 -a 648 435 6 -a 649 681 7 -a 649 830 1 -a 649 570 2 -a 649 298 9 -a 649 10 8 -a 649 303 1 -a 649 324 7 -a 649 786 8 -a 649 325 10 -a 649 301 6 -a 649 596 1 -a 649 111 5 -a 649 196 9 -a 649 412 4 -a 649 744 6 -a 649 819 10 -a 649 411 6 -a 649 708 8 -a 649 511 3 -a 649 268 5 -a 649 373 7 -a 649 611 4 -a 649 993 4 -a 649 660 7 -a 649 423 5 -a 649 698 5 -a 649 505 10 -a 649 690 1 -a 649 871 8 -a 649 940 4 -a 649 346 6 -a 649 677 8 -a 649 485 9 -a 649 644 2 -a 649 686 10 -a 649 787 7 -a 649 967 6 -a 649 448 5 -a 649 87 9 -a 649 243 7 -a 649 19 1 -a 649 197 6 -a 649 439 4 -a 649 430 7 -a 649 175 9 -a 649 158 7 -a 649 225 2 -a 649 585 10 -a 649 866 2 -a 649 735 7 -a 649 853 1 -a 649 214 5 -a 649 322 8 -a 649 821 6 -a 649 873 3 -a 649 744 8 -a 649 494 8 -a 649 354 6 -a 649 409 4 -a 649 341 7 -a 649 269 5 -a 649 755 3 -a 649 753 10 -a 649 374 8 -a 649 678 8 -a 649 515 1 -a 649 316 1 -a 649 101 9 -a 649 601 7 -a 649 558 5 -a 649 119 6 -a 649 798 4 -a 649 996 4 -a 649 549 7 -a 649 972 8 -a 649 130 5 -a 649 773 8 -a 649 533 5 -a 649 995 1 -a 649 483 8 -a 649 361 8 -a 649 184 7 -a 649 804 7 -a 649 157 6 -a 649 32 3 -a 649 524 6 -a 649 650 5 -a 650 385 6 -a 650 932 8 -a 650 990 2 -a 650 653 9 -a 650 662 4 -a 650 982 4 -a 650 381 8 -a 650 11 8 -a 650 636 7 -a 650 895 6 -a 650 326 2 -a 650 736 3 -a 650 472 3 -a 650 884 4 -a 650 855 8 -a 650 245 7 -a 650 855 4 -a 650 379 7 -a 650 192 10 -a 650 984 6 -a 650 127 6 -a 650 724 2 -a 650 954 9 -a 650 609 10 -a 650 60 3 -a 650 113 1 -a 650 389 1 -a 650 216 10 -a 650 145 8 -a 650 912 7 -a 650 866 5 -a 650 529 9 -a 650 819 9 -a 650 831 7 -a 650 158 7 -a 650 457 9 -a 650 789 7 -a 650 538 10 -a 650 467 5 -a 650 400 2 -a 650 409 5 -a 650 793 3 -a 650 111 9 -a 650 880 5 -a 650 652 10 -a 650 965 7 -a 650 100 10 -a 650 482 8 -a 650 319 9 -a 650 291 10 -a 650 442 7 -a 650 445 8 -a 650 371 5 -a 650 30 2 -a 650 50 8 -a 650 484 10 -a 650 418 4 -a 650 266 9 -a 650 628 1 -a 650 305 7 -a 650 107 7 -a 650 132 5 -a 650 99 8 -a 650 937 2 -a 650 289 8 -a 650 555 1 -a 650 701 8 -a 650 827 7 -a 650 76 10 -a 650 211 3 -a 650 790 1 -a 650 187 3 -a 650 66 6 -a 650 417 5 -a 650 127 4 -a 650 165 10 -a 650 898 2 -a 650 446 8 -a 650 455 10 -a 650 315 1 -a 650 890 7 -a 650 445 3 -a 650 686 4 -a 650 919 2 -a 650 495 8 -a 650 145 7 -a 650 312 10 -a 650 760 7 -a 650 772 10 -a 650 616 6 -a 650 866 4 -a 650 903 10 -a 650 715 9 -a 650 778 9 -a 650 168 5 -a 650 245 9 -a 650 455 4 -a 650 994 6 -a 650 242 7 -a 650 530 4 -a 650 180 7 -a 650 7 5 -a 651 716 6 -a 651 245 1 -a 651 423 2 -a 651 843 9 -a 651 409 3 -a 651 297 3 -a 651 264 10 -a 651 863 6 -a 651 611 2 -a 651 129 4 -a 651 284 8 -a 651 272 10 -a 651 24 5 -a 651 778 5 -a 651 416 1 -a 651 335 1 -a 651 513 3 -a 651 163 2 -a 651 951 6 -a 651 354 8 -a 651 42 4 -a 651 641 9 -a 651 107 6 -a 651 209 3 -a 651 885 4 -a 651 561 6 -a 651 178 4 -a 651 103 9 -a 651 67 1 -a 651 357 4 -a 651 109 7 -a 651 782 2 -a 651 601 7 -a 651 532 2 -a 651 600 2 -a 651 828 2 -a 651 863 1 -a 651 847 2 -a 651 414 8 -a 651 992 6 -a 651 106 2 -a 651 686 5 -a 651 883 5 -a 651 77 8 -a 651 325 8 -a 651 371 10 -a 651 240 1 -a 651 251 10 -a 651 724 7 -a 651 281 4 -a 651 891 5 -a 651 831 6 -a 651 489 6 -a 651 752 6 -a 651 367 5 -a 651 666 7 -a 651 854 7 -a 651 433 1 -a 651 962 6 -a 651 191 3 -a 651 598 8 -a 651 469 9 -a 651 790 5 -a 651 582 8 -a 651 272 2 -a 651 629 4 -a 651 404 9 -a 651 686 4 -a 651 596 4 -a 651 510 4 -a 651 347 7 -a 651 586 1 -a 651 368 10 -a 651 423 2 -a 651 910 5 -a 651 739 7 -a 651 662 10 -a 651 137 4 -a 651 438 10 -a 651 942 6 -a 651 3 9 -a 651 244 2 -a 651 406 9 -a 651 754 10 -a 651 611 1 -a 651 47 5 -a 651 583 10 -a 651 19 8 -a 651 44 10 -a 652 521 4 -a 652 209 1 -a 652 641 1 -a 652 989 2 -a 652 999 8 -a 652 198 10 -a 652 237 5 -a 652 603 3 -a 652 602 10 -a 652 922 9 -a 652 174 7 -a 652 87 3 -a 652 244 8 -a 652 759 5 -a 652 454 2 -a 652 666 3 -a 652 644 4 -a 652 168 5 -a 652 304 8 -a 652 780 5 -a 652 606 4 -a 652 221 4 -a 652 783 9 -a 652 849 5 -a 652 627 5 -a 652 512 10 -a 652 435 7 -a 652 673 5 -a 652 71 3 -a 652 454 1 -a 652 717 5 -a 652 591 8 -a 652 662 3 -a 652 333 7 -a 652 555 8 -a 652 636 1 -a 652 531 9 -a 652 791 4 -a 652 214 6 -a 652 108 10 -a 652 688 3 -a 652 387 2 -a 652 194 7 -a 652 931 2 -a 652 121 2 -a 652 647 8 -a 652 573 6 -a 652 765 2 -a 652 815 9 -a 652 876 4 -a 652 520 10 -a 652 396 9 -a 652 72 9 -a 652 278 1 -a 652 220 8 -a 652 698 7 -a 652 790 3 -a 652 655 6 -a 652 347 10 -a 652 860 8 -a 652 84 5 -a 652 39 4 -a 652 426 1 -a 652 745 7 -a 652 371 1 -a 652 980 3 -a 652 357 3 -a 652 901 2 -a 652 747 5 -a 652 570 7 -a 652 410 6 -a 652 957 4 -a 652 177 1 -a 652 317 10 -a 652 53 10 -a 652 824 2 -a 652 889 5 -a 652 817 5 -a 652 614 6 -a 652 740 7 -a 652 313 5 -a 652 811 9 -a 652 590 2 -a 652 204 2 -a 652 485 1 -a 652 355 4 -a 652 858 8 -a 652 831 5 -a 652 190 1 -a 652 941 3 -a 652 869 7 -a 652 615 7 -a 652 662 3 -a 652 215 5 -a 652 571 1 -a 652 92 9 -a 652 293 5 -a 653 563 8 -a 653 75 5 -a 653 702 3 -a 653 495 9 -a 653 252 5 -a 653 548 4 -a 653 51 7 -a 653 882 4 -a 653 340 5 -a 653 664 7 -a 653 597 9 -a 653 652 3 -a 653 648 6 -a 653 384 4 -a 653 218 8 -a 653 851 8 -a 653 868 10 -a 653 572 4 -a 653 685 9 -a 653 674 1 -a 653 762 8 -a 653 601 9 -a 653 518 1 -a 653 352 8 -a 653 238 4 -a 653 732 8 -a 653 922 4 -a 653 231 7 -a 653 823 9 -a 653 190 1 -a 653 794 5 -a 653 898 3 -a 653 892 9 -a 653 264 5 -a 653 125 10 -a 653 885 8 -a 653 811 6 -a 653 175 1 -a 653 743 1 -a 653 127 3 -a 653 838 4 -a 653 315 9 -a 653 778 3 -a 653 461 1 -a 653 698 3 -a 653 995 8 -a 653 287 6 -a 653 541 3 -a 653 543 3 -a 653 971 4 -a 653 190 7 -a 653 280 10 -a 653 548 6 -a 653 707 10 -a 653 631 5 -a 653 785 8 -a 653 415 2 -a 653 529 1 -a 653 213 10 -a 653 718 4 -a 653 785 5 -a 653 86 5 -a 653 585 7 -a 653 24 10 -a 653 210 9 -a 653 446 4 -a 653 835 5 -a 653 384 1 -a 653 164 7 -a 653 961 8 -a 653 197 5 -a 653 478 7 -a 653 714 7 -a 653 657 4 -a 653 152 4 -a 653 685 5 -a 653 944 7 -a 653 692 4 -a 653 203 5 -a 653 890 8 -a 653 882 8 -a 653 482 5 -a 653 413 8 -a 653 564 3 -a 653 88 8 -a 653 174 3 -a 653 978 4 -a 653 616 7 -a 653 165 10 -a 653 167 10 -a 653 310 5 -a 653 949 4 -a 653 252 8 -a 653 894 7 -a 653 972 10 -a 653 462 2 -a 653 315 5 -a 653 782 9 -a 653 845 9 -a 653 478 3 -a 653 718 7 -a 653 18 7 -a 653 956 1 -a 653 408 5 -a 653 674 2 -a 653 83 6 -a 653 68 3 -a 653 593 2 -a 653 774 7 -a 653 270 5 -a 653 459 8 -a 653 631 2 -a 653 751 4 -a 653 871 3 -a 653 171 10 -a 653 838 8 -a 653 20 8 -a 654 124 6 -a 654 430 2 -a 654 184 8 -a 654 290 8 -a 654 739 10 -a 654 108 10 -a 654 542 10 -a 654 608 8 -a 654 56 10 -a 654 923 5 -a 654 837 9 -a 654 823 9 -a 654 376 3 -a 654 531 10 -a 654 840 1 -a 654 307 7 -a 654 938 8 -a 654 490 8 -a 654 389 8 -a 654 58 4 -a 654 139 1 -a 654 250 4 -a 654 516 8 -a 654 769 10 -a 654 1000 1 -a 654 363 1 -a 654 939 4 -a 654 813 10 -a 654 382 8 -a 654 39 6 -a 654 218 2 -a 654 566 5 -a 654 328 6 -a 654 956 3 -a 654 673 10 -a 654 869 6 -a 654 540 2 -a 654 728 8 -a 654 847 6 -a 654 438 3 -a 654 541 10 -a 654 646 6 -a 654 813 10 -a 654 47 7 -a 654 461 4 -a 654 96 9 -a 654 984 4 -a 654 950 3 -a 654 484 4 -a 654 964 10 -a 654 622 4 -a 654 189 8 -a 654 499 2 -a 654 367 6 -a 654 164 1 -a 654 861 10 -a 654 281 6 -a 654 976 2 -a 654 219 1 -a 654 319 2 -a 654 170 7 -a 654 784 4 -a 654 647 3 -a 654 101 8 -a 654 432 8 -a 654 491 4 -a 654 640 4 -a 654 136 8 -a 654 314 10 -a 654 53 7 -a 654 676 9 -a 654 959 3 -a 654 866 7 -a 654 722 10 -a 654 395 5 -a 654 961 5 -a 654 681 2 -a 654 321 4 -a 654 420 6 -a 654 620 2 -a 654 304 1 -a 654 18 5 -a 654 808 5 -a 654 802 8 -a 654 384 9 -a 655 971 8 -a 655 639 2 -a 655 664 1 -a 655 922 7 -a 655 857 9 -a 655 983 10 -a 655 67 5 -a 655 616 4 -a 655 605 3 -a 655 168 9 -a 655 23 1 -a 655 71 2 -a 655 807 10 -a 655 158 2 -a 655 384 4 -a 655 860 4 -a 655 833 4 -a 655 318 5 -a 655 701 6 -a 655 530 5 -a 655 713 6 -a 655 637 1 -a 655 186 8 -a 655 9 9 -a 655 32 1 -a 655 805 9 -a 655 312 6 -a 655 49 8 -a 655 588 1 -a 655 89 6 -a 655 432 9 -a 655 534 6 -a 655 727 5 -a 655 72 6 -a 655 432 3 -a 655 559 10 -a 655 30 9 -a 655 498 9 -a 655 150 5 -a 655 634 4 -a 655 665 10 -a 655 173 10 -a 655 704 4 -a 655 448 10 -a 655 330 1 -a 655 64 10 -a 655 283 10 -a 655 139 2 -a 655 381 7 -a 655 983 1 -a 655 668 3 -a 655 69 2 -a 655 595 7 -a 655 854 2 -a 655 77 6 -a 655 626 8 -a 655 634 6 -a 655 388 10 -a 655 675 7 -a 655 198 4 -a 655 477 1 -a 655 82 1 -a 655 731 5 -a 655 179 10 -a 655 153 1 -a 655 138 3 -a 655 738 7 -a 655 182 2 -a 655 636 9 -a 655 887 7 -a 655 815 4 -a 655 276 10 -a 655 35 9 -a 655 495 1 -a 655 723 3 -a 655 365 6 -a 655 558 6 -a 655 503 5 -a 655 938 2 -a 655 963 5 -a 656 146 1 -a 656 533 5 -a 656 999 4 -a 656 59 10 -a 656 135 4 -a 656 609 5 -a 656 447 8 -a 656 809 7 -a 656 806 9 -a 656 923 1 -a 656 890 3 -a 656 512 8 -a 656 77 9 -a 656 19 9 -a 656 650 3 -a 656 814 8 -a 656 200 8 -a 656 261 10 -a 656 677 5 -a 656 536 8 -a 656 711 8 -a 656 485 9 -a 656 235 8 -a 656 51 7 -a 656 18 4 -a 656 215 10 -a 656 553 10 -a 656 955 9 -a 656 154 2 -a 656 699 3 -a 656 937 10 -a 656 686 1 -a 656 673 6 -a 656 996 1 -a 656 820 9 -a 656 257 3 -a 656 418 9 -a 656 604 4 -a 656 38 6 -a 656 316 7 -a 656 470 1 -a 656 550 5 -a 656 392 1 -a 656 488 8 -a 656 175 10 -a 656 182 3 -a 656 687 6 -a 656 435 3 -a 656 858 9 -a 656 677 8 -a 656 970 10 -a 656 544 8 -a 656 137 3 -a 656 180 8 -a 656 595 4 -a 656 154 3 -a 656 395 6 -a 656 123 4 -a 656 85 2 -a 656 548 7 -a 656 821 2 -a 656 209 3 -a 656 470 8 -a 656 992 10 -a 656 5 1 -a 656 726 8 -a 656 385 6 -a 656 608 10 -a 656 764 5 -a 656 700 9 -a 656 53 4 -a 656 289 5 -a 656 68 4 -a 656 540 3 -a 656 463 6 -a 656 249 1 -a 656 203 10 -a 656 897 6 -a 656 82 3 -a 656 879 8 -a 656 842 3 -a 656 625 10 -a 656 195 9 -a 657 145 9 -a 657 392 5 -a 657 318 1 -a 657 229 8 -a 657 939 9 -a 657 114 5 -a 657 226 4 -a 657 123 7 -a 657 583 2 -a 657 193 6 -a 657 127 3 -a 657 285 7 -a 657 578 7 -a 657 735 7 -a 657 24 9 -a 657 253 3 -a 657 787 10 -a 657 312 7 -a 657 320 4 -a 657 303 6 -a 657 774 1 -a 657 568 7 -a 657 505 3 -a 657 646 9 -a 657 649 6 -a 657 359 5 -a 657 463 2 -a 657 250 8 -a 657 350 10 -a 657 460 10 -a 657 444 9 -a 657 495 3 -a 657 851 7 -a 657 761 5 -a 657 723 1 -a 657 765 5 -a 657 875 9 -a 657 948 8 -a 657 888 10 -a 657 433 9 -a 657 117 6 -a 657 717 10 -a 657 694 1 -a 657 724 5 -a 657 740 2 -a 657 946 9 -a 657 487 9 -a 657 27 3 -a 657 242 9 -a 657 789 2 -a 657 800 8 -a 657 809 9 -a 657 269 9 -a 657 421 9 -a 657 434 1 -a 657 627 6 -a 657 884 10 -a 657 683 9 -a 657 977 3 -a 657 319 8 -a 657 102 7 -a 657 447 9 -a 657 146 3 -a 657 863 4 -a 657 145 4 -a 657 910 8 -a 657 713 10 -a 657 69 8 -a 657 773 4 -a 657 121 3 -a 657 185 4 -a 657 763 3 -a 657 838 8 -a 657 878 2 -a 657 462 5 -a 657 553 4 -a 657 799 2 -a 657 948 2 -a 657 580 9 -a 657 16 2 -a 657 712 1 -a 657 355 4 -a 657 825 10 -a 657 980 4 -a 657 776 7 -a 657 234 1 -a 657 583 3 -a 657 635 2 -a 657 916 10 -a 657 535 1 -a 657 953 8 -a 657 981 10 -a 657 74 9 -a 657 855 10 -a 657 101 1 -a 657 984 7 -a 657 543 4 -a 657 169 2 -a 657 732 5 -a 657 664 6 -a 657 353 3 -a 657 470 7 -a 657 477 6 -a 657 206 9 -a 657 932 10 -a 657 5 10 -a 657 855 3 -a 658 584 7 -a 658 543 10 -a 658 939 3 -a 658 820 10 -a 658 498 6 -a 658 690 9 -a 658 29 10 -a 658 56 2 -a 658 300 10 -a 658 944 10 -a 658 590 8 -a 658 228 7 -a 658 937 9 -a 658 546 1 -a 658 302 3 -a 658 767 8 -a 658 647 1 -a 658 261 8 -a 658 286 7 -a 658 815 4 -a 658 992 3 -a 658 949 1 -a 658 144 10 -a 658 438 2 -a 658 401 10 -a 658 349 4 -a 658 345 6 -a 658 405 2 -a 658 329 9 -a 658 175 9 -a 658 989 9 -a 658 325 5 -a 658 717 8 -a 658 903 5 -a 658 120 6 -a 658 191 6 -a 658 568 3 -a 658 149 5 -a 658 246 5 -a 658 867 6 -a 658 68 5 -a 658 836 8 -a 658 70 9 -a 658 357 9 -a 658 371 4 -a 658 747 10 -a 658 631 5 -a 658 8 4 -a 658 794 2 -a 658 599 9 -a 658 956 10 -a 658 937 2 -a 658 12 9 -a 658 332 1 -a 658 261 9 -a 658 356 5 -a 658 736 4 -a 658 590 3 -a 658 530 5 -a 658 700 8 -a 658 914 3 -a 658 223 7 -a 658 578 3 -a 658 9 4 -a 658 413 6 -a 658 121 10 -a 658 157 2 -a 658 658 2 -a 658 987 6 -a 658 225 10 -a 658 469 10 -a 658 33 10 -a 658 204 8 -a 658 826 2 -a 658 403 6 -a 658 950 5 -a 658 804 10 -a 658 10 4 -a 658 957 8 -a 658 573 8 -a 658 608 5 -a 658 888 6 -a 658 485 3 -a 658 619 7 -a 658 195 10 -a 658 746 5 -a 658 974 8 -a 658 931 1 -a 658 311 7 -a 658 479 3 -a 658 606 3 -a 658 200 5 -a 658 701 8 -a 658 160 7 -a 658 208 4 -a 658 89 2 -a 659 280 3 -a 659 365 2 -a 659 747 5 -a 659 243 5 -a 659 589 1 -a 659 191 7 -a 659 275 6 -a 659 792 4 -a 659 677 3 -a 659 718 1 -a 659 796 7 -a 659 686 6 -a 659 650 7 -a 659 344 5 -a 659 269 8 -a 659 514 9 -a 659 829 9 -a 659 887 1 -a 659 708 2 -a 659 550 2 -a 659 836 2 -a 659 614 2 -a 659 860 1 -a 659 291 7 -a 659 196 5 -a 659 35 2 -a 659 991 1 -a 659 355 2 -a 659 242 3 -a 659 56 1 -a 659 634 10 -a 659 606 4 -a 659 802 9 -a 659 876 2 -a 659 170 8 -a 659 992 1 -a 659 126 7 -a 659 962 8 -a 659 984 3 -a 659 803 4 -a 659 655 5 -a 659 755 2 -a 659 464 5 -a 659 280 6 -a 659 74 1 -a 659 733 7 -a 659 793 1 -a 659 902 8 -a 659 595 10 -a 659 477 3 -a 659 427 2 -a 659 407 4 -a 659 66 5 -a 659 262 5 -a 659 697 3 -a 659 261 2 -a 659 296 7 -a 659 663 6 -a 659 615 6 -a 659 538 8 -a 659 718 10 -a 659 225 3 -a 659 119 1 -a 659 495 7 -a 659 76 2 -a 659 289 9 -a 659 463 10 -a 659 202 9 -a 659 226 2 -a 659 422 8 -a 659 880 5 -a 659 152 5 -a 659 443 9 -a 659 135 8 -a 659 225 9 -a 659 151 5 -a 659 928 3 -a 659 103 7 -a 659 746 4 -a 659 380 4 -a 659 529 10 -a 659 128 6 -a 659 445 4 -a 659 791 5 -a 659 824 7 -a 659 706 1 -a 659 62 9 -a 659 462 8 -a 659 296 7 -a 659 599 4 -a 659 156 1 -a 659 520 3 -a 659 718 5 -a 659 650 3 -a 659 596 7 -a 659 88 10 -a 659 797 10 -a 659 207 9 -a 659 509 7 -a 659 776 4 -a 659 62 1 -a 659 660 5 -a 660 194 1 -a 660 196 8 -a 660 885 10 -a 660 345 9 -a 660 99 3 -a 660 987 5 -a 660 66 5 -a 660 478 4 -a 660 491 1 -a 660 193 9 -a 660 923 8 -a 660 257 7 -a 660 604 9 -a 660 319 5 -a 660 453 9 -a 660 899 10 -a 660 917 9 -a 660 608 9 -a 660 395 1 -a 660 610 4 -a 660 234 4 -a 660 990 3 -a 660 591 9 -a 660 321 9 -a 660 762 7 -a 660 797 8 -a 660 830 7 -a 660 513 3 -a 660 858 9 -a 660 465 3 -a 660 706 8 -a 660 30 8 -a 660 325 7 -a 660 26 8 -a 660 128 3 -a 660 287 7 -a 660 91 10 -a 660 606 3 -a 660 778 3 -a 660 283 4 -a 660 504 3 -a 660 10 7 -a 660 274 5 -a 660 83 1 -a 660 328 8 -a 660 727 4 -a 660 981 2 -a 660 221 6 -a 660 310 2 -a 660 351 6 -a 660 830 5 -a 660 543 2 -a 660 316 8 -a 660 397 3 -a 660 864 8 -a 660 53 2 -a 660 169 2 -a 660 669 4 -a 660 565 5 -a 660 3 7 -a 660 109 7 -a 660 247 5 -a 660 32 9 -a 660 434 1 -a 660 272 4 -a 660 159 3 -a 660 720 1 -a 660 363 4 -a 660 764 5 -a 660 473 5 -a 660 645 5 -a 660 243 7 -a 660 483 3 -a 660 919 2 -a 660 325 9 -a 660 810 5 -a 660 621 4 -a 660 282 7 -a 660 6 8 -a 660 930 5 -a 660 632 3 -a 660 836 9 -a 660 449 9 -a 660 948 5 -a 660 208 8 -a 660 288 9 -a 660 1000 9 -a 660 376 8 -a 660 956 3 -a 660 541 9 -a 660 378 5 -a 660 40 5 -a 660 787 6 -a 660 409 4 -a 660 473 5 -a 660 34 7 -a 660 568 1 -a 660 169 4 -a 660 396 4 -a 660 307 10 -a 660 641 1 -a 660 17 5 -a 660 550 6 -a 661 99 8 -a 661 935 10 -a 661 874 4 -a 661 909 2 -a 661 531 10 -a 661 131 7 -a 661 914 8 -a 661 436 6 -a 661 763 4 -a 661 725 9 -a 661 884 3 -a 661 686 1 -a 661 932 7 -a 661 147 1 -a 661 661 7 -a 661 284 7 -a 661 78 4 -a 661 177 10 -a 661 661 5 -a 661 118 9 -a 661 963 9 -a 661 46 5 -a 661 590 4 -a 661 997 7 -a 661 613 8 -a 661 758 9 -a 661 368 3 -a 661 919 2 -a 661 375 4 -a 661 384 10 -a 661 444 8 -a 661 473 7 -a 661 294 8 -a 661 294 2 -a 661 357 2 -a 661 824 1 -a 661 424 8 -a 661 247 7 -a 661 236 2 -a 661 162 7 -a 661 971 4 -a 661 95 10 -a 661 847 3 -a 661 879 7 -a 661 242 7 -a 661 484 5 -a 661 138 7 -a 661 319 5 -a 661 660 2 -a 661 798 9 -a 661 436 7 -a 661 599 5 -a 661 843 2 -a 661 2 9 -a 661 571 3 -a 661 431 8 -a 661 759 3 -a 661 938 4 -a 661 326 4 -a 661 109 10 -a 661 298 4 -a 661 769 5 -a 661 582 7 -a 661 591 2 -a 661 38 3 -a 661 938 4 -a 661 391 9 -a 661 462 2 -a 661 160 1 -a 661 626 8 -a 661 623 5 -a 661 107 2 -a 661 720 1 -a 661 446 8 -a 661 985 9 -a 661 961 4 -a 661 929 7 -a 661 98 3 -a 661 256 7 -a 661 564 7 -a 661 895 2 -a 661 691 6 -a 661 138 9 -a 661 714 9 -a 661 692 8 -a 661 708 3 -a 661 120 1 -a 661 427 10 -a 661 622 2 -a 661 445 2 -a 661 535 3 -a 661 919 7 -a 661 190 10 -a 661 92 6 -a 661 485 5 -a 661 227 1 -a 661 6 3 -a 661 875 6 -a 661 688 9 -a 662 165 1 -a 662 476 9 -a 662 287 8 -a 662 271 6 -a 662 172 3 -a 662 732 4 -a 662 231 5 -a 662 108 9 -a 662 636 1 -a 662 328 10 -a 662 363 4 -a 662 175 2 -a 662 199 10 -a 662 30 1 -a 662 313 6 -a 662 912 2 -a 662 721 5 -a 662 7 2 -a 662 123 1 -a 662 617 10 -a 662 452 1 -a 662 658 10 -a 662 511 9 -a 662 641 10 -a 662 749 1 -a 662 996 4 -a 662 867 2 -a 662 754 10 -a 662 846 3 -a 662 531 1 -a 662 919 9 -a 662 298 1 -a 662 817 10 -a 662 165 10 -a 662 469 10 -a 662 524 5 -a 662 396 6 -a 662 576 6 -a 662 135 6 -a 662 723 6 -a 662 939 7 -a 662 309 7 -a 662 921 7 -a 662 968 9 -a 662 621 1 -a 662 808 7 -a 662 664 2 -a 662 617 9 -a 662 815 3 -a 662 787 6 -a 662 209 6 -a 662 242 7 -a 662 420 5 -a 662 720 8 -a 662 882 8 -a 662 144 9 -a 662 691 1 -a 662 724 6 -a 662 898 2 -a 662 512 1 -a 662 230 7 -a 662 792 2 -a 662 809 6 -a 662 22 2 -a 662 956 2 -a 662 253 8 -a 662 545 4 -a 662 327 2 -a 662 829 5 -a 662 679 7 -a 662 26 9 -a 662 743 7 -a 662 988 4 -a 662 946 9 -a 662 686 10 -a 662 584 4 -a 662 730 4 -a 662 325 6 -a 662 176 1 -a 662 520 7 -a 662 87 4 -a 662 385 1 -a 662 761 4 -a 662 506 8 -a 662 80 1 -a 662 618 9 -a 662 650 1 -a 662 770 5 -a 662 317 10 -a 662 523 7 -a 662 257 4 -a 662 547 10 -a 662 290 10 -a 662 42 8 -a 662 568 3 -a 662 221 7 -a 662 294 3 -a 662 89 10 -a 663 548 6 -a 663 98 5 -a 663 767 1 -a 663 573 9 -a 663 840 6 -a 663 730 3 -a 663 494 6 -a 663 501 6 -a 663 290 2 -a 663 199 9 -a 663 826 6 -a 663 465 2 -a 663 718 9 -a 663 912 6 -a 663 849 8 -a 663 454 4 -a 663 394 1 -a 663 928 9 -a 663 47 4 -a 663 19 4 -a 663 673 9 -a 663 364 9 -a 663 541 6 -a 663 930 3 -a 663 910 8 -a 663 830 4 -a 663 971 6 -a 663 453 8 -a 663 26 10 -a 663 240 1 -a 663 541 9 -a 663 573 2 -a 663 338 6 -a 663 284 1 -a 663 121 4 -a 663 153 4 -a 663 615 7 -a 663 654 9 -a 663 278 10 -a 663 813 10 -a 663 455 1 -a 663 743 5 -a 663 507 6 -a 663 342 5 -a 663 567 1 -a 663 960 9 -a 663 735 8 -a 663 471 5 -a 663 753 3 -a 663 119 5 -a 663 346 3 -a 663 269 5 -a 663 24 9 -a 663 231 6 -a 663 74 8 -a 663 994 4 -a 663 683 2 -a 663 100 8 -a 663 210 8 -a 663 200 2 -a 663 672 1 -a 663 547 2 -a 663 483 4 -a 663 793 4 -a 663 699 4 -a 663 471 8 -a 663 383 4 -a 663 328 4 -a 663 749 7 -a 663 171 5 -a 663 782 3 -a 663 467 5 -a 663 677 1 -a 663 100 10 -a 663 9 1 -a 663 613 5 -a 663 834 7 -a 664 479 3 -a 664 595 1 -a 664 563 5 -a 664 598 2 -a 664 940 1 -a 664 831 5 -a 664 621 1 -a 664 146 4 -a 664 905 6 -a 664 591 7 -a 664 828 7 -a 664 800 5 -a 664 3 6 -a 664 651 3 -a 664 322 6 -a 664 485 9 -a 664 419 1 -a 664 956 9 -a 664 801 5 -a 664 324 2 -a 664 680 8 -a 664 972 5 -a 664 81 6 -a 664 122 2 -a 664 624 3 -a 664 180 2 -a 664 130 3 -a 664 212 3 -a 664 609 8 -a 664 806 2 -a 664 552 9 -a 664 182 8 -a 664 721 10 -a 664 358 6 -a 664 802 7 -a 664 866 7 -a 664 238 7 -a 664 368 6 -a 664 670 7 -a 664 217 7 -a 664 143 2 -a 664 672 5 -a 664 868 9 -a 664 464 10 -a 664 133 8 -a 664 262 8 -a 664 460 6 -a 664 64 5 -a 664 39 5 -a 664 783 10 -a 664 743 9 -a 664 863 6 -a 664 864 3 -a 664 609 7 -a 664 19 5 -a 664 993 9 -a 664 821 2 -a 664 8 7 -a 664 577 1 -a 664 602 7 -a 664 559 6 -a 664 758 3 -a 664 299 4 -a 664 916 3 -a 664 536 7 -a 664 140 3 -a 664 130 2 -a 664 903 6 -a 664 809 10 -a 664 346 9 -a 664 22 8 -a 664 457 1 -a 664 189 7 -a 664 485 2 -a 664 589 5 -a 664 451 5 -a 664 944 6 -a 664 652 9 -a 664 489 7 -a 664 702 4 -a 664 370 3 -a 664 474 8 -a 664 541 10 -a 664 209 8 -a 664 58 10 -a 664 559 9 -a 664 177 1 -a 664 878 6 -a 664 566 10 -a 664 754 9 -a 664 456 4 -a 664 100 7 -a 664 487 2 -a 664 754 3 -a 664 893 8 -a 664 120 5 -a 664 901 9 -a 664 678 5 -a 664 466 5 -a 664 922 5 -a 664 110 8 -a 664 654 8 -a 664 382 2 -a 664 698 1 -a 664 80 9 -a 665 302 10 -a 665 325 7 -a 665 568 5 -a 665 694 4 -a 665 17 4 -a 665 519 10 -a 665 902 10 -a 665 75 6 -a 665 53 9 -a 665 54 2 -a 665 952 8 -a 665 618 6 -a 665 807 7 -a 665 383 4 -a 665 717 9 -a 665 270 2 -a 665 112 3 -a 665 708 1 -a 665 267 7 -a 665 827 4 -a 665 143 9 -a 665 658 10 -a 665 268 7 -a 665 40 3 -a 665 767 10 -a 665 922 5 -a 665 422 4 -a 665 440 5 -a 665 723 8 -a 665 764 1 -a 665 545 1 -a 665 701 4 -a 665 433 6 -a 665 561 9 -a 665 196 6 -a 665 310 9 -a 665 635 3 -a 665 248 5 -a 665 363 3 -a 665 563 7 -a 665 866 7 -a 665 146 4 -a 665 945 6 -a 665 558 6 -a 665 415 1 -a 665 33 3 -a 665 241 2 -a 665 681 6 -a 665 13 5 -a 665 44 4 -a 665 824 6 -a 665 670 5 -a 665 311 2 -a 665 863 2 -a 665 412 9 -a 665 208 7 -a 665 260 3 -a 665 851 10 -a 665 185 6 -a 665 982 5 -a 665 590 9 -a 665 729 8 -a 665 659 7 -a 665 265 7 -a 665 854 7 -a 665 307 2 -a 665 900 4 -a 665 77 8 -a 665 669 2 -a 665 438 5 -a 665 942 1 -a 665 814 10 -a 665 358 1 -a 665 476 3 -a 665 204 9 -a 665 390 10 -a 665 716 10 -a 665 885 8 -a 665 402 5 -a 665 759 4 -a 665 684 1 -a 665 47 1 -a 665 46 8 -a 665 522 1 -a 665 458 1 -a 665 253 4 -a 665 782 5 -a 665 284 6 -a 665 437 8 -a 665 739 2 -a 665 873 8 -a 665 141 5 -a 665 373 6 -a 665 870 8 -a 665 406 6 -a 665 202 10 -a 665 152 7 -a 665 281 9 -a 665 279 5 -a 665 821 8 -a 665 718 8 -a 665 196 5 -a 665 610 6 -a 665 51 4 -a 665 671 5 -a 665 814 7 -a 665 441 7 -a 665 363 1 -a 666 674 10 -a 666 842 7 -a 666 97 3 -a 666 333 8 -a 666 889 5 -a 666 142 6 -a 666 854 5 -a 666 322 4 -a 666 395 7 -a 666 611 7 -a 666 606 8 -a 666 831 7 -a 666 326 4 -a 666 454 7 -a 666 972 3 -a 666 698 3 -a 666 300 9 -a 666 353 9 -a 666 900 9 -a 666 451 4 -a 666 633 6 -a 666 154 2 -a 666 247 3 -a 666 326 10 -a 666 349 7 -a 666 857 8 -a 666 376 8 -a 666 646 3 -a 666 816 2 -a 666 358 5 -a 666 295 2 -a 666 634 4 -a 666 454 5 -a 666 627 2 -a 666 498 2 -a 666 596 4 -a 666 456 10 -a 666 819 4 -a 666 990 5 -a 666 43 7 -a 666 400 2 -a 666 796 6 -a 666 368 9 -a 666 854 3 -a 666 743 10 -a 666 41 10 -a 666 129 10 -a 666 71 8 -a 666 940 7 -a 666 579 2 -a 666 703 3 -a 666 69 7 -a 666 826 6 -a 666 4 1 -a 666 418 1 -a 666 658 7 -a 666 380 10 -a 666 413 5 -a 666 279 6 -a 666 171 6 -a 666 770 5 -a 666 573 5 -a 666 804 6 -a 666 199 3 -a 666 175 1 -a 666 277 7 -a 666 794 2 -a 666 630 3 -a 666 72 5 -a 666 759 4 -a 666 672 2 -a 666 471 3 -a 666 531 7 -a 666 15 3 -a 666 300 5 -a 666 249 2 -a 666 56 5 -a 666 428 8 -a 666 320 7 -a 666 995 4 -a 666 40 10 -a 666 808 8 -a 666 2 7 -a 666 457 9 -a 666 441 3 -a 666 381 1 -a 666 869 5 -a 666 719 5 -a 666 551 3 -a 666 614 5 -a 666 267 6 -a 666 331 9 -a 666 812 4 -a 666 441 7 -a 666 607 10 -a 666 582 10 -a 666 46 3 -a 666 678 10 -a 666 316 1 -a 666 718 1 -a 666 125 9 -a 666 846 7 -a 666 732 10 -a 666 424 8 -a 666 71 6 -a 666 787 9 -a 666 852 2 -a 666 390 8 -a 666 758 5 -a 667 834 2 -a 667 387 7 -a 667 797 4 -a 667 617 9 -a 667 388 3 -a 667 229 2 -a 667 33 5 -a 667 768 6 -a 667 73 5 -a 667 751 7 -a 667 295 4 -a 667 686 4 -a 667 625 2 -a 667 473 5 -a 667 433 5 -a 667 207 10 -a 667 30 10 -a 667 478 6 -a 667 885 6 -a 667 346 9 -a 667 171 4 -a 667 167 8 -a 667 903 8 -a 667 408 10 -a 667 237 2 -a 667 665 8 -a 667 235 5 -a 667 626 6 -a 667 398 1 -a 667 44 10 -a 667 170 10 -a 667 660 7 -a 667 376 6 -a 667 398 3 -a 667 692 10 -a 667 120 9 -a 667 470 4 -a 667 418 7 -a 667 414 3 -a 667 131 2 -a 667 410 5 -a 667 14 5 -a 667 604 3 -a 667 842 2 -a 667 220 5 -a 667 633 6 -a 667 296 5 -a 667 80 1 -a 667 978 4 -a 667 466 10 -a 667 64 6 -a 667 121 1 -a 667 344 8 -a 667 472 10 -a 667 357 8 -a 667 706 7 -a 667 983 5 -a 667 382 8 -a 667 750 7 -a 667 971 10 -a 667 552 4 -a 667 385 6 -a 667 322 9 -a 667 949 8 -a 667 53 3 -a 667 441 2 -a 667 395 1 -a 667 470 2 -a 667 854 1 -a 667 525 2 -a 667 880 7 -a 667 867 10 -a 667 104 8 -a 667 697 1 -a 667 63 10 -a 667 737 5 -a 667 992 1 -a 667 142 10 -a 667 690 7 -a 667 434 8 -a 667 206 7 -a 667 810 7 -a 667 777 4 -a 667 677 3 -a 667 143 4 -a 667 761 6 -a 667 358 4 -a 667 101 4 -a 667 119 7 -a 667 83 5 -a 667 47 8 -a 667 670 8 -a 667 468 3 -a 667 368 8 -a 667 594 6 -a 667 520 1 -a 667 809 6 -a 667 988 7 -a 667 989 3 -a 667 638 5 -a 667 489 7 -a 667 844 2 -a 668 481 7 -a 668 592 4 -a 668 517 8 -a 668 543 5 -a 668 304 6 -a 668 484 3 -a 668 684 6 -a 668 994 8 -a 668 917 4 -a 668 889 4 -a 668 779 9 -a 668 670 9 -a 668 541 4 -a 668 921 7 -a 668 406 8 -a 668 899 6 -a 668 524 4 -a 668 981 6 -a 668 43 5 -a 668 169 2 -a 668 424 10 -a 668 411 2 -a 668 763 8 -a 668 943 4 -a 668 195 9 -a 668 726 9 -a 668 908 5 -a 668 832 6 -a 668 190 9 -a 668 727 8 -a 668 288 7 -a 668 782 1 -a 668 219 7 -a 668 830 9 -a 668 61 10 -a 668 703 6 -a 668 490 9 -a 668 30 7 -a 668 595 8 -a 668 354 8 -a 668 809 5 -a 668 240 3 -a 668 895 10 -a 668 705 5 -a 668 646 1 -a 668 769 7 -a 668 702 8 -a 668 145 7 -a 668 725 10 -a 668 744 6 -a 668 314 2 -a 668 125 1 -a 668 130 7 -a 668 52 7 -a 668 43 5 -a 668 324 6 -a 668 777 1 -a 668 950 7 -a 668 132 1 -a 668 967 8 -a 668 653 5 -a 668 419 4 -a 668 724 1 -a 668 871 8 -a 668 225 2 -a 668 784 4 -a 668 549 3 -a 668 714 9 -a 668 814 7 -a 668 120 4 -a 668 43 1 -a 668 598 8 -a 668 359 9 -a 668 937 4 -a 668 278 10 -a 668 681 10 -a 668 979 9 -a 668 125 3 -a 668 382 3 -a 668 699 10 -a 668 438 4 -a 668 506 8 -a 668 828 8 -a 668 489 5 -a 668 548 4 -a 668 128 5 -a 668 241 2 -a 668 474 1 -a 668 259 6 -a 668 183 1 -a 668 102 6 -a 668 677 9 -a 668 906 7 -a 668 972 7 -a 668 901 6 -a 668 666 7 -a 668 497 4 -a 668 590 4 -a 668 455 6 -a 668 616 2 -a 668 633 2 -a 668 28 5 -a 668 974 1 -a 668 545 8 -a 668 305 7 -a 668 954 8 -a 668 202 5 -a 668 260 9 -a 668 54 3 -a 668 583 9 -a 668 958 1 -a 668 491 3 -a 668 64 9 -a 669 761 7 -a 669 979 7 -a 669 611 7 -a 669 888 5 -a 669 195 6 -a 669 60 3 -a 669 122 8 -a 669 378 4 -a 669 161 7 -a 669 799 5 -a 669 259 8 -a 669 109 1 -a 669 675 9 -a 669 924 9 -a 669 605 6 -a 669 241 4 -a 669 354 5 -a 669 196 6 -a 669 873 9 -a 669 381 7 -a 669 145 6 -a 669 393 10 -a 669 686 8 -a 669 74 5 -a 669 594 6 -a 669 945 9 -a 669 127 1 -a 669 152 2 -a 669 878 8 -a 669 617 3 -a 669 215 2 -a 669 614 7 -a 669 571 5 -a 669 826 3 -a 669 478 8 -a 669 766 1 -a 669 885 6 -a 669 599 8 -a 669 119 7 -a 669 22 6 -a 669 373 6 -a 669 377 10 -a 669 130 10 -a 669 24 2 -a 669 277 10 -a 669 734 1 -a 669 264 10 -a 669 630 1 -a 669 929 9 -a 669 112 10 -a 669 49 10 -a 669 504 10 -a 669 672 2 -a 669 123 10 -a 669 74 8 -a 669 592 6 -a 669 249 6 -a 669 225 2 -a 669 445 5 -a 669 866 1 -a 669 440 7 -a 669 34 8 -a 669 412 7 -a 669 241 6 -a 669 511 5 -a 669 153 7 -a 669 101 6 -a 669 86 6 -a 669 271 7 -a 669 122 10 -a 669 458 7 -a 669 648 1 -a 669 251 4 -a 669 481 5 -a 669 924 9 -a 669 984 1 -a 669 744 1 -a 669 529 10 -a 669 888 10 -a 669 855 7 -a 669 515 3 -a 669 937 1 -a 669 335 7 -a 669 162 8 -a 669 35 5 -a 669 408 5 -a 669 753 4 -a 669 283 3 -a 669 632 1 -a 669 173 1 -a 669 124 1 -a 669 47 6 -a 669 207 8 -a 669 536 7 -a 669 287 8 -a 669 717 8 -a 669 688 7 -a 670 388 4 -a 670 802 8 -a 670 959 6 -a 670 509 10 -a 670 236 7 -a 670 582 3 -a 670 760 2 -a 670 716 6 -a 670 481 2 -a 670 719 6 -a 670 436 2 -a 670 583 6 -a 670 266 6 -a 670 500 7 -a 670 495 5 -a 670 600 7 -a 670 661 2 -a 670 529 4 -a 670 390 4 -a 670 811 5 -a 670 615 9 -a 670 562 9 -a 670 935 10 -a 670 661 10 -a 670 768 5 -a 670 446 7 -a 670 948 10 -a 670 461 5 -a 670 109 5 -a 670 311 10 -a 670 238 8 -a 670 43 10 -a 670 819 6 -a 670 473 9 -a 670 624 8 -a 670 554 2 -a 670 165 3 -a 670 80 9 -a 670 249 6 -a 670 600 2 -a 670 65 9 -a 670 831 10 -a 670 865 8 -a 670 564 6 -a 670 301 7 -a 670 441 6 -a 670 200 3 -a 670 829 7 -a 670 423 6 -a 670 589 4 -a 670 615 4 -a 670 13 3 -a 670 127 6 -a 670 525 5 -a 670 674 8 -a 670 894 8 -a 670 970 5 -a 670 597 2 -a 670 330 10 -a 670 55 3 -a 670 907 2 -a 670 568 7 -a 670 97 1 -a 670 701 3 -a 670 16 4 -a 670 721 8 -a 670 231 8 -a 670 180 10 -a 670 800 6 -a 670 479 5 -a 670 779 9 -a 670 864 7 -a 670 285 7 -a 670 620 5 -a 670 403 2 -a 670 585 4 -a 670 36 9 -a 670 603 10 -a 670 389 5 -a 670 458 1 -a 670 167 9 -a 670 471 6 -a 670 293 3 -a 670 504 2 -a 670 120 7 -a 670 163 10 -a 670 449 9 -a 670 716 5 -a 670 492 1 -a 670 503 2 -a 670 598 10 -a 670 35 7 -a 670 600 3 -a 670 274 9 -a 670 51 1 -a 670 296 8 -a 670 504 10 -a 671 230 5 -a 671 71 2 -a 671 982 3 -a 671 935 4 -a 671 242 1 -a 671 604 5 -a 671 313 9 -a 671 826 4 -a 671 639 9 -a 671 915 5 -a 671 190 1 -a 671 72 3 -a 671 58 6 -a 671 169 3 -a 671 542 4 -a 671 350 1 -a 671 672 1 -a 671 661 9 -a 671 512 8 -a 671 96 3 -a 671 352 10 -a 671 599 5 -a 671 949 9 -a 671 14 2 -a 671 174 9 -a 671 199 4 -a 671 64 10 -a 671 469 5 -a 671 702 7 -a 671 294 5 -a 671 539 5 -a 671 660 7 -a 671 278 10 -a 671 449 2 -a 671 901 5 -a 671 881 9 -a 671 762 1 -a 671 703 8 -a 671 495 9 -a 671 652 8 -a 671 892 2 -a 671 566 8 -a 671 709 4 -a 671 36 7 -a 671 84 9 -a 671 35 8 -a 671 707 6 -a 671 744 1 -a 671 546 7 -a 671 803 7 -a 671 72 10 -a 671 525 1 -a 671 377 1 -a 671 539 5 -a 671 550 9 -a 671 194 10 -a 671 602 2 -a 671 896 3 -a 671 895 6 -a 671 532 3 -a 671 531 8 -a 671 148 5 -a 671 981 4 -a 671 407 4 -a 671 4 7 -a 671 718 5 -a 671 85 10 -a 671 498 5 -a 671 345 1 -a 671 977 6 -a 671 40 1 -a 671 30 3 -a 671 123 5 -a 671 64 10 -a 671 695 7 -a 671 866 2 -a 671 609 1 -a 671 473 9 -a 671 937 5 -a 671 110 3 -a 671 849 3 -a 671 933 6 -a 671 648 6 -a 671 374 7 -a 671 102 2 -a 671 225 3 -a 671 367 1 -a 671 997 7 -a 671 96 1 -a 671 898 3 -a 671 503 5 -a 671 243 1 -a 671 854 5 -a 671 910 4 -a 671 247 5 -a 671 547 2 -a 671 994 1 -a 671 744 9 -a 671 892 8 -a 671 946 10 -a 671 783 9 -a 671 921 8 -a 671 934 7 -a 671 905 6 -a 671 984 3 -a 671 604 8 -a 671 747 2 -a 671 568 7 -a 671 52 4 -a 671 659 9 -a 671 677 4 -a 671 900 4 -a 671 567 4 -a 671 300 4 -a 671 249 2 -a 671 669 7 -a 671 525 8 -a 671 615 4 -a 671 641 4 -a 671 620 8 -a 672 488 7 -a 672 120 5 -a 672 862 3 -a 672 318 9 -a 672 5 1 -a 672 84 6 -a 672 864 2 -a 672 998 3 -a 672 828 8 -a 672 731 6 -a 672 920 1 -a 672 586 9 -a 672 627 6 -a 672 829 3 -a 672 467 3 -a 672 586 5 -a 672 408 10 -a 672 189 6 -a 672 130 8 -a 672 459 3 -a 672 847 7 -a 672 806 4 -a 672 334 7 -a 672 390 10 -a 672 82 2 -a 672 582 2 -a 672 34 2 -a 672 606 2 -a 672 172 8 -a 672 674 1 -a 672 201 4 -a 672 659 10 -a 672 793 8 -a 672 38 7 -a 672 976 10 -a 672 797 2 -a 672 122 4 -a 672 816 6 -a 672 771 5 -a 672 949 2 -a 672 522 1 -a 672 666 8 -a 672 510 4 -a 672 125 4 -a 672 470 1 -a 672 976 5 -a 672 710 5 -a 672 877 2 -a 672 140 7 -a 672 839 3 -a 672 311 10 -a 672 987 5 -a 672 621 4 -a 672 644 3 -a 672 352 7 -a 672 702 9 -a 672 201 4 -a 672 385 8 -a 672 283 10 -a 672 372 4 -a 672 34 4 -a 672 483 9 -a 672 6 7 -a 672 827 9 -a 672 520 2 -a 672 982 10 -a 672 599 2 -a 672 641 1 -a 672 773 1 -a 672 345 2 -a 672 565 6 -a 672 270 6 -a 672 51 4 -a 672 394 1 -a 672 455 6 -a 672 2 5 -a 672 80 6 -a 672 307 5 -a 672 142 8 -a 672 918 8 -a 672 617 6 -a 672 104 1 -a 672 514 10 -a 672 236 2 -a 672 455 1 -a 672 191 3 -a 672 436 8 -a 672 839 10 -a 672 473 9 -a 672 807 3 -a 672 872 7 -a 672 955 4 -a 672 813 7 -a 672 674 6 -a 672 451 2 -a 672 770 9 -a 672 249 1 -a 672 67 2 -a 672 518 2 -a 672 593 8 -a 672 632 9 -a 672 787 9 -a 672 579 10 -a 672 682 3 -a 672 157 5 -a 672 9 3 -a 672 683 4 -a 672 236 3 -a 672 316 7 -a 673 824 1 -a 673 129 10 -a 673 932 8 -a 673 927 3 -a 673 643 7 -a 673 144 8 -a 673 357 4 -a 673 833 8 -a 673 579 5 -a 673 171 9 -a 673 282 1 -a 673 362 1 -a 673 19 10 -a 673 212 6 -a 673 150 3 -a 673 692 5 -a 673 662 1 -a 673 919 7 -a 673 940 7 -a 673 729 4 -a 673 412 10 -a 673 509 1 -a 673 336 10 -a 673 174 8 -a 673 63 2 -a 673 330 4 -a 673 71 2 -a 673 675 9 -a 673 565 2 -a 673 386 9 -a 673 475 4 -a 673 694 10 -a 673 294 9 -a 673 377 1 -a 673 312 9 -a 673 437 1 -a 673 734 1 -a 673 120 5 -a 673 904 2 -a 673 401 10 -a 673 352 10 -a 673 922 4 -a 673 613 10 -a 673 501 4 -a 673 590 4 -a 673 250 5 -a 673 395 7 -a 673 505 6 -a 673 978 10 -a 673 806 8 -a 673 289 8 -a 673 980 4 -a 673 51 1 -a 673 281 5 -a 673 285 10 -a 673 122 10 -a 673 956 1 -a 673 850 9 -a 673 507 6 -a 673 406 4 -a 673 519 9 -a 673 800 10 -a 673 782 1 -a 673 830 8 -a 673 212 6 -a 673 491 3 -a 673 949 1 -a 673 203 1 -a 673 371 8 -a 673 326 7 -a 673 554 2 -a 673 268 8 -a 673 938 6 -a 673 31 1 -a 673 857 2 -a 673 163 10 -a 673 425 3 -a 673 338 5 -a 673 117 3 -a 673 207 3 -a 673 326 8 -a 673 405 1 -a 673 162 1 -a 673 377 6 -a 673 686 8 -a 673 446 8 -a 673 498 4 -a 673 617 2 -a 673 271 6 -a 673 789 2 -a 673 780 3 -a 673 779 8 -a 673 594 9 -a 673 991 6 -a 673 246 5 -a 673 519 10 -a 674 169 7 -a 674 616 7 -a 674 844 7 -a 674 723 6 -a 674 883 7 -a 674 757 5 -a 674 753 5 -a 674 716 10 -a 674 919 8 -a 674 153 10 -a 674 29 2 -a 674 11 8 -a 674 359 9 -a 674 354 7 -a 674 416 2 -a 674 520 2 -a 674 730 6 -a 674 77 6 -a 674 966 3 -a 674 203 2 -a 674 693 10 -a 674 212 9 -a 674 183 7 -a 674 690 8 -a 674 962 2 -a 674 444 3 -a 674 570 6 -a 674 928 5 -a 674 689 8 -a 674 64 8 -a 674 73 4 -a 674 280 6 -a 674 907 1 -a 674 795 6 -a 674 139 1 -a 674 639 8 -a 674 523 7 -a 674 854 10 -a 674 534 3 -a 674 675 9 -a 674 882 10 -a 674 544 4 -a 674 10 5 -a 674 211 3 -a 674 959 1 -a 674 529 7 -a 674 941 2 -a 674 11 4 -a 674 470 7 -a 674 119 4 -a 674 703 3 -a 674 682 7 -a 674 301 1 -a 674 368 5 -a 674 658 3 -a 674 238 9 -a 674 812 8 -a 674 203 5 -a 674 142 1 -a 674 476 9 -a 674 267 1 -a 674 214 10 -a 674 756 1 -a 674 149 7 -a 674 894 8 -a 674 788 7 -a 674 506 1 -a 674 723 5 -a 674 297 1 -a 674 156 2 -a 674 580 8 -a 674 840 8 -a 674 165 1 -a 674 790 7 -a 674 775 1 -a 674 694 8 -a 674 706 3 -a 674 785 10 -a 674 139 3 -a 674 825 9 -a 674 464 5 -a 674 820 3 -a 674 101 3 -a 674 831 4 -a 674 453 9 -a 674 339 7 -a 674 618 10 -a 674 656 9 -a 674 480 10 -a 674 70 3 -a 674 922 9 -a 674 693 1 -a 675 825 9 -a 675 46 4 -a 675 676 10 -a 675 694 10 -a 675 833 9 -a 675 157 5 -a 675 392 10 -a 675 105 7 -a 675 312 3 -a 675 971 9 -a 675 945 1 -a 675 477 6 -a 675 736 6 -a 675 695 8 -a 675 146 1 -a 675 418 2 -a 675 455 7 -a 675 284 3 -a 675 218 10 -a 675 918 7 -a 675 80 3 -a 675 318 6 -a 675 725 3 -a 675 532 4 -a 675 656 3 -a 675 318 9 -a 675 163 3 -a 675 111 9 -a 675 387 2 -a 675 60 7 -a 675 803 4 -a 675 187 9 -a 675 106 3 -a 675 454 2 -a 675 880 6 -a 675 938 3 -a 675 610 4 -a 675 247 5 -a 675 19 2 -a 675 922 4 -a 675 193 7 -a 675 963 6 -a 675 374 10 -a 675 929 6 -a 675 633 5 -a 675 519 8 -a 675 322 1 -a 675 63 9 -a 675 802 2 -a 675 539 2 -a 675 981 9 -a 675 881 8 -a 675 856 10 -a 675 681 9 -a 675 389 10 -a 675 488 2 -a 675 998 9 -a 675 551 6 -a 675 598 7 -a 675 361 2 -a 675 611 1 -a 675 377 7 -a 675 547 5 -a 675 716 9 -a 675 830 3 -a 675 403 4 -a 675 629 4 -a 675 416 3 -a 675 649 7 -a 675 647 4 -a 675 313 7 -a 675 842 4 -a 675 585 5 -a 675 686 10 -a 675 746 6 -a 675 193 5 -a 675 180 6 -a 675 43 5 -a 675 256 4 -a 675 981 2 -a 675 581 3 -a 675 212 4 -a 675 838 6 -a 675 412 6 -a 675 892 10 -a 675 202 10 -a 675 899 9 -a 675 865 5 -a 675 752 5 -a 675 473 8 -a 675 201 2 -a 675 338 3 -a 675 849 2 -a 675 748 7 -a 675 29 2 -a 675 654 3 -a 675 126 8 -a 675 658 4 -a 675 45 2 -a 675 774 5 -a 676 280 4 -a 676 357 5 -a 676 591 2 -a 676 865 10 -a 676 18 4 -a 676 312 2 -a 676 33 8 -a 676 197 7 -a 676 354 6 -a 676 288 3 -a 676 154 4 -a 676 934 5 -a 676 499 2 -a 676 991 8 -a 676 322 4 -a 676 366 9 -a 676 168 1 -a 676 196 2 -a 676 207 6 -a 676 919 6 -a 676 668 1 -a 676 407 9 -a 676 233 6 -a 676 492 5 -a 676 130 10 -a 676 261 8 -a 676 122 4 -a 676 255 1 -a 676 918 6 -a 676 166 1 -a 676 5 8 -a 676 174 10 -a 676 523 1 -a 676 595 3 -a 676 14 2 -a 676 540 10 -a 676 907 1 -a 676 46 2 -a 676 737 1 -a 676 236 3 -a 676 334 6 -a 676 890 8 -a 676 146 4 -a 676 832 9 -a 676 856 9 -a 676 467 6 -a 676 174 4 -a 676 662 10 -a 676 380 10 -a 676 917 10 -a 676 306 10 -a 676 786 5 -a 676 125 5 -a 676 797 9 -a 676 916 4 -a 676 386 9 -a 676 918 2 -a 676 146 7 -a 676 279 7 -a 676 60 5 -a 676 150 4 -a 676 452 8 -a 676 582 10 -a 676 745 5 -a 676 465 6 -a 676 97 9 -a 676 627 1 -a 676 511 2 -a 676 833 9 -a 676 862 10 -a 676 844 4 -a 676 698 7 -a 676 651 1 -a 676 529 6 -a 676 449 5 -a 676 824 4 -a 676 527 4 -a 676 87 8 -a 676 179 5 -a 676 420 3 -a 676 392 2 -a 676 965 10 -a 676 544 6 -a 676 164 3 -a 676 856 6 -a 676 929 2 -a 676 58 5 -a 676 184 7 -a 676 117 5 -a 676 127 9 -a 676 635 8 -a 676 698 5 -a 676 871 6 -a 676 76 1 -a 676 794 10 -a 676 473 3 -a 676 586 8 -a 676 603 5 -a 676 310 7 -a 676 405 7 -a 676 276 6 -a 676 293 4 -a 676 31 8 -a 676 805 9 -a 676 741 9 -a 676 855 7 -a 676 307 7 -a 677 827 10 -a 677 9 9 -a 677 726 5 -a 677 194 1 -a 677 973 9 -a 677 246 8 -a 677 358 3 -a 677 804 7 -a 677 150 2 -a 677 415 7 -a 677 781 7 -a 677 333 4 -a 677 531 10 -a 677 907 9 -a 677 968 1 -a 677 204 7 -a 677 753 4 -a 677 19 5 -a 677 997 10 -a 677 201 8 -a 677 604 6 -a 677 575 7 -a 677 510 8 -a 677 851 7 -a 677 802 5 -a 677 14 3 -a 677 631 2 -a 677 519 6 -a 677 868 9 -a 677 937 9 -a 677 321 7 -a 677 877 10 -a 677 639 4 -a 677 515 5 -a 677 825 10 -a 677 884 3 -a 677 872 6 -a 677 605 9 -a 677 9 3 -a 677 262 5 -a 677 361 9 -a 677 342 2 -a 677 792 4 -a 677 243 6 -a 677 285 8 -a 677 995 7 -a 677 995 3 -a 677 303 3 -a 677 967 10 -a 677 171 10 -a 677 906 4 -a 677 518 10 -a 677 680 3 -a 677 889 7 -a 677 344 9 -a 677 458 2 -a 677 902 1 -a 677 974 1 -a 677 976 6 -a 677 746 4 -a 677 886 2 -a 677 272 3 -a 677 598 5 -a 677 500 8 -a 677 786 8 -a 677 398 6 -a 677 359 8 -a 677 633 9 -a 677 368 1 -a 677 894 10 -a 677 338 3 -a 677 709 4 -a 677 661 3 -a 677 580 5 -a 677 993 1 -a 677 631 1 -a 677 550 3 -a 677 271 3 -a 677 574 4 -a 677 720 9 -a 677 152 10 -a 677 67 2 -a 677 376 10 -a 677 16 7 -a 677 410 4 -a 677 833 9 -a 677 917 3 -a 677 359 8 -a 677 784 6 -a 677 638 4 -a 677 220 1 -a 677 31 5 -a 677 211 9 -a 677 720 6 -a 677 817 8 -a 677 609 5 -a 677 54 6 -a 678 425 6 -a 678 586 6 -a 678 421 9 -a 678 295 9 -a 678 924 3 -a 678 105 4 -a 678 955 10 -a 678 479 6 -a 678 73 8 -a 678 562 8 -a 678 5 10 -a 678 343 6 -a 678 111 9 -a 678 724 1 -a 678 494 1 -a 678 177 7 -a 678 75 8 -a 678 509 2 -a 678 586 4 -a 678 907 7 -a 678 402 2 -a 678 944 2 -a 678 666 2 -a 678 15 1 -a 678 139 6 -a 678 697 7 -a 678 226 10 -a 678 858 5 -a 678 489 1 -a 678 834 10 -a 678 912 8 -a 678 913 8 -a 678 395 8 -a 678 308 4 -a 678 183 4 -a 678 294 6 -a 678 413 8 -a 678 114 8 -a 678 773 9 -a 678 485 3 -a 678 675 10 -a 678 777 6 -a 678 828 6 -a 678 785 9 -a 678 476 10 -a 678 297 7 -a 678 961 2 -a 678 551 8 -a 678 806 9 -a 678 522 1 -a 678 433 6 -a 678 183 5 -a 678 441 2 -a 678 75 4 -a 678 197 7 -a 678 579 9 -a 678 771 9 -a 678 422 8 -a 678 413 8 -a 678 235 2 -a 678 231 3 -a 678 300 1 -a 678 123 1 -a 678 626 6 -a 678 607 5 -a 678 306 7 -a 678 919 8 -a 678 419 7 -a 678 667 8 -a 678 480 1 -a 678 69 6 -a 678 419 9 -a 678 283 6 -a 678 853 4 -a 678 895 7 -a 678 579 7 -a 678 789 3 -a 678 421 2 -a 678 360 2 -a 678 286 10 -a 678 853 2 -a 678 542 1 -a 678 726 1 -a 678 927 5 -a 678 739 1 -a 678 280 1 -a 678 673 3 -a 678 136 7 -a 678 692 7 -a 678 907 5 -a 678 367 6 -a 678 991 1 -a 678 6 9 -a 678 992 1 -a 678 574 1 -a 678 311 1 -a 678 886 4 -a 678 568 8 -a 678 729 8 -a 678 529 10 -a 678 23 9 -a 678 797 4 -a 679 947 5 -a 679 305 8 -a 679 625 6 -a 679 817 5 -a 679 884 9 -a 679 389 10 -a 679 213 5 -a 679 219 9 -a 679 674 3 -a 679 42 3 -a 679 761 7 -a 679 375 4 -a 679 968 3 -a 679 475 2 -a 679 654 4 -a 679 617 7 -a 679 610 5 -a 679 322 9 -a 679 499 6 -a 679 976 2 -a 679 288 7 -a 679 504 1 -a 679 943 6 -a 679 861 5 -a 679 814 7 -a 679 805 10 -a 679 405 5 -a 679 518 9 -a 679 309 2 -a 679 427 9 -a 679 290 7 -a 679 231 3 -a 679 732 2 -a 679 914 3 -a 679 24 1 -a 679 591 7 -a 679 278 10 -a 679 236 8 -a 679 809 9 -a 679 951 9 -a 679 277 7 -a 679 545 6 -a 679 301 8 -a 679 221 1 -a 679 955 6 -a 679 837 4 -a 679 605 9 -a 679 252 7 -a 679 311 5 -a 679 556 5 -a 679 539 7 -a 679 815 4 -a 679 475 10 -a 679 376 5 -a 679 604 6 -a 679 255 1 -a 679 780 4 -a 679 98 9 -a 679 563 3 -a 679 182 4 -a 679 387 2 -a 679 793 9 -a 679 913 6 -a 679 277 6 -a 679 816 4 -a 679 479 3 -a 679 554 10 -a 679 28 9 -a 679 264 3 -a 679 481 9 -a 679 304 7 -a 679 808 9 -a 679 781 8 -a 679 524 3 -a 679 803 7 -a 679 711 9 -a 679 336 3 -a 679 383 3 -a 679 962 6 -a 679 647 1 -a 679 938 3 -a 679 477 4 -a 679 437 6 -a 679 388 10 -a 679 852 10 -a 679 16 8 -a 679 642 2 -a 679 607 4 -a 679 113 4 -a 679 180 8 -a 679 788 2 -a 679 500 7 -a 680 973 5 -a 680 677 7 -a 680 776 9 -a 680 764 5 -a 680 131 10 -a 680 305 9 -a 680 791 5 -a 680 394 4 -a 680 785 9 -a 680 71 9 -a 680 178 1 -a 680 542 5 -a 680 594 10 -a 680 980 5 -a 680 228 2 -a 680 930 9 -a 680 338 2 -a 680 166 3 -a 680 552 3 -a 680 251 10 -a 680 642 8 -a 680 988 5 -a 680 639 1 -a 680 469 7 -a 680 256 5 -a 680 51 1 -a 680 92 8 -a 680 436 9 -a 680 838 1 -a 680 591 5 -a 680 384 6 -a 680 490 3 -a 680 342 4 -a 680 123 3 -a 680 621 7 -a 680 646 4 -a 680 914 1 -a 680 407 2 -a 680 984 1 -a 680 167 10 -a 680 948 2 -a 680 553 8 -a 680 122 2 -a 680 151 6 -a 680 458 5 -a 680 459 10 -a 680 316 4 -a 680 710 1 -a 680 957 7 -a 680 972 8 -a 680 324 10 -a 680 401 6 -a 680 951 10 -a 680 579 10 -a 680 451 7 -a 680 18 10 -a 680 265 5 -a 680 608 1 -a 680 373 8 -a 680 754 3 -a 680 949 4 -a 680 496 8 -a 680 350 10 -a 680 570 8 -a 680 385 5 -a 680 340 6 -a 680 976 4 -a 680 344 5 -a 680 506 10 -a 680 899 4 -a 680 896 2 -a 680 628 9 -a 680 26 1 -a 680 330 6 -a 680 62 3 -a 680 341 7 -a 680 314 7 -a 680 771 8 -a 680 274 6 -a 680 262 4 -a 680 70 10 -a 680 674 5 -a 680 188 1 -a 680 649 6 -a 680 101 6 -a 680 205 2 -a 680 638 3 -a 680 365 3 -a 680 812 1 -a 680 94 7 -a 680 736 3 -a 680 482 1 -a 680 444 3 -a 680 281 1 -a 680 866 4 -a 680 783 5 -a 680 233 8 -a 680 185 2 -a 680 264 8 -a 680 107 8 -a 680 56 4 -a 680 891 1 -a 680 132 10 -a 680 385 7 -a 681 953 2 -a 681 473 6 -a 681 699 7 -a 681 699 8 -a 681 746 9 -a 681 960 3 -a 681 769 1 -a 681 395 4 -a 681 123 7 -a 681 393 3 -a 681 495 5 -a 681 327 10 -a 681 6 5 -a 681 859 7 -a 681 114 7 -a 681 953 9 -a 681 849 7 -a 681 473 8 -a 681 372 5 -a 681 105 6 -a 681 314 5 -a 681 130 3 -a 681 337 8 -a 681 498 4 -a 681 393 2 -a 681 444 5 -a 681 554 3 -a 681 260 4 -a 681 575 2 -a 681 938 7 -a 681 188 9 -a 681 23 2 -a 681 612 5 -a 681 886 1 -a 681 768 9 -a 681 547 7 -a 681 630 8 -a 681 139 5 -a 681 669 5 -a 681 633 1 -a 681 995 10 -a 681 4 2 -a 681 468 5 -a 681 84 10 -a 681 396 8 -a 681 932 10 -a 681 468 1 -a 681 767 7 -a 681 13 4 -a 681 781 8 -a 681 896 8 -a 681 349 6 -a 681 255 2 -a 681 264 4 -a 681 792 8 -a 681 808 4 -a 681 523 8 -a 681 343 8 -a 681 721 5 -a 681 710 4 -a 681 365 4 -a 681 309 2 -a 681 572 2 -a 681 109 9 -a 681 855 9 -a 681 177 7 -a 681 247 4 -a 681 500 3 -a 681 175 4 -a 681 879 1 -a 681 470 7 -a 681 178 2 -a 681 322 9 -a 681 554 6 -a 681 172 4 -a 681 717 2 -a 681 461 5 -a 681 639 9 -a 681 459 6 -a 681 473 8 -a 681 396 10 -a 681 330 3 -a 681 822 7 -a 681 650 1 -a 681 594 4 -a 681 589 6 -a 681 433 8 -a 681 92 7 -a 681 931 5 -a 681 129 5 -a 681 802 2 -a 681 272 8 -a 681 437 4 -a 681 349 3 -a 681 380 2 -a 681 268 1 -a 681 525 3 -a 681 626 9 -a 681 767 2 -a 681 699 4 -a 682 480 4 -a 682 212 4 -a 682 876 9 -a 682 802 2 -a 682 765 9 -a 682 24 5 -a 682 494 3 -a 682 202 10 -a 682 662 10 -a 682 953 2 -a 682 674 9 -a 682 33 6 -a 682 258 6 -a 682 471 9 -a 682 682 4 -a 682 851 5 -a 682 36 1 -a 682 90 4 -a 682 943 4 -a 682 966 1 -a 682 219 6 -a 682 720 9 -a 682 213 10 -a 682 655 4 -a 682 44 3 -a 682 592 8 -a 682 922 5 -a 682 568 5 -a 682 193 10 -a 682 664 6 -a 682 243 10 -a 682 673 2 -a 682 876 2 -a 682 94 9 -a 682 450 2 -a 682 616 5 -a 682 117 1 -a 682 943 4 -a 682 817 4 -a 682 779 4 -a 682 871 1 -a 682 467 9 -a 682 811 3 -a 682 105 8 -a 682 937 4 -a 682 469 10 -a 682 955 9 -a 682 972 6 -a 682 558 1 -a 682 873 2 -a 682 914 5 -a 682 776 1 -a 682 568 9 -a 682 102 7 -a 682 407 4 -a 682 611 1 -a 682 694 7 -a 682 304 9 -a 682 155 3 -a 682 886 8 -a 682 968 7 -a 682 397 8 -a 682 534 9 -a 682 819 5 -a 682 490 2 -a 682 983 1 -a 682 410 7 -a 682 607 2 -a 682 902 8 -a 682 203 6 -a 682 361 7 -a 682 748 8 -a 682 669 6 -a 682 147 4 -a 682 852 4 -a 682 581 9 -a 682 615 4 -a 682 783 8 -a 682 529 6 -a 682 149 5 -a 682 631 8 -a 682 418 3 -a 682 924 4 -a 682 175 2 -a 682 519 9 -a 682 306 5 -a 682 785 7 -a 682 188 6 -a 682 610 8 -a 682 939 9 -a 682 50 5 -a 682 553 3 -a 682 311 1 -a 682 583 9 -a 682 347 3 -a 682 801 2 -a 682 542 4 -a 682 756 9 -a 682 383 1 -a 682 419 8 -a 683 958 6 -a 683 743 3 -a 683 142 2 -a 683 602 8 -a 683 889 4 -a 683 994 9 -a 683 159 3 -a 683 480 6 -a 683 752 9 -a 683 687 8 -a 683 628 4 -a 683 358 8 -a 683 80 3 -a 683 527 1 -a 683 532 9 -a 683 598 5 -a 683 833 10 -a 683 293 2 -a 683 786 4 -a 683 418 2 -a 683 207 2 -a 683 835 1 -a 683 970 8 -a 683 518 5 -a 683 393 10 -a 683 292 10 -a 683 294 2 -a 683 934 3 -a 683 23 9 -a 683 676 6 -a 683 328 1 -a 683 981 10 -a 683 394 8 -a 683 470 1 -a 683 558 2 -a 683 258 3 -a 683 439 8 -a 683 716 6 -a 683 737 8 -a 683 166 1 -a 683 378 5 -a 683 340 7 -a 683 523 5 -a 683 457 6 -a 683 867 2 -a 683 31 10 -a 683 31 8 -a 683 675 4 -a 683 323 5 -a 683 816 8 -a 683 68 1 -a 683 529 6 -a 683 626 3 -a 683 13 3 -a 683 22 9 -a 683 304 8 -a 683 315 1 -a 683 928 9 -a 683 326 4 -a 683 990 7 -a 683 231 2 -a 683 282 6 -a 683 359 3 -a 683 700 8 -a 683 840 1 -a 683 617 7 -a 683 114 10 -a 683 531 7 -a 683 329 10 -a 683 279 10 -a 683 909 9 -a 683 669 4 -a 683 802 7 -a 683 341 6 -a 683 511 3 -a 683 832 6 -a 683 371 9 -a 683 161 5 -a 683 130 7 -a 683 162 10 -a 683 228 9 -a 683 658 7 -a 683 787 2 -a 683 240 9 -a 683 680 7 -a 683 781 7 -a 683 543 3 -a 684 994 5 -a 684 684 3 -a 684 868 2 -a 684 960 6 -a 684 914 10 -a 684 126 3 -a 684 294 5 -a 684 590 9 -a 684 965 7 -a 684 910 9 -a 684 703 1 -a 684 471 6 -a 684 215 7 -a 684 982 8 -a 684 355 6 -a 684 883 9 -a 684 759 8 -a 684 696 3 -a 684 369 8 -a 684 566 10 -a 684 42 3 -a 684 529 1 -a 684 695 5 -a 684 204 5 -a 684 756 3 -a 684 328 9 -a 684 990 7 -a 684 995 8 -a 684 746 3 -a 684 513 1 -a 684 977 3 -a 684 405 2 -a 684 356 10 -a 684 912 1 -a 684 295 5 -a 684 481 9 -a 684 181 6 -a 684 884 9 -a 684 421 4 -a 684 67 2 -a 684 562 6 -a 684 892 7 -a 684 281 5 -a 684 519 3 -a 684 222 4 -a 684 139 2 -a 684 253 6 -a 684 917 2 -a 684 507 8 -a 684 818 1 -a 684 959 3 -a 684 11 9 -a 684 488 6 -a 684 138 9 -a 684 766 2 -a 684 816 6 -a 684 103 8 -a 684 736 4 -a 684 798 2 -a 684 849 1 -a 684 224 4 -a 684 750 5 -a 684 229 3 -a 684 579 7 -a 684 637 7 -a 684 523 8 -a 684 36 6 -a 684 818 8 -a 684 382 5 -a 684 456 7 -a 684 884 5 -a 684 944 9 -a 684 323 9 -a 684 140 10 -a 684 438 8 -a 684 545 1 -a 684 278 7 -a 684 691 9 -a 684 437 6 -a 684 784 5 -a 684 484 10 -a 684 371 1 -a 685 794 1 -a 685 972 8 -a 685 508 2 -a 685 535 4 -a 685 763 7 -a 685 611 10 -a 685 246 5 -a 685 536 4 -a 685 435 4 -a 685 469 4 -a 685 262 10 -a 685 663 4 -a 685 23 8 -a 685 898 3 -a 685 162 1 -a 685 58 10 -a 685 691 7 -a 685 543 2 -a 685 514 1 -a 685 550 2 -a 685 462 10 -a 685 836 2 -a 685 689 1 -a 685 900 6 -a 685 356 2 -a 685 966 3 -a 685 566 5 -a 685 793 9 -a 685 725 5 -a 685 25 2 -a 685 139 8 -a 685 494 5 -a 685 996 2 -a 685 647 8 -a 685 4 7 -a 685 734 4 -a 685 233 3 -a 685 249 7 -a 685 246 7 -a 685 667 8 -a 685 717 1 -a 685 507 1 -a 685 305 9 -a 685 740 6 -a 685 380 2 -a 685 466 6 -a 685 797 6 -a 685 47 3 -a 685 286 2 -a 685 596 3 -a 685 446 7 -a 685 98 3 -a 685 261 8 -a 685 321 4 -a 685 453 2 -a 685 202 2 -a 685 886 10 -a 685 221 6 -a 685 927 10 -a 685 911 5 -a 685 360 10 -a 685 396 2 -a 685 882 7 -a 685 400 7 -a 685 592 9 -a 685 214 9 -a 685 648 3 -a 685 837 1 -a 685 880 2 -a 685 341 1 -a 685 319 2 -a 685 160 2 -a 685 56 10 -a 685 698 1 -a 685 626 5 -a 685 852 1 -a 685 744 9 -a 685 610 8 -a 685 114 10 -a 685 316 2 -a 685 31 3 -a 685 211 1 -a 685 576 2 -a 685 352 9 -a 685 663 4 -a 685 777 9 -a 685 213 3 -a 685 884 4 -a 685 679 4 -a 685 99 5 -a 685 219 2 -a 685 51 5 -a 685 981 4 -a 685 200 10 -a 685 450 6 -a 685 548 3 -a 685 413 5 -a 685 73 7 -a 685 360 1 -a 685 268 4 -a 685 413 1 -a 685 678 3 -a 685 427 9 -a 685 468 5 -a 685 351 1 -a 685 28 1 -a 686 296 7 -a 686 71 4 -a 686 637 5 -a 686 409 6 -a 686 386 2 -a 686 668 9 -a 686 619 4 -a 686 961 7 -a 686 257 9 -a 686 713 5 -a 686 207 3 -a 686 116 9 -a 686 368 7 -a 686 306 10 -a 686 334 2 -a 686 418 1 -a 686 262 6 -a 686 533 5 -a 686 867 10 -a 686 809 10 -a 686 945 10 -a 686 939 5 -a 686 144 2 -a 686 188 3 -a 686 328 3 -a 686 821 1 -a 686 615 1 -a 686 795 10 -a 686 147 9 -a 686 642 5 -a 686 66 2 -a 686 217 4 -a 686 255 3 -a 686 474 6 -a 686 602 3 -a 686 922 3 -a 686 68 4 -a 686 538 9 -a 686 916 1 -a 686 325 10 -a 686 227 3 -a 686 98 2 -a 686 440 1 -a 686 594 10 -a 686 403 10 -a 686 774 8 -a 686 664 3 -a 686 282 4 -a 686 853 4 -a 686 448 4 -a 686 203 6 -a 686 767 9 -a 686 591 8 -a 686 390 7 -a 686 70 1 -a 686 387 7 -a 686 865 1 -a 686 534 1 -a 686 622 2 -a 686 930 1 -a 686 750 10 -a 686 876 2 -a 686 380 3 -a 686 328 10 -a 686 773 8 -a 686 447 1 -a 686 865 7 -a 686 664 4 -a 686 771 2 -a 686 67 10 -a 686 761 9 -a 686 187 2 -a 686 660 7 -a 686 140 3 -a 686 960 6 -a 686 646 3 -a 686 803 7 -a 686 217 8 -a 686 474 1 -a 686 227 7 -a 686 419 3 -a 686 217 10 -a 686 817 8 -a 686 809 4 -a 686 286 8 -a 686 180 9 -a 686 788 8 -a 686 126 7 -a 686 713 1 -a 686 385 8 -a 686 32 3 -a 686 438 6 -a 686 236 2 -a 686 411 8 -a 686 765 8 -a 686 857 5 -a 686 606 3 -a 686 647 9 -a 686 604 7 -a 686 672 3 -a 686 384 3 -a 686 790 4 -a 686 308 1 -a 686 523 5 -a 686 725 8 -a 686 953 8 -a 686 301 7 -a 686 941 3 -a 686 403 9 -a 686 527 6 -a 686 336 5 -a 686 619 1 -a 686 320 7 -a 686 120 8 -a 687 904 5 -a 687 499 4 -a 687 907 7 -a 687 6 2 -a 687 187 6 -a 687 268 10 -a 687 37 5 -a 687 624 6 -a 687 503 3 -a 687 447 4 -a 687 365 7 -a 687 487 10 -a 687 279 3 -a 687 970 3 -a 687 109 7 -a 687 882 2 -a 687 617 4 -a 687 492 4 -a 687 647 8 -a 687 924 4 -a 687 347 8 -a 687 853 10 -a 687 291 9 -a 687 264 3 -a 687 231 9 -a 687 817 4 -a 687 599 5 -a 687 849 10 -a 687 112 6 -a 687 718 1 -a 687 728 4 -a 687 610 7 -a 687 600 7 -a 687 733 1 -a 687 796 4 -a 687 867 7 -a 687 769 7 -a 687 396 3 -a 687 346 10 -a 687 191 4 -a 687 760 7 -a 687 832 6 -a 687 470 4 -a 687 705 9 -a 687 940 9 -a 687 327 9 -a 687 297 2 -a 687 408 4 -a 687 974 5 -a 687 197 3 -a 687 397 1 -a 687 296 3 -a 687 25 2 -a 687 687 4 -a 687 559 1 -a 687 255 7 -a 687 480 8 -a 687 133 4 -a 687 79 10 -a 687 591 2 -a 687 850 2 -a 687 806 9 -a 687 177 10 -a 687 426 10 -a 687 515 8 -a 687 972 6 -a 687 268 6 -a 687 259 7 -a 687 343 2 -a 687 613 3 -a 687 450 4 -a 687 78 4 -a 687 420 5 -a 687 919 6 -a 687 782 2 -a 687 336 2 -a 687 221 5 -a 687 55 1 -a 687 743 5 -a 687 170 9 -a 687 251 3 -a 687 115 5 -a 687 466 4 -a 687 275 7 -a 687 802 5 -a 687 529 3 -a 687 257 4 -a 687 133 9 -a 687 607 6 -a 687 847 3 -a 687 982 9 -a 687 388 7 -a 687 383 5 -a 687 902 7 -a 687 971 8 -a 687 651 6 -a 687 137 7 -a 687 289 6 -a 687 239 1 -a 687 586 1 -a 687 367 10 -a 687 659 3 -a 687 480 6 -a 688 124 7 -a 688 994 3 -a 688 700 4 -a 688 178 9 -a 688 712 1 -a 688 870 6 -a 688 428 4 -a 688 826 4 -a 688 311 9 -a 688 702 2 -a 688 603 6 -a 688 310 3 -a 688 206 8 -a 688 859 8 -a 688 442 8 -a 688 812 7 -a 688 682 8 -a 688 400 2 -a 688 176 1 -a 688 680 1 -a 688 782 7 -a 688 53 10 -a 688 626 7 -a 688 408 10 -a 688 189 9 -a 688 915 8 -a 688 647 7 -a 688 774 9 -a 688 257 9 -a 688 281 1 -a 688 229 3 -a 688 380 9 -a 688 250 3 -a 688 929 10 -a 688 558 10 -a 688 961 1 -a 688 774 6 -a 688 985 10 -a 688 762 3 -a 688 60 2 -a 688 663 8 -a 688 341 1 -a 688 369 3 -a 688 868 4 -a 688 175 9 -a 688 811 10 -a 688 656 1 -a 688 856 2 -a 688 186 1 -a 688 831 7 -a 688 512 2 -a 688 967 9 -a 688 883 10 -a 688 113 1 -a 688 351 8 -a 688 48 2 -a 688 3 4 -a 688 997 2 -a 688 821 8 -a 688 259 10 -a 688 253 10 -a 688 26 2 -a 688 639 6 -a 688 502 4 -a 688 954 9 -a 688 172 4 -a 688 438 3 -a 688 703 4 -a 688 132 4 -a 688 175 5 -a 688 762 1 -a 688 794 5 -a 688 515 3 -a 688 106 9 -a 688 638 3 -a 688 690 10 -a 688 916 10 -a 688 269 8 -a 688 521 4 -a 688 77 3 -a 688 75 7 -a 688 8 10 -a 688 20 8 -a 688 957 3 -a 688 121 9 -a 688 370 8 -a 688 123 6 -a 688 342 1 -a 688 801 9 -a 688 382 3 -a 688 594 7 -a 688 826 6 -a 688 71 7 -a 688 755 2 -a 688 167 9 -a 688 508 6 -a 689 433 5 -a 689 298 1 -a 689 682 7 -a 689 170 2 -a 689 68 2 -a 689 173 5 -a 689 275 3 -a 689 705 10 -a 689 862 1 -a 689 167 9 -a 689 973 10 -a 689 358 9 -a 689 243 5 -a 689 23 4 -a 689 366 2 -a 689 262 4 -a 689 979 1 -a 689 486 5 -a 689 631 8 -a 689 959 2 -a 689 608 8 -a 689 972 7 -a 689 735 3 -a 689 989 5 -a 689 541 6 -a 689 536 1 -a 689 984 8 -a 689 611 1 -a 689 266 4 -a 689 126 2 -a 689 94 9 -a 689 698 8 -a 689 424 2 -a 689 776 2 -a 689 867 9 -a 689 491 4 -a 689 948 2 -a 689 117 5 -a 689 171 9 -a 689 785 10 -a 689 283 8 -a 689 119 4 -a 689 118 4 -a 689 526 5 -a 689 141 2 -a 689 483 2 -a 689 787 5 -a 689 95 9 -a 689 968 5 -a 689 394 10 -a 689 29 6 -a 689 552 7 -a 689 341 8 -a 689 763 7 -a 689 516 4 -a 689 882 7 -a 689 274 9 -a 689 476 10 -a 689 468 10 -a 689 539 2 -a 689 601 8 -a 689 562 9 -a 689 212 1 -a 689 313 4 -a 689 54 3 -a 689 490 5 -a 689 236 4 -a 689 171 4 -a 689 660 1 -a 689 453 8 -a 689 778 6 -a 689 113 4 -a 689 978 5 -a 689 918 2 -a 689 596 3 -a 689 741 7 -a 689 539 8 -a 689 110 10 -a 689 17 6 -a 689 66 2 -a 689 450 1 -a 689 780 5 -a 689 582 7 -a 689 307 4 -a 689 29 9 -a 689 33 7 -a 689 775 5 -a 689 568 5 -a 689 633 4 -a 689 312 9 -a 689 779 4 -a 689 633 6 -a 689 624 9 -a 689 833 10 -a 689 98 2 -a 689 859 1 -a 689 758 1 -a 689 854 8 -a 689 431 10 -a 689 511 2 -a 689 966 2 -a 689 385 3 -a 689 405 10 -a 689 537 8 -a 690 101 2 -a 690 393 9 -a 690 52 6 -a 690 210 5 -a 690 409 5 -a 690 117 10 -a 690 659 8 -a 690 164 3 -a 690 698 9 -a 690 966 2 -a 690 193 9 -a 690 730 3 -a 690 716 4 -a 690 760 3 -a 690 339 4 -a 690 3 1 -a 690 514 9 -a 690 971 1 -a 690 626 10 -a 690 322 3 -a 690 44 10 -a 690 460 1 -a 690 300 4 -a 690 801 3 -a 690 289 10 -a 690 731 8 -a 690 288 7 -a 690 230 4 -a 690 91 10 -a 690 692 2 -a 690 767 1 -a 690 191 2 -a 690 60 4 -a 690 818 6 -a 690 400 6 -a 690 468 3 -a 690 934 6 -a 690 34 6 -a 690 632 4 -a 690 608 8 -a 690 999 9 -a 690 824 4 -a 690 313 4 -a 690 690 9 -a 690 559 2 -a 690 651 5 -a 690 692 1 -a 690 48 8 -a 690 597 9 -a 690 293 3 -a 690 370 5 -a 690 641 1 -a 690 752 8 -a 690 669 4 -a 690 417 3 -a 690 16 2 -a 690 375 3 -a 690 704 1 -a 690 246 10 -a 690 465 10 -a 690 371 3 -a 690 655 4 -a 690 430 4 -a 690 805 2 -a 690 30 8 -a 690 898 9 -a 690 714 4 -a 690 64 9 -a 690 505 10 -a 690 297 3 -a 690 38 9 -a 690 304 4 -a 690 610 8 -a 690 728 3 -a 690 862 2 -a 690 236 2 -a 690 395 6 -a 690 909 9 -a 690 833 1 -a 690 688 6 -a 690 254 5 -a 690 449 4 -a 690 415 6 -a 690 923 8 -a 690 865 9 -a 690 431 1 -a 690 273 2 -a 690 545 7 -a 690 676 9 -a 690 738 5 -a 690 915 3 -a 690 663 6 -a 690 368 4 -a 690 321 10 -a 690 443 1 -a 691 398 10 -a 691 194 8 -a 691 132 8 -a 691 461 1 -a 691 698 10 -a 691 429 10 -a 691 498 3 -a 691 14 2 -a 691 201 1 -a 691 838 7 -a 691 249 2 -a 691 596 2 -a 691 722 10 -a 691 57 2 -a 691 259 10 -a 691 976 7 -a 691 505 7 -a 691 673 10 -a 691 874 10 -a 691 346 6 -a 691 79 3 -a 691 122 10 -a 691 890 2 -a 691 754 10 -a 691 859 6 -a 691 780 9 -a 691 392 10 -a 691 203 2 -a 691 76 4 -a 691 834 9 -a 691 600 9 -a 691 269 7 -a 691 966 5 -a 691 36 3 -a 691 966 4 -a 691 370 7 -a 691 533 3 -a 691 942 7 -a 691 383 9 -a 691 734 4 -a 691 755 10 -a 691 631 1 -a 691 305 7 -a 691 453 7 -a 691 688 4 -a 691 563 8 -a 691 404 6 -a 691 168 3 -a 691 211 5 -a 691 253 1 -a 691 513 1 -a 691 290 1 -a 691 374 8 -a 691 378 6 -a 691 19 3 -a 691 209 9 -a 691 134 4 -a 691 411 2 -a 691 411 10 -a 691 209 4 -a 691 220 10 -a 691 478 6 -a 691 161 2 -a 691 21 7 -a 691 419 1 -a 691 530 8 -a 691 553 5 -a 691 337 8 -a 691 912 5 -a 691 262 8 -a 691 67 1 -a 691 519 2 -a 691 566 5 -a 691 519 4 -a 691 182 10 -a 691 104 8 -a 691 922 5 -a 691 349 5 -a 691 315 2 -a 691 150 3 -a 691 862 6 -a 691 604 9 -a 691 524 6 -a 691 215 7 -a 691 622 6 -a 691 732 1 -a 691 348 3 -a 691 8 5 -a 691 118 10 -a 691 557 6 -a 691 228 1 -a 691 103 9 -a 691 10 5 -a 691 388 8 -a 691 123 9 -a 691 428 10 -a 691 918 3 -a 691 675 8 -a 691 764 1 -a 691 805 7 -a 691 937 9 -a 691 831 3 -a 691 299 5 -a 691 478 9 -a 691 325 9 -a 691 480 10 -a 691 582 8 -a 691 223 4 -a 691 829 4 -a 692 896 3 -a 692 372 4 -a 692 666 3 -a 692 475 8 -a 692 895 4 -a 692 880 2 -a 692 72 5 -a 692 602 2 -a 692 204 5 -a 692 80 5 -a 692 719 3 -a 692 760 7 -a 692 307 9 -a 692 821 3 -a 692 769 7 -a 692 694 2 -a 692 943 4 -a 692 172 7 -a 692 587 10 -a 692 594 5 -a 692 936 2 -a 692 368 10 -a 692 506 8 -a 692 742 3 -a 692 666 10 -a 692 983 7 -a 692 42 9 -a 692 122 8 -a 692 540 9 -a 692 264 9 -a 692 950 6 -a 692 411 7 -a 692 636 8 -a 692 591 3 -a 692 885 2 -a 692 506 2 -a 692 446 6 -a 692 957 7 -a 692 84 7 -a 692 649 7 -a 692 12 9 -a 692 802 4 -a 692 384 7 -a 692 318 10 -a 692 599 7 -a 692 128 4 -a 692 517 3 -a 692 300 10 -a 692 574 5 -a 692 86 2 -a 692 211 8 -a 692 941 3 -a 692 591 2 -a 692 952 3 -a 692 582 1 -a 692 550 8 -a 692 993 4 -a 692 703 2 -a 692 65 7 -a 692 233 7 -a 692 628 2 -a 692 476 6 -a 692 868 3 -a 692 194 8 -a 692 336 9 -a 692 349 1 -a 692 640 7 -a 692 268 5 -a 692 432 5 -a 692 264 4 -a 692 279 3 -a 692 210 1 -a 692 648 6 -a 692 596 2 -a 692 808 8 -a 692 775 8 -a 692 583 3 -a 692 300 9 -a 692 50 2 -a 692 132 6 -a 692 386 10 -a 692 260 10 -a 692 48 6 -a 692 976 2 -a 692 187 4 -a 692 629 9 -a 692 501 10 -a 692 156 10 -a 692 308 1 -a 692 566 3 -a 692 388 7 -a 692 935 5 -a 692 17 7 -a 692 231 9 -a 692 105 5 -a 692 352 3 -a 692 579 6 -a 692 744 8 -a 692 620 1 -a 692 898 5 -a 692 196 7 -a 692 630 10 -a 692 470 9 -a 692 381 6 -a 692 28 4 -a 692 278 7 -a 692 430 4 -a 692 159 1 -a 692 663 8 -a 692 690 7 -a 692 206 6 -a 692 615 2 -a 693 876 8 -a 693 834 4 -a 693 91 8 -a 693 7 4 -a 693 117 10 -a 693 656 8 -a 693 394 5 -a 693 28 7 -a 693 672 10 -a 693 624 10 -a 693 132 6 -a 693 179 8 -a 693 875 4 -a 693 619 1 -a 693 165 4 -a 693 857 9 -a 693 492 10 -a 693 360 1 -a 693 463 4 -a 693 961 8 -a 693 338 3 -a 693 843 10 -a 693 988 5 -a 693 615 1 -a 693 248 10 -a 693 122 9 -a 693 254 1 -a 693 937 3 -a 693 327 10 -a 693 868 6 -a 693 789 10 -a 693 137 7 -a 693 958 9 -a 693 795 7 -a 693 253 8 -a 693 590 2 -a 693 165 5 -a 693 280 2 -a 693 237 3 -a 693 788 1 -a 693 411 5 -a 693 236 8 -a 693 966 1 -a 693 261 3 -a 693 854 2 -a 693 106 6 -a 693 94 2 -a 693 322 6 -a 693 465 7 -a 693 556 2 -a 693 258 3 -a 693 802 9 -a 693 374 8 -a 693 222 2 -a 693 393 10 -a 693 621 7 -a 693 343 2 -a 693 646 10 -a 693 534 10 -a 693 670 3 -a 693 489 7 -a 693 298 4 -a 693 806 7 -a 693 422 5 -a 693 68 1 -a 693 34 4 -a 693 232 10 -a 693 314 7 -a 693 224 8 -a 693 724 10 -a 693 459 4 -a 693 961 3 -a 693 985 9 -a 693 289 10 -a 693 43 2 -a 693 54 5 -a 693 610 10 -a 693 507 6 -a 693 609 6 -a 693 867 3 -a 693 285 8 -a 693 982 8 -a 693 64 5 -a 693 677 8 -a 693 578 8 -a 693 407 3 -a 693 298 2 -a 693 87 8 -a 693 52 5 -a 693 786 9 -a 693 384 3 -a 693 857 3 -a 693 183 10 -a 693 452 1 -a 693 890 10 -a 693 170 3 -a 693 683 6 -a 693 179 5 -a 693 393 2 -a 693 678 8 -a 693 903 2 -a 693 851 6 -a 693 615 7 -a 693 863 10 -a 693 115 4 -a 693 657 10 -a 693 916 6 -a 693 724 4 -a 693 139 2 -a 694 500 7 -a 694 567 5 -a 694 423 1 -a 694 457 1 -a 694 630 10 -a 694 75 10 -a 694 10 1 -a 694 12 4 -a 694 372 6 -a 694 97 3 -a 694 63 3 -a 694 133 2 -a 694 480 7 -a 694 919 1 -a 694 316 8 -a 694 931 4 -a 694 785 4 -a 694 485 3 -a 694 590 2 -a 694 963 3 -a 694 877 7 -a 694 243 7 -a 694 841 7 -a 694 703 2 -a 694 857 3 -a 694 679 2 -a 694 818 7 -a 694 489 2 -a 694 570 2 -a 694 517 7 -a 694 628 1 -a 694 45 2 -a 694 59 10 -a 694 26 3 -a 694 501 4 -a 694 689 9 -a 694 101 4 -a 694 511 3 -a 694 700 7 -a 694 472 5 -a 694 607 9 -a 694 763 5 -a 694 605 8 -a 694 62 8 -a 694 657 7 -a 694 920 7 -a 694 993 7 -a 694 417 4 -a 694 380 2 -a 694 558 3 -a 694 356 6 -a 694 232 1 -a 694 800 7 -a 694 172 5 -a 694 934 4 -a 694 633 4 -a 694 851 5 -a 694 727 8 -a 694 97 3 -a 694 396 1 -a 694 220 2 -a 694 724 4 -a 694 441 6 -a 694 278 1 -a 694 750 3 -a 694 941 2 -a 694 966 2 -a 694 850 6 -a 694 427 1 -a 694 642 4 -a 694 297 4 -a 694 9 9 -a 694 380 5 -a 694 901 1 -a 694 71 4 -a 694 12 9 -a 694 796 4 -a 694 39 7 -a 694 429 9 -a 694 151 6 -a 694 596 9 -a 694 784 8 -a 694 382 10 -a 694 371 4 -a 694 955 9 -a 694 292 6 -a 694 781 7 -a 694 76 7 -a 694 153 1 -a 694 213 7 -a 694 799 10 -a 694 593 5 -a 694 491 1 -a 694 524 2 -a 694 509 9 -a 694 432 1 -a 694 349 5 -a 694 936 1 -a 694 49 5 -a 695 646 4 -a 695 944 9 -a 695 428 6 -a 695 522 6 -a 695 440 2 -a 695 294 5 -a 695 28 1 -a 695 868 3 -a 695 444 6 -a 695 623 9 -a 695 627 6 -a 695 826 8 -a 695 994 7 -a 695 557 1 -a 695 93 8 -a 695 972 5 -a 695 314 7 -a 695 86 5 -a 695 23 4 -a 695 466 3 -a 695 299 4 -a 695 822 5 -a 695 34 4 -a 695 789 9 -a 695 321 8 -a 695 542 6 -a 695 196 2 -a 695 670 9 -a 695 453 2 -a 695 245 8 -a 695 291 7 -a 695 373 7 -a 695 672 1 -a 695 812 7 -a 695 362 10 -a 695 87 8 -a 695 81 10 -a 695 390 10 -a 695 954 1 -a 695 525 9 -a 695 556 1 -a 695 326 1 -a 695 981 5 -a 695 89 2 -a 695 418 9 -a 695 929 7 -a 695 402 3 -a 695 503 6 -a 695 951 7 -a 695 867 9 -a 695 801 4 -a 695 748 10 -a 695 900 1 -a 695 565 8 -a 695 45 4 -a 695 417 4 -a 695 761 4 -a 695 714 6 -a 695 870 1 -a 695 218 8 -a 695 652 5 -a 695 791 8 -a 695 579 6 -a 695 739 2 -a 695 872 10 -a 695 968 2 -a 695 668 2 -a 695 372 8 -a 695 956 7 -a 695 200 8 -a 695 697 6 -a 695 912 4 -a 695 288 6 -a 695 90 9 -a 695 816 8 -a 695 689 8 -a 695 592 4 -a 695 743 2 -a 695 531 4 -a 695 369 9 -a 695 466 2 -a 695 406 2 -a 695 933 3 -a 695 510 4 -a 695 822 10 -a 695 669 3 -a 695 199 8 -a 695 667 1 -a 695 649 8 -a 695 178 4 -a 696 884 9 -a 696 277 6 -a 696 969 5 -a 696 439 1 -a 696 816 3 -a 696 382 8 -a 696 658 4 -a 696 163 9 -a 696 313 5 -a 696 857 5 -a 696 859 6 -a 696 201 3 -a 696 120 7 -a 696 948 8 -a 696 808 1 -a 696 515 1 -a 696 734 5 -a 696 314 6 -a 696 883 6 -a 696 176 6 -a 696 719 1 -a 696 792 7 -a 696 685 6 -a 696 517 4 -a 696 436 7 -a 696 884 2 -a 696 159 7 -a 696 61 1 -a 696 37 10 -a 696 19 9 -a 696 337 9 -a 696 457 1 -a 696 327 4 -a 696 796 5 -a 696 838 1 -a 696 984 4 -a 696 958 3 -a 696 127 2 -a 696 817 7 -a 696 792 3 -a 696 327 7 -a 696 936 2 -a 696 715 4 -a 696 318 6 -a 696 720 10 -a 696 206 8 -a 696 28 5 -a 696 9 1 -a 696 64 6 -a 696 203 3 -a 696 728 4 -a 696 855 3 -a 696 887 1 -a 696 220 8 -a 696 267 4 -a 696 746 4 -a 696 378 7 -a 696 327 4 -a 696 783 9 -a 696 396 1 -a 696 663 1 -a 696 763 7 -a 696 852 7 -a 696 989 4 -a 696 535 4 -a 696 666 5 -a 696 948 7 -a 696 468 9 -a 696 792 10 -a 696 740 6 -a 696 236 5 -a 696 94 8 -a 696 652 3 -a 696 950 10 -a 696 411 8 -a 696 347 8 -a 696 131 5 -a 696 438 5 -a 696 355 3 -a 696 195 2 -a 696 640 8 -a 696 58 9 -a 696 25 1 -a 696 503 1 -a 696 277 1 -a 696 291 8 -a 696 224 7 -a 696 655 4 -a 696 617 3 -a 696 26 1 -a 696 255 2 -a 696 745 1 -a 697 878 7 -a 697 219 4 -a 697 255 10 -a 697 519 6 -a 697 143 2 -a 697 722 6 -a 697 286 4 -a 697 882 6 -a 697 957 8 -a 697 379 5 -a 697 509 5 -a 697 883 8 -a 697 789 5 -a 697 855 3 -a 697 203 7 -a 697 186 1 -a 697 183 1 -a 697 842 4 -a 697 243 1 -a 697 208 1 -a 697 320 7 -a 697 520 10 -a 697 498 5 -a 697 544 9 -a 697 150 6 -a 697 91 2 -a 697 525 5 -a 697 175 6 -a 697 345 9 -a 697 245 4 -a 697 28 10 -a 697 564 4 -a 697 499 3 -a 697 546 10 -a 697 706 8 -a 697 197 3 -a 697 831 6 -a 697 563 6 -a 697 129 5 -a 697 185 5 -a 697 48 2 -a 697 974 9 -a 697 902 6 -a 697 1000 2 -a 697 152 6 -a 697 63 4 -a 697 158 2 -a 697 993 7 -a 697 306 10 -a 697 365 8 -a 697 289 4 -a 697 825 2 -a 697 863 5 -a 697 832 8 -a 697 974 8 -a 697 953 4 -a 697 332 3 -a 697 124 4 -a 697 273 7 -a 697 577 9 -a 697 152 8 -a 697 836 8 -a 697 51 3 -a 697 697 7 -a 697 517 4 -a 697 247 9 -a 697 504 10 -a 697 56 5 -a 697 376 6 -a 697 688 3 -a 697 103 10 -a 697 362 6 -a 697 637 2 -a 697 337 5 -a 697 788 4 -a 697 43 10 -a 697 495 9 -a 697 757 1 -a 697 348 6 -a 697 859 3 -a 697 21 10 -a 697 148 6 -a 697 697 6 -a 697 852 1 -a 697 97 2 -a 697 625 8 -a 697 159 10 -a 697 220 1 -a 697 898 9 -a 697 735 7 -a 697 371 2 -a 697 709 7 -a 697 786 1 -a 697 44 6 -a 697 202 2 -a 697 8 10 -a 697 547 5 -a 697 257 5 -a 697 383 2 -a 697 210 5 -a 698 359 5 -a 698 745 8 -a 698 847 7 -a 698 338 10 -a 698 57 7 -a 698 610 4 -a 698 380 1 -a 698 551 3 -a 698 342 2 -a 698 727 2 -a 698 386 8 -a 698 362 1 -a 698 874 7 -a 698 58 6 -a 698 189 2 -a 698 970 2 -a 698 683 6 -a 698 348 6 -a 698 166 5 -a 698 556 9 -a 698 58 2 -a 698 536 3 -a 698 240 2 -a 698 843 9 -a 698 579 8 -a 698 441 6 -a 698 851 2 -a 698 101 1 -a 698 697 4 -a 698 209 3 -a 698 311 1 -a 698 31 4 -a 698 953 10 -a 698 133 1 -a 698 369 3 -a 698 742 1 -a 698 748 7 -a 698 536 4 -a 698 60 2 -a 698 451 5 -a 698 921 10 -a 698 421 8 -a 698 300 5 -a 698 979 2 -a 698 610 1 -a 698 246 6 -a 698 637 3 -a 698 957 3 -a 698 411 7 -a 698 168 2 -a 698 946 8 -a 698 407 1 -a 698 833 9 -a 698 501 1 -a 698 848 3 -a 698 659 1 -a 698 601 2 -a 698 520 7 -a 698 867 6 -a 698 911 5 -a 698 551 6 -a 698 796 1 -a 698 19 8 -a 698 919 1 -a 698 781 7 -a 698 761 7 -a 698 642 8 -a 698 292 9 -a 698 820 7 -a 698 68 8 -a 698 189 3 -a 698 216 8 -a 698 368 2 -a 698 143 8 -a 698 825 8 -a 698 613 3 -a 698 779 4 -a 698 757 8 -a 698 946 1 -a 698 747 8 -a 698 944 6 -a 699 328 5 -a 699 555 7 -a 699 420 1 -a 699 151 10 -a 699 189 5 -a 699 671 1 -a 699 31 1 -a 699 907 6 -a 699 197 7 -a 699 826 7 -a 699 926 5 -a 699 91 10 -a 699 582 7 -a 699 662 4 -a 699 732 5 -a 699 874 8 -a 699 457 9 -a 699 800 8 -a 699 38 1 -a 699 672 7 -a 699 143 8 -a 699 180 8 -a 699 473 5 -a 699 755 3 -a 699 958 2 -a 699 205 9 -a 699 753 9 -a 699 879 6 -a 699 951 8 -a 699 672 5 -a 699 182 3 -a 699 481 6 -a 699 68 5 -a 699 333 7 -a 699 669 8 -a 699 64 5 -a 699 700 5 -a 699 970 5 -a 699 175 3 -a 699 501 3 -a 699 871 7 -a 699 265 1 -a 699 59 9 -a 699 508 2 -a 699 996 6 -a 699 932 1 -a 699 964 2 -a 699 771 6 -a 699 969 5 -a 699 612 10 -a 699 913 6 -a 699 124 4 -a 699 60 9 -a 699 643 3 -a 699 57 2 -a 699 264 8 -a 699 371 6 -a 699 935 5 -a 699 191 3 -a 699 19 4 -a 699 92 7 -a 699 671 6 -a 699 86 2 -a 699 424 6 -a 699 316 5 -a 699 149 7 -a 699 402 5 -a 699 94 5 -a 699 576 4 -a 699 491 6 -a 699 965 10 -a 699 840 9 -a 699 549 3 -a 699 448 10 -a 699 812 2 -a 699 456 3 -a 699 388 2 -a 699 558 7 -a 699 400 1 -a 699 999 3 -a 699 447 6 -a 699 523 8 -a 699 34 8 -a 699 65 10 -a 699 579 5 -a 699 297 4 -a 699 436 5 -a 699 489 7 -a 699 487 7 -a 699 454 7 -a 699 581 8 -a 699 134 9 -a 699 539 5 -a 699 449 6 -a 699 687 7 -a 700 382 6 -a 700 439 8 -a 700 780 8 -a 700 957 1 -a 700 929 9 -a 700 720 9 -a 700 773 10 -a 700 454 8 -a 700 144 5 -a 700 560 6 -a 700 909 5 -a 700 531 7 -a 700 93 9 -a 700 285 5 -a 700 505 2 -a 700 539 6 -a 700 807 9 -a 700 538 2 -a 700 604 1 -a 700 362 7 -a 700 834 8 -a 700 15 5 -a 700 850 2 -a 700 297 2 -a 700 468 10 -a 700 406 6 -a 700 430 2 -a 700 386 6 -a 700 878 7 -a 700 668 9 -a 700 767 6 -a 700 292 3 -a 700 423 7 -a 700 699 3 -a 700 196 5 -a 700 119 7 -a 700 447 6 -a 700 649 4 -a 700 262 4 -a 700 534 10 -a 700 792 5 -a 700 75 2 -a 700 818 5 -a 700 272 6 -a 700 613 2 -a 700 600 4 -a 700 809 7 -a 700 192 6 -a 700 961 1 -a 700 618 8 -a 700 206 6 -a 700 787 6 -a 700 914 8 -a 700 673 1 -a 700 168 1 -a 700 319 4 -a 700 654 8 -a 700 553 1 -a 700 172 10 -a 700 297 4 -a 700 295 7 -a 700 463 8 -a 700 720 9 -a 700 994 8 -a 700 659 5 -a 700 838 5 -a 700 416 7 -a 700 283 7 -a 700 75 3 -a 700 398 3 -a 700 816 8 -a 700 866 4 -a 700 472 4 -a 700 609 9 -a 700 113 7 -a 700 60 8 -a 700 185 9 -a 700 921 6 -a 700 252 2 -a 700 121 3 -a 700 514 4 -a 700 457 5 -a 700 907 2 -a 700 404 8 -a 700 106 6 -a 701 51 3 -a 701 722 8 -a 701 759 2 -a 701 603 3 -a 701 894 8 -a 701 32 8 -a 701 898 3 -a 701 332 7 -a 701 751 2 -a 701 867 10 -a 701 990 4 -a 701 564 3 -a 701 258 2 -a 701 249 4 -a 701 638 8 -a 701 655 9 -a 701 40 6 -a 701 479 3 -a 701 102 5 -a 701 649 2 -a 701 591 4 -a 701 162 5 -a 701 833 6 -a 701 487 7 -a 701 413 1 -a 701 953 4 -a 701 1000 1 -a 701 869 3 -a 701 836 1 -a 701 379 6 -a 701 974 8 -a 701 886 3 -a 701 77 5 -a 701 709 2 -a 701 464 5 -a 701 970 8 -a 701 740 9 -a 701 337 4 -a 701 277 6 -a 701 466 1 -a 701 179 3 -a 701 243 6 -a 701 5 9 -a 701 437 2 -a 701 491 1 -a 701 642 8 -a 701 67 1 -a 701 530 1 -a 701 96 9 -a 701 169 3 -a 701 154 9 -a 701 686 8 -a 701 330 5 -a 701 986 7 -a 701 148 3 -a 701 742 3 -a 701 915 8 -a 701 123 2 -a 701 586 2 -a 701 726 5 -a 701 502 3 -a 701 536 5 -a 701 587 5 -a 701 578 5 -a 701 220 8 -a 701 26 5 -a 701 523 2 -a 701 959 8 -a 701 363 6 -a 701 799 5 -a 701 400 5 -a 701 541 1 -a 701 17 6 -a 701 404 2 -a 701 977 1 -a 701 507 4 -a 701 21 4 -a 701 20 8 -a 701 13 4 -a 701 116 8 -a 701 188 2 -a 701 166 9 -a 701 801 9 -a 701 517 5 -a 701 128 10 -a 701 948 10 -a 701 234 10 -a 701 18 2 -a 701 46 10 -a 701 819 5 -a 701 743 10 -a 701 547 4 -a 701 330 3 -a 701 305 5 -a 701 100 1 -a 701 549 6 -a 701 330 7 -a 701 622 4 -a 701 483 5 -a 701 692 6 -a 701 397 5 -a 701 882 2 -a 701 209 1 -a 701 413 4 -a 701 261 9 -a 701 161 8 -a 701 920 5 -a 701 281 5 -a 701 180 1 -a 701 932 7 -a 701 396 8 -a 701 367 5 -a 701 73 2 -a 702 172 6 -a 702 883 6 -a 702 200 6 -a 702 95 7 -a 702 92 10 -a 702 217 7 -a 702 141 1 -a 702 911 2 -a 702 959 8 -a 702 687 5 -a 702 216 2 -a 702 239 6 -a 702 787 3 -a 702 765 8 -a 702 569 4 -a 702 384 3 -a 702 223 10 -a 702 236 5 -a 702 780 4 -a 702 81 2 -a 702 444 10 -a 702 169 1 -a 702 341 5 -a 702 605 10 -a 702 64 2 -a 702 622 5 -a 702 784 9 -a 702 995 7 -a 702 127 8 -a 702 43 9 -a 702 165 4 -a 702 243 5 -a 702 259 3 -a 702 77 5 -a 702 459 2 -a 702 399 10 -a 702 987 6 -a 702 394 3 -a 702 62 10 -a 702 178 10 -a 702 632 7 -a 702 848 4 -a 702 942 4 -a 702 176 7 -a 702 207 4 -a 702 141 9 -a 702 412 9 -a 702 987 6 -a 702 221 4 -a 702 855 2 -a 702 131 10 -a 702 561 6 -a 702 435 6 -a 702 194 10 -a 702 158 2 -a 702 195 5 -a 702 164 2 -a 702 151 2 -a 702 321 4 -a 702 206 7 -a 702 315 3 -a 702 305 3 -a 702 448 6 -a 702 573 5 -a 702 381 5 -a 702 907 9 -a 702 972 1 -a 702 343 5 -a 702 276 3 -a 702 9 9 -a 702 521 2 -a 702 907 5 -a 702 856 1 -a 702 438 7 -a 702 59 2 -a 702 38 9 -a 702 578 2 -a 702 470 3 -a 702 798 2 -a 702 300 4 -a 702 130 1 -a 702 335 4 -a 702 735 1 -a 702 323 5 -a 702 492 5 -a 702 929 9 -a 702 486 5 -a 702 642 7 -a 702 225 10 -a 702 692 7 -a 702 956 8 -a 702 529 4 -a 702 115 1 -a 702 505 5 -a 702 910 7 -a 702 452 2 -a 702 228 6 -a 702 272 2 -a 702 460 10 -a 702 748 1 -a 703 155 7 -a 703 291 5 -a 703 162 5 -a 703 213 5 -a 703 328 10 -a 703 739 1 -a 703 682 9 -a 703 328 6 -a 703 513 6 -a 703 981 8 -a 703 457 3 -a 703 847 3 -a 703 691 7 -a 703 780 7 -a 703 314 6 -a 703 595 2 -a 703 241 3 -a 703 956 2 -a 703 819 2 -a 703 932 6 -a 703 887 1 -a 703 324 5 -a 703 23 2 -a 703 367 10 -a 703 209 5 -a 703 19 1 -a 703 818 2 -a 703 436 10 -a 703 291 6 -a 703 253 9 -a 703 160 8 -a 703 445 1 -a 703 543 5 -a 703 321 4 -a 703 657 2 -a 703 871 2 -a 703 35 10 -a 703 314 7 -a 703 174 7 -a 703 547 8 -a 703 270 10 -a 703 630 9 -a 703 369 5 -a 703 961 10 -a 703 385 5 -a 703 683 7 -a 703 531 9 -a 703 626 9 -a 703 614 9 -a 703 326 9 -a 703 533 10 -a 703 476 7 -a 703 649 2 -a 703 555 3 -a 703 843 2 -a 703 857 5 -a 703 574 4 -a 703 636 3 -a 703 268 2 -a 703 864 4 -a 703 889 9 -a 703 427 8 -a 703 284 4 -a 703 407 4 -a 703 747 7 -a 703 940 10 -a 703 253 5 -a 703 782 8 -a 703 229 3 -a 703 426 10 -a 703 304 1 -a 703 498 6 -a 703 32 1 -a 703 673 3 -a 703 434 4 -a 703 416 5 -a 703 331 7 -a 703 965 7 -a 703 17 2 -a 703 944 4 -a 703 266 10 -a 703 550 6 -a 703 395 9 -a 703 914 3 -a 703 80 4 -a 703 213 6 -a 703 746 10 -a 703 653 8 -a 703 849 2 -a 703 492 9 -a 703 713 1 -a 703 416 6 -a 703 775 1 -a 703 95 8 -a 703 138 9 -a 703 690 8 -a 703 348 10 -a 704 919 2 -a 704 918 2 -a 704 773 7 -a 704 199 8 -a 704 392 8 -a 704 804 6 -a 704 871 10 -a 704 825 7 -a 704 196 7 -a 704 177 1 -a 704 765 10 -a 704 212 2 -a 704 96 6 -a 704 6 4 -a 704 761 10 -a 704 490 7 -a 704 919 10 -a 704 841 10 -a 704 703 3 -a 704 640 4 -a 704 469 8 -a 704 527 2 -a 704 629 5 -a 704 961 4 -a 704 215 3 -a 704 20 7 -a 704 711 10 -a 704 309 3 -a 704 157 9 -a 704 377 1 -a 704 656 4 -a 704 52 1 -a 704 270 9 -a 704 405 5 -a 704 250 7 -a 704 661 7 -a 704 184 8 -a 704 96 9 -a 704 462 2 -a 704 379 1 -a 704 272 5 -a 704 202 8 -a 704 591 5 -a 704 367 6 -a 704 208 9 -a 704 327 8 -a 704 856 3 -a 704 102 3 -a 704 143 1 -a 704 534 2 -a 704 742 4 -a 704 612 9 -a 704 36 4 -a 704 346 8 -a 704 548 2 -a 704 250 5 -a 704 365 6 -a 704 234 4 -a 704 559 7 -a 704 521 2 -a 704 610 3 -a 704 190 10 -a 704 572 7 -a 704 880 3 -a 704 594 6 -a 704 821 3 -a 704 516 1 -a 704 778 8 -a 704 916 4 -a 704 977 9 -a 704 132 7 -a 704 163 8 -a 704 155 7 -a 704 722 10 -a 704 529 8 -a 704 362 8 -a 704 25 10 -a 704 361 1 -a 704 463 5 -a 704 167 6 -a 704 894 4 -a 704 180 7 -a 704 778 4 -a 704 930 5 -a 704 525 9 -a 704 301 2 -a 704 155 5 -a 704 889 1 -a 704 535 5 -a 704 713 5 -a 704 386 9 -a 704 120 5 -a 704 903 7 -a 704 957 2 -a 704 999 9 -a 704 472 4 -a 704 754 10 -a 704 491 2 -a 704 225 4 -a 704 645 8 -a 704 443 4 -a 704 357 9 -a 704 808 3 -a 704 597 10 -a 705 54 9 -a 705 312 5 -a 705 958 2 -a 705 78 5 -a 705 672 2 -a 705 397 6 -a 705 245 2 -a 705 542 3 -a 705 576 2 -a 705 447 4 -a 705 77 7 -a 705 299 5 -a 705 601 10 -a 705 965 2 -a 705 833 8 -a 705 290 5 -a 705 326 9 -a 705 952 10 -a 705 168 5 -a 705 259 2 -a 705 927 10 -a 705 639 1 -a 705 393 3 -a 705 864 6 -a 705 632 9 -a 705 835 7 -a 705 196 8 -a 705 415 2 -a 705 408 9 -a 705 249 5 -a 705 727 5 -a 705 341 3 -a 705 327 9 -a 705 374 4 -a 705 737 9 -a 705 571 5 -a 705 915 9 -a 705 289 1 -a 705 568 6 -a 705 337 5 -a 705 365 4 -a 705 866 4 -a 705 938 4 -a 705 305 10 -a 705 674 9 -a 705 203 4 -a 705 631 6 -a 705 602 9 -a 705 370 10 -a 705 889 1 -a 705 504 2 -a 705 876 1 -a 705 896 7 -a 705 847 5 -a 705 483 6 -a 705 706 8 -a 705 18 9 -a 705 898 3 -a 705 89 6 -a 705 267 7 -a 705 600 3 -a 705 430 1 -a 705 593 10 -a 705 973 2 -a 705 142 4 -a 705 139 3 -a 705 864 5 -a 705 430 2 -a 705 706 1 -a 705 176 7 -a 705 794 6 -a 705 548 6 -a 705 89 10 -a 705 75 1 -a 705 197 6 -a 705 291 6 -a 705 705 8 -a 705 798 10 -a 705 660 1 -a 705 569 1 -a 705 277 9 -a 705 644 6 -a 705 420 2 -a 705 148 7 -a 705 466 8 -a 705 902 3 -a 705 854 10 -a 705 484 8 -a 705 775 8 -a 705 942 2 -a 705 750 9 -a 705 350 5 -a 705 347 3 -a 705 318 10 -a 705 299 6 -a 705 489 4 -a 705 456 7 -a 705 138 3 -a 705 918 4 -a 705 137 2 -a 705 313 3 -a 705 688 2 -a 705 684 3 -a 705 402 9 -a 705 762 10 -a 705 881 5 -a 705 692 2 -a 705 442 4 -a 705 654 3 -a 705 328 10 -a 705 931 4 -a 705 971 2 -a 705 405 6 -a 705 54 1 -a 705 412 9 -a 705 282 3 -a 705 907 8 -a 705 895 8 -a 705 33 3 -a 705 825 5 -a 705 620 8 -a 705 382 7 -a 705 147 4 -a 706 937 9 -a 706 680 6 -a 706 635 2 -a 706 368 2 -a 706 817 9 -a 706 529 8 -a 706 505 5 -a 706 106 10 -a 706 192 7 -a 706 164 10 -a 706 507 7 -a 706 953 4 -a 706 20 8 -a 706 174 1 -a 706 370 6 -a 706 674 8 -a 706 501 3 -a 706 355 2 -a 706 580 2 -a 706 447 10 -a 706 759 1 -a 706 633 3 -a 706 859 5 -a 706 16 4 -a 706 516 10 -a 706 729 5 -a 706 48 6 -a 706 316 2 -a 706 325 9 -a 706 430 8 -a 706 462 3 -a 706 237 9 -a 706 85 7 -a 706 73 2 -a 706 605 3 -a 706 902 9 -a 706 601 8 -a 706 85 4 -a 706 792 5 -a 706 248 10 -a 706 489 6 -a 706 720 1 -a 706 268 3 -a 706 662 6 -a 706 65 4 -a 706 941 10 -a 706 139 1 -a 706 419 5 -a 706 496 3 -a 706 585 5 -a 706 153 8 -a 706 104 3 -a 706 419 4 -a 706 168 9 -a 706 619 6 -a 706 124 2 -a 706 216 5 -a 706 934 1 -a 706 448 7 -a 706 645 10 -a 706 372 1 -a 706 684 2 -a 706 729 9 -a 706 444 1 -a 706 264 9 -a 706 606 1 -a 706 20 10 -a 706 348 10 -a 706 588 10 -a 706 811 1 -a 706 596 8 -a 706 52 1 -a 706 506 4 -a 706 863 8 -a 706 714 9 -a 706 570 9 -a 706 779 5 -a 706 852 7 -a 706 988 9 -a 706 250 9 -a 706 412 3 -a 706 116 9 -a 706 353 2 -a 706 831 3 -a 706 283 3 -a 706 972 1 -a 706 954 1 -a 706 498 8 -a 706 881 9 -a 706 377 9 -a 706 118 3 -a 706 228 8 -a 706 36 3 -a 706 847 8 -a 706 671 4 -a 706 300 1 -a 706 428 3 -a 706 690 9 -a 706 647 2 -a 706 476 4 -a 706 218 7 -a 706 43 1 -a 706 981 9 -a 706 56 9 -a 706 756 10 -a 706 526 4 -a 706 834 1 -a 706 583 8 -a 706 489 1 -a 706 59 5 -a 706 995 3 -a 706 604 5 -a 706 412 7 -a 706 801 8 -a 706 887 10 -a 706 359 2 -a 706 730 7 -a 707 360 10 -a 707 215 4 -a 707 82 2 -a 707 478 8 -a 707 443 4 -a 707 117 4 -a 707 300 3 -a 707 89 7 -a 707 416 9 -a 707 727 9 -a 707 779 3 -a 707 39 4 -a 707 718 10 -a 707 230 8 -a 707 256 5 -a 707 761 9 -a 707 187 3 -a 707 312 3 -a 707 492 1 -a 707 712 9 -a 707 121 6 -a 707 51 3 -a 707 177 10 -a 707 180 1 -a 707 21 1 -a 707 780 10 -a 707 591 9 -a 707 821 6 -a 707 642 6 -a 707 949 4 -a 707 526 8 -a 707 139 2 -a 707 607 7 -a 707 455 1 -a 707 581 9 -a 707 723 3 -a 707 754 5 -a 707 670 2 -a 707 115 5 -a 707 456 4 -a 707 424 4 -a 707 153 5 -a 707 150 10 -a 707 653 7 -a 707 408 3 -a 707 910 6 -a 707 839 10 -a 707 719 10 -a 707 377 9 -a 707 527 5 -a 707 840 9 -a 707 427 4 -a 707 703 10 -a 707 447 7 -a 707 458 1 -a 707 585 1 -a 707 243 8 -a 707 76 6 -a 707 509 9 -a 707 768 3 -a 707 53 9 -a 707 647 7 -a 707 350 5 -a 707 507 6 -a 707 204 8 -a 707 49 3 -a 707 236 9 -a 707 873 6 -a 707 163 3 -a 707 691 2 -a 707 272 1 -a 707 315 2 -a 707 840 10 -a 707 924 5 -a 707 722 10 -a 707 725 8 -a 707 739 3 -a 707 417 7 -a 707 78 3 -a 707 241 7 -a 707 232 3 -a 707 504 6 -a 707 943 8 -a 707 226 3 -a 707 951 5 -a 707 376 7 -a 707 810 4 -a 707 169 7 -a 707 451 8 -a 707 294 4 -a 707 937 9 -a 707 503 2 -a 707 940 8 -a 707 262 2 -a 707 119 5 -a 707 310 9 -a 707 220 1 -a 707 991 2 -a 707 472 2 -a 707 911 3 -a 707 238 10 -a 708 786 5 -a 708 726 1 -a 708 138 10 -a 708 484 10 -a 708 427 6 -a 708 876 8 -a 708 900 1 -a 708 504 4 -a 708 92 9 -a 708 107 8 -a 708 10 6 -a 708 332 6 -a 708 933 6 -a 708 385 5 -a 708 117 9 -a 708 78 9 -a 708 836 8 -a 708 410 7 -a 708 314 10 -a 708 325 8 -a 708 251 3 -a 708 299 9 -a 708 444 7 -a 708 561 7 -a 708 518 1 -a 708 410 4 -a 708 8 3 -a 708 404 10 -a 708 648 3 -a 708 794 5 -a 708 106 5 -a 708 785 4 -a 708 253 4 -a 708 532 6 -a 708 636 10 -a 708 128 4 -a 708 11 8 -a 708 727 3 -a 708 234 4 -a 708 736 9 -a 708 565 4 -a 708 926 1 -a 708 96 2 -a 708 681 10 -a 708 931 10 -a 708 66 7 -a 708 992 6 -a 708 221 3 -a 708 390 10 -a 708 218 8 -a 708 519 5 -a 708 833 4 -a 708 778 3 -a 708 12 7 -a 708 219 6 -a 708 786 9 -a 708 416 6 -a 708 866 2 -a 708 555 1 -a 708 521 2 -a 708 626 10 -a 708 807 4 -a 708 28 4 -a 708 237 5 -a 708 934 8 -a 708 38 1 -a 708 963 3 -a 708 143 1 -a 708 30 2 -a 708 674 8 -a 708 707 8 -a 708 955 6 -a 708 769 5 -a 708 363 2 -a 708 933 5 -a 708 676 2 -a 708 428 1 -a 708 900 6 -a 708 896 4 -a 708 817 9 -a 708 94 9 -a 708 390 2 -a 708 626 6 -a 708 871 9 -a 708 401 8 -a 708 844 6 -a 708 632 1 -a 708 816 9 -a 708 685 8 -a 708 162 8 -a 708 312 2 -a 708 286 3 -a 708 968 9 -a 708 339 2 -a 708 522 5 -a 708 877 6 -a 708 376 1 -a 708 460 7 -a 708 406 8 -a 708 109 8 -a 709 701 3 -a 709 336 2 -a 709 877 3 -a 709 39 3 -a 709 245 3 -a 709 528 7 -a 709 466 1 -a 709 120 3 -a 709 399 10 -a 709 259 4 -a 709 213 1 -a 709 788 2 -a 709 884 1 -a 709 60 9 -a 709 165 6 -a 709 703 10 -a 709 691 10 -a 709 980 9 -a 709 363 7 -a 709 853 2 -a 709 268 7 -a 709 648 4 -a 709 796 4 -a 709 606 7 -a 709 145 9 -a 709 649 3 -a 709 982 5 -a 709 604 8 -a 709 643 3 -a 709 363 6 -a 709 712 2 -a 709 320 3 -a 709 698 7 -a 709 564 3 -a 709 358 7 -a 709 942 7 -a 709 68 3 -a 709 824 9 -a 709 38 1 -a 709 466 5 -a 709 58 3 -a 709 250 2 -a 709 230 7 -a 709 941 9 -a 709 309 10 -a 709 394 1 -a 709 619 9 -a 709 1000 3 -a 709 349 10 -a 709 981 1 -a 709 828 1 -a 709 616 3 -a 709 604 3 -a 709 599 3 -a 709 198 1 -a 709 748 5 -a 709 223 2 -a 709 155 2 -a 709 327 6 -a 709 866 8 -a 709 517 7 -a 709 14 7 -a 709 161 2 -a 709 190 7 -a 709 577 1 -a 709 518 1 -a 709 108 10 -a 709 644 3 -a 709 317 4 -a 709 145 5 -a 709 86 4 -a 709 374 3 -a 709 394 6 -a 709 315 2 -a 709 290 8 -a 709 703 6 -a 709 708 10 -a 709 908 4 -a 709 678 4 -a 709 32 1 -a 709 864 3 -a 709 481 2 -a 709 648 2 -a 709 443 9 -a 709 55 9 -a 709 845 9 -a 709 166 4 -a 709 278 9 -a 709 999 7 -a 709 492 7 -a 709 119 10 -a 709 491 10 -a 709 505 5 -a 709 279 9 -a 709 680 9 -a 709 58 5 -a 709 796 9 -a 709 787 1 -a 709 701 3 -a 710 89 3 -a 710 931 8 -a 710 786 8 -a 710 462 1 -a 710 301 5 -a 710 76 2 -a 710 752 7 -a 710 783 4 -a 710 635 9 -a 710 656 7 -a 710 815 9 -a 710 475 4 -a 710 112 10 -a 710 438 7 -a 710 917 8 -a 710 166 5 -a 710 258 6 -a 710 59 1 -a 710 443 9 -a 710 232 3 -a 710 550 3 -a 710 561 5 -a 710 722 6 -a 710 31 3 -a 710 839 10 -a 710 377 7 -a 710 88 10 -a 710 611 2 -a 710 140 9 -a 710 788 5 -a 710 699 8 -a 710 46 1 -a 710 550 9 -a 710 136 7 -a 710 346 4 -a 710 625 3 -a 710 887 7 -a 710 324 3 -a 710 384 6 -a 710 498 6 -a 710 979 10 -a 710 174 1 -a 710 972 5 -a 710 66 5 -a 710 611 8 -a 710 864 1 -a 710 232 4 -a 710 868 1 -a 710 922 7 -a 710 674 10 -a 710 75 4 -a 710 448 5 -a 710 211 1 -a 710 796 3 -a 710 478 8 -a 710 25 3 -a 710 148 1 -a 710 565 8 -a 710 635 7 -a 710 287 7 -a 710 328 2 -a 710 309 5 -a 710 333 6 -a 710 877 9 -a 710 445 2 -a 710 678 8 -a 710 478 5 -a 710 307 10 -a 710 861 8 -a 710 804 10 -a 710 956 4 -a 710 10 8 -a 710 751 7 -a 710 620 9 -a 710 591 4 -a 710 229 5 -a 710 463 8 -a 710 488 3 -a 710 902 4 -a 710 537 3 -a 710 935 3 -a 710 88 8 -a 710 308 1 -a 710 388 1 -a 710 113 1 -a 710 455 8 -a 710 952 10 -a 710 747 4 -a 710 742 10 -a 710 256 1 -a 710 32 8 -a 710 50 9 -a 710 108 7 -a 710 476 3 -a 710 727 5 -a 710 585 7 -a 710 782 4 -a 710 704 8 -a 710 421 10 -a 710 562 1 -a 710 636 6 -a 710 430 6 -a 710 288 1 -a 710 633 8 -a 710 25 8 -a 710 878 8 -a 710 861 8 -a 710 487 10 -a 710 342 5 -a 710 738 3 -a 710 252 7 -a 710 826 3 -a 710 306 7 -a 710 640 2 -a 710 938 6 -a 711 761 8 -a 711 567 2 -a 711 660 5 -a 711 478 6 -a 711 822 4 -a 711 691 6 -a 711 527 9 -a 711 930 4 -a 711 142 3 -a 711 229 9 -a 711 490 3 -a 711 924 3 -a 711 933 2 -a 711 911 8 -a 711 461 2 -a 711 544 4 -a 711 316 1 -a 711 748 10 -a 711 152 6 -a 711 341 1 -a 711 602 7 -a 711 827 6 -a 711 943 9 -a 711 725 8 -a 711 826 2 -a 711 170 6 -a 711 526 4 -a 711 107 9 -a 711 809 6 -a 711 439 8 -a 711 867 5 -a 711 352 2 -a 711 75 1 -a 711 320 3 -a 711 149 10 -a 711 765 4 -a 711 846 1 -a 711 54 10 -a 711 907 9 -a 711 51 3 -a 711 544 7 -a 711 806 3 -a 711 983 3 -a 711 430 10 -a 711 242 4 -a 711 502 5 -a 711 745 7 -a 711 989 7 -a 711 653 3 -a 711 61 1 -a 711 566 9 -a 711 640 4 -a 711 888 5 -a 711 484 4 -a 711 340 5 -a 711 689 5 -a 711 654 2 -a 711 866 7 -a 711 795 6 -a 711 438 7 -a 711 280 8 -a 711 638 1 -a 711 789 7 -a 711 354 8 -a 711 957 3 -a 711 938 10 -a 711 95 2 -a 711 779 9 -a 711 991 2 -a 711 829 1 -a 711 510 9 -a 711 782 5 -a 711 787 8 -a 711 939 8 -a 711 264 4 -a 711 660 9 -a 711 987 3 -a 711 916 7 -a 711 720 2 -a 711 529 9 -a 711 531 1 -a 711 583 10 -a 711 870 5 -a 711 247 8 -a 711 641 1 -a 711 711 1 -a 711 18 9 -a 711 55 7 -a 711 991 1 -a 711 655 6 -a 711 843 8 -a 711 320 9 -a 711 587 5 -a 711 756 7 -a 711 414 4 -a 711 341 4 -a 711 723 7 -a 711 390 9 -a 711 145 6 -a 711 208 2 -a 711 147 5 -a 711 931 7 -a 711 123 10 -a 711 145 3 -a 711 170 8 -a 711 782 3 -a 712 108 7 -a 712 61 7 -a 712 477 6 -a 712 636 8 -a 712 591 2 -a 712 36 7 -a 712 623 9 -a 712 437 1 -a 712 282 4 -a 712 240 5 -a 712 123 9 -a 712 299 10 -a 712 294 9 -a 712 89 7 -a 712 953 6 -a 712 112 6 -a 712 409 9 -a 712 516 5 -a 712 868 4 -a 712 822 2 -a 712 856 5 -a 712 566 8 -a 712 188 9 -a 712 773 6 -a 712 334 9 -a 712 907 1 -a 712 895 6 -a 712 479 7 -a 712 53 10 -a 712 652 3 -a 712 586 3 -a 712 113 4 -a 712 105 9 -a 712 197 7 -a 712 704 2 -a 712 140 10 -a 712 819 4 -a 712 116 6 -a 712 421 10 -a 712 34 9 -a 712 238 4 -a 712 720 10 -a 712 327 10 -a 712 327 9 -a 712 648 9 -a 712 439 3 -a 712 735 5 -a 712 139 5 -a 712 282 10 -a 712 532 7 -a 712 995 3 -a 712 847 5 -a 712 719 1 -a 712 971 4 -a 712 595 7 -a 712 29 1 -a 712 853 6 -a 712 466 7 -a 712 507 9 -a 712 905 8 -a 712 93 1 -a 712 68 8 -a 712 197 7 -a 712 264 3 -a 712 697 5 -a 712 336 8 -a 712 58 3 -a 712 812 6 -a 712 757 10 -a 712 92 4 -a 712 25 5 -a 712 452 8 -a 712 418 3 -a 712 351 3 -a 712 75 3 -a 712 856 4 -a 712 61 3 -a 712 214 2 -a 712 113 7 -a 712 593 9 -a 712 184 4 -a 712 959 2 -a 712 287 6 -a 712 130 4 -a 712 530 2 -a 712 315 10 -a 712 982 8 -a 712 995 9 -a 713 821 10 -a 713 863 2 -a 713 63 6 -a 713 888 4 -a 713 856 2 -a 713 260 8 -a 713 127 4 -a 713 528 9 -a 713 595 10 -a 713 185 10 -a 713 315 1 -a 713 327 7 -a 713 276 8 -a 713 339 5 -a 713 778 9 -a 713 693 3 -a 713 690 8 -a 713 853 1 -a 713 525 10 -a 713 750 9 -a 713 42 1 -a 713 637 9 -a 713 318 6 -a 713 225 8 -a 713 572 5 -a 713 605 5 -a 713 354 10 -a 713 77 3 -a 713 919 5 -a 713 311 2 -a 713 47 2 -a 713 716 10 -a 713 149 2 -a 713 109 8 -a 713 579 2 -a 713 368 9 -a 713 706 8 -a 713 507 9 -a 713 963 7 -a 713 890 4 -a 713 821 2 -a 713 265 8 -a 713 141 7 -a 713 136 4 -a 713 19 2 -a 713 833 4 -a 713 825 8 -a 713 871 4 -a 713 333 3 -a 713 550 9 -a 713 912 3 -a 713 970 8 -a 713 868 5 -a 713 112 7 -a 713 517 3 -a 713 448 3 -a 713 465 8 -a 713 593 2 -a 713 342 2 -a 713 775 7 -a 713 639 10 -a 713 33 2 -a 713 924 6 -a 713 747 5 -a 713 612 3 -a 713 903 10 -a 713 91 7 -a 713 293 1 -a 713 386 2 -a 713 29 6 -a 713 158 6 -a 713 182 6 -a 713 293 8 -a 713 298 9 -a 713 317 3 -a 713 311 10 -a 713 106 10 -a 713 117 9 -a 713 157 3 -a 713 439 9 -a 713 667 7 -a 713 44 5 -a 713 384 2 -a 713 510 9 -a 713 155 5 -a 713 900 9 -a 713 957 3 -a 713 619 5 -a 713 468 3 -a 713 274 3 -a 713 370 4 -a 713 82 2 -a 713 307 1 -a 714 269 3 -a 714 828 6 -a 714 918 3 -a 714 147 9 -a 714 918 1 -a 714 186 10 -a 714 532 1 -a 714 946 3 -a 714 343 3 -a 714 714 10 -a 714 215 6 -a 714 640 2 -a 714 6 2 -a 714 525 10 -a 714 745 3 -a 714 123 2 -a 714 682 7 -a 714 159 7 -a 714 789 9 -a 714 725 8 -a 714 542 7 -a 714 274 8 -a 714 880 2 -a 714 417 9 -a 714 206 1 -a 714 474 2 -a 714 884 7 -a 714 479 9 -a 714 843 4 -a 714 965 8 -a 714 785 7 -a 714 87 4 -a 714 769 1 -a 714 678 1 -a 714 234 6 -a 714 662 1 -a 714 863 3 -a 714 765 8 -a 714 584 9 -a 714 181 1 -a 714 454 8 -a 714 798 2 -a 714 820 5 -a 714 460 5 -a 714 298 1 -a 714 541 4 -a 714 582 2 -a 714 979 1 -a 714 699 9 -a 714 346 1 -a 714 680 2 -a 714 217 10 -a 714 619 7 -a 714 535 1 -a 714 633 5 -a 714 824 1 -a 714 493 9 -a 714 278 4 -a 714 827 10 -a 714 433 3 -a 714 39 4 -a 714 913 8 -a 714 177 4 -a 714 716 9 -a 714 122 5 -a 714 839 9 -a 714 555 2 -a 714 887 3 -a 714 398 3 -a 714 735 6 -a 714 316 4 -a 714 171 1 -a 714 531 2 -a 714 775 5 -a 714 468 10 -a 714 47 1 -a 714 332 8 -a 714 423 7 -a 714 745 9 -a 714 677 8 -a 714 78 1 -a 714 961 2 -a 714 271 4 -a 714 612 10 -a 714 570 4 -a 714 70 7 -a 714 595 1 -a 714 38 8 -a 714 348 5 -a 714 397 7 -a 714 470 7 -a 714 386 10 -a 714 286 8 -a 714 647 5 -a 715 77 5 -a 715 407 8 -a 715 461 3 -a 715 631 8 -a 715 269 4 -a 715 858 2 -a 715 342 7 -a 715 585 5 -a 715 4 2 -a 715 872 4 -a 715 335 9 -a 715 471 2 -a 715 918 6 -a 715 667 4 -a 715 893 9 -a 715 638 4 -a 715 319 2 -a 715 970 3 -a 715 575 10 -a 715 590 6 -a 715 557 9 -a 715 120 10 -a 715 659 1 -a 715 128 8 -a 715 157 10 -a 715 524 9 -a 715 626 6 -a 715 367 10 -a 715 809 3 -a 715 248 2 -a 715 444 8 -a 715 192 9 -a 715 708 1 -a 715 50 2 -a 715 460 1 -a 715 541 4 -a 715 391 1 -a 715 20 3 -a 715 544 6 -a 715 238 2 -a 715 355 2 -a 715 131 8 -a 715 883 8 -a 715 769 7 -a 715 315 10 -a 715 829 6 -a 715 319 4 -a 715 904 7 -a 715 361 2 -a 715 438 3 -a 715 539 7 -a 715 488 8 -a 715 594 1 -a 715 520 8 -a 715 195 2 -a 715 887 3 -a 715 796 2 -a 715 443 1 -a 715 306 3 -a 715 987 1 -a 715 126 8 -a 715 355 2 -a 715 423 8 -a 715 667 7 -a 715 746 3 -a 715 442 1 -a 715 186 2 -a 715 983 9 -a 715 796 5 -a 715 176 8 -a 715 90 7 -a 715 792 7 -a 715 35 2 -a 715 858 9 -a 715 83 8 -a 715 863 7 -a 715 152 10 -a 715 986 9 -a 715 199 1 -a 715 589 8 -a 715 500 1 -a 715 687 10 -a 715 158 1 -a 715 674 7 -a 715 352 4 -a 715 882 4 -a 715 445 1 -a 715 794 2 -a 715 163 1 -a 715 408 1 -a 715 920 3 -a 715 517 2 -a 715 830 9 -a 715 562 10 -a 715 238 1 -a 715 247 4 -a 715 747 1 -a 715 197 8 -a 715 19 7 -a 715 923 10 -a 715 286 2 -a 715 810 7 -a 715 957 1 -a 715 119 2 -a 715 892 1 -a 715 795 2 -a 715 270 7 -a 715 854 6 -a 715 993 9 -a 715 858 3 -a 716 329 3 -a 716 655 7 -a 716 324 7 -a 716 304 5 -a 716 342 3 -a 716 181 2 -a 716 749 4 -a 716 112 8 -a 716 343 6 -a 716 132 9 -a 716 7 8 -a 716 860 7 -a 716 961 5 -a 716 568 9 -a 716 73 5 -a 716 183 4 -a 716 290 4 -a 716 269 7 -a 716 201 10 -a 716 188 5 -a 716 554 2 -a 716 120 7 -a 716 672 3 -a 716 878 8 -a 716 914 2 -a 716 941 4 -a 716 707 9 -a 716 883 7 -a 716 774 7 -a 716 12 7 -a 716 513 3 -a 716 764 7 -a 716 335 6 -a 716 817 10 -a 716 82 10 -a 716 516 6 -a 716 541 8 -a 716 193 8 -a 716 858 2 -a 716 672 3 -a 716 199 3 -a 716 693 3 -a 716 608 9 -a 716 766 5 -a 716 766 10 -a 716 790 2 -a 716 31 6 -a 716 10 1 -a 716 991 4 -a 716 219 8 -a 716 564 5 -a 716 977 6 -a 716 338 2 -a 716 211 1 -a 716 830 3 -a 716 228 8 -a 716 128 9 -a 716 513 1 -a 716 86 2 -a 716 901 8 -a 716 524 9 -a 716 598 10 -a 716 641 4 -a 716 858 4 -a 716 390 6 -a 716 722 5 -a 716 349 10 -a 716 930 6 -a 716 914 10 -a 716 183 2 -a 716 577 5 -a 716 88 3 -a 716 875 5 -a 716 160 3 -a 716 853 4 -a 716 616 6 -a 716 950 1 -a 716 883 4 -a 716 626 1 -a 716 916 4 -a 716 77 3 -a 716 165 5 -a 716 868 7 -a 716 415 9 -a 716 375 9 -a 716 673 5 -a 716 642 8 -a 716 502 6 -a 716 161 10 -a 716 727 4 -a 716 379 10 -a 716 684 2 -a 716 300 7 -a 716 518 5 -a 716 690 9 -a 716 716 5 -a 716 866 4 -a 716 595 6 -a 716 605 7 -a 716 24 8 -a 716 148 6 -a 716 692 9 -a 716 899 5 -a 716 307 6 -a 716 520 1 -a 717 490 5 -a 717 232 2 -a 717 378 8 -a 717 91 6 -a 717 123 3 -a 717 455 10 -a 717 255 10 -a 717 990 8 -a 717 869 8 -a 717 630 3 -a 717 639 10 -a 717 486 2 -a 717 107 7 -a 717 799 4 -a 717 188 10 -a 717 485 5 -a 717 459 8 -a 717 487 8 -a 717 479 6 -a 717 976 1 -a 717 152 3 -a 717 170 5 -a 717 817 10 -a 717 747 7 -a 717 774 5 -a 717 841 10 -a 717 894 7 -a 717 441 3 -a 717 715 8 -a 717 176 1 -a 717 960 6 -a 717 180 1 -a 717 408 5 -a 717 314 4 -a 717 271 4 -a 717 530 10 -a 717 768 6 -a 717 525 10 -a 717 496 5 -a 717 612 5 -a 717 130 9 -a 717 110 1 -a 717 73 9 -a 717 237 3 -a 717 908 7 -a 717 260 4 -a 717 721 7 -a 717 342 4 -a 717 746 4 -a 717 176 6 -a 717 293 4 -a 717 898 3 -a 717 345 2 -a 717 86 2 -a 717 620 7 -a 717 95 6 -a 717 926 6 -a 717 489 6 -a 717 535 1 -a 717 616 4 -a 717 664 9 -a 717 471 3 -a 717 795 7 -a 717 47 9 -a 717 784 9 -a 717 41 2 -a 717 577 1 -a 717 527 2 -a 717 566 2 -a 717 48 6 -a 717 114 7 -a 717 695 5 -a 717 157 2 -a 717 186 8 -a 717 931 1 -a 717 40 10 -a 717 445 3 -a 717 628 8 -a 717 382 9 -a 717 166 6 -a 717 803 7 -a 717 674 8 -a 717 39 7 -a 717 123 2 -a 717 759 7 -a 717 658 1 -a 717 217 4 -a 717 660 1 -a 717 122 3 -a 717 752 2 -a 717 251 1 -a 717 786 9 -a 717 198 8 -a 717 22 3 -a 717 832 3 -a 717 981 7 -a 717 62 3 -a 717 384 2 -a 718 483 7 -a 718 627 10 -a 718 431 10 -a 718 596 5 -a 718 298 7 -a 718 587 6 -a 718 781 5 -a 718 204 4 -a 718 627 2 -a 718 201 1 -a 718 831 4 -a 718 366 10 -a 718 609 8 -a 718 657 1 -a 718 405 3 -a 718 732 10 -a 718 392 6 -a 718 38 1 -a 718 948 8 -a 718 27 7 -a 718 160 1 -a 718 675 5 -a 718 278 6 -a 718 945 9 -a 718 872 6 -a 718 299 5 -a 718 752 2 -a 718 828 5 -a 718 360 3 -a 718 112 1 -a 718 286 4 -a 718 987 6 -a 718 542 3 -a 718 881 5 -a 718 260 9 -a 718 105 10 -a 718 637 8 -a 718 463 9 -a 718 731 2 -a 718 837 4 -a 718 270 6 -a 718 714 2 -a 718 179 5 -a 718 878 8 -a 718 346 1 -a 718 583 7 -a 718 585 4 -a 718 737 2 -a 718 620 2 -a 718 509 4 -a 718 764 2 -a 718 779 3 -a 718 159 9 -a 718 17 4 -a 718 699 7 -a 718 7 2 -a 718 315 2 -a 718 427 7 -a 718 834 3 -a 718 674 8 -a 718 538 3 -a 718 96 8 -a 718 636 9 -a 718 55 8 -a 718 976 2 -a 718 895 3 -a 718 159 1 -a 718 589 2 -a 718 334 4 -a 718 889 4 -a 718 401 7 -a 718 603 4 -a 718 578 6 -a 718 579 5 -a 718 456 7 -a 718 924 5 -a 718 137 9 -a 718 17 4 -a 718 636 7 -a 718 757 1 -a 718 525 4 -a 718 375 8 -a 718 511 7 -a 718 683 10 -a 718 391 5 -a 718 186 7 -a 718 689 4 -a 718 705 2 -a 718 612 7 -a 718 499 1 -a 718 355 3 -a 718 125 7 -a 718 594 2 -a 718 990 6 -a 719 179 6 -a 719 545 9 -a 719 861 10 -a 719 338 1 -a 719 109 8 -a 719 170 4 -a 719 202 10 -a 719 510 4 -a 719 772 1 -a 719 780 10 -a 719 64 9 -a 719 203 4 -a 719 679 1 -a 719 201 1 -a 719 219 1 -a 719 290 2 -a 719 957 8 -a 719 743 1 -a 719 665 10 -a 719 443 8 -a 719 402 1 -a 719 31 8 -a 719 628 4 -a 719 66 6 -a 719 736 7 -a 719 215 8 -a 719 564 3 -a 719 66 1 -a 719 339 2 -a 719 133 2 -a 719 31 8 -a 719 518 8 -a 719 678 8 -a 719 891 8 -a 719 855 3 -a 719 786 6 -a 719 36 1 -a 719 32 1 -a 719 271 6 -a 719 807 8 -a 719 811 6 -a 719 335 1 -a 719 465 7 -a 719 535 1 -a 719 204 7 -a 719 755 10 -a 719 467 8 -a 719 947 2 -a 719 395 5 -a 719 909 1 -a 719 324 8 -a 719 425 5 -a 719 513 7 -a 719 389 4 -a 719 136 8 -a 719 727 1 -a 719 953 7 -a 719 201 5 -a 719 42 8 -a 719 61 6 -a 719 232 2 -a 719 559 6 -a 719 738 3 -a 719 98 6 -a 719 389 3 -a 719 500 8 -a 719 134 10 -a 719 420 8 -a 719 770 9 -a 719 940 5 -a 719 207 1 -a 719 80 8 -a 719 925 10 -a 719 671 10 -a 719 614 6 -a 719 105 10 -a 719 401 1 -a 719 56 1 -a 719 27 1 -a 719 795 2 -a 719 965 7 -a 719 350 1 -a 719 196 1 -a 719 453 7 -a 719 738 6 -a 719 331 10 -a 719 155 4 -a 719 666 1 -a 719 532 2 -a 719 196 6 -a 719 727 5 -a 719 763 6 -a 720 754 3 -a 720 440 8 -a 720 860 7 -a 720 118 9 -a 720 939 3 -a 720 993 7 -a 720 538 10 -a 720 685 4 -a 720 909 9 -a 720 744 6 -a 720 764 10 -a 720 809 9 -a 720 390 5 -a 720 354 5 -a 720 913 7 -a 720 791 5 -a 720 409 10 -a 720 939 9 -a 720 561 5 -a 720 349 5 -a 720 264 4 -a 720 756 10 -a 720 801 6 -a 720 63 5 -a 720 956 2 -a 720 643 9 -a 720 594 4 -a 720 127 1 -a 720 345 5 -a 720 332 5 -a 720 881 9 -a 720 785 3 -a 720 167 9 -a 720 998 3 -a 720 699 7 -a 720 136 1 -a 720 511 10 -a 720 359 6 -a 720 20 10 -a 720 230 3 -a 720 99 8 -a 720 828 1 -a 720 620 3 -a 720 452 3 -a 720 717 6 -a 720 386 10 -a 720 860 10 -a 720 631 1 -a 720 946 2 -a 720 185 10 -a 720 895 5 -a 720 678 9 -a 720 985 5 -a 720 872 3 -a 720 740 6 -a 720 916 5 -a 720 490 3 -a 720 309 3 -a 720 19 8 -a 720 835 3 -a 720 640 3 -a 720 899 7 -a 720 595 5 -a 720 806 2 -a 720 872 2 -a 720 269 3 -a 720 941 8 -a 720 359 3 -a 720 628 8 -a 720 960 2 -a 720 588 7 -a 720 726 6 -a 720 764 3 -a 720 183 2 -a 720 153 4 -a 720 456 7 -a 720 568 4 -a 720 62 2 -a 720 490 6 -a 720 172 5 -a 720 956 6 -a 720 143 2 -a 720 133 6 -a 720 803 7 -a 720 882 4 -a 720 24 4 -a 720 269 5 -a 720 166 3 -a 721 42 10 -a 721 79 9 -a 721 805 3 -a 721 940 6 -a 721 673 5 -a 721 586 7 -a 721 788 6 -a 721 941 1 -a 721 503 10 -a 721 122 1 -a 721 544 3 -a 721 438 6 -a 721 709 4 -a 721 245 3 -a 721 177 8 -a 721 892 7 -a 721 397 1 -a 721 632 7 -a 721 435 2 -a 721 385 3 -a 721 694 3 -a 721 924 8 -a 721 556 2 -a 721 625 6 -a 721 42 6 -a 721 688 4 -a 721 404 6 -a 721 923 8 -a 721 712 5 -a 721 672 1 -a 721 64 5 -a 721 753 1 -a 721 750 7 -a 721 868 7 -a 721 669 7 -a 721 398 7 -a 721 430 8 -a 721 432 9 -a 721 314 7 -a 721 932 4 -a 721 553 10 -a 721 858 4 -a 721 345 4 -a 721 237 10 -a 721 78 10 -a 721 522 6 -a 721 104 4 -a 721 475 6 -a 721 129 3 -a 721 539 4 -a 721 859 5 -a 721 822 3 -a 721 438 6 -a 721 390 9 -a 721 423 3 -a 721 480 3 -a 721 54 1 -a 721 826 1 -a 721 378 9 -a 721 765 4 -a 721 473 6 -a 721 442 1 -a 721 493 4 -a 721 198 1 -a 721 285 2 -a 721 137 10 -a 721 595 5 -a 721 714 7 -a 721 568 7 -a 721 908 9 -a 721 621 9 -a 721 96 8 -a 721 741 5 -a 721 966 7 -a 721 333 4 -a 721 819 7 -a 721 463 1 -a 721 436 9 -a 721 269 2 -a 721 591 3 -a 721 974 10 -a 721 103 6 -a 721 389 10 -a 721 388 7 -a 721 492 8 -a 721 811 3 -a 721 867 9 -a 721 545 4 -a 721 612 10 -a 721 220 2 -a 721 285 10 -a 721 60 6 -a 721 661 2 -a 721 778 10 -a 721 257 10 -a 721 946 3 -a 721 914 7 -a 721 851 3 -a 721 635 9 -a 721 458 2 -a 722 734 10 -a 722 232 7 -a 722 553 3 -a 722 451 1 -a 722 173 4 -a 722 885 10 -a 722 245 10 -a 722 635 6 -a 722 297 6 -a 722 513 9 -a 722 201 1 -a 722 246 4 -a 722 615 9 -a 722 589 4 -a 722 633 3 -a 722 82 2 -a 722 375 8 -a 722 475 2 -a 722 627 10 -a 722 986 10 -a 722 695 4 -a 722 911 6 -a 722 21 2 -a 722 331 7 -a 722 664 6 -a 722 277 2 -a 722 252 10 -a 722 554 3 -a 722 103 8 -a 722 887 3 -a 722 837 8 -a 722 94 6 -a 722 539 2 -a 722 263 8 -a 722 266 3 -a 722 400 5 -a 722 507 4 -a 722 900 3 -a 722 696 6 -a 722 76 4 -a 722 941 5 -a 722 609 3 -a 722 665 10 -a 722 550 9 -a 722 690 1 -a 722 15 3 -a 722 292 5 -a 722 694 8 -a 722 179 10 -a 722 1 10 -a 722 842 10 -a 722 274 4 -a 722 252 4 -a 722 371 3 -a 722 376 1 -a 722 114 6 -a 722 357 5 -a 722 188 8 -a 722 207 10 -a 722 896 9 -a 722 450 9 -a 722 472 9 -a 722 271 7 -a 722 956 8 -a 722 347 4 -a 722 966 5 -a 722 950 8 -a 722 423 6 -a 722 882 3 -a 722 534 2 -a 722 63 10 -a 722 407 7 -a 722 200 4 -a 722 77 5 -a 722 407 10 -a 722 491 2 -a 722 53 8 -a 722 76 2 -a 722 669 2 -a 722 50 1 -a 722 76 6 -a 722 487 8 -a 722 323 8 -a 722 328 3 -a 722 857 8 -a 722 698 4 -a 722 441 3 -a 722 190 10 -a 722 886 3 -a 722 648 7 -a 722 61 10 -a 722 311 1 -a 722 95 6 -a 722 331 10 -a 722 243 7 -a 722 442 5 -a 722 272 2 -a 723 168 1 -a 723 864 3 -a 723 129 1 -a 723 702 6 -a 723 926 1 -a 723 536 9 -a 723 901 5 -a 723 942 8 -a 723 367 5 -a 723 31 5 -a 723 12 7 -a 723 80 5 -a 723 69 3 -a 723 498 1 -a 723 402 3 -a 723 396 6 -a 723 330 2 -a 723 75 1 -a 723 836 9 -a 723 519 6 -a 723 960 7 -a 723 459 6 -a 723 579 7 -a 723 247 6 -a 723 554 7 -a 723 909 8 -a 723 489 2 -a 723 995 9 -a 723 156 6 -a 723 656 3 -a 723 834 9 -a 723 285 3 -a 723 333 2 -a 723 735 7 -a 723 820 2 -a 723 209 10 -a 723 712 7 -a 723 737 6 -a 723 576 6 -a 723 742 4 -a 723 729 2 -a 723 587 7 -a 723 821 3 -a 723 797 6 -a 723 60 9 -a 723 198 7 -a 723 168 1 -a 723 389 10 -a 723 273 3 -a 723 908 9 -a 723 208 5 -a 723 438 6 -a 723 462 7 -a 723 454 8 -a 723 991 2 -a 723 347 2 -a 723 942 5 -a 723 961 3 -a 723 502 8 -a 723 574 4 -a 723 770 4 -a 723 786 7 -a 723 906 3 -a 723 480 6 -a 723 581 8 -a 723 91 6 -a 723 168 7 -a 723 293 8 -a 723 666 6 -a 723 909 4 -a 723 228 4 -a 723 706 9 -a 723 794 8 -a 723 287 2 -a 723 903 2 -a 723 962 9 -a 723 675 3 -a 723 151 5 -a 723 941 7 -a 723 558 1 -a 723 359 8 -a 723 354 2 -a 723 812 9 -a 723 321 8 -a 723 342 1 -a 723 730 5 -a 723 257 3 -a 723 843 2 -a 723 279 6 -a 723 3 4 -a 723 605 2 -a 723 160 3 -a 723 482 9 -a 723 161 5 -a 723 250 5 -a 723 649 7 -a 723 454 2 -a 723 915 9 -a 723 534 2 -a 723 451 10 -a 723 118 2 -a 723 215 2 -a 723 220 9 -a 723 404 2 -a 723 93 1 -a 723 157 6 -a 723 55 9 -a 723 244 2 -a 724 73 8 -a 724 612 6 -a 724 602 7 -a 724 427 1 -a 724 607 8 -a 724 389 6 -a 724 747 10 -a 724 948 1 -a 724 94 4 -a 724 767 3 -a 724 372 6 -a 724 347 1 -a 724 532 4 -a 724 463 5 -a 724 507 10 -a 724 781 2 -a 724 87 6 -a 724 960 4 -a 724 672 2 -a 724 620 1 -a 724 386 3 -a 724 789 1 -a 724 834 10 -a 724 606 2 -a 724 169 3 -a 724 927 2 -a 724 762 5 -a 724 223 2 -a 724 146 3 -a 724 835 10 -a 724 834 5 -a 724 747 6 -a 724 237 3 -a 724 417 2 -a 724 111 1 -a 724 983 10 -a 724 340 9 -a 724 205 6 -a 724 961 10 -a 724 82 8 -a 724 576 8 -a 724 942 8 -a 724 428 5 -a 724 83 8 -a 724 380 10 -a 724 935 4 -a 724 864 7 -a 724 466 5 -a 724 870 6 -a 724 511 4 -a 724 62 8 -a 724 232 8 -a 724 275 9 -a 724 895 1 -a 724 837 5 -a 724 443 3 -a 724 797 2 -a 724 574 7 -a 724 665 6 -a 724 942 9 -a 724 384 10 -a 724 475 7 -a 724 664 2 -a 724 620 4 -a 724 891 7 -a 724 775 3 -a 724 578 1 -a 724 206 10 -a 724 979 2 -a 724 515 6 -a 724 288 3 -a 724 530 8 -a 724 432 4 -a 724 715 2 -a 724 613 8 -a 724 811 1 -a 724 625 4 -a 724 452 9 -a 724 252 2 -a 724 471 7 -a 724 962 9 -a 724 313 8 -a 724 702 4 -a 724 212 4 -a 724 184 9 -a 724 514 7 -a 724 655 3 -a 724 980 4 -a 724 63 6 -a 724 295 7 -a 724 898 10 -a 724 447 2 -a 724 769 7 -a 724 537 8 -a 724 42 1 -a 724 635 7 -a 724 287 2 -a 724 620 2 -a 724 841 10 -a 724 241 5 -a 724 110 2 -a 724 104 2 -a 724 771 5 -a 724 541 1 -a 724 818 10 -a 724 359 10 -a 724 327 9 -a 724 419 6 -a 724 810 5 -a 724 578 10 -a 724 889 4 -a 725 747 4 -a 725 891 10 -a 725 566 2 -a 725 958 7 -a 725 50 10 -a 725 55 7 -a 725 588 6 -a 725 5 6 -a 725 117 9 -a 725 883 7 -a 725 902 5 -a 725 563 2 -a 725 627 6 -a 725 415 3 -a 725 605 6 -a 725 238 10 -a 725 701 3 -a 725 200 4 -a 725 54 3 -a 725 942 2 -a 725 309 3 -a 725 157 10 -a 725 688 8 -a 725 849 8 -a 725 974 2 -a 725 22 1 -a 725 151 6 -a 725 368 2 -a 725 831 1 -a 725 728 1 -a 725 232 7 -a 725 553 4 -a 725 594 6 -a 725 797 10 -a 725 486 6 -a 725 643 3 -a 725 851 9 -a 725 50 5 -a 725 648 6 -a 725 968 2 -a 725 932 5 -a 725 525 3 -a 725 506 5 -a 725 534 3 -a 725 939 4 -a 725 86 7 -a 725 771 3 -a 725 616 2 -a 725 285 1 -a 725 824 2 -a 725 533 6 -a 725 593 4 -a 725 980 4 -a 725 196 8 -a 725 417 8 -a 725 930 9 -a 725 217 8 -a 725 567 3 -a 725 273 8 -a 725 23 3 -a 725 271 5 -a 725 505 6 -a 725 575 8 -a 725 864 9 -a 725 277 10 -a 725 36 10 -a 725 483 1 -a 725 104 4 -a 725 85 7 -a 725 106 5 -a 725 47 5 -a 725 630 2 -a 725 552 4 -a 725 526 4 -a 725 545 8 -a 725 638 7 -a 725 272 1 -a 725 136 6 -a 725 922 3 -a 725 72 6 -a 725 668 1 -a 725 491 10 -a 725 27 1 -a 725 863 3 -a 725 907 8 -a 725 956 9 -a 725 55 2 -a 725 450 8 -a 725 205 6 -a 725 77 6 -a 725 720 10 -a 725 709 7 -a 725 651 5 -a 725 559 2 -a 725 985 4 -a 725 686 2 -a 725 17 9 -a 725 64 7 -a 725 771 9 -a 725 122 9 -a 725 110 7 -a 726 762 7 -a 726 752 2 -a 726 662 6 -a 726 263 9 -a 726 272 8 -a 726 275 10 -a 726 535 10 -a 726 407 7 -a 726 172 9 -a 726 606 4 -a 726 50 1 -a 726 662 8 -a 726 632 10 -a 726 912 1 -a 726 545 9 -a 726 564 9 -a 726 966 8 -a 726 994 2 -a 726 768 1 -a 726 18 8 -a 726 689 8 -a 726 452 10 -a 726 668 10 -a 726 223 5 -a 726 412 6 -a 726 329 6 -a 726 240 6 -a 726 476 5 -a 726 75 4 -a 726 361 8 -a 726 585 3 -a 726 837 10 -a 726 88 9 -a 726 222 10 -a 726 75 8 -a 726 359 3 -a 726 496 2 -a 726 609 4 -a 726 765 2 -a 726 668 9 -a 726 190 7 -a 726 814 5 -a 726 305 5 -a 726 822 10 -a 726 701 10 -a 726 849 1 -a 726 361 7 -a 726 642 7 -a 726 818 1 -a 726 104 4 -a 726 659 3 -a 726 482 4 -a 726 555 6 -a 726 302 10 -a 726 705 8 -a 726 966 5 -a 726 631 2 -a 726 944 1 -a 726 417 5 -a 726 705 2 -a 726 280 10 -a 726 517 8 -a 726 368 3 -a 726 199 7 -a 726 592 3 -a 726 726 7 -a 726 695 9 -a 726 176 1 -a 726 467 1 -a 726 338 2 -a 726 366 2 -a 726 256 7 -a 726 642 1 -a 726 163 8 -a 726 957 7 -a 726 467 4 -a 726 523 10 -a 726 574 8 -a 726 260 8 -a 726 626 4 -a 726 209 10 -a 726 742 8 -a 726 156 5 -a 726 510 2 -a 726 422 8 -a 726 97 10 -a 726 116 5 -a 726 341 7 -a 726 514 4 -a 726 821 7 -a 726 620 3 -a 726 491 5 -a 726 313 9 -a 726 987 3 -a 726 689 4 -a 726 904 1 -a 726 689 8 -a 726 359 9 -a 727 56 6 -a 727 131 6 -a 727 696 2 -a 727 421 5 -a 727 386 6 -a 727 314 10 -a 727 583 10 -a 727 318 7 -a 727 780 7 -a 727 81 9 -a 727 892 2 -a 727 15 9 -a 727 706 9 -a 727 76 7 -a 727 756 7 -a 727 861 4 -a 727 585 6 -a 727 153 2 -a 727 957 6 -a 727 701 7 -a 727 493 10 -a 727 446 6 -a 727 497 8 -a 727 89 2 -a 727 936 2 -a 727 809 1 -a 727 51 1 -a 727 601 4 -a 727 689 2 -a 727 739 8 -a 727 959 2 -a 727 744 10 -a 727 869 9 -a 727 631 2 -a 727 140 1 -a 727 231 6 -a 727 944 8 -a 727 722 1 -a 727 548 9 -a 727 699 7 -a 727 802 9 -a 727 415 7 -a 727 713 2 -a 727 483 5 -a 727 490 3 -a 727 445 6 -a 727 319 4 -a 727 51 4 -a 727 597 9 -a 727 251 7 -a 727 751 10 -a 727 66 5 -a 727 697 9 -a 727 223 3 -a 727 154 8 -a 727 608 4 -a 727 7 5 -a 727 204 5 -a 727 184 3 -a 727 695 1 -a 727 943 2 -a 727 119 9 -a 727 414 9 -a 727 787 1 -a 727 749 6 -a 727 553 4 -a 727 668 2 -a 727 250 4 -a 727 541 7 -a 727 342 5 -a 727 27 4 -a 727 955 6 -a 727 30 8 -a 727 509 4 -a 727 421 8 -a 727 474 5 -a 727 827 3 -a 727 471 7 -a 727 47 6 -a 727 54 3 -a 727 197 2 -a 727 112 6 -a 727 750 4 -a 727 419 5 -a 727 265 3 -a 727 333 5 -a 727 425 1 -a 727 468 8 -a 727 517 4 -a 727 96 5 -a 727 386 1 -a 727 635 5 -a 727 509 9 -a 727 149 3 -a 727 359 7 -a 727 38 3 -a 727 141 5 -a 727 2 7 -a 727 287 10 -a 727 681 1 -a 727 343 1 -a 727 314 3 -a 727 612 3 -a 727 372 1 -a 727 822 10 -a 727 8 8 -a 727 846 4 -a 727 625 8 -a 727 478 3 -a 727 892 3 -a 727 678 5 -a 727 674 1 -a 727 403 5 -a 727 68 3 -a 727 243 1 -a 728 735 7 -a 728 492 8 -a 728 710 7 -a 728 227 5 -a 728 587 1 -a 728 72 7 -a 728 861 5 -a 728 72 9 -a 728 220 1 -a 728 195 1 -a 728 109 9 -a 728 360 10 -a 728 196 9 -a 728 395 1 -a 728 17 9 -a 728 538 8 -a 728 708 3 -a 728 628 4 -a 728 910 4 -a 728 506 6 -a 728 635 5 -a 728 731 7 -a 728 106 9 -a 728 88 6 -a 728 598 10 -a 728 783 5 -a 728 761 6 -a 728 576 5 -a 728 161 6 -a 728 828 2 -a 728 818 5 -a 728 895 2 -a 728 295 6 -a 728 503 9 -a 728 98 5 -a 728 882 5 -a 728 574 7 -a 728 958 5 -a 728 953 7 -a 728 793 4 -a 728 129 4 -a 728 37 7 -a 728 129 1 -a 728 324 10 -a 728 431 10 -a 728 145 7 -a 728 862 4 -a 728 115 10 -a 728 772 1 -a 728 747 5 -a 728 620 5 -a 728 382 1 -a 728 453 10 -a 728 725 5 -a 728 469 3 -a 728 26 3 -a 728 483 6 -a 728 205 1 -a 728 601 9 -a 728 643 3 -a 728 8 1 -a 728 394 8 -a 728 513 1 -a 728 302 8 -a 728 896 4 -a 728 610 6 -a 728 159 2 -a 728 446 6 -a 728 544 7 -a 728 87 2 -a 728 214 4 -a 728 672 7 -a 728 123 4 -a 728 342 5 -a 728 995 3 -a 728 554 9 -a 728 486 3 -a 728 832 6 -a 728 668 7 -a 728 233 5 -a 728 554 3 -a 728 263 1 -a 728 614 3 -a 728 987 5 -a 728 58 3 -a 728 7 3 -a 728 445 1 -a 728 262 8 -a 728 607 3 -a 728 63 3 -a 728 269 7 -a 728 1000 6 -a 728 575 1 -a 728 571 4 -a 728 872 10 -a 728 161 5 -a 728 729 6 -a 728 293 2 -a 728 704 7 -a 728 816 8 -a 728 506 4 -a 728 351 8 -a 728 938 1 -a 728 848 3 -a 728 321 6 -a 728 467 2 -a 728 309 8 -a 728 129 3 -a 728 110 2 -a 729 542 4 -a 729 682 5 -a 729 372 8 -a 729 131 1 -a 729 664 10 -a 729 334 8 -a 729 189 4 -a 729 670 3 -a 729 778 9 -a 729 450 4 -a 729 253 3 -a 729 840 4 -a 729 719 8 -a 729 228 6 -a 729 391 5 -a 729 265 8 -a 729 75 3 -a 729 551 5 -a 729 993 8 -a 729 367 10 -a 729 230 1 -a 729 784 8 -a 729 873 7 -a 729 580 3 -a 729 698 10 -a 729 696 8 -a 729 900 6 -a 729 140 3 -a 729 4 7 -a 729 250 10 -a 729 521 2 -a 729 686 9 -a 729 621 8 -a 729 652 7 -a 729 325 8 -a 729 955 3 -a 729 840 9 -a 729 994 8 -a 729 708 2 -a 729 265 6 -a 729 222 1 -a 729 524 3 -a 729 983 6 -a 729 450 10 -a 729 914 2 -a 729 223 7 -a 729 524 10 -a 729 440 2 -a 729 192 8 -a 729 891 4 -a 729 669 3 -a 729 975 10 -a 729 739 10 -a 729 224 3 -a 729 648 4 -a 729 410 1 -a 729 99 2 -a 729 788 3 -a 729 389 2 -a 729 103 4 -a 729 13 1 -a 729 910 4 -a 729 788 6 -a 729 633 1 -a 729 537 8 -a 729 88 3 -a 729 563 3 -a 729 352 4 -a 729 57 10 -a 729 247 3 -a 729 616 6 -a 729 279 3 -a 729 770 1 -a 729 575 4 -a 729 728 1 -a 729 659 10 -a 729 797 4 -a 729 227 9 -a 729 74 8 -a 729 988 5 -a 729 93 5 -a 729 742 6 -a 729 939 7 -a 729 831 4 -a 729 965 2 -a 729 562 3 -a 729 216 5 -a 729 39 3 -a 729 325 1 -a 729 605 4 -a 729 141 7 -a 729 337 9 -a 729 490 5 -a 729 928 9 -a 729 970 6 -a 729 2 4 -a 730 508 3 -a 730 353 3 -a 730 48 3 -a 730 754 1 -a 730 968 7 -a 730 326 7 -a 730 499 10 -a 730 518 9 -a 730 29 6 -a 730 133 10 -a 730 291 1 -a 730 255 9 -a 730 206 8 -a 730 254 1 -a 730 348 2 -a 730 947 2 -a 730 168 10 -a 730 154 6 -a 730 887 2 -a 730 730 1 -a 730 370 9 -a 730 926 1 -a 730 30 7 -a 730 974 2 -a 730 42 4 -a 730 367 5 -a 730 439 3 -a 730 970 8 -a 730 312 10 -a 730 440 8 -a 730 960 2 -a 730 819 3 -a 730 792 9 -a 730 549 5 -a 730 735 7 -a 730 308 1 -a 730 23 4 -a 730 229 1 -a 730 336 8 -a 730 156 3 -a 730 519 6 -a 730 591 5 -a 730 361 7 -a 730 772 9 -a 730 938 7 -a 730 284 4 -a 730 940 7 -a 730 67 6 -a 730 146 9 -a 730 645 6 -a 730 436 2 -a 730 47 4 -a 730 674 10 -a 730 385 6 -a 730 89 7 -a 730 16 1 -a 730 823 10 -a 730 34 9 -a 730 327 1 -a 730 238 8 -a 730 993 2 -a 730 122 2 -a 730 5 8 -a 730 976 4 -a 730 670 1 -a 730 740 5 -a 730 259 5 -a 730 692 1 -a 730 968 5 -a 730 595 7 -a 730 847 8 -a 730 462 9 -a 730 161 7 -a 730 184 5 -a 730 209 4 -a 730 74 6 -a 730 467 5 -a 730 124 2 -a 730 140 1 -a 730 612 3 -a 730 768 5 -a 730 576 9 -a 730 659 2 -a 730 418 1 -a 730 960 9 -a 730 747 2 -a 730 433 5 -a 730 759 7 -a 730 780 2 -a 730 760 3 -a 730 996 10 -a 730 748 8 -a 730 881 7 -a 730 699 2 -a 730 526 8 -a 730 716 3 -a 730 958 3 -a 730 193 8 -a 730 659 5 -a 730 528 2 -a 730 16 9 -a 730 96 5 -a 730 688 6 -a 730 199 6 -a 730 304 8 -a 730 761 10 -a 731 665 7 -a 731 428 5 -a 731 900 5 -a 731 252 1 -a 731 171 6 -a 731 451 7 -a 731 910 3 -a 731 588 1 -a 731 387 5 -a 731 632 6 -a 731 121 3 -a 731 387 7 -a 731 756 8 -a 731 92 6 -a 731 111 3 -a 731 612 8 -a 731 68 4 -a 731 809 4 -a 731 113 9 -a 731 783 3 -a 731 742 6 -a 731 305 1 -a 731 417 1 -a 731 245 5 -a 731 320 1 -a 731 512 7 -a 731 932 9 -a 731 518 10 -a 731 816 4 -a 731 668 5 -a 731 158 9 -a 731 219 8 -a 731 544 4 -a 731 410 8 -a 731 389 8 -a 731 994 5 -a 731 295 5 -a 731 977 6 -a 731 356 5 -a 731 927 10 -a 731 973 5 -a 731 476 2 -a 731 289 5 -a 731 704 10 -a 731 568 9 -a 731 399 7 -a 731 291 6 -a 731 635 10 -a 731 184 6 -a 731 403 10 -a 731 394 2 -a 731 925 5 -a 731 707 5 -a 731 810 9 -a 731 146 4 -a 731 3 7 -a 731 298 3 -a 731 53 9 -a 731 520 2 -a 731 89 8 -a 731 721 2 -a 731 678 1 -a 731 307 6 -a 731 240 7 -a 731 63 4 -a 731 695 7 -a 731 209 6 -a 731 357 5 -a 731 647 6 -a 731 565 8 -a 731 259 2 -a 731 595 3 -a 731 16 4 -a 731 548 7 -a 731 274 8 -a 731 583 6 -a 731 946 5 -a 731 564 8 -a 731 194 4 -a 731 105 9 -a 731 966 6 -a 731 587 6 -a 731 6 9 -a 731 649 4 -a 731 372 9 -a 731 151 7 -a 731 651 6 -a 731 669 6 -a 731 203 8 -a 731 146 9 -a 731 757 9 -a 732 923 1 -a 732 823 3 -a 732 39 10 -a 732 138 10 -a 732 885 6 -a 732 734 9 -a 732 347 8 -a 732 218 4 -a 732 356 10 -a 732 911 5 -a 732 476 9 -a 732 951 7 -a 732 926 6 -a 732 200 2 -a 732 485 2 -a 732 945 9 -a 732 764 4 -a 732 678 10 -a 732 25 7 -a 732 705 4 -a 732 240 8 -a 732 30 10 -a 732 329 1 -a 732 611 3 -a 732 180 6 -a 732 979 10 -a 732 256 4 -a 732 383 3 -a 732 101 6 -a 732 281 8 -a 732 923 7 -a 732 27 4 -a 732 419 8 -a 732 784 5 -a 732 760 4 -a 732 765 9 -a 732 91 5 -a 732 651 1 -a 732 452 4 -a 732 17 8 -a 732 552 7 -a 732 451 6 -a 732 217 1 -a 732 12 6 -a 732 371 6 -a 732 980 3 -a 732 689 2 -a 732 395 1 -a 732 660 6 -a 732 928 1 -a 732 425 2 -a 732 989 3 -a 732 515 10 -a 732 604 7 -a 732 943 10 -a 732 770 2 -a 732 986 5 -a 732 19 1 -a 732 757 8 -a 732 243 10 -a 732 942 1 -a 732 783 4 -a 732 661 10 -a 732 701 1 -a 732 518 10 -a 732 401 8 -a 732 677 10 -a 732 609 9 -a 732 27 8 -a 732 104 3 -a 732 625 2 -a 732 578 4 -a 732 554 1 -a 732 841 5 -a 732 590 7 -a 732 924 9 -a 732 796 7 -a 732 254 7 -a 732 295 3 -a 732 432 8 -a 732 158 4 -a 732 719 1 -a 732 396 2 -a 732 672 10 -a 732 298 1 -a 732 314 10 -a 732 417 4 -a 732 260 6 -a 732 333 5 -a 732 149 3 -a 732 502 6 -a 732 250 3 -a 732 932 6 -a 732 138 4 -a 732 950 5 -a 732 425 3 -a 732 538 9 -a 732 602 10 -a 732 9 3 -a 732 564 5 -a 732 705 7 -a 732 634 8 -a 732 117 5 -a 732 235 2 -a 732 450 5 -a 732 706 7 -a 732 134 6 -a 733 222 8 -a 733 960 6 -a 733 428 6 -a 733 653 8 -a 733 93 1 -a 733 122 1 -a 733 24 6 -a 733 764 4 -a 733 420 1 -a 733 337 7 -a 733 156 9 -a 733 679 6 -a 733 669 3 -a 733 304 8 -a 733 156 4 -a 733 918 9 -a 733 211 1 -a 733 293 10 -a 733 843 6 -a 733 636 9 -a 733 830 10 -a 733 420 7 -a 733 644 1 -a 733 369 4 -a 733 101 6 -a 733 253 6 -a 733 485 9 -a 733 335 6 -a 733 703 10 -a 733 167 2 -a 733 468 10 -a 733 924 10 -a 733 102 2 -a 733 896 1 -a 733 552 4 -a 733 194 8 -a 733 575 10 -a 733 957 2 -a 733 412 1 -a 733 911 4 -a 733 88 1 -a 733 66 6 -a 733 556 10 -a 733 391 9 -a 733 221 10 -a 733 449 7 -a 733 602 5 -a 733 513 2 -a 733 268 7 -a 733 213 8 -a 733 318 10 -a 733 687 8 -a 733 856 9 -a 733 686 8 -a 733 787 1 -a 733 85 10 -a 733 147 2 -a 733 97 10 -a 733 787 2 -a 733 313 10 -a 733 565 10 -a 733 686 2 -a 733 414 5 -a 733 436 3 -a 733 213 1 -a 733 607 10 -a 733 428 7 -a 733 787 4 -a 733 539 1 -a 733 840 9 -a 733 673 7 -a 733 626 5 -a 733 905 9 -a 733 204 7 -a 733 102 3 -a 733 653 8 -a 733 593 8 -a 733 614 9 -a 733 920 7 -a 733 805 9 -a 733 932 3 -a 733 582 10 -a 733 637 7 -a 733 593 7 -a 733 345 10 -a 733 721 7 -a 733 739 7 -a 733 441 7 -a 733 483 5 -a 733 27 8 -a 733 144 3 -a 733 440 9 -a 733 416 2 -a 733 356 7 -a 733 22 1 -a 733 844 8 -a 733 118 5 -a 733 560 3 -a 733 659 2 -a 733 790 7 -a 733 161 3 -a 733 539 9 -a 733 994 2 -a 733 153 4 -a 733 640 1 -a 733 622 10 -a 733 745 9 -a 733 230 1 -a 733 517 1 -a 733 526 5 -a 733 137 8 -a 733 74 5 -a 733 138 9 -a 733 729 5 -a 734 418 5 -a 734 858 9 -a 734 444 7 -a 734 859 5 -a 734 316 9 -a 734 470 4 -a 734 839 7 -a 734 459 3 -a 734 910 9 -a 734 231 6 -a 734 814 9 -a 734 931 4 -a 734 50 4 -a 734 931 2 -a 734 467 4 -a 734 708 4 -a 734 696 1 -a 734 627 8 -a 734 222 1 -a 734 665 1 -a 734 779 4 -a 734 862 9 -a 734 262 3 -a 734 500 1 -a 734 67 4 -a 734 778 5 -a 734 1 10 -a 734 203 8 -a 734 852 5 -a 734 138 9 -a 734 931 8 -a 734 245 8 -a 734 995 10 -a 734 350 10 -a 734 79 5 -a 734 286 3 -a 734 820 6 -a 734 918 4 -a 734 744 3 -a 734 705 6 -a 734 124 7 -a 734 533 2 -a 734 611 1 -a 734 173 3 -a 734 439 7 -a 734 53 10 -a 734 880 1 -a 734 110 4 -a 734 680 9 -a 734 77 5 -a 734 775 1 -a 734 434 10 -a 734 938 3 -a 734 12 10 -a 734 933 4 -a 734 790 7 -a 734 933 9 -a 734 182 10 -a 734 617 1 -a 734 46 1 -a 734 89 6 -a 734 861 4 -a 734 16 4 -a 734 438 10 -a 734 940 9 -a 734 301 10 -a 734 233 3 -a 734 833 9 -a 734 20 3 -a 734 937 2 -a 734 956 5 -a 734 552 8 -a 734 524 1 -a 734 104 4 -a 734 990 9 -a 734 576 5 -a 734 983 1 -a 734 76 7 -a 734 231 5 -a 734 35 2 -a 734 850 5 -a 734 665 7 -a 734 973 8 -a 734 861 10 -a 734 573 2 -a 734 952 2 -a 734 626 8 -a 734 482 2 -a 734 110 6 -a 734 218 1 -a 734 527 7 -a 734 198 7 -a 734 55 6 -a 734 543 10 -a 734 635 4 -a 734 994 10 -a 735 843 10 -a 735 868 10 -a 735 802 10 -a 735 863 2 -a 735 780 7 -a 735 733 2 -a 735 390 10 -a 735 279 2 -a 735 836 3 -a 735 356 5 -a 735 855 4 -a 735 794 2 -a 735 431 3 -a 735 61 5 -a 735 828 10 -a 735 256 3 -a 735 725 4 -a 735 776 9 -a 735 92 6 -a 735 274 9 -a 735 704 2 -a 735 718 10 -a 735 755 2 -a 735 813 3 -a 735 935 5 -a 735 257 1 -a 735 989 10 -a 735 799 10 -a 735 620 10 -a 735 958 4 -a 735 618 8 -a 735 463 9 -a 735 735 9 -a 735 456 3 -a 735 219 9 -a 735 443 4 -a 735 845 6 -a 735 497 3 -a 735 254 8 -a 735 176 9 -a 735 327 2 -a 735 23 2 -a 735 606 4 -a 735 388 1 -a 735 851 9 -a 735 861 9 -a 735 88 2 -a 735 602 8 -a 735 953 3 -a 735 361 4 -a 735 281 5 -a 735 646 2 -a 735 91 4 -a 735 69 4 -a 735 556 3 -a 735 348 9 -a 735 54 7 -a 735 521 10 -a 735 122 7 -a 735 674 9 -a 735 454 6 -a 735 739 10 -a 735 112 3 -a 735 165 10 -a 735 170 4 -a 735 330 9 -a 735 607 6 -a 735 827 2 -a 735 861 2 -a 735 166 7 -a 735 129 10 -a 735 883 3 -a 735 772 7 -a 735 516 6 -a 735 709 1 -a 735 608 8 -a 735 604 9 -a 736 287 5 -a 736 536 1 -a 736 964 3 -a 736 567 9 -a 736 157 4 -a 736 31 2 -a 736 636 3 -a 736 713 3 -a 736 378 5 -a 736 689 8 -a 736 209 4 -a 736 499 5 -a 736 338 9 -a 736 662 5 -a 736 214 2 -a 736 450 2 -a 736 826 1 -a 736 383 5 -a 736 779 10 -a 736 409 10 -a 736 373 10 -a 736 581 1 -a 736 245 3 -a 736 539 1 -a 736 710 1 -a 736 103 2 -a 736 286 9 -a 736 201 5 -a 736 812 3 -a 736 893 7 -a 736 804 7 -a 736 74 6 -a 736 405 7 -a 736 744 10 -a 736 640 7 -a 736 561 6 -a 736 774 8 -a 736 251 4 -a 736 249 5 -a 736 127 8 -a 736 940 1 -a 736 457 8 -a 736 625 5 -a 736 253 1 -a 736 95 10 -a 736 838 4 -a 736 702 1 -a 736 920 5 -a 736 197 9 -a 736 457 7 -a 736 304 4 -a 736 569 5 -a 736 13 9 -a 736 548 2 -a 736 83 6 -a 736 722 1 -a 736 651 9 -a 736 368 5 -a 736 923 8 -a 736 438 5 -a 736 237 3 -a 736 702 5 -a 736 511 5 -a 736 641 6 -a 736 421 3 -a 736 126 4 -a 736 177 10 -a 736 170 1 -a 736 377 9 -a 736 426 7 -a 736 296 9 -a 736 292 3 -a 736 882 1 -a 736 921 8 -a 736 544 2 -a 736 976 10 -a 736 734 3 -a 736 222 10 -a 736 872 7 -a 736 930 6 -a 736 678 4 -a 736 151 5 -a 736 475 1 -a 736 690 9 -a 736 699 3 -a 736 557 6 -a 736 388 5 -a 736 325 2 -a 736 925 4 -a 736 286 7 -a 736 762 7 -a 736 137 6 -a 736 987 8 -a 736 248 2 -a 736 777 7 -a 736 384 2 -a 736 373 9 -a 736 953 8 -a 736 553 1 -a 736 749 1 -a 736 354 6 -a 736 849 4 -a 736 16 6 -a 736 212 7 -a 736 745 8 -a 736 560 4 -a 736 163 4 -a 736 454 6 -a 736 781 8 -a 736 10 6 -a 736 360 9 -a 736 434 4 -a 736 161 3 -a 736 834 3 -a 736 99 10 -a 736 859 9 -a 737 366 7 -a 737 486 5 -a 737 159 2 -a 737 266 5 -a 737 771 6 -a 737 920 9 -a 737 402 10 -a 737 734 6 -a 737 143 3 -a 737 154 9 -a 737 93 4 -a 737 515 8 -a 737 83 9 -a 737 645 7 -a 737 240 9 -a 737 436 6 -a 737 469 1 -a 737 255 5 -a 737 647 5 -a 737 189 1 -a 737 814 5 -a 737 810 10 -a 737 643 10 -a 737 570 2 -a 737 819 5 -a 737 979 4 -a 737 811 7 -a 737 78 4 -a 737 813 6 -a 737 152 7 -a 737 563 10 -a 737 971 6 -a 737 418 8 -a 737 310 4 -a 737 866 3 -a 737 819 8 -a 737 19 4 -a 737 973 7 -a 737 111 9 -a 737 499 4 -a 737 31 2 -a 737 755 3 -a 737 738 5 -a 737 466 2 -a 737 200 3 -a 737 992 10 -a 737 89 3 -a 737 388 3 -a 737 782 5 -a 737 898 7 -a 737 6 5 -a 737 327 3 -a 737 692 3 -a 737 306 1 -a 737 647 7 -a 737 793 4 -a 737 383 9 -a 737 435 7 -a 737 945 9 -a 737 945 1 -a 737 382 6 -a 737 338 3 -a 737 230 10 -a 737 223 4 -a 737 132 4 -a 737 248 1 -a 737 207 9 -a 737 80 7 -a 737 358 3 -a 737 705 7 -a 737 110 2 -a 737 89 8 -a 737 418 3 -a 737 576 4 -a 737 288 3 -a 737 385 2 -a 737 664 10 -a 737 675 7 -a 737 142 3 -a 737 537 2 -a 737 681 9 -a 737 469 5 -a 737 204 5 -a 737 663 1 -a 737 774 5 -a 737 850 7 -a 737 432 7 -a 737 132 10 -a 737 261 3 -a 737 352 8 -a 737 52 1 -a 737 642 7 -a 737 689 6 -a 737 282 10 -a 737 864 3 -a 737 820 10 -a 737 529 9 -a 737 46 6 -a 737 900 9 -a 738 887 7 -a 738 750 8 -a 738 975 10 -a 738 143 5 -a 738 560 3 -a 738 238 5 -a 738 528 3 -a 738 199 9 -a 738 912 9 -a 738 669 6 -a 738 735 3 -a 738 568 7 -a 738 113 8 -a 738 939 8 -a 738 207 6 -a 738 886 5 -a 738 764 9 -a 738 638 4 -a 738 989 3 -a 738 45 6 -a 738 641 5 -a 738 653 2 -a 738 326 10 -a 738 481 3 -a 738 448 4 -a 738 854 5 -a 738 526 3 -a 738 323 8 -a 738 716 4 -a 738 252 2 -a 738 308 5 -a 738 666 1 -a 738 394 7 -a 738 867 6 -a 738 903 10 -a 738 921 9 -a 738 42 1 -a 738 791 10 -a 738 566 3 -a 738 776 7 -a 738 334 3 -a 738 678 5 -a 738 690 1 -a 738 540 1 -a 738 540 10 -a 738 430 5 -a 738 153 10 -a 738 532 6 -a 738 429 1 -a 738 117 9 -a 738 576 1 -a 738 46 6 -a 738 769 2 -a 738 901 4 -a 738 526 6 -a 738 193 9 -a 738 731 3 -a 738 27 7 -a 738 515 10 -a 738 422 1 -a 738 278 9 -a 738 822 4 -a 738 64 3 -a 738 672 3 -a 738 665 6 -a 738 966 8 -a 738 568 3 -a 738 706 8 -a 738 732 7 -a 738 109 4 -a 738 457 8 -a 738 42 3 -a 738 787 1 -a 738 123 5 -a 738 581 6 -a 738 302 8 -a 738 552 5 -a 738 734 8 -a 738 833 2 -a 738 980 5 -a 738 850 2 -a 738 385 2 -a 738 1 5 -a 738 595 3 -a 738 261 1 -a 738 526 2 -a 738 787 3 -a 738 991 7 -a 738 553 5 -a 738 277 7 -a 738 389 2 -a 738 830 4 -a 738 75 9 -a 738 452 8 -a 738 477 5 -a 738 739 4 -a 738 393 5 -a 738 21 9 -a 738 420 4 -a 738 101 10 -a 739 129 6 -a 739 876 7 -a 739 142 1 -a 739 915 10 -a 739 998 9 -a 739 722 5 -a 739 192 9 -a 739 525 7 -a 739 431 4 -a 739 1 5 -a 739 481 4 -a 739 257 1 -a 739 385 9 -a 739 481 7 -a 739 851 1 -a 739 645 4 -a 739 613 3 -a 739 612 8 -a 739 535 10 -a 739 889 2 -a 739 1000 10 -a 739 340 6 -a 739 963 10 -a 739 427 8 -a 739 817 10 -a 739 677 2 -a 739 819 8 -a 739 837 4 -a 739 72 5 -a 739 919 7 -a 739 965 7 -a 739 948 3 -a 739 36 8 -a 739 856 9 -a 739 921 4 -a 739 758 3 -a 739 23 4 -a 739 422 2 -a 739 164 5 -a 739 23 9 -a 739 902 8 -a 739 420 5 -a 739 407 1 -a 739 358 1 -a 739 246 10 -a 739 28 10 -a 739 340 8 -a 739 858 3 -a 739 639 2 -a 739 874 10 -a 739 723 10 -a 739 614 6 -a 739 190 4 -a 739 661 10 -a 739 16 3 -a 739 314 9 -a 739 834 8 -a 739 818 7 -a 739 385 7 -a 739 729 10 -a 739 758 10 -a 739 308 8 -a 739 764 8 -a 739 589 1 -a 739 205 5 -a 739 497 6 -a 739 612 7 -a 739 626 1 -a 739 661 5 -a 739 634 3 -a 739 503 9 -a 739 56 8 -a 739 17 3 -a 739 860 6 -a 739 302 6 -a 739 44 3 -a 739 176 4 -a 739 135 5 -a 739 682 10 -a 739 25 6 -a 739 857 3 -a 739 271 10 -a 739 214 8 -a 739 494 8 -a 739 286 4 -a 739 195 2 -a 739 807 7 -a 739 95 10 -a 739 167 1 -a 739 823 7 -a 739 746 9 -a 740 475 10 -a 740 563 1 -a 740 310 5 -a 740 679 10 -a 740 35 6 -a 740 921 3 -a 740 280 5 -a 740 695 5 -a 740 531 5 -a 740 782 2 -a 740 751 4 -a 740 547 3 -a 740 617 1 -a 740 28 5 -a 740 590 4 -a 740 792 5 -a 740 162 3 -a 740 247 6 -a 740 817 4 -a 740 517 9 -a 740 6 3 -a 740 488 9 -a 740 802 6 -a 740 201 9 -a 740 270 1 -a 740 896 3 -a 740 188 6 -a 740 436 1 -a 740 695 9 -a 740 933 10 -a 740 910 4 -a 740 233 6 -a 740 219 4 -a 740 564 5 -a 740 267 3 -a 740 115 3 -a 740 843 8 -a 740 962 2 -a 740 645 2 -a 740 600 5 -a 740 688 8 -a 740 167 10 -a 740 193 1 -a 740 715 6 -a 740 756 8 -a 740 984 1 -a 740 876 7 -a 740 776 1 -a 740 870 4 -a 740 494 6 -a 740 782 4 -a 740 333 9 -a 740 271 10 -a 740 982 2 -a 740 602 4 -a 740 143 4 -a 740 145 6 -a 740 14 10 -a 740 837 10 -a 740 54 2 -a 740 923 5 -a 740 45 3 -a 740 272 2 -a 740 463 7 -a 740 311 7 -a 740 386 10 -a 740 281 4 -a 740 248 7 -a 740 7 4 -a 740 881 5 -a 740 935 8 -a 740 173 3 -a 740 49 9 -a 740 625 4 -a 740 929 8 -a 740 8 5 -a 740 477 2 -a 740 906 10 -a 740 784 3 -a 740 322 4 -a 740 376 10 -a 740 541 3 -a 740 655 6 -a 740 646 10 -a 740 498 5 -a 740 232 7 -a 740 788 1 -a 740 642 6 -a 740 245 8 -a 740 600 9 -a 740 695 8 -a 740 144 1 -a 740 644 2 -a 740 966 3 -a 740 606 6 -a 740 955 8 -a 740 328 8 -a 740 886 2 -a 740 178 10 -a 740 334 5 -a 740 742 1 -a 740 89 1 -a 740 506 5 -a 740 790 1 -a 740 713 4 -a 740 410 6 -a 740 798 8 -a 740 165 5 -a 740 292 4 -a 740 557 7 -a 740 487 5 -a 740 667 5 -a 740 73 3 -a 740 117 7 -a 740 288 4 -a 740 570 6 -a 740 348 10 -a 740 52 3 -a 740 187 4 -a 741 593 4 -a 741 651 4 -a 741 882 9 -a 741 736 4 -a 741 271 2 -a 741 823 5 -a 741 317 2 -a 741 201 5 -a 741 126 3 -a 741 178 9 -a 741 378 9 -a 741 459 7 -a 741 920 10 -a 741 466 9 -a 741 965 9 -a 741 685 5 -a 741 155 5 -a 741 350 8 -a 741 458 9 -a 741 319 3 -a 741 641 5 -a 741 805 1 -a 741 283 7 -a 741 62 2 -a 741 921 8 -a 741 571 7 -a 741 631 10 -a 741 245 6 -a 741 622 10 -a 741 818 3 -a 741 837 3 -a 741 248 4 -a 741 675 2 -a 741 548 6 -a 741 518 6 -a 741 473 3 -a 741 864 10 -a 741 718 2 -a 741 599 8 -a 741 17 2 -a 741 72 4 -a 741 33 2 -a 741 936 10 -a 741 537 1 -a 741 997 4 -a 741 597 6 -a 741 691 10 -a 741 323 7 -a 741 30 3 -a 741 963 4 -a 741 20 3 -a 741 790 5 -a 741 222 7 -a 741 81 6 -a 741 687 4 -a 741 792 5 -a 741 712 2 -a 741 931 9 -a 741 389 7 -a 741 505 1 -a 741 743 3 -a 741 636 8 -a 741 155 8 -a 741 266 4 -a 741 130 4 -a 741 627 6 -a 741 105 5 -a 741 847 1 -a 741 201 3 -a 741 121 5 -a 741 918 7 -a 741 234 1 -a 741 33 2 -a 741 431 7 -a 741 206 1 -a 741 629 2 -a 741 97 10 -a 741 528 3 -a 741 658 7 -a 741 82 2 -a 741 467 4 -a 741 677 6 -a 741 872 3 -a 741 688 5 -a 741 758 2 -a 741 534 8 -a 741 455 7 -a 741 445 2 -a 741 440 8 -a 741 843 9 -a 741 949 6 -a 741 158 4 -a 741 454 6 -a 741 79 5 -a 741 423 6 -a 741 583 5 -a 741 705 8 -a 741 527 6 -a 741 406 5 -a 741 906 10 -a 741 647 1 -a 741 299 8 -a 741 115 3 -a 741 679 1 -a 741 729 2 -a 741 320 10 -a 741 283 7 -a 741 826 8 -a 741 848 1 -a 741 941 2 -a 742 907 6 -a 742 290 6 -a 742 593 2 -a 742 754 6 -a 742 977 3 -a 742 326 10 -a 742 263 1 -a 742 407 1 -a 742 770 10 -a 742 702 4 -a 742 225 4 -a 742 694 8 -a 742 859 4 -a 742 678 1 -a 742 772 6 -a 742 257 5 -a 742 237 10 -a 742 453 5 -a 742 783 10 -a 742 642 5 -a 742 334 9 -a 742 406 10 -a 742 940 5 -a 742 448 1 -a 742 60 10 -a 742 645 8 -a 742 767 1 -a 742 343 5 -a 742 446 3 -a 742 590 1 -a 742 259 5 -a 742 328 8 -a 742 879 5 -a 742 851 4 -a 742 58 2 -a 742 831 10 -a 742 153 6 -a 742 320 7 -a 742 213 3 -a 742 922 6 -a 742 437 7 -a 742 592 10 -a 742 856 5 -a 742 91 10 -a 742 339 3 -a 742 89 4 -a 742 327 3 -a 742 791 1 -a 742 871 4 -a 742 968 8 -a 742 100 6 -a 742 252 9 -a 742 883 9 -a 742 547 5 -a 742 312 7 -a 742 503 9 -a 742 290 9 -a 742 654 4 -a 742 948 2 -a 742 879 6 -a 742 912 5 -a 742 252 7 -a 742 734 2 -a 742 738 1 -a 742 309 2 -a 742 540 8 -a 742 890 6 -a 742 628 3 -a 742 753 5 -a 742 788 4 -a 742 625 1 -a 742 165 5 -a 742 355 1 -a 742 457 8 -a 742 255 5 -a 742 693 3 -a 742 545 10 -a 742 581 9 -a 742 460 2 -a 742 391 4 -a 742 524 7 -a 742 559 1 -a 742 643 1 -a 742 383 3 -a 742 82 1 -a 742 954 8 -a 742 885 4 -a 742 371 10 -a 742 583 2 -a 742 809 7 -a 742 225 4 -a 742 470 8 -a 742 36 9 -a 742 958 8 -a 742 183 1 -a 742 344 10 -a 742 474 10 -a 742 49 6 -a 743 971 4 -a 743 202 6 -a 743 836 8 -a 743 572 6 -a 743 366 4 -a 743 166 9 -a 743 4 9 -a 743 621 6 -a 743 858 8 -a 743 548 6 -a 743 177 4 -a 743 293 4 -a 743 938 2 -a 743 701 3 -a 743 852 7 -a 743 556 10 -a 743 59 1 -a 743 933 3 -a 743 485 6 -a 743 943 10 -a 743 279 3 -a 743 43 4 -a 743 727 10 -a 743 503 9 -a 743 512 9 -a 743 762 8 -a 743 437 1 -a 743 695 2 -a 743 81 4 -a 743 910 10 -a 743 743 3 -a 743 28 6 -a 743 87 7 -a 743 554 1 -a 743 599 9 -a 743 452 1 -a 743 719 5 -a 743 602 7 -a 743 48 4 -a 743 552 7 -a 743 125 9 -a 743 225 6 -a 743 845 4 -a 743 38 8 -a 743 925 6 -a 743 672 3 -a 743 594 6 -a 743 983 6 -a 743 580 8 -a 743 54 9 -a 743 901 10 -a 743 858 10 -a 743 97 9 -a 743 604 1 -a 743 336 5 -a 743 608 6 -a 743 341 8 -a 743 772 5 -a 743 278 9 -a 743 422 2 -a 743 657 9 -a 743 449 4 -a 743 743 4 -a 743 549 3 -a 743 23 7 -a 743 171 10 -a 743 243 8 -a 743 624 6 -a 743 218 1 -a 743 795 1 -a 743 748 10 -a 743 442 3 -a 743 615 3 -a 743 785 5 -a 743 342 8 -a 743 262 1 -a 743 354 9 -a 743 300 10 -a 743 841 8 -a 743 408 6 -a 743 177 1 -a 743 674 2 -a 743 504 8 -a 743 780 4 -a 743 87 6 -a 743 96 10 -a 743 757 2 -a 743 365 2 -a 743 517 8 -a 743 389 10 -a 743 360 6 -a 743 965 8 -a 743 108 4 -a 743 909 9 -a 743 987 6 -a 743 278 1 -a 743 127 6 -a 743 586 7 -a 743 495 9 -a 743 921 6 -a 743 309 8 -a 743 937 1 -a 743 511 10 -a 744 70 3 -a 744 254 2 -a 744 772 9 -a 744 423 1 -a 744 554 10 -a 744 588 9 -a 744 830 1 -a 744 730 6 -a 744 237 1 -a 744 309 9 -a 744 485 9 -a 744 222 7 -a 744 396 9 -a 744 580 7 -a 744 978 2 -a 744 760 7 -a 744 73 7 -a 744 342 3 -a 744 95 1 -a 744 13 6 -a 744 449 10 -a 744 1000 6 -a 744 726 6 -a 744 106 9 -a 744 561 9 -a 744 197 5 -a 744 2 3 -a 744 870 7 -a 744 109 2 -a 744 513 4 -a 744 939 7 -a 744 362 2 -a 744 260 4 -a 744 337 6 -a 744 915 9 -a 744 848 3 -a 744 143 10 -a 744 620 8 -a 744 60 9 -a 744 451 3 -a 744 80 5 -a 744 281 8 -a 744 846 6 -a 744 660 5 -a 744 234 2 -a 744 581 4 -a 744 732 7 -a 744 576 10 -a 744 676 9 -a 744 744 2 -a 744 654 9 -a 744 719 8 -a 744 726 2 -a 744 759 6 -a 744 256 3 -a 744 922 9 -a 744 761 8 -a 744 101 7 -a 744 6 1 -a 744 249 1 -a 744 15 9 -a 744 367 3 -a 744 508 2 -a 744 351 6 -a 744 258 10 -a 744 331 3 -a 744 493 3 -a 744 877 4 -a 744 391 3 -a 744 944 10 -a 744 957 2 -a 744 671 2 -a 744 765 3 -a 744 592 5 -a 744 905 9 -a 744 322 4 -a 744 299 10 -a 744 456 7 -a 744 997 6 -a 744 18 2 -a 744 455 1 -a 744 626 4 -a 744 737 8 -a 744 156 10 -a 744 361 8 -a 744 992 7 -a 744 53 7 -a 744 97 10 -a 744 68 8 -a 744 58 3 -a 744 345 6 -a 744 82 2 -a 744 425 9 -a 744 852 2 -a 744 432 5 -a 744 682 2 -a 744 159 3 -a 744 925 1 -a 744 534 3 -a 744 549 5 -a 744 844 5 -a 744 466 9 -a 744 195 1 -a 744 584 1 -a 744 33 1 -a 745 75 8 -a 745 905 10 -a 745 331 2 -a 745 530 8 -a 745 877 8 -a 745 349 5 -a 745 985 6 -a 745 479 8 -a 745 61 4 -a 745 116 4 -a 745 839 3 -a 745 28 1 -a 745 169 3 -a 745 935 9 -a 745 95 4 -a 745 226 10 -a 745 255 3 -a 745 176 7 -a 745 650 10 -a 745 82 3 -a 745 607 8 -a 745 307 1 -a 745 240 10 -a 745 507 6 -a 745 841 6 -a 745 788 1 -a 745 326 7 -a 745 282 6 -a 745 983 6 -a 745 910 8 -a 745 315 9 -a 745 33 10 -a 745 790 10 -a 745 645 10 -a 745 563 3 -a 745 643 8 -a 745 993 3 -a 745 523 10 -a 745 97 9 -a 745 29 3 -a 745 638 1 -a 745 935 3 -a 745 56 9 -a 745 806 6 -a 745 845 6 -a 745 150 4 -a 745 8 9 -a 745 75 3 -a 745 325 9 -a 745 657 8 -a 745 156 7 -a 745 932 8 -a 745 964 7 -a 745 396 4 -a 745 414 9 -a 745 780 7 -a 745 159 2 -a 745 740 4 -a 745 37 10 -a 745 117 1 -a 745 625 2 -a 745 351 1 -a 745 150 2 -a 745 390 9 -a 745 996 7 -a 745 712 7 -a 745 8 8 -a 745 964 7 -a 745 210 6 -a 745 104 5 -a 745 993 10 -a 745 847 8 -a 745 14 1 -a 745 24 1 -a 745 629 10 -a 745 858 8 -a 745 174 7 -a 745 636 4 -a 745 932 4 -a 745 498 3 -a 745 268 10 -a 745 64 2 -a 745 405 9 -a 745 207 10 -a 745 459 3 -a 745 819 4 -a 745 986 10 -a 745 617 3 -a 745 534 4 -a 745 734 10 -a 745 134 4 -a 745 349 4 -a 745 883 10 -a 745 523 9 -a 745 320 1 -a 745 570 9 -a 745 531 5 -a 745 260 8 -a 745 779 8 -a 745 634 10 -a 745 228 5 -a 745 601 7 -a 745 648 5 -a 745 251 5 -a 745 205 3 -a 745 481 2 -a 745 424 4 -a 745 840 10 -a 746 389 2 -a 746 922 8 -a 746 84 1 -a 746 452 7 -a 746 302 1 -a 746 290 5 -a 746 910 8 -a 746 96 3 -a 746 252 2 -a 746 502 5 -a 746 629 10 -a 746 250 1 -a 746 211 1 -a 746 762 3 -a 746 598 9 -a 746 69 4 -a 746 261 4 -a 746 918 4 -a 746 638 7 -a 746 791 2 -a 746 153 5 -a 746 392 9 -a 746 400 9 -a 746 380 6 -a 746 993 9 -a 746 23 1 -a 746 630 3 -a 746 173 8 -a 746 504 6 -a 746 30 3 -a 746 892 3 -a 746 951 7 -a 746 72 6 -a 746 319 1 -a 746 228 10 -a 746 361 7 -a 746 204 2 -a 746 324 9 -a 746 612 9 -a 746 705 8 -a 746 952 6 -a 746 861 10 -a 746 916 5 -a 746 690 7 -a 746 435 4 -a 746 984 5 -a 746 950 1 -a 746 328 6 -a 746 598 1 -a 746 716 9 -a 746 480 2 -a 746 989 10 -a 746 91 3 -a 746 859 2 -a 746 957 4 -a 746 114 8 -a 746 464 9 -a 746 106 10 -a 746 617 8 -a 746 493 2 -a 746 94 6 -a 746 484 7 -a 746 419 4 -a 746 165 10 -a 746 802 2 -a 746 647 10 -a 746 525 6 -a 746 970 3 -a 746 113 6 -a 746 685 3 -a 746 897 1 -a 746 973 2 -a 746 576 7 -a 746 562 3 -a 746 383 10 -a 746 536 9 -a 746 487 10 -a 746 710 9 -a 746 109 1 -a 746 178 3 -a 746 165 2 -a 746 73 8 -a 746 269 8 -a 746 6 8 -a 746 382 1 -a 746 463 5 -a 746 111 1 -a 746 998 6 -a 746 955 1 -a 746 204 6 -a 746 457 6 -a 746 350 7 -a 746 368 4 -a 746 234 3 -a 746 996 9 -a 746 892 3 -a 746 214 6 -a 746 941 5 -a 746 898 5 -a 746 813 3 -a 746 953 4 -a 746 450 4 -a 746 351 4 -a 746 311 9 -a 746 985 4 -a 746 837 9 -a 747 69 2 -a 747 161 3 -a 747 141 10 -a 747 259 4 -a 747 160 3 -a 747 146 2 -a 747 640 3 -a 747 622 5 -a 747 256 4 -a 747 613 6 -a 747 552 10 -a 747 459 9 -a 747 45 2 -a 747 901 6 -a 747 826 6 -a 747 278 9 -a 747 872 7 -a 747 694 4 -a 747 491 7 -a 747 788 8 -a 747 673 9 -a 747 364 9 -a 747 577 6 -a 747 601 3 -a 747 813 9 -a 747 927 10 -a 747 912 2 -a 747 773 3 -a 747 739 3 -a 747 908 6 -a 747 841 10 -a 747 729 10 -a 747 44 3 -a 747 982 3 -a 747 987 6 -a 747 203 5 -a 747 103 8 -a 747 602 10 -a 747 824 6 -a 747 359 5 -a 747 190 4 -a 747 352 6 -a 747 817 1 -a 747 234 6 -a 747 228 9 -a 747 619 1 -a 747 511 10 -a 747 76 3 -a 747 288 1 -a 747 863 3 -a 747 960 10 -a 747 341 3 -a 747 415 5 -a 747 537 7 -a 747 129 4 -a 747 317 4 -a 747 424 4 -a 747 902 10 -a 747 32 3 -a 747 307 9 -a 747 718 10 -a 747 760 1 -a 747 350 9 -a 747 675 1 -a 747 723 1 -a 747 553 6 -a 747 778 3 -a 747 300 9 -a 747 352 3 -a 747 112 6 -a 747 490 8 -a 747 703 5 -a 747 928 2 -a 747 723 5 -a 747 931 10 -a 747 522 8 -a 747 210 9 -a 747 809 5 -a 747 186 6 -a 747 844 6 -a 747 745 4 -a 747 526 8 -a 747 235 8 -a 747 257 6 -a 747 655 8 -a 747 551 7 -a 747 680 8 -a 747 532 8 -a 747 582 2 -a 747 986 10 -a 747 225 6 -a 747 318 3 -a 747 311 4 -a 747 900 9 -a 747 16 10 -a 747 863 8 -a 747 653 9 -a 747 315 3 -a 747 191 1 -a 747 764 8 -a 747 804 5 -a 747 893 7 -a 747 667 4 -a 748 503 7 -a 748 799 4 -a 748 165 10 -a 748 712 2 -a 748 780 10 -a 748 973 2 -a 748 897 1 -a 748 600 7 -a 748 693 7 -a 748 399 8 -a 748 834 6 -a 748 949 3 -a 748 29 1 -a 748 360 9 -a 748 604 2 -a 748 560 10 -a 748 942 9 -a 748 565 9 -a 748 784 3 -a 748 235 9 -a 748 876 3 -a 748 659 10 -a 748 250 6 -a 748 714 4 -a 748 287 7 -a 748 564 10 -a 748 904 2 -a 748 26 9 -a 748 344 5 -a 748 773 8 -a 748 693 8 -a 748 846 5 -a 748 547 5 -a 748 857 6 -a 748 533 9 -a 748 303 3 -a 748 805 2 -a 748 405 9 -a 748 902 4 -a 748 474 3 -a 748 803 9 -a 748 711 5 -a 748 398 3 -a 748 831 10 -a 748 46 7 -a 748 366 6 -a 748 987 10 -a 748 542 8 -a 748 126 8 -a 748 197 6 -a 748 393 2 -a 748 784 1 -a 748 446 5 -a 748 83 4 -a 748 47 6 -a 748 986 2 -a 748 72 6 -a 748 329 2 -a 748 734 6 -a 748 764 8 -a 748 150 1 -a 748 257 5 -a 748 596 9 -a 748 682 9 -a 748 559 6 -a 748 377 5 -a 748 62 4 -a 748 436 5 -a 748 850 5 -a 748 865 3 -a 748 122 9 -a 748 223 3 -a 748 671 1 -a 748 167 1 -a 748 200 3 -a 748 13 2 -a 748 130 6 -a 748 742 4 -a 748 138 7 -a 748 326 4 -a 748 110 6 -a 748 921 2 -a 748 772 10 -a 748 192 2 -a 748 967 7 -a 748 757 9 -a 748 154 4 -a 748 15 7 -a 748 61 9 -a 748 887 2 -a 748 778 6 -a 748 210 5 -a 748 119 6 -a 748 350 5 -a 748 891 7 -a 748 677 10 -a 748 726 7 -a 748 952 3 -a 748 88 3 -a 748 551 8 -a 748 792 3 -a 749 209 2 -a 749 773 4 -a 749 439 8 -a 749 376 2 -a 749 973 5 -a 749 451 2 -a 749 505 5 -a 749 690 3 -a 749 588 3 -a 749 830 3 -a 749 799 7 -a 749 484 8 -a 749 577 10 -a 749 991 5 -a 749 427 9 -a 749 309 3 -a 749 120 10 -a 749 441 4 -a 749 369 9 -a 749 194 3 -a 749 578 7 -a 749 101 1 -a 749 543 10 -a 749 444 9 -a 749 777 10 -a 749 244 3 -a 749 372 5 -a 749 865 3 -a 749 794 1 -a 749 139 5 -a 749 49 10 -a 749 543 2 -a 749 577 1 -a 749 424 3 -a 749 491 10 -a 749 3 7 -a 749 928 9 -a 749 156 1 -a 749 590 5 -a 749 734 3 -a 749 954 5 -a 749 50 5 -a 749 286 3 -a 749 920 10 -a 749 476 6 -a 749 595 5 -a 749 15 5 -a 749 916 2 -a 749 963 9 -a 749 85 2 -a 749 517 4 -a 749 97 10 -a 749 628 6 -a 749 960 3 -a 749 873 8 -a 749 871 1 -a 749 307 5 -a 749 713 4 -a 749 641 2 -a 749 446 9 -a 749 762 8 -a 749 159 5 -a 749 161 9 -a 749 649 6 -a 749 1 9 -a 749 65 6 -a 749 804 7 -a 749 590 5 -a 749 798 4 -a 749 733 6 -a 749 639 1 -a 749 59 6 -a 749 629 9 -a 749 90 2 -a 749 653 5 -a 749 643 1 -a 749 592 3 -a 749 639 6 -a 749 66 5 -a 749 84 5 -a 749 735 6 -a 749 693 10 -a 749 19 10 -a 749 584 8 -a 749 539 5 -a 749 326 2 -a 749 272 5 -a 749 155 5 -a 749 771 8 -a 749 9 4 -a 749 313 5 -a 750 768 3 -a 750 170 3 -a 750 961 3 -a 750 768 1 -a 750 234 8 -a 750 740 8 -a 750 334 3 -a 750 7 5 -a 750 449 8 -a 750 972 10 -a 750 65 4 -a 750 53 8 -a 750 38 3 -a 750 718 6 -a 750 695 1 -a 750 18 4 -a 750 285 8 -a 750 310 7 -a 750 83 10 -a 750 368 10 -a 750 20 4 -a 750 775 6 -a 750 386 5 -a 750 603 7 -a 750 290 10 -a 750 711 5 -a 750 875 8 -a 750 444 1 -a 750 457 1 -a 750 883 5 -a 750 757 4 -a 750 201 2 -a 750 28 6 -a 750 693 8 -a 750 968 7 -a 750 261 1 -a 750 409 2 -a 750 277 3 -a 750 267 10 -a 750 857 1 -a 750 225 3 -a 750 332 2 -a 750 909 7 -a 750 262 8 -a 750 25 8 -a 750 579 5 -a 750 279 8 -a 750 309 9 -a 750 888 6 -a 750 362 7 -a 750 676 9 -a 750 908 1 -a 750 112 8 -a 750 37 8 -a 750 486 8 -a 750 401 4 -a 750 748 7 -a 750 336 10 -a 750 845 8 -a 750 180 6 -a 750 195 6 -a 750 577 9 -a 750 380 7 -a 750 222 2 -a 750 245 2 -a 750 324 2 -a 750 483 9 -a 750 653 3 -a 750 600 7 -a 750 749 7 -a 750 485 9 -a 750 824 3 -a 750 56 1 -a 750 369 6 -a 750 61 10 -a 750 80 9 -a 750 948 4 -a 750 340 5 -a 750 388 10 -a 750 811 6 -a 750 701 2 -a 750 39 2 -a 750 694 1 -a 750 812 7 -a 750 76 7 -a 750 156 10 -a 750 189 8 -a 750 823 7 -a 750 491 2 -a 750 9 5 -a 750 685 6 -a 750 585 8 -a 750 358 8 -a 750 907 9 -a 750 829 2 -a 750 681 2 -a 750 365 1 -a 750 458 6 -a 750 256 5 -a 750 89 4 -a 750 942 6 -a 750 56 4 -a 750 145 6 -a 750 287 2 -a 750 116 9 -a 750 224 6 -a 750 210 3 -a 750 455 10 -a 750 612 7 -a 750 131 7 -a 750 650 4 -a 750 690 7 -a 751 943 6 -a 751 725 5 -a 751 845 8 -a 751 107 6 -a 751 523 10 -a 751 311 5 -a 751 115 9 -a 751 501 8 -a 751 996 8 -a 751 699 7 -a 751 858 8 -a 751 878 10 -a 751 503 4 -a 751 514 6 -a 751 218 8 -a 751 960 5 -a 751 769 6 -a 751 306 2 -a 751 878 8 -a 751 824 4 -a 751 450 3 -a 751 140 8 -a 751 940 7 -a 751 674 5 -a 751 349 7 -a 751 370 10 -a 751 261 2 -a 751 344 10 -a 751 501 5 -a 751 910 8 -a 751 9 8 -a 751 419 6 -a 751 611 1 -a 751 853 4 -a 751 525 4 -a 751 109 3 -a 751 140 5 -a 751 639 1 -a 751 609 8 -a 751 111 5 -a 751 313 2 -a 751 442 4 -a 751 988 5 -a 751 815 6 -a 751 955 7 -a 751 181 1 -a 751 751 3 -a 751 700 6 -a 751 486 4 -a 751 604 8 -a 751 499 7 -a 751 936 9 -a 751 743 5 -a 751 414 10 -a 751 585 9 -a 751 67 8 -a 751 784 9 -a 751 845 3 -a 751 410 3 -a 751 260 8 -a 751 730 1 -a 751 419 3 -a 751 678 7 -a 751 316 2 -a 751 247 9 -a 751 178 9 -a 751 425 4 -a 751 386 3 -a 751 816 3 -a 751 9 5 -a 751 496 10 -a 751 104 9 -a 751 451 10 -a 751 459 6 -a 751 918 3 -a 751 381 5 -a 751 639 3 -a 751 644 6 -a 751 56 1 -a 751 101 5 -a 751 223 6 -a 751 555 7 -a 751 12 6 -a 751 965 1 -a 751 968 9 -a 751 596 3 -a 751 7 4 -a 751 727 2 -a 751 416 9 -a 751 417 4 -a 751 986 8 -a 751 121 3 -a 751 835 5 -a 751 639 2 -a 751 437 10 -a 751 57 5 -a 751 816 10 -a 751 861 7 -a 751 443 6 -a 751 607 10 -a 751 869 2 -a 751 938 7 -a 751 710 8 -a 751 295 6 -a 751 373 5 -a 751 604 2 -a 751 676 3 -a 751 223 9 -a 751 731 3 -a 751 87 3 -a 751 446 1 -a 751 261 2 -a 751 98 4 -a 751 386 9 -a 751 205 1 -a 751 693 6 -a 751 393 3 -a 752 931 2 -a 752 84 7 -a 752 809 1 -a 752 893 8 -a 752 205 6 -a 752 619 1 -a 752 507 7 -a 752 641 7 -a 752 675 8 -a 752 299 6 -a 752 477 4 -a 752 93 5 -a 752 905 4 -a 752 321 8 -a 752 7 7 -a 752 591 6 -a 752 616 9 -a 752 379 8 -a 752 170 10 -a 752 267 4 -a 752 365 4 -a 752 392 3 -a 752 997 2 -a 752 452 4 -a 752 837 8 -a 752 234 5 -a 752 549 5 -a 752 199 6 -a 752 438 5 -a 752 218 8 -a 752 591 1 -a 752 344 5 -a 752 301 4 -a 752 375 8 -a 752 212 8 -a 752 505 2 -a 752 993 7 -a 752 719 7 -a 752 121 2 -a 752 643 2 -a 752 597 2 -a 752 736 4 -a 752 897 5 -a 752 918 9 -a 752 742 8 -a 752 463 9 -a 752 509 2 -a 752 96 9 -a 752 632 7 -a 752 775 9 -a 752 460 7 -a 752 747 8 -a 752 911 10 -a 752 836 6 -a 752 980 5 -a 752 436 1 -a 752 10 7 -a 752 393 4 -a 752 653 3 -a 752 600 5 -a 752 737 1 -a 752 953 4 -a 752 974 2 -a 752 948 6 -a 752 434 6 -a 752 942 7 -a 752 642 8 -a 752 554 10 -a 752 561 7 -a 752 634 1 -a 752 127 1 -a 752 272 7 -a 752 507 8 -a 752 20 1 -a 752 969 3 -a 752 528 5 -a 752 84 7 -a 752 577 2 -a 752 278 10 -a 752 543 7 -a 752 576 6 -a 752 430 6 -a 752 387 8 -a 753 980 5 -a 753 865 8 -a 753 397 10 -a 753 348 4 -a 753 493 2 -a 753 996 3 -a 753 60 10 -a 753 421 2 -a 753 946 3 -a 753 854 9 -a 753 863 8 -a 753 625 10 -a 753 384 5 -a 753 399 7 -a 753 235 6 -a 753 510 6 -a 753 670 7 -a 753 741 8 -a 753 529 10 -a 753 658 4 -a 753 685 7 -a 753 32 6 -a 753 741 6 -a 753 237 5 -a 753 309 5 -a 753 260 9 -a 753 812 9 -a 753 308 3 -a 753 689 2 -a 753 175 4 -a 753 263 4 -a 753 529 9 -a 753 571 6 -a 753 611 7 -a 753 542 1 -a 753 670 6 -a 753 417 4 -a 753 463 6 -a 753 653 10 -a 753 247 4 -a 753 302 3 -a 753 254 3 -a 753 630 2 -a 753 700 2 -a 753 488 8 -a 753 115 6 -a 753 346 4 -a 753 204 10 -a 753 643 4 -a 753 888 2 -a 753 674 9 -a 753 720 6 -a 753 101 3 -a 753 982 5 -a 753 979 6 -a 753 912 8 -a 753 265 8 -a 753 643 2 -a 753 62 1 -a 753 528 7 -a 753 147 5 -a 753 632 10 -a 753 114 7 -a 753 143 1 -a 753 150 1 -a 753 783 10 -a 753 559 5 -a 753 612 8 -a 753 412 1 -a 753 805 7 -a 753 913 9 -a 753 665 2 -a 753 410 2 -a 753 589 9 -a 753 128 5 -a 753 524 10 -a 753 934 5 -a 753 331 2 -a 753 142 2 -a 753 912 4 -a 753 194 1 -a 753 815 6 -a 753 607 1 -a 753 294 6 -a 753 772 1 -a 753 561 4 -a 753 182 3 -a 753 13 9 -a 753 179 3 -a 753 243 7 -a 753 540 10 -a 753 325 6 -a 753 875 8 -a 753 653 6 -a 753 467 8 -a 753 411 5 -a 754 2 7 -a 754 611 9 -a 754 822 2 -a 754 806 10 -a 754 500 3 -a 754 462 7 -a 754 192 3 -a 754 64 9 -a 754 589 8 -a 754 715 10 -a 754 997 7 -a 754 919 4 -a 754 857 10 -a 754 884 10 -a 754 89 10 -a 754 647 9 -a 754 467 3 -a 754 382 1 -a 754 395 8 -a 754 3 7 -a 754 563 5 -a 754 407 6 -a 754 182 9 -a 754 806 1 -a 754 946 6 -a 754 506 7 -a 754 656 5 -a 754 574 10 -a 754 973 7 -a 754 655 5 -a 754 984 9 -a 754 974 1 -a 754 241 10 -a 754 782 5 -a 754 755 6 -a 754 740 2 -a 754 219 7 -a 754 946 5 -a 754 803 2 -a 754 808 6 -a 754 637 2 -a 754 775 9 -a 754 702 9 -a 754 469 4 -a 754 635 1 -a 754 790 7 -a 754 91 3 -a 754 77 6 -a 754 148 6 -a 754 485 2 -a 754 79 1 -a 754 710 10 -a 754 891 6 -a 754 260 6 -a 754 491 7 -a 754 812 6 -a 754 766 9 -a 754 122 3 -a 754 361 9 -a 754 714 8 -a 754 776 5 -a 754 321 6 -a 754 663 10 -a 754 78 9 -a 754 393 10 -a 754 732 3 -a 754 296 9 -a 754 315 7 -a 754 511 1 -a 754 79 5 -a 754 951 7 -a 754 261 10 -a 754 781 1 -a 754 395 2 -a 754 895 6 -a 754 546 1 -a 754 485 9 -a 754 971 6 -a 754 693 7 -a 754 970 4 -a 754 26 8 -a 754 379 2 -a 754 836 4 -a 754 285 7 -a 754 869 1 -a 754 624 8 -a 754 26 10 -a 754 991 4 -a 754 984 5 -a 754 739 3 -a 754 742 7 -a 754 280 2 -a 754 377 5 -a 754 734 2 -a 754 357 3 -a 754 770 3 -a 754 442 10 -a 754 653 8 -a 754 60 2 -a 755 952 3 -a 755 731 1 -a 755 188 9 -a 755 487 7 -a 755 380 8 -a 755 59 7 -a 755 9 8 -a 755 864 8 -a 755 5 2 -a 755 701 9 -a 755 809 1 -a 755 30 6 -a 755 55 3 -a 755 621 4 -a 755 315 10 -a 755 924 5 -a 755 220 10 -a 755 340 6 -a 755 890 9 -a 755 179 5 -a 755 55 1 -a 755 607 10 -a 755 459 7 -a 755 431 2 -a 755 317 2 -a 755 815 9 -a 755 176 9 -a 755 758 4 -a 755 443 4 -a 755 235 5 -a 755 685 5 -a 755 150 10 -a 755 220 9 -a 755 872 5 -a 755 636 4 -a 755 599 1 -a 755 930 3 -a 755 644 6 -a 755 439 9 -a 755 935 5 -a 755 321 6 -a 755 223 1 -a 755 964 10 -a 755 375 2 -a 755 843 6 -a 755 254 1 -a 755 274 3 -a 755 38 8 -a 755 594 1 -a 755 139 4 -a 755 217 3 -a 755 648 1 -a 755 746 6 -a 755 675 9 -a 755 54 3 -a 755 38 1 -a 755 465 3 -a 755 230 8 -a 755 795 7 -a 755 908 10 -a 755 464 10 -a 755 455 8 -a 755 33 6 -a 755 684 6 -a 755 302 5 -a 755 668 2 -a 755 258 8 -a 755 208 4 -a 755 288 2 -a 755 696 5 -a 755 118 7 -a 755 608 7 -a 755 919 7 -a 755 57 2 -a 755 982 3 -a 755 737 4 -a 755 311 3 -a 755 232 6 -a 755 775 9 -a 755 904 6 -a 755 370 2 -a 755 991 9 -a 755 527 2 -a 755 91 1 -a 755 641 7 -a 755 580 6 -a 755 128 2 -a 755 81 2 -a 755 809 9 -a 755 922 5 -a 755 988 4 -a 755 249 2 -a 755 352 6 -a 755 932 1 -a 755 654 8 -a 755 664 4 -a 755 165 8 -a 755 861 3 -a 755 951 1 -a 755 861 4 -a 755 978 10 -a 755 534 10 -a 755 755 4 -a 755 10 4 -a 755 491 7 -a 755 467 5 -a 756 320 8 -a 756 722 10 -a 756 217 6 -a 756 199 4 -a 756 68 7 -a 756 183 4 -a 756 725 7 -a 756 158 2 -a 756 823 2 -a 756 281 4 -a 756 286 1 -a 756 904 8 -a 756 65 10 -a 756 183 6 -a 756 867 3 -a 756 313 9 -a 756 535 9 -a 756 863 9 -a 756 220 10 -a 756 164 2 -a 756 502 4 -a 756 385 5 -a 756 428 2 -a 756 221 7 -a 756 977 3 -a 756 961 5 -a 756 975 1 -a 756 986 2 -a 756 427 9 -a 756 417 8 -a 756 282 10 -a 756 125 10 -a 756 634 9 -a 756 480 6 -a 756 192 2 -a 756 816 7 -a 756 181 2 -a 756 349 1 -a 756 615 1 -a 756 461 10 -a 756 634 5 -a 756 494 8 -a 756 525 4 -a 756 817 6 -a 756 336 3 -a 756 838 10 -a 756 327 4 -a 756 174 3 -a 756 33 2 -a 756 490 1 -a 756 675 3 -a 756 417 9 -a 756 489 10 -a 756 78 2 -a 756 637 3 -a 756 441 5 -a 756 14 3 -a 756 587 9 -a 756 402 7 -a 756 441 3 -a 756 683 7 -a 756 565 2 -a 756 613 7 -a 756 139 7 -a 756 756 6 -a 756 404 3 -a 756 319 3 -a 756 80 2 -a 756 779 8 -a 756 714 5 -a 756 487 7 -a 756 279 6 -a 756 506 7 -a 756 823 9 -a 756 92 6 -a 756 832 1 -a 756 996 8 -a 756 125 7 -a 756 297 3 -a 756 647 10 -a 756 541 3 -a 756 785 1 -a 756 724 4 -a 756 154 9 -a 756 201 8 -a 756 738 3 -a 756 740 3 -a 756 602 2 -a 756 154 4 -a 756 719 5 -a 756 261 5 -a 756 718 6 -a 756 307 9 -a 756 399 1 -a 756 449 7 -a 756 711 6 -a 756 717 4 -a 756 528 6 -a 756 704 9 -a 756 471 6 -a 756 217 6 -a 756 167 8 -a 756 749 2 -a 756 722 8 -a 757 989 2 -a 757 841 4 -a 757 529 4 -a 757 960 3 -a 757 965 7 -a 757 825 10 -a 757 582 9 -a 757 481 10 -a 757 585 2 -a 757 282 7 -a 757 634 2 -a 757 785 2 -a 757 350 6 -a 757 363 8 -a 757 148 5 -a 757 44 5 -a 757 623 1 -a 757 865 10 -a 757 351 9 -a 757 289 3 -a 757 37 10 -a 757 713 6 -a 757 816 4 -a 757 740 1 -a 757 159 5 -a 757 9 10 -a 757 906 7 -a 757 907 6 -a 757 730 5 -a 757 870 8 -a 757 723 10 -a 757 235 9 -a 757 806 1 -a 757 663 5 -a 757 35 5 -a 757 363 4 -a 757 120 9 -a 757 620 7 -a 757 644 6 -a 757 753 9 -a 757 380 10 -a 757 638 6 -a 757 78 5 -a 757 742 2 -a 757 785 5 -a 757 122 10 -a 757 340 10 -a 757 625 10 -a 757 472 10 -a 757 336 5 -a 757 913 7 -a 757 508 1 -a 757 24 4 -a 757 705 3 -a 757 223 2 -a 757 182 1 -a 757 713 9 -a 757 105 10 -a 757 65 2 -a 757 418 9 -a 757 974 7 -a 757 787 7 -a 757 652 3 -a 757 755 2 -a 757 426 7 -a 757 687 1 -a 757 94 8 -a 757 545 2 -a 757 282 10 -a 757 737 2 -a 757 273 4 -a 757 661 8 -a 757 351 8 -a 757 351 2 -a 757 379 8 -a 757 111 2 -a 757 472 5 -a 757 718 10 -a 757 736 5 -a 757 943 2 -a 757 30 4 -a 757 624 5 -a 757 426 5 -a 757 53 5 -a 757 304 1 -a 757 648 8 -a 757 235 8 -a 758 752 9 -a 758 299 9 -a 758 410 5 -a 758 702 4 -a 758 61 2 -a 758 37 7 -a 758 432 6 -a 758 486 3 -a 758 723 4 -a 758 525 8 -a 758 6 9 -a 758 238 6 -a 758 279 9 -a 758 641 5 -a 758 588 6 -a 758 629 4 -a 758 698 9 -a 758 76 8 -a 758 712 1 -a 758 409 10 -a 758 741 5 -a 758 9 9 -a 758 419 2 -a 758 794 7 -a 758 312 6 -a 758 42 5 -a 758 4 9 -a 758 304 2 -a 758 794 4 -a 758 302 10 -a 758 713 7 -a 758 471 7 -a 758 362 4 -a 758 749 7 -a 758 902 9 -a 758 848 1 -a 758 448 6 -a 758 403 9 -a 758 853 2 -a 758 427 6 -a 758 640 10 -a 758 107 5 -a 758 43 4 -a 758 203 1 -a 758 735 3 -a 758 37 10 -a 758 900 5 -a 758 810 7 -a 758 749 4 -a 758 285 6 -a 758 803 10 -a 758 465 3 -a 758 293 5 -a 758 197 9 -a 758 234 9 -a 758 604 6 -a 758 239 7 -a 758 237 9 -a 758 907 3 -a 758 8 4 -a 758 538 10 -a 758 595 3 -a 758 478 9 -a 758 900 6 -a 758 320 6 -a 758 355 2 -a 758 723 4 -a 758 767 5 -a 758 757 8 -a 758 551 4 -a 758 169 8 -a 758 372 3 -a 758 658 7 -a 758 212 7 -a 758 574 2 -a 758 368 6 -a 758 248 4 -a 758 450 5 -a 758 154 8 -a 758 996 4 -a 758 734 2 -a 758 956 7 -a 758 437 7 -a 758 2 5 -a 758 129 1 -a 758 670 8 -a 758 605 9 -a 758 367 10 -a 758 907 9 -a 759 488 4 -a 759 374 1 -a 759 420 3 -a 759 58 2 -a 759 851 4 -a 759 295 4 -a 759 377 3 -a 759 181 9 -a 759 119 3 -a 759 938 6 -a 759 544 5 -a 759 288 5 -a 759 285 6 -a 759 177 4 -a 759 499 8 -a 759 859 10 -a 759 544 8 -a 759 746 4 -a 759 284 7 -a 759 697 4 -a 759 718 10 -a 759 629 10 -a 759 130 1 -a 759 757 6 -a 759 799 4 -a 759 598 9 -a 759 99 2 -a 759 681 9 -a 759 61 7 -a 759 472 7 -a 759 77 6 -a 759 119 9 -a 759 298 8 -a 759 371 8 -a 759 495 4 -a 759 478 9 -a 759 364 7 -a 759 614 7 -a 759 391 1 -a 759 907 9 -a 759 901 10 -a 759 676 4 -a 759 59 7 -a 759 375 9 -a 759 510 1 -a 759 602 1 -a 759 96 2 -a 759 793 8 -a 759 275 7 -a 759 813 3 -a 759 785 7 -a 759 903 10 -a 759 942 7 -a 759 778 4 -a 759 635 10 -a 759 717 3 -a 759 351 1 -a 759 733 3 -a 759 373 3 -a 759 412 5 -a 759 180 1 -a 759 449 2 -a 759 530 7 -a 759 477 10 -a 759 820 7 -a 759 954 5 -a 759 159 9 -a 759 613 7 -a 759 321 7 -a 759 41 3 -a 759 489 9 -a 759 996 6 -a 759 99 6 -a 759 863 9 -a 759 481 10 -a 759 700 4 -a 759 959 8 -a 759 249 5 -a 759 974 2 -a 759 747 6 -a 759 9 8 -a 759 852 4 -a 759 665 9 -a 759 786 6 -a 759 462 8 -a 759 357 2 -a 759 112 6 -a 759 170 2 -a 759 729 1 -a 759 523 5 -a 759 349 7 -a 759 154 7 -a 759 28 2 -a 759 825 6 -a 759 973 4 -a 759 28 3 -a 759 755 2 -a 759 107 6 -a 759 640 6 -a 759 51 10 -a 760 147 9 -a 760 105 7 -a 760 22 9 -a 760 245 6 -a 760 967 7 -a 760 502 10 -a 760 944 2 -a 760 901 6 -a 760 750 9 -a 760 894 9 -a 760 624 2 -a 760 758 8 -a 760 721 7 -a 760 264 1 -a 760 519 7 -a 760 159 1 -a 760 620 7 -a 760 630 7 -a 760 328 1 -a 760 324 3 -a 760 129 10 -a 760 677 5 -a 760 477 9 -a 760 156 2 -a 760 477 7 -a 760 425 2 -a 760 183 3 -a 760 207 10 -a 760 531 7 -a 760 823 9 -a 760 257 7 -a 760 677 6 -a 760 927 9 -a 760 278 1 -a 760 921 7 -a 760 869 6 -a 760 779 9 -a 760 841 10 -a 760 746 6 -a 760 504 7 -a 760 710 7 -a 760 345 2 -a 760 237 9 -a 760 406 9 -a 760 608 6 -a 760 755 5 -a 760 564 1 -a 760 203 3 -a 760 361 9 -a 760 892 9 -a 760 526 4 -a 760 489 8 -a 760 544 2 -a 760 644 2 -a 760 403 7 -a 760 827 2 -a 760 203 10 -a 760 934 10 -a 760 625 7 -a 760 459 2 -a 760 586 3 -a 760 527 10 -a 760 737 10 -a 760 483 9 -a 760 371 7 -a 760 491 9 -a 760 299 9 -a 760 92 2 -a 760 995 1 -a 760 436 5 -a 760 207 9 -a 760 389 8 -a 760 19 6 -a 760 962 10 -a 760 953 7 -a 760 221 6 -a 760 298 5 -a 760 820 6 -a 760 747 5 -a 760 786 8 -a 760 339 8 -a 760 725 6 -a 760 405 4 -a 760 334 10 -a 760 103 2 -a 760 207 4 -a 760 536 9 -a 760 12 5 -a 760 831 3 -a 760 995 5 -a 760 598 6 -a 760 333 1 -a 760 707 10 -a 760 56 2 -a 760 704 10 -a 760 173 7 -a 760 354 6 -a 760 795 2 -a 760 143 5 -a 760 337 8 -a 760 207 10 -a 760 350 2 -a 760 725 9 -a 761 225 6 -a 761 287 5 -a 761 653 3 -a 761 446 3 -a 761 584 2 -a 761 448 5 -a 761 168 10 -a 761 345 10 -a 761 786 5 -a 761 892 6 -a 761 749 5 -a 761 96 5 -a 761 994 10 -a 761 956 1 -a 761 631 8 -a 761 762 10 -a 761 601 10 -a 761 579 8 -a 761 71 5 -a 761 283 7 -a 761 634 2 -a 761 774 7 -a 761 456 8 -a 761 987 6 -a 761 544 6 -a 761 598 7 -a 761 299 3 -a 761 750 2 -a 761 947 6 -a 761 975 7 -a 761 209 6 -a 761 652 1 -a 761 396 4 -a 761 792 1 -a 761 75 3 -a 761 563 7 -a 761 112 1 -a 761 861 1 -a 761 430 8 -a 761 861 10 -a 761 956 2 -a 761 399 2 -a 761 792 7 -a 761 562 6 -a 761 380 8 -a 761 529 4 -a 761 139 3 -a 761 958 9 -a 761 599 10 -a 761 421 10 -a 761 567 10 -a 761 348 2 -a 761 876 1 -a 761 529 9 -a 761 892 6 -a 761 450 5 -a 761 827 10 -a 761 617 4 -a 761 372 4 -a 761 826 5 -a 761 567 10 -a 761 581 2 -a 761 453 5 -a 761 962 7 -a 761 348 3 -a 761 527 6 -a 761 500 10 -a 761 460 8 -a 761 363 10 -a 761 929 9 -a 761 296 4 -a 761 294 8 -a 761 304 8 -a 761 63 7 -a 761 856 3 -a 761 683 8 -a 761 591 6 -a 761 994 10 -a 761 617 5 -a 761 166 9 -a 761 390 7 -a 761 159 2 -a 761 513 10 -a 761 242 8 -a 761 688 4 -a 761 380 9 -a 761 691 5 -a 761 490 7 -a 761 997 3 -a 761 38 4 -a 761 291 7 -a 761 539 10 -a 762 618 2 -a 762 743 5 -a 762 477 8 -a 762 966 8 -a 762 246 7 -a 762 976 7 -a 762 401 10 -a 762 608 7 -a 762 881 8 -a 762 696 1 -a 762 902 7 -a 762 160 6 -a 762 758 4 -a 762 733 4 -a 762 842 3 -a 762 324 7 -a 762 702 7 -a 762 434 10 -a 762 489 9 -a 762 67 7 -a 762 593 6 -a 762 308 10 -a 762 256 1 -a 762 357 2 -a 762 998 7 -a 762 745 5 -a 762 329 6 -a 762 12 4 -a 762 12 2 -a 762 868 6 -a 762 629 5 -a 762 754 10 -a 762 320 8 -a 762 570 6 -a 762 999 5 -a 762 271 4 -a 762 970 8 -a 762 583 1 -a 762 127 7 -a 762 641 5 -a 762 460 9 -a 762 286 3 -a 762 374 5 -a 762 168 10 -a 762 104 7 -a 762 698 2 -a 762 869 10 -a 762 537 3 -a 762 162 9 -a 762 935 2 -a 762 105 8 -a 762 139 7 -a 762 219 7 -a 762 360 7 -a 762 496 5 -a 762 192 10 -a 762 81 2 -a 762 824 10 -a 762 203 10 -a 762 92 8 -a 762 667 3 -a 762 832 2 -a 762 845 1 -a 762 986 7 -a 762 377 2 -a 762 820 4 -a 762 233 6 -a 762 323 8 -a 762 378 6 -a 762 359 5 -a 762 963 3 -a 762 837 9 -a 762 645 8 -a 762 313 7 -a 762 748 3 -a 762 848 1 -a 762 260 6 -a 762 147 5 -a 762 758 10 -a 762 365 4 -a 762 286 10 -a 762 976 10 -a 762 724 1 -a 762 781 4 -a 762 144 10 -a 762 804 7 -a 762 580 5 -a 762 346 6 -a 762 895 9 -a 762 223 6 -a 762 153 8 -a 762 716 10 -a 762 184 2 -a 763 530 9 -a 763 511 1 -a 763 416 2 -a 763 852 10 -a 763 888 5 -a 763 775 8 -a 763 790 3 -a 763 700 5 -a 763 395 3 -a 763 78 6 -a 763 679 4 -a 763 118 2 -a 763 63 10 -a 763 502 6 -a 763 377 5 -a 763 210 5 -a 763 235 5 -a 763 741 10 -a 763 495 6 -a 763 187 6 -a 763 441 7 -a 763 251 3 -a 763 330 3 -a 763 220 7 -a 763 830 4 -a 763 675 5 -a 763 91 2 -a 763 28 1 -a 763 828 3 -a 763 806 8 -a 763 212 7 -a 763 333 3 -a 763 292 1 -a 763 627 4 -a 763 160 2 -a 763 155 5 -a 763 377 8 -a 763 949 6 -a 763 854 1 -a 763 771 2 -a 763 3 2 -a 763 508 7 -a 763 888 7 -a 763 65 6 -a 763 241 9 -a 763 274 9 -a 763 219 4 -a 763 981 5 -a 763 768 10 -a 763 405 5 -a 763 397 2 -a 763 734 10 -a 763 617 3 -a 763 824 7 -a 763 385 1 -a 763 707 4 -a 763 851 8 -a 763 188 2 -a 763 488 8 -a 763 38 5 -a 763 520 9 -a 763 779 3 -a 763 665 5 -a 763 679 5 -a 763 933 2 -a 763 17 9 -a 763 603 1 -a 763 762 7 -a 763 788 1 -a 763 605 9 -a 763 245 2 -a 763 651 10 -a 763 670 8 -a 763 229 3 -a 763 891 1 -a 763 943 3 -a 763 447 3 -a 763 848 1 -a 763 687 5 -a 763 852 3 -a 763 220 2 -a 763 680 10 -a 763 561 5 -a 763 836 1 -a 763 479 2 -a 763 945 2 -a 763 518 1 -a 763 306 9 -a 763 108 9 -a 763 343 5 -a 763 627 8 -a 763 759 3 -a 763 281 10 -a 763 667 3 -a 763 884 9 -a 763 404 10 -a 763 787 10 -a 763 464 7 -a 763 648 5 -a 763 413 2 -a 763 109 6 -a 763 876 3 -a 763 280 9 -a 763 28 6 -a 763 299 3 -a 763 103 9 -a 763 714 2 -a 763 126 9 -a 764 322 6 -a 764 369 8 -a 764 686 4 -a 764 134 9 -a 764 848 2 -a 764 607 6 -a 764 651 9 -a 764 129 10 -a 764 714 4 -a 764 632 8 -a 764 471 8 -a 764 317 9 -a 764 366 6 -a 764 454 2 -a 764 597 10 -a 764 9 10 -a 764 453 9 -a 764 456 8 -a 764 412 2 -a 764 215 2 -a 764 920 3 -a 764 36 4 -a 764 627 9 -a 764 4 8 -a 764 911 8 -a 764 906 3 -a 764 31 6 -a 764 185 7 -a 764 744 8 -a 764 310 2 -a 764 306 2 -a 764 89 9 -a 764 996 2 -a 764 439 6 -a 764 936 3 -a 764 578 2 -a 764 65 7 -a 764 40 10 -a 764 267 6 -a 764 696 1 -a 764 510 4 -a 764 583 4 -a 764 38 10 -a 764 963 9 -a 764 156 5 -a 764 46 1 -a 764 391 7 -a 764 611 1 -a 764 457 9 -a 764 605 9 -a 764 506 2 -a 764 492 4 -a 764 208 8 -a 764 510 1 -a 764 379 3 -a 764 89 6 -a 764 540 5 -a 764 563 8 -a 764 73 4 -a 764 260 4 -a 764 873 10 -a 764 378 7 -a 764 348 8 -a 764 844 1 -a 764 816 6 -a 764 259 4 -a 764 397 7 -a 764 880 10 -a 764 298 1 -a 764 663 9 -a 764 552 6 -a 764 807 4 -a 764 222 4 -a 764 589 1 -a 764 746 4 -a 764 377 7 -a 764 634 7 -a 764 112 2 -a 764 987 5 -a 764 66 8 -a 764 717 2 -a 764 469 8 -a 764 558 3 -a 764 924 1 -a 764 978 9 -a 764 936 3 -a 764 493 6 -a 764 474 6 -a 764 60 3 -a 764 752 5 -a 764 322 8 -a 764 437 1 -a 764 75 1 -a 764 141 2 -a 764 228 10 -a 764 333 5 -a 764 537 2 -a 764 84 5 -a 764 630 2 -a 764 176 6 -a 764 635 9 -a 764 413 3 -a 764 397 1 -a 764 199 6 -a 764 134 2 -a 765 773 10 -a 765 832 5 -a 765 245 2 -a 765 735 1 -a 765 897 1 -a 765 961 7 -a 765 179 6 -a 765 430 3 -a 765 860 3 -a 765 132 4 -a 765 341 5 -a 765 848 2 -a 765 625 3 -a 765 815 1 -a 765 907 8 -a 765 352 9 -a 765 112 10 -a 765 320 8 -a 765 427 2 -a 765 253 3 -a 765 547 3 -a 765 759 3 -a 765 789 10 -a 765 630 8 -a 765 365 5 -a 765 964 7 -a 765 240 10 -a 765 777 10 -a 765 336 3 -a 765 438 5 -a 765 910 4 -a 765 84 7 -a 765 245 1 -a 765 130 8 -a 765 819 7 -a 765 118 1 -a 765 67 4 -a 765 997 8 -a 765 547 9 -a 765 926 8 -a 765 105 5 -a 765 888 4 -a 765 749 3 -a 765 729 5 -a 765 678 2 -a 765 632 2 -a 765 56 1 -a 765 789 10 -a 765 951 9 -a 765 482 7 -a 765 17 3 -a 765 473 8 -a 765 217 6 -a 765 806 3 -a 765 79 3 -a 765 581 6 -a 765 745 10 -a 765 318 1 -a 765 333 3 -a 765 57 8 -a 765 756 1 -a 765 218 6 -a 765 140 10 -a 765 1000 4 -a 765 347 5 -a 765 958 2 -a 765 93 7 -a 765 413 10 -a 765 931 1 -a 765 640 2 -a 765 315 1 -a 765 11 10 -a 765 503 9 -a 765 39 2 -a 765 739 3 -a 765 156 2 -a 765 670 5 -a 765 794 9 -a 765 944 10 -a 765 596 2 -a 765 252 8 -a 765 961 6 -a 765 45 1 -a 765 468 4 -a 765 742 2 -a 765 123 1 -a 765 24 4 -a 765 462 3 -a 765 440 2 -a 765 356 5 -a 765 518 9 -a 765 171 6 -a 765 573 6 -a 765 658 2 -a 765 147 7 -a 766 919 5 -a 766 591 2 -a 766 239 6 -a 766 308 4 -a 766 497 7 -a 766 878 10 -a 766 622 1 -a 766 507 4 -a 766 356 7 -a 766 660 5 -a 766 221 6 -a 766 511 3 -a 766 306 6 -a 766 431 2 -a 766 901 3 -a 766 242 5 -a 766 367 7 -a 766 945 5 -a 766 709 4 -a 766 84 2 -a 766 43 5 -a 766 732 10 -a 766 545 10 -a 766 483 8 -a 766 63 1 -a 766 39 9 -a 766 653 1 -a 766 635 4 -a 766 696 5 -a 766 799 10 -a 766 529 2 -a 766 262 10 -a 766 14 4 -a 766 836 1 -a 766 759 6 -a 766 891 6 -a 766 433 2 -a 766 241 10 -a 766 223 5 -a 766 69 9 -a 766 462 3 -a 766 733 10 -a 766 374 8 -a 766 452 4 -a 766 139 3 -a 766 250 4 -a 766 693 3 -a 766 505 3 -a 766 171 3 -a 766 377 7 -a 766 588 4 -a 766 213 1 -a 766 84 4 -a 766 109 5 -a 766 695 9 -a 766 146 9 -a 766 147 9 -a 766 324 7 -a 766 780 9 -a 766 842 4 -a 766 98 2 -a 766 284 9 -a 766 79 10 -a 766 111 7 -a 766 96 5 -a 766 837 3 -a 766 528 6 -a 766 54 9 -a 766 200 5 -a 766 596 9 -a 766 515 4 -a 766 932 3 -a 766 969 1 -a 766 966 6 -a 766 47 7 -a 766 195 10 -a 766 634 2 -a 766 551 4 -a 766 365 2 -a 766 115 1 -a 766 577 8 -a 766 69 9 -a 766 223 9 -a 766 248 3 -a 766 214 1 -a 766 369 7 -a 766 571 1 -a 766 993 9 -a 766 186 2 -a 766 668 5 -a 766 252 3 -a 766 264 8 -a 766 779 8 -a 766 347 10 -a 766 77 9 -a 766 756 4 -a 766 875 10 -a 766 130 1 -a 766 955 8 -a 766 446 9 -a 766 644 10 -a 766 862 10 -a 766 391 9 -a 766 585 6 -a 766 908 5 -a 766 585 6 -a 766 194 2 -a 766 435 4 -a 766 949 7 -a 766 179 8 -a 767 549 1 -a 767 501 5 -a 767 247 7 -a 767 771 3 -a 767 748 3 -a 767 460 1 -a 767 115 2 -a 767 294 1 -a 767 428 8 -a 767 300 9 -a 767 962 2 -a 767 679 10 -a 767 563 2 -a 767 716 7 -a 767 2 1 -a 767 639 9 -a 767 447 3 -a 767 876 8 -a 767 768 2 -a 767 377 1 -a 767 297 6 -a 767 387 9 -a 767 214 1 -a 767 687 3 -a 767 971 1 -a 767 98 9 -a 767 247 3 -a 767 140 9 -a 767 532 5 -a 767 171 9 -a 767 318 7 -a 767 56 4 -a 767 672 1 -a 767 564 8 -a 767 826 2 -a 767 395 2 -a 767 940 9 -a 767 689 10 -a 767 426 1 -a 767 215 7 -a 767 626 8 -a 767 81 8 -a 767 777 6 -a 767 317 8 -a 767 82 2 -a 767 392 8 -a 767 763 8 -a 767 957 1 -a 767 135 8 -a 767 115 6 -a 767 229 2 -a 767 522 9 -a 767 328 10 -a 767 916 9 -a 767 468 4 -a 767 425 2 -a 767 138 8 -a 767 608 4 -a 767 956 9 -a 767 309 6 -a 767 925 8 -a 767 980 7 -a 767 465 5 -a 767 812 6 -a 767 350 4 -a 767 463 1 -a 767 727 7 -a 767 14 4 -a 767 889 2 -a 767 941 5 -a 767 639 10 -a 767 969 2 -a 767 694 1 -a 767 955 8 -a 767 26 10 -a 767 61 5 -a 767 693 7 -a 767 982 9 -a 767 195 6 -a 767 807 9 -a 767 186 5 -a 767 716 7 -a 767 111 3 -a 767 77 7 -a 767 160 7 -a 767 535 5 -a 767 215 9 -a 767 767 7 -a 767 467 2 -a 767 523 4 -a 767 667 1 -a 767 453 8 -a 767 478 10 -a 767 107 2 -a 767 241 9 -a 767 827 1 -a 767 570 2 -a 767 967 2 -a 767 841 8 -a 767 434 5 -a 767 884 2 -a 768 455 5 -a 768 378 2 -a 768 553 5 -a 768 386 3 -a 768 403 6 -a 768 613 7 -a 768 54 1 -a 768 360 6 -a 768 807 3 -a 768 861 9 -a 768 545 2 -a 768 499 1 -a 768 971 6 -a 768 622 3 -a 768 658 9 -a 768 481 6 -a 768 836 1 -a 768 400 10 -a 768 947 2 -a 768 334 2 -a 768 42 1 -a 768 376 6 -a 768 811 7 -a 768 149 3 -a 768 616 3 -a 768 613 4 -a 768 718 5 -a 768 558 3 -a 768 429 9 -a 768 127 8 -a 768 417 2 -a 768 884 9 -a 768 504 4 -a 768 969 1 -a 768 245 2 -a 768 906 4 -a 768 557 10 -a 768 298 3 -a 768 241 6 -a 768 340 10 -a 768 134 9 -a 768 785 3 -a 768 838 8 -a 768 80 5 -a 768 382 7 -a 768 471 1 -a 768 561 2 -a 768 193 10 -a 768 870 5 -a 768 483 4 -a 768 526 7 -a 768 911 3 -a 768 858 4 -a 768 312 4 -a 768 35 7 -a 768 449 6 -a 768 925 5 -a 768 752 3 -a 768 329 8 -a 768 878 4 -a 768 399 8 -a 768 188 7 -a 768 357 1 -a 768 344 1 -a 768 432 3 -a 768 238 8 -a 768 900 8 -a 768 730 9 -a 768 478 7 -a 768 215 2 -a 768 863 1 -a 768 239 1 -a 768 28 4 -a 768 943 5 -a 768 620 2 -a 768 498 8 -a 768 479 3 -a 768 813 4 -a 768 343 1 -a 768 961 7 -a 768 314 10 -a 768 230 8 -a 768 795 10 -a 768 626 8 -a 768 264 8 -a 768 219 4 -a 768 526 5 -a 768 201 4 -a 768 854 6 -a 768 869 7 -a 768 600 6 -a 768 18 4 -a 768 202 4 -a 768 943 3 -a 768 449 8 -a 768 439 1 -a 768 818 10 -a 768 154 10 -a 768 917 4 -a 768 9 9 -a 768 131 10 -a 768 36 10 -a 768 935 2 -a 768 750 1 -a 768 534 7 -a 768 389 9 -a 768 538 1 -a 768 876 8 -a 768 325 8 -a 768 852 8 -a 768 81 4 -a 768 95 6 -a 768 453 7 -a 768 345 2 -a 768 314 7 -a 768 978 7 -a 768 336 6 -a 768 514 9 -a 768 807 2 -a 769 180 2 -a 769 89 1 -a 769 824 10 -a 769 381 5 -a 769 7 6 -a 769 249 1 -a 769 820 7 -a 769 825 1 -a 769 402 5 -a 769 712 9 -a 769 833 8 -a 769 394 8 -a 769 842 4 -a 769 868 5 -a 769 304 8 -a 769 567 5 -a 769 377 6 -a 769 692 10 -a 769 81 6 -a 769 229 4 -a 769 932 2 -a 769 309 7 -a 769 87 1 -a 769 360 4 -a 769 653 2 -a 769 400 2 -a 769 313 7 -a 769 988 8 -a 769 914 9 -a 769 95 4 -a 769 144 2 -a 769 919 4 -a 769 524 8 -a 769 143 2 -a 769 319 5 -a 769 809 6 -a 769 544 7 -a 769 6 1 -a 769 617 3 -a 769 938 4 -a 769 847 4 -a 769 460 1 -a 769 217 10 -a 769 390 10 -a 769 837 8 -a 769 909 5 -a 769 470 5 -a 769 41 6 -a 769 901 1 -a 769 377 9 -a 769 349 4 -a 769 987 2 -a 769 736 7 -a 769 363 4 -a 769 24 4 -a 769 965 3 -a 769 252 9 -a 769 118 3 -a 769 84 8 -a 769 229 7 -a 769 12 7 -a 769 608 7 -a 769 213 8 -a 769 154 5 -a 769 926 3 -a 769 698 9 -a 769 932 5 -a 769 613 3 -a 769 611 1 -a 769 754 8 -a 769 49 4 -a 769 827 3 -a 769 119 2 -a 769 885 9 -a 769 711 5 -a 769 588 5 -a 769 925 2 -a 769 587 2 -a 769 964 7 -a 769 249 4 -a 769 550 8 -a 769 675 5 -a 769 226 10 -a 769 912 9 -a 769 698 7 -a 769 167 1 -a 769 139 9 -a 769 816 3 -a 769 250 5 -a 769 367 6 -a 769 827 3 -a 769 857 9 -a 769 580 3 -a 769 981 7 -a 769 759 2 -a 769 576 4 -a 769 654 6 -a 769 666 4 -a 769 165 10 -a 769 240 9 -a 769 395 2 -a 769 213 9 -a 769 42 9 -a 769 514 4 -a 769 73 7 -a 769 753 1 -a 770 77 8 -a 770 997 1 -a 770 315 3 -a 770 17 9 -a 770 221 10 -a 770 864 7 -a 770 691 1 -a 770 447 2 -a 770 751 10 -a 770 365 2 -a 770 613 5 -a 770 889 5 -a 770 156 8 -a 770 862 9 -a 770 232 8 -a 770 982 5 -a 770 695 3 -a 770 811 4 -a 770 938 10 -a 770 429 1 -a 770 362 1 -a 770 567 6 -a 770 70 9 -a 770 526 4 -a 770 806 3 -a 770 464 4 -a 770 738 3 -a 770 848 3 -a 770 977 5 -a 770 810 5 -a 770 576 10 -a 770 30 9 -a 770 782 8 -a 770 890 2 -a 770 46 8 -a 770 730 3 -a 770 736 10 -a 770 425 7 -a 770 456 9 -a 770 76 10 -a 770 13 6 -a 770 321 4 -a 770 231 6 -a 770 874 8 -a 770 552 5 -a 770 189 1 -a 770 544 2 -a 770 338 4 -a 770 102 6 -a 770 972 7 -a 770 699 4 -a 770 669 8 -a 770 17 6 -a 770 201 7 -a 770 450 1 -a 770 481 4 -a 770 938 7 -a 770 273 2 -a 770 433 1 -a 770 724 7 -a 770 848 8 -a 770 462 8 -a 770 481 4 -a 770 714 7 -a 770 507 6 -a 770 459 2 -a 770 419 6 -a 770 219 6 -a 770 883 3 -a 770 874 10 -a 770 294 2 -a 770 895 8 -a 770 170 6 -a 770 525 8 -a 770 745 6 -a 770 721 10 -a 770 713 10 -a 770 264 2 -a 770 34 9 -a 770 814 2 -a 770 212 4 -a 770 733 6 -a 770 458 9 -a 770 228 5 -a 770 933 2 -a 770 908 7 -a 770 708 4 -a 770 846 9 -a 770 156 8 -a 770 117 9 -a 770 545 2 -a 771 578 7 -a 771 2 1 -a 771 693 4 -a 771 61 9 -a 771 460 6 -a 771 87 6 -a 771 279 10 -a 771 319 8 -a 771 960 8 -a 771 572 7 -a 771 189 4 -a 771 106 8 -a 771 72 1 -a 771 933 6 -a 771 826 9 -a 771 784 7 -a 771 173 7 -a 771 860 2 -a 771 574 6 -a 771 384 3 -a 771 568 3 -a 771 7 4 -a 771 611 9 -a 771 476 4 -a 771 914 1 -a 771 295 10 -a 771 297 10 -a 771 46 8 -a 771 411 10 -a 771 842 4 -a 771 25 7 -a 771 988 8 -a 771 843 7 -a 771 717 6 -a 771 24 6 -a 771 278 9 -a 771 803 10 -a 771 302 1 -a 771 596 5 -a 771 738 8 -a 771 874 5 -a 771 785 4 -a 771 843 6 -a 771 945 4 -a 771 693 4 -a 771 645 9 -a 771 705 3 -a 771 865 4 -a 771 480 5 -a 771 254 4 -a 771 224 7 -a 771 23 5 -a 771 260 9 -a 771 835 7 -a 771 498 4 -a 771 150 5 -a 771 105 1 -a 771 794 6 -a 771 195 4 -a 771 515 1 -a 771 611 9 -a 771 219 3 -a 771 478 6 -a 771 429 10 -a 771 935 5 -a 771 502 10 -a 771 707 10 -a 771 713 10 -a 771 803 4 -a 771 278 2 -a 771 426 8 -a 771 652 9 -a 771 38 9 -a 771 245 8 -a 771 573 8 -a 771 731 6 -a 771 889 10 -a 771 253 10 -a 771 571 2 -a 771 344 5 -a 771 506 8 -a 771 795 7 -a 771 366 4 -a 771 765 2 -a 771 605 10 -a 771 863 8 -a 771 914 3 -a 771 709 10 -a 771 632 2 -a 771 84 5 -a 771 199 4 -a 771 219 8 -a 771 302 8 -a 771 676 1 -a 771 647 5 -a 771 212 6 -a 771 153 9 -a 771 329 7 -a 771 924 3 -a 771 956 6 -a 771 607 1 -a 771 326 9 -a 771 583 2 -a 771 644 2 -a 771 570 7 -a 771 131 5 -a 771 350 9 -a 771 434 1 -a 772 383 3 -a 772 921 4 -a 772 777 3 -a 772 888 7 -a 772 691 5 -a 772 118 10 -a 772 629 7 -a 772 271 9 -a 772 980 8 -a 772 518 7 -a 772 979 3 -a 772 587 9 -a 772 602 8 -a 772 153 9 -a 772 805 5 -a 772 903 6 -a 772 828 4 -a 772 428 4 -a 772 91 1 -a 772 981 1 -a 772 756 7 -a 772 912 5 -a 772 338 9 -a 772 315 8 -a 772 470 4 -a 772 982 10 -a 772 884 9 -a 772 601 10 -a 772 307 8 -a 772 293 9 -a 772 983 3 -a 772 203 5 -a 772 45 8 -a 772 847 3 -a 772 893 5 -a 772 162 6 -a 772 451 5 -a 772 139 6 -a 772 117 10 -a 772 968 4 -a 772 93 7 -a 772 704 7 -a 772 545 3 -a 772 245 10 -a 772 484 2 -a 772 424 8 -a 772 49 5 -a 772 911 6 -a 772 514 9 -a 772 5 8 -a 772 643 8 -a 772 503 9 -a 772 916 3 -a 772 980 1 -a 772 818 7 -a 772 361 7 -a 772 937 6 -a 772 677 2 -a 772 961 1 -a 772 220 5 -a 772 970 7 -a 772 920 6 -a 772 422 8 -a 772 742 4 -a 772 291 9 -a 772 152 3 -a 772 168 9 -a 772 429 1 -a 772 268 6 -a 772 111 10 -a 772 522 6 -a 772 971 1 -a 772 656 6 -a 772 766 1 -a 772 431 7 -a 772 55 1 -a 772 814 3 -a 772 317 6 -a 772 568 3 -a 772 818 5 -a 772 959 3 -a 772 46 9 -a 772 709 10 -a 772 915 10 -a 772 863 8 -a 772 46 3 -a 772 827 7 -a 772 516 1 -a 772 22 10 -a 772 461 10 -a 772 901 3 -a 772 444 5 -a 772 450 6 -a 772 618 3 -a 772 734 2 -a 772 601 3 -a 772 785 8 -a 772 138 4 -a 772 869 8 -a 772 896 6 -a 772 659 6 -a 772 815 8 -a 772 527 6 -a 772 401 2 -a 772 221 9 -a 773 581 4 -a 773 190 8 -a 773 538 2 -a 773 124 8 -a 773 472 1 -a 773 169 9 -a 773 692 1 -a 773 362 6 -a 773 8 1 -a 773 737 2 -a 773 165 7 -a 773 523 5 -a 773 719 7 -a 773 186 10 -a 773 983 3 -a 773 595 4 -a 773 629 7 -a 773 408 8 -a 773 189 5 -a 773 338 5 -a 773 973 8 -a 773 476 5 -a 773 853 1 -a 773 844 4 -a 773 110 9 -a 773 643 4 -a 773 346 8 -a 773 510 4 -a 773 864 9 -a 773 926 8 -a 773 700 9 -a 773 377 9 -a 773 25 5 -a 773 683 6 -a 773 848 7 -a 773 194 2 -a 773 350 3 -a 773 186 9 -a 773 201 8 -a 773 63 3 -a 773 350 6 -a 773 723 7 -a 773 781 5 -a 773 535 10 -a 773 681 8 -a 773 351 2 -a 773 140 6 -a 773 64 8 -a 773 539 10 -a 773 477 6 -a 773 48 9 -a 773 488 10 -a 773 952 3 -a 773 900 1 -a 773 307 1 -a 773 38 6 -a 773 519 9 -a 773 653 5 -a 773 547 7 -a 773 358 1 -a 773 554 5 -a 773 222 5 -a 773 734 1 -a 773 579 4 -a 773 904 9 -a 773 557 9 -a 773 772 1 -a 773 230 9 -a 773 742 2 -a 773 972 3 -a 773 292 9 -a 773 67 1 -a 773 670 2 -a 773 48 5 -a 773 602 2 -a 773 326 10 -a 773 398 10 -a 773 741 7 -a 773 389 8 -a 773 937 6 -a 773 193 10 -a 773 437 10 -a 773 400 3 -a 773 121 8 -a 773 312 5 -a 773 706 7 -a 773 158 5 -a 773 830 2 -a 773 334 3 -a 773 704 10 -a 773 163 2 -a 773 888 4 -a 774 926 4 -a 774 896 8 -a 774 442 7 -a 774 805 5 -a 774 429 1 -a 774 189 2 -a 774 10 7 -a 774 146 9 -a 774 136 6 -a 774 301 10 -a 774 213 6 -a 774 805 4 -a 774 348 10 -a 774 814 3 -a 774 106 8 -a 774 746 1 -a 774 530 10 -a 774 494 4 -a 774 658 4 -a 774 722 2 -a 774 930 7 -a 774 33 8 -a 774 842 5 -a 774 218 9 -a 774 738 7 -a 774 999 5 -a 774 23 8 -a 774 48 3 -a 774 679 1 -a 774 186 6 -a 774 935 7 -a 774 580 2 -a 774 57 4 -a 774 352 7 -a 774 360 10 -a 774 485 4 -a 774 540 4 -a 774 370 3 -a 774 631 10 -a 774 675 5 -a 774 670 10 -a 774 843 1 -a 774 455 9 -a 774 632 7 -a 774 560 1 -a 774 739 5 -a 774 137 8 -a 774 29 10 -a 774 372 5 -a 774 858 10 -a 774 959 10 -a 774 404 2 -a 774 676 5 -a 774 152 10 -a 774 117 3 -a 774 650 3 -a 774 174 3 -a 774 164 6 -a 774 304 2 -a 774 359 9 -a 774 74 4 -a 774 883 8 -a 774 416 8 -a 774 425 5 -a 774 219 4 -a 774 900 5 -a 774 964 6 -a 774 588 8 -a 774 506 2 -a 774 614 1 -a 774 233 6 -a 774 324 6 -a 774 44 10 -a 774 226 7 -a 774 955 10 -a 774 603 8 -a 774 964 4 -a 774 67 4 -a 774 632 7 -a 774 311 9 -a 774 925 2 -a 774 566 3 -a 774 714 7 -a 774 576 6 -a 774 717 4 -a 774 831 4 -a 774 201 3 -a 774 890 8 -a 774 994 6 -a 774 505 9 -a 774 225 5 -a 775 44 7 -a 775 363 7 -a 775 640 10 -a 775 468 5 -a 775 581 6 -a 775 515 4 -a 775 408 2 -a 775 144 6 -a 775 377 3 -a 775 320 5 -a 775 41 8 -a 775 602 9 -a 775 251 9 -a 775 643 2 -a 775 542 6 -a 775 317 10 -a 775 250 6 -a 775 852 8 -a 775 217 4 -a 775 815 5 -a 775 542 2 -a 775 792 8 -a 775 507 7 -a 775 348 1 -a 775 993 8 -a 775 373 9 -a 775 317 6 -a 775 473 10 -a 775 597 7 -a 775 360 9 -a 775 835 9 -a 775 212 2 -a 775 828 2 -a 775 392 2 -a 775 726 3 -a 775 211 7 -a 775 535 1 -a 775 722 3 -a 775 207 5 -a 775 911 6 -a 775 18 5 -a 775 247 9 -a 775 489 7 -a 775 268 1 -a 775 890 7 -a 775 6 6 -a 775 584 6 -a 775 115 1 -a 775 857 2 -a 775 801 3 -a 775 930 7 -a 775 374 8 -a 775 568 3 -a 775 412 3 -a 775 721 5 -a 775 536 2 -a 775 784 4 -a 775 14 2 -a 775 356 8 -a 775 373 3 -a 775 819 6 -a 775 567 5 -a 775 176 6 -a 775 186 7 -a 775 269 2 -a 775 386 1 -a 775 720 3 -a 775 990 8 -a 775 593 5 -a 775 607 9 -a 775 839 10 -a 775 71 2 -a 775 250 6 -a 775 704 3 -a 775 76 9 -a 775 834 10 -a 775 819 4 -a 775 932 3 -a 775 610 2 -a 775 724 8 -a 775 282 8 -a 775 153 3 -a 775 111 8 -a 775 689 5 -a 775 895 3 -a 775 672 2 -a 775 226 9 -a 775 364 1 -a 775 466 10 -a 775 793 9 -a 775 539 9 -a 775 651 9 -a 775 37 4 -a 775 925 5 -a 775 347 7 -a 775 2 1 -a 775 493 8 -a 775 953 4 -a 775 307 5 -a 775 234 6 -a 775 74 1 -a 776 43 7 -a 776 805 9 -a 776 652 3 -a 776 504 1 -a 776 262 6 -a 776 805 6 -a 776 614 2 -a 776 240 4 -a 776 469 7 -a 776 484 10 -a 776 230 1 -a 776 116 3 -a 776 710 10 -a 776 593 8 -a 776 582 6 -a 776 478 8 -a 776 108 7 -a 776 208 8 -a 776 514 7 -a 776 8 4 -a 776 554 9 -a 776 515 4 -a 776 500 7 -a 776 482 3 -a 776 499 9 -a 776 806 2 -a 776 480 1 -a 776 733 5 -a 776 792 7 -a 776 553 7 -a 776 775 1 -a 776 572 8 -a 776 534 3 -a 776 403 9 -a 776 51 8 -a 776 795 3 -a 776 183 6 -a 776 665 7 -a 776 10 3 -a 776 651 1 -a 776 124 1 -a 776 240 4 -a 776 766 9 -a 776 833 8 -a 776 832 1 -a 776 323 3 -a 776 286 5 -a 776 939 3 -a 776 531 4 -a 776 799 9 -a 776 946 6 -a 776 60 4 -a 776 290 8 -a 776 421 6 -a 776 542 1 -a 776 788 5 -a 776 203 6 -a 776 496 10 -a 776 994 8 -a 776 550 10 -a 776 247 4 -a 776 542 2 -a 776 59 9 -a 776 649 2 -a 776 592 3 -a 776 853 8 -a 776 831 5 -a 776 232 1 -a 776 863 6 -a 776 457 5 -a 776 356 2 -a 776 78 3 -a 776 198 5 -a 776 164 4 -a 776 909 1 -a 776 521 9 -a 776 450 7 -a 776 824 7 -a 776 27 4 -a 776 224 5 -a 776 745 2 -a 776 86 4 -a 776 513 7 -a 776 142 6 -a 776 627 1 -a 776 277 10 -a 776 344 2 -a 776 624 8 -a 776 772 6 -a 776 313 7 -a 776 149 5 -a 776 854 10 -a 776 207 9 -a 776 642 7 -a 776 422 5 -a 777 35 6 -a 777 448 2 -a 777 653 5 -a 777 897 3 -a 777 904 10 -a 777 974 10 -a 777 78 10 -a 777 148 6 -a 777 859 9 -a 777 598 10 -a 777 597 9 -a 777 658 1 -a 777 624 3 -a 777 820 9 -a 777 378 10 -a 777 709 6 -a 777 309 2 -a 777 519 1 -a 777 312 9 -a 777 585 1 -a 777 862 9 -a 777 935 6 -a 777 332 10 -a 777 151 1 -a 777 59 9 -a 777 326 3 -a 777 265 1 -a 777 967 2 -a 777 401 6 -a 777 299 10 -a 777 391 8 -a 777 30 4 -a 777 172 2 -a 777 270 3 -a 777 13 4 -a 777 121 1 -a 777 347 6 -a 777 160 7 -a 777 979 6 -a 777 944 1 -a 777 756 2 -a 777 612 6 -a 777 543 8 -a 777 552 2 -a 777 990 2 -a 777 228 6 -a 777 860 8 -a 777 484 9 -a 777 539 7 -a 777 420 4 -a 777 322 7 -a 777 449 1 -a 777 751 4 -a 777 472 10 -a 777 507 1 -a 777 52 7 -a 777 451 7 -a 777 771 4 -a 777 852 6 -a 777 45 1 -a 777 385 9 -a 777 881 6 -a 777 216 10 -a 777 654 7 -a 777 893 9 -a 777 337 1 -a 777 29 8 -a 777 291 7 -a 777 920 4 -a 777 784 4 -a 777 903 2 -a 777 439 1 -a 777 311 3 -a 777 868 1 -a 777 666 10 -a 777 146 3 -a 777 327 1 -a 777 180 9 -a 777 565 9 -a 777 648 4 -a 777 628 10 -a 777 292 4 -a 777 95 9 -a 777 110 6 -a 777 343 1 -a 777 546 8 -a 777 880 6 -a 777 337 1 -a 777 373 9 -a 777 924 8 -a 777 721 10 -a 777 229 9 -a 777 116 8 -a 777 351 9 -a 777 97 1 -a 777 452 8 -a 777 327 1 -a 777 125 7 -a 777 742 5 -a 777 222 5 -a 777 909 9 -a 777 620 1 -a 777 660 9 -a 778 195 1 -a 778 463 6 -a 778 301 7 -a 778 341 7 -a 778 790 4 -a 778 480 4 -a 778 905 4 -a 778 413 9 -a 778 83 5 -a 778 172 7 -a 778 508 7 -a 778 192 1 -a 778 515 8 -a 778 29 6 -a 778 47 8 -a 778 851 5 -a 778 401 6 -a 778 971 10 -a 778 548 2 -a 778 629 2 -a 778 62 8 -a 778 898 8 -a 778 725 6 -a 778 513 1 -a 778 200 10 -a 778 850 10 -a 778 230 9 -a 778 421 2 -a 778 734 1 -a 778 850 7 -a 778 57 6 -a 778 928 1 -a 778 288 10 -a 778 357 10 -a 778 244 9 -a 778 53 5 -a 778 837 7 -a 778 125 6 -a 778 466 2 -a 778 919 4 -a 778 296 7 -a 778 973 7 -a 778 87 8 -a 778 810 5 -a 778 133 1 -a 778 637 6 -a 778 377 9 -a 778 79 3 -a 778 160 2 -a 778 140 8 -a 778 33 1 -a 778 705 2 -a 778 652 7 -a 778 232 2 -a 778 530 5 -a 778 882 5 -a 778 652 10 -a 778 239 9 -a 778 707 1 -a 778 708 3 -a 778 143 7 -a 778 994 1 -a 778 41 2 -a 778 386 6 -a 778 23 2 -a 778 877 5 -a 778 510 7 -a 778 488 4 -a 778 771 6 -a 778 806 4 -a 778 436 7 -a 778 857 7 -a 778 591 8 -a 778 412 3 -a 778 990 7 -a 778 203 1 -a 778 788 9 -a 778 44 5 -a 778 362 9 -a 778 768 2 -a 778 184 5 -a 778 394 2 -a 778 448 6 -a 778 835 6 -a 778 625 6 -a 778 978 9 -a 778 692 3 -a 778 253 2 -a 778 192 4 -a 778 374 6 -a 778 960 5 -a 779 334 4 -a 779 344 1 -a 779 1000 3 -a 779 720 10 -a 779 366 1 -a 779 852 2 -a 779 205 4 -a 779 853 10 -a 779 599 8 -a 779 264 6 -a 779 431 9 -a 779 577 5 -a 779 675 3 -a 779 396 10 -a 779 779 10 -a 779 438 8 -a 779 440 10 -a 779 117 3 -a 779 181 10 -a 779 623 8 -a 779 510 6 -a 779 628 10 -a 779 433 3 -a 779 111 5 -a 779 581 7 -a 779 101 2 -a 779 363 7 -a 779 773 7 -a 779 474 5 -a 779 298 4 -a 779 82 9 -a 779 817 8 -a 779 274 8 -a 779 801 2 -a 779 158 1 -a 779 101 5 -a 779 699 10 -a 779 991 7 -a 779 249 6 -a 779 106 9 -a 779 543 4 -a 779 923 2 -a 779 501 3 -a 779 298 1 -a 779 336 6 -a 779 940 9 -a 779 414 2 -a 779 516 4 -a 779 538 7 -a 779 923 8 -a 779 120 2 -a 779 971 1 -a 779 9 5 -a 779 700 5 -a 779 47 4 -a 779 371 4 -a 779 448 5 -a 779 520 6 -a 779 669 6 -a 779 530 4 -a 779 313 5 -a 779 942 7 -a 779 306 8 -a 779 470 7 -a 779 18 2 -a 779 287 9 -a 779 456 5 -a 779 717 6 -a 779 254 3 -a 779 704 2 -a 779 822 2 -a 779 796 2 -a 779 603 6 -a 779 298 2 -a 779 69 9 -a 779 938 6 -a 779 214 4 -a 779 482 4 -a 779 430 9 -a 779 751 2 -a 779 381 9 -a 779 549 4 -a 779 697 3 -a 779 389 2 -a 779 224 9 -a 779 743 10 -a 779 760 8 -a 779 672 10 -a 779 239 10 -a 779 404 1 -a 779 177 1 -a 779 551 2 -a 779 321 6 -a 779 482 1 -a 779 338 4 -a 779 769 4 -a 779 451 2 -a 780 30 3 -a 780 131 6 -a 780 851 1 -a 780 793 1 -a 780 733 4 -a 780 125 2 -a 780 862 4 -a 780 646 10 -a 780 338 6 -a 780 319 9 -a 780 51 5 -a 780 64 8 -a 780 699 5 -a 780 599 8 -a 780 761 8 -a 780 64 6 -a 780 823 6 -a 780 479 6 -a 780 823 10 -a 780 470 9 -a 780 717 7 -a 780 202 4 -a 780 646 2 -a 780 243 3 -a 780 522 1 -a 780 103 8 -a 780 239 5 -a 780 859 8 -a 780 871 9 -a 780 689 8 -a 780 889 2 -a 780 868 9 -a 780 819 2 -a 780 715 8 -a 780 637 7 -a 780 527 8 -a 780 839 3 -a 780 474 4 -a 780 149 2 -a 780 152 10 -a 780 792 5 -a 780 199 1 -a 780 216 7 -a 780 467 2 -a 780 798 3 -a 780 976 5 -a 780 530 2 -a 780 596 1 -a 780 430 5 -a 780 328 6 -a 780 41 2 -a 780 123 8 -a 780 529 9 -a 780 686 1 -a 780 365 2 -a 780 26 3 -a 780 788 5 -a 780 603 1 -a 780 884 5 -a 780 635 3 -a 780 268 4 -a 780 748 6 -a 780 478 9 -a 780 62 6 -a 780 439 2 -a 780 90 10 -a 780 589 8 -a 780 253 6 -a 780 563 9 -a 780 737 1 -a 780 405 9 -a 780 331 10 -a 780 935 5 -a 780 620 2 -a 780 797 5 -a 780 708 9 -a 780 571 2 -a 780 302 7 -a 780 279 9 -a 780 1000 1 -a 780 629 5 -a 780 319 4 -a 780 98 9 -a 780 133 10 -a 780 463 6 -a 780 158 2 -a 780 768 2 -a 780 41 10 -a 780 17 4 -a 780 378 6 -a 780 308 7 -a 780 765 2 -a 780 855 3 -a 781 370 6 -a 781 179 1 -a 781 945 10 -a 781 958 8 -a 781 431 9 -a 781 483 2 -a 781 670 2 -a 781 835 6 -a 781 813 10 -a 781 580 6 -a 781 430 4 -a 781 585 2 -a 781 264 8 -a 781 1000 8 -a 781 886 6 -a 781 542 7 -a 781 976 6 -a 781 490 10 -a 781 861 7 -a 781 49 4 -a 781 622 7 -a 781 840 4 -a 781 511 10 -a 781 779 10 -a 781 583 1 -a 781 552 8 -a 781 796 7 -a 781 960 2 -a 781 859 7 -a 781 536 5 -a 781 791 2 -a 781 204 5 -a 781 714 1 -a 781 711 9 -a 781 137 2 -a 781 120 4 -a 781 169 2 -a 781 806 5 -a 781 955 4 -a 781 982 5 -a 781 362 6 -a 781 360 4 -a 781 542 8 -a 781 625 7 -a 781 336 2 -a 781 404 7 -a 781 142 2 -a 781 287 7 -a 781 893 10 -a 781 335 2 -a 781 491 10 -a 781 818 1 -a 781 846 3 -a 781 245 1 -a 781 376 6 -a 781 373 6 -a 781 16 3 -a 781 312 3 -a 781 207 1 -a 781 551 10 -a 781 78 9 -a 781 411 3 -a 781 240 4 -a 781 788 9 -a 781 547 5 -a 781 360 4 -a 781 956 7 -a 781 329 2 -a 781 290 9 -a 781 913 2 -a 781 690 7 -a 781 649 2 -a 781 431 10 -a 781 290 7 -a 781 984 2 -a 781 834 6 -a 781 431 7 -a 781 246 1 -a 781 702 8 -a 781 409 8 -a 781 581 10 -a 781 168 1 -a 781 202 10 -a 781 402 9 -a 781 413 7 -a 781 577 7 -a 781 774 5 -a 781 428 6 -a 781 888 3 -a 781 980 10 -a 781 979 9 -a 781 965 5 -a 781 366 5 -a 781 194 2 -a 781 728 3 -a 781 913 7 -a 781 553 5 -a 781 660 4 -a 781 217 5 -a 781 842 10 -a 781 548 7 -a 781 906 5 -a 781 467 10 -a 781 978 9 -a 781 171 3 -a 781 426 8 -a 781 787 6 -a 781 601 8 -a 781 672 1 -a 781 465 4 -a 781 228 2 -a 781 632 2 -a 782 186 1 -a 782 629 8 -a 782 20 7 -a 782 763 4 -a 782 378 6 -a 782 448 2 -a 782 626 1 -a 782 333 4 -a 782 402 7 -a 782 567 10 -a 782 699 10 -a 782 595 1 -a 782 270 7 -a 782 587 8 -a 782 124 5 -a 782 929 8 -a 782 803 10 -a 782 965 6 -a 782 453 5 -a 782 684 9 -a 782 407 5 -a 782 406 1 -a 782 854 7 -a 782 833 6 -a 782 169 2 -a 782 430 7 -a 782 480 8 -a 782 633 3 -a 782 415 10 -a 782 707 6 -a 782 240 4 -a 782 600 2 -a 782 311 6 -a 782 260 10 -a 782 338 10 -a 782 688 7 -a 782 707 3 -a 782 964 9 -a 782 84 6 -a 782 506 9 -a 782 694 7 -a 782 678 10 -a 782 775 5 -a 782 256 5 -a 782 801 5 -a 782 680 3 -a 782 34 7 -a 782 742 6 -a 782 108 1 -a 782 717 7 -a 782 124 7 -a 782 513 6 -a 782 546 3 -a 782 956 6 -a 782 681 6 -a 782 976 5 -a 782 411 5 -a 782 289 4 -a 782 366 8 -a 782 93 3 -a 782 529 9 -a 782 965 2 -a 782 403 6 -a 782 788 1 -a 782 279 6 -a 782 66 8 -a 782 470 7 -a 782 218 1 -a 782 62 7 -a 782 553 5 -a 782 723 6 -a 782 755 7 -a 782 206 5 -a 782 473 1 -a 782 128 8 -a 782 20 2 -a 782 724 6 -a 782 235 10 -a 782 737 9 -a 782 847 4 -a 782 748 8 -a 782 258 4 -a 782 779 2 -a 782 404 5 -a 782 209 9 -a 782 165 3 -a 782 693 5 -a 782 574 7 -a 782 258 6 -a 782 197 1 -a 782 515 2 -a 782 660 1 -a 782 984 6 -a 783 793 4 -a 783 726 6 -a 783 429 1 -a 783 787 9 -a 783 981 3 -a 783 708 1 -a 783 517 9 -a 783 162 6 -a 783 156 7 -a 783 503 1 -a 783 144 5 -a 783 284 2 -a 783 523 6 -a 783 867 9 -a 783 518 8 -a 783 235 9 -a 783 690 8 -a 783 241 6 -a 783 492 3 -a 783 444 5 -a 783 645 1 -a 783 701 3 -a 783 608 5 -a 783 313 5 -a 783 250 5 -a 783 865 7 -a 783 509 10 -a 783 764 4 -a 783 501 2 -a 783 468 3 -a 783 532 10 -a 783 202 6 -a 783 896 7 -a 783 517 8 -a 783 988 6 -a 783 852 4 -a 783 200 5 -a 783 480 9 -a 783 356 10 -a 783 983 2 -a 783 133 2 -a 783 639 9 -a 783 481 5 -a 783 999 3 -a 783 132 2 -a 783 715 5 -a 783 664 9 -a 783 373 4 -a 783 182 2 -a 783 83 6 -a 783 882 8 -a 783 691 5 -a 783 305 8 -a 783 108 8 -a 783 531 2 -a 783 813 2 -a 783 871 5 -a 783 7 1 -a 783 256 7 -a 783 379 10 -a 783 208 10 -a 783 127 1 -a 783 895 4 -a 783 171 3 -a 783 978 4 -a 783 71 4 -a 783 651 8 -a 783 966 5 -a 783 426 3 -a 783 609 9 -a 783 74 7 -a 783 40 8 -a 783 65 5 -a 783 49 7 -a 783 171 2 -a 783 779 8 -a 783 712 4 -a 783 543 8 -a 783 960 5 -a 783 795 4 -a 783 535 2 -a 783 818 2 -a 783 461 1 -a 783 839 6 -a 783 925 4 -a 783 991 10 -a 783 627 2 -a 783 771 5 -a 783 998 6 -a 783 882 6 -a 783 125 8 -a 783 181 2 -a 783 352 3 -a 783 961 4 -a 783 66 2 -a 783 903 3 -a 784 491 1 -a 784 586 7 -a 784 976 8 -a 784 530 2 -a 784 650 10 -a 784 700 3 -a 784 404 3 -a 784 712 3 -a 784 219 1 -a 784 339 10 -a 784 482 4 -a 784 753 3 -a 784 132 5 -a 784 942 8 -a 784 568 3 -a 784 32 6 -a 784 908 2 -a 784 170 8 -a 784 803 8 -a 784 881 5 -a 784 28 10 -a 784 927 10 -a 784 38 5 -a 784 11 6 -a 784 922 7 -a 784 389 10 -a 784 972 10 -a 784 987 5 -a 784 366 5 -a 784 850 6 -a 784 453 10 -a 784 951 8 -a 784 801 9 -a 784 982 7 -a 784 576 9 -a 784 801 7 -a 784 658 8 -a 784 979 10 -a 784 488 9 -a 784 876 4 -a 784 293 1 -a 784 969 10 -a 784 604 1 -a 784 425 2 -a 784 886 10 -a 784 147 9 -a 784 456 3 -a 784 769 10 -a 784 317 2 -a 784 234 7 -a 784 626 6 -a 784 344 7 -a 784 137 2 -a 784 663 4 -a 784 354 3 -a 784 34 5 -a 784 27 4 -a 784 301 9 -a 784 392 5 -a 784 126 3 -a 784 449 9 -a 784 318 1 -a 784 927 2 -a 784 407 2 -a 784 893 8 -a 784 703 7 -a 784 40 9 -a 784 847 3 -a 784 166 6 -a 784 915 8 -a 784 115 8 -a 784 110 7 -a 784 494 4 -a 784 539 1 -a 784 995 8 -a 784 641 10 -a 784 995 6 -a 784 739 4 -a 784 957 7 -a 784 204 3 -a 784 340 3 -a 784 276 3 -a 784 340 1 -a 784 629 5 -a 784 374 9 -a 784 4 4 -a 784 930 7 -a 784 370 10 -a 784 395 7 -a 784 31 1 -a 784 818 10 -a 784 712 2 -a 784 957 8 -a 784 200 8 -a 784 580 5 -a 784 635 6 -a 784 239 1 -a 784 402 10 -a 784 800 9 -a 784 129 1 -a 784 517 8 -a 784 909 10 -a 784 623 2 -a 784 31 8 -a 784 879 2 -a 785 239 4 -a 785 1 9 -a 785 594 7 -a 785 171 2 -a 785 205 2 -a 785 933 2 -a 785 446 2 -a 785 544 5 -a 785 911 7 -a 785 50 2 -a 785 917 6 -a 785 914 6 -a 785 979 7 -a 785 262 9 -a 785 285 1 -a 785 56 1 -a 785 996 10 -a 785 942 8 -a 785 255 10 -a 785 552 3 -a 785 553 9 -a 785 494 2 -a 785 953 3 -a 785 328 3 -a 785 622 1 -a 785 445 2 -a 785 213 5 -a 785 220 7 -a 785 476 5 -a 785 67 7 -a 785 458 9 -a 785 476 2 -a 785 660 4 -a 785 628 4 -a 785 680 5 -a 785 569 2 -a 785 49 3 -a 785 200 1 -a 785 455 2 -a 785 99 1 -a 785 92 7 -a 785 344 6 -a 785 53 4 -a 785 354 1 -a 785 628 9 -a 785 38 3 -a 785 409 8 -a 785 600 10 -a 785 980 6 -a 785 663 2 -a 785 127 9 -a 785 508 4 -a 785 132 8 -a 785 55 3 -a 785 835 6 -a 785 754 10 -a 785 500 1 -a 785 23 3 -a 785 973 4 -a 785 975 7 -a 785 90 4 -a 785 407 5 -a 785 426 2 -a 785 749 9 -a 785 10 1 -a 785 82 5 -a 785 293 7 -a 785 59 2 -a 785 281 3 -a 785 747 6 -a 785 157 6 -a 785 372 5 -a 785 67 3 -a 785 209 5 -a 785 725 10 -a 785 694 5 -a 785 247 2 -a 785 109 7 -a 785 269 6 -a 785 202 5 -a 785 772 1 -a 785 395 3 -a 785 709 8 -a 785 903 1 -a 785 450 5 -a 785 519 5 -a 785 632 10 -a 785 949 3 -a 785 542 7 -a 785 581 3 -a 785 899 3 -a 785 631 8 -a 785 987 2 -a 785 300 4 -a 785 355 7 -a 786 996 9 -a 786 381 8 -a 786 648 7 -a 786 30 3 -a 786 661 4 -a 786 370 6 -a 786 186 4 -a 786 9 9 -a 786 436 4 -a 786 395 5 -a 786 733 5 -a 786 106 3 -a 786 641 9 -a 786 842 4 -a 786 374 7 -a 786 842 3 -a 786 589 6 -a 786 769 1 -a 786 526 2 -a 786 467 3 -a 786 194 9 -a 786 20 7 -a 786 75 6 -a 786 118 6 -a 786 561 9 -a 786 655 2 -a 786 167 8 -a 786 617 3 -a 786 291 5 -a 786 522 7 -a 786 588 7 -a 786 672 4 -a 786 145 10 -a 786 618 6 -a 786 308 10 -a 786 514 6 -a 786 803 1 -a 786 316 8 -a 786 950 9 -a 786 173 9 -a 786 25 8 -a 786 31 10 -a 786 813 9 -a 786 866 5 -a 786 404 8 -a 786 630 9 -a 786 430 3 -a 786 148 5 -a 786 131 3 -a 786 896 4 -a 786 341 5 -a 786 151 8 -a 786 970 7 -a 786 458 5 -a 786 711 4 -a 786 600 4 -a 786 449 6 -a 786 878 4 -a 786 192 3 -a 786 740 9 -a 786 375 8 -a 786 780 2 -a 786 387 8 -a 786 519 9 -a 786 373 2 -a 786 694 1 -a 786 8 9 -a 786 151 6 -a 786 957 9 -a 786 324 7 -a 786 10 10 -a 786 987 4 -a 786 112 1 -a 786 875 9 -a 786 367 7 -a 786 742 5 -a 786 280 10 -a 786 514 5 -a 786 872 2 -a 786 151 6 -a 786 855 7 -a 786 97 9 -a 786 288 7 -a 786 709 6 -a 786 696 6 -a 786 737 4 -a 786 562 7 -a 786 888 7 -a 786 452 5 -a 786 936 4 -a 786 643 5 -a 786 838 6 -a 786 430 9 -a 786 507 10 -a 786 437 8 -a 786 141 5 -a 786 492 4 -a 786 370 9 -a 786 464 10 -a 786 501 9 -a 786 332 7 -a 786 576 4 -a 786 351 5 -a 786 698 4 -a 786 293 7 -a 786 630 10 -a 787 188 2 -a 787 140 7 -a 787 781 8 -a 787 18 2 -a 787 138 1 -a 787 877 5 -a 787 305 9 -a 787 846 6 -a 787 548 4 -a 787 17 1 -a 787 383 10 -a 787 411 7 -a 787 468 9 -a 787 294 3 -a 787 29 6 -a 787 281 1 -a 787 723 9 -a 787 19 3 -a 787 788 7 -a 787 135 6 -a 787 160 4 -a 787 255 4 -a 787 504 4 -a 787 623 10 -a 787 756 5 -a 787 836 7 -a 787 174 9 -a 787 82 5 -a 787 509 7 -a 787 466 5 -a 787 712 9 -a 787 696 10 -a 787 606 3 -a 787 468 2 -a 787 713 8 -a 787 743 5 -a 787 320 8 -a 787 564 9 -a 787 867 10 -a 787 10 8 -a 787 946 4 -a 787 254 8 -a 787 478 2 -a 787 215 8 -a 787 282 1 -a 787 758 3 -a 787 937 10 -a 787 301 4 -a 787 521 10 -a 787 47 9 -a 787 460 7 -a 787 776 8 -a 787 551 8 -a 787 58 9 -a 787 507 10 -a 787 362 1 -a 787 232 7 -a 787 588 10 -a 787 870 10 -a 787 697 9 -a 787 275 8 -a 787 542 4 -a 787 278 8 -a 787 742 10 -a 787 230 5 -a 787 37 4 -a 787 223 2 -a 787 559 10 -a 787 904 8 -a 787 233 1 -a 787 480 3 -a 787 133 10 -a 787 710 1 -a 787 694 10 -a 787 414 8 -a 787 443 6 -a 787 606 4 -a 787 714 5 -a 787 964 3 -a 787 653 9 -a 787 149 10 -a 787 715 6 -a 787 179 5 -a 787 207 10 -a 787 197 9 -a 787 540 10 -a 787 438 5 -a 787 784 8 -a 787 385 1 -a 787 110 6 -a 787 35 10 -a 787 926 9 -a 787 388 2 -a 787 776 6 -a 787 132 2 -a 787 383 7 -a 787 813 2 -a 787 354 6 -a 787 942 7 -a 787 692 2 -a 787 586 6 -a 787 397 3 -a 787 824 1 -a 787 271 4 -a 787 67 1 -a 787 213 4 -a 787 714 4 -a 787 672 6 -a 788 927 3 -a 788 653 4 -a 788 300 7 -a 788 51 8 -a 788 343 7 -a 788 478 3 -a 788 257 2 -a 788 539 1 -a 788 694 8 -a 788 298 3 -a 788 378 7 -a 788 804 9 -a 788 332 2 -a 788 279 9 -a 788 167 5 -a 788 84 3 -a 788 410 2 -a 788 549 5 -a 788 896 1 -a 788 764 8 -a 788 466 1 -a 788 563 3 -a 788 325 6 -a 788 863 2 -a 788 362 6 -a 788 596 8 -a 788 929 2 -a 788 574 3 -a 788 285 4 -a 788 576 5 -a 788 476 7 -a 788 937 6 -a 788 876 1 -a 788 527 5 -a 788 255 3 -a 788 329 6 -a 788 783 9 -a 788 793 2 -a 788 322 2 -a 788 453 9 -a 788 66 2 -a 788 699 9 -a 788 232 7 -a 788 398 1 -a 788 977 1 -a 788 398 5 -a 788 481 4 -a 788 363 10 -a 788 946 5 -a 788 352 4 -a 788 102 8 -a 788 388 9 -a 788 914 3 -a 788 426 9 -a 788 226 7 -a 788 251 6 -a 788 130 8 -a 788 824 7 -a 788 281 3 -a 788 705 5 -a 788 276 1 -a 788 193 10 -a 788 556 1 -a 788 802 1 -a 788 447 8 -a 788 885 2 -a 788 560 10 -a 788 215 4 -a 788 182 10 -a 788 281 4 -a 788 880 10 -a 788 219 2 -a 788 678 10 -a 788 832 1 -a 788 616 3 -a 788 134 3 -a 788 170 7 -a 788 538 3 -a 788 485 3 -a 788 271 2 -a 788 925 3 -a 788 374 1 -a 788 697 7 -a 788 126 3 -a 788 624 6 -a 788 693 6 -a 788 255 9 -a 788 423 2 -a 788 974 2 -a 788 959 3 -a 788 698 6 -a 788 142 3 -a 789 491 5 -a 789 475 3 -a 789 589 4 -a 789 351 6 -a 789 11 2 -a 789 803 3 -a 789 532 7 -a 789 59 4 -a 789 387 6 -a 789 217 4 -a 789 736 2 -a 789 194 8 -a 789 832 1 -a 789 869 4 -a 789 364 10 -a 789 345 5 -a 789 329 6 -a 789 634 10 -a 789 245 8 -a 789 702 4 -a 789 306 10 -a 789 370 1 -a 789 301 7 -a 789 999 2 -a 789 624 10 -a 789 724 7 -a 789 948 1 -a 789 559 4 -a 789 397 10 -a 789 65 2 -a 789 25 8 -a 789 872 6 -a 789 653 9 -a 789 375 10 -a 789 882 10 -a 789 432 3 -a 789 906 9 -a 789 879 3 -a 789 490 8 -a 789 268 2 -a 789 71 10 -a 789 202 2 -a 789 461 5 -a 789 903 3 -a 789 46 6 -a 789 824 9 -a 789 223 1 -a 789 375 5 -a 789 434 2 -a 789 468 7 -a 789 52 6 -a 789 739 3 -a 789 837 9 -a 789 353 7 -a 789 713 4 -a 789 437 1 -a 789 52 9 -a 789 636 8 -a 789 995 2 -a 789 448 2 -a 789 701 9 -a 789 295 4 -a 789 329 10 -a 789 369 5 -a 789 152 8 -a 789 760 4 -a 789 250 9 -a 789 7 2 -a 789 226 2 -a 789 517 5 -a 789 77 6 -a 789 427 4 -a 789 977 8 -a 789 979 6 -a 789 472 8 -a 789 777 7 -a 789 178 3 -a 789 846 8 -a 789 186 2 -a 789 645 1 -a 789 898 6 -a 789 924 7 -a 789 457 9 -a 789 226 2 -a 789 613 1 -a 789 893 1 -a 789 277 5 -a 789 224 2 -a 789 863 2 -a 789 724 2 -a 789 924 7 -a 789 857 3 -a 789 229 9 -a 789 201 2 -a 789 146 1 -a 789 988 9 -a 789 450 8 -a 789 152 3 -a 789 189 7 -a 789 966 8 -a 789 229 3 -a 789 615 3 -a 789 919 9 -a 790 183 9 -a 790 63 1 -a 790 671 10 -a 790 360 5 -a 790 908 1 -a 790 856 2 -a 790 781 2 -a 790 755 3 -a 790 437 9 -a 790 343 1 -a 790 305 4 -a 790 258 2 -a 790 567 9 -a 790 144 3 -a 790 982 7 -a 790 466 10 -a 790 1000 5 -a 790 976 8 -a 790 694 6 -a 790 177 5 -a 790 97 10 -a 790 658 3 -a 790 626 3 -a 790 249 2 -a 790 846 5 -a 790 568 7 -a 790 477 4 -a 790 437 2 -a 790 462 8 -a 790 659 2 -a 790 499 4 -a 790 108 10 -a 790 382 10 -a 790 963 6 -a 790 998 1 -a 790 139 4 -a 790 693 5 -a 790 410 2 -a 790 120 7 -a 790 12 2 -a 790 715 8 -a 790 378 2 -a 790 578 2 -a 790 858 6 -a 790 335 1 -a 790 19 8 -a 790 833 7 -a 790 286 4 -a 790 713 1 -a 790 382 7 -a 790 346 7 -a 790 611 6 -a 790 630 6 -a 790 167 2 -a 790 154 3 -a 790 82 4 -a 790 603 3 -a 790 615 1 -a 790 741 1 -a 790 77 9 -a 790 722 9 -a 790 735 6 -a 790 459 7 -a 790 660 3 -a 790 708 10 -a 790 597 3 -a 790 328 3 -a 790 94 1 -a 790 716 3 -a 790 339 6 -a 790 808 10 -a 790 69 1 -a 790 916 4 -a 790 641 6 -a 790 403 6 -a 790 935 5 -a 790 449 8 -a 790 688 3 -a 790 623 8 -a 790 434 8 -a 790 46 6 -a 790 968 8 -a 790 20 4 -a 790 675 4 -a 790 110 9 -a 790 173 1 -a 790 757 1 -a 790 713 6 -a 790 787 3 -a 790 473 6 -a 790 789 8 -a 790 484 5 -a 790 183 5 -a 790 223 4 -a 790 119 5 -a 790 890 7 -a 790 819 10 -a 790 446 5 -a 790 983 2 -a 790 511 7 -a 790 785 3 -a 790 766 9 -a 790 579 3 -a 790 676 7 -a 790 382 3 -a 790 982 7 -a 790 586 5 -a 790 831 5 -a 790 645 2 -a 790 184 4 -a 790 240 10 -a 790 690 3 -a 790 127 1 -a 790 259 10 -a 790 341 7 -a 791 237 6 -a 791 431 4 -a 791 73 4 -a 791 949 4 -a 791 193 8 -a 791 545 5 -a 791 713 2 -a 791 676 10 -a 791 727 8 -a 791 936 9 -a 791 794 8 -a 791 592 4 -a 791 730 4 -a 791 215 6 -a 791 551 5 -a 791 216 1 -a 791 999 7 -a 791 292 3 -a 791 795 1 -a 791 651 7 -a 791 674 4 -a 791 752 9 -a 791 212 5 -a 791 480 6 -a 791 372 9 -a 791 396 6 -a 791 719 10 -a 791 38 5 -a 791 522 5 -a 791 977 9 -a 791 378 3 -a 791 758 6 -a 791 383 7 -a 791 450 3 -a 791 682 4 -a 791 575 4 -a 791 994 6 -a 791 371 4 -a 791 226 8 -a 791 696 9 -a 791 282 9 -a 791 263 5 -a 791 209 7 -a 791 813 4 -a 791 203 10 -a 791 184 7 -a 791 81 5 -a 791 997 10 -a 791 834 9 -a 791 754 7 -a 791 724 1 -a 791 21 9 -a 791 209 9 -a 791 71 6 -a 791 416 6 -a 791 927 9 -a 791 108 2 -a 791 938 10 -a 791 879 9 -a 791 485 4 -a 791 671 1 -a 791 237 5 -a 791 934 3 -a 791 329 5 -a 791 811 7 -a 791 903 9 -a 791 699 6 -a 791 12 5 -a 791 574 6 -a 791 980 5 -a 791 6 10 -a 791 837 6 -a 791 966 2 -a 791 214 8 -a 791 625 4 -a 791 144 1 -a 791 397 1 -a 791 705 9 -a 791 116 8 -a 791 206 1 -a 791 434 9 -a 791 839 3 -a 791 227 6 -a 791 642 9 -a 791 910 2 -a 791 642 8 -a 791 544 5 -a 791 555 9 -a 791 398 9 -a 791 478 3 -a 791 202 5 -a 791 634 3 -a 791 387 7 -a 791 530 4 -a 791 420 2 -a 791 266 1 -a 791 204 7 -a 791 431 8 -a 791 839 5 -a 791 159 6 -a 791 436 10 -a 791 651 2 -a 791 100 7 -a 791 650 3 -a 791 252 2 -a 791 244 1 -a 791 22 7 -a 791 956 2 -a 791 359 9 -a 791 228 6 -a 791 366 4 -a 791 174 6 -a 791 454 7 -a 791 59 2 -a 791 71 1 -a 791 527 3 -a 791 51 4 -a 791 626 4 -a 791 924 4 -a 791 528 3 -a 791 827 8 -a 791 534 8 -a 791 915 10 -a 791 332 10 -a 791 953 2 -a 791 156 4 -a 792 535 7 -a 792 360 6 -a 792 994 6 -a 792 693 10 -a 792 795 10 -a 792 621 1 -a 792 792 6 -a 792 420 8 -a 792 872 9 -a 792 11 2 -a 792 442 5 -a 792 803 9 -a 792 370 4 -a 792 669 9 -a 792 144 4 -a 792 543 3 -a 792 98 2 -a 792 127 3 -a 792 601 3 -a 792 168 8 -a 792 653 10 -a 792 651 4 -a 792 793 7 -a 792 552 9 -a 792 155 3 -a 792 595 6 -a 792 61 3 -a 792 45 7 -a 792 926 8 -a 792 200 8 -a 792 436 10 -a 792 349 3 -a 792 169 5 -a 792 104 2 -a 792 119 6 -a 792 789 3 -a 792 896 5 -a 792 539 9 -a 792 636 6 -a 792 906 5 -a 792 980 6 -a 792 415 8 -a 792 251 2 -a 792 624 4 -a 792 558 7 -a 792 793 4 -a 792 721 4 -a 792 684 4 -a 792 369 5 -a 792 888 6 -a 792 312 9 -a 792 657 2 -a 792 864 4 -a 792 150 7 -a 792 227 3 -a 792 924 9 -a 792 194 1 -a 792 129 6 -a 792 913 3 -a 792 393 5 -a 792 564 1 -a 792 237 9 -a 792 561 6 -a 792 668 5 -a 792 356 10 -a 792 326 9 -a 792 539 3 -a 792 894 1 -a 792 961 7 -a 792 420 9 -a 792 849 4 -a 792 351 7 -a 792 671 1 -a 792 448 8 -a 792 909 4 -a 792 439 3 -a 792 144 3 -a 792 568 8 -a 792 808 6 -a 792 7 8 -a 792 880 2 -a 792 803 8 -a 792 663 2 -a 792 719 4 -a 792 952 4 -a 792 890 7 -a 792 618 8 -a 792 121 2 -a 792 507 2 -a 792 513 9 -a 792 557 8 -a 792 743 5 -a 792 49 5 -a 792 200 8 -a 793 74 6 -a 793 374 8 -a 793 738 10 -a 793 967 3 -a 793 311 7 -a 793 134 8 -a 793 791 4 -a 793 661 8 -a 793 804 10 -a 793 214 3 -a 793 545 3 -a 793 218 10 -a 793 357 10 -a 793 89 1 -a 793 1 4 -a 793 364 9 -a 793 968 2 -a 793 803 9 -a 793 2 4 -a 793 662 5 -a 793 730 5 -a 793 891 5 -a 793 255 4 -a 793 850 7 -a 793 884 1 -a 793 761 10 -a 793 338 5 -a 793 417 1 -a 793 480 4 -a 793 387 10 -a 793 616 6 -a 793 553 10 -a 793 760 9 -a 793 330 6 -a 793 496 8 -a 793 46 4 -a 793 463 8 -a 793 262 3 -a 793 707 4 -a 793 242 7 -a 793 476 2 -a 793 227 3 -a 793 459 5 -a 793 832 2 -a 793 315 4 -a 793 460 8 -a 793 171 8 -a 793 258 1 -a 793 238 3 -a 793 173 5 -a 793 919 9 -a 793 968 6 -a 793 39 4 -a 793 150 3 -a 793 793 6 -a 793 923 1 -a 793 910 3 -a 793 107 6 -a 793 315 1 -a 793 365 1 -a 793 493 3 -a 793 930 5 -a 793 918 2 -a 793 228 6 -a 793 235 2 -a 793 389 1 -a 793 274 7 -a 793 697 8 -a 793 650 6 -a 793 980 7 -a 793 938 8 -a 793 101 8 -a 793 182 3 -a 793 373 2 -a 793 933 1 -a 793 497 8 -a 793 832 1 -a 793 79 8 -a 793 754 3 -a 793 45 1 -a 793 251 9 -a 793 649 9 -a 793 290 3 -a 793 798 9 -a 793 781 5 -a 793 188 2 -a 793 683 4 -a 793 887 9 -a 793 502 10 -a 793 24 2 -a 793 355 1 -a 793 407 1 -a 793 941 10 -a 793 582 8 -a 793 642 5 -a 793 305 5 -a 793 855 5 -a 793 314 4 -a 793 954 8 -a 793 810 7 -a 793 228 9 -a 793 31 7 -a 793 992 1 -a 793 600 8 -a 794 963 8 -a 794 464 1 -a 794 407 9 -a 794 17 4 -a 794 193 1 -a 794 451 6 -a 794 268 1 -a 794 841 8 -a 794 439 5 -a 794 557 8 -a 794 614 3 -a 794 195 9 -a 794 744 5 -a 794 273 7 -a 794 57 4 -a 794 221 4 -a 794 296 7 -a 794 411 2 -a 794 627 2 -a 794 212 6 -a 794 992 10 -a 794 244 1 -a 794 516 8 -a 794 823 4 -a 794 558 7 -a 794 445 5 -a 794 608 3 -a 794 785 10 -a 794 475 6 -a 794 575 5 -a 794 360 1 -a 794 413 3 -a 794 14 8 -a 794 766 10 -a 794 430 3 -a 794 207 5 -a 794 192 2 -a 794 697 6 -a 794 23 3 -a 794 630 3 -a 794 229 3 -a 794 637 10 -a 794 824 2 -a 794 972 4 -a 794 909 10 -a 794 880 9 -a 794 168 8 -a 794 180 4 -a 794 266 5 -a 794 794 4 -a 794 391 4 -a 794 234 7 -a 794 14 6 -a 794 906 7 -a 794 32 5 -a 794 571 9 -a 794 326 3 -a 794 639 6 -a 794 331 6 -a 794 801 9 -a 794 190 9 -a 794 690 8 -a 794 189 8 -a 794 203 6 -a 794 431 1 -a 794 618 5 -a 794 409 7 -a 794 622 4 -a 794 290 2 -a 794 432 10 -a 794 228 9 -a 794 518 4 -a 794 44 3 -a 794 27 1 -a 794 465 8 -a 794 952 1 -a 794 907 7 -a 794 632 9 -a 794 107 9 -a 794 148 5 -a 794 402 1 -a 794 497 5 -a 794 381 8 -a 794 415 8 -a 794 378 10 -a 794 412 8 -a 794 985 1 -a 794 703 10 -a 794 27 6 -a 794 291 8 -a 794 479 6 -a 794 216 5 -a 794 980 6 -a 795 668 9 -a 795 418 7 -a 795 386 6 -a 795 261 3 -a 795 827 1 -a 795 551 3 -a 795 234 5 -a 795 210 4 -a 795 44 9 -a 795 277 1 -a 795 237 5 -a 795 509 8 -a 795 204 7 -a 795 119 3 -a 795 116 7 -a 795 310 8 -a 795 266 6 -a 795 517 4 -a 795 806 2 -a 795 647 9 -a 795 931 7 -a 795 159 2 -a 795 34 2 -a 795 891 8 -a 795 861 4 -a 795 60 8 -a 795 157 7 -a 795 316 7 -a 795 275 2 -a 795 112 10 -a 795 983 10 -a 795 693 9 -a 795 497 10 -a 795 219 7 -a 795 495 1 -a 795 480 9 -a 795 769 4 -a 795 728 4 -a 795 689 9 -a 795 813 4 -a 795 925 1 -a 795 297 6 -a 795 183 7 -a 795 19 7 -a 795 412 4 -a 795 492 1 -a 795 285 5 -a 795 929 7 -a 795 273 8 -a 795 931 8 -a 795 835 5 -a 795 431 1 -a 795 964 8 -a 795 702 5 -a 795 267 5 -a 795 858 2 -a 795 582 8 -a 795 274 4 -a 795 970 1 -a 795 540 1 -a 795 966 7 -a 795 442 1 -a 795 759 6 -a 795 436 3 -a 795 921 8 -a 795 503 10 -a 795 139 8 -a 795 586 5 -a 795 291 4 -a 795 118 9 -a 795 486 10 -a 795 587 10 -a 795 300 4 -a 795 505 6 -a 795 999 8 -a 795 791 8 -a 795 789 10 -a 795 903 9 -a 795 39 9 -a 795 695 4 -a 795 713 10 -a 795 469 4 -a 795 634 6 -a 795 390 1 -a 795 736 4 -a 795 633 9 -a 795 224 3 -a 795 293 2 -a 795 907 6 -a 795 169 7 -a 795 833 6 -a 795 848 3 -a 796 610 10 -a 796 567 10 -a 796 260 4 -a 796 507 2 -a 796 45 9 -a 796 398 8 -a 796 68 4 -a 796 336 7 -a 796 516 4 -a 796 553 6 -a 796 922 7 -a 796 815 5 -a 796 33 9 -a 796 896 5 -a 796 582 8 -a 796 821 2 -a 796 774 1 -a 796 620 6 -a 796 491 8 -a 796 463 6 -a 796 65 3 -a 796 101 10 -a 796 852 5 -a 796 800 8 -a 796 733 9 -a 796 51 10 -a 796 68 1 -a 796 615 3 -a 796 219 8 -a 796 900 7 -a 796 439 9 -a 796 829 5 -a 796 442 9 -a 796 698 2 -a 796 311 8 -a 796 487 9 -a 796 71 1 -a 796 378 5 -a 796 822 4 -a 796 586 10 -a 796 930 10 -a 796 719 1 -a 796 377 7 -a 796 963 10 -a 796 591 3 -a 796 958 8 -a 796 759 10 -a 796 340 5 -a 796 553 5 -a 796 226 1 -a 796 802 8 -a 796 617 9 -a 796 326 2 -a 796 630 10 -a 796 392 7 -a 796 34 10 -a 796 680 9 -a 796 460 9 -a 796 649 10 -a 796 899 7 -a 796 335 7 -a 796 63 8 -a 796 703 10 -a 796 777 1 -a 796 760 1 -a 796 239 10 -a 796 830 4 -a 796 366 5 -a 796 36 1 -a 796 392 7 -a 796 271 5 -a 796 754 10 -a 796 768 8 -a 796 209 4 -a 796 320 3 -a 796 701 5 -a 796 968 10 -a 796 660 8 -a 796 229 5 -a 796 169 7 -a 796 437 6 -a 796 846 2 -a 796 494 3 -a 796 42 8 -a 796 213 3 -a 796 527 4 -a 796 722 7 -a 796 672 3 -a 796 151 3 -a 796 596 7 -a 796 213 6 -a 796 274 7 -a 796 759 3 -a 796 972 8 -a 796 262 5 -a 796 997 5 -a 797 778 8 -a 797 627 9 -a 797 8 5 -a 797 145 3 -a 797 897 6 -a 797 761 7 -a 797 912 1 -a 797 82 8 -a 797 57 3 -a 797 588 1 -a 797 25 2 -a 797 716 5 -a 797 816 8 -a 797 193 10 -a 797 128 3 -a 797 637 4 -a 797 686 3 -a 797 170 3 -a 797 850 4 -a 797 188 10 -a 797 891 2 -a 797 497 2 -a 797 339 3 -a 797 462 10 -a 797 479 10 -a 797 551 9 -a 797 735 6 -a 797 213 8 -a 797 499 6 -a 797 996 9 -a 797 185 6 -a 797 252 8 -a 797 598 9 -a 797 192 3 -a 797 396 9 -a 797 470 6 -a 797 953 3 -a 797 283 8 -a 797 551 8 -a 797 870 4 -a 797 575 3 -a 797 700 10 -a 797 661 5 -a 797 767 7 -a 797 827 1 -a 797 274 6 -a 797 428 7 -a 797 996 6 -a 797 99 1 -a 797 616 6 -a 797 862 8 -a 797 595 6 -a 797 954 7 -a 797 299 4 -a 797 50 8 -a 797 480 3 -a 797 9 1 -a 797 262 8 -a 797 978 8 -a 797 447 2 -a 797 205 10 -a 797 577 8 -a 797 638 2 -a 797 600 4 -a 797 23 3 -a 797 566 4 -a 797 882 1 -a 797 573 3 -a 797 550 6 -a 797 727 1 -a 797 124 7 -a 797 225 1 -a 797 364 6 -a 797 890 5 -a 797 28 10 -a 797 637 7 -a 797 294 8 -a 797 735 6 -a 797 909 6 -a 797 861 10 -a 797 305 8 -a 797 838 9 -a 797 135 9 -a 797 354 1 -a 797 293 1 -a 797 144 1 -a 797 616 2 -a 797 247 5 -a 797 123 5 -a 797 38 8 -a 797 451 9 -a 797 700 8 -a 797 675 2 -a 797 27 9 -a 797 722 7 -a 797 217 10 -a 797 908 1 -a 797 270 4 -a 797 766 10 -a 797 611 8 -a 797 393 4 -a 797 991 5 -a 797 974 4 -a 797 259 6 -a 797 586 4 -a 797 552 4 -a 797 296 10 -a 797 436 8 -a 797 852 2 -a 797 600 2 -a 797 249 10 -a 798 987 2 -a 798 954 1 -a 798 541 3 -a 798 106 3 -a 798 545 4 -a 798 787 3 -a 798 228 2 -a 798 582 6 -a 798 214 10 -a 798 927 2 -a 798 232 10 -a 798 240 2 -a 798 624 3 -a 798 448 4 -a 798 123 5 -a 798 894 6 -a 798 190 6 -a 798 733 7 -a 798 262 5 -a 798 156 3 -a 798 682 9 -a 798 520 7 -a 798 149 6 -a 798 243 4 -a 798 47 10 -a 798 140 7 -a 798 538 2 -a 798 482 7 -a 798 992 2 -a 798 114 9 -a 798 730 5 -a 798 954 1 -a 798 43 2 -a 798 247 4 -a 798 35 2 -a 798 587 6 -a 798 9 1 -a 798 262 2 -a 798 144 9 -a 798 222 6 -a 798 165 8 -a 798 375 3 -a 798 461 8 -a 798 788 6 -a 798 823 3 -a 798 584 9 -a 798 657 7 -a 798 292 10 -a 798 919 10 -a 798 143 8 -a 798 974 9 -a 798 414 10 -a 798 291 1 -a 798 192 10 -a 798 461 2 -a 798 430 1 -a 798 730 6 -a 798 942 8 -a 798 397 7 -a 798 843 5 -a 798 648 2 -a 798 326 9 -a 798 885 7 -a 798 894 8 -a 798 360 8 -a 798 447 2 -a 798 902 10 -a 798 622 2 -a 798 590 9 -a 798 100 3 -a 798 786 9 -a 798 964 5 -a 798 560 10 -a 798 549 5 -a 798 762 7 -a 798 119 9 -a 798 182 6 -a 798 749 9 -a 798 411 7 -a 798 76 3 -a 798 891 9 -a 798 360 3 -a 798 489 6 -a 798 157 7 -a 798 551 10 -a 798 949 2 -a 798 587 4 -a 798 256 6 -a 798 867 4 -a 798 983 8 -a 798 74 10 -a 798 490 9 -a 798 285 5 -a 798 958 2 -a 798 359 1 -a 798 644 5 -a 798 380 9 -a 798 236 7 -a 798 241 3 -a 799 969 5 -a 799 335 7 -a 799 2 9 -a 799 909 9 -a 799 895 5 -a 799 551 4 -a 799 646 2 -a 799 732 3 -a 799 371 5 -a 799 399 4 -a 799 807 8 -a 799 237 8 -a 799 758 2 -a 799 271 9 -a 799 394 8 -a 799 285 7 -a 799 196 1 -a 799 980 7 -a 799 540 10 -a 799 38 7 -a 799 938 2 -a 799 614 1 -a 799 527 5 -a 799 198 5 -a 799 547 2 -a 799 885 1 -a 799 842 7 -a 799 927 6 -a 799 96 5 -a 799 58 3 -a 799 871 2 -a 799 431 4 -a 799 60 1 -a 799 755 5 -a 799 301 3 -a 799 610 8 -a 799 377 1 -a 799 289 2 -a 799 317 5 -a 799 747 2 -a 799 688 6 -a 799 99 6 -a 799 983 1 -a 799 421 7 -a 799 369 1 -a 799 352 6 -a 799 705 3 -a 799 564 8 -a 799 307 6 -a 799 221 2 -a 799 601 4 -a 799 221 9 -a 799 834 2 -a 799 103 8 -a 799 418 9 -a 799 356 6 -a 799 987 7 -a 799 235 3 -a 799 258 7 -a 799 59 5 -a 799 293 9 -a 799 105 2 -a 799 489 7 -a 799 352 2 -a 799 859 7 -a 799 789 5 -a 799 961 7 -a 799 211 1 -a 799 53 5 -a 799 253 2 -a 799 957 7 -a 799 740 4 -a 799 351 2 -a 799 916 6 -a 799 137 5 -a 799 719 5 -a 799 243 7 -a 799 841 1 -a 799 259 6 -a 799 550 4 -a 799 37 2 -a 799 859 10 -a 799 770 1 -a 799 870 10 -a 799 962 9 -a 799 163 2 -a 799 202 10 -a 799 924 8 -a 799 398 5 -a 799 459 1 -a 799 982 9 -a 799 690 9 -a 799 563 10 -a 799 446 3 -a 799 17 4 -a 799 398 4 -a 799 210 2 -a 799 977 8 -a 799 608 4 -a 799 263 9 -a 800 205 3 -a 800 541 4 -a 800 555 8 -a 800 432 4 -a 800 114 7 -a 800 249 6 -a 800 674 7 -a 800 955 10 -a 800 507 8 -a 800 199 9 -a 800 991 8 -a 800 342 8 -a 800 968 7 -a 800 837 6 -a 800 279 4 -a 800 107 8 -a 800 14 7 -a 800 178 6 -a 800 504 3 -a 800 472 10 -a 800 136 6 -a 800 169 6 -a 800 11 9 -a 800 581 9 -a 800 185 10 -a 800 408 5 -a 800 791 3 -a 800 137 3 -a 800 29 10 -a 800 341 8 -a 800 531 10 -a 800 6 1 -a 800 895 5 -a 800 962 4 -a 800 120 9 -a 800 119 10 -a 800 612 2 -a 800 50 2 -a 800 626 7 -a 800 810 8 -a 800 16 4 -a 800 967 2 -a 800 754 2 -a 800 852 1 -a 800 221 4 -a 800 860 6 -a 800 865 7 -a 800 398 8 -a 800 339 6 -a 800 313 3 -a 800 533 4 -a 800 507 5 -a 800 323 7 -a 800 90 7 -a 800 691 1 -a 800 730 6 -a 800 880 10 -a 800 827 8 -a 800 720 1 -a 800 908 8 -a 800 143 3 -a 800 227 6 -a 800 913 7 -a 800 13 9 -a 800 164 7 -a 800 8 8 -a 800 131 10 -a 800 775 4 -a 800 57 5 -a 800 756 9 -a 800 561 2 -a 800 73 10 -a 800 698 9 -a 800 290 2 -a 800 924 4 -a 800 918 8 -a 800 125 3 -a 800 765 4 -a 800 292 2 -a 800 463 5 -a 800 53 2 -a 800 824 4 -a 800 969 2 -a 800 375 7 -a 800 913 6 -a 800 635 7 -a 800 80 4 -a 800 768 6 -a 800 437 7 -a 800 799 4 -a 800 651 8 -a 800 579 6 -a 800 1 2 -a 800 540 3 -a 800 591 7 -a 800 165 2 -a 800 547 8 -a 800 721 8 -a 800 939 6 -a 800 604 4 -a 800 453 4 -a 800 475 7 -a 800 676 5 -a 800 126 3 -a 801 764 4 -a 801 575 3 -a 801 20 7 -a 801 888 5 -a 801 315 2 -a 801 311 10 -a 801 326 7 -a 801 367 4 -a 801 110 7 -a 801 270 4 -a 801 741 10 -a 801 904 6 -a 801 820 5 -a 801 766 2 -a 801 316 5 -a 801 595 7 -a 801 393 8 -a 801 894 2 -a 801 595 7 -a 801 932 5 -a 801 460 1 -a 801 759 9 -a 801 454 4 -a 801 157 4 -a 801 674 6 -a 801 33 10 -a 801 609 10 -a 801 124 3 -a 801 708 4 -a 801 734 2 -a 801 888 8 -a 801 259 8 -a 801 753 8 -a 801 751 9 -a 801 573 8 -a 801 39 3 -a 801 53 6 -a 801 940 10 -a 801 149 5 -a 801 322 4 -a 801 656 2 -a 801 147 7 -a 801 202 4 -a 801 452 8 -a 801 912 6 -a 801 517 2 -a 801 22 1 -a 801 280 1 -a 801 387 3 -a 801 616 8 -a 801 187 8 -a 801 846 10 -a 801 351 3 -a 801 641 5 -a 801 673 10 -a 801 586 7 -a 801 123 10 -a 801 357 9 -a 801 296 4 -a 801 615 4 -a 801 24 6 -a 801 737 2 -a 801 163 2 -a 801 63 4 -a 801 789 6 -a 801 78 1 -a 801 211 4 -a 801 86 3 -a 801 734 7 -a 801 357 7 -a 801 287 2 -a 801 161 1 -a 801 244 1 -a 801 804 8 -a 801 182 6 -a 801 524 4 -a 801 166 1 -a 801 797 9 -a 801 710 2 -a 801 123 2 -a 801 326 2 -a 801 989 6 -a 801 122 2 -a 801 999 8 -a 801 550 5 -a 801 245 4 -a 801 331 5 -a 801 845 4 -a 802 230 5 -a 802 945 2 -a 802 869 5 -a 802 966 10 -a 802 83 2 -a 802 931 9 -a 802 730 5 -a 802 161 2 -a 802 117 1 -a 802 816 1 -a 802 894 3 -a 802 473 3 -a 802 78 4 -a 802 30 2 -a 802 716 1 -a 802 881 3 -a 802 211 6 -a 802 215 10 -a 802 22 9 -a 802 925 4 -a 802 9 8 -a 802 106 1 -a 802 226 8 -a 802 997 1 -a 802 227 10 -a 802 200 9 -a 802 522 9 -a 802 471 10 -a 802 530 9 -a 802 343 5 -a 802 701 7 -a 802 450 9 -a 802 187 3 -a 802 642 10 -a 802 533 8 -a 802 93 2 -a 802 348 4 -a 802 693 6 -a 802 209 2 -a 802 139 2 -a 802 562 2 -a 802 681 5 -a 802 216 10 -a 802 591 10 -a 802 372 2 -a 802 73 3 -a 802 801 2 -a 802 587 7 -a 802 94 5 -a 802 783 4 -a 802 487 10 -a 802 102 5 -a 802 888 9 -a 802 712 1 -a 802 74 10 -a 802 91 7 -a 802 912 5 -a 802 596 9 -a 802 561 7 -a 802 417 5 -a 802 938 1 -a 802 237 9 -a 802 867 4 -a 802 100 10 -a 802 879 1 -a 802 375 2 -a 802 192 1 -a 802 202 4 -a 802 43 2 -a 802 400 10 -a 802 340 1 -a 802 604 3 -a 802 56 4 -a 802 555 2 -a 802 170 8 -a 802 427 10 -a 802 627 8 -a 802 970 2 -a 802 721 4 -a 802 728 2 -a 802 475 5 -a 802 822 1 -a 802 592 2 -a 802 163 10 -a 802 896 2 -a 802 682 5 -a 802 50 3 -a 802 467 1 -a 802 218 3 -a 802 466 4 -a 802 380 9 -a 803 455 7 -a 803 308 5 -a 803 479 2 -a 803 309 6 -a 803 682 7 -a 803 670 3 -a 803 510 6 -a 803 724 2 -a 803 45 6 -a 803 849 3 -a 803 303 10 -a 803 100 1 -a 803 379 4 -a 803 472 7 -a 803 526 6 -a 803 417 8 -a 803 515 10 -a 803 702 7 -a 803 121 7 -a 803 989 9 -a 803 499 10 -a 803 712 3 -a 803 127 2 -a 803 370 5 -a 803 369 7 -a 803 176 4 -a 803 836 3 -a 803 586 10 -a 803 642 9 -a 803 191 6 -a 803 16 6 -a 803 949 2 -a 803 669 5 -a 803 324 6 -a 803 607 4 -a 803 314 2 -a 803 833 5 -a 803 306 1 -a 803 358 6 -a 803 657 2 -a 803 609 10 -a 803 457 6 -a 803 12 7 -a 803 56 9 -a 803 983 2 -a 803 473 2 -a 803 473 4 -a 803 694 2 -a 803 593 1 -a 803 437 2 -a 803 168 3 -a 803 280 6 -a 803 564 6 -a 803 538 1 -a 803 648 1 -a 803 739 4 -a 803 349 2 -a 803 209 3 -a 803 356 5 -a 803 540 1 -a 803 225 9 -a 803 281 4 -a 803 184 7 -a 803 548 1 -a 803 887 5 -a 803 498 9 -a 803 357 1 -a 803 168 3 -a 803 855 2 -a 803 776 3 -a 803 288 1 -a 803 832 4 -a 803 246 3 -a 803 280 6 -a 803 718 2 -a 803 685 8 -a 803 872 7 -a 803 130 2 -a 803 853 1 -a 803 127 4 -a 803 693 10 -a 803 366 6 -a 803 774 7 -a 803 408 5 -a 803 714 4 -a 803 982 5 -a 803 763 5 -a 803 229 8 -a 803 182 3 -a 803 19 8 -a 803 413 6 -a 803 730 7 -a 803 905 8 -a 803 910 7 -a 803 62 1 -a 803 49 10 -a 803 740 2 -a 803 50 1 -a 803 824 3 -a 803 3 3 -a 804 50 3 -a 804 631 6 -a 804 248 5 -a 804 41 3 -a 804 910 7 -a 804 965 10 -a 804 726 6 -a 804 757 5 -a 804 71 6 -a 804 554 2 -a 804 883 8 -a 804 763 4 -a 804 919 10 -a 804 632 4 -a 804 146 10 -a 804 608 7 -a 804 590 9 -a 804 909 9 -a 804 837 3 -a 804 771 8 -a 804 927 3 -a 804 225 7 -a 804 476 5 -a 804 808 2 -a 804 110 10 -a 804 537 9 -a 804 856 7 -a 804 849 10 -a 804 587 5 -a 804 655 3 -a 804 852 8 -a 804 636 5 -a 804 262 5 -a 804 75 6 -a 804 676 3 -a 804 147 3 -a 804 16 2 -a 804 377 4 -a 804 904 8 -a 804 86 10 -a 804 930 1 -a 804 762 6 -a 804 848 9 -a 804 824 1 -a 804 370 10 -a 804 994 9 -a 804 408 2 -a 804 959 7 -a 804 878 6 -a 804 220 9 -a 804 705 9 -a 804 780 4 -a 804 444 2 -a 804 157 7 -a 804 563 9 -a 804 553 4 -a 804 693 9 -a 804 394 10 -a 804 377 6 -a 804 255 6 -a 804 25 5 -a 804 204 10 -a 804 890 8 -a 804 286 10 -a 804 279 2 -a 804 542 7 -a 804 432 10 -a 804 294 7 -a 804 918 1 -a 804 311 6 -a 804 379 5 -a 804 824 2 -a 804 49 8 -a 804 202 9 -a 804 623 2 -a 804 418 1 -a 804 171 10 -a 804 6 6 -a 804 352 7 -a 804 24 4 -a 804 225 4 -a 804 32 4 -a 804 804 8 -a 804 668 1 -a 804 188 1 -a 804 342 10 -a 804 196 1 -a 804 881 5 -a 804 736 6 -a 804 573 1 -a 805 111 2 -a 805 760 3 -a 805 776 2 -a 805 21 10 -a 805 30 1 -a 805 518 10 -a 805 452 9 -a 805 323 2 -a 805 411 2 -a 805 763 8 -a 805 701 4 -a 805 210 4 -a 805 811 1 -a 805 903 6 -a 805 833 6 -a 805 204 6 -a 805 49 8 -a 805 838 5 -a 805 555 6 -a 805 73 3 -a 805 39 2 -a 805 586 5 -a 805 876 4 -a 805 706 1 -a 805 774 4 -a 805 193 6 -a 805 902 5 -a 805 630 5 -a 805 928 8 -a 805 450 4 -a 805 740 4 -a 805 663 7 -a 805 201 7 -a 805 716 10 -a 805 683 2 -a 805 231 7 -a 805 209 6 -a 805 111 4 -a 805 553 2 -a 805 620 8 -a 805 873 7 -a 805 230 9 -a 805 829 7 -a 805 659 10 -a 805 108 10 -a 805 637 6 -a 805 862 7 -a 805 156 1 -a 805 451 4 -a 805 392 5 -a 805 228 7 -a 805 489 8 -a 805 977 8 -a 805 79 6 -a 805 170 5 -a 805 726 10 -a 805 272 7 -a 805 47 8 -a 805 331 3 -a 805 175 9 -a 805 496 4 -a 805 47 9 -a 805 838 5 -a 805 697 10 -a 805 762 3 -a 805 496 5 -a 805 927 10 -a 805 971 2 -a 805 606 8 -a 805 455 9 -a 805 566 5 -a 805 454 3 -a 805 684 8 -a 805 370 8 -a 805 88 6 -a 805 791 1 -a 805 949 7 -a 805 947 1 -a 805 433 7 -a 805 316 3 -a 805 150 6 -a 805 921 6 -a 805 269 2 -a 805 229 8 -a 805 66 8 -a 805 994 6 -a 805 500 1 -a 805 113 10 -a 805 301 2 -a 805 674 2 -a 805 608 8 -a 805 347 5 -a 805 487 10 -a 805 280 3 -a 805 84 1 -a 805 983 8 -a 805 182 7 -a 805 30 8 -a 805 564 3 -a 806 637 5 -a 806 595 8 -a 806 296 8 -a 806 965 5 -a 806 81 6 -a 806 63 5 -a 806 947 5 -a 806 6 5 -a 806 355 9 -a 806 321 2 -a 806 134 4 -a 806 251 3 -a 806 589 7 -a 806 362 6 -a 806 316 2 -a 806 559 6 -a 806 861 5 -a 806 428 1 -a 806 859 6 -a 806 511 7 -a 806 12 1 -a 806 181 5 -a 806 997 3 -a 806 291 6 -a 806 264 7 -a 806 955 8 -a 806 473 8 -a 806 294 2 -a 806 495 3 -a 806 85 3 -a 806 888 4 -a 806 488 2 -a 806 380 1 -a 806 828 10 -a 806 568 10 -a 806 442 9 -a 806 750 6 -a 806 573 5 -a 806 426 9 -a 806 80 3 -a 806 894 10 -a 806 560 7 -a 806 330 8 -a 806 458 3 -a 806 921 8 -a 806 646 5 -a 806 758 4 -a 806 49 3 -a 806 850 1 -a 806 244 1 -a 806 60 7 -a 806 6 10 -a 806 216 8 -a 806 351 3 -a 806 270 7 -a 806 147 5 -a 806 823 6 -a 806 563 3 -a 806 641 9 -a 806 907 2 -a 806 426 7 -a 806 104 3 -a 806 262 6 -a 806 230 10 -a 806 671 6 -a 806 704 10 -a 806 979 10 -a 806 220 4 -a 806 105 10 -a 806 35 6 -a 806 89 10 -a 806 664 3 -a 806 364 10 -a 806 546 5 -a 806 561 10 -a 806 538 6 -a 806 294 5 -a 806 34 1 -a 806 363 1 -a 806 537 2 -a 806 93 1 -a 806 369 3 -a 806 752 2 -a 806 443 8 -a 806 638 6 -a 806 898 8 -a 806 241 2 -a 806 176 5 -a 806 514 4 -a 806 123 1 -a 807 601 2 -a 807 617 10 -a 807 385 3 -a 807 830 8 -a 807 264 7 -a 807 64 8 -a 807 785 3 -a 807 483 9 -a 807 168 9 -a 807 819 3 -a 807 571 9 -a 807 832 7 -a 807 158 1 -a 807 92 1 -a 807 368 8 -a 807 143 2 -a 807 629 9 -a 807 661 4 -a 807 176 6 -a 807 992 6 -a 807 173 4 -a 807 268 2 -a 807 336 7 -a 807 924 4 -a 807 711 3 -a 807 973 5 -a 807 798 10 -a 807 951 8 -a 807 124 4 -a 807 287 10 -a 807 50 10 -a 807 724 9 -a 807 904 9 -a 807 434 3 -a 807 530 5 -a 807 143 10 -a 807 497 5 -a 807 290 1 -a 807 625 4 -a 807 664 3 -a 807 84 7 -a 807 171 7 -a 807 471 8 -a 807 241 9 -a 807 262 2 -a 807 838 8 -a 807 383 4 -a 807 891 6 -a 807 474 3 -a 807 558 7 -a 807 858 2 -a 807 646 10 -a 807 826 10 -a 807 169 3 -a 807 546 6 -a 807 512 3 -a 807 117 8 -a 807 319 7 -a 807 438 5 -a 807 240 8 -a 807 605 5 -a 807 487 6 -a 807 963 7 -a 807 484 6 -a 807 920 8 -a 807 468 7 -a 807 626 9 -a 807 392 7 -a 807 757 3 -a 807 226 2 -a 807 32 8 -a 807 840 8 -a 807 396 9 -a 807 502 8 -a 807 57 1 -a 807 658 3 -a 807 316 10 -a 807 439 7 -a 807 524 6 -a 807 789 5 -a 807 997 9 -a 807 357 5 -a 807 411 7 -a 807 798 10 -a 807 525 6 -a 807 956 4 -a 807 285 6 -a 807 641 2 -a 807 250 10 -a 807 722 8 -a 807 880 5 -a 807 854 10 -a 807 185 1 -a 807 818 1 -a 807 314 1 -a 807 80 8 -a 807 262 10 -a 807 939 6 -a 807 472 8 -a 807 141 1 -a 807 503 4 -a 807 834 3 -a 807 536 10 -a 807 890 10 -a 807 169 8 -a 807 295 2 -a 807 304 5 -a 807 692 10 -a 807 60 10 -a 807 276 1 -a 807 24 8 -a 807 470 4 -a 807 49 9 -a 807 548 3 -a 807 401 3 -a 808 333 6 -a 808 164 4 -a 808 650 6 -a 808 31 1 -a 808 19 2 -a 808 479 1 -a 808 215 2 -a 808 837 10 -a 808 792 10 -a 808 294 8 -a 808 74 8 -a 808 707 5 -a 808 765 2 -a 808 67 6 -a 808 847 10 -a 808 243 7 -a 808 900 9 -a 808 358 5 -a 808 223 9 -a 808 765 1 -a 808 527 2 -a 808 517 7 -a 808 45 2 -a 808 194 7 -a 808 576 7 -a 808 320 1 -a 808 218 9 -a 808 21 7 -a 808 369 2 -a 808 765 3 -a 808 421 10 -a 808 701 7 -a 808 929 6 -a 808 46 8 -a 808 731 8 -a 808 947 8 -a 808 525 9 -a 808 945 6 -a 808 759 1 -a 808 292 3 -a 808 215 2 -a 808 832 10 -a 808 998 1 -a 808 979 10 -a 808 899 2 -a 808 820 9 -a 808 198 7 -a 808 774 1 -a 808 154 3 -a 808 420 9 -a 808 515 3 -a 808 680 8 -a 808 936 2 -a 808 559 2 -a 808 873 1 -a 808 488 7 -a 808 878 1 -a 808 66 1 -a 808 508 9 -a 808 222 10 -a 808 831 9 -a 808 929 4 -a 808 923 10 -a 808 735 3 -a 808 974 7 -a 808 629 3 -a 808 657 9 -a 808 474 3 -a 808 550 3 -a 808 392 6 -a 808 766 1 -a 808 764 5 -a 808 199 2 -a 808 739 10 -a 808 718 1 -a 808 73 4 -a 808 535 7 -a 808 915 6 -a 808 847 9 -a 808 688 9 -a 808 310 6 -a 808 337 3 -a 808 343 9 -a 808 222 2 -a 808 895 7 -a 808 191 4 -a 808 709 9 -a 808 748 5 -a 808 257 9 -a 808 192 4 -a 808 970 9 -a 808 63 7 -a 809 96 9 -a 809 868 1 -a 809 797 6 -a 809 46 4 -a 809 472 4 -a 809 429 9 -a 809 519 3 -a 809 820 6 -a 809 260 6 -a 809 760 5 -a 809 999 1 -a 809 454 8 -a 809 67 7 -a 809 509 3 -a 809 344 9 -a 809 913 3 -a 809 172 10 -a 809 654 3 -a 809 225 10 -a 809 514 9 -a 809 875 3 -a 809 95 6 -a 809 704 9 -a 809 559 1 -a 809 843 3 -a 809 960 9 -a 809 750 4 -a 809 788 3 -a 809 846 4 -a 809 631 4 -a 809 794 10 -a 809 891 10 -a 809 78 2 -a 809 199 8 -a 809 385 10 -a 809 75 6 -a 809 645 9 -a 809 834 2 -a 809 619 8 -a 809 263 4 -a 809 55 10 -a 809 103 8 -a 809 607 6 -a 809 967 5 -a 809 274 8 -a 809 236 8 -a 809 168 3 -a 809 787 1 -a 809 86 2 -a 809 262 1 -a 809 466 10 -a 809 644 6 -a 809 80 7 -a 809 402 3 -a 809 369 4 -a 809 867 6 -a 809 399 1 -a 809 190 1 -a 809 473 9 -a 809 169 8 -a 809 56 5 -a 809 551 9 -a 809 367 9 -a 809 441 7 -a 809 625 4 -a 809 360 9 -a 809 61 5 -a 809 434 2 -a 809 348 10 -a 809 679 8 -a 809 697 9 -a 809 402 6 -a 809 781 8 -a 809 279 10 -a 809 344 9 -a 809 30 1 -a 809 514 5 -a 809 511 5 -a 809 816 4 -a 809 599 2 -a 809 773 10 -a 809 257 5 -a 809 218 3 -a 809 852 9 -a 809 658 7 -a 809 586 3 -a 809 695 8 -a 809 33 9 -a 809 776 8 -a 809 143 5 -a 809 201 2 -a 809 831 6 -a 809 693 1 -a 809 567 10 -a 809 247 4 -a 809 293 10 -a 809 926 3 -a 810 307 2 -a 810 727 4 -a 810 249 10 -a 810 985 8 -a 810 399 6 -a 810 650 1 -a 810 741 2 -a 810 677 8 -a 810 994 7 -a 810 770 10 -a 810 166 5 -a 810 480 5 -a 810 561 8 -a 810 764 1 -a 810 228 1 -a 810 818 8 -a 810 981 5 -a 810 56 2 -a 810 451 6 -a 810 542 3 -a 810 750 5 -a 810 483 5 -a 810 293 2 -a 810 892 8 -a 810 683 10 -a 810 100 1 -a 810 561 6 -a 810 225 2 -a 810 346 6 -a 810 853 7 -a 810 127 10 -a 810 653 3 -a 810 555 10 -a 810 375 4 -a 810 613 2 -a 810 953 8 -a 810 1 10 -a 810 330 4 -a 810 605 10 -a 810 994 10 -a 810 75 3 -a 810 770 10 -a 810 449 8 -a 810 636 10 -a 810 509 5 -a 810 677 10 -a 810 429 8 -a 810 465 10 -a 810 732 1 -a 810 879 7 -a 810 457 2 -a 810 338 7 -a 810 275 6 -a 810 324 4 -a 810 374 3 -a 810 884 7 -a 810 221 6 -a 810 720 10 -a 810 713 1 -a 810 347 4 -a 810 348 2 -a 810 243 10 -a 810 721 4 -a 810 960 8 -a 810 172 2 -a 810 721 2 -a 810 265 9 -a 810 776 9 -a 810 690 2 -a 810 340 10 -a 810 522 9 -a 810 115 3 -a 810 975 10 -a 810 6 6 -a 810 791 6 -a 810 379 8 -a 810 471 7 -a 810 498 3 -a 810 233 9 -a 810 453 7 -a 810 954 7 -a 810 570 4 -a 810 727 8 -a 810 253 6 -a 810 566 5 -a 810 77 1 -a 810 113 6 -a 810 786 10 -a 810 796 4 -a 810 825 3 -a 810 108 3 -a 810 119 9 -a 810 43 9 -a 810 828 1 -a 810 54 4 -a 810 214 5 -a 810 525 4 -a 810 319 6 -a 810 990 3 -a 811 190 5 -a 811 658 3 -a 811 487 7 -a 811 304 3 -a 811 608 3 -a 811 492 1 -a 811 70 8 -a 811 986 8 -a 811 962 6 -a 811 567 9 -a 811 194 8 -a 811 390 4 -a 811 496 6 -a 811 764 3 -a 811 93 4 -a 811 749 9 -a 811 305 7 -a 811 169 1 -a 811 861 7 -a 811 66 2 -a 811 964 3 -a 811 661 6 -a 811 173 6 -a 811 58 1 -a 811 703 7 -a 811 1000 4 -a 811 111 7 -a 811 917 6 -a 811 500 2 -a 811 429 2 -a 811 882 10 -a 811 690 9 -a 811 62 3 -a 811 344 7 -a 811 993 2 -a 811 669 3 -a 811 835 3 -a 811 39 8 -a 811 630 4 -a 811 773 10 -a 811 605 10 -a 811 824 9 -a 811 138 5 -a 811 77 10 -a 811 563 10 -a 811 230 7 -a 811 825 2 -a 811 867 7 -a 811 398 4 -a 811 661 7 -a 811 932 8 -a 811 337 5 -a 811 297 5 -a 811 80 4 -a 811 394 3 -a 811 999 7 -a 811 55 5 -a 811 505 3 -a 811 891 8 -a 811 555 7 -a 811 933 5 -a 811 748 4 -a 811 220 8 -a 811 995 9 -a 811 67 7 -a 811 188 2 -a 811 639 9 -a 811 902 1 -a 811 226 5 -a 811 245 7 -a 811 650 10 -a 811 831 4 -a 811 44 3 -a 811 787 8 -a 811 907 6 -a 811 606 4 -a 811 707 9 -a 811 448 8 -a 811 390 10 -a 811 343 10 -a 811 355 2 -a 811 727 4 -a 811 639 7 -a 811 434 5 -a 811 96 8 -a 811 613 3 -a 811 488 4 -a 811 600 4 -a 811 480 1 -a 811 18 5 -a 811 509 6 -a 812 203 3 -a 812 237 8 -a 812 479 9 -a 812 270 3 -a 812 425 8 -a 812 93 8 -a 812 147 4 -a 812 650 5 -a 812 337 3 -a 812 796 1 -a 812 456 9 -a 812 380 3 -a 812 558 9 -a 812 338 7 -a 812 985 9 -a 812 550 7 -a 812 20 6 -a 812 408 9 -a 812 940 1 -a 812 362 4 -a 812 762 9 -a 812 642 1 -a 812 1000 5 -a 812 171 5 -a 812 737 4 -a 812 589 5 -a 812 659 3 -a 812 313 3 -a 812 44 7 -a 812 676 5 -a 812 821 2 -a 812 246 7 -a 812 913 8 -a 812 275 4 -a 812 515 8 -a 812 313 5 -a 812 367 1 -a 812 661 3 -a 812 962 1 -a 812 704 1 -a 812 432 5 -a 812 394 4 -a 812 59 4 -a 812 990 3 -a 812 731 2 -a 812 20 3 -a 812 515 2 -a 812 751 3 -a 812 427 8 -a 812 430 10 -a 812 88 1 -a 812 165 5 -a 812 47 6 -a 812 64 3 -a 812 335 10 -a 812 784 7 -a 812 652 2 -a 812 993 6 -a 812 72 5 -a 812 695 5 -a 812 645 9 -a 812 892 8 -a 812 940 6 -a 812 533 9 -a 812 142 9 -a 812 431 8 -a 812 845 2 -a 812 508 8 -a 812 67 4 -a 812 782 8 -a 812 187 4 -a 812 499 10 -a 812 151 10 -a 812 246 7 -a 812 464 8 -a 812 882 8 -a 812 265 5 -a 812 978 5 -a 812 608 7 -a 812 691 1 -a 812 384 6 -a 812 695 2 -a 812 855 5 -a 812 430 10 -a 812 758 6 -a 812 166 1 -a 812 189 8 -a 812 385 9 -a 812 134 4 -a 812 260 9 -a 812 55 5 -a 812 778 7 -a 812 127 10 -a 812 995 5 -a 812 286 8 -a 812 268 4 -a 812 401 3 -a 812 106 1 -a 812 776 4 -a 812 467 3 -a 812 888 5 -a 812 962 5 -a 812 965 2 -a 812 14 6 -a 812 183 9 -a 812 404 6 -a 812 895 9 -a 812 447 8 -a 812 358 9 -a 812 478 9 -a 813 114 8 -a 813 741 3 -a 813 149 6 -a 813 968 8 -a 813 146 1 -a 813 906 7 -a 813 109 1 -a 813 335 5 -a 813 267 3 -a 813 243 1 -a 813 594 7 -a 813 321 8 -a 813 721 5 -a 813 291 3 -a 813 282 2 -a 813 988 6 -a 813 691 7 -a 813 387 5 -a 813 739 6 -a 813 134 2 -a 813 250 4 -a 813 677 10 -a 813 74 3 -a 813 264 10 -a 813 859 2 -a 813 478 7 -a 813 134 7 -a 813 282 2 -a 813 835 6 -a 813 612 3 -a 813 395 2 -a 813 551 9 -a 813 760 3 -a 813 338 8 -a 813 696 7 -a 813 641 1 -a 813 447 10 -a 813 6 7 -a 813 907 9 -a 813 689 5 -a 813 600 1 -a 813 204 8 -a 813 684 2 -a 813 296 4 -a 813 494 1 -a 813 965 5 -a 813 259 6 -a 813 161 7 -a 813 328 7 -a 813 998 4 -a 813 294 9 -a 813 577 5 -a 813 650 8 -a 813 367 7 -a 813 840 1 -a 813 484 7 -a 813 844 7 -a 813 974 5 -a 813 765 1 -a 813 654 2 -a 813 561 3 -a 813 135 2 -a 813 180 1 -a 813 296 6 -a 813 473 1 -a 813 876 2 -a 813 936 7 -a 813 919 1 -a 813 881 10 -a 814 819 3 -a 814 583 4 -a 814 456 9 -a 814 242 5 -a 814 751 1 -a 814 491 4 -a 814 183 6 -a 814 651 6 -a 814 510 8 -a 814 983 8 -a 814 944 5 -a 814 62 6 -a 814 608 7 -a 814 287 2 -a 814 902 1 -a 814 67 7 -a 814 106 4 -a 814 851 5 -a 814 832 6 -a 814 760 8 -a 814 387 6 -a 814 966 5 -a 814 939 7 -a 814 682 5 -a 814 414 1 -a 814 790 6 -a 814 593 7 -a 814 308 7 -a 814 647 2 -a 814 387 9 -a 814 890 6 -a 814 78 10 -a 814 384 10 -a 814 108 5 -a 814 829 4 -a 814 875 7 -a 814 290 8 -a 814 814 9 -a 814 501 6 -a 814 799 2 -a 814 772 2 -a 814 421 8 -a 814 860 1 -a 814 355 5 -a 814 707 4 -a 814 737 3 -a 814 421 7 -a 814 812 6 -a 814 563 5 -a 814 228 10 -a 814 547 2 -a 814 949 7 -a 814 170 6 -a 814 462 1 -a 814 606 5 -a 814 583 2 -a 814 227 9 -a 814 175 1 -a 814 891 1 -a 814 873 9 -a 814 561 3 -a 814 756 8 -a 814 951 3 -a 814 945 2 -a 814 863 7 -a 814 755 9 -a 814 795 2 -a 814 128 5 -a 814 544 9 -a 814 271 9 -a 814 926 7 -a 814 291 5 -a 814 691 6 -a 814 762 5 -a 814 645 5 -a 814 373 2 -a 814 474 6 -a 814 41 3 -a 814 161 10 -a 814 13 5 -a 814 269 5 -a 814 707 2 -a 814 961 2 -a 814 438 4 -a 814 144 10 -a 814 543 6 -a 814 371 9 -a 814 717 8 -a 814 886 1 -a 814 219 4 -a 814 253 4 -a 814 618 4 -a 814 145 10 -a 814 173 9 -a 814 456 1 -a 814 899 2 -a 814 967 4 -a 814 584 8 -a 815 418 6 -a 815 214 7 -a 815 485 2 -a 815 708 4 -a 815 904 8 -a 815 222 3 -a 815 328 7 -a 815 253 4 -a 815 696 3 -a 815 369 8 -a 815 413 2 -a 815 708 10 -a 815 637 3 -a 815 95 10 -a 815 644 10 -a 815 50 5 -a 815 239 4 -a 815 162 10 -a 815 45 10 -a 815 609 2 -a 815 878 4 -a 815 931 5 -a 815 827 9 -a 815 107 1 -a 815 524 1 -a 815 972 10 -a 815 279 2 -a 815 979 8 -a 815 846 6 -a 815 222 1 -a 815 538 7 -a 815 240 8 -a 815 435 8 -a 815 947 2 -a 815 314 5 -a 815 220 9 -a 815 251 8 -a 815 566 8 -a 815 915 6 -a 815 619 3 -a 815 978 1 -a 815 598 2 -a 815 231 7 -a 815 49 3 -a 815 218 3 -a 815 280 10 -a 815 287 5 -a 815 379 6 -a 815 324 3 -a 815 895 2 -a 815 233 10 -a 815 230 6 -a 815 697 2 -a 815 339 4 -a 815 753 3 -a 815 644 6 -a 815 617 3 -a 815 708 8 -a 815 466 2 -a 815 838 4 -a 815 221 3 -a 815 705 8 -a 815 248 2 -a 815 219 5 -a 815 627 3 -a 815 562 7 -a 815 439 7 -a 815 877 3 -a 815 103 2 -a 815 329 4 -a 815 471 7 -a 815 57 4 -a 815 927 4 -a 815 701 1 -a 815 105 2 -a 815 120 3 -a 815 980 6 -a 815 391 8 -a 815 498 5 -a 815 280 9 -a 815 261 8 -a 815 730 9 -a 815 509 4 -a 816 957 2 -a 816 44 6 -a 816 238 8 -a 816 577 10 -a 816 661 3 -a 816 945 8 -a 816 18 2 -a 816 474 6 -a 816 141 2 -a 816 722 9 -a 816 722 1 -a 816 360 8 -a 816 324 1 -a 816 259 9 -a 816 798 7 -a 816 177 1 -a 816 361 10 -a 816 102 1 -a 816 647 7 -a 816 417 4 -a 816 4 3 -a 816 324 1 -a 816 521 10 -a 816 123 10 -a 816 279 8 -a 816 911 1 -a 816 621 9 -a 816 558 9 -a 816 147 9 -a 816 326 6 -a 816 43 10 -a 816 80 2 -a 816 370 9 -a 816 280 2 -a 816 656 3 -a 816 6 2 -a 816 200 6 -a 816 673 1 -a 816 479 1 -a 816 340 1 -a 816 370 3 -a 816 176 3 -a 816 699 3 -a 816 693 4 -a 816 434 10 -a 816 472 7 -a 816 869 3 -a 816 795 5 -a 816 574 1 -a 816 492 9 -a 816 187 9 -a 816 577 9 -a 816 815 4 -a 816 708 4 -a 816 700 7 -a 816 69 2 -a 816 594 3 -a 816 296 8 -a 816 627 6 -a 816 741 9 -a 816 621 1 -a 816 669 2 -a 816 820 3 -a 816 990 6 -a 816 948 10 -a 816 451 3 -a 816 995 3 -a 816 123 7 -a 816 99 1 -a 816 450 5 -a 816 462 4 -a 816 468 1 -a 816 625 1 -a 816 137 4 -a 816 136 10 -a 816 35 8 -a 816 608 2 -a 816 829 4 -a 816 157 3 -a 816 472 2 -a 816 734 2 -a 816 262 9 -a 816 698 5 -a 816 409 2 -a 816 330 6 -a 816 268 3 -a 816 704 3 -a 816 956 3 -a 816 300 10 -a 816 600 3 -a 816 803 8 -a 816 266 7 -a 816 523 4 -a 816 229 10 -a 816 236 4 -a 816 645 10 -a 816 327 7 -a 817 685 9 -a 817 83 9 -a 817 794 7 -a 817 286 4 -a 817 219 2 -a 817 929 5 -a 817 320 10 -a 817 826 7 -a 817 909 2 -a 817 124 2 -a 817 983 7 -a 817 356 5 -a 817 114 5 -a 817 692 6 -a 817 617 6 -a 817 812 10 -a 817 76 8 -a 817 947 10 -a 817 55 8 -a 817 779 2 -a 817 878 1 -a 817 38 2 -a 817 54 9 -a 817 454 4 -a 817 840 5 -a 817 319 4 -a 817 976 3 -a 817 44 10 -a 817 555 8 -a 817 597 4 -a 817 370 9 -a 817 215 9 -a 817 679 8 -a 817 139 6 -a 817 500 9 -a 817 897 9 -a 817 43 1 -a 817 819 6 -a 817 698 1 -a 817 952 5 -a 817 942 2 -a 817 656 4 -a 817 283 8 -a 817 32 10 -a 817 323 1 -a 817 900 10 -a 817 843 9 -a 817 398 9 -a 817 822 4 -a 817 897 2 -a 817 152 9 -a 817 675 10 -a 817 934 7 -a 817 206 9 -a 817 104 6 -a 817 749 3 -a 817 524 5 -a 817 56 5 -a 817 792 2 -a 817 54 10 -a 817 652 2 -a 817 137 1 -a 817 269 5 -a 817 306 8 -a 817 275 1 -a 817 768 6 -a 817 178 4 -a 817 317 1 -a 817 563 10 -a 817 875 2 -a 817 244 9 -a 817 480 10 -a 817 507 6 -a 817 527 7 -a 817 511 3 -a 817 829 5 -a 817 402 1 -a 817 329 10 -a 817 203 2 -a 817 199 8 -a 817 201 8 -a 817 354 7 -a 817 873 1 -a 817 110 4 -a 817 559 4 -a 817 977 1 -a 817 858 2 -a 817 59 10 -a 817 8 3 -a 817 625 2 -a 817 112 1 -a 817 659 8 -a 817 761 8 -a 817 380 9 -a 817 964 9 -a 817 11 3 -a 818 124 2 -a 818 117 4 -a 818 328 9 -a 818 686 10 -a 818 991 7 -a 818 571 10 -a 818 141 10 -a 818 473 5 -a 818 73 7 -a 818 652 7 -a 818 278 8 -a 818 474 7 -a 818 980 3 -a 818 480 6 -a 818 672 8 -a 818 157 2 -a 818 833 5 -a 818 521 10 -a 818 266 8 -a 818 368 1 -a 818 473 9 -a 818 100 9 -a 818 426 5 -a 818 480 5 -a 818 724 9 -a 818 537 4 -a 818 114 6 -a 818 461 6 -a 818 917 8 -a 818 53 2 -a 818 471 4 -a 818 16 10 -a 818 169 7 -a 818 798 10 -a 818 701 4 -a 818 135 10 -a 818 345 1 -a 818 841 10 -a 818 608 7 -a 818 417 2 -a 818 468 1 -a 818 885 10 -a 818 891 10 -a 818 424 7 -a 818 340 5 -a 818 538 5 -a 818 580 7 -a 818 148 10 -a 818 34 3 -a 818 845 8 -a 818 515 8 -a 818 506 6 -a 818 944 9 -a 818 940 1 -a 818 985 9 -a 818 644 2 -a 818 453 1 -a 818 74 7 -a 818 80 10 -a 818 345 7 -a 818 126 6 -a 818 550 1 -a 818 360 6 -a 818 294 5 -a 818 324 2 -a 818 36 7 -a 818 429 9 -a 818 668 3 -a 818 876 4 -a 818 12 2 -a 818 60 6 -a 818 320 1 -a 818 896 6 -a 818 950 10 -a 818 743 6 -a 818 211 7 -a 818 464 1 -a 818 298 3 -a 818 358 10 -a 818 497 3 -a 818 118 3 -a 818 873 5 -a 818 38 10 -a 818 788 8 -a 818 963 6 -a 818 681 3 -a 818 216 2 -a 818 13 3 -a 818 760 1 -a 818 560 1 -a 818 138 6 -a 818 285 7 -a 818 919 6 -a 818 432 1 -a 818 608 7 -a 818 954 1 -a 818 860 3 -a 818 251 10 -a 818 806 5 -a 818 871 8 -a 818 311 8 -a 818 101 1 -a 818 742 1 -a 818 236 6 -a 818 843 9 -a 818 952 10 -a 818 699 8 -a 818 116 10 -a 818 285 5 -a 818 172 5 -a 818 233 4 -a 819 133 9 -a 819 150 1 -a 819 270 2 -a 819 921 5 -a 819 88 1 -a 819 950 4 -a 819 112 2 -a 819 100 8 -a 819 685 2 -a 819 672 3 -a 819 238 4 -a 819 970 2 -a 819 566 10 -a 819 669 6 -a 819 553 6 -a 819 496 9 -a 819 504 1 -a 819 804 2 -a 819 277 10 -a 819 350 7 -a 819 90 8 -a 819 377 9 -a 819 67 6 -a 819 325 3 -a 819 195 9 -a 819 310 8 -a 819 278 6 -a 819 171 10 -a 819 542 10 -a 819 411 10 -a 819 320 6 -a 819 812 6 -a 819 307 6 -a 819 407 2 -a 819 737 2 -a 819 418 3 -a 819 507 2 -a 819 398 2 -a 819 65 5 -a 819 744 9 -a 819 343 9 -a 819 631 7 -a 819 388 6 -a 819 895 3 -a 819 102 10 -a 819 891 1 -a 819 674 7 -a 819 378 4 -a 819 216 1 -a 819 763 8 -a 819 754 2 -a 819 282 2 -a 819 64 4 -a 819 948 4 -a 819 275 5 -a 819 63 6 -a 819 233 1 -a 819 552 4 -a 819 233 10 -a 819 774 4 -a 819 962 10 -a 819 552 1 -a 819 561 6 -a 819 244 5 -a 819 958 6 -a 819 274 8 -a 819 662 6 -a 819 440 3 -a 819 671 6 -a 819 726 10 -a 819 159 7 -a 819 332 2 -a 819 546 7 -a 819 883 9 -a 819 433 3 -a 819 412 5 -a 819 533 7 -a 819 810 1 -a 819 627 1 -a 819 271 5 -a 819 539 10 -a 819 908 2 -a 819 334 10 -a 819 462 7 -a 819 158 3 -a 819 396 7 -a 819 694 6 -a 819 710 8 -a 819 628 10 -a 819 444 8 -a 819 647 1 -a 819 155 4 -a 819 891 2 -a 819 89 10 -a 820 253 6 -a 820 528 5 -a 820 528 1 -a 820 923 6 -a 820 229 4 -a 820 687 6 -a 820 911 3 -a 820 561 9 -a 820 208 6 -a 820 770 9 -a 820 993 3 -a 820 620 3 -a 820 278 3 -a 820 779 5 -a 820 222 3 -a 820 548 9 -a 820 293 9 -a 820 106 3 -a 820 882 3 -a 820 755 6 -a 820 263 3 -a 820 253 8 -a 820 424 3 -a 820 972 7 -a 820 881 10 -a 820 867 9 -a 820 595 7 -a 820 11 7 -a 820 847 5 -a 820 461 7 -a 820 99 10 -a 820 75 10 -a 820 988 9 -a 820 627 6 -a 820 998 1 -a 820 192 8 -a 820 289 6 -a 820 884 1 -a 820 752 8 -a 820 496 9 -a 820 629 6 -a 820 721 9 -a 820 91 1 -a 820 906 10 -a 820 475 7 -a 820 313 3 -a 820 430 6 -a 820 767 4 -a 820 418 3 -a 820 287 1 -a 820 497 3 -a 820 680 8 -a 820 539 8 -a 820 921 6 -a 820 628 10 -a 820 395 5 -a 820 763 2 -a 820 198 3 -a 820 406 2 -a 820 585 5 -a 820 658 9 -a 820 504 4 -a 820 660 1 -a 820 621 1 -a 820 106 9 -a 820 633 3 -a 820 812 10 -a 820 394 6 -a 820 492 10 -a 820 540 8 -a 820 890 10 -a 820 97 1 -a 820 236 7 -a 820 980 6 -a 820 710 1 -a 820 268 3 -a 820 407 3 -a 820 452 2 -a 820 685 5 -a 820 693 4 -a 820 949 2 -a 820 341 2 -a 820 208 5 -a 820 845 6 -a 820 968 5 -a 820 602 1 -a 820 583 6 -a 820 141 6 -a 820 144 9 -a 820 798 3 -a 820 487 9 -a 820 803 6 -a 820 394 10 -a 820 592 9 -a 820 411 8 -a 820 181 6 -a 820 986 1 -a 820 902 7 -a 820 720 2 -a 820 851 9 -a 820 998 9 -a 820 955 1 -a 820 806 3 -a 820 976 5 -a 820 640 9 -a 820 50 2 -a 820 358 2 -a 820 68 6 -a 820 734 9 -a 821 27 5 -a 821 50 5 -a 821 234 3 -a 821 836 10 -a 821 835 2 -a 821 394 9 -a 821 133 7 -a 821 818 9 -a 821 537 10 -a 821 930 5 -a 821 280 8 -a 821 315 9 -a 821 299 1 -a 821 871 1 -a 821 725 9 -a 821 480 3 -a 821 832 7 -a 821 603 1 -a 821 175 2 -a 821 658 4 -a 821 576 3 -a 821 106 8 -a 821 440 3 -a 821 527 8 -a 821 745 5 -a 821 489 10 -a 821 885 1 -a 821 812 4 -a 821 198 7 -a 821 911 4 -a 821 803 7 -a 821 248 10 -a 821 120 4 -a 821 614 5 -a 821 240 2 -a 821 954 7 -a 821 373 9 -a 821 747 8 -a 821 520 3 -a 821 278 8 -a 821 2 9 -a 821 835 2 -a 821 577 4 -a 821 873 6 -a 821 535 10 -a 821 32 6 -a 821 680 2 -a 821 113 9 -a 821 206 2 -a 821 314 9 -a 821 689 7 -a 821 311 2 -a 821 753 4 -a 821 191 6 -a 821 32 5 -a 821 217 8 -a 821 51 7 -a 821 843 4 -a 821 414 3 -a 821 961 6 -a 821 622 5 -a 821 661 3 -a 821 56 7 -a 821 211 8 -a 821 901 6 -a 821 194 10 -a 821 249 8 -a 821 732 7 -a 821 714 2 -a 821 526 5 -a 821 734 1 -a 821 524 9 -a 821 78 2 -a 821 582 5 -a 821 34 8 -a 821 109 2 -a 821 237 3 -a 821 147 9 -a 821 315 6 -a 821 550 7 -a 821 835 9 -a 821 625 3 -a 821 278 1 -a 821 1 3 -a 821 656 3 -a 821 494 2 -a 821 52 4 -a 821 475 4 -a 821 908 10 -a 821 72 10 -a 821 544 5 -a 822 44 10 -a 822 282 8 -a 822 420 2 -a 822 29 6 -a 822 476 9 -a 822 668 9 -a 822 760 8 -a 822 165 5 -a 822 170 5 -a 822 469 6 -a 822 688 8 -a 822 247 3 -a 822 26 7 -a 822 721 5 -a 822 356 5 -a 822 263 8 -a 822 867 7 -a 822 670 9 -a 822 812 2 -a 822 677 3 -a 822 270 5 -a 822 66 8 -a 822 678 6 -a 822 926 1 -a 822 559 5 -a 822 729 2 -a 822 376 3 -a 822 442 9 -a 822 716 5 -a 822 447 8 -a 822 986 10 -a 822 759 3 -a 822 728 10 -a 822 381 9 -a 822 787 8 -a 822 179 5 -a 822 25 5 -a 822 523 10 -a 822 343 1 -a 822 194 9 -a 822 991 1 -a 822 6 6 -a 822 440 10 -a 822 727 1 -a 822 795 3 -a 822 255 4 -a 822 569 7 -a 822 440 5 -a 822 42 10 -a 822 222 7 -a 822 710 7 -a 822 107 3 -a 822 899 5 -a 822 611 10 -a 822 666 4 -a 822 603 9 -a 822 986 3 -a 822 83 4 -a 822 294 1 -a 822 408 3 -a 822 44 10 -a 822 29 10 -a 822 111 3 -a 822 425 8 -a 822 815 4 -a 822 290 10 -a 822 449 4 -a 822 313 3 -a 822 632 9 -a 822 642 1 -a 822 280 6 -a 822 638 4 -a 822 57 7 -a 822 272 6 -a 822 340 3 -a 822 852 1 -a 822 526 2 -a 822 908 3 -a 822 267 4 -a 822 567 6 -a 822 105 6 -a 822 976 4 -a 822 674 6 -a 822 562 4 -a 822 315 7 -a 822 581 5 -a 822 523 1 -a 822 397 8 -a 822 875 9 -a 823 930 8 -a 823 441 4 -a 823 903 10 -a 823 17 10 -a 823 865 5 -a 823 693 4 -a 823 306 4 -a 823 289 4 -a 823 937 2 -a 823 930 6 -a 823 261 4 -a 823 550 3 -a 823 986 8 -a 823 532 7 -a 823 889 4 -a 823 813 2 -a 823 33 7 -a 823 773 2 -a 823 56 5 -a 823 599 6 -a 823 877 1 -a 823 7 7 -a 823 248 4 -a 823 856 10 -a 823 569 4 -a 823 562 7 -a 823 412 9 -a 823 67 1 -a 823 959 3 -a 823 262 1 -a 823 997 2 -a 823 375 8 -a 823 140 4 -a 823 215 4 -a 823 833 3 -a 823 294 7 -a 823 503 1 -a 823 814 9 -a 823 206 8 -a 823 408 5 -a 823 50 6 -a 823 756 5 -a 823 369 4 -a 823 581 9 -a 823 620 3 -a 823 158 10 -a 823 613 2 -a 823 368 5 -a 823 213 10 -a 823 187 1 -a 823 221 2 -a 823 219 10 -a 823 435 3 -a 823 52 2 -a 823 787 10 -a 823 996 5 -a 823 463 8 -a 823 854 10 -a 823 930 5 -a 823 725 3 -a 823 826 1 -a 823 280 8 -a 823 864 8 -a 823 814 5 -a 823 494 7 -a 823 672 4 -a 823 83 2 -a 823 996 1 -a 823 461 6 -a 823 288 10 -a 823 379 7 -a 823 510 3 -a 823 19 8 -a 823 748 7 -a 823 66 10 -a 823 639 6 -a 823 905 8 -a 823 678 2 -a 823 93 10 -a 823 865 2 -a 823 202 2 -a 823 311 3 -a 823 275 6 -a 823 253 2 -a 823 74 8 -a 823 246 3 -a 823 716 9 -a 823 927 4 -a 823 152 9 -a 823 416 1 -a 823 728 1 -a 823 431 7 -a 823 255 8 -a 823 517 6 -a 823 925 7 -a 824 927 5 -a 824 599 6 -a 824 896 6 -a 824 363 7 -a 824 886 1 -a 824 251 7 -a 824 873 8 -a 824 905 3 -a 824 998 3 -a 824 938 4 -a 824 519 7 -a 824 878 2 -a 824 592 3 -a 824 500 1 -a 824 970 8 -a 824 432 5 -a 824 702 9 -a 824 256 3 -a 824 706 9 -a 824 954 2 -a 824 329 10 -a 824 951 8 -a 824 645 7 -a 824 231 4 -a 824 78 6 -a 824 36 1 -a 824 958 10 -a 824 509 6 -a 824 291 7 -a 824 450 1 -a 824 409 8 -a 824 193 2 -a 824 24 3 -a 824 280 8 -a 824 555 5 -a 824 910 5 -a 824 530 2 -a 824 403 6 -a 824 790 9 -a 824 503 9 -a 824 317 8 -a 824 284 2 -a 824 356 2 -a 824 908 1 -a 824 783 7 -a 824 301 10 -a 824 315 3 -a 824 460 10 -a 824 557 3 -a 824 390 4 -a 824 885 1 -a 824 946 7 -a 824 10 6 -a 824 92 5 -a 824 46 8 -a 824 25 4 -a 824 508 2 -a 824 336 3 -a 824 475 2 -a 824 916 9 -a 824 528 8 -a 824 498 10 -a 824 171 10 -a 824 58 9 -a 824 383 4 -a 824 701 1 -a 824 461 7 -a 824 148 2 -a 824 179 1 -a 824 777 5 -a 824 431 10 -a 824 535 1 -a 824 660 5 -a 824 190 1 -a 824 835 8 -a 824 974 9 -a 824 649 3 -a 824 367 8 -a 824 969 4 -a 824 14 3 -a 824 228 2 -a 824 890 8 -a 824 24 5 -a 824 319 2 -a 824 889 9 -a 824 69 2 -a 824 343 8 -a 824 372 2 -a 824 404 9 -a 824 817 2 -a 824 263 10 -a 824 931 4 -a 824 291 10 -a 824 434 4 -a 824 988 1 -a 824 673 10 -a 824 110 9 -a 824 424 5 -a 824 821 7 -a 824 288 8 -a 824 176 6 -a 824 227 6 -a 824 822 8 -a 824 835 8 -a 824 416 9 -a 825 633 1 -a 825 784 6 -a 825 41 7 -a 825 999 2 -a 825 728 3 -a 825 54 2 -a 825 202 8 -a 825 594 5 -a 825 77 2 -a 825 520 8 -a 825 458 4 -a 825 145 8 -a 825 863 6 -a 825 830 6 -a 825 548 2 -a 825 655 5 -a 825 68 7 -a 825 454 2 -a 825 945 7 -a 825 501 10 -a 825 418 7 -a 825 594 9 -a 825 610 3 -a 825 841 7 -a 825 390 1 -a 825 898 4 -a 825 616 3 -a 825 695 8 -a 825 827 7 -a 825 8 7 -a 825 303 1 -a 825 587 4 -a 825 48 2 -a 825 278 1 -a 825 290 9 -a 825 101 10 -a 825 479 6 -a 825 883 5 -a 825 178 9 -a 825 999 6 -a 825 317 6 -a 825 322 8 -a 825 837 4 -a 825 122 5 -a 825 870 8 -a 825 467 2 -a 825 189 9 -a 825 299 8 -a 825 388 1 -a 825 690 1 -a 825 716 3 -a 825 981 1 -a 825 275 3 -a 825 533 9 -a 825 346 5 -a 825 148 1 -a 825 525 6 -a 825 961 10 -a 825 843 3 -a 825 327 7 -a 825 968 4 -a 825 121 10 -a 825 913 9 -a 825 398 9 -a 825 179 10 -a 825 92 5 -a 825 877 4 -a 825 37 9 -a 825 269 1 -a 825 851 8 -a 825 353 7 -a 825 590 2 -a 825 663 1 -a 825 474 2 -a 825 435 7 -a 825 105 4 -a 825 663 3 -a 825 734 6 -a 825 492 7 -a 825 328 4 -a 825 425 1 -a 825 448 10 -a 825 602 10 -a 825 957 3 -a 825 793 7 -a 825 750 1 -a 825 457 2 -a 825 730 6 -a 825 568 2 -a 825 784 3 -a 825 673 1 -a 825 688 10 -a 825 672 6 -a 825 664 8 -a 825 62 9 -a 825 850 1 -a 825 755 4 -a 825 938 8 -a 825 887 6 -a 825 764 3 -a 825 215 6 -a 826 588 3 -a 826 402 3 -a 826 689 7 -a 826 506 8 -a 826 327 8 -a 826 732 4 -a 826 998 1 -a 826 654 4 -a 826 132 1 -a 826 421 1 -a 826 231 1 -a 826 65 10 -a 826 190 6 -a 826 980 10 -a 826 521 1 -a 826 919 7 -a 826 523 1 -a 826 280 10 -a 826 567 5 -a 826 187 10 -a 826 952 2 -a 826 206 10 -a 826 248 7 -a 826 777 3 -a 826 960 4 -a 826 161 6 -a 826 639 7 -a 826 958 7 -a 826 924 7 -a 826 854 6 -a 826 522 10 -a 826 301 3 -a 826 518 1 -a 826 520 8 -a 826 806 9 -a 826 844 3 -a 826 227 10 -a 826 779 4 -a 826 473 7 -a 826 358 4 -a 826 176 3 -a 826 703 5 -a 826 422 3 -a 826 365 9 -a 826 659 9 -a 826 943 1 -a 826 259 7 -a 826 157 6 -a 826 198 1 -a 826 825 2 -a 826 343 8 -a 826 125 4 -a 826 7 6 -a 826 590 7 -a 826 902 1 -a 826 966 10 -a 826 750 4 -a 826 516 7 -a 826 900 9 -a 826 649 7 -a 826 345 9 -a 826 397 7 -a 826 949 6 -a 826 862 2 -a 826 916 8 -a 826 731 8 -a 826 681 8 -a 826 118 1 -a 826 485 1 -a 826 129 2 -a 826 475 5 -a 826 660 8 -a 826 832 5 -a 826 897 6 -a 826 466 8 -a 826 815 6 -a 826 258 5 -a 826 622 3 -a 826 59 7 -a 826 965 10 -a 826 113 2 -a 826 65 1 -a 826 530 9 -a 826 6 9 -a 826 256 1 -a 826 505 8 -a 826 905 6 -a 826 904 1 -a 826 850 5 -a 826 277 2 -a 826 829 3 -a 826 687 6 -a 826 168 7 -a 826 535 4 -a 826 344 4 -a 826 285 8 -a 826 472 9 -a 826 760 7 -a 826 655 8 -a 827 279 2 -a 827 632 7 -a 827 654 10 -a 827 744 2 -a 827 422 2 -a 827 912 2 -a 827 342 7 -a 827 409 7 -a 827 970 3 -a 827 282 9 -a 827 521 5 -a 827 10 10 -a 827 811 2 -a 827 510 1 -a 827 15 2 -a 827 42 4 -a 827 920 9 -a 827 946 9 -a 827 840 8 -a 827 172 8 -a 827 750 3 -a 827 502 3 -a 827 340 5 -a 827 260 1 -a 827 845 7 -a 827 624 6 -a 827 254 6 -a 827 293 7 -a 827 359 1 -a 827 908 3 -a 827 571 6 -a 827 990 6 -a 827 538 7 -a 827 291 3 -a 827 387 9 -a 827 425 4 -a 827 632 6 -a 827 796 3 -a 827 370 4 -a 827 913 6 -a 827 292 6 -a 827 379 10 -a 827 699 6 -a 827 802 6 -a 827 393 10 -a 827 741 2 -a 827 792 2 -a 827 288 3 -a 827 662 4 -a 827 607 4 -a 827 460 2 -a 827 387 6 -a 827 84 1 -a 827 799 10 -a 827 646 1 -a 827 929 3 -a 827 398 6 -a 827 899 1 -a 827 197 9 -a 827 757 4 -a 827 783 4 -a 827 767 3 -a 827 722 7 -a 827 296 1 -a 827 33 1 -a 827 85 7 -a 827 720 1 -a 827 664 10 -a 827 880 2 -a 827 65 5 -a 827 552 5 -a 827 147 3 -a 827 443 6 -a 827 227 5 -a 827 948 3 -a 827 835 4 -a 827 967 5 -a 827 715 7 -a 827 99 5 -a 827 604 8 -a 827 297 3 -a 827 558 1 -a 827 990 5 -a 827 381 7 -a 827 332 10 -a 827 611 2 -a 827 285 7 -a 827 729 1 -a 827 485 8 -a 827 481 8 -a 827 461 8 -a 827 243 9 -a 827 223 1 -a 827 159 10 -a 827 538 6 -a 827 256 10 -a 827 243 5 -a 827 233 6 -a 827 919 4 -a 828 98 9 -a 828 297 6 -a 828 447 9 -a 828 244 8 -a 828 739 2 -a 828 673 6 -a 828 168 10 -a 828 550 6 -a 828 615 3 -a 828 882 4 -a 828 648 4 -a 828 194 9 -a 828 155 3 -a 828 181 3 -a 828 159 10 -a 828 535 2 -a 828 512 4 -a 828 769 10 -a 828 819 1 -a 828 216 2 -a 828 229 2 -a 828 275 8 -a 828 677 1 -a 828 472 9 -a 828 497 7 -a 828 835 6 -a 828 752 4 -a 828 53 1 -a 828 218 7 -a 828 647 4 -a 828 150 8 -a 828 514 1 -a 828 69 5 -a 828 393 4 -a 828 229 9 -a 828 741 7 -a 828 560 2 -a 828 778 3 -a 828 331 8 -a 828 418 1 -a 828 401 8 -a 828 524 10 -a 828 572 9 -a 828 581 3 -a 828 682 5 -a 828 82 1 -a 828 68 5 -a 828 426 2 -a 828 900 5 -a 828 283 6 -a 828 654 8 -a 828 150 6 -a 828 959 9 -a 828 101 7 -a 828 646 8 -a 828 769 9 -a 828 86 7 -a 828 374 2 -a 828 821 1 -a 828 303 9 -a 828 970 7 -a 828 816 9 -a 828 64 7 -a 828 339 7 -a 828 20 7 -a 828 804 2 -a 828 898 1 -a 828 797 3 -a 828 110 8 -a 828 291 6 -a 828 173 3 -a 828 633 4 -a 828 862 2 -a 828 753 1 -a 828 290 5 -a 828 943 9 -a 828 820 10 -a 828 715 9 -a 828 818 7 -a 828 79 1 -a 828 344 6 -a 828 967 5 -a 828 13 4 -a 828 445 2 -a 828 589 4 -a 828 782 5 -a 828 530 3 -a 828 962 4 -a 828 578 5 -a 828 832 2 -a 828 957 2 -a 828 524 4 -a 828 623 4 -a 828 862 9 -a 828 643 6 -a 828 799 1 -a 828 735 9 -a 828 415 2 -a 828 908 10 -a 828 2 1 -a 828 588 5 -a 828 516 8 -a 828 863 1 -a 828 316 9 -a 828 805 8 -a 829 782 9 -a 829 112 10 -a 829 495 10 -a 829 575 8 -a 829 190 2 -a 829 838 10 -a 829 518 3 -a 829 202 2 -a 829 258 9 -a 829 82 4 -a 829 983 8 -a 829 787 1 -a 829 19 9 -a 829 537 4 -a 829 594 2 -a 829 975 3 -a 829 36 3 -a 829 193 6 -a 829 970 8 -a 829 897 5 -a 829 835 2 -a 829 744 7 -a 829 607 9 -a 829 225 7 -a 829 627 2 -a 829 608 1 -a 829 812 4 -a 829 118 2 -a 829 447 4 -a 829 104 7 -a 829 922 1 -a 829 204 7 -a 829 215 9 -a 829 392 8 -a 829 778 2 -a 829 404 1 -a 829 205 10 -a 829 271 8 -a 829 605 6 -a 829 463 10 -a 829 352 4 -a 829 564 3 -a 829 225 2 -a 829 370 1 -a 829 76 5 -a 829 819 5 -a 829 320 3 -a 829 111 10 -a 829 265 10 -a 829 821 4 -a 829 589 3 -a 829 21 8 -a 829 610 9 -a 829 173 3 -a 829 833 4 -a 829 727 5 -a 829 619 10 -a 829 936 7 -a 829 624 10 -a 829 822 4 -a 829 126 4 -a 829 575 8 -a 829 529 4 -a 829 196 8 -a 829 846 10 -a 829 109 10 -a 829 658 5 -a 829 173 10 -a 829 672 9 -a 829 882 3 -a 829 543 2 -a 829 747 4 -a 829 676 7 -a 829 862 1 -a 829 857 4 -a 829 662 6 -a 829 103 7 -a 829 839 9 -a 829 458 10 -a 829 86 5 -a 829 404 7 -a 829 479 1 -a 829 696 2 -a 829 576 8 -a 829 287 1 -a 829 398 6 -a 829 170 1 -a 829 198 10 -a 829 991 10 -a 829 323 7 -a 829 541 9 -a 829 851 2 -a 829 183 10 -a 829 362 7 -a 829 959 5 -a 829 840 7 -a 829 535 3 -a 829 607 3 -a 829 698 3 -a 829 53 8 -a 829 329 10 -a 830 349 3 -a 830 914 7 -a 830 162 8 -a 830 1000 6 -a 830 444 8 -a 830 78 1 -a 830 379 7 -a 830 922 6 -a 830 773 10 -a 830 954 2 -a 830 184 2 -a 830 146 3 -a 830 99 2 -a 830 381 4 -a 830 143 5 -a 830 65 7 -a 830 703 6 -a 830 131 2 -a 830 606 4 -a 830 529 2 -a 830 313 2 -a 830 967 3 -a 830 464 9 -a 830 129 8 -a 830 477 5 -a 830 46 7 -a 830 826 1 -a 830 529 9 -a 830 374 9 -a 830 150 4 -a 830 419 1 -a 830 535 5 -a 830 136 9 -a 830 410 4 -a 830 511 8 -a 830 580 5 -a 830 487 3 -a 830 889 5 -a 830 477 1 -a 830 235 6 -a 830 819 2 -a 830 661 9 -a 830 381 2 -a 830 917 10 -a 830 17 8 -a 830 523 7 -a 830 982 6 -a 830 720 4 -a 830 653 1 -a 830 563 7 -a 830 224 5 -a 830 966 4 -a 830 505 7 -a 830 687 8 -a 830 70 2 -a 830 982 10 -a 830 732 10 -a 830 895 1 -a 830 486 10 -a 830 82 1 -a 830 20 3 -a 830 904 9 -a 830 616 5 -a 830 156 4 -a 830 290 3 -a 830 102 8 -a 830 735 7 -a 830 776 5 -a 830 991 10 -a 830 187 1 -a 830 785 5 -a 830 847 10 -a 830 367 4 -a 830 677 2 -a 830 864 7 -a 830 889 8 -a 830 634 4 -a 830 559 9 -a 830 518 8 -a 830 172 2 -a 830 782 2 -a 830 459 8 -a 830 677 4 -a 830 445 8 -a 830 528 10 -a 830 634 9 -a 830 152 2 -a 830 398 7 -a 830 95 7 -a 830 233 1 -a 830 417 4 -a 830 999 3 -a 830 849 10 -a 830 572 10 -a 830 264 1 -a 830 950 1 -a 830 282 2 -a 830 15 8 -a 830 916 2 -a 830 469 3 -a 830 1 5 -a 830 676 7 -a 830 291 7 -a 830 367 5 -a 830 329 8 -a 830 130 4 -a 830 232 3 -a 830 962 9 -a 830 688 8 -a 830 749 6 -a 830 110 2 -a 831 446 6 -a 831 183 3 -a 831 786 6 -a 831 890 1 -a 831 710 4 -a 831 395 10 -a 831 17 1 -a 831 83 5 -a 831 489 3 -a 831 250 7 -a 831 499 9 -a 831 463 3 -a 831 74 8 -a 831 47 10 -a 831 726 3 -a 831 328 1 -a 831 741 5 -a 831 915 4 -a 831 796 6 -a 831 741 6 -a 831 566 3 -a 831 63 8 -a 831 84 9 -a 831 894 4 -a 831 192 5 -a 831 315 6 -a 831 832 7 -a 831 880 6 -a 831 39 1 -a 831 941 9 -a 831 301 8 -a 831 221 10 -a 831 702 8 -a 831 166 3 -a 831 930 10 -a 831 72 6 -a 831 182 5 -a 831 560 9 -a 831 431 9 -a 831 486 4 -a 831 504 2 -a 831 532 4 -a 831 724 7 -a 831 503 1 -a 831 860 7 -a 831 440 7 -a 831 393 9 -a 831 631 1 -a 831 157 3 -a 831 958 5 -a 831 693 1 -a 831 240 3 -a 831 828 5 -a 831 885 10 -a 831 554 10 -a 831 635 1 -a 831 740 8 -a 831 592 2 -a 831 551 1 -a 831 16 4 -a 831 812 7 -a 831 228 8 -a 831 181 6 -a 831 717 8 -a 831 299 3 -a 831 362 10 -a 831 704 2 -a 831 858 6 -a 831 793 4 -a 831 165 10 -a 831 856 3 -a 831 272 4 -a 831 697 10 -a 831 556 7 -a 831 774 10 -a 831 532 6 -a 831 995 10 -a 831 142 5 -a 831 138 6 -a 831 127 3 -a 831 76 2 -a 831 831 4 -a 831 366 3 -a 831 903 6 -a 831 691 10 -a 831 919 1 -a 831 513 2 -a 831 406 5 -a 831 486 4 -a 831 39 10 -a 831 421 3 -a 831 273 4 -a 832 266 8 -a 832 601 1 -a 832 989 3 -a 832 564 10 -a 832 962 7 -a 832 668 9 -a 832 397 10 -a 832 730 8 -a 832 833 1 -a 832 229 10 -a 832 505 10 -a 832 784 3 -a 832 751 8 -a 832 12 8 -a 832 754 7 -a 832 893 8 -a 832 149 5 -a 832 881 6 -a 832 968 10 -a 832 979 8 -a 832 222 10 -a 832 846 7 -a 832 645 3 -a 832 117 2 -a 832 334 6 -a 832 26 2 -a 832 602 10 -a 832 372 1 -a 832 446 9 -a 832 875 10 -a 832 637 2 -a 832 22 9 -a 832 839 4 -a 832 176 10 -a 832 984 8 -a 832 483 2 -a 832 572 6 -a 832 689 2 -a 832 291 6 -a 832 800 2 -a 832 666 6 -a 832 795 4 -a 832 559 2 -a 832 393 5 -a 832 806 2 -a 832 289 3 -a 832 261 1 -a 832 954 8 -a 832 145 8 -a 832 204 9 -a 832 909 5 -a 832 366 7 -a 832 25 7 -a 832 529 6 -a 832 482 8 -a 832 358 2 -a 832 555 9 -a 832 60 3 -a 832 729 10 -a 832 1000 2 -a 832 934 3 -a 832 341 4 -a 832 748 9 -a 832 516 3 -a 832 981 7 -a 832 206 10 -a 832 63 2 -a 832 645 6 -a 832 496 4 -a 832 863 3 -a 832 287 5 -a 832 266 10 -a 832 397 5 -a 832 679 9 -a 832 47 7 -a 832 685 6 -a 832 939 8 -a 832 829 6 -a 832 118 7 -a 832 885 8 -a 832 171 5 -a 832 142 4 -a 832 389 3 -a 832 652 7 -a 832 499 5 -a 832 943 10 -a 832 711 8 -a 832 203 3 -a 832 919 7 -a 832 620 10 -a 832 543 8 -a 832 916 10 -a 832 344 5 -a 832 34 10 -a 832 872 1 -a 832 549 1 -a 832 96 3 -a 832 492 5 -a 832 21 9 -a 832 958 9 -a 832 778 4 -a 832 286 3 -a 832 331 7 -a 832 432 8 -a 832 333 8 -a 832 346 10 -a 832 309 2 -a 832 820 10 -a 832 463 6 -a 832 169 5 -a 832 990 9 -a 832 604 1 -a 832 557 7 -a 832 617 6 -a 832 78 2 -a 832 476 1 -a 832 304 1 -a 832 280 7 -a 832 370 10 -a 832 923 1 -a 833 822 7 -a 833 261 5 -a 833 242 4 -a 833 855 9 -a 833 108 3 -a 833 791 8 -a 833 951 9 -a 833 599 6 -a 833 811 2 -a 833 884 2 -a 833 353 6 -a 833 72 4 -a 833 190 10 -a 833 784 6 -a 833 404 5 -a 833 181 5 -a 833 106 6 -a 833 712 5 -a 833 1000 5 -a 833 568 6 -a 833 880 2 -a 833 965 10 -a 833 148 3 -a 833 413 2 -a 833 557 6 -a 833 225 10 -a 833 888 10 -a 833 860 8 -a 833 505 8 -a 833 233 1 -a 833 759 10 -a 833 302 2 -a 833 493 3 -a 833 1000 4 -a 833 133 9 -a 833 600 8 -a 833 766 1 -a 833 59 6 -a 833 174 8 -a 833 552 4 -a 833 942 1 -a 833 526 4 -a 833 624 2 -a 833 108 8 -a 833 286 2 -a 833 3 1 -a 833 288 1 -a 833 391 10 -a 833 715 8 -a 833 263 9 -a 833 958 1 -a 833 570 6 -a 833 203 9 -a 833 81 2 -a 833 982 9 -a 833 759 9 -a 833 306 8 -a 833 845 9 -a 833 595 8 -a 833 810 3 -a 833 53 7 -a 833 329 6 -a 833 87 8 -a 833 545 5 -a 833 304 6 -a 833 219 4 -a 833 120 6 -a 833 46 3 -a 833 277 7 -a 833 294 3 -a 833 597 4 -a 833 195 5 -a 833 819 8 -a 833 196 8 -a 833 302 10 -a 833 80 2 -a 833 199 9 -a 833 589 8 -a 833 470 8 -a 833 913 5 -a 833 851 2 -a 833 404 5 -a 833 458 8 -a 833 29 1 -a 833 484 10 -a 833 416 7 -a 833 787 5 -a 833 789 3 -a 833 236 8 -a 833 357 1 -a 833 574 8 -a 833 289 4 -a 833 685 8 -a 833 661 7 -a 833 833 2 -a 833 989 1 -a 833 879 9 -a 834 953 10 -a 834 10 9 -a 834 132 6 -a 834 222 7 -a 834 606 4 -a 834 326 9 -a 834 16 6 -a 834 802 9 -a 834 627 2 -a 834 96 5 -a 834 1000 6 -a 834 191 7 -a 834 565 9 -a 834 888 7 -a 834 17 5 -a 834 968 8 -a 834 321 8 -a 834 45 5 -a 834 428 9 -a 834 736 2 -a 834 831 8 -a 834 192 3 -a 834 972 5 -a 834 164 8 -a 834 766 9 -a 834 236 7 -a 834 848 10 -a 834 402 1 -a 834 44 2 -a 834 812 7 -a 834 256 10 -a 834 996 2 -a 834 821 5 -a 834 387 1 -a 834 193 7 -a 834 403 8 -a 834 712 3 -a 834 209 3 -a 834 180 9 -a 834 314 5 -a 834 304 8 -a 834 155 9 -a 834 504 3 -a 834 868 1 -a 834 18 9 -a 834 520 4 -a 834 812 9 -a 834 338 10 -a 834 564 6 -a 834 215 5 -a 834 50 10 -a 834 371 10 -a 834 406 1 -a 834 534 7 -a 834 147 8 -a 834 232 4 -a 834 357 2 -a 834 548 10 -a 834 275 6 -a 834 145 10 -a 834 804 9 -a 834 247 1 -a 834 965 1 -a 834 166 1 -a 834 439 3 -a 834 343 2 -a 834 878 10 -a 834 647 6 -a 834 522 8 -a 834 167 2 -a 834 950 9 -a 834 676 3 -a 834 671 3 -a 834 794 9 -a 834 693 8 -a 834 166 1 -a 834 581 6 -a 834 7 8 -a 834 730 5 -a 834 795 5 -a 834 56 6 -a 834 76 6 -a 834 176 7 -a 834 52 8 -a 834 609 9 -a 834 323 8 -a 834 283 3 -a 834 965 8 -a 834 870 5 -a 834 557 2 -a 834 85 2 -a 834 649 10 -a 834 803 7 -a 834 26 6 -a 834 815 7 -a 834 218 3 -a 834 368 3 -a 834 668 7 -a 835 864 7 -a 835 890 8 -a 835 834 4 -a 835 790 6 -a 835 541 1 -a 835 480 2 -a 835 559 9 -a 835 210 10 -a 835 646 1 -a 835 115 4 -a 835 216 1 -a 835 351 3 -a 835 909 2 -a 835 271 9 -a 835 426 9 -a 835 60 2 -a 835 322 9 -a 835 10 6 -a 835 382 4 -a 835 604 4 -a 835 974 10 -a 835 228 1 -a 835 136 10 -a 835 35 4 -a 835 876 10 -a 835 939 5 -a 835 60 4 -a 835 666 7 -a 835 132 4 -a 835 427 6 -a 835 309 2 -a 835 995 10 -a 835 292 1 -a 835 119 9 -a 835 760 4 -a 835 833 6 -a 835 598 2 -a 835 294 6 -a 835 18 8 -a 835 219 2 -a 835 408 4 -a 835 233 2 -a 835 569 5 -a 835 292 7 -a 835 503 1 -a 835 994 4 -a 835 352 8 -a 835 824 4 -a 835 733 9 -a 835 403 6 -a 835 953 5 -a 835 960 2 -a 835 538 3 -a 835 987 5 -a 835 812 2 -a 835 452 2 -a 835 22 2 -a 835 453 7 -a 835 583 7 -a 835 448 2 -a 835 762 2 -a 835 554 5 -a 835 740 2 -a 835 880 6 -a 835 289 3 -a 835 548 6 -a 835 453 6 -a 835 583 1 -a 835 565 3 -a 835 672 5 -a 835 990 5 -a 835 797 9 -a 835 216 7 -a 835 258 5 -a 835 275 6 -a 835 186 7 -a 835 609 5 -a 835 74 3 -a 835 164 3 -a 835 317 10 -a 835 476 5 -a 835 92 3 -a 835 253 7 -a 835 54 8 -a 835 40 9 -a 835 441 2 -a 835 75 8 -a 835 492 7 -a 835 523 5 -a 835 229 4 -a 835 552 9 -a 835 238 2 -a 836 84 7 -a 836 841 7 -a 836 785 2 -a 836 537 9 -a 836 399 2 -a 836 325 8 -a 836 184 6 -a 836 364 5 -a 836 97 10 -a 836 399 4 -a 836 621 7 -a 836 371 2 -a 836 584 3 -a 836 205 2 -a 836 444 1 -a 836 748 10 -a 836 522 5 -a 836 919 5 -a 836 839 3 -a 836 774 6 -a 836 907 4 -a 836 893 4 -a 836 813 8 -a 836 323 3 -a 836 967 6 -a 836 280 7 -a 836 322 10 -a 836 465 2 -a 836 509 5 -a 836 873 3 -a 836 702 5 -a 836 592 3 -a 836 689 9 -a 836 462 6 -a 836 104 10 -a 836 63 1 -a 836 786 10 -a 836 287 10 -a 836 427 5 -a 836 882 7 -a 836 686 5 -a 836 23 10 -a 836 228 8 -a 836 245 3 -a 836 228 10 -a 836 671 10 -a 836 992 2 -a 836 749 1 -a 836 565 5 -a 836 807 4 -a 836 498 6 -a 836 448 8 -a 836 675 10 -a 836 286 1 -a 836 770 5 -a 836 617 10 -a 836 565 5 -a 836 67 3 -a 836 58 5 -a 836 49 2 -a 836 940 9 -a 836 759 7 -a 836 641 2 -a 836 604 2 -a 836 197 5 -a 836 744 2 -a 836 667 4 -a 836 982 7 -a 836 7 9 -a 836 69 7 -a 836 840 6 -a 836 692 4 -a 836 91 7 -a 836 43 1 -a 836 936 2 -a 836 318 6 -a 836 714 6 -a 836 904 3 -a 836 42 8 -a 836 254 7 -a 836 686 5 -a 836 539 5 -a 836 701 6 -a 836 336 4 -a 837 824 7 -a 837 447 5 -a 837 952 9 -a 837 365 1 -a 837 513 3 -a 837 413 9 -a 837 428 10 -a 837 744 4 -a 837 29 6 -a 837 8 8 -a 837 940 9 -a 837 773 1 -a 837 674 8 -a 837 897 2 -a 837 779 3 -a 837 742 4 -a 837 712 9 -a 837 446 10 -a 837 832 1 -a 837 755 6 -a 837 357 1 -a 837 126 8 -a 837 444 5 -a 837 236 7 -a 837 167 4 -a 837 697 5 -a 837 921 10 -a 837 706 2 -a 837 374 3 -a 837 232 5 -a 837 505 9 -a 837 820 8 -a 837 160 4 -a 837 869 1 -a 837 308 3 -a 837 144 9 -a 837 258 1 -a 837 736 2 -a 837 887 3 -a 837 286 10 -a 837 743 3 -a 837 802 6 -a 837 34 8 -a 837 392 8 -a 837 675 6 -a 837 812 3 -a 837 109 6 -a 837 362 7 -a 837 233 8 -a 837 940 1 -a 837 92 5 -a 837 590 8 -a 837 41 5 -a 837 535 10 -a 837 825 9 -a 837 208 10 -a 837 208 3 -a 837 722 8 -a 837 913 8 -a 837 581 7 -a 837 953 9 -a 837 393 8 -a 837 376 3 -a 837 88 6 -a 837 238 1 -a 837 683 7 -a 837 232 2 -a 837 495 1 -a 837 394 3 -a 837 94 6 -a 837 780 8 -a 837 112 2 -a 837 896 10 -a 837 814 1 -a 837 503 6 -a 837 546 10 -a 837 601 1 -a 837 611 3 -a 837 907 10 -a 837 834 5 -a 837 527 2 -a 837 999 3 -a 837 399 9 -a 837 567 10 -a 837 509 6 -a 837 199 7 -a 837 774 2 -a 837 716 6 -a 837 920 3 -a 837 662 5 -a 837 272 7 -a 837 849 3 -a 837 31 10 -a 837 647 10 -a 837 936 2 -a 837 268 8 -a 837 306 7 -a 837 143 6 -a 837 762 9 -a 837 699 3 -a 837 237 1 -a 838 517 9 -a 838 811 5 -a 838 108 10 -a 838 306 5 -a 838 289 9 -a 838 653 4 -a 838 907 8 -a 838 900 2 -a 838 535 7 -a 838 716 4 -a 838 402 1 -a 838 509 8 -a 838 90 6 -a 838 968 3 -a 838 288 5 -a 838 718 2 -a 838 709 1 -a 838 184 2 -a 838 355 3 -a 838 981 1 -a 838 8 7 -a 838 385 3 -a 838 603 10 -a 838 943 7 -a 838 652 1 -a 838 908 4 -a 838 62 5 -a 838 389 3 -a 838 583 1 -a 838 298 5 -a 838 906 1 -a 838 369 7 -a 838 405 5 -a 838 187 5 -a 838 657 3 -a 838 33 7 -a 838 69 3 -a 838 532 1 -a 838 567 4 -a 838 784 3 -a 838 933 9 -a 838 52 1 -a 838 873 3 -a 838 877 2 -a 838 45 1 -a 838 137 4 -a 838 570 9 -a 838 753 4 -a 838 320 6 -a 838 924 9 -a 838 709 2 -a 838 327 5 -a 838 285 1 -a 838 288 7 -a 838 245 7 -a 838 936 10 -a 838 171 4 -a 838 306 9 -a 838 301 6 -a 838 753 1 -a 838 603 2 -a 838 182 1 -a 838 97 1 -a 838 368 4 -a 838 754 2 -a 838 15 1 -a 838 437 1 -a 838 261 1 -a 838 582 5 -a 838 196 9 -a 838 170 4 -a 838 633 10 -a 838 45 1 -a 838 22 5 -a 838 677 4 -a 838 181 6 -a 838 591 1 -a 838 405 1 -a 838 500 2 -a 838 490 8 -a 838 90 10 -a 838 826 3 -a 838 774 7 -a 838 377 8 -a 838 46 1 -a 838 686 8 -a 838 547 8 -a 838 352 1 -a 838 986 10 -a 838 276 2 -a 838 954 10 -a 838 143 6 -a 838 372 3 -a 838 937 4 -a 838 510 1 -a 838 101 3 -a 839 951 9 -a 839 946 2 -a 839 362 9 -a 839 508 3 -a 839 118 6 -a 839 531 10 -a 839 116 6 -a 839 162 2 -a 839 552 8 -a 839 792 8 -a 839 342 2 -a 839 118 2 -a 839 173 6 -a 839 841 7 -a 839 607 2 -a 839 262 1 -a 839 642 3 -a 839 357 9 -a 839 638 8 -a 839 687 5 -a 839 18 7 -a 839 160 1 -a 839 14 6 -a 839 435 9 -a 839 968 9 -a 839 121 7 -a 839 807 8 -a 839 880 1 -a 839 630 9 -a 839 907 4 -a 839 806 6 -a 839 552 2 -a 839 244 9 -a 839 290 7 -a 839 669 10 -a 839 774 8 -a 839 405 8 -a 839 830 9 -a 839 301 6 -a 839 173 5 -a 839 147 8 -a 839 418 5 -a 839 345 5 -a 839 987 2 -a 839 1 5 -a 839 606 7 -a 839 604 3 -a 839 357 10 -a 839 219 5 -a 839 266 2 -a 839 374 7 -a 839 378 5 -a 839 280 8 -a 839 352 5 -a 839 813 7 -a 839 223 3 -a 839 472 8 -a 839 595 3 -a 839 78 8 -a 839 77 2 -a 839 477 7 -a 839 883 10 -a 839 628 3 -a 839 721 2 -a 839 148 8 -a 839 272 7 -a 839 470 3 -a 839 553 5 -a 839 77 8 -a 839 771 9 -a 839 725 9 -a 839 223 8 -a 839 164 6 -a 839 45 7 -a 839 185 7 -a 839 164 3 -a 839 650 5 -a 839 788 5 -a 839 520 7 -a 839 868 7 -a 839 30 3 -a 839 893 8 -a 839 221 1 -a 839 309 7 -a 839 220 5 -a 839 9 9 -a 839 531 7 -a 839 691 4 -a 839 603 5 -a 839 608 3 -a 839 768 6 -a 839 56 2 -a 839 466 3 -a 839 371 1 -a 839 776 5 -a 839 614 3 -a 839 643 7 -a 839 221 1 -a 839 142 10 -a 839 719 6 -a 839 991 5 -a 839 866 7 -a 839 942 4 -a 839 131 9 -a 839 910 1 -a 839 102 2 -a 839 294 10 -a 839 535 7 -a 839 890 7 -a 839 814 2 -a 839 378 4 -a 839 919 7 -a 839 682 2 -a 839 598 9 -a 839 203 1 -a 839 902 3 -a 840 607 9 -a 840 733 4 -a 840 568 3 -a 840 185 6 -a 840 316 10 -a 840 311 8 -a 840 240 6 -a 840 781 3 -a 840 682 8 -a 840 370 7 -a 840 300 2 -a 840 212 6 -a 840 511 3 -a 840 178 5 -a 840 352 9 -a 840 935 8 -a 840 308 6 -a 840 237 1 -a 840 13 7 -a 840 602 1 -a 840 771 1 -a 840 902 4 -a 840 391 4 -a 840 124 9 -a 840 796 3 -a 840 48 10 -a 840 722 9 -a 840 998 5 -a 840 949 7 -a 840 304 7 -a 840 706 6 -a 840 493 5 -a 840 488 9 -a 840 803 10 -a 840 728 1 -a 840 777 1 -a 840 460 6 -a 840 718 7 -a 840 123 6 -a 840 759 5 -a 840 929 6 -a 840 633 7 -a 840 753 6 -a 840 83 4 -a 840 985 10 -a 840 663 9 -a 840 390 3 -a 840 197 5 -a 840 675 2 -a 840 991 1 -a 840 968 3 -a 840 552 9 -a 840 357 7 -a 840 67 2 -a 840 323 4 -a 840 405 5 -a 840 788 8 -a 840 296 5 -a 840 329 2 -a 840 67 9 -a 840 821 1 -a 840 555 6 -a 840 997 2 -a 840 600 5 -a 840 258 10 -a 840 750 3 -a 840 35 2 -a 840 975 4 -a 840 872 2 -a 840 794 10 -a 840 880 7 -a 840 480 9 -a 840 522 3 -a 840 962 7 -a 840 440 4 -a 840 160 9 -a 840 327 6 -a 840 637 6 -a 840 835 5 -a 840 294 2 -a 840 580 5 -a 840 362 10 -a 840 650 2 -a 840 646 10 -a 840 685 6 -a 840 30 9 -a 840 410 5 -a 840 980 9 -a 840 359 10 -a 840 476 3 -a 840 957 2 -a 840 155 10 -a 840 6 5 -a 840 929 8 -a 840 754 9 -a 840 263 10 -a 841 654 5 -a 841 789 9 -a 841 214 9 -a 841 501 2 -a 841 558 7 -a 841 69 8 -a 841 981 3 -a 841 55 4 -a 841 6 10 -a 841 396 5 -a 841 214 4 -a 841 332 7 -a 841 8 6 -a 841 24 3 -a 841 625 9 -a 841 587 7 -a 841 386 5 -a 841 251 10 -a 841 209 8 -a 841 46 9 -a 841 280 2 -a 841 618 8 -a 841 1 1 -a 841 638 3 -a 841 69 2 -a 841 957 10 -a 841 793 8 -a 841 75 1 -a 841 862 3 -a 841 522 10 -a 841 337 10 -a 841 491 9 -a 841 286 3 -a 841 550 1 -a 841 992 2 -a 841 843 1 -a 841 618 10 -a 841 948 9 -a 841 897 6 -a 841 623 7 -a 841 319 1 -a 841 87 9 -a 841 955 1 -a 841 327 5 -a 841 110 10 -a 841 555 3 -a 841 913 6 -a 841 495 7 -a 841 805 6 -a 841 97 8 -a 841 540 10 -a 841 61 6 -a 841 714 6 -a 841 541 3 -a 841 698 8 -a 841 783 9 -a 841 473 1 -a 841 466 2 -a 841 857 9 -a 841 310 9 -a 841 988 7 -a 841 169 9 -a 841 801 6 -a 841 249 2 -a 841 719 6 -a 841 768 1 -a 841 68 8 -a 841 312 7 -a 841 691 1 -a 841 964 4 -a 841 935 3 -a 841 26 8 -a 841 865 5 -a 841 311 8 -a 841 136 3 -a 841 395 10 -a 841 200 7 -a 841 630 10 -a 841 176 8 -a 841 296 3 -a 841 146 4 -a 841 236 1 -a 841 686 4 -a 841 933 9 -a 841 768 7 -a 841 134 4 -a 841 375 8 -a 841 600 3 -a 841 444 6 -a 841 338 2 -a 841 768 1 -a 841 220 7 -a 841 586 8 -a 841 462 8 -a 841 987 9 -a 841 653 6 -a 841 774 1 -a 841 653 7 -a 841 593 10 -a 841 684 1 -a 841 637 4 -a 841 618 4 -a 841 524 2 -a 841 948 5 -a 841 753 9 -a 841 918 6 -a 841 123 3 -a 841 359 9 -a 841 69 10 -a 841 418 7 -a 841 504 1 -a 841 304 7 -a 841 403 7 -a 841 165 3 -a 842 213 4 -a 842 146 3 -a 842 298 5 -a 842 587 5 -a 842 745 3 -a 842 741 8 -a 842 924 9 -a 842 489 5 -a 842 960 4 -a 842 485 8 -a 842 950 9 -a 842 922 3 -a 842 114 6 -a 842 699 2 -a 842 550 5 -a 842 706 2 -a 842 358 1 -a 842 163 8 -a 842 299 8 -a 842 881 6 -a 842 86 5 -a 842 28 4 -a 842 775 8 -a 842 208 8 -a 842 386 7 -a 842 843 9 -a 842 625 10 -a 842 889 1 -a 842 123 5 -a 842 4 4 -a 842 29 6 -a 842 335 2 -a 842 149 3 -a 842 326 3 -a 842 921 4 -a 842 894 1 -a 842 43 8 -a 842 820 4 -a 842 358 10 -a 842 280 6 -a 842 283 3 -a 842 900 8 -a 842 393 3 -a 842 982 6 -a 842 425 7 -a 842 74 1 -a 842 315 6 -a 842 587 4 -a 842 373 7 -a 842 172 6 -a 842 672 7 -a 842 400 2 -a 842 946 6 -a 842 879 2 -a 842 785 1 -a 842 764 4 -a 842 480 7 -a 842 649 1 -a 842 886 5 -a 842 483 10 -a 842 677 2 -a 842 196 8 -a 842 631 3 -a 842 92 4 -a 842 500 3 -a 842 20 4 -a 842 911 9 -a 842 857 7 -a 842 167 5 -a 842 116 1 -a 842 897 7 -a 842 559 2 -a 842 73 3 -a 842 297 5 -a 842 633 2 -a 842 387 6 -a 842 884 6 -a 842 558 9 -a 842 531 10 -a 842 380 7 -a 842 479 10 -a 842 386 7 -a 842 140 10 -a 842 219 9 -a 842 865 6 -a 842 788 4 -a 842 80 4 -a 843 323 5 -a 843 440 7 -a 843 276 1 -a 843 953 5 -a 843 417 6 -a 843 367 3 -a 843 429 1 -a 843 437 5 -a 843 254 4 -a 843 261 7 -a 843 434 9 -a 843 420 10 -a 843 376 5 -a 843 306 3 -a 843 978 10 -a 843 448 1 -a 843 602 6 -a 843 586 4 -a 843 835 1 -a 843 461 6 -a 843 566 9 -a 843 368 1 -a 843 992 10 -a 843 945 1 -a 843 847 4 -a 843 353 5 -a 843 60 6 -a 843 41 6 -a 843 193 5 -a 843 847 10 -a 843 120 5 -a 843 515 9 -a 843 262 3 -a 843 395 1 -a 843 443 10 -a 843 679 6 -a 843 762 5 -a 843 871 10 -a 843 91 10 -a 843 108 5 -a 843 524 4 -a 843 410 4 -a 843 483 7 -a 843 829 8 -a 843 363 5 -a 843 931 1 -a 843 406 7 -a 843 949 8 -a 843 741 9 -a 843 867 4 -a 843 490 7 -a 843 84 8 -a 843 834 6 -a 843 411 1 -a 843 930 7 -a 843 162 2 -a 843 470 2 -a 843 970 5 -a 843 354 10 -a 843 293 8 -a 843 66 6 -a 843 868 4 -a 843 554 4 -a 843 460 3 -a 843 286 10 -a 843 208 5 -a 843 197 1 -a 843 133 6 -a 843 298 8 -a 843 187 1 -a 843 240 8 -a 843 821 7 -a 843 596 4 -a 843 722 8 -a 843 625 10 -a 843 959 5 -a 843 628 4 -a 843 7 5 -a 843 883 9 -a 843 344 4 -a 843 873 3 -a 843 348 8 -a 843 428 8 -a 843 682 7 -a 843 758 1 -a 843 333 3 -a 843 843 4 -a 843 204 7 -a 843 279 10 -a 843 172 1 -a 843 496 5 -a 843 344 10 -a 843 15 1 -a 843 25 7 -a 843 803 8 -a 843 300 4 -a 843 233 9 -a 843 1000 8 -a 843 432 5 -a 843 530 6 -a 843 162 5 -a 844 671 5 -a 844 327 6 -a 844 758 2 -a 844 369 10 -a 844 951 5 -a 844 692 3 -a 844 996 5 -a 844 957 3 -a 844 550 5 -a 844 316 3 -a 844 805 1 -a 844 897 10 -a 844 743 5 -a 844 462 8 -a 844 631 9 -a 844 51 1 -a 844 280 3 -a 844 834 10 -a 844 329 7 -a 844 451 2 -a 844 305 8 -a 844 672 8 -a 844 465 6 -a 844 329 1 -a 844 451 8 -a 844 765 8 -a 844 561 5 -a 844 426 5 -a 844 172 2 -a 844 67 7 -a 844 587 1 -a 844 843 3 -a 844 393 4 -a 844 320 9 -a 844 187 5 -a 844 319 1 -a 844 158 1 -a 844 252 3 -a 844 536 1 -a 844 473 6 -a 844 32 8 -a 844 409 4 -a 844 191 9 -a 844 494 9 -a 844 15 6 -a 844 242 1 -a 844 773 5 -a 844 848 6 -a 844 570 5 -a 844 200 1 -a 844 128 6 -a 844 218 4 -a 844 664 9 -a 844 456 1 -a 844 668 9 -a 844 404 4 -a 844 69 10 -a 844 576 9 -a 844 59 6 -a 844 655 2 -a 844 394 4 -a 844 451 4 -a 844 975 1 -a 844 580 7 -a 844 769 2 -a 844 961 6 -a 844 737 5 -a 844 473 4 -a 844 186 9 -a 844 28 9 -a 844 881 8 -a 844 376 7 -a 844 521 9 -a 844 895 1 -a 844 617 3 -a 844 269 10 -a 844 718 4 -a 844 163 8 -a 844 468 3 -a 844 845 10 -a 844 380 4 -a 844 108 9 -a 844 276 8 -a 844 23 4 -a 844 511 3 -a 844 268 5 -a 844 91 9 -a 844 62 5 -a 844 326 5 -a 844 745 8 -a 844 455 4 -a 844 776 6 -a 844 695 5 -a 844 10 8 -a 844 521 5 -a 844 632 8 -a 844 747 1 -a 844 516 6 -a 844 80 3 -a 844 932 8 -a 844 543 1 -a 844 960 3 -a 844 283 3 -a 844 39 2 -a 844 830 3 -a 844 900 5 -a 844 308 9 -a 844 523 9 -a 844 38 7 -a 845 775 4 -a 845 343 10 -a 845 417 7 -a 845 882 10 -a 845 618 6 -a 845 439 7 -a 845 369 9 -a 845 886 5 -a 845 529 4 -a 845 430 7 -a 845 187 6 -a 845 249 5 -a 845 885 6 -a 845 963 7 -a 845 944 1 -a 845 894 9 -a 845 459 3 -a 845 551 8 -a 845 616 7 -a 845 974 2 -a 845 630 3 -a 845 523 1 -a 845 493 1 -a 845 565 7 -a 845 806 5 -a 845 531 6 -a 845 370 10 -a 845 681 1 -a 845 838 5 -a 845 892 9 -a 845 718 5 -a 845 589 7 -a 845 210 5 -a 845 110 4 -a 845 446 3 -a 845 827 7 -a 845 548 10 -a 845 814 2 -a 845 688 9 -a 845 52 8 -a 845 220 8 -a 845 875 7 -a 845 300 2 -a 845 80 10 -a 845 813 8 -a 845 219 10 -a 845 973 2 -a 845 247 7 -a 845 769 1 -a 845 565 5 -a 845 196 5 -a 845 374 9 -a 845 63 8 -a 845 688 1 -a 845 938 1 -a 845 868 8 -a 845 195 10 -a 845 283 8 -a 845 524 3 -a 845 8 5 -a 845 150 10 -a 845 217 5 -a 845 596 1 -a 845 359 7 -a 845 326 6 -a 845 18 6 -a 845 162 5 -a 845 873 4 -a 845 831 3 -a 845 849 9 -a 845 924 10 -a 845 26 9 -a 845 699 10 -a 845 200 9 -a 845 105 2 -a 845 487 2 -a 845 418 1 -a 845 54 3 -a 845 733 8 -a 845 163 2 -a 845 618 8 -a 845 929 7 -a 845 536 5 -a 845 680 2 -a 845 592 7 -a 845 450 1 -a 845 524 3 -a 845 786 2 -a 845 732 2 -a 845 23 4 -a 845 794 1 -a 846 882 5 -a 846 240 3 -a 846 365 10 -a 846 216 6 -a 846 565 5 -a 846 382 6 -a 846 377 6 -a 846 414 2 -a 846 189 2 -a 846 202 5 -a 846 313 8 -a 846 214 6 -a 846 900 6 -a 846 512 3 -a 846 319 3 -a 846 363 5 -a 846 930 7 -a 846 372 10 -a 846 71 5 -a 846 68 9 -a 846 989 10 -a 846 999 5 -a 846 603 4 -a 846 644 10 -a 846 567 9 -a 846 28 6 -a 846 143 3 -a 846 328 10 -a 846 760 9 -a 846 166 3 -a 846 97 9 -a 846 617 10 -a 846 405 5 -a 846 462 6 -a 846 832 8 -a 846 969 9 -a 846 843 10 -a 846 185 4 -a 846 358 6 -a 846 7 8 -a 846 386 8 -a 846 671 8 -a 846 221 1 -a 846 261 5 -a 846 158 10 -a 846 539 5 -a 846 623 2 -a 846 63 1 -a 846 910 7 -a 846 694 6 -a 846 130 9 -a 846 874 3 -a 846 668 3 -a 846 733 7 -a 846 493 3 -a 846 210 9 -a 846 760 6 -a 846 636 7 -a 846 538 5 -a 846 495 8 -a 846 801 2 -a 846 634 2 -a 846 87 9 -a 846 181 7 -a 846 71 3 -a 846 919 5 -a 846 125 8 -a 846 914 1 -a 846 79 6 -a 846 483 6 -a 846 920 9 -a 846 464 4 -a 846 129 4 -a 846 116 5 -a 846 724 3 -a 846 286 3 -a 846 654 9 -a 846 323 1 -a 846 349 2 -a 846 539 1 -a 846 478 8 -a 846 388 3 -a 846 659 1 -a 846 186 1 -a 846 881 1 -a 846 869 8 -a 846 946 6 -a 846 492 8 -a 846 382 2 -a 846 416 3 -a 846 268 8 -a 846 503 5 -a 846 448 7 -a 846 62 8 -a 846 397 7 -a 846 572 9 -a 846 975 4 -a 846 475 9 -a 846 30 5 -a 846 870 10 -a 846 938 3 -a 846 158 9 -a 846 986 2 -a 846 637 3 -a 846 444 3 -a 846 615 10 -a 846 959 10 -a 846 792 1 -a 846 130 8 -a 846 950 3 -a 846 245 6 -a 846 517 3 -a 847 585 5 -a 847 431 4 -a 847 373 7 -a 847 429 4 -a 847 352 9 -a 847 864 3 -a 847 810 5 -a 847 767 8 -a 847 107 4 -a 847 800 9 -a 847 245 4 -a 847 554 10 -a 847 861 9 -a 847 641 6 -a 847 102 2 -a 847 811 4 -a 847 91 2 -a 847 131 1 -a 847 657 9 -a 847 4 4 -a 847 289 6 -a 847 618 10 -a 847 641 9 -a 847 732 8 -a 847 208 3 -a 847 575 10 -a 847 499 10 -a 847 337 2 -a 847 501 6 -a 847 743 5 -a 847 854 5 -a 847 61 10 -a 847 149 10 -a 847 202 7 -a 847 489 9 -a 847 500 6 -a 847 42 3 -a 847 274 4 -a 847 243 9 -a 847 148 2 -a 847 49 10 -a 847 487 10 -a 847 702 3 -a 847 910 6 -a 847 104 7 -a 847 803 9 -a 847 696 5 -a 847 194 9 -a 847 933 2 -a 847 328 7 -a 847 198 3 -a 847 197 3 -a 847 945 3 -a 847 838 7 -a 847 928 1 -a 847 129 8 -a 847 388 1 -a 847 402 9 -a 847 465 8 -a 847 888 1 -a 847 121 10 -a 847 294 7 -a 847 948 5 -a 847 269 7 -a 847 496 9 -a 847 412 1 -a 847 769 9 -a 847 537 7 -a 847 685 1 -a 847 684 10 -a 847 734 8 -a 847 473 1 -a 847 361 8 -a 847 619 6 -a 847 576 5 -a 847 139 9 -a 847 290 9 -a 847 770 2 -a 847 48 10 -a 847 618 5 -a 847 967 3 -a 847 244 3 -a 847 538 9 -a 847 780 8 -a 847 148 10 -a 847 666 9 -a 847 143 3 -a 847 549 3 -a 847 107 3 -a 847 7 7 -a 847 669 4 -a 847 400 7 -a 847 954 9 -a 847 938 2 -a 847 895 4 -a 847 342 4 -a 847 682 5 -a 847 407 10 -a 847 2 10 -a 847 668 3 -a 847 67 4 -a 848 735 7 -a 848 116 7 -a 848 427 7 -a 848 329 1 -a 848 692 6 -a 848 566 9 -a 848 619 9 -a 848 437 2 -a 848 613 2 -a 848 212 4 -a 848 379 1 -a 848 856 6 -a 848 749 8 -a 848 134 1 -a 848 391 5 -a 848 276 9 -a 848 528 3 -a 848 497 9 -a 848 282 8 -a 848 172 2 -a 848 896 5 -a 848 212 10 -a 848 85 6 -a 848 767 5 -a 848 553 4 -a 848 766 5 -a 848 149 1 -a 848 554 6 -a 848 409 6 -a 848 215 9 -a 848 265 6 -a 848 525 3 -a 848 642 10 -a 848 593 6 -a 848 192 3 -a 848 183 9 -a 848 187 2 -a 848 628 5 -a 848 795 1 -a 848 398 3 -a 848 626 2 -a 848 123 5 -a 848 115 8 -a 848 605 4 -a 848 513 3 -a 848 390 9 -a 848 108 8 -a 848 672 6 -a 848 279 9 -a 848 880 2 -a 848 883 8 -a 848 364 4 -a 848 622 7 -a 848 411 5 -a 848 105 2 -a 848 771 4 -a 848 964 2 -a 848 514 4 -a 848 985 7 -a 848 204 6 -a 848 14 5 -a 848 602 9 -a 848 797 6 -a 848 205 6 -a 848 784 6 -a 848 983 8 -a 848 832 7 -a 848 554 4 -a 848 357 1 -a 848 813 6 -a 848 156 6 -a 848 479 8 -a 848 927 1 -a 848 760 9 -a 848 991 5 -a 848 292 4 -a 848 867 9 -a 848 975 5 -a 848 963 2 -a 848 121 10 -a 848 830 8 -a 848 821 1 -a 848 484 3 -a 848 428 9 -a 848 207 8 -a 848 589 8 -a 848 174 4 -a 848 147 7 -a 848 78 7 -a 848 134 5 -a 848 350 2 -a 848 91 10 -a 848 736 3 -a 848 122 9 -a 848 295 7 -a 848 495 3 -a 848 81 1 -a 848 102 6 -a 848 25 4 -a 848 437 10 -a 848 914 1 -a 848 180 1 -a 848 915 2 -a 848 816 5 -a 848 939 5 -a 848 881 9 -a 848 83 2 -a 849 781 2 -a 849 831 8 -a 849 22 6 -a 849 901 8 -a 849 636 4 -a 849 842 1 -a 849 361 5 -a 849 39 3 -a 849 25 6 -a 849 949 5 -a 849 212 7 -a 849 171 6 -a 849 2 10 -a 849 346 6 -a 849 520 9 -a 849 92 3 -a 849 57 6 -a 849 642 5 -a 849 386 3 -a 849 551 5 -a 849 722 2 -a 849 487 1 -a 849 575 6 -a 849 134 6 -a 849 376 5 -a 849 754 8 -a 849 24 6 -a 849 167 5 -a 849 668 9 -a 849 904 8 -a 849 249 9 -a 849 424 9 -a 849 710 5 -a 849 270 8 -a 849 301 1 -a 849 321 8 -a 849 88 6 -a 849 661 5 -a 849 360 10 -a 849 112 10 -a 849 585 4 -a 849 571 1 -a 849 282 2 -a 849 586 7 -a 849 916 6 -a 849 801 6 -a 849 677 3 -a 849 972 3 -a 849 418 6 -a 849 38 9 -a 849 499 9 -a 849 115 9 -a 849 524 5 -a 849 49 1 -a 849 248 9 -a 849 899 10 -a 849 803 10 -a 849 271 7 -a 849 41 4 -a 849 446 5 -a 849 150 4 -a 849 289 5 -a 849 870 10 -a 849 859 1 -a 849 559 7 -a 849 146 8 -a 849 156 4 -a 849 646 5 -a 849 806 4 -a 849 515 1 -a 849 757 6 -a 849 366 6 -a 849 61 4 -a 849 14 3 -a 849 951 6 -a 849 977 2 -a 849 814 9 -a 849 603 1 -a 849 924 5 -a 849 208 7 -a 849 640 6 -a 849 398 8 -a 849 322 2 -a 849 139 6 -a 849 447 8 -a 849 570 3 -a 849 13 9 -a 849 225 3 -a 849 840 9 -a 849 53 2 -a 849 670 2 -a 849 990 2 -a 849 341 8 -a 849 515 4 -a 849 824 6 -a 849 899 10 -a 849 660 1 -a 849 979 4 -a 849 520 6 -a 849 441 3 -a 849 469 7 -a 849 252 7 -a 849 806 5 -a 850 530 10 -a 850 265 2 -a 850 732 2 -a 850 482 3 -a 850 55 1 -a 850 310 7 -a 850 381 1 -a 850 262 3 -a 850 949 8 -a 850 779 4 -a 850 583 9 -a 850 63 2 -a 850 201 3 -a 850 128 4 -a 850 75 10 -a 850 425 5 -a 850 968 1 -a 850 127 5 -a 850 70 2 -a 850 933 1 -a 850 468 9 -a 850 585 2 -a 850 732 9 -a 850 342 5 -a 850 220 4 -a 850 687 3 -a 850 862 1 -a 850 661 9 -a 850 131 1 -a 850 89 9 -a 850 442 3 -a 850 660 3 -a 850 354 6 -a 850 150 9 -a 850 117 9 -a 850 408 3 -a 850 459 2 -a 850 498 3 -a 850 669 6 -a 850 384 3 -a 850 252 9 -a 850 227 5 -a 850 446 7 -a 850 452 5 -a 850 355 9 -a 850 521 10 -a 850 876 10 -a 850 298 4 -a 850 647 10 -a 850 945 5 -a 850 206 9 -a 850 90 7 -a 850 505 1 -a 850 937 6 -a 850 432 5 -a 850 725 5 -a 850 599 4 -a 850 269 7 -a 850 361 6 -a 850 730 9 -a 850 357 9 -a 850 802 5 -a 850 365 9 -a 850 710 8 -a 850 951 9 -a 850 482 9 -a 850 93 2 -a 850 386 2 -a 850 979 4 -a 850 761 5 -a 850 769 8 -a 850 206 3 -a 850 988 4 -a 850 190 4 -a 850 657 10 -a 850 318 2 -a 850 710 4 -a 850 508 4 -a 850 615 1 -a 850 333 7 -a 850 428 7 -a 850 820 2 -a 850 422 6 -a 850 933 5 -a 850 732 10 -a 850 853 2 -a 850 633 6 -a 850 307 3 -a 850 97 10 -a 850 993 6 -a 850 12 9 -a 851 454 6 -a 851 770 5 -a 851 376 7 -a 851 139 3 -a 851 697 3 -a 851 857 8 -a 851 232 6 -a 851 58 6 -a 851 811 8 -a 851 992 2 -a 851 826 4 -a 851 955 4 -a 851 648 8 -a 851 248 10 -a 851 701 5 -a 851 131 10 -a 851 862 8 -a 851 9 9 -a 851 559 5 -a 851 657 2 -a 851 430 2 -a 851 467 8 -a 851 365 4 -a 851 259 1 -a 851 75 6 -a 851 671 3 -a 851 355 5 -a 851 43 9 -a 851 682 4 -a 851 808 5 -a 851 812 4 -a 851 33 1 -a 851 947 2 -a 851 484 2 -a 851 890 1 -a 851 154 2 -a 851 541 4 -a 851 676 6 -a 851 121 5 -a 851 342 7 -a 851 668 3 -a 851 52 2 -a 851 333 2 -a 851 291 6 -a 851 299 2 -a 851 9 5 -a 851 422 3 -a 851 137 6 -a 851 17 2 -a 851 980 8 -a 851 793 6 -a 851 446 6 -a 851 422 1 -a 851 133 9 -a 851 704 1 -a 851 496 2 -a 851 803 6 -a 851 35 1 -a 851 538 8 -a 851 460 3 -a 851 842 9 -a 851 325 8 -a 851 493 8 -a 851 764 2 -a 851 809 3 -a 851 358 10 -a 851 917 8 -a 851 325 8 -a 851 9 9 -a 851 14 6 -a 851 667 4 -a 851 676 1 -a 851 65 3 -a 851 999 4 -a 851 967 3 -a 851 363 3 -a 851 364 6 -a 851 499 3 -a 851 319 4 -a 851 268 1 -a 851 444 9 -a 851 740 1 -a 851 400 1 -a 851 124 4 -a 851 211 8 -a 851 179 3 -a 851 158 1 -a 851 748 10 -a 851 638 7 -a 851 999 2 -a 851 48 1 -a 852 106 3 -a 852 739 1 -a 852 856 8 -a 852 463 6 -a 852 631 9 -a 852 157 7 -a 852 472 4 -a 852 644 9 -a 852 823 1 -a 852 123 2 -a 852 708 9 -a 852 797 9 -a 852 65 2 -a 852 47 10 -a 852 779 9 -a 852 428 8 -a 852 545 6 -a 852 777 1 -a 852 746 3 -a 852 812 6 -a 852 196 3 -a 852 461 5 -a 852 188 9 -a 852 319 10 -a 852 671 4 -a 852 366 10 -a 852 476 3 -a 852 394 6 -a 852 451 8 -a 852 442 1 -a 852 85 6 -a 852 165 7 -a 852 273 6 -a 852 547 4 -a 852 795 8 -a 852 429 1 -a 852 415 5 -a 852 227 3 -a 852 117 9 -a 852 98 10 -a 852 181 9 -a 852 144 7 -a 852 777 3 -a 852 609 6 -a 852 689 4 -a 852 529 7 -a 852 330 3 -a 852 476 10 -a 852 725 7 -a 852 791 8 -a 852 663 2 -a 852 19 5 -a 852 437 7 -a 852 4 3 -a 852 495 3 -a 852 831 7 -a 852 945 3 -a 852 248 4 -a 852 67 9 -a 852 85 8 -a 852 520 5 -a 852 613 4 -a 852 879 3 -a 852 949 6 -a 852 607 6 -a 852 269 2 -a 852 151 2 -a 852 723 2 -a 852 367 2 -a 852 150 1 -a 852 903 2 -a 852 510 3 -a 852 926 1 -a 852 487 4 -a 852 174 9 -a 852 431 7 -a 852 817 1 -a 852 650 1 -a 852 131 5 -a 852 583 3 -a 852 288 3 -a 852 149 4 -a 852 292 8 -a 852 643 5 -a 852 825 1 -a 852 274 10 -a 852 563 6 -a 852 48 1 -a 852 340 9 -a 852 647 7 -a 852 568 9 -a 852 952 8 -a 852 502 7 -a 852 492 9 -a 852 534 8 -a 852 770 5 -a 852 642 1 -a 852 232 9 -a 852 112 3 -a 853 791 7 -a 853 111 3 -a 853 622 8 -a 853 693 8 -a 853 597 9 -a 853 795 2 -a 853 99 7 -a 853 389 8 -a 853 420 8 -a 853 229 10 -a 853 971 8 -a 853 708 7 -a 853 377 5 -a 853 966 5 -a 853 999 2 -a 853 766 5 -a 853 248 1 -a 853 558 10 -a 853 814 7 -a 853 587 5 -a 853 181 5 -a 853 357 9 -a 853 514 9 -a 853 682 10 -a 853 848 3 -a 853 24 4 -a 853 427 2 -a 853 465 3 -a 853 255 6 -a 853 539 4 -a 853 232 2 -a 853 365 7 -a 853 136 9 -a 853 924 2 -a 853 962 6 -a 853 930 8 -a 853 326 9 -a 853 326 1 -a 853 226 10 -a 853 273 3 -a 853 9 4 -a 853 602 6 -a 853 214 5 -a 853 597 1 -a 853 979 8 -a 853 230 3 -a 853 131 2 -a 853 768 6 -a 853 816 8 -a 853 311 3 -a 853 100 5 -a 853 305 4 -a 853 992 4 -a 853 947 2 -a 853 328 2 -a 853 394 9 -a 853 388 10 -a 853 583 4 -a 853 932 7 -a 853 619 5 -a 853 947 3 -a 853 43 7 -a 853 518 2 -a 853 884 1 -a 853 973 1 -a 853 515 6 -a 853 186 5 -a 853 274 6 -a 853 740 3 -a 853 458 4 -a 853 282 5 -a 853 317 1 -a 853 671 8 -a 853 264 8 -a 853 914 2 -a 853 625 9 -a 853 493 2 -a 853 20 3 -a 853 369 6 -a 853 284 7 -a 853 330 6 -a 853 468 5 -a 853 588 2 -a 853 297 5 -a 853 391 2 -a 853 916 10 -a 853 690 7 -a 853 778 7 -a 853 474 2 -a 853 598 4 -a 853 372 7 -a 853 396 10 -a 853 640 2 -a 853 889 10 -a 853 256 9 -a 853 588 3 -a 853 379 2 -a 853 441 2 -a 853 861 10 -a 853 94 3 -a 853 898 5 -a 853 118 9 -a 853 410 10 -a 853 544 10 -a 853 381 7 -a 853 299 1 -a 853 144 3 -a 853 873 10 -a 853 318 3 -a 853 512 9 -a 853 132 8 -a 853 647 4 -a 853 980 6 -a 853 720 2 -a 853 943 3 -a 853 346 4 -a 854 611 8 -a 854 609 2 -a 854 99 1 -a 854 60 5 -a 854 182 9 -a 854 470 8 -a 854 455 2 -a 854 821 5 -a 854 334 8 -a 854 710 9 -a 854 385 5 -a 854 712 4 -a 854 126 6 -a 854 221 3 -a 854 805 6 -a 854 339 10 -a 854 190 1 -a 854 542 9 -a 854 719 10 -a 854 489 1 -a 854 686 6 -a 854 568 5 -a 854 806 3 -a 854 173 5 -a 854 699 1 -a 854 429 5 -a 854 128 5 -a 854 394 8 -a 854 347 7 -a 854 473 3 -a 854 955 9 -a 854 571 9 -a 854 39 7 -a 854 112 8 -a 854 16 3 -a 854 494 1 -a 854 933 8 -a 854 349 5 -a 854 179 8 -a 854 293 1 -a 854 36 6 -a 854 305 2 -a 854 513 9 -a 854 840 8 -a 854 303 9 -a 854 851 2 -a 854 6 4 -a 854 845 5 -a 854 546 1 -a 854 494 7 -a 854 506 7 -a 854 89 7 -a 854 275 6 -a 854 678 10 -a 854 787 5 -a 854 703 10 -a 854 806 5 -a 854 157 10 -a 854 26 9 -a 854 254 6 -a 854 136 5 -a 854 980 10 -a 854 825 1 -a 854 175 7 -a 854 68 8 -a 854 840 9 -a 854 668 4 -a 854 1000 4 -a 854 165 1 -a 854 846 5 -a 854 268 7 -a 854 200 9 -a 854 126 7 -a 854 780 6 -a 854 16 5 -a 854 429 3 -a 854 607 4 -a 854 21 3 -a 854 249 8 -a 854 128 8 -a 854 514 2 -a 854 754 1 -a 854 216 3 -a 854 788 5 -a 854 407 4 -a 854 467 1 -a 854 188 10 -a 854 134 8 -a 854 492 10 -a 854 442 10 -a 854 270 2 -a 854 447 1 -a 854 242 9 -a 854 444 10 -a 854 514 7 -a 855 57 3 -a 855 87 2 -a 855 489 5 -a 855 221 8 -a 855 932 9 -a 855 756 3 -a 855 421 9 -a 855 34 3 -a 855 512 2 -a 855 436 2 -a 855 462 3 -a 855 94 6 -a 855 456 9 -a 855 710 3 -a 855 221 3 -a 855 969 5 -a 855 439 4 -a 855 436 3 -a 855 732 9 -a 855 845 10 -a 855 413 10 -a 855 174 1 -a 855 9 10 -a 855 547 9 -a 855 665 8 -a 855 450 9 -a 855 816 5 -a 855 88 2 -a 855 691 7 -a 855 235 9 -a 855 601 3 -a 855 747 7 -a 855 321 4 -a 855 66 5 -a 855 968 10 -a 855 228 8 -a 855 821 8 -a 855 364 5 -a 855 261 5 -a 855 308 5 -a 855 799 7 -a 855 722 7 -a 855 401 4 -a 855 230 9 -a 855 407 1 -a 855 621 10 -a 855 174 2 -a 855 845 6 -a 855 32 5 -a 855 905 4 -a 855 666 2 -a 855 445 6 -a 855 55 4 -a 855 674 8 -a 855 991 2 -a 855 719 3 -a 855 99 9 -a 855 782 2 -a 855 806 10 -a 855 789 6 -a 855 383 7 -a 855 511 5 -a 855 312 7 -a 855 448 8 -a 855 454 6 -a 855 539 9 -a 855 244 3 -a 855 817 10 -a 855 800 8 -a 855 552 7 -a 855 591 7 -a 855 497 9 -a 855 952 1 -a 855 820 6 -a 855 904 4 -a 855 549 2 -a 855 993 8 -a 855 724 5 -a 855 580 1 -a 855 874 6 -a 855 365 5 -a 855 928 4 -a 855 14 5 -a 855 990 2 -a 855 622 9 -a 855 112 8 -a 855 747 2 -a 856 404 6 -a 856 900 10 -a 856 738 9 -a 856 786 7 -a 856 387 1 -a 856 25 9 -a 856 209 2 -a 856 840 7 -a 856 564 2 -a 856 452 1 -a 856 633 3 -a 856 339 6 -a 856 199 7 -a 856 835 6 -a 856 931 8 -a 856 714 5 -a 856 455 10 -a 856 987 10 -a 856 414 2 -a 856 10 5 -a 856 836 8 -a 856 778 1 -a 856 10 4 -a 856 739 7 -a 856 792 5 -a 856 999 3 -a 856 337 5 -a 856 903 3 -a 856 722 3 -a 856 740 4 -a 856 779 8 -a 856 435 6 -a 856 501 7 -a 856 141 1 -a 856 460 2 -a 856 709 2 -a 856 980 9 -a 856 136 3 -a 856 588 3 -a 856 337 4 -a 856 115 3 -a 856 787 7 -a 856 147 3 -a 856 21 10 -a 856 781 7 -a 856 861 10 -a 856 475 7 -a 856 743 2 -a 856 250 5 -a 856 484 10 -a 856 555 10 -a 856 3 7 -a 856 493 2 -a 856 269 8 -a 856 794 3 -a 856 468 10 -a 856 605 3 -a 856 673 1 -a 856 165 3 -a 856 320 3 -a 856 427 5 -a 856 599 2 -a 856 820 6 -a 856 567 4 -a 856 34 5 -a 856 504 3 -a 856 522 10 -a 856 32 10 -a 856 640 5 -a 856 86 3 -a 856 368 1 -a 856 754 7 -a 856 872 4 -a 856 515 1 -a 856 774 10 -a 856 628 2 -a 856 351 4 -a 856 224 4 -a 856 346 6 -a 856 600 2 -a 856 707 2 -a 856 900 3 -a 856 602 7 -a 856 176 5 -a 856 145 6 -a 856 372 5 -a 856 643 10 -a 856 749 8 -a 856 20 5 -a 856 807 4 -a 856 45 8 -a 856 446 9 -a 856 381 6 -a 856 864 2 -a 856 415 9 -a 856 344 6 -a 856 509 4 -a 856 446 6 -a 856 983 10 -a 856 594 3 -a 856 814 4 -a 856 712 9 -a 856 441 6 -a 857 304 5 -a 857 461 10 -a 857 44 7 -a 857 654 2 -a 857 684 8 -a 857 390 5 -a 857 229 3 -a 857 366 10 -a 857 265 6 -a 857 830 5 -a 857 541 1 -a 857 409 4 -a 857 177 7 -a 857 159 3 -a 857 134 10 -a 857 196 6 -a 857 965 7 -a 857 178 9 -a 857 641 5 -a 857 322 7 -a 857 17 9 -a 857 628 4 -a 857 736 9 -a 857 360 2 -a 857 113 10 -a 857 157 9 -a 857 318 4 -a 857 706 7 -a 857 970 6 -a 857 5 9 -a 857 123 7 -a 857 249 9 -a 857 465 4 -a 857 166 1 -a 857 902 2 -a 857 124 3 -a 857 555 6 -a 857 106 8 -a 857 490 1 -a 857 820 7 -a 857 936 5 -a 857 6 10 -a 857 204 5 -a 857 88 6 -a 857 165 3 -a 857 337 6 -a 857 284 5 -a 857 105 5 -a 857 514 10 -a 857 924 2 -a 857 426 6 -a 857 531 6 -a 857 528 3 -a 857 137 3 -a 857 890 3 -a 857 640 6 -a 857 294 8 -a 857 184 7 -a 857 321 6 -a 857 239 6 -a 857 188 2 -a 857 443 1 -a 857 488 6 -a 857 653 5 -a 857 609 5 -a 857 365 7 -a 857 776 3 -a 857 139 10 -a 857 471 6 -a 857 241 4 -a 857 958 9 -a 857 382 6 -a 857 247 4 -a 857 138 5 -a 857 469 1 -a 857 411 7 -a 857 474 3 -a 857 752 10 -a 857 515 5 -a 857 988 1 -a 857 652 7 -a 857 941 4 -a 857 494 7 -a 857 155 6 -a 857 53 7 -a 857 359 1 -a 857 794 6 -a 857 346 6 -a 857 542 9 -a 857 90 6 -a 857 585 4 -a 857 730 3 -a 857 533 7 -a 857 48 2 -a 857 358 2 -a 857 117 7 -a 857 412 9 -a 857 109 4 -a 857 255 6 -a 857 882 4 -a 857 350 10 -a 857 189 5 -a 857 239 2 -a 858 596 5 -a 858 326 5 -a 858 708 2 -a 858 799 6 -a 858 435 10 -a 858 496 2 -a 858 762 4 -a 858 62 6 -a 858 412 5 -a 858 231 1 -a 858 216 7 -a 858 465 9 -a 858 590 1 -a 858 810 8 -a 858 107 10 -a 858 75 1 -a 858 370 3 -a 858 836 10 -a 858 607 5 -a 858 417 6 -a 858 169 4 -a 858 723 7 -a 858 829 9 -a 858 278 9 -a 858 977 5 -a 858 686 3 -a 858 627 10 -a 858 141 8 -a 858 925 1 -a 858 198 9 -a 858 466 6 -a 858 608 10 -a 858 179 4 -a 858 241 1 -a 858 18 2 -a 858 674 1 -a 858 80 5 -a 858 62 10 -a 858 209 7 -a 858 295 3 -a 858 526 4 -a 858 798 7 -a 858 280 3 -a 858 311 7 -a 858 904 6 -a 858 354 8 -a 858 681 10 -a 858 716 10 -a 858 960 8 -a 858 73 1 -a 858 884 3 -a 858 658 9 -a 858 901 6 -a 858 137 10 -a 858 610 2 -a 858 563 6 -a 858 763 8 -a 858 751 5 -a 858 463 6 -a 858 960 7 -a 858 192 4 -a 858 46 10 -a 858 114 6 -a 858 432 2 -a 858 63 1 -a 858 788 2 -a 858 410 4 -a 858 142 10 -a 858 849 9 -a 858 618 4 -a 858 437 9 -a 858 350 1 -a 858 391 1 -a 858 716 7 -a 858 660 10 -a 858 270 4 -a 858 45 4 -a 858 316 9 -a 858 985 2 -a 858 389 8 -a 858 845 5 -a 858 637 9 -a 858 265 5 -a 858 981 10 -a 858 222 3 -a 858 827 5 -a 858 720 1 -a 858 972 4 -a 858 265 1 -a 858 655 1 -a 858 140 9 -a 858 310 8 -a 858 769 5 -a 858 571 10 -a 858 373 6 -a 858 532 9 -a 858 980 6 -a 858 514 6 -a 858 356 5 -a 859 573 9 -a 859 950 5 -a 859 705 6 -a 859 963 10 -a 859 641 10 -a 859 340 6 -a 859 209 3 -a 859 685 6 -a 859 656 5 -a 859 169 10 -a 859 664 2 -a 859 20 2 -a 859 276 7 -a 859 284 7 -a 859 970 6 -a 859 498 4 -a 859 87 4 -a 859 665 8 -a 859 445 4 -a 859 351 6 -a 859 295 10 -a 859 584 1 -a 859 661 3 -a 859 39 2 -a 859 131 5 -a 859 9 7 -a 859 570 1 -a 859 86 10 -a 859 522 9 -a 859 925 6 -a 859 659 10 -a 859 448 1 -a 859 605 4 -a 859 597 8 -a 859 64 1 -a 859 945 1 -a 859 805 1 -a 859 749 2 -a 859 576 4 -a 859 974 3 -a 859 388 2 -a 859 595 4 -a 859 962 1 -a 859 664 9 -a 859 878 8 -a 859 907 6 -a 859 137 2 -a 859 964 2 -a 859 547 10 -a 859 581 6 -a 859 291 7 -a 859 842 1 -a 859 141 3 -a 859 951 7 -a 859 880 1 -a 859 271 4 -a 859 959 3 -a 859 426 2 -a 859 356 7 -a 859 456 9 -a 859 326 2 -a 859 903 2 -a 859 931 7 -a 859 587 2 -a 859 967 5 -a 859 851 9 -a 859 367 4 -a 859 691 7 -a 859 402 3 -a 859 316 1 -a 859 54 1 -a 859 996 10 -a 859 254 3 -a 859 717 3 -a 859 849 6 -a 859 136 4 -a 859 853 2 -a 859 789 8 -a 859 683 5 -a 859 410 8 -a 859 55 7 -a 859 500 3 -a 859 550 8 -a 859 355 4 -a 859 820 6 -a 859 939 9 -a 859 780 4 -a 859 151 10 -a 859 370 7 -a 859 82 5 -a 859 141 2 -a 859 249 1 -a 859 727 2 -a 859 191 1 -a 859 838 9 -a 859 69 10 -a 859 881 3 -a 859 215 7 -a 859 385 6 -a 859 934 8 -a 859 186 6 -a 859 638 4 -a 859 627 1 -a 859 10 3 -a 860 773 4 -a 860 455 3 -a 860 798 9 -a 860 431 1 -a 860 864 6 -a 860 852 4 -a 860 930 5 -a 860 389 2 -a 860 832 6 -a 860 261 7 -a 860 184 2 -a 860 746 9 -a 860 16 5 -a 860 335 1 -a 860 92 7 -a 860 97 3 -a 860 475 6 -a 860 340 6 -a 860 84 7 -a 860 177 3 -a 860 530 6 -a 860 921 9 -a 860 245 10 -a 860 386 4 -a 860 111 3 -a 860 629 6 -a 860 295 2 -a 860 296 6 -a 860 242 10 -a 860 921 8 -a 860 306 6 -a 860 352 9 -a 860 79 8 -a 860 421 5 -a 860 191 4 -a 860 931 6 -a 860 327 1 -a 860 580 9 -a 860 738 9 -a 860 587 2 -a 860 763 10 -a 860 460 3 -a 860 602 10 -a 860 73 8 -a 860 551 1 -a 860 699 4 -a 860 547 3 -a 860 890 1 -a 860 782 4 -a 860 723 10 -a 860 395 6 -a 860 679 5 -a 860 968 3 -a 860 780 7 -a 860 789 2 -a 860 572 6 -a 860 50 2 -a 860 61 8 -a 860 814 8 -a 860 971 1 -a 860 366 2 -a 860 804 8 -a 860 298 8 -a 860 444 3 -a 860 200 3 -a 860 488 1 -a 860 350 1 -a 860 526 10 -a 860 43 1 -a 860 64 9 -a 860 88 1 -a 860 806 6 -a 860 523 10 -a 860 690 1 -a 860 878 3 -a 860 49 2 -a 860 364 10 -a 860 401 1 -a 860 938 10 -a 860 121 3 -a 860 99 4 -a 860 308 2 -a 860 799 5 -a 860 42 4 -a 860 63 2 -a 860 564 4 -a 860 614 9 -a 860 112 5 -a 861 624 7 -a 861 403 8 -a 861 58 5 -a 861 989 6 -a 861 182 9 -a 861 355 6 -a 861 408 6 -a 861 381 3 -a 861 843 8 -a 861 758 9 -a 861 907 4 -a 861 885 7 -a 861 821 7 -a 861 994 1 -a 861 666 10 -a 861 319 3 -a 861 659 1 -a 861 520 9 -a 861 367 10 -a 861 920 6 -a 861 280 1 -a 861 119 8 -a 861 587 2 -a 861 917 1 -a 861 36 9 -a 861 649 5 -a 861 456 6 -a 861 649 7 -a 861 760 7 -a 861 55 10 -a 861 27 9 -a 861 818 6 -a 861 19 10 -a 861 208 9 -a 861 148 3 -a 861 427 3 -a 861 588 9 -a 861 990 5 -a 861 160 1 -a 861 470 3 -a 861 851 8 -a 861 980 7 -a 861 440 1 -a 861 492 4 -a 861 274 7 -a 861 74 9 -a 861 640 8 -a 861 72 6 -a 861 906 10 -a 861 919 7 -a 861 190 2 -a 861 900 8 -a 861 481 6 -a 861 82 7 -a 861 935 5 -a 861 105 7 -a 861 538 2 -a 861 559 9 -a 861 864 5 -a 861 592 4 -a 861 585 9 -a 861 657 5 -a 861 611 6 -a 861 792 9 -a 861 805 2 -a 861 13 8 -a 861 355 7 -a 861 770 9 -a 861 172 3 -a 861 825 8 -a 861 596 9 -a 861 127 4 -a 861 240 8 -a 861 64 5 -a 861 400 9 -a 861 313 4 -a 861 50 6 -a 861 15 3 -a 861 384 1 -a 861 956 2 -a 861 933 3 -a 861 573 1 -a 861 831 8 -a 861 389 9 -a 861 655 4 -a 861 741 8 -a 861 493 10 -a 861 168 7 -a 861 275 2 -a 861 332 5 -a 861 759 9 -a 861 859 9 -a 861 989 2 -a 861 345 5 -a 861 626 2 -a 861 769 7 -a 861 357 4 -a 861 980 9 -a 861 514 1 -a 861 528 10 -a 861 780 3 -a 861 86 9 -a 862 654 10 -a 862 149 4 -a 862 29 1 -a 862 308 9 -a 862 198 4 -a 862 43 9 -a 862 691 1 -a 862 129 5 -a 862 975 9 -a 862 240 3 -a 862 959 7 -a 862 339 4 -a 862 894 1 -a 862 675 9 -a 862 831 10 -a 862 37 4 -a 862 949 6 -a 862 139 2 -a 862 795 4 -a 862 783 4 -a 862 103 7 -a 862 116 4 -a 862 384 4 -a 862 871 4 -a 862 472 8 -a 862 340 6 -a 862 360 7 -a 862 1000 4 -a 862 95 6 -a 862 445 1 -a 862 629 9 -a 862 90 7 -a 862 593 4 -a 862 658 8 -a 862 397 8 -a 862 791 9 -a 862 700 5 -a 862 63 8 -a 862 919 10 -a 862 651 4 -a 862 302 4 -a 862 854 7 -a 862 989 9 -a 862 171 1 -a 862 504 9 -a 862 796 6 -a 862 207 5 -a 862 429 1 -a 862 934 6 -a 862 187 1 -a 862 12 8 -a 862 93 8 -a 862 571 4 -a 862 882 3 -a 862 564 2 -a 862 910 10 -a 862 217 6 -a 862 539 7 -a 862 662 2 -a 862 144 5 -a 862 69 9 -a 862 230 4 -a 862 801 6 -a 862 465 8 -a 862 476 6 -a 862 528 1 -a 862 915 3 -a 862 102 2 -a 862 829 1 -a 862 744 10 -a 862 67 1 -a 862 1000 1 -a 862 223 3 -a 862 862 7 -a 862 182 2 -a 862 651 1 -a 862 771 2 -a 862 159 4 -a 862 838 6 -a 862 782 2 -a 862 251 4 -a 862 384 3 -a 862 639 5 -a 862 815 9 -a 862 269 7 -a 862 855 8 -a 862 329 10 -a 862 248 10 -a 862 492 8 -a 862 472 8 -a 862 317 6 -a 862 722 5 -a 862 248 1 -a 862 781 6 -a 862 717 2 -a 863 724 9 -a 863 284 10 -a 863 607 7 -a 863 825 10 -a 863 89 9 -a 863 326 5 -a 863 891 6 -a 863 64 9 -a 863 549 2 -a 863 728 4 -a 863 245 6 -a 863 175 2 -a 863 474 4 -a 863 404 4 -a 863 231 2 -a 863 654 2 -a 863 371 2 -a 863 869 5 -a 863 444 3 -a 863 639 7 -a 863 700 10 -a 863 773 7 -a 863 887 3 -a 863 167 2 -a 863 220 5 -a 863 179 7 -a 863 888 8 -a 863 468 8 -a 863 959 3 -a 863 581 7 -a 863 167 1 -a 863 219 9 -a 863 163 2 -a 863 991 5 -a 863 307 4 -a 863 489 5 -a 863 858 4 -a 863 370 1 -a 863 13 3 -a 863 561 1 -a 863 614 3 -a 863 187 7 -a 863 11 7 -a 863 175 9 -a 863 241 5 -a 863 647 7 -a 863 545 6 -a 863 86 9 -a 863 66 10 -a 863 160 7 -a 863 785 2 -a 863 838 8 -a 863 22 1 -a 863 951 5 -a 863 34 5 -a 863 200 10 -a 863 815 4 -a 863 501 4 -a 863 134 1 -a 863 371 6 -a 863 667 4 -a 863 352 2 -a 863 533 6 -a 863 633 3 -a 863 658 7 -a 863 466 1 -a 863 3 1 -a 863 9 10 -a 863 3 6 -a 863 617 9 -a 863 196 10 -a 863 13 2 -a 863 609 9 -a 863 370 9 -a 863 253 5 -a 863 231 7 -a 863 914 5 -a 863 338 8 -a 863 297 7 -a 863 49 2 -a 863 98 6 -a 863 110 6 -a 863 70 2 -a 863 25 1 -a 863 143 8 -a 863 269 7 -a 863 839 5 -a 863 643 1 -a 863 403 2 -a 863 185 1 -a 863 285 10 -a 864 754 1 -a 864 717 2 -a 864 918 2 -a 864 388 9 -a 864 714 6 -a 864 359 8 -a 864 390 10 -a 864 722 4 -a 864 361 4 -a 864 917 7 -a 864 373 5 -a 864 591 3 -a 864 262 9 -a 864 626 10 -a 864 821 9 -a 864 152 3 -a 864 963 4 -a 864 93 3 -a 864 200 5 -a 864 37 5 -a 864 203 4 -a 864 270 5 -a 864 61 10 -a 864 345 1 -a 864 538 3 -a 864 899 8 -a 864 988 10 -a 864 940 6 -a 864 59 4 -a 864 248 2 -a 864 670 2 -a 864 775 5 -a 864 141 9 -a 864 33 2 -a 864 464 9 -a 864 500 7 -a 864 422 6 -a 864 162 10 -a 864 860 4 -a 864 404 7 -a 864 54 8 -a 864 209 7 -a 864 994 1 -a 864 316 7 -a 864 834 8 -a 864 790 2 -a 864 467 2 -a 864 772 5 -a 864 883 1 -a 864 666 1 -a 864 808 2 -a 864 61 5 -a 864 935 6 -a 864 868 2 -a 864 405 1 -a 864 449 2 -a 864 742 10 -a 864 368 8 -a 864 364 7 -a 864 800 2 -a 864 616 2 -a 864 9 9 -a 864 551 9 -a 864 756 8 -a 864 41 9 -a 864 231 4 -a 864 463 6 -a 864 151 1 -a 864 67 10 -a 864 866 10 -a 864 205 2 -a 864 275 2 -a 864 835 9 -a 864 520 7 -a 864 84 8 -a 864 600 6 -a 864 986 9 -a 864 855 9 -a 864 458 2 -a 864 627 1 -a 864 639 1 -a 865 518 9 -a 865 538 10 -a 865 482 9 -a 865 923 2 -a 865 986 10 -a 865 200 9 -a 865 266 8 -a 865 325 5 -a 865 999 5 -a 865 881 7 -a 865 334 3 -a 865 525 6 -a 865 613 6 -a 865 374 2 -a 865 515 7 -a 865 843 5 -a 865 836 10 -a 865 665 6 -a 865 909 1 -a 865 677 4 -a 865 869 10 -a 865 159 4 -a 865 487 10 -a 865 364 5 -a 865 242 9 -a 865 63 1 -a 865 325 6 -a 865 73 6 -a 865 520 2 -a 865 952 7 -a 865 711 8 -a 865 14 2 -a 865 465 1 -a 865 168 3 -a 865 936 3 -a 865 426 8 -a 865 367 8 -a 865 177 3 -a 865 750 7 -a 865 342 6 -a 865 34 6 -a 865 59 2 -a 865 866 9 -a 865 646 6 -a 865 433 6 -a 865 356 8 -a 865 464 6 -a 865 244 7 -a 865 349 9 -a 865 921 3 -a 865 865 4 -a 865 507 2 -a 865 383 10 -a 865 205 2 -a 865 749 4 -a 865 445 4 -a 865 529 6 -a 865 821 2 -a 865 965 2 -a 865 456 4 -a 865 507 2 -a 865 978 4 -a 865 920 5 -a 865 674 3 -a 865 889 10 -a 865 321 8 -a 865 17 7 -a 865 41 2 -a 865 47 4 -a 865 358 9 -a 865 74 8 -a 865 105 10 -a 865 199 10 -a 865 719 9 -a 865 537 4 -a 865 555 3 -a 865 159 5 -a 865 781 7 -a 865 551 4 -a 865 507 2 -a 865 677 3 -a 865 391 2 -a 865 35 5 -a 865 595 5 -a 865 737 6 -a 865 480 9 -a 865 100 8 -a 865 533 3 -a 865 420 2 -a 865 555 3 -a 865 15 7 -a 865 373 9 -a 865 451 9 -a 865 689 8 -a 865 237 1 -a 865 771 7 -a 865 705 4 -a 865 277 10 -a 865 817 7 -a 866 38 3 -a 866 351 7 -a 866 922 9 -a 866 236 7 -a 866 45 8 -a 866 434 4 -a 866 790 3 -a 866 203 5 -a 866 190 2 -a 866 316 10 -a 866 709 7 -a 866 866 9 -a 866 707 5 -a 866 698 4 -a 866 901 1 -a 866 277 1 -a 866 410 2 -a 866 356 3 -a 866 376 2 -a 866 943 1 -a 866 775 4 -a 866 931 5 -a 866 957 9 -a 866 123 1 -a 866 357 4 -a 866 621 2 -a 866 359 1 -a 866 103 3 -a 866 301 3 -a 866 635 2 -a 866 920 4 -a 866 338 8 -a 866 985 2 -a 866 817 8 -a 866 574 1 -a 866 6 6 -a 866 226 1 -a 866 339 1 -a 866 208 2 -a 866 416 3 -a 866 655 4 -a 866 917 7 -a 866 257 4 -a 866 337 1 -a 866 590 7 -a 866 133 3 -a 866 613 8 -a 866 999 1 -a 866 488 10 -a 866 989 1 -a 866 917 5 -a 866 238 6 -a 866 895 8 -a 866 850 6 -a 866 360 8 -a 866 227 8 -a 866 446 9 -a 866 718 2 -a 866 329 10 -a 866 747 5 -a 866 329 1 -a 866 224 8 -a 866 60 8 -a 866 289 6 -a 866 16 3 -a 866 633 8 -a 866 294 5 -a 866 242 9 -a 866 972 10 -a 866 502 3 -a 866 657 9 -a 866 602 3 -a 866 394 10 -a 866 913 9 -a 866 938 7 -a 866 983 1 -a 866 22 8 -a 866 526 8 -a 866 957 3 -a 866 509 3 -a 866 490 4 -a 866 850 9 -a 866 747 1 -a 866 360 1 -a 866 675 1 -a 866 82 9 -a 866 586 8 -a 866 96 2 -a 866 800 7 -a 866 915 9 -a 866 842 4 -a 866 104 6 -a 866 114 2 -a 866 902 7 -a 866 392 10 -a 866 130 10 -a 866 510 9 -a 866 686 9 -a 866 371 2 -a 866 457 1 -a 866 163 3 -a 867 3 10 -a 867 34 3 -a 867 556 6 -a 867 915 3 -a 867 971 6 -a 867 514 2 -a 867 936 4 -a 867 473 10 -a 867 446 5 -a 867 421 5 -a 867 962 2 -a 867 271 9 -a 867 143 3 -a 867 298 9 -a 867 945 6 -a 867 224 6 -a 867 883 4 -a 867 17 7 -a 867 773 3 -a 867 858 8 -a 867 102 8 -a 867 887 5 -a 867 735 5 -a 867 494 1 -a 867 221 7 -a 867 155 3 -a 867 362 6 -a 867 677 10 -a 867 317 8 -a 867 364 7 -a 867 711 4 -a 867 872 6 -a 867 254 10 -a 867 657 8 -a 867 361 4 -a 867 166 1 -a 867 105 6 -a 867 806 2 -a 867 586 2 -a 867 43 3 -a 867 53 9 -a 867 728 6 -a 867 340 7 -a 867 997 10 -a 867 951 1 -a 867 198 5 -a 867 950 10 -a 867 971 5 -a 867 847 1 -a 867 27 9 -a 867 833 10 -a 867 557 6 -a 867 520 6 -a 867 824 6 -a 867 777 10 -a 867 674 2 -a 867 161 10 -a 867 430 4 -a 867 990 10 -a 867 524 2 -a 867 116 1 -a 867 837 10 -a 867 777 9 -a 867 772 4 -a 867 173 9 -a 867 942 9 -a 867 877 8 -a 867 979 10 -a 867 503 3 -a 867 919 3 -a 867 7 9 -a 867 206 9 -a 867 234 5 -a 867 133 3 -a 867 431 3 -a 867 992 8 -a 867 58 3 -a 867 377 10 -a 867 814 8 -a 867 84 6 -a 867 185 5 -a 867 346 3 -a 867 604 8 -a 867 99 8 -a 867 253 8 -a 867 144 4 -a 867 528 1 -a 867 219 6 -a 867 667 5 -a 867 643 8 -a 867 31 3 -a 867 420 10 -a 867 390 10 -a 867 204 8 -a 867 337 7 -a 867 242 8 -a 867 158 8 -a 867 840 1 -a 867 136 5 -a 867 164 9 -a 867 21 10 -a 867 369 3 -a 867 142 2 -a 867 153 1 -a 868 800 3 -a 868 109 8 -a 868 210 7 -a 868 152 4 -a 868 922 1 -a 868 294 3 -a 868 337 6 -a 868 244 8 -a 868 897 1 -a 868 320 5 -a 868 342 8 -a 868 125 3 -a 868 464 4 -a 868 869 3 -a 868 343 3 -a 868 106 9 -a 868 487 1 -a 868 374 8 -a 868 525 9 -a 868 876 2 -a 868 577 8 -a 868 862 7 -a 868 94 3 -a 868 734 9 -a 868 677 6 -a 868 229 5 -a 868 897 9 -a 868 697 5 -a 868 598 6 -a 868 14 3 -a 868 850 3 -a 868 373 1 -a 868 123 6 -a 868 35 3 -a 868 524 8 -a 868 20 1 -a 868 328 5 -a 868 860 4 -a 868 263 1 -a 868 200 2 -a 868 156 4 -a 868 604 7 -a 868 325 10 -a 868 619 9 -a 868 448 7 -a 868 667 7 -a 868 724 4 -a 868 934 7 -a 868 16 6 -a 868 225 9 -a 868 786 6 -a 868 592 2 -a 868 62 3 -a 868 879 8 -a 868 301 3 -a 868 738 2 -a 868 83 1 -a 868 173 4 -a 868 410 4 -a 868 680 1 -a 868 187 5 -a 868 235 1 -a 868 28 4 -a 868 309 4 -a 868 270 7 -a 868 552 2 -a 868 328 5 -a 868 597 2 -a 868 387 4 -a 868 591 2 -a 868 797 4 -a 868 542 1 -a 868 170 9 -a 868 97 9 -a 868 136 2 -a 868 618 6 -a 868 763 9 -a 868 860 10 -a 868 527 3 -a 868 779 8 -a 868 60 3 -a 868 288 3 -a 868 346 3 -a 868 121 4 -a 868 142 2 -a 868 647 3 -a 868 858 3 -a 868 225 9 -a 868 819 6 -a 868 243 4 -a 868 904 10 -a 868 478 7 -a 868 932 2 -a 868 289 8 -a 868 747 9 -a 868 459 8 -a 868 617 3 -a 868 319 1 -a 868 845 1 -a 868 183 3 -a 868 91 8 -a 868 363 5 -a 868 352 3 -a 868 187 9 -a 868 498 2 -a 869 969 1 -a 869 950 1 -a 869 333 4 -a 869 472 2 -a 869 704 2 -a 869 392 1 -a 869 759 5 -a 869 25 10 -a 869 512 10 -a 869 901 9 -a 869 671 9 -a 869 345 7 -a 869 101 1 -a 869 466 2 -a 869 588 9 -a 869 446 1 -a 869 41 2 -a 869 911 7 -a 869 735 3 -a 869 787 9 -a 869 345 4 -a 869 327 7 -a 869 81 9 -a 869 166 7 -a 869 509 9 -a 869 172 5 -a 869 528 10 -a 869 860 5 -a 869 358 9 -a 869 1 5 -a 869 805 8 -a 869 283 6 -a 869 334 7 -a 869 252 7 -a 869 986 8 -a 869 725 6 -a 869 213 9 -a 869 886 2 -a 869 657 2 -a 869 557 8 -a 869 986 8 -a 869 98 1 -a 869 120 8 -a 869 966 7 -a 869 544 5 -a 869 160 2 -a 869 852 6 -a 869 254 9 -a 869 946 6 -a 869 173 4 -a 869 580 10 -a 869 3 1 -a 869 338 10 -a 869 64 8 -a 869 174 1 -a 869 865 9 -a 869 923 6 -a 869 531 3 -a 869 865 6 -a 869 703 5 -a 869 814 3 -a 869 174 7 -a 869 954 2 -a 869 775 1 -a 869 899 5 -a 869 940 2 -a 869 761 5 -a 869 87 7 -a 869 801 6 -a 869 394 8 -a 869 643 1 -a 869 763 8 -a 869 491 6 -a 869 763 2 -a 869 704 6 -a 869 10 4 -a 869 922 6 -a 869 531 3 -a 869 263 3 -a 869 844 4 -a 869 703 3 -a 869 842 5 -a 869 846 7 -a 869 16 1 -a 869 905 4 -a 869 880 2 -a 869 804 6 -a 869 525 1 -a 869 721 5 -a 869 482 7 -a 869 314 7 -a 869 894 10 -a 869 412 3 -a 869 65 2 -a 869 768 6 -a 869 327 1 -a 869 825 5 -a 869 854 8 -a 869 103 7 -a 869 194 6 -a 869 473 8 -a 869 865 10 -a 869 685 8 -a 869 211 2 -a 869 544 3 -a 869 694 2 -a 870 108 8 -a 870 51 2 -a 870 957 10 -a 870 951 1 -a 870 753 9 -a 870 774 7 -a 870 772 6 -a 870 769 8 -a 870 655 1 -a 870 766 7 -a 870 624 7 -a 870 434 7 -a 870 267 7 -a 870 320 2 -a 870 915 2 -a 870 580 3 -a 870 190 10 -a 870 302 10 -a 870 644 9 -a 870 957 7 -a 870 628 10 -a 870 445 5 -a 870 787 5 -a 870 731 1 -a 870 638 6 -a 870 235 9 -a 870 571 7 -a 870 298 2 -a 870 445 4 -a 870 91 7 -a 870 992 8 -a 870 552 5 -a 870 141 6 -a 870 924 9 -a 870 479 1 -a 870 893 7 -a 870 673 4 -a 870 226 9 -a 870 637 2 -a 870 303 2 -a 870 992 4 -a 870 237 4 -a 870 736 1 -a 870 234 10 -a 870 556 2 -a 870 627 9 -a 870 813 5 -a 870 745 7 -a 870 928 5 -a 870 433 3 -a 870 678 3 -a 870 532 1 -a 870 877 1 -a 870 440 2 -a 870 238 9 -a 870 490 10 -a 870 674 1 -a 870 808 5 -a 870 788 5 -a 870 94 6 -a 870 898 2 -a 870 755 4 -a 870 645 2 -a 870 14 1 -a 870 654 10 -a 870 99 3 -a 870 907 7 -a 870 302 6 -a 870 325 2 -a 870 519 8 -a 870 605 3 -a 870 292 8 -a 870 755 2 -a 870 316 3 -a 870 525 9 -a 870 287 6 -a 870 942 5 -a 870 313 5 -a 870 7 10 -a 870 846 2 -a 870 745 1 -a 870 684 1 -a 870 353 2 -a 870 597 7 -a 870 99 8 -a 870 590 5 -a 870 63 8 -a 870 772 4 -a 870 373 10 -a 870 850 3 -a 870 865 8 -a 870 247 9 -a 870 580 9 -a 870 486 5 -a 870 260 5 -a 870 209 6 -a 870 584 3 -a 870 142 10 -a 870 510 6 -a 870 908 2 -a 870 661 10 -a 870 90 7 -a 870 175 9 -a 870 391 1 -a 871 406 8 -a 871 699 3 -a 871 677 7 -a 871 323 6 -a 871 684 9 -a 871 144 8 -a 871 732 3 -a 871 343 1 -a 871 496 4 -a 871 305 3 -a 871 442 10 -a 871 61 9 -a 871 367 6 -a 871 189 4 -a 871 434 7 -a 871 192 4 -a 871 30 6 -a 871 680 5 -a 871 771 4 -a 871 515 4 -a 871 939 4 -a 871 979 6 -a 871 74 10 -a 871 57 7 -a 871 464 4 -a 871 982 9 -a 871 717 5 -a 871 554 4 -a 871 132 6 -a 871 83 7 -a 871 959 4 -a 871 831 5 -a 871 760 5 -a 871 257 9 -a 871 818 8 -a 871 419 10 -a 871 401 1 -a 871 525 3 -a 871 761 9 -a 871 896 2 -a 871 829 8 -a 871 178 6 -a 871 957 1 -a 871 171 1 -a 871 367 9 -a 871 366 7 -a 871 362 4 -a 871 396 2 -a 871 21 2 -a 871 108 3 -a 871 910 6 -a 871 959 6 -a 871 62 8 -a 871 983 9 -a 871 526 1 -a 871 940 9 -a 871 707 5 -a 871 55 8 -a 871 48 2 -a 871 790 5 -a 871 878 4 -a 871 525 3 -a 871 245 6 -a 871 671 6 -a 871 943 5 -a 871 645 2 -a 871 171 10 -a 871 679 8 -a 871 517 2 -a 871 1000 10 -a 871 857 8 -a 871 449 10 -a 871 146 1 -a 871 199 6 -a 871 814 5 -a 871 508 1 -a 871 594 7 -a 871 834 5 -a 871 615 3 -a 871 479 8 -a 871 768 10 -a 871 677 6 -a 871 437 5 -a 871 759 10 -a 871 178 8 -a 871 353 9 -a 871 441 2 -a 871 232 7 -a 871 400 6 -a 871 206 1 -a 871 220 2 -a 871 253 2 -a 871 730 7 -a 871 464 4 -a 871 923 5 -a 871 648 4 -a 871 85 6 -a 871 69 9 -a 871 303 8 -a 871 601 2 -a 871 44 2 -a 871 135 6 -a 871 25 7 -a 871 190 10 -a 871 333 5 -a 871 838 5 -a 871 697 7 -a 871 926 4 -a 871 647 10 -a 872 287 7 -a 872 380 6 -a 872 390 10 -a 872 963 8 -a 872 816 4 -a 872 124 9 -a 872 116 7 -a 872 144 3 -a 872 565 3 -a 872 347 8 -a 872 543 3 -a 872 770 4 -a 872 566 5 -a 872 795 1 -a 872 476 3 -a 872 6 1 -a 872 693 1 -a 872 99 7 -a 872 90 10 -a 872 762 5 -a 872 401 3 -a 872 690 5 -a 872 805 8 -a 872 535 3 -a 872 714 5 -a 872 994 9 -a 872 867 4 -a 872 527 2 -a 872 666 2 -a 872 768 1 -a 872 149 5 -a 872 953 7 -a 872 123 9 -a 872 538 3 -a 872 891 9 -a 872 939 7 -a 872 662 3 -a 872 58 6 -a 872 202 10 -a 872 329 1 -a 872 601 9 -a 872 971 1 -a 872 895 6 -a 872 371 6 -a 872 422 7 -a 872 900 9 -a 872 40 7 -a 872 521 1 -a 872 989 7 -a 872 801 6 -a 872 921 2 -a 872 654 2 -a 872 581 3 -a 872 432 4 -a 872 343 3 -a 872 551 6 -a 872 274 9 -a 872 869 8 -a 872 192 1 -a 872 18 3 -a 872 120 1 -a 872 140 2 -a 872 530 1 -a 872 54 8 -a 872 167 2 -a 872 993 7 -a 872 112 6 -a 872 368 5 -a 872 297 7 -a 872 712 4 -a 872 315 4 -a 872 167 5 -a 872 58 6 -a 872 736 2 -a 872 42 3 -a 872 97 10 -a 872 232 4 -a 872 6 8 -a 872 897 2 -a 872 129 8 -a 872 659 5 -a 872 454 7 -a 872 560 6 -a 872 833 7 -a 872 845 10 -a 872 171 6 -a 872 850 10 -a 872 837 1 -a 873 291 7 -a 873 990 6 -a 873 343 7 -a 873 277 8 -a 873 19 4 -a 873 509 2 -a 873 245 6 -a 873 130 6 -a 873 877 2 -a 873 541 1 -a 873 841 5 -a 873 167 8 -a 873 708 5 -a 873 899 5 -a 873 902 8 -a 873 749 10 -a 873 995 1 -a 873 110 6 -a 873 755 3 -a 873 868 1 -a 873 238 1 -a 873 389 10 -a 873 297 7 -a 873 797 8 -a 873 366 8 -a 873 276 7 -a 873 605 5 -a 873 186 8 -a 873 446 7 -a 873 431 6 -a 873 736 1 -a 873 396 5 -a 873 341 9 -a 873 414 2 -a 873 849 10 -a 873 232 2 -a 873 544 10 -a 873 701 5 -a 873 773 8 -a 873 360 5 -a 873 867 4 -a 873 456 5 -a 873 234 2 -a 873 745 8 -a 873 180 2 -a 873 205 9 -a 873 854 6 -a 873 934 5 -a 873 48 5 -a 873 67 5 -a 873 299 10 -a 873 344 4 -a 873 863 7 -a 873 664 6 -a 873 619 6 -a 873 443 6 -a 873 849 4 -a 873 40 7 -a 873 873 9 -a 873 847 9 -a 873 776 7 -a 873 244 5 -a 873 163 7 -a 873 763 2 -a 873 658 1 -a 873 995 3 -a 873 177 9 -a 873 688 8 -a 873 743 9 -a 873 536 8 -a 873 531 4 -a 873 174 3 -a 873 770 2 -a 873 251 1 -a 873 353 9 -a 873 974 10 -a 873 80 1 -a 873 263 5 -a 873 146 6 -a 873 561 1 -a 873 340 6 -a 873 200 5 -a 873 958 6 -a 873 426 7 -a 873 24 5 -a 873 997 3 -a 873 275 9 -a 873 871 10 -a 873 748 2 -a 873 518 4 -a 873 9 10 -a 873 487 8 -a 873 151 3 -a 873 457 2 -a 873 327 10 -a 874 684 4 -a 874 175 8 -a 874 863 2 -a 874 190 10 -a 874 348 7 -a 874 608 3 -a 874 440 2 -a 874 700 5 -a 874 557 5 -a 874 519 9 -a 874 962 10 -a 874 553 9 -a 874 664 10 -a 874 498 1 -a 874 892 10 -a 874 647 8 -a 874 697 1 -a 874 825 3 -a 874 48 5 -a 874 721 4 -a 874 797 4 -a 874 322 5 -a 874 567 5 -a 874 521 3 -a 874 840 9 -a 874 575 6 -a 874 990 8 -a 874 571 9 -a 874 439 9 -a 874 293 5 -a 874 230 5 -a 874 613 2 -a 874 131 9 -a 874 419 4 -a 874 960 10 -a 874 738 9 -a 874 858 4 -a 874 635 8 -a 874 270 9 -a 874 352 3 -a 874 573 1 -a 874 822 2 -a 874 46 2 -a 874 689 10 -a 874 637 2 -a 874 743 1 -a 874 489 1 -a 874 684 5 -a 874 439 1 -a 874 261 10 -a 874 781 9 -a 874 821 9 -a 874 555 2 -a 874 763 4 -a 874 786 1 -a 874 101 5 -a 874 177 6 -a 874 54 9 -a 874 330 9 -a 874 789 8 -a 874 184 7 -a 874 748 9 -a 874 724 7 -a 874 921 8 -a 874 581 5 -a 874 335 8 -a 874 166 2 -a 874 932 7 -a 874 907 4 -a 874 987 2 -a 874 922 7 -a 874 952 9 -a 874 651 2 -a 874 534 1 -a 874 670 2 -a 874 115 10 -a 874 194 10 -a 874 84 9 -a 874 376 2 -a 874 175 10 -a 874 64 1 -a 874 132 10 -a 874 995 1 -a 874 619 7 -a 874 895 2 -a 874 756 7 -a 874 719 6 -a 874 47 2 -a 874 810 1 -a 874 25 3 -a 874 836 10 -a 874 993 3 -a 874 772 2 -a 874 535 10 -a 874 890 4 -a 874 329 5 -a 874 869 2 -a 874 31 6 -a 874 236 4 -a 875 751 3 -a 875 134 3 -a 875 679 8 -a 875 644 10 -a 875 667 9 -a 875 324 4 -a 875 759 8 -a 875 860 2 -a 875 408 7 -a 875 110 10 -a 875 10 3 -a 875 471 7 -a 875 241 9 -a 875 65 5 -a 875 111 9 -a 875 736 8 -a 875 784 8 -a 875 158 2 -a 875 521 8 -a 875 808 1 -a 875 993 4 -a 875 489 6 -a 875 555 7 -a 875 503 10 -a 875 354 5 -a 875 883 7 -a 875 348 2 -a 875 385 1 -a 875 95 3 -a 875 74 6 -a 875 378 3 -a 875 228 7 -a 875 752 9 -a 875 894 5 -a 875 52 3 -a 875 755 7 -a 875 730 10 -a 875 459 10 -a 875 864 8 -a 875 739 2 -a 875 929 5 -a 875 81 1 -a 875 719 4 -a 875 994 8 -a 875 191 2 -a 875 430 7 -a 875 753 5 -a 875 348 3 -a 875 950 4 -a 875 536 1 -a 875 316 10 -a 875 414 10 -a 875 66 9 -a 875 819 3 -a 875 768 8 -a 875 949 1 -a 875 142 3 -a 875 128 2 -a 875 19 2 -a 875 215 1 -a 875 505 6 -a 875 246 6 -a 875 967 10 -a 875 501 8 -a 875 115 9 -a 875 232 9 -a 875 844 7 -a 875 452 5 -a 875 71 9 -a 875 559 4 -a 875 356 4 -a 875 151 5 -a 875 253 4 -a 875 325 8 -a 875 342 5 -a 875 682 4 -a 875 53 10 -a 875 689 7 -a 875 607 5 -a 875 588 10 -a 875 654 6 -a 875 799 4 -a 875 763 5 -a 875 578 5 -a 875 940 6 -a 875 890 7 -a 875 596 4 -a 875 130 4 -a 875 370 1 -a 875 841 9 -a 875 72 9 -a 875 871 5 -a 875 955 7 -a 875 65 9 -a 875 78 1 -a 875 775 9 -a 875 516 7 -a 875 148 3 -a 875 309 3 -a 876 872 6 -a 876 299 1 -a 876 561 1 -a 876 172 5 -a 876 640 5 -a 876 218 10 -a 876 225 2 -a 876 304 4 -a 876 824 5 -a 876 812 4 -a 876 284 6 -a 876 819 3 -a 876 441 1 -a 876 58 1 -a 876 558 5 -a 876 997 9 -a 876 423 9 -a 876 589 1 -a 876 103 1 -a 876 793 3 -a 876 405 4 -a 876 174 4 -a 876 639 8 -a 876 336 8 -a 876 239 10 -a 876 716 1 -a 876 86 9 -a 876 754 1 -a 876 863 3 -a 876 394 3 -a 876 601 2 -a 876 137 1 -a 876 954 5 -a 876 773 6 -a 876 776 10 -a 876 147 6 -a 876 997 8 -a 876 56 1 -a 876 970 3 -a 876 784 2 -a 876 339 6 -a 876 764 2 -a 876 201 3 -a 876 397 2 -a 876 297 2 -a 876 194 2 -a 876 369 5 -a 876 720 10 -a 876 783 10 -a 876 471 6 -a 876 488 10 -a 876 163 1 -a 876 645 8 -a 876 102 6 -a 876 498 2 -a 876 883 8 -a 876 817 9 -a 876 583 8 -a 876 612 3 -a 876 655 10 -a 876 976 7 -a 876 189 4 -a 876 792 4 -a 876 905 5 -a 876 961 7 -a 876 543 4 -a 876 27 6 -a 876 933 6 -a 876 598 3 -a 876 996 10 -a 876 692 6 -a 876 937 6 -a 876 736 4 -a 876 892 4 -a 876 309 6 -a 876 8 7 -a 876 62 8 -a 876 677 9 -a 876 727 7 -a 876 844 10 -a 876 124 10 -a 876 190 7 -a 876 768 4 -a 876 291 5 -a 876 480 6 -a 877 626 9 -a 877 83 8 -a 877 38 2 -a 877 213 2 -a 877 738 4 -a 877 401 7 -a 877 505 9 -a 877 894 6 -a 877 337 9 -a 877 23 1 -a 877 921 4 -a 877 245 10 -a 877 621 5 -a 877 892 2 -a 877 937 1 -a 877 533 3 -a 877 603 10 -a 877 804 10 -a 877 841 3 -a 877 611 8 -a 877 865 8 -a 877 493 5 -a 877 313 9 -a 877 684 9 -a 877 616 8 -a 877 503 8 -a 877 666 1 -a 877 359 10 -a 877 793 5 -a 877 121 6 -a 877 984 2 -a 877 876 5 -a 877 158 10 -a 877 173 2 -a 877 589 3 -a 877 147 9 -a 877 573 6 -a 877 69 5 -a 877 17 9 -a 877 910 9 -a 877 91 1 -a 877 937 3 -a 877 130 5 -a 877 711 7 -a 877 804 9 -a 877 42 3 -a 877 219 7 -a 877 383 5 -a 877 846 6 -a 877 35 2 -a 877 993 5 -a 877 686 6 -a 877 528 10 -a 877 281 4 -a 877 346 6 -a 877 119 7 -a 877 783 1 -a 877 478 10 -a 877 552 9 -a 877 107 2 -a 877 437 7 -a 877 403 3 -a 877 264 3 -a 877 609 5 -a 877 991 1 -a 877 411 5 -a 877 158 2 -a 877 35 8 -a 877 427 7 -a 877 43 1 -a 877 125 7 -a 877 339 5 -a 877 172 8 -a 877 836 9 -a 877 118 7 -a 877 214 3 -a 877 30 1 -a 877 500 8 -a 877 35 1 -a 877 65 10 -a 877 468 2 -a 877 720 2 -a 877 592 9 -a 877 749 8 -a 877 41 5 -a 877 710 2 -a 877 507 4 -a 877 27 7 -a 877 163 3 -a 877 34 3 -a 877 133 2 -a 877 600 7 -a 877 436 2 -a 877 397 9 -a 878 184 2 -a 878 402 7 -a 878 807 9 -a 878 341 10 -a 878 436 8 -a 878 209 2 -a 878 383 10 -a 878 561 9 -a 878 547 1 -a 878 555 2 -a 878 372 5 -a 878 664 9 -a 878 768 3 -a 878 401 5 -a 878 140 9 -a 878 802 7 -a 878 465 1 -a 878 607 1 -a 878 497 3 -a 878 32 2 -a 878 331 2 -a 878 538 2 -a 878 742 10 -a 878 838 4 -a 878 564 1 -a 878 904 1 -a 878 871 10 -a 878 697 8 -a 878 479 3 -a 878 283 8 -a 878 69 4 -a 878 663 1 -a 878 684 1 -a 878 875 8 -a 878 96 9 -a 878 59 6 -a 878 362 10 -a 878 656 7 -a 878 605 5 -a 878 916 9 -a 878 3 6 -a 878 244 1 -a 878 659 10 -a 878 403 4 -a 878 383 10 -a 878 436 4 -a 878 868 6 -a 878 990 6 -a 878 932 5 -a 878 899 9 -a 878 296 3 -a 878 445 4 -a 878 616 8 -a 878 109 9 -a 878 496 5 -a 878 980 5 -a 878 681 7 -a 878 974 9 -a 878 238 6 -a 878 749 3 -a 878 612 7 -a 878 921 10 -a 878 599 6 -a 878 591 9 -a 878 657 9 -a 878 952 1 -a 878 647 5 -a 878 237 5 -a 878 843 9 -a 878 649 7 -a 878 480 7 -a 878 477 2 -a 878 28 4 -a 878 863 3 -a 878 912 2 -a 878 895 9 -a 878 828 10 -a 878 819 3 -a 878 769 8 -a 878 99 7 -a 878 240 8 -a 878 361 4 -a 878 208 4 -a 878 224 5 -a 878 856 8 -a 878 163 3 -a 878 904 4 -a 878 805 4 -a 878 400 1 -a 878 628 1 -a 878 393 10 -a 878 296 8 -a 878 202 3 -a 879 983 5 -a 879 288 5 -a 879 858 9 -a 879 910 7 -a 879 934 10 -a 879 70 5 -a 879 728 7 -a 879 559 2 -a 879 549 3 -a 879 180 9 -a 879 586 6 -a 879 387 2 -a 879 67 7 -a 879 456 6 -a 879 190 1 -a 879 885 9 -a 879 200 1 -a 879 289 2 -a 879 100 9 -a 879 560 9 -a 879 496 9 -a 879 323 7 -a 879 391 3 -a 879 658 4 -a 879 202 2 -a 879 172 8 -a 879 33 6 -a 879 829 3 -a 879 564 10 -a 879 328 4 -a 879 6 2 -a 879 522 9 -a 879 615 9 -a 879 863 10 -a 879 407 7 -a 879 525 7 -a 879 932 5 -a 879 110 10 -a 879 59 6 -a 879 457 1 -a 879 289 2 -a 879 644 4 -a 879 843 5 -a 879 355 5 -a 879 75 1 -a 879 9 8 -a 879 215 5 -a 879 274 4 -a 879 297 6 -a 879 315 6 -a 879 834 2 -a 879 792 5 -a 879 637 3 -a 879 200 9 -a 879 425 9 -a 879 839 9 -a 879 371 5 -a 879 457 5 -a 879 643 8 -a 879 934 10 -a 879 784 1 -a 879 649 1 -a 879 431 10 -a 879 375 2 -a 879 487 6 -a 879 837 7 -a 879 899 2 -a 879 395 1 -a 879 946 8 -a 879 957 9 -a 879 851 5 -a 879 210 10 -a 879 576 7 -a 879 669 7 -a 879 564 8 -a 879 650 6 -a 879 677 4 -a 879 779 4 -a 879 923 7 -a 879 973 10 -a 879 69 3 -a 879 732 3 -a 879 740 1 -a 879 705 4 -a 879 932 3 -a 879 140 8 -a 879 519 7 -a 879 278 2 -a 879 596 9 -a 879 138 8 -a 879 188 4 -a 879 356 3 -a 879 786 10 -a 879 618 2 -a 879 730 9 -a 879 248 1 -a 879 431 5 -a 879 604 4 -a 879 642 2 -a 879 352 10 -a 879 536 1 -a 879 468 8 -a 879 562 7 -a 879 87 1 -a 879 113 9 -a 879 101 1 -a 879 736 1 -a 879 789 8 -a 879 879 8 -a 879 634 7 -a 880 738 10 -a 880 947 1 -a 880 342 7 -a 880 453 1 -a 880 628 4 -a 880 249 1 -a 880 593 3 -a 880 122 2 -a 880 526 2 -a 880 164 5 -a 880 259 2 -a 880 713 7 -a 880 519 5 -a 880 20 8 -a 880 307 9 -a 880 224 5 -a 880 268 5 -a 880 737 1 -a 880 827 4 -a 880 909 1 -a 880 64 9 -a 880 338 7 -a 880 353 4 -a 880 625 2 -a 880 424 7 -a 880 465 10 -a 880 726 2 -a 880 135 10 -a 880 229 10 -a 880 580 5 -a 880 769 7 -a 880 966 6 -a 880 503 1 -a 880 86 3 -a 880 395 3 -a 880 106 5 -a 880 334 8 -a 880 987 3 -a 880 227 7 -a 880 859 3 -a 880 126 3 -a 880 486 4 -a 880 548 3 -a 880 645 2 -a 880 505 1 -a 880 854 8 -a 880 868 5 -a 880 772 8 -a 880 566 8 -a 880 671 2 -a 880 657 2 -a 880 629 7 -a 880 230 9 -a 880 408 3 -a 880 449 3 -a 880 955 5 -a 880 542 5 -a 880 677 2 -a 880 510 7 -a 880 286 1 -a 880 619 3 -a 880 371 9 -a 880 93 3 -a 880 704 6 -a 880 975 4 -a 880 320 7 -a 880 539 6 -a 880 76 2 -a 880 805 10 -a 880 62 8 -a 880 720 1 -a 880 285 1 -a 880 915 6 -a 880 564 7 -a 880 33 8 -a 880 456 9 -a 880 210 8 -a 880 689 4 -a 880 60 10 -a 880 193 7 -a 880 673 3 -a 880 289 6 -a 880 600 7 -a 880 97 7 -a 880 219 7 -a 880 118 6 -a 880 773 5 -a 880 729 6 -a 880 403 3 -a 880 367 8 -a 880 716 3 -a 880 774 4 -a 880 355 8 -a 880 809 3 -a 880 453 4 -a 880 305 5 -a 880 104 3 -a 880 991 4 -a 880 381 5 -a 880 908 5 -a 880 28 9 -a 880 76 1 -a 880 168 2 -a 880 942 8 -a 880 639 8 -a 880 200 9 -a 880 373 3 -a 880 848 3 -a 880 888 3 -a 880 433 8 -a 880 17 2 -a 880 536 10 -a 881 721 9 -a 881 616 6 -a 881 632 7 -a 881 940 1 -a 881 733 1 -a 881 381 3 -a 881 644 2 -a 881 112 7 -a 881 747 6 -a 881 335 2 -a 881 885 8 -a 881 78 10 -a 881 119 7 -a 881 313 9 -a 881 382 4 -a 881 222 3 -a 881 280 10 -a 881 762 3 -a 881 105 8 -a 881 307 5 -a 881 838 8 -a 881 273 1 -a 881 225 6 -a 881 452 3 -a 881 472 7 -a 881 597 10 -a 881 276 1 -a 881 336 9 -a 881 5 1 -a 881 292 7 -a 881 871 6 -a 881 726 2 -a 881 907 6 -a 881 479 10 -a 881 641 6 -a 881 616 4 -a 881 859 3 -a 881 260 3 -a 881 727 5 -a 881 581 1 -a 881 594 5 -a 881 587 5 -a 881 658 5 -a 881 713 5 -a 881 899 3 -a 881 16 2 -a 881 934 7 -a 881 154 8 -a 881 777 1 -a 881 15 10 -a 881 461 7 -a 881 590 4 -a 881 287 1 -a 881 685 9 -a 881 18 4 -a 881 758 6 -a 881 257 9 -a 881 293 7 -a 881 69 8 -a 881 262 4 -a 881 584 9 -a 881 940 5 -a 881 987 4 -a 881 466 1 -a 881 394 6 -a 881 603 10 -a 881 57 10 -a 881 228 4 -a 881 862 3 -a 881 783 9 -a 881 808 2 -a 881 431 6 -a 881 345 3 -a 881 442 2 -a 881 119 6 -a 881 220 7 -a 881 457 6 -a 881 29 10 -a 881 373 10 -a 881 209 8 -a 881 43 9 -a 881 833 8 -a 881 799 8 -a 881 329 1 -a 881 493 7 -a 881 816 5 -a 881 62 10 -a 881 750 10 -a 881 84 2 -a 881 131 2 -a 881 667 4 -a 881 46 1 -a 881 973 5 -a 881 108 5 -a 881 439 10 -a 881 551 4 -a 881 165 6 -a 881 666 9 -a 881 388 3 -a 881 947 6 -a 881 449 2 -a 882 818 4 -a 882 268 9 -a 882 890 7 -a 882 937 9 -a 882 487 6 -a 882 322 5 -a 882 965 10 -a 882 859 7 -a 882 531 3 -a 882 668 10 -a 882 305 8 -a 882 311 8 -a 882 136 4 -a 882 96 3 -a 882 372 10 -a 882 885 9 -a 882 179 7 -a 882 502 3 -a 882 871 8 -a 882 845 9 -a 882 547 7 -a 882 819 1 -a 882 952 4 -a 882 985 5 -a 882 345 9 -a 882 92 5 -a 882 626 9 -a 882 732 7 -a 882 15 3 -a 882 51 9 -a 882 526 10 -a 882 282 4 -a 882 940 5 -a 882 438 3 -a 882 768 7 -a 882 238 9 -a 882 378 5 -a 882 602 9 -a 882 768 1 -a 882 360 2 -a 882 245 4 -a 882 48 7 -a 882 670 3 -a 882 381 10 -a 882 143 1 -a 882 17 5 -a 882 241 2 -a 882 321 1 -a 882 519 2 -a 882 88 8 -a 882 141 1 -a 882 41 5 -a 882 906 9 -a 882 68 2 -a 882 2 10 -a 882 227 1 -a 882 160 2 -a 882 627 8 -a 882 958 2 -a 882 174 9 -a 882 677 7 -a 882 459 6 -a 882 455 1 -a 882 593 1 -a 882 896 9 -a 882 198 3 -a 882 830 10 -a 882 249 8 -a 882 799 8 -a 882 573 5 -a 882 608 9 -a 882 20 5 -a 882 620 6 -a 882 253 6 -a 882 400 10 -a 882 762 4 -a 882 270 10 -a 882 640 5 -a 882 58 1 -a 882 788 7 -a 882 727 9 -a 882 198 1 -a 882 828 8 -a 882 609 1 -a 882 265 4 -a 882 829 6 -a 882 835 9 -a 882 424 2 -a 882 432 10 -a 882 768 5 -a 882 597 4 -a 882 84 4 -a 882 203 1 -a 882 27 9 -a 882 676 2 -a 882 74 10 -a 882 224 6 -a 882 481 1 -a 882 323 1 -a 882 29 2 -a 883 930 8 -a 883 18 8 -a 883 648 3 -a 883 159 4 -a 883 417 7 -a 883 385 9 -a 883 428 5 -a 883 32 6 -a 883 442 8 -a 883 191 10 -a 883 759 2 -a 883 639 10 -a 883 343 4 -a 883 904 3 -a 883 823 4 -a 883 153 9 -a 883 303 4 -a 883 230 8 -a 883 920 4 -a 883 900 1 -a 883 313 6 -a 883 98 8 -a 883 926 9 -a 883 989 10 -a 883 172 5 -a 883 126 8 -a 883 445 9 -a 883 494 3 -a 883 124 4 -a 883 474 3 -a 883 399 7 -a 883 141 10 -a 883 97 9 -a 883 557 3 -a 883 557 10 -a 883 482 6 -a 883 984 10 -a 883 588 5 -a 883 923 3 -a 883 150 2 -a 883 322 2 -a 883 538 2 -a 883 144 4 -a 883 664 2 -a 883 417 2 -a 883 966 10 -a 883 816 6 -a 883 719 6 -a 883 171 3 -a 883 712 2 -a 883 594 9 -a 883 483 1 -a 883 809 3 -a 883 496 3 -a 883 447 3 -a 883 980 2 -a 883 621 8 -a 883 892 5 -a 883 449 7 -a 883 744 6 -a 883 341 8 -a 883 848 6 -a 883 884 1 -a 883 437 3 -a 883 380 5 -a 883 416 2 -a 883 918 7 -a 883 340 6 -a 883 817 8 -a 883 489 3 -a 883 301 7 -a 883 330 1 -a 883 632 8 -a 883 964 7 -a 883 746 10 -a 883 573 9 -a 883 756 1 -a 883 440 5 -a 883 743 8 -a 883 443 9 -a 883 10 1 -a 883 202 2 -a 883 227 8 -a 883 505 7 -a 883 648 10 -a 883 183 1 -a 883 101 8 -a 883 515 3 -a 883 631 4 -a 883 844 4 -a 883 855 3 -a 883 454 3 -a 883 703 10 -a 883 268 5 -a 883 834 10 -a 883 94 3 -a 883 161 10 -a 883 149 7 -a 883 72 7 -a 883 977 1 -a 883 637 7 -a 883 372 3 -a 883 282 9 -a 883 245 8 -a 883 312 4 -a 883 3 7 -a 883 817 4 -a 883 43 7 -a 883 443 6 -a 883 536 10 -a 883 485 2 -a 883 452 8 -a 883 737 9 -a 883 711 4 -a 884 956 6 -a 884 360 4 -a 884 893 10 -a 884 32 7 -a 884 875 6 -a 884 500 5 -a 884 875 7 -a 884 705 3 -a 884 953 4 -a 884 553 9 -a 884 972 1 -a 884 762 1 -a 884 646 10 -a 884 109 8 -a 884 910 4 -a 884 717 4 -a 884 61 7 -a 884 523 4 -a 884 65 4 -a 884 343 9 -a 884 767 3 -a 884 376 10 -a 884 345 9 -a 884 559 2 -a 884 418 5 -a 884 787 8 -a 884 70 1 -a 884 902 8 -a 884 214 9 -a 884 806 9 -a 884 588 4 -a 884 145 10 -a 884 142 7 -a 884 457 10 -a 884 176 6 -a 884 956 10 -a 884 26 6 -a 884 696 9 -a 884 884 6 -a 884 578 6 -a 884 644 1 -a 884 622 5 -a 884 199 1 -a 884 752 3 -a 884 507 1 -a 884 916 8 -a 884 812 8 -a 884 5 8 -a 884 980 7 -a 884 130 7 -a 884 771 7 -a 884 331 7 -a 884 475 10 -a 884 306 3 -a 884 748 2 -a 884 237 5 -a 884 375 8 -a 884 625 1 -a 884 451 4 -a 884 157 3 -a 884 188 4 -a 884 595 10 -a 884 298 4 -a 884 644 2 -a 884 771 9 -a 884 289 3 -a 884 575 2 -a 884 796 2 -a 884 984 8 -a 884 435 1 -a 884 350 10 -a 884 603 4 -a 884 32 5 -a 884 548 10 -a 884 330 5 -a 884 538 9 -a 884 439 8 -a 884 118 8 -a 884 543 2 -a 884 394 10 -a 884 247 3 -a 884 289 6 -a 884 724 10 -a 884 721 9 -a 884 594 10 -a 884 447 10 -a 884 958 3 -a 884 969 8 -a 884 47 9 -a 884 384 3 -a 884 101 1 -a 884 235 3 -a 884 978 6 -a 884 398 2 -a 884 878 1 -a 884 724 4 -a 884 686 3 -a 884 429 5 -a 884 496 1 -a 884 645 6 -a 884 863 4 -a 884 845 8 -a 884 224 8 -a 884 894 7 -a 884 368 2 -a 884 553 1 -a 884 407 9 -a 884 807 9 -a 884 670 9 -a 884 949 10 -a 884 176 1 -a 884 917 4 -a 884 214 1 -a 885 900 3 -a 885 613 8 -a 885 807 6 -a 885 322 10 -a 885 546 1 -a 885 751 4 -a 885 369 6 -a 885 929 10 -a 885 851 9 -a 885 603 9 -a 885 883 5 -a 885 224 4 -a 885 456 1 -a 885 582 5 -a 885 909 1 -a 885 884 4 -a 885 53 10 -a 885 530 6 -a 885 722 5 -a 885 897 10 -a 885 753 1 -a 885 591 8 -a 885 241 10 -a 885 281 2 -a 885 998 2 -a 885 23 9 -a 885 951 2 -a 885 922 5 -a 885 198 8 -a 885 843 7 -a 885 111 4 -a 885 73 1 -a 885 431 9 -a 885 918 3 -a 885 395 2 -a 885 977 9 -a 885 644 6 -a 885 763 10 -a 885 881 3 -a 885 471 3 -a 885 341 8 -a 885 739 7 -a 885 694 1 -a 885 796 7 -a 885 297 5 -a 885 579 4 -a 885 656 4 -a 885 349 5 -a 885 84 7 -a 885 353 4 -a 885 222 3 -a 885 836 6 -a 885 944 5 -a 885 462 7 -a 885 92 5 -a 885 917 1 -a 885 484 1 -a 885 18 6 -a 885 814 6 -a 885 681 10 -a 885 860 7 -a 885 925 5 -a 885 754 3 -a 885 267 10 -a 885 818 10 -a 885 124 6 -a 885 219 10 -a 885 437 2 -a 885 886 4 -a 885 75 4 -a 885 907 9 -a 885 202 9 -a 885 814 8 -a 885 577 8 -a 885 997 8 -a 885 86 9 -a 885 131 6 -a 885 628 5 -a 885 434 4 -a 885 214 7 -a 885 981 6 -a 885 655 6 -a 885 25 2 -a 885 900 3 -a 885 92 4 -a 885 116 8 -a 885 792 7 -a 886 575 7 -a 886 134 5 -a 886 581 5 -a 886 232 8 -a 886 993 8 -a 886 481 2 -a 886 985 2 -a 886 235 6 -a 886 274 1 -a 886 84 10 -a 886 453 3 -a 886 711 2 -a 886 969 5 -a 886 528 1 -a 886 593 1 -a 886 146 7 -a 886 317 10 -a 886 145 10 -a 886 118 2 -a 886 402 2 -a 886 275 4 -a 886 746 2 -a 886 835 3 -a 886 488 5 -a 886 702 6 -a 886 466 7 -a 886 512 10 -a 886 577 3 -a 886 557 1 -a 886 628 9 -a 886 344 4 -a 886 108 4 -a 886 761 4 -a 886 924 10 -a 886 339 8 -a 886 729 7 -a 886 381 10 -a 886 299 10 -a 886 964 8 -a 886 654 7 -a 886 382 4 -a 886 392 6 -a 886 340 7 -a 886 326 10 -a 886 919 3 -a 886 933 3 -a 886 471 8 -a 886 211 2 -a 886 53 5 -a 886 588 3 -a 886 612 9 -a 886 328 1 -a 886 309 9 -a 886 423 6 -a 886 815 9 -a 886 888 4 -a 886 303 2 -a 886 562 9 -a 886 420 8 -a 886 930 5 -a 886 905 6 -a 886 527 6 -a 886 666 9 -a 886 805 1 -a 886 865 2 -a 886 370 2 -a 886 161 4 -a 886 139 1 -a 886 309 6 -a 886 814 9 -a 886 520 7 -a 886 701 7 -a 886 130 5 -a 886 845 10 -a 886 595 6 -a 886 38 2 -a 886 291 4 -a 886 806 1 -a 886 90 6 -a 886 879 8 -a 886 393 2 -a 886 417 6 -a 886 163 5 -a 886 815 7 -a 886 208 6 -a 886 149 10 -a 886 678 2 -a 886 510 7 -a 886 710 6 -a 886 74 4 -a 886 415 9 -a 886 591 8 -a 886 600 6 -a 886 56 10 -a 886 371 2 -a 886 441 2 -a 886 425 3 -a 887 531 2 -a 887 579 8 -a 887 734 4 -a 887 320 8 -a 887 75 6 -a 887 410 10 -a 887 449 1 -a 887 919 5 -a 887 486 7 -a 887 186 4 -a 887 785 6 -a 887 576 5 -a 887 40 9 -a 887 154 7 -a 887 992 4 -a 887 202 3 -a 887 968 4 -a 887 175 8 -a 887 350 1 -a 887 622 3 -a 887 684 1 -a 887 36 10 -a 887 695 4 -a 887 74 8 -a 887 626 8 -a 887 270 4 -a 887 129 7 -a 887 996 6 -a 887 710 10 -a 887 554 8 -a 887 502 1 -a 887 265 1 -a 887 263 7 -a 887 821 3 -a 887 339 9 -a 887 672 1 -a 887 246 4 -a 887 233 2 -a 887 651 6 -a 887 731 1 -a 887 418 4 -a 887 412 2 -a 887 282 9 -a 887 457 2 -a 887 565 7 -a 887 250 4 -a 887 659 8 -a 887 508 10 -a 887 424 10 -a 887 105 1 -a 887 84 8 -a 887 19 2 -a 887 799 4 -a 887 157 3 -a 887 644 5 -a 887 45 3 -a 887 286 9 -a 887 615 4 -a 887 754 7 -a 887 839 10 -a 887 92 2 -a 887 77 6 -a 887 913 3 -a 887 332 3 -a 887 748 1 -a 887 134 2 -a 887 565 8 -a 887 374 6 -a 887 864 5 -a 887 982 4 -a 887 785 4 -a 887 122 5 -a 887 415 8 -a 887 325 6 -a 887 371 7 -a 887 49 8 -a 887 833 10 -a 887 794 4 -a 887 32 1 -a 887 937 6 -a 887 877 3 -a 887 51 1 -a 887 712 4 -a 887 10 7 -a 887 694 3 -a 887 756 10 -a 887 295 6 -a 887 285 6 -a 887 485 4 -a 887 109 1 -a 887 376 9 -a 887 479 4 -a 887 185 9 -a 887 264 9 -a 887 810 10 -a 887 932 9 -a 887 397 4 -a 887 350 2 -a 887 281 10 -a 887 237 4 -a 887 308 3 -a 887 42 10 -a 887 358 9 -a 887 722 9 -a 887 366 10 -a 887 728 6 -a 887 770 5 -a 887 174 8 -a 887 497 9 -a 887 801 4 -a 887 87 2 -a 887 350 8 -a 887 851 5 -a 887 798 4 -a 887 359 10 -a 887 521 2 -a 887 529 1 -a 887 653 4 -a 887 805 1 -a 887 761 4 -a 887 156 5 -a 887 467 4 -a 887 945 5 -a 887 420 8 -a 887 253 7 -a 887 852 1 -a 887 816 10 -a 887 602 10 -a 888 108 4 -a 888 28 1 -a 888 909 1 -a 888 149 3 -a 888 385 3 -a 888 606 2 -a 888 515 7 -a 888 88 8 -a 888 351 9 -a 888 688 10 -a 888 585 9 -a 888 128 4 -a 888 774 1 -a 888 934 8 -a 888 978 8 -a 888 547 2 -a 888 268 5 -a 888 474 8 -a 888 51 1 -a 888 920 3 -a 888 254 2 -a 888 40 4 -a 888 656 1 -a 888 410 6 -a 888 506 5 -a 888 576 8 -a 888 829 5 -a 888 758 5 -a 888 403 7 -a 888 620 2 -a 888 336 6 -a 888 510 3 -a 888 648 10 -a 888 220 9 -a 888 659 3 -a 888 8 6 -a 888 826 10 -a 888 149 7 -a 888 96 4 -a 888 152 2 -a 888 836 7 -a 888 680 1 -a 888 279 2 -a 888 586 9 -a 888 589 3 -a 888 233 7 -a 888 108 5 -a 888 856 6 -a 888 706 8 -a 888 159 10 -a 888 751 10 -a 888 960 9 -a 888 198 3 -a 888 382 5 -a 888 345 4 -a 888 703 4 -a 888 957 10 -a 888 149 6 -a 888 437 2 -a 888 335 8 -a 888 768 3 -a 888 772 1 -a 888 844 1 -a 888 391 9 -a 888 991 4 -a 888 478 2 -a 888 399 4 -a 888 792 4 -a 888 626 8 -a 888 494 6 -a 888 944 2 -a 888 438 5 -a 888 149 5 -a 888 198 3 -a 888 737 9 -a 888 430 1 -a 888 106 3 -a 888 568 10 -a 888 112 8 -a 888 264 6 -a 888 294 1 -a 888 47 5 -a 888 461 1 -a 888 675 4 -a 888 391 9 -a 888 140 9 -a 888 607 4 -a 888 539 10 -a 888 576 9 -a 889 941 2 -a 889 282 5 -a 889 323 6 -a 889 760 1 -a 889 673 8 -a 889 289 6 -a 889 214 10 -a 889 47 6 -a 889 57 3 -a 889 839 4 -a 889 540 5 -a 889 1000 8 -a 889 252 2 -a 889 688 5 -a 889 173 2 -a 889 250 8 -a 889 400 7 -a 889 603 4 -a 889 356 7 -a 889 967 9 -a 889 714 5 -a 889 619 5 -a 889 236 4 -a 889 760 3 -a 889 56 4 -a 889 910 8 -a 889 126 6 -a 889 195 1 -a 889 492 9 -a 889 664 3 -a 889 770 7 -a 889 408 2 -a 889 945 7 -a 889 68 10 -a 889 143 10 -a 889 593 6 -a 889 356 5 -a 889 356 6 -a 889 639 4 -a 889 412 2 -a 889 171 9 -a 889 154 10 -a 889 387 3 -a 889 422 8 -a 889 841 4 -a 889 560 8 -a 889 672 7 -a 889 216 4 -a 889 138 8 -a 889 3 10 -a 889 158 5 -a 889 851 8 -a 889 621 9 -a 889 393 4 -a 889 586 2 -a 889 676 8 -a 889 278 7 -a 889 711 6 -a 889 870 4 -a 889 769 6 -a 889 350 4 -a 889 615 8 -a 889 152 3 -a 889 270 10 -a 889 682 3 -a 889 295 6 -a 889 863 9 -a 889 14 5 -a 889 650 6 -a 889 477 4 -a 889 425 7 -a 889 820 1 -a 889 631 2 -a 889 812 2 -a 889 218 9 -a 889 447 9 -a 889 347 5 -a 889 889 6 -a 889 663 1 -a 889 484 2 -a 889 891 4 -a 889 820 3 -a 889 310 6 -a 889 487 9 -a 889 189 3 -a 889 895 4 -a 889 139 2 -a 889 466 7 -a 889 581 2 -a 889 211 1 -a 889 930 7 -a 889 599 4 -a 889 362 7 -a 889 175 5 -a 889 256 1 -a 889 656 5 -a 889 13 1 -a 889 269 1 -a 889 282 10 -a 889 490 5 -a 889 694 3 -a 889 77 6 -a 889 96 5 -a 889 481 4 -a 889 294 9 -a 889 542 8 -a 889 827 6 -a 890 158 7 -a 890 180 9 -a 890 286 8 -a 890 24 6 -a 890 1000 5 -a 890 595 1 -a 890 511 8 -a 890 164 6 -a 890 465 7 -a 890 649 5 -a 890 629 5 -a 890 21 2 -a 890 632 5 -a 890 839 9 -a 890 950 10 -a 890 206 1 -a 890 177 5 -a 890 100 6 -a 890 462 5 -a 890 832 3 -a 890 113 3 -a 890 730 10 -a 890 89 9 -a 890 602 3 -a 890 399 3 -a 890 166 1 -a 890 697 8 -a 890 879 5 -a 890 459 9 -a 890 214 4 -a 890 681 10 -a 890 617 3 -a 890 394 7 -a 890 966 3 -a 890 640 5 -a 890 369 2 -a 890 536 1 -a 890 126 8 -a 890 532 10 -a 890 1000 10 -a 890 774 10 -a 890 136 1 -a 890 382 10 -a 890 975 9 -a 890 945 8 -a 890 587 8 -a 890 127 10 -a 890 21 5 -a 890 24 3 -a 890 958 5 -a 890 133 7 -a 890 754 9 -a 890 23 2 -a 890 734 3 -a 890 128 2 -a 890 188 10 -a 890 406 2 -a 890 646 6 -a 890 619 2 -a 890 663 7 -a 890 238 6 -a 890 605 4 -a 890 878 4 -a 890 356 7 -a 890 116 2 -a 890 887 9 -a 890 92 9 -a 890 753 6 -a 890 87 2 -a 890 110 8 -a 890 973 6 -a 890 8 4 -a 890 696 6 -a 890 75 5 -a 890 28 1 -a 890 720 7 -a 890 8 1 -a 890 160 8 -a 890 449 7 -a 890 30 2 -a 890 893 2 -a 890 576 3 -a 890 217 10 -a 890 274 8 -a 890 558 1 -a 890 863 5 -a 890 892 7 -a 890 197 2 -a 890 76 4 -a 890 880 10 -a 890 801 9 -a 890 953 7 -a 890 211 1 -a 890 916 5 -a 890 932 10 -a 890 74 6 -a 890 660 10 -a 890 72 10 -a 890 70 4 -a 890 769 6 -a 890 20 4 -a 890 77 7 -a 890 440 5 -a 890 94 3 -a 891 104 7 -a 891 135 4 -a 891 101 4 -a 891 263 5 -a 891 583 4 -a 891 131 6 -a 891 131 2 -a 891 135 2 -a 891 347 1 -a 891 404 6 -a 891 692 6 -a 891 185 8 -a 891 271 3 -a 891 888 6 -a 891 261 4 -a 891 126 9 -a 891 664 10 -a 891 189 6 -a 891 337 5 -a 891 556 1 -a 891 96 2 -a 891 410 9 -a 891 538 4 -a 891 755 6 -a 891 481 8 -a 891 607 10 -a 891 499 10 -a 891 500 6 -a 891 683 2 -a 891 939 1 -a 891 593 7 -a 891 786 2 -a 891 49 3 -a 891 693 7 -a 891 24 1 -a 891 632 4 -a 891 823 1 -a 891 154 5 -a 891 766 8 -a 891 146 4 -a 891 557 10 -a 891 433 6 -a 891 330 9 -a 891 828 5 -a 891 297 1 -a 891 590 5 -a 891 953 10 -a 891 960 6 -a 891 779 9 -a 891 265 5 -a 891 491 7 -a 891 874 10 -a 891 674 8 -a 891 5 5 -a 891 605 3 -a 891 130 8 -a 891 611 6 -a 891 79 7 -a 891 629 2 -a 891 270 10 -a 891 197 10 -a 891 31 3 -a 891 42 5 -a 891 890 7 -a 891 55 9 -a 891 673 8 -a 891 688 6 -a 891 208 2 -a 891 414 6 -a 891 833 3 -a 891 765 9 -a 891 846 4 -a 891 139 5 -a 891 568 2 -a 891 118 10 -a 891 728 6 -a 891 496 4 -a 891 54 3 -a 891 482 2 -a 891 761 3 -a 891 544 7 -a 891 332 10 -a 891 410 6 -a 891 548 4 -a 891 936 9 -a 891 540 9 -a 891 135 10 -a 891 144 7 -a 891 404 6 -a 891 341 1 -a 891 434 9 -a 891 24 5 -a 891 206 6 -a 891 488 7 -a 891 696 2 -a 892 893 6 -a 892 696 10 -a 892 85 4 -a 892 702 7 -a 892 436 7 -a 892 930 4 -a 892 840 7 -a 892 24 10 -a 892 543 6 -a 892 474 3 -a 892 77 1 -a 892 1 2 -a 892 210 7 -a 892 620 9 -a 892 332 2 -a 892 620 10 -a 892 144 6 -a 892 243 7 -a 892 135 4 -a 892 278 4 -a 892 232 1 -a 892 278 1 -a 892 681 9 -a 892 214 10 -a 892 618 4 -a 892 90 1 -a 892 237 3 -a 892 823 3 -a 892 578 7 -a 892 932 8 -a 892 692 3 -a 892 249 8 -a 892 369 4 -a 892 684 4 -a 892 922 3 -a 892 184 3 -a 892 662 2 -a 892 945 8 -a 892 726 8 -a 892 111 6 -a 892 726 5 -a 892 321 4 -a 892 616 8 -a 892 33 9 -a 892 940 9 -a 892 759 1 -a 892 275 1 -a 892 50 8 -a 892 12 1 -a 892 507 10 -a 892 327 4 -a 892 692 6 -a 892 720 2 -a 892 945 6 -a 892 782 8 -a 892 957 7 -a 892 743 3 -a 892 335 9 -a 892 864 2 -a 892 410 8 -a 892 583 8 -a 892 856 1 -a 892 778 7 -a 892 242 8 -a 892 753 7 -a 892 961 6 -a 892 903 3 -a 892 673 7 -a 892 663 6 -a 892 669 6 -a 892 364 9 -a 892 309 8 -a 892 260 4 -a 892 397 7 -a 892 224 4 -a 892 671 6 -a 892 273 6 -a 892 6 9 -a 892 153 1 -a 892 600 6 -a 892 698 1 -a 892 873 2 -a 892 520 5 -a 892 455 7 -a 892 805 1 -a 892 238 5 -a 892 789 6 -a 892 644 10 -a 892 648 10 -a 892 347 2 -a 892 475 8 -a 893 401 3 -a 893 588 10 -a 893 203 1 -a 893 338 9 -a 893 466 6 -a 893 875 7 -a 893 1000 1 -a 893 454 2 -a 893 519 5 -a 893 339 1 -a 893 763 1 -a 893 779 3 -a 893 735 9 -a 893 986 10 -a 893 773 9 -a 893 382 9 -a 893 235 1 -a 893 778 8 -a 893 534 3 -a 893 834 4 -a 893 451 2 -a 893 382 3 -a 893 329 7 -a 893 905 3 -a 893 162 2 -a 893 566 5 -a 893 669 3 -a 893 806 3 -a 893 189 4 -a 893 256 7 -a 893 590 4 -a 893 578 6 -a 893 459 8 -a 893 927 3 -a 893 19 7 -a 893 309 5 -a 893 902 1 -a 893 473 9 -a 893 828 9 -a 893 216 3 -a 893 211 9 -a 893 582 6 -a 893 951 1 -a 893 172 8 -a 893 330 7 -a 893 308 8 -a 893 406 10 -a 893 83 8 -a 893 841 4 -a 893 215 5 -a 893 534 3 -a 893 199 4 -a 893 543 5 -a 893 414 3 -a 893 360 2 -a 893 85 9 -a 893 59 1 -a 893 141 1 -a 893 273 9 -a 893 49 9 -a 893 397 1 -a 893 862 1 -a 893 627 1 -a 893 855 3 -a 893 764 1 -a 893 645 3 -a 893 139 8 -a 893 641 4 -a 893 93 4 -a 893 966 2 -a 893 857 6 -a 893 303 2 -a 893 523 4 -a 893 783 3 -a 893 475 3 -a 893 852 3 -a 893 66 3 -a 893 880 5 -a 893 935 6 -a 893 906 6 -a 893 71 8 -a 893 444 6 -a 893 80 8 -a 893 613 10 -a 893 857 4 -a 893 440 1 -a 893 697 2 -a 893 915 2 -a 893 580 8 -a 893 970 7 -a 893 964 8 -a 893 976 8 -a 893 807 7 -a 893 566 2 -a 893 806 8 -a 893 547 1 -a 893 186 10 -a 893 945 3 -a 893 163 6 -a 893 279 8 -a 893 886 10 -a 893 581 3 -a 893 385 8 -a 893 777 10 -a 894 31 7 -a 894 212 8 -a 894 842 4 -a 894 911 8 -a 894 122 9 -a 894 724 5 -a 894 981 3 -a 894 565 1 -a 894 803 7 -a 894 569 1 -a 894 398 4 -a 894 218 1 -a 894 242 5 -a 894 288 9 -a 894 798 7 -a 894 187 4 -a 894 227 2 -a 894 749 6 -a 894 993 8 -a 894 792 8 -a 894 531 6 -a 894 515 6 -a 894 978 3 -a 894 451 5 -a 894 678 8 -a 894 232 4 -a 894 312 5 -a 894 672 3 -a 894 812 8 -a 894 696 3 -a 894 425 9 -a 894 843 6 -a 894 908 1 -a 894 242 4 -a 894 729 9 -a 894 5 3 -a 894 965 7 -a 894 685 8 -a 894 570 2 -a 894 744 4 -a 894 229 6 -a 894 967 3 -a 894 961 9 -a 894 470 6 -a 894 230 7 -a 894 734 9 -a 894 656 4 -a 894 457 9 -a 894 459 8 -a 894 625 1 -a 894 224 4 -a 894 989 3 -a 894 115 4 -a 894 177 3 -a 894 415 8 -a 894 792 7 -a 894 408 10 -a 894 726 3 -a 894 440 1 -a 894 196 8 -a 894 398 9 -a 894 864 4 -a 894 14 8 -a 894 281 8 -a 894 81 7 -a 894 742 6 -a 894 285 10 -a 894 22 9 -a 894 402 2 -a 894 854 9 -a 894 765 2 -a 894 630 4 -a 894 796 5 -a 894 701 10 -a 894 76 9 -a 894 2 7 -a 894 411 9 -a 894 731 7 -a 894 458 3 -a 894 869 6 -a 894 331 6 -a 894 681 4 -a 894 833 6 -a 894 446 7 -a 894 858 10 -a 894 223 8 -a 894 213 1 -a 894 241 8 -a 895 948 9 -a 895 652 3 -a 895 436 6 -a 895 321 3 -a 895 491 8 -a 895 449 9 -a 895 601 3 -a 895 572 2 -a 895 166 1 -a 895 886 9 -a 895 593 4 -a 895 567 7 -a 895 715 7 -a 895 333 10 -a 895 173 3 -a 895 487 3 -a 895 9 9 -a 895 248 7 -a 895 488 6 -a 895 419 5 -a 895 978 7 -a 895 945 5 -a 895 263 4 -a 895 285 7 -a 895 601 6 -a 895 71 7 -a 895 730 6 -a 895 434 9 -a 895 293 2 -a 895 942 5 -a 895 675 9 -a 895 217 3 -a 895 570 4 -a 895 86 6 -a 895 537 7 -a 895 36 10 -a 895 535 3 -a 895 114 3 -a 895 607 8 -a 895 700 10 -a 895 999 9 -a 895 175 6 -a 895 243 5 -a 895 689 7 -a 895 507 3 -a 895 415 7 -a 895 151 2 -a 895 516 5 -a 895 662 9 -a 895 638 9 -a 895 934 1 -a 895 615 2 -a 895 558 6 -a 895 173 9 -a 895 899 5 -a 895 135 8 -a 895 243 7 -a 895 604 10 -a 895 568 8 -a 895 536 4 -a 895 522 6 -a 895 218 1 -a 895 752 6 -a 895 67 1 -a 895 304 2 -a 895 264 10 -a 895 102 7 -a 895 838 7 -a 895 377 9 -a 895 709 3 -a 895 513 6 -a 895 351 7 -a 895 883 10 -a 895 755 10 -a 895 16 4 -a 895 366 3 -a 895 145 9 -a 895 166 2 -a 895 881 7 -a 895 806 5 -a 895 804 1 -a 895 790 1 -a 895 397 1 -a 895 337 1 -a 895 962 3 -a 895 271 7 -a 895 471 1 -a 895 181 1 -a 895 875 6 -a 895 15 9 -a 895 716 7 -a 895 372 4 -a 895 232 2 -a 895 443 5 -a 895 438 2 -a 895 535 5 -a 895 706 3 -a 895 539 1 -a 896 348 2 -a 896 59 3 -a 896 223 6 -a 896 861 3 -a 896 409 6 -a 896 82 3 -a 896 591 8 -a 896 424 8 -a 896 447 9 -a 896 736 6 -a 896 590 8 -a 896 303 7 -a 896 517 6 -a 896 369 1 -a 896 68 1 -a 896 913 2 -a 896 705 6 -a 896 6 7 -a 896 160 6 -a 896 152 7 -a 896 186 10 -a 896 10 6 -a 896 166 8 -a 896 901 4 -a 896 381 1 -a 896 397 1 -a 896 319 8 -a 896 818 8 -a 896 932 8 -a 896 332 3 -a 896 255 10 -a 896 58 3 -a 896 555 5 -a 896 91 1 -a 896 467 8 -a 896 636 10 -a 896 682 2 -a 896 890 5 -a 896 58 8 -a 896 393 6 -a 896 455 2 -a 896 360 8 -a 896 909 6 -a 896 823 1 -a 896 427 8 -a 896 798 6 -a 896 504 9 -a 896 432 2 -a 896 957 5 -a 896 655 2 -a 896 617 9 -a 896 966 5 -a 896 820 4 -a 896 493 5 -a 896 322 8 -a 896 192 9 -a 896 811 9 -a 896 115 3 -a 896 99 5 -a 896 811 8 -a 896 446 4 -a 896 354 5 -a 896 868 7 -a 896 1000 1 -a 896 444 3 -a 896 310 2 -a 896 611 1 -a 896 101 5 -a 896 176 3 -a 896 668 9 -a 896 493 2 -a 896 630 8 -a 896 3 10 -a 896 378 10 -a 896 429 6 -a 896 430 8 -a 896 151 6 -a 896 932 1 -a 896 861 3 -a 896 83 5 -a 896 562 7 -a 896 454 6 -a 896 24 9 -a 896 357 6 -a 896 946 5 -a 896 345 2 -a 896 548 6 -a 896 733 6 -a 896 459 9 -a 896 647 10 -a 896 519 3 -a 897 904 7 -a 897 1000 3 -a 897 362 4 -a 897 880 8 -a 897 419 5 -a 897 672 10 -a 897 466 10 -a 897 520 2 -a 897 847 8 -a 897 110 7 -a 897 452 10 -a 897 112 9 -a 897 365 2 -a 897 880 8 -a 897 541 10 -a 897 515 4 -a 897 787 3 -a 897 378 6 -a 897 597 2 -a 897 324 5 -a 897 831 4 -a 897 620 5 -a 897 680 1 -a 897 752 10 -a 897 964 9 -a 897 204 6 -a 897 460 3 -a 897 398 5 -a 897 850 4 -a 897 978 2 -a 897 278 6 -a 897 825 7 -a 897 316 6 -a 897 133 4 -a 897 219 8 -a 897 987 2 -a 897 598 1 -a 897 738 3 -a 897 809 6 -a 897 707 7 -a 897 726 9 -a 897 236 3 -a 897 819 2 -a 897 66 9 -a 897 92 2 -a 897 335 2 -a 897 581 3 -a 897 878 10 -a 897 712 8 -a 897 153 3 -a 897 178 6 -a 897 518 10 -a 897 773 2 -a 897 857 3 -a 897 246 3 -a 897 712 3 -a 897 36 5 -a 897 705 8 -a 897 86 2 -a 897 885 10 -a 897 659 7 -a 897 363 10 -a 897 685 6 -a 897 974 5 -a 897 495 5 -a 897 904 3 -a 897 936 7 -a 897 68 10 -a 897 617 5 -a 897 720 6 -a 897 775 10 -a 897 318 7 -a 897 955 8 -a 897 569 4 -a 897 384 9 -a 897 22 8 -a 897 903 4 -a 897 964 10 -a 897 900 4 -a 897 591 2 -a 897 92 6 -a 897 53 3 -a 897 84 1 -a 897 864 3 -a 897 909 5 -a 897 329 10 -a 897 552 9 -a 897 945 2 -a 897 10 1 -a 897 637 4 -a 897 805 8 -a 897 668 5 -a 897 999 8 -a 897 466 8 -a 897 617 7 -a 897 469 2 -a 897 345 6 -a 897 528 2 -a 897 536 1 -a 897 961 9 -a 897 223 6 -a 897 286 2 -a 897 255 8 -a 897 153 2 -a 897 854 9 -a 898 638 9 -a 898 175 9 -a 898 733 5 -a 898 577 10 -a 898 50 9 -a 898 299 8 -a 898 668 5 -a 898 102 4 -a 898 382 4 -a 898 508 8 -a 898 711 3 -a 898 35 4 -a 898 930 6 -a 898 720 4 -a 898 671 1 -a 898 711 2 -a 898 363 2 -a 898 645 2 -a 898 152 1 -a 898 979 9 -a 898 89 6 -a 898 496 4 -a 898 482 5 -a 898 624 4 -a 898 432 4 -a 898 704 7 -a 898 910 6 -a 898 686 1 -a 898 856 2 -a 898 739 5 -a 898 299 3 -a 898 6 8 -a 898 447 3 -a 898 875 8 -a 898 55 2 -a 898 745 7 -a 898 519 3 -a 898 156 9 -a 898 103 4 -a 898 2 6 -a 898 142 6 -a 898 813 3 -a 898 36 3 -a 898 47 10 -a 898 508 7 -a 898 706 4 -a 898 757 3 -a 898 870 5 -a 898 326 7 -a 898 908 1 -a 898 824 9 -a 898 414 1 -a 898 379 4 -a 898 281 1 -a 898 13 3 -a 898 811 9 -a 898 984 6 -a 898 922 5 -a 898 472 1 -a 898 815 9 -a 898 637 8 -a 898 771 3 -a 898 821 2 -a 898 59 6 -a 898 621 10 -a 898 875 2 -a 898 804 4 -a 898 115 2 -a 898 7 4 -a 898 906 6 -a 898 116 10 -a 898 148 10 -a 898 694 6 -a 898 151 8 -a 898 194 9 -a 898 177 2 -a 898 856 9 -a 898 951 1 -a 898 22 2 -a 898 157 8 -a 898 834 5 -a 898 845 2 -a 898 570 1 -a 898 189 8 -a 898 101 2 -a 899 583 1 -a 899 999 6 -a 899 60 8 -a 899 480 6 -a 899 446 1 -a 899 874 6 -a 899 92 9 -a 899 192 9 -a 899 670 7 -a 899 151 1 -a 899 813 9 -a 899 521 9 -a 899 954 9 -a 899 927 3 -a 899 527 4 -a 899 835 10 -a 899 19 10 -a 899 674 10 -a 899 504 10 -a 899 169 4 -a 899 867 10 -a 899 680 10 -a 899 1 5 -a 899 793 6 -a 899 701 9 -a 899 157 4 -a 899 603 1 -a 899 521 10 -a 899 727 3 -a 899 791 9 -a 899 621 2 -a 899 285 5 -a 899 765 3 -a 899 680 5 -a 899 764 1 -a 899 186 3 -a 899 529 7 -a 899 856 10 -a 899 378 1 -a 899 175 3 -a 899 166 3 -a 899 695 10 -a 899 935 1 -a 899 68 3 -a 899 197 5 -a 899 745 1 -a 899 86 10 -a 899 870 10 -a 899 224 8 -a 899 255 10 -a 899 712 9 -a 899 903 6 -a 899 255 3 -a 899 481 4 -a 899 579 1 -a 899 411 8 -a 899 59 1 -a 899 75 3 -a 899 113 10 -a 899 849 3 -a 899 695 10 -a 899 397 7 -a 899 589 1 -a 899 350 1 -a 899 137 10 -a 899 774 9 -a 899 878 1 -a 899 992 2 -a 899 127 7 -a 899 28 6 -a 899 973 5 -a 899 292 1 -a 899 722 4 -a 899 883 8 -a 899 360 4 -a 899 918 4 -a 899 603 10 -a 899 445 3 -a 899 763 4 -a 899 826 10 -a 899 699 10 -a 899 451 10 -a 899 704 10 -a 899 953 9 -a 899 931 3 -a 899 258 1 -a 899 340 9 -a 899 989 4 -a 899 332 2 -a 899 452 9 -a 899 813 6 -a 899 2 9 -a 899 849 3 -a 899 377 6 -a 899 351 5 -a 899 985 8 -a 900 126 3 -a 900 204 10 -a 900 952 5 -a 900 253 7 -a 900 232 7 -a 900 900 7 -a 900 544 1 -a 900 953 10 -a 900 758 10 -a 900 903 9 -a 900 847 5 -a 900 336 6 -a 900 324 8 -a 900 585 1 -a 900 137 3 -a 900 11 6 -a 900 840 1 -a 900 951 4 -a 900 941 2 -a 900 73 1 -a 900 266 5 -a 900 905 10 -a 900 404 2 -a 900 717 7 -a 900 693 8 -a 900 405 3 -a 900 541 6 -a 900 45 4 -a 900 755 7 -a 900 501 8 -a 900 171 3 -a 900 958 8 -a 900 428 7 -a 900 423 10 -a 900 165 8 -a 900 303 10 -a 900 966 5 -a 900 94 5 -a 900 36 4 -a 900 845 7 -a 900 940 9 -a 900 371 2 -a 900 144 6 -a 900 500 5 -a 900 507 2 -a 900 141 1 -a 900 511 9 -a 900 322 1 -a 900 67 3 -a 900 427 8 -a 900 394 10 -a 900 332 6 -a 900 308 3 -a 900 797 5 -a 900 25 9 -a 900 1000 2 -a 900 177 5 -a 900 565 5 -a 900 21 10 -a 900 931 7 -a 900 42 1 -a 900 191 8 -a 900 865 2 -a 900 469 10 -a 900 613 2 -a 900 5 4 -a 900 772 3 -a 900 554 4 -a 900 98 8 -a 900 807 2 -a 900 374 1 -a 900 13 3 -a 900 154 6 -a 900 517 2 -a 900 513 4 -a 900 660 2 -a 900 658 1 -a 900 982 4 -a 900 724 9 -a 900 425 4 -a 900 351 7 -a 900 32 6 -a 900 732 5 -a 900 124 1 -a 900 56 2 -a 900 708 3 -a 900 300 2 -a 900 620 4 -a 900 728 6 -a 900 207 9 -a 900 661 6 -a 900 918 7 -a 900 47 9 -a 900 106 5 -a 901 506 9 -a 901 51 4 -a 901 877 2 -a 901 35 7 -a 901 149 9 -a 901 659 3 -a 901 409 10 -a 901 161 4 -a 901 812 7 -a 901 925 5 -a 901 673 2 -a 901 448 10 -a 901 558 3 -a 901 671 5 -a 901 405 2 -a 901 258 4 -a 901 72 3 -a 901 755 4 -a 901 289 6 -a 901 803 5 -a 901 878 7 -a 901 344 1 -a 901 486 5 -a 901 154 1 -a 901 963 9 -a 901 189 8 -a 901 360 2 -a 901 600 1 -a 901 82 5 -a 901 406 9 -a 901 705 8 -a 901 587 9 -a 901 456 9 -a 901 557 8 -a 901 622 6 -a 901 604 8 -a 901 191 1 -a 901 6 6 -a 901 765 3 -a 901 930 1 -a 901 413 1 -a 901 426 1 -a 901 464 4 -a 901 60 10 -a 901 830 9 -a 901 721 2 -a 901 131 1 -a 901 560 5 -a 901 933 9 -a 901 414 4 -a 901 328 2 -a 901 395 9 -a 901 567 9 -a 901 266 5 -a 901 583 5 -a 901 926 3 -a 901 865 2 -a 901 665 5 -a 901 307 2 -a 901 545 3 -a 901 227 3 -a 901 762 6 -a 901 77 8 -a 901 848 1 -a 901 342 5 -a 901 268 4 -a 901 853 7 -a 901 82 4 -a 901 246 4 -a 901 759 3 -a 901 494 1 -a 901 671 9 -a 901 198 9 -a 901 553 8 -a 901 476 10 -a 901 918 3 -a 901 683 5 -a 901 11 6 -a 901 902 8 -a 901 592 2 -a 901 424 5 -a 901 205 8 -a 901 986 4 -a 901 990 6 -a 901 470 2 -a 901 544 6 -a 901 891 6 -a 901 311 6 -a 901 184 5 -a 901 173 2 -a 901 855 10 -a 901 411 2 -a 901 935 9 -a 901 932 8 -a 901 234 2 -a 901 252 10 -a 901 175 8 -a 901 63 9 -a 901 333 8 -a 901 420 10 -a 901 821 1 -a 901 826 2 -a 901 66 7 -a 901 355 2 -a 901 541 9 -a 901 911 10 -a 902 13 8 -a 902 551 10 -a 902 788 6 -a 902 604 5 -a 902 975 10 -a 902 992 6 -a 902 565 3 -a 902 940 10 -a 902 437 9 -a 902 85 3 -a 902 807 1 -a 902 747 5 -a 902 268 8 -a 902 979 7 -a 902 578 5 -a 902 678 9 -a 902 889 2 -a 902 485 3 -a 902 912 8 -a 902 116 9 -a 902 659 10 -a 902 974 1 -a 902 448 8 -a 902 54 6 -a 902 770 7 -a 902 250 1 -a 902 119 2 -a 902 763 1 -a 902 604 10 -a 902 659 5 -a 902 649 5 -a 902 616 2 -a 902 185 3 -a 902 412 8 -a 902 196 3 -a 902 135 9 -a 902 379 1 -a 902 760 10 -a 902 51 8 -a 902 815 2 -a 902 844 5 -a 902 857 9 -a 902 538 9 -a 902 88 4 -a 902 811 9 -a 902 91 5 -a 902 765 10 -a 902 676 10 -a 902 575 4 -a 902 652 3 -a 902 791 3 -a 902 209 2 -a 902 601 10 -a 902 215 3 -a 902 262 6 -a 902 346 3 -a 902 464 5 -a 902 380 3 -a 902 84 8 -a 902 43 5 -a 902 14 9 -a 902 732 2 -a 902 658 4 -a 902 198 1 -a 902 119 6 -a 902 853 1 -a 902 333 2 -a 902 497 8 -a 902 589 4 -a 902 383 3 -a 902 288 8 -a 902 408 8 -a 902 215 4 -a 902 825 7 -a 902 495 8 -a 902 1 6 -a 902 915 4 -a 902 236 9 -a 902 676 6 -a 902 465 8 -a 902 887 8 -a 902 443 7 -a 902 673 7 -a 902 464 1 -a 902 657 3 -a 902 934 10 -a 902 809 5 -a 902 96 7 -a 902 289 3 -a 902 893 7 -a 902 138 7 -a 902 302 2 -a 902 600 4 -a 902 795 8 -a 903 499 3 -a 903 719 2 -a 903 624 5 -a 903 831 5 -a 903 191 4 -a 903 188 10 -a 903 189 7 -a 903 478 2 -a 903 595 2 -a 903 403 8 -a 903 278 4 -a 903 66 2 -a 903 404 10 -a 903 168 8 -a 903 301 8 -a 903 55 4 -a 903 632 3 -a 903 163 5 -a 903 497 1 -a 903 280 3 -a 903 626 1 -a 903 129 4 -a 903 189 6 -a 903 411 7 -a 903 224 9 -a 903 477 2 -a 903 279 8 -a 903 361 3 -a 903 778 9 -a 903 878 1 -a 903 132 1 -a 903 253 1 -a 903 572 7 -a 903 755 3 -a 903 59 6 -a 903 763 1 -a 903 942 1 -a 903 248 3 -a 903 216 6 -a 903 512 6 -a 903 650 8 -a 903 494 4 -a 903 577 6 -a 903 29 9 -a 903 661 6 -a 903 877 6 -a 903 84 6 -a 903 269 6 -a 903 16 6 -a 903 580 6 -a 903 548 5 -a 903 641 5 -a 903 709 7 -a 903 737 2 -a 903 27 7 -a 903 932 5 -a 903 189 6 -a 903 305 2 -a 903 269 7 -a 903 967 7 -a 903 159 2 -a 903 400 8 -a 903 195 5 -a 903 730 4 -a 903 130 4 -a 903 253 4 -a 903 468 10 -a 903 47 3 -a 903 500 2 -a 903 684 7 -a 903 558 4 -a 903 126 3 -a 903 153 8 -a 903 111 10 -a 903 154 1 -a 903 813 10 -a 903 987 4 -a 903 237 5 -a 903 57 6 -a 903 817 9 -a 903 605 6 -a 903 619 3 -a 903 501 10 -a 903 317 1 -a 903 645 5 -a 903 408 10 -a 903 505 7 -a 903 950 7 -a 903 676 5 -a 903 447 4 -a 903 84 2 -a 903 51 8 -a 903 641 7 -a 903 813 5 -a 903 180 6 -a 903 894 5 -a 903 257 9 -a 903 226 4 -a 903 369 7 -a 903 940 9 -a 903 784 10 -a 903 494 3 -a 904 68 3 -a 904 894 1 -a 904 648 10 -a 904 880 6 -a 904 856 6 -a 904 884 5 -a 904 937 10 -a 904 834 10 -a 904 676 7 -a 904 517 1 -a 904 428 3 -a 904 152 4 -a 904 833 8 -a 904 48 10 -a 904 560 9 -a 904 313 7 -a 904 997 8 -a 904 211 1 -a 904 760 10 -a 904 56 9 -a 904 262 7 -a 904 376 8 -a 904 869 3 -a 904 441 9 -a 904 245 10 -a 904 101 9 -a 904 667 10 -a 904 614 3 -a 904 16 3 -a 904 426 7 -a 904 83 9 -a 904 83 9 -a 904 295 8 -a 904 730 7 -a 904 962 1 -a 904 126 6 -a 904 590 9 -a 904 874 7 -a 904 959 6 -a 904 241 6 -a 904 366 5 -a 904 362 1 -a 904 393 5 -a 904 174 5 -a 904 410 6 -a 904 952 5 -a 904 487 8 -a 904 382 2 -a 904 138 2 -a 904 222 1 -a 904 438 4 -a 904 399 7 -a 904 597 5 -a 904 282 5 -a 904 840 3 -a 904 842 8 -a 904 382 2 -a 904 482 6 -a 904 431 10 -a 904 397 6 -a 904 907 2 -a 904 513 3 -a 904 479 8 -a 904 177 9 -a 904 219 2 -a 904 416 3 -a 904 302 8 -a 904 808 1 -a 904 266 3 -a 904 237 9 -a 904 24 4 -a 904 631 3 -a 904 598 8 -a 904 416 10 -a 904 805 5 -a 904 343 2 -a 904 267 9 -a 904 365 5 -a 904 481 4 -a 904 488 4 -a 904 802 6 -a 904 879 4 -a 904 60 8 -a 904 59 7 -a 904 694 4 -a 904 901 2 -a 904 440 3 -a 904 151 3 -a 904 307 1 -a 904 836 6 -a 904 33 3 -a 904 820 8 -a 904 290 7 -a 904 209 2 -a 904 14 2 -a 904 705 3 -a 904 511 4 -a 904 821 1 -a 904 970 4 -a 904 747 8 -a 904 844 4 -a 905 577 2 -a 905 320 3 -a 905 236 5 -a 905 357 8 -a 905 303 6 -a 905 578 9 -a 905 623 9 -a 905 667 1 -a 905 34 9 -a 905 86 4 -a 905 444 1 -a 905 913 3 -a 905 145 5 -a 905 502 8 -a 905 582 3 -a 905 22 6 -a 905 941 2 -a 905 733 1 -a 905 328 3 -a 905 752 5 -a 905 765 7 -a 905 123 2 -a 905 17 4 -a 905 974 8 -a 905 136 2 -a 905 721 7 -a 905 460 2 -a 905 956 3 -a 905 667 10 -a 905 182 10 -a 905 776 3 -a 905 219 1 -a 905 501 8 -a 905 575 9 -a 905 803 2 -a 905 564 8 -a 905 173 8 -a 905 445 10 -a 905 598 1 -a 905 258 5 -a 905 888 1 -a 905 486 2 -a 905 402 3 -a 905 365 10 -a 905 43 2 -a 905 423 9 -a 905 281 9 -a 905 775 3 -a 905 751 2 -a 905 8 2 -a 905 516 7 -a 905 873 6 -a 905 24 3 -a 905 465 4 -a 905 745 5 -a 905 924 9 -a 905 940 9 -a 905 387 10 -a 905 81 10 -a 905 691 3 -a 905 605 9 -a 905 581 1 -a 905 677 6 -a 905 155 3 -a 905 360 6 -a 905 217 7 -a 905 327 3 -a 905 804 9 -a 905 814 4 -a 905 584 8 -a 905 668 6 -a 905 275 6 -a 905 985 5 -a 905 8 1 -a 905 317 10 -a 905 384 10 -a 905 289 9 -a 905 68 4 -a 905 110 7 -a 905 296 1 -a 905 583 3 -a 905 982 5 -a 905 320 10 -a 905 23 1 -a 905 966 5 -a 905 40 9 -a 905 946 2 -a 905 882 9 -a 905 426 2 -a 905 2 1 -a 905 548 9 -a 905 6 8 -a 905 582 4 -a 906 201 1 -a 906 160 6 -a 906 941 1 -a 906 417 6 -a 906 486 10 -a 906 721 9 -a 906 206 3 -a 906 45 7 -a 906 364 4 -a 906 480 10 -a 906 5 6 -a 906 371 5 -a 906 796 8 -a 906 388 8 -a 906 659 9 -a 906 863 7 -a 906 497 1 -a 906 955 6 -a 906 421 5 -a 906 455 1 -a 906 250 5 -a 906 443 10 -a 906 396 10 -a 906 289 7 -a 906 364 7 -a 906 253 4 -a 906 714 6 -a 906 365 10 -a 906 801 1 -a 906 719 1 -a 906 947 4 -a 906 878 10 -a 906 863 1 -a 906 393 8 -a 906 339 7 -a 906 559 6 -a 906 598 5 -a 906 383 5 -a 906 922 6 -a 906 53 9 -a 906 387 6 -a 906 269 5 -a 906 848 2 -a 906 775 1 -a 906 927 8 -a 906 687 6 -a 906 247 10 -a 906 857 4 -a 906 83 10 -a 906 701 7 -a 906 82 4 -a 906 526 6 -a 906 73 7 -a 906 370 3 -a 906 889 6 -a 906 325 9 -a 906 59 5 -a 906 230 9 -a 906 101 7 -a 906 777 2 -a 906 152 6 -a 906 77 10 -a 906 630 4 -a 906 469 10 -a 906 968 3 -a 906 549 2 -a 906 42 8 -a 906 326 6 -a 906 446 2 -a 906 94 9 -a 906 713 6 -a 906 714 2 -a 906 942 4 -a 906 463 9 -a 906 617 10 -a 906 604 8 -a 906 709 5 -a 906 449 8 -a 906 686 9 -a 906 386 3 -a 906 531 1 -a 906 187 10 -a 906 458 3 -a 906 900 4 -a 906 52 10 -a 906 782 9 -a 906 959 10 -a 906 281 8 -a 906 883 9 -a 906 711 6 -a 906 432 4 -a 906 959 9 -a 906 317 5 -a 906 421 1 -a 906 404 7 -a 906 260 5 -a 906 969 6 -a 906 445 7 -a 906 586 4 -a 906 391 4 -a 907 539 7 -a 907 274 6 -a 907 80 10 -a 907 456 3 -a 907 736 4 -a 907 696 9 -a 907 35 10 -a 907 420 9 -a 907 121 9 -a 907 720 1 -a 907 805 5 -a 907 651 1 -a 907 907 6 -a 907 238 5 -a 907 526 1 -a 907 958 4 -a 907 460 5 -a 907 214 9 -a 907 878 1 -a 907 147 3 -a 907 645 6 -a 907 812 4 -a 907 463 1 -a 907 41 6 -a 907 191 7 -a 907 722 7 -a 907 636 2 -a 907 283 1 -a 907 376 10 -a 907 150 3 -a 907 556 2 -a 907 455 4 -a 907 605 3 -a 907 267 8 -a 907 127 4 -a 907 639 5 -a 907 687 4 -a 907 247 8 -a 907 334 7 -a 907 467 9 -a 907 897 7 -a 907 216 5 -a 907 705 10 -a 907 398 1 -a 907 149 2 -a 907 700 2 -a 907 858 6 -a 907 362 6 -a 907 553 4 -a 907 340 5 -a 907 442 8 -a 907 23 6 -a 907 531 2 -a 907 139 1 -a 907 8 5 -a 907 142 9 -a 907 422 4 -a 907 383 9 -a 907 291 5 -a 907 977 8 -a 907 837 1 -a 907 895 10 -a 907 220 4 -a 907 963 5 -a 907 509 6 -a 907 906 8 -a 907 185 8 -a 907 842 7 -a 907 348 10 -a 907 57 1 -a 907 34 4 -a 907 28 8 -a 907 455 10 -a 907 182 9 -a 907 727 1 -a 907 288 3 -a 907 544 7 -a 907 255 5 -a 907 267 10 -a 907 525 6 -a 907 595 9 -a 907 708 5 -a 907 547 3 -a 907 101 8 -a 907 846 10 -a 907 554 7 -a 907 242 4 -a 907 243 5 -a 907 936 2 -a 908 532 8 -a 908 196 9 -a 908 749 8 -a 908 402 2 -a 908 415 7 -a 908 687 5 -a 908 910 10 -a 908 296 6 -a 908 872 3 -a 908 727 10 -a 908 643 8 -a 908 928 9 -a 908 760 2 -a 908 671 10 -a 908 358 2 -a 908 942 9 -a 908 373 6 -a 908 645 2 -a 908 461 10 -a 908 628 7 -a 908 911 6 -a 908 985 8 -a 908 198 6 -a 908 594 9 -a 908 508 9 -a 908 298 2 -a 908 416 1 -a 908 37 8 -a 908 539 8 -a 908 658 10 -a 908 973 9 -a 908 46 5 -a 908 853 6 -a 908 697 3 -a 908 447 7 -a 908 243 2 -a 908 359 7 -a 908 332 2 -a 908 538 5 -a 908 206 10 -a 908 34 2 -a 908 157 1 -a 908 110 4 -a 908 794 10 -a 908 827 8 -a 908 467 7 -a 908 711 6 -a 908 175 7 -a 908 88 2 -a 908 147 5 -a 908 802 1 -a 908 998 8 -a 908 107 6 -a 908 999 7 -a 908 568 1 -a 908 614 9 -a 908 272 2 -a 908 983 2 -a 908 651 1 -a 908 810 1 -a 908 616 3 -a 908 599 4 -a 908 855 3 -a 908 445 2 -a 908 271 6 -a 908 277 1 -a 908 687 8 -a 908 629 7 -a 908 608 5 -a 908 201 10 -a 908 835 6 -a 908 642 7 -a 908 357 6 -a 908 944 3 -a 908 411 4 -a 908 159 4 -a 908 386 1 -a 908 97 5 -a 908 333 9 -a 908 473 10 -a 908 243 6 -a 908 111 8 -a 908 447 6 -a 908 349 8 -a 908 85 10 -a 908 963 3 -a 908 357 8 -a 908 972 4 -a 908 589 9 -a 908 142 3 -a 908 563 2 -a 908 163 8 -a 908 997 6 -a 908 433 4 -a 908 249 2 -a 908 670 1 -a 908 37 7 -a 908 857 1 -a 908 870 8 -a 909 871 10 -a 909 474 1 -a 909 202 5 -a 909 790 6 -a 909 884 6 -a 909 360 1 -a 909 152 8 -a 909 980 9 -a 909 692 10 -a 909 624 6 -a 909 198 6 -a 909 802 7 -a 909 46 8 -a 909 546 6 -a 909 887 5 -a 909 35 6 -a 909 484 5 -a 909 219 4 -a 909 48 9 -a 909 360 5 -a 909 545 9 -a 909 210 10 -a 909 332 4 -a 909 527 1 -a 909 642 2 -a 909 581 7 -a 909 172 2 -a 909 679 2 -a 909 413 4 -a 909 17 9 -a 909 525 7 -a 909 886 2 -a 909 218 7 -a 909 291 2 -a 909 745 2 -a 909 577 5 -a 909 442 7 -a 909 700 4 -a 909 245 2 -a 909 41 3 -a 909 897 5 -a 909 22 4 -a 909 87 7 -a 909 418 10 -a 909 908 7 -a 909 121 8 -a 909 902 4 -a 909 102 8 -a 909 103 9 -a 909 949 7 -a 909 462 1 -a 909 647 9 -a 909 135 7 -a 909 793 1 -a 909 149 8 -a 909 776 8 -a 909 349 1 -a 909 321 6 -a 909 430 4 -a 909 761 5 -a 909 337 2 -a 909 955 10 -a 909 622 8 -a 909 555 3 -a 909 221 5 -a 909 342 10 -a 909 107 7 -a 909 662 9 -a 909 17 3 -a 909 351 5 -a 909 702 10 -a 909 913 3 -a 909 373 7 -a 909 788 6 -a 909 307 7 -a 909 256 7 -a 909 909 5 -a 909 184 5 -a 909 358 1 -a 909 108 8 -a 909 819 3 -a 909 633 2 -a 909 242 2 -a 909 587 10 -a 909 781 4 -a 909 936 6 -a 909 77 3 -a 909 423 10 -a 909 672 3 -a 909 414 3 -a 909 353 5 -a 909 270 2 -a 909 968 10 -a 909 573 1 -a 909 611 1 -a 909 50 6 -a 909 210 8 -a 909 628 10 -a 909 401 5 -a 909 912 5 -a 910 516 9 -a 910 773 5 -a 910 675 1 -a 910 822 6 -a 910 4 2 -a 910 559 8 -a 910 361 9 -a 910 545 7 -a 910 89 10 -a 910 155 2 -a 910 153 5 -a 910 330 7 -a 910 742 7 -a 910 934 8 -a 910 323 1 -a 910 653 9 -a 910 746 4 -a 910 300 2 -a 910 399 9 -a 910 74 10 -a 910 569 9 -a 910 342 7 -a 910 647 3 -a 910 156 4 -a 910 392 8 -a 910 856 5 -a 910 783 5 -a 910 792 2 -a 910 743 6 -a 910 274 3 -a 910 540 10 -a 910 394 1 -a 910 72 8 -a 910 543 9 -a 910 952 7 -a 910 52 1 -a 910 904 9 -a 910 473 4 -a 910 140 1 -a 910 34 8 -a 910 625 8 -a 910 470 4 -a 910 775 7 -a 910 534 9 -a 910 792 9 -a 910 403 2 -a 910 520 4 -a 910 513 3 -a 910 703 3 -a 910 918 7 -a 910 587 3 -a 910 247 8 -a 910 236 10 -a 910 209 5 -a 910 402 8 -a 910 627 5 -a 910 40 7 -a 910 160 7 -a 910 394 8 -a 910 783 6 -a 910 434 8 -a 910 933 5 -a 910 152 4 -a 910 505 1 -a 910 451 9 -a 910 79 10 -a 910 556 9 -a 910 330 1 -a 910 551 6 -a 910 696 4 -a 910 364 8 -a 910 152 10 -a 910 141 10 -a 910 114 6 -a 910 685 1 -a 910 932 4 -a 910 517 6 -a 910 180 8 -a 910 421 3 -a 910 195 5 -a 910 74 3 -a 910 441 9 -a 910 309 7 -a 910 191 6 -a 910 843 10 -a 910 935 10 -a 910 230 6 -a 910 304 2 -a 910 411 3 -a 910 212 2 -a 911 139 4 -a 911 915 5 -a 911 662 4 -a 911 218 10 -a 911 447 4 -a 911 992 3 -a 911 768 3 -a 911 118 10 -a 911 331 5 -a 911 919 4 -a 911 258 7 -a 911 444 6 -a 911 580 8 -a 911 165 7 -a 911 960 1 -a 911 759 9 -a 911 585 10 -a 911 130 10 -a 911 832 7 -a 911 567 2 -a 911 571 1 -a 911 116 4 -a 911 757 6 -a 911 389 7 -a 911 26 5 -a 911 987 9 -a 911 366 6 -a 911 329 8 -a 911 974 10 -a 911 777 3 -a 911 540 10 -a 911 89 2 -a 911 667 4 -a 911 178 10 -a 911 306 4 -a 911 89 3 -a 911 145 2 -a 911 49 3 -a 911 206 7 -a 911 475 6 -a 911 968 1 -a 911 463 3 -a 911 918 7 -a 911 523 4 -a 911 628 2 -a 911 854 6 -a 911 257 3 -a 911 188 6 -a 911 983 5 -a 911 65 7 -a 911 755 1 -a 911 529 1 -a 911 180 10 -a 911 487 10 -a 911 917 6 -a 911 206 8 -a 911 449 8 -a 911 259 4 -a 911 534 10 -a 911 399 10 -a 911 11 10 -a 911 50 7 -a 911 487 4 -a 911 677 9 -a 911 227 10 -a 911 792 8 -a 911 766 3 -a 911 371 4 -a 911 840 6 -a 911 971 3 -a 911 845 5 -a 911 783 2 -a 911 410 10 -a 911 738 8 -a 911 281 4 -a 911 13 1 -a 911 567 10 -a 911 538 2 -a 911 200 7 -a 911 526 2 -a 911 602 8 -a 911 954 10 -a 911 30 4 -a 911 781 9 -a 911 417 7 -a 911 947 3 -a 911 986 8 -a 911 865 10 -a 911 181 8 -a 911 496 10 -a 911 239 9 -a 911 191 4 -a 911 545 5 -a 911 725 8 -a 911 867 7 -a 911 771 5 -a 912 492 2 -a 912 608 8 -a 912 117 8 -a 912 308 3 -a 912 555 1 -a 912 961 2 -a 912 66 10 -a 912 964 5 -a 912 674 9 -a 912 347 5 -a 912 976 3 -a 912 217 4 -a 912 884 8 -a 912 151 6 -a 912 742 4 -a 912 461 9 -a 912 81 3 -a 912 771 7 -a 912 217 4 -a 912 497 2 -a 912 693 5 -a 912 179 10 -a 912 337 10 -a 912 873 10 -a 912 674 6 -a 912 576 3 -a 912 39 2 -a 912 194 8 -a 912 276 5 -a 912 906 2 -a 912 964 4 -a 912 768 4 -a 912 489 8 -a 912 56 5 -a 912 51 3 -a 912 19 7 -a 912 116 7 -a 912 982 10 -a 912 665 8 -a 912 462 9 -a 912 933 1 -a 912 881 9 -a 912 321 5 -a 912 60 6 -a 912 598 10 -a 912 781 8 -a 912 140 8 -a 912 345 4 -a 912 998 10 -a 912 636 8 -a 912 13 5 -a 912 152 3 -a 912 972 3 -a 912 886 7 -a 912 825 10 -a 912 523 6 -a 912 924 6 -a 912 799 3 -a 912 805 5 -a 912 957 9 -a 912 542 8 -a 912 270 1 -a 912 592 3 -a 912 288 4 -a 912 707 8 -a 912 246 10 -a 912 643 8 -a 912 145 3 -a 912 154 3 -a 912 500 2 -a 912 465 8 -a 912 213 1 -a 912 73 4 -a 912 222 2 -a 912 352 10 -a 912 417 7 -a 912 195 8 -a 912 987 1 -a 912 430 4 -a 912 346 8 -a 912 935 10 -a 912 291 10 -a 912 146 1 -a 912 433 1 -a 912 190 10 -a 912 139 3 -a 912 207 5 -a 912 995 2 -a 912 71 4 -a 912 748 10 -a 912 240 5 -a 912 58 6 -a 912 315 10 -a 912 527 4 -a 912 36 9 -a 912 772 6 -a 912 678 6 -a 912 142 2 -a 912 926 8 -a 912 153 7 -a 912 606 4 -a 913 114 10 -a 913 226 2 -a 913 827 2 -a 913 466 6 -a 913 642 2 -a 913 428 7 -a 913 47 4 -a 913 342 4 -a 913 338 5 -a 913 337 6 -a 913 487 9 -a 913 771 2 -a 913 527 8 -a 913 625 1 -a 913 977 10 -a 913 497 6 -a 913 695 5 -a 913 701 3 -a 913 736 3 -a 913 752 5 -a 913 238 6 -a 913 787 1 -a 913 441 7 -a 913 129 6 -a 913 911 1 -a 913 593 5 -a 913 735 1 -a 913 818 6 -a 913 537 9 -a 913 465 1 -a 913 436 9 -a 913 534 7 -a 913 893 3 -a 913 482 2 -a 913 875 8 -a 913 206 7 -a 913 819 5 -a 913 338 10 -a 913 976 10 -a 913 321 5 -a 913 962 1 -a 913 929 2 -a 913 817 1 -a 913 633 1 -a 913 605 5 -a 913 528 2 -a 913 360 10 -a 913 595 5 -a 913 765 7 -a 913 123 4 -a 913 583 8 -a 913 750 10 -a 913 563 7 -a 913 711 1 -a 913 636 3 -a 913 131 4 -a 913 421 6 -a 913 636 5 -a 913 949 6 -a 913 958 4 -a 913 76 1 -a 913 360 2 -a 913 467 3 -a 913 968 2 -a 913 841 1 -a 913 317 10 -a 913 150 2 -a 913 635 7 -a 913 654 1 -a 913 101 5 -a 913 955 4 -a 913 592 8 -a 913 5 10 -a 913 747 8 -a 913 200 9 -a 913 609 2 -a 913 250 7 -a 913 559 7 -a 913 180 1 -a 913 681 3 -a 913 762 4 -a 913 740 4 -a 913 219 6 -a 913 448 2 -a 913 352 6 -a 913 350 4 -a 913 869 1 -a 913 987 1 -a 913 274 4 -a 913 802 8 -a 913 38 8 -a 913 633 6 -a 913 244 6 -a 913 449 1 -a 913 560 2 -a 913 131 7 -a 913 60 6 -a 913 190 3 -a 913 231 3 -a 913 781 9 -a 913 236 6 -a 913 737 1 -a 913 980 7 -a 913 844 2 -a 913 986 2 -a 913 514 6 -a 913 976 6 -a 913 171 3 -a 913 760 3 -a 913 692 4 -a 913 389 8 -a 913 184 8 -a 914 19 4 -a 914 738 8 -a 914 28 10 -a 914 829 5 -a 914 18 1 -a 914 619 1 -a 914 48 6 -a 914 44 8 -a 914 607 5 -a 914 129 2 -a 914 103 5 -a 914 796 4 -a 914 360 7 -a 914 92 7 -a 914 552 6 -a 914 595 6 -a 914 828 7 -a 914 507 8 -a 914 414 2 -a 914 790 2 -a 914 413 4 -a 914 741 7 -a 914 167 2 -a 914 148 7 -a 914 408 4 -a 914 555 4 -a 914 331 10 -a 914 426 5 -a 914 269 4 -a 914 358 7 -a 914 406 10 -a 914 255 4 -a 914 162 1 -a 914 424 8 -a 914 874 1 -a 914 209 7 -a 914 422 6 -a 914 917 8 -a 914 816 9 -a 914 551 5 -a 914 587 9 -a 914 910 7 -a 914 86 6 -a 914 115 10 -a 914 480 8 -a 914 914 8 -a 914 621 4 -a 914 893 4 -a 914 679 6 -a 914 617 2 -a 914 281 5 -a 914 395 5 -a 914 783 6 -a 914 429 9 -a 914 803 3 -a 914 314 4 -a 914 759 1 -a 914 204 6 -a 914 582 5 -a 914 93 4 -a 914 610 9 -a 914 836 5 -a 914 254 8 -a 914 9 3 -a 914 685 8 -a 914 463 1 -a 914 430 7 -a 914 577 7 -a 914 254 5 -a 914 980 1 -a 914 571 4 -a 914 840 2 -a 914 865 9 -a 914 657 6 -a 914 954 6 -a 914 320 6 -a 914 546 6 -a 914 551 10 -a 914 189 3 -a 914 200 7 -a 914 143 8 -a 914 469 3 -a 914 594 3 -a 914 926 8 -a 914 897 5 -a 914 372 7 -a 914 215 8 -a 914 632 3 -a 914 576 8 -a 914 796 8 -a 915 724 9 -a 915 161 6 -a 915 607 10 -a 915 977 7 -a 915 169 4 -a 915 268 5 -a 915 415 3 -a 915 598 7 -a 915 844 6 -a 915 668 6 -a 915 554 1 -a 915 391 9 -a 915 484 8 -a 915 394 3 -a 915 23 6 -a 915 413 8 -a 915 714 6 -a 915 568 8 -a 915 963 3 -a 915 902 10 -a 915 767 2 -a 915 82 5 -a 915 346 1 -a 915 336 5 -a 915 219 7 -a 915 708 9 -a 915 197 7 -a 915 850 6 -a 915 259 5 -a 915 992 5 -a 915 549 2 -a 915 419 8 -a 915 574 1 -a 915 501 6 -a 915 587 10 -a 915 841 6 -a 915 916 7 -a 915 160 4 -a 915 661 9 -a 915 559 4 -a 915 713 10 -a 915 27 9 -a 915 18 8 -a 915 83 8 -a 915 49 10 -a 915 431 2 -a 915 796 3 -a 915 616 3 -a 915 369 6 -a 915 673 8 -a 915 358 1 -a 915 450 2 -a 915 693 9 -a 915 432 1 -a 915 212 2 -a 915 376 7 -a 915 628 1 -a 915 37 6 -a 915 634 5 -a 915 595 5 -a 915 585 3 -a 915 28 8 -a 915 145 5 -a 915 62 5 -a 915 614 2 -a 915 985 6 -a 915 977 4 -a 915 774 5 -a 915 621 6 -a 915 511 6 -a 915 462 10 -a 915 647 6 -a 915 529 4 -a 915 544 4 -a 915 695 6 -a 915 959 5 -a 915 315 9 -a 915 286 4 -a 915 303 1 -a 915 987 9 -a 915 643 5 -a 915 753 9 -a 915 981 6 -a 915 312 2 -a 915 160 6 -a 915 168 9 -a 915 687 10 -a 916 788 8 -a 916 205 6 -a 916 297 4 -a 916 358 10 -a 916 789 1 -a 916 324 4 -a 916 502 5 -a 916 850 3 -a 916 938 10 -a 916 463 7 -a 916 802 7 -a 916 687 7 -a 916 59 10 -a 916 289 2 -a 916 124 1 -a 916 706 7 -a 916 817 10 -a 916 668 7 -a 916 376 1 -a 916 751 5 -a 916 982 7 -a 916 662 9 -a 916 29 2 -a 916 945 6 -a 916 280 2 -a 916 781 2 -a 916 901 9 -a 916 591 1 -a 916 941 7 -a 916 44 10 -a 916 254 3 -a 916 704 2 -a 916 248 8 -a 916 550 8 -a 916 37 3 -a 916 13 8 -a 916 873 9 -a 916 539 4 -a 916 862 3 -a 916 786 9 -a 916 640 4 -a 916 448 1 -a 916 35 10 -a 916 928 3 -a 916 572 2 -a 916 740 4 -a 916 720 4 -a 916 215 8 -a 916 92 4 -a 916 446 10 -a 916 172 3 -a 916 753 4 -a 916 474 10 -a 916 92 9 -a 916 8 1 -a 916 231 9 -a 916 992 1 -a 916 599 2 -a 916 147 7 -a 916 12 10 -a 916 852 4 -a 916 850 10 -a 916 259 10 -a 916 377 7 -a 916 886 6 -a 916 271 4 -a 916 225 7 -a 916 400 8 -a 916 109 4 -a 916 376 3 -a 916 748 4 -a 916 434 8 -a 916 411 7 -a 916 651 6 -a 916 126 9 -a 916 346 9 -a 916 195 2 -a 916 217 2 -a 916 791 6 -a 916 367 7 -a 916 969 5 -a 916 240 8 -a 916 458 6 -a 916 977 8 -a 916 470 9 -a 916 426 8 -a 916 551 10 -a 916 616 9 -a 916 437 7 -a 916 378 4 -a 916 441 5 -a 916 695 7 -a 916 754 9 -a 916 303 6 -a 916 966 10 -a 916 978 3 -a 917 702 5 -a 917 50 2 -a 917 964 4 -a 917 54 3 -a 917 797 10 -a 917 374 8 -a 917 464 5 -a 917 423 3 -a 917 354 1 -a 917 589 1 -a 917 768 7 -a 917 549 1 -a 917 806 5 -a 917 534 2 -a 917 915 2 -a 917 750 9 -a 917 773 8 -a 917 348 2 -a 917 702 6 -a 917 219 1 -a 917 773 10 -a 917 228 9 -a 917 834 8 -a 917 185 9 -a 917 605 9 -a 917 251 7 -a 917 880 9 -a 917 334 8 -a 917 553 8 -a 917 821 1 -a 917 288 6 -a 917 230 8 -a 917 870 6 -a 917 227 1 -a 917 283 5 -a 917 642 5 -a 917 600 2 -a 917 746 4 -a 917 40 10 -a 917 954 4 -a 917 311 8 -a 917 807 1 -a 917 478 9 -a 917 92 7 -a 917 316 8 -a 917 368 6 -a 917 841 5 -a 917 64 6 -a 917 715 5 -a 917 519 2 -a 917 282 1 -a 917 464 5 -a 917 746 8 -a 917 92 2 -a 917 648 1 -a 917 327 7 -a 917 342 2 -a 917 503 7 -a 917 660 1 -a 917 894 8 -a 917 299 7 -a 917 947 4 -a 917 99 7 -a 917 144 2 -a 917 150 2 -a 917 382 7 -a 917 785 8 -a 917 749 7 -a 917 103 2 -a 917 824 8 -a 917 678 3 -a 917 413 10 -a 917 606 2 -a 917 131 4 -a 917 504 4 -a 917 921 5 -a 917 498 5 -a 917 321 3 -a 917 985 9 -a 917 189 6 -a 917 839 8 -a 917 242 3 -a 917 652 10 -a 917 560 9 -a 917 333 4 -a 918 275 5 -a 918 886 6 -a 918 674 3 -a 918 778 7 -a 918 522 2 -a 918 543 4 -a 918 52 6 -a 918 444 9 -a 918 642 6 -a 918 196 10 -a 918 593 4 -a 918 980 3 -a 918 318 10 -a 918 101 7 -a 918 780 7 -a 918 995 5 -a 918 514 1 -a 918 361 7 -a 918 102 10 -a 918 258 7 -a 918 599 8 -a 918 313 1 -a 918 218 6 -a 918 787 3 -a 918 127 6 -a 918 459 2 -a 918 414 1 -a 918 687 9 -a 918 792 2 -a 918 689 1 -a 918 548 10 -a 918 441 6 -a 918 442 3 -a 918 45 9 -a 918 984 5 -a 918 493 7 -a 918 489 9 -a 918 601 6 -a 918 688 3 -a 918 57 1 -a 918 599 3 -a 918 644 1 -a 918 374 1 -a 918 699 8 -a 918 399 3 -a 918 345 6 -a 918 188 3 -a 918 759 5 -a 918 446 6 -a 918 181 7 -a 918 20 10 -a 918 493 5 -a 918 209 5 -a 918 807 3 -a 918 620 3 -a 918 668 7 -a 918 196 6 -a 918 282 4 -a 918 435 4 -a 918 884 6 -a 918 829 4 -a 918 875 6 -a 918 301 5 -a 918 874 4 -a 918 834 9 -a 918 794 10 -a 918 338 6 -a 918 410 5 -a 918 457 9 -a 918 394 6 -a 918 76 3 -a 918 768 2 -a 918 683 6 -a 918 474 7 -a 918 88 6 -a 918 870 8 -a 918 209 4 -a 918 533 8 -a 918 26 5 -a 918 200 2 -a 918 552 10 -a 918 519 3 -a 918 409 5 -a 918 334 10 -a 918 114 1 -a 918 52 9 -a 918 530 5 -a 918 395 8 -a 918 486 2 -a 918 389 4 -a 918 199 6 -a 918 336 3 -a 918 690 9 -a 918 48 8 -a 918 146 2 -a 918 459 2 -a 918 385 10 -a 918 555 4 -a 918 915 1 -a 918 779 7 -a 918 539 5 -a 918 991 10 -a 918 522 10 -a 918 197 10 -a 918 440 7 -a 918 609 6 -a 918 42 3 -a 918 648 8 -a 918 117 2 -a 918 68 9 -a 918 848 10 -a 918 668 7 -a 918 586 2 -a 919 232 7 -a 919 699 10 -a 919 283 10 -a 919 507 3 -a 919 69 1 -a 919 768 8 -a 919 895 5 -a 919 267 10 -a 919 79 3 -a 919 560 10 -a 919 315 4 -a 919 224 7 -a 919 699 3 -a 919 779 10 -a 919 909 3 -a 919 453 3 -a 919 293 1 -a 919 875 1 -a 919 974 4 -a 919 489 6 -a 919 290 6 -a 919 558 8 -a 919 530 7 -a 919 938 5 -a 919 674 1 -a 919 597 6 -a 919 761 8 -a 919 318 5 -a 919 158 5 -a 919 992 1 -a 919 295 2 -a 919 856 7 -a 919 250 10 -a 919 801 6 -a 919 924 2 -a 919 671 5 -a 919 167 4 -a 919 71 5 -a 919 207 4 -a 919 481 2 -a 919 295 1 -a 919 200 6 -a 919 155 4 -a 919 49 6 -a 919 84 1 -a 919 608 10 -a 919 341 4 -a 919 958 6 -a 919 557 10 -a 919 829 4 -a 919 224 1 -a 919 91 9 -a 919 334 1 -a 919 137 10 -a 919 764 5 -a 919 931 10 -a 919 897 1 -a 919 57 5 -a 919 64 1 -a 919 864 10 -a 919 351 4 -a 919 920 8 -a 919 89 5 -a 919 127 10 -a 919 819 3 -a 919 81 8 -a 919 798 4 -a 919 985 2 -a 919 151 2 -a 919 441 9 -a 919 445 6 -a 919 179 3 -a 919 596 1 -a 919 493 7 -a 919 263 5 -a 919 179 4 -a 919 833 6 -a 919 196 5 -a 919 735 8 -a 919 637 6 -a 919 419 2 -a 919 825 1 -a 919 971 9 -a 919 555 8 -a 919 565 5 -a 919 877 2 -a 919 427 2 -a 919 621 2 -a 919 940 10 -a 919 266 7 -a 919 972 7 -a 919 835 1 -a 919 354 4 -a 919 74 10 -a 919 630 4 -a 919 434 6 -a 919 871 4 -a 919 590 5 -a 919 585 6 -a 919 850 1 -a 919 7 4 -a 919 5 8 -a 919 5 9 -a 919 602 9 -a 919 498 8 -a 919 267 10 -a 919 780 8 -a 919 306 3 -a 919 462 3 -a 919 490 10 -a 919 943 7 -a 920 881 5 -a 920 291 2 -a 920 889 10 -a 920 411 5 -a 920 855 5 -a 920 741 6 -a 920 838 4 -a 920 451 5 -a 920 656 5 -a 920 79 1 -a 920 398 8 -a 920 467 6 -a 920 433 6 -a 920 472 6 -a 920 72 5 -a 920 866 8 -a 920 318 4 -a 920 661 7 -a 920 426 5 -a 920 144 2 -a 920 667 1 -a 920 431 4 -a 920 148 1 -a 920 244 10 -a 920 928 5 -a 920 414 3 -a 920 209 9 -a 920 875 5 -a 920 489 8 -a 920 127 4 -a 920 731 8 -a 920 779 8 -a 920 118 9 -a 920 609 4 -a 920 731 7 -a 920 955 3 -a 920 35 9 -a 920 363 8 -a 920 9 4 -a 920 433 3 -a 920 829 9 -a 920 441 8 -a 920 904 5 -a 920 900 9 -a 920 283 9 -a 920 197 10 -a 920 536 9 -a 920 708 9 -a 920 340 5 -a 920 179 3 -a 920 114 9 -a 920 487 5 -a 920 422 4 -a 920 17 3 -a 920 900 5 -a 920 421 9 -a 920 226 3 -a 920 751 7 -a 920 909 3 -a 920 352 2 -a 920 457 7 -a 920 663 8 -a 920 343 3 -a 920 574 2 -a 920 247 5 -a 920 49 5 -a 920 504 4 -a 920 281 3 -a 920 411 4 -a 920 513 7 -a 920 713 2 -a 920 215 10 -a 920 953 3 -a 920 592 1 -a 920 90 3 -a 920 211 5 -a 920 789 3 -a 920 626 4 -a 920 919 4 -a 920 104 2 -a 920 804 10 -a 920 8 8 -a 920 591 2 -a 920 201 1 -a 920 25 10 -a 920 466 2 -a 920 621 3 -a 920 250 5 -a 920 192 2 -a 920 505 3 -a 920 601 6 -a 920 649 3 -a 920 143 3 -a 920 943 8 -a 920 198 5 -a 920 389 1 -a 920 992 1 -a 920 702 5 -a 920 670 9 -a 921 378 2 -a 921 190 8 -a 921 358 10 -a 921 593 2 -a 921 118 1 -a 921 950 7 -a 921 682 1 -a 921 329 8 -a 921 714 3 -a 921 283 4 -a 921 223 9 -a 921 817 8 -a 921 62 7 -a 921 230 5 -a 921 383 9 -a 921 263 7 -a 921 254 6 -a 921 849 3 -a 921 883 5 -a 921 503 6 -a 921 16 4 -a 921 364 6 -a 921 80 6 -a 921 664 6 -a 921 506 9 -a 921 862 9 -a 921 895 6 -a 921 989 9 -a 921 539 2 -a 921 540 4 -a 921 343 8 -a 921 728 9 -a 921 897 6 -a 921 935 5 -a 921 845 7 -a 921 822 2 -a 921 592 9 -a 921 149 7 -a 921 511 5 -a 921 875 1 -a 921 371 6 -a 921 304 10 -a 921 936 7 -a 921 601 7 -a 921 686 4 -a 921 174 10 -a 921 854 1 -a 921 510 2 -a 921 33 6 -a 921 333 7 -a 921 526 1 -a 921 396 6 -a 921 412 1 -a 921 165 5 -a 921 901 2 -a 921 409 8 -a 921 2 8 -a 921 771 8 -a 921 374 9 -a 921 540 6 -a 921 286 6 -a 921 716 9 -a 921 243 1 -a 921 159 10 -a 921 626 6 -a 921 64 1 -a 921 980 10 -a 921 193 2 -a 921 212 3 -a 921 467 3 -a 921 43 4 -a 921 583 6 -a 921 770 3 -a 921 979 8 -a 921 159 9 -a 921 431 8 -a 921 128 9 -a 921 941 3 -a 921 160 8 -a 921 320 2 -a 921 442 4 -a 921 555 4 -a 921 731 2 -a 921 606 5 -a 921 432 7 -a 921 116 2 -a 921 608 10 -a 921 178 5 -a 921 489 6 -a 921 123 5 -a 921 464 7 -a 921 180 3 -a 921 366 7 -a 921 622 9 -a 921 805 1 -a 921 429 1 -a 921 577 6 -a 921 997 10 -a 922 640 3 -a 922 19 3 -a 922 16 1 -a 922 198 2 -a 922 788 1 -a 922 994 3 -a 922 356 3 -a 922 195 8 -a 922 97 2 -a 922 344 9 -a 922 111 3 -a 922 257 2 -a 922 663 8 -a 922 552 2 -a 922 811 6 -a 922 370 6 -a 922 133 9 -a 922 218 8 -a 922 485 3 -a 922 740 2 -a 922 396 6 -a 922 973 3 -a 922 863 2 -a 922 859 5 -a 922 128 1 -a 922 204 1 -a 922 456 6 -a 922 932 7 -a 922 632 3 -a 922 8 2 -a 922 904 8 -a 922 247 3 -a 922 27 7 -a 922 919 9 -a 922 445 10 -a 922 814 1 -a 922 888 5 -a 922 800 2 -a 922 985 10 -a 922 119 6 -a 922 94 5 -a 922 217 7 -a 922 782 7 -a 922 645 2 -a 922 3 7 -a 922 127 5 -a 922 778 5 -a 922 221 10 -a 922 611 1 -a 922 493 2 -a 922 616 6 -a 922 559 4 -a 922 331 8 -a 922 450 3 -a 922 686 1 -a 922 534 10 -a 922 905 3 -a 922 593 9 -a 922 141 9 -a 922 912 3 -a 922 472 3 -a 922 388 7 -a 922 938 1 -a 922 367 9 -a 922 832 5 -a 922 728 4 -a 922 230 7 -a 922 607 7 -a 922 711 6 -a 922 190 7 -a 922 726 3 -a 922 805 5 -a 922 406 9 -a 922 483 4 -a 922 425 10 -a 922 409 6 -a 922 609 6 -a 922 178 7 -a 922 629 3 -a 922 195 5 -a 922 671 1 -a 922 220 9 -a 922 753 5 -a 922 669 1 -a 922 414 1 -a 922 511 1 -a 922 549 4 -a 922 651 7 -a 922 436 8 -a 922 453 2 -a 922 14 9 -a 922 350 9 -a 922 819 1 -a 922 845 6 -a 922 53 6 -a 922 25 1 -a 922 428 6 -a 923 763 8 -a 923 214 10 -a 923 129 8 -a 923 543 5 -a 923 620 4 -a 923 611 5 -a 923 968 5 -a 923 4 8 -a 923 195 5 -a 923 121 9 -a 923 632 9 -a 923 389 5 -a 923 791 6 -a 923 851 5 -a 923 117 9 -a 923 768 6 -a 923 495 6 -a 923 530 9 -a 923 254 1 -a 923 19 5 -a 923 511 1 -a 923 904 10 -a 923 454 5 -a 923 963 4 -a 923 918 2 -a 923 803 2 -a 923 758 7 -a 923 738 3 -a 923 855 4 -a 923 782 7 -a 923 141 3 -a 923 594 7 -a 923 995 7 -a 923 269 4 -a 923 112 9 -a 923 590 1 -a 923 879 7 -a 923 55 9 -a 923 593 5 -a 923 49 4 -a 923 176 9 -a 923 200 8 -a 923 437 6 -a 923 966 1 -a 923 26 3 -a 923 553 8 -a 923 709 2 -a 923 520 2 -a 923 58 1 -a 923 962 4 -a 923 538 4 -a 923 568 2 -a 923 842 1 -a 923 992 6 -a 923 507 8 -a 923 735 5 -a 923 770 3 -a 923 240 1 -a 923 448 8 -a 923 601 6 -a 923 589 8 -a 923 170 2 -a 923 991 10 -a 923 857 1 -a 923 281 6 -a 923 557 4 -a 923 712 2 -a 923 336 5 -a 923 125 10 -a 923 760 2 -a 923 511 8 -a 923 325 4 -a 923 173 6 -a 923 452 9 -a 923 350 5 -a 923 725 3 -a 923 137 6 -a 923 870 5 -a 923 783 4 -a 923 74 1 -a 923 383 1 -a 923 326 5 -a 923 915 6 -a 923 350 9 -a 923 832 5 -a 923 625 5 -a 923 96 4 -a 923 47 6 -a 923 49 4 -a 923 696 6 -a 923 43 9 -a 923 637 8 -a 923 865 3 -a 923 10 4 -a 923 469 1 -a 923 121 9 -a 924 566 6 -a 924 156 6 -a 924 456 10 -a 924 690 10 -a 924 916 9 -a 924 966 5 -a 924 64 8 -a 924 394 9 -a 924 340 5 -a 924 788 10 -a 924 530 2 -a 924 185 10 -a 924 546 7 -a 924 603 2 -a 924 567 5 -a 924 872 9 -a 924 494 8 -a 924 917 10 -a 924 679 5 -a 924 94 6 -a 924 726 8 -a 924 142 10 -a 924 683 4 -a 924 768 3 -a 924 778 8 -a 924 523 4 -a 924 777 4 -a 924 223 1 -a 924 643 5 -a 924 318 8 -a 924 378 1 -a 924 75 7 -a 924 269 7 -a 924 16 3 -a 924 997 3 -a 924 332 9 -a 924 409 1 -a 924 312 7 -a 924 96 2 -a 924 938 2 -a 924 496 3 -a 924 641 2 -a 924 517 6 -a 924 39 4 -a 924 488 10 -a 924 955 3 -a 924 143 2 -a 924 79 2 -a 924 942 3 -a 924 868 3 -a 924 221 2 -a 924 600 10 -a 924 611 3 -a 924 998 1 -a 924 98 5 -a 924 364 5 -a 924 196 8 -a 924 740 1 -a 924 681 8 -a 924 574 9 -a 924 814 10 -a 924 664 4 -a 924 842 4 -a 924 830 6 -a 924 637 10 -a 924 150 5 -a 924 214 5 -a 924 948 2 -a 924 245 7 -a 924 128 3 -a 924 420 5 -a 924 885 1 -a 924 644 9 -a 924 458 8 -a 924 349 6 -a 924 629 5 -a 924 388 3 -a 924 491 3 -a 924 707 5 -a 924 305 1 -a 924 334 8 -a 924 927 6 -a 924 904 8 -a 924 944 10 -a 924 901 3 -a 924 283 4 -a 924 72 3 -a 924 716 1 -a 924 964 7 -a 924 645 4 -a 924 506 9 -a 924 603 7 -a 924 463 4 -a 925 311 4 -a 925 215 8 -a 925 612 4 -a 925 524 9 -a 925 139 6 -a 925 856 10 -a 925 651 3 -a 925 558 8 -a 925 716 6 -a 925 270 2 -a 925 40 8 -a 925 898 4 -a 925 378 1 -a 925 530 3 -a 925 581 7 -a 925 682 3 -a 925 863 3 -a 925 483 10 -a 925 561 6 -a 925 783 6 -a 925 359 2 -a 925 537 3 -a 925 41 5 -a 925 431 3 -a 925 228 2 -a 925 51 10 -a 925 733 5 -a 925 583 3 -a 925 513 8 -a 925 19 4 -a 925 797 6 -a 925 100 2 -a 925 543 3 -a 925 935 4 -a 925 955 10 -a 925 169 2 -a 925 468 7 -a 925 647 3 -a 925 439 7 -a 925 458 5 -a 925 686 3 -a 925 312 9 -a 925 835 1 -a 925 192 1 -a 925 892 5 -a 925 492 3 -a 925 30 5 -a 925 351 1 -a 925 28 9 -a 925 812 1 -a 925 709 8 -a 925 564 6 -a 925 853 4 -a 925 115 3 -a 925 792 4 -a 925 832 9 -a 925 166 5 -a 925 500 1 -a 925 390 8 -a 925 678 2 -a 925 519 10 -a 925 163 1 -a 925 778 4 -a 925 37 8 -a 925 73 10 -a 925 708 5 -a 925 205 8 -a 925 541 7 -a 925 330 7 -a 925 643 3 -a 925 998 3 -a 925 955 5 -a 925 809 4 -a 925 183 6 -a 925 822 9 -a 925 276 4 -a 925 212 1 -a 925 148 7 -a 925 304 4 -a 925 857 4 -a 925 867 5 -a 925 852 1 -a 925 971 10 -a 925 634 6 -a 925 659 6 -a 925 112 6 -a 925 110 1 -a 925 25 8 -a 925 790 6 -a 925 628 9 -a 925 187 4 -a 925 543 5 -a 925 664 3 -a 925 259 5 -a 925 226 10 -a 926 868 3 -a 926 799 4 -a 926 556 10 -a 926 487 9 -a 926 773 9 -a 926 547 7 -a 926 417 2 -a 926 557 2 -a 926 729 6 -a 926 214 6 -a 926 832 2 -a 926 940 3 -a 926 362 7 -a 926 111 10 -a 926 939 9 -a 926 194 6 -a 926 978 4 -a 926 766 9 -a 926 140 1 -a 926 587 5 -a 926 401 10 -a 926 252 9 -a 926 696 10 -a 926 425 9 -a 926 17 10 -a 926 299 8 -a 926 611 10 -a 926 559 6 -a 926 962 6 -a 926 869 4 -a 926 784 2 -a 926 806 9 -a 926 644 5 -a 926 315 10 -a 926 268 3 -a 926 392 4 -a 926 861 8 -a 926 684 2 -a 926 948 3 -a 926 565 2 -a 926 897 7 -a 926 755 7 -a 926 481 3 -a 926 234 10 -a 926 866 9 -a 926 395 4 -a 926 427 4 -a 926 819 10 -a 926 137 3 -a 926 567 9 -a 926 381 5 -a 926 537 2 -a 926 818 8 -a 926 53 1 -a 926 961 4 -a 926 834 8 -a 926 351 3 -a 926 547 7 -a 926 368 4 -a 926 289 3 -a 926 391 1 -a 926 127 6 -a 926 70 9 -a 926 10 7 -a 926 442 8 -a 926 337 10 -a 926 401 10 -a 926 278 1 -a 926 324 5 -a 926 843 4 -a 926 892 6 -a 926 55 4 -a 926 299 3 -a 926 102 2 -a 926 920 10 -a 926 693 5 -a 926 528 2 -a 926 714 1 -a 926 829 1 -a 926 70 6 -a 926 70 6 -a 926 341 7 -a 926 887 6 -a 926 122 4 -a 926 277 1 -a 926 696 1 -a 926 473 9 -a 926 823 6 -a 926 39 3 -a 926 761 2 -a 926 190 9 -a 926 166 10 -a 926 830 7 -a 926 199 7 -a 926 607 8 -a 926 142 4 -a 926 600 8 -a 926 884 8 -a 926 137 5 -a 926 923 5 -a 926 702 8 -a 926 4 10 -a 926 977 10 -a 926 1000 6 -a 926 105 3 -a 927 872 1 -a 927 669 7 -a 927 633 3 -a 927 561 2 -a 927 473 1 -a 927 702 7 -a 927 631 1 -a 927 814 3 -a 927 565 8 -a 927 752 5 -a 927 66 5 -a 927 236 5 -a 927 200 9 -a 927 889 3 -a 927 275 1 -a 927 960 10 -a 927 54 6 -a 927 440 10 -a 927 765 8 -a 927 252 5 -a 927 22 5 -a 927 906 1 -a 927 851 1 -a 927 905 5 -a 927 18 8 -a 927 750 3 -a 927 583 6 -a 927 22 6 -a 927 702 4 -a 927 558 7 -a 927 126 6 -a 927 550 4 -a 927 202 4 -a 927 758 3 -a 927 86 8 -a 927 675 8 -a 927 436 7 -a 927 716 4 -a 927 464 3 -a 927 1000 6 -a 927 444 3 -a 927 529 2 -a 927 211 7 -a 927 643 6 -a 927 393 6 -a 927 485 5 -a 927 579 3 -a 927 446 1 -a 927 924 1 -a 927 319 9 -a 927 698 6 -a 927 945 9 -a 927 201 4 -a 927 524 4 -a 927 826 7 -a 927 218 6 -a 927 249 9 -a 927 384 4 -a 927 239 1 -a 927 951 1 -a 927 941 7 -a 927 365 9 -a 927 476 10 -a 927 119 3 -a 927 98 6 -a 927 561 5 -a 927 793 6 -a 927 533 8 -a 927 253 9 -a 927 232 3 -a 927 508 5 -a 927 696 2 -a 927 760 8 -a 927 719 2 -a 927 314 1 -a 927 129 5 -a 927 179 8 -a 927 892 7 -a 927 574 9 -a 927 79 8 -a 927 187 8 -a 927 247 6 -a 927 387 3 -a 927 771 3 -a 927 824 9 -a 927 604 5 -a 927 183 8 -a 927 843 6 -a 927 945 1 -a 927 100 2 -a 927 183 9 -a 927 396 4 -a 927 218 1 -a 927 280 4 -a 928 957 6 -a 928 813 8 -a 928 185 5 -a 928 217 6 -a 928 296 5 -a 928 880 2 -a 928 976 1 -a 928 169 9 -a 928 80 9 -a 928 169 8 -a 928 37 1 -a 928 654 7 -a 928 247 2 -a 928 223 4 -a 928 900 7 -a 928 245 5 -a 928 609 10 -a 928 646 7 -a 928 45 8 -a 928 188 3 -a 928 641 7 -a 928 227 8 -a 928 6 3 -a 928 561 1 -a 928 326 9 -a 928 188 5 -a 928 957 9 -a 928 543 3 -a 928 468 2 -a 928 889 10 -a 928 528 5 -a 928 256 7 -a 928 49 9 -a 928 744 7 -a 928 551 9 -a 928 928 5 -a 928 696 6 -a 928 541 8 -a 928 72 10 -a 928 775 1 -a 928 709 9 -a 928 108 2 -a 928 404 8 -a 928 955 1 -a 928 330 9 -a 928 280 1 -a 928 175 1 -a 928 938 7 -a 928 925 9 -a 928 219 3 -a 928 102 8 -a 928 541 3 -a 928 446 1 -a 928 107 9 -a 928 78 9 -a 928 771 7 -a 928 295 3 -a 928 10 7 -a 928 290 5 -a 928 762 6 -a 928 898 1 -a 928 817 2 -a 928 946 2 -a 928 537 10 -a 928 543 1 -a 928 849 1 -a 928 208 9 -a 928 59 10 -a 928 920 10 -a 928 982 10 -a 928 767 2 -a 928 4 2 -a 928 362 9 -a 928 697 4 -a 928 333 4 -a 928 641 4 -a 928 872 10 -a 928 247 3 -a 928 541 8 -a 928 66 5 -a 928 348 7 -a 928 58 6 -a 928 511 8 -a 928 454 7 -a 928 135 1 -a 928 258 6 -a 928 748 1 -a 928 144 9 -a 928 547 6 -a 928 485 10 -a 928 17 2 -a 928 339 1 -a 928 477 3 -a 928 962 2 -a 928 875 4 -a 928 786 6 -a 928 58 10 -a 928 54 8 -a 928 681 2 -a 928 16 3 -a 928 821 5 -a 928 684 7 -a 928 377 1 -a 928 493 7 -a 928 340 6 -a 928 239 4 -a 928 533 6 -a 928 406 1 -a 928 586 4 -a 929 590 1 -a 929 916 6 -a 929 15 5 -a 929 724 9 -a 929 149 10 -a 929 763 4 -a 929 867 3 -a 929 695 9 -a 929 223 7 -a 929 883 10 -a 929 10 10 -a 929 700 4 -a 929 820 5 -a 929 884 9 -a 929 695 2 -a 929 581 2 -a 929 942 3 -a 929 748 5 -a 929 238 9 -a 929 957 9 -a 929 544 9 -a 929 921 2 -a 929 309 1 -a 929 13 10 -a 929 913 10 -a 929 301 8 -a 929 352 9 -a 929 127 5 -a 929 833 5 -a 929 757 5 -a 929 712 1 -a 929 399 9 -a 929 649 1 -a 929 727 1 -a 929 98 2 -a 929 797 4 -a 929 465 10 -a 929 965 7 -a 929 468 6 -a 929 687 4 -a 929 823 7 -a 929 477 4 -a 929 362 3 -a 929 619 4 -a 929 336 10 -a 929 32 9 -a 929 175 6 -a 929 253 10 -a 929 780 10 -a 929 412 8 -a 929 185 10 -a 929 299 7 -a 929 309 1 -a 929 493 7 -a 929 311 8 -a 929 197 1 -a 929 793 5 -a 929 663 9 -a 929 324 4 -a 929 602 3 -a 929 395 2 -a 929 11 9 -a 929 1000 7 -a 929 19 5 -a 929 737 10 -a 929 73 1 -a 929 816 5 -a 929 177 5 -a 929 13 9 -a 929 259 3 -a 929 864 6 -a 929 836 4 -a 929 735 3 -a 929 201 7 -a 929 430 3 -a 929 46 4 -a 929 233 4 -a 929 604 8 -a 929 299 6 -a 929 483 7 -a 929 286 5 -a 929 300 5 -a 929 976 6 -a 929 597 8 -a 929 496 1 -a 929 744 7 -a 929 235 8 -a 929 819 1 -a 929 321 6 -a 929 629 5 -a 929 830 1 -a 930 296 10 -a 930 648 3 -a 930 542 9 -a 930 369 1 -a 930 439 3 -a 930 719 4 -a 930 381 10 -a 930 697 2 -a 930 558 10 -a 930 192 6 -a 930 407 6 -a 930 758 6 -a 930 621 6 -a 930 452 5 -a 930 990 1 -a 930 201 3 -a 930 750 2 -a 930 977 9 -a 930 192 8 -a 930 209 4 -a 930 239 2 -a 930 491 6 -a 930 160 4 -a 930 835 6 -a 930 986 6 -a 930 903 9 -a 930 45 2 -a 930 781 2 -a 930 200 1 -a 930 673 3 -a 930 586 7 -a 930 495 6 -a 930 296 7 -a 930 103 4 -a 930 863 6 -a 930 734 6 -a 930 821 1 -a 930 220 1 -a 930 406 2 -a 930 354 3 -a 930 411 1 -a 930 812 4 -a 930 88 9 -a 930 8 6 -a 930 240 7 -a 930 53 10 -a 930 208 10 -a 930 989 10 -a 930 6 5 -a 930 399 8 -a 930 173 1 -a 930 244 10 -a 930 889 2 -a 930 332 10 -a 930 54 8 -a 930 850 4 -a 930 211 4 -a 930 98 9 -a 930 606 4 -a 930 410 4 -a 930 770 9 -a 930 167 7 -a 930 904 6 -a 930 42 9 -a 930 270 8 -a 930 743 3 -a 930 775 3 -a 930 66 9 -a 930 962 8 -a 930 157 4 -a 930 420 2 -a 930 348 5 -a 930 968 9 -a 930 507 6 -a 930 355 3 -a 930 183 1 -a 930 559 1 -a 930 562 6 -a 930 148 10 -a 930 564 3 -a 930 960 6 -a 930 320 1 -a 930 807 3 -a 930 824 9 -a 930 652 2 -a 930 860 10 -a 930 650 1 -a 930 862 7 -a 930 957 5 -a 930 231 2 -a 930 247 8 -a 930 703 9 -a 930 398 7 -a 930 126 1 -a 930 744 3 -a 930 667 9 -a 930 868 2 -a 930 494 3 -a 930 732 8 -a 930 805 7 -a 930 650 7 -a 930 127 6 -a 930 129 5 -a 930 594 10 -a 930 633 3 -a 930 483 8 -a 930 776 8 -a 930 168 9 -a 930 21 8 -a 931 923 10 -a 931 731 2 -a 931 980 9 -a 931 219 5 -a 931 514 10 -a 931 780 7 -a 931 870 3 -a 931 349 5 -a 931 405 3 -a 931 707 1 -a 931 282 1 -a 931 635 9 -a 931 953 7 -a 931 984 9 -a 931 8 4 -a 931 54 8 -a 931 703 6 -a 931 674 7 -a 931 922 5 -a 931 172 5 -a 931 382 7 -a 931 702 6 -a 931 822 2 -a 931 508 5 -a 931 830 1 -a 931 391 3 -a 931 117 3 -a 931 289 6 -a 931 142 9 -a 931 284 5 -a 931 309 1 -a 931 41 4 -a 931 264 2 -a 931 259 8 -a 931 503 3 -a 931 19 10 -a 931 104 4 -a 931 852 1 -a 931 423 8 -a 931 810 7 -a 931 109 4 -a 931 34 5 -a 931 738 9 -a 931 68 9 -a 931 41 5 -a 931 791 4 -a 931 770 3 -a 931 715 8 -a 931 688 3 -a 931 941 10 -a 931 72 2 -a 931 366 5 -a 931 738 3 -a 931 579 2 -a 931 171 7 -a 931 104 2 -a 931 695 10 -a 931 459 8 -a 931 246 3 -a 931 978 1 -a 931 767 7 -a 931 286 7 -a 931 968 3 -a 931 7 2 -a 931 544 7 -a 931 446 2 -a 931 25 4 -a 931 647 7 -a 931 273 5 -a 931 448 9 -a 931 432 5 -a 931 381 1 -a 931 481 2 -a 931 145 9 -a 931 448 10 -a 931 521 3 -a 931 935 4 -a 931 193 1 -a 931 211 2 -a 931 599 2 -a 931 110 8 -a 931 282 3 -a 931 964 7 -a 931 847 5 -a 931 861 6 -a 931 110 3 -a 931 951 2 -a 931 531 4 -a 931 569 3 -a 931 172 2 -a 932 485 4 -a 932 311 10 -a 932 457 6 -a 932 428 3 -a 932 317 9 -a 932 1000 2 -a 932 873 1 -a 932 342 9 -a 932 622 4 -a 932 122 7 -a 932 789 4 -a 932 29 2 -a 932 502 7 -a 932 245 5 -a 932 173 3 -a 932 950 1 -a 932 765 6 -a 932 83 7 -a 932 118 9 -a 932 976 10 -a 932 681 5 -a 932 227 3 -a 932 233 8 -a 932 620 5 -a 932 50 2 -a 932 69 1 -a 932 730 6 -a 932 1000 2 -a 932 600 9 -a 932 274 10 -a 932 147 1 -a 932 60 5 -a 932 584 1 -a 932 603 3 -a 932 487 5 -a 932 901 8 -a 932 578 3 -a 932 335 4 -a 932 218 4 -a 932 175 7 -a 932 456 1 -a 932 203 10 -a 932 958 10 -a 932 226 8 -a 932 375 9 -a 932 883 6 -a 932 990 6 -a 932 457 2 -a 932 1000 7 -a 932 941 7 -a 932 114 4 -a 932 203 2 -a 932 150 5 -a 932 733 7 -a 932 252 2 -a 932 218 7 -a 932 438 8 -a 932 227 3 -a 932 817 10 -a 932 711 10 -a 932 373 8 -a 932 876 6 -a 932 271 6 -a 932 975 5 -a 932 338 1 -a 932 147 1 -a 932 528 1 -a 932 673 8 -a 932 364 4 -a 932 702 2 -a 932 104 2 -a 932 345 3 -a 932 904 3 -a 932 37 1 -a 932 570 10 -a 932 254 6 -a 932 919 8 -a 932 535 6 -a 932 710 3 -a 932 895 8 -a 932 452 8 -a 932 823 1 -a 933 73 6 -a 933 601 6 -a 933 532 5 -a 933 324 10 -a 933 818 6 -a 933 969 5 -a 933 550 4 -a 933 611 5 -a 933 656 4 -a 933 922 7 -a 933 462 9 -a 933 926 5 -a 933 872 2 -a 933 800 10 -a 933 48 1 -a 933 375 4 -a 933 448 3 -a 933 411 5 -a 933 52 8 -a 933 551 5 -a 933 755 10 -a 933 955 2 -a 933 588 6 -a 933 300 1 -a 933 184 2 -a 933 482 5 -a 933 834 5 -a 933 893 7 -a 933 352 9 -a 933 261 9 -a 933 692 6 -a 933 424 6 -a 933 861 1 -a 933 199 1 -a 933 747 1 -a 933 655 3 -a 933 143 8 -a 933 272 10 -a 933 241 5 -a 933 798 7 -a 933 169 10 -a 933 702 2 -a 933 699 5 -a 933 16 3 -a 933 477 10 -a 933 746 9 -a 933 390 7 -a 933 924 2 -a 933 132 4 -a 933 441 9 -a 933 451 9 -a 933 886 6 -a 933 371 8 -a 933 14 6 -a 933 161 2 -a 933 554 9 -a 933 495 8 -a 933 995 9 -a 933 423 9 -a 933 847 2 -a 933 231 4 -a 933 90 2 -a 933 246 6 -a 933 68 10 -a 933 288 6 -a 933 993 4 -a 933 722 4 -a 933 430 7 -a 933 240 10 -a 933 962 4 -a 933 204 6 -a 933 409 7 -a 933 639 2 -a 933 902 4 -a 933 424 7 -a 933 92 7 -a 933 624 5 -a 933 814 6 -a 933 755 5 -a 933 230 4 -a 933 441 1 -a 933 617 4 -a 933 601 6 -a 933 454 8 -a 933 777 9 -a 933 130 4 -a 933 949 3 -a 933 747 2 -a 933 552 2 -a 934 771 6 -a 934 978 2 -a 934 641 5 -a 934 21 2 -a 934 928 3 -a 934 984 1 -a 934 742 6 -a 934 334 9 -a 934 200 2 -a 934 679 7 -a 934 537 6 -a 934 608 6 -a 934 293 6 -a 934 414 10 -a 934 7 3 -a 934 384 2 -a 934 13 5 -a 934 820 8 -a 934 375 8 -a 934 768 9 -a 934 26 9 -a 934 815 5 -a 934 360 8 -a 934 626 4 -a 934 245 7 -a 934 112 6 -a 934 755 9 -a 934 169 2 -a 934 859 8 -a 934 283 1 -a 934 939 6 -a 934 812 1 -a 934 923 5 -a 934 930 3 -a 934 832 2 -a 934 827 4 -a 934 890 7 -a 934 549 3 -a 934 136 7 -a 934 65 3 -a 934 203 10 -a 934 672 9 -a 934 672 5 -a 934 495 1 -a 934 61 1 -a 934 678 10 -a 934 879 2 -a 934 74 5 -a 934 474 9 -a 934 229 10 -a 934 841 5 -a 934 499 5 -a 934 19 8 -a 934 176 8 -a 934 100 3 -a 934 263 10 -a 934 287 6 -a 934 854 4 -a 934 431 8 -a 934 121 2 -a 934 112 6 -a 934 345 2 -a 934 932 8 -a 934 11 8 -a 934 251 2 -a 934 739 1 -a 934 837 10 -a 934 116 2 -a 934 263 10 -a 934 972 10 -a 934 180 3 -a 934 465 2 -a 934 619 10 -a 934 851 9 -a 934 960 2 -a 934 679 2 -a 934 504 5 -a 934 814 7 -a 934 752 8 -a 934 977 2 -a 934 18 6 -a 934 568 9 -a 934 451 7 -a 934 36 8 -a 934 743 1 -a 934 550 3 -a 934 299 2 -a 934 6 2 -a 934 380 3 -a 934 729 2 -a 934 126 10 -a 934 491 7 -a 934 50 5 -a 934 34 7 -a 934 501 8 -a 934 300 2 -a 934 772 2 -a 934 313 3 -a 934 415 9 -a 934 11 4 -a 934 260 8 -a 934 594 2 -a 934 475 10 -a 934 878 2 -a 934 420 8 -a 934 410 1 -a 934 533 3 -a 934 923 4 -a 934 199 3 -a 934 260 5 -a 934 876 4 -a 935 216 1 -a 935 828 10 -a 935 302 4 -a 935 252 4 -a 935 546 8 -a 935 852 2 -a 935 550 5 -a 935 551 9 -a 935 207 10 -a 935 254 6 -a 935 677 3 -a 935 697 7 -a 935 303 2 -a 935 710 2 -a 935 174 3 -a 935 602 2 -a 935 457 4 -a 935 486 7 -a 935 467 1 -a 935 746 7 -a 935 585 7 -a 935 942 5 -a 935 599 1 -a 935 327 4 -a 935 107 8 -a 935 903 1 -a 935 526 9 -a 935 367 10 -a 935 754 1 -a 935 741 3 -a 935 170 5 -a 935 31 8 -a 935 992 6 -a 935 715 9 -a 935 882 4 -a 935 517 10 -a 935 242 5 -a 935 64 5 -a 935 771 5 -a 935 918 4 -a 935 761 2 -a 935 49 8 -a 935 603 2 -a 935 934 7 -a 935 651 10 -a 935 35 6 -a 935 395 5 -a 935 642 8 -a 935 502 6 -a 935 116 4 -a 935 203 4 -a 935 419 5 -a 935 715 8 -a 935 182 5 -a 935 745 10 -a 935 821 2 -a 935 60 6 -a 935 246 10 -a 935 163 2 -a 935 813 4 -a 935 987 3 -a 935 332 3 -a 935 844 2 -a 935 954 9 -a 935 23 1 -a 935 701 6 -a 935 447 7 -a 935 264 6 -a 935 765 6 -a 935 193 3 -a 935 157 9 -a 935 501 4 -a 935 241 6 -a 935 759 8 -a 935 410 8 -a 935 891 1 -a 935 793 4 -a 935 804 6 -a 935 509 10 -a 935 270 7 -a 935 920 10 -a 935 711 4 -a 935 688 9 -a 935 610 8 -a 935 892 9 -a 935 409 9 -a 935 406 3 -a 935 952 8 -a 935 654 9 -a 935 569 9 -a 935 740 1 -a 935 616 6 -a 935 900 1 -a 935 559 6 -a 935 546 9 -a 935 922 7 -a 935 236 7 -a 935 992 1 -a 935 161 2 -a 935 1000 7 -a 935 160 10 -a 935 317 4 -a 935 476 6 -a 935 400 2 -a 935 51 10 -a 935 885 8 -a 936 267 3 -a 936 844 1 -a 936 664 8 -a 936 775 2 -a 936 89 8 -a 936 559 4 -a 936 461 10 -a 936 777 7 -a 936 144 5 -a 936 328 10 -a 936 161 7 -a 936 550 6 -a 936 255 1 -a 936 814 3 -a 936 94 3 -a 936 995 8 -a 936 406 2 -a 936 993 8 -a 936 529 5 -a 936 951 10 -a 936 891 10 -a 936 764 5 -a 936 918 9 -a 936 27 4 -a 936 739 2 -a 936 53 6 -a 936 344 7 -a 936 190 2 -a 936 452 3 -a 936 394 5 -a 936 50 2 -a 936 718 3 -a 936 213 8 -a 936 714 5 -a 936 468 8 -a 936 302 6 -a 936 248 1 -a 936 928 6 -a 936 54 5 -a 936 392 9 -a 936 232 9 -a 936 214 2 -a 936 941 2 -a 936 486 7 -a 936 3 10 -a 936 10 2 -a 936 456 7 -a 936 408 4 -a 936 985 6 -a 936 334 6 -a 936 868 3 -a 936 724 10 -a 936 227 1 -a 936 895 1 -a 936 439 5 -a 936 279 5 -a 936 214 5 -a 936 628 4 -a 936 731 6 -a 936 607 5 -a 936 678 8 -a 936 424 1 -a 936 820 1 -a 936 367 8 -a 936 892 9 -a 936 97 2 -a 936 614 1 -a 936 795 7 -a 936 150 3 -a 936 2 5 -a 936 363 1 -a 936 921 1 -a 936 488 4 -a 936 365 4 -a 936 930 8 -a 936 943 4 -a 936 773 9 -a 936 908 7 -a 936 903 6 -a 936 82 1 -a 936 751 4 -a 936 603 9 -a 936 309 8 -a 936 621 4 -a 936 17 9 -a 936 587 8 -a 936 834 4 -a 936 644 2 -a 936 293 6 -a 936 417 6 -a 936 297 6 -a 936 717 9 -a 936 212 2 -a 936 663 9 -a 936 584 1 -a 936 308 5 -a 936 253 5 -a 936 354 7 -a 936 457 10 -a 937 233 5 -a 937 356 2 -a 937 819 6 -a 937 130 1 -a 937 843 2 -a 937 159 4 -a 937 35 5 -a 937 761 9 -a 937 931 8 -a 937 942 1 -a 937 640 6 -a 937 669 7 -a 937 218 5 -a 937 297 10 -a 937 265 5 -a 937 234 6 -a 937 883 6 -a 937 75 1 -a 937 877 6 -a 937 152 5 -a 937 491 3 -a 937 150 7 -a 937 868 3 -a 937 702 7 -a 937 812 4 -a 937 427 10 -a 937 40 9 -a 937 780 7 -a 937 441 1 -a 937 273 10 -a 937 111 5 -a 937 235 1 -a 937 402 5 -a 937 953 5 -a 937 393 4 -a 937 436 4 -a 937 690 4 -a 937 300 9 -a 937 354 9 -a 937 305 8 -a 937 288 5 -a 937 522 5 -a 937 584 1 -a 937 262 3 -a 937 755 7 -a 937 442 8 -a 937 336 10 -a 937 607 1 -a 937 593 5 -a 937 826 9 -a 937 756 1 -a 937 436 7 -a 937 503 2 -a 937 544 9 -a 937 862 2 -a 937 487 10 -a 937 583 6 -a 937 618 1 -a 937 927 8 -a 937 855 7 -a 937 728 9 -a 937 137 2 -a 937 232 3 -a 937 657 4 -a 937 530 10 -a 937 668 9 -a 937 322 10 -a 937 829 4 -a 937 626 2 -a 937 92 3 -a 937 123 4 -a 937 675 1 -a 937 255 9 -a 937 877 5 -a 937 92 10 -a 937 591 3 -a 937 459 6 -a 937 685 7 -a 937 392 1 -a 937 191 9 -a 937 96 10 -a 937 895 3 -a 937 734 5 -a 937 958 2 -a 937 357 4 -a 937 292 6 -a 937 551 1 -a 937 260 4 -a 937 123 9 -a 937 254 7 -a 937 396 3 -a 937 354 8 -a 937 910 5 -a 937 925 5 -a 937 207 9 -a 937 729 10 -a 937 832 2 -a 937 820 1 -a 937 954 3 -a 937 470 5 -a 937 241 10 -a 937 806 1 -a 937 562 4 -a 937 831 4 -a 937 241 6 -a 937 222 10 -a 937 198 8 -a 937 431 2 -a 937 317 1 -a 937 68 3 -a 937 140 9 -a 937 250 9 -a 937 425 4 -a 937 431 5 -a 937 800 9 -a 937 684 6 -a 937 553 4 -a 938 30 8 -a 938 55 6 -a 938 907 8 -a 938 939 1 -a 938 980 6 -a 938 903 3 -a 938 122 6 -a 938 684 2 -a 938 896 7 -a 938 953 2 -a 938 480 8 -a 938 881 7 -a 938 883 8 -a 938 949 10 -a 938 97 3 -a 938 664 10 -a 938 486 3 -a 938 927 7 -a 938 904 4 -a 938 707 3 -a 938 101 10 -a 938 310 8 -a 938 168 1 -a 938 449 9 -a 938 249 1 -a 938 592 10 -a 938 880 9 -a 938 25 3 -a 938 251 3 -a 938 408 10 -a 938 54 10 -a 938 306 1 -a 938 290 7 -a 938 992 3 -a 938 261 10 -a 938 169 9 -a 938 89 7 -a 938 944 1 -a 938 40 10 -a 938 18 8 -a 938 399 1 -a 938 920 9 -a 938 900 7 -a 938 324 4 -a 938 539 4 -a 938 809 9 -a 938 919 8 -a 938 419 1 -a 938 492 10 -a 938 728 3 -a 938 491 3 -a 938 163 5 -a 938 153 3 -a 938 739 5 -a 938 754 7 -a 938 8 5 -a 938 763 2 -a 938 415 5 -a 938 816 2 -a 938 286 5 -a 938 705 3 -a 938 784 2 -a 938 546 7 -a 938 873 4 -a 938 872 10 -a 938 465 2 -a 938 912 10 -a 938 889 7 -a 938 864 9 -a 938 807 1 -a 938 764 5 -a 938 163 2 -a 938 799 3 -a 938 279 7 -a 938 971 2 -a 938 694 4 -a 938 697 2 -a 938 438 1 -a 938 688 1 -a 938 400 2 -a 938 928 2 -a 938 850 1 -a 938 552 2 -a 938 643 4 -a 938 580 5 -a 938 559 10 -a 938 381 8 -a 938 560 4 -a 938 974 6 -a 938 173 6 -a 938 845 6 -a 938 654 7 -a 938 956 7 -a 938 366 8 -a 938 502 4 -a 938 803 6 -a 938 830 4 -a 938 389 10 -a 938 668 3 -a 938 669 5 -a 938 171 3 -a 939 407 9 -a 939 831 4 -a 939 970 2 -a 939 685 2 -a 939 778 1 -a 939 639 10 -a 939 357 1 -a 939 191 10 -a 939 302 1 -a 939 757 4 -a 939 95 5 -a 939 128 6 -a 939 284 9 -a 939 737 4 -a 939 707 5 -a 939 843 1 -a 939 93 2 -a 939 242 5 -a 939 792 2 -a 939 265 8 -a 939 62 10 -a 939 421 4 -a 939 196 4 -a 939 427 6 -a 939 922 9 -a 939 999 9 -a 939 232 2 -a 939 286 6 -a 939 642 2 -a 939 901 10 -a 939 456 8 -a 939 24 6 -a 939 707 8 -a 939 401 2 -a 939 709 9 -a 939 460 3 -a 939 15 10 -a 939 41 9 -a 939 651 7 -a 939 317 9 -a 939 797 10 -a 939 745 2 -a 939 444 10 -a 939 57 6 -a 939 457 2 -a 939 126 5 -a 939 899 2 -a 939 549 10 -a 939 367 1 -a 939 666 10 -a 939 814 4 -a 939 428 2 -a 939 62 4 -a 939 854 3 -a 939 983 6 -a 939 983 8 -a 939 61 8 -a 939 244 1 -a 939 600 7 -a 939 961 10 -a 939 699 5 -a 939 624 9 -a 939 644 1 -a 939 76 7 -a 939 308 9 -a 939 79 10 -a 939 90 5 -a 939 348 6 -a 939 729 8 -a 939 406 6 -a 939 121 2 -a 939 449 2 -a 939 849 1 -a 939 177 6 -a 939 905 2 -a 939 974 4 -a 939 51 9 -a 939 430 2 -a 939 316 2 -a 939 716 10 -a 939 219 9 -a 939 743 3 -a 939 777 8 -a 939 203 9 -a 939 572 4 -a 939 735 5 -a 939 162 6 -a 939 633 7 -a 939 978 1 -a 939 761 7 -a 939 569 7 -a 939 652 8 -a 939 360 7 -a 939 188 3 -a 939 727 9 -a 939 667 10 -a 939 267 2 -a 939 817 4 -a 939 995 4 -a 939 198 9 -a 939 111 1 -a 939 420 5 -a 939 23 5 -a 939 287 2 -a 939 300 3 -a 939 996 2 -a 940 337 8 -a 940 729 2 -a 940 288 2 -a 940 28 4 -a 940 947 8 -a 940 6 8 -a 940 804 1 -a 940 126 3 -a 940 578 8 -a 940 514 8 -a 940 287 9 -a 940 186 3 -a 940 467 3 -a 940 23 6 -a 940 754 7 -a 940 94 1 -a 940 383 10 -a 940 942 8 -a 940 821 10 -a 940 25 5 -a 940 184 1 -a 940 613 8 -a 940 15 7 -a 940 154 9 -a 940 810 8 -a 940 125 6 -a 940 573 7 -a 940 832 10 -a 940 411 8 -a 940 873 6 -a 940 804 1 -a 940 747 3 -a 940 577 8 -a 940 67 6 -a 940 774 9 -a 940 500 7 -a 940 72 6 -a 940 553 2 -a 940 625 4 -a 940 649 9 -a 940 42 10 -a 940 911 6 -a 940 834 9 -a 940 508 10 -a 940 933 10 -a 940 564 9 -a 940 602 1 -a 940 291 1 -a 940 481 8 -a 940 398 5 -a 940 316 7 -a 940 664 1 -a 940 330 1 -a 940 817 5 -a 940 795 8 -a 940 455 6 -a 940 366 5 -a 940 603 10 -a 940 865 10 -a 940 214 2 -a 940 382 4 -a 940 588 3 -a 940 790 1 -a 940 448 3 -a 940 337 9 -a 940 265 7 -a 940 519 7 -a 940 890 4 -a 940 889 8 -a 940 144 7 -a 940 931 3 -a 940 775 8 -a 940 977 7 -a 940 415 7 -a 940 684 3 -a 940 516 5 -a 940 974 7 -a 940 996 10 -a 940 389 2 -a 940 265 1 -a 940 635 5 -a 940 374 1 -a 940 595 6 -a 940 428 3 -a 940 144 4 -a 940 25 9 -a 940 793 3 -a 940 746 6 -a 940 889 1 -a 940 103 3 -a 940 452 8 -a 940 771 9 -a 940 550 1 -a 940 789 8 -a 940 12 7 -a 941 45 9 -a 941 654 7 -a 941 900 7 -a 941 188 1 -a 941 560 3 -a 941 651 8 -a 941 140 7 -a 941 974 4 -a 941 310 2 -a 941 656 2 -a 941 965 5 -a 941 259 10 -a 941 627 8 -a 941 329 6 -a 941 524 1 -a 941 238 3 -a 941 702 2 -a 941 94 7 -a 941 665 8 -a 941 846 8 -a 941 118 4 -a 941 433 7 -a 941 567 7 -a 941 414 5 -a 941 670 10 -a 941 434 2 -a 941 160 7 -a 941 195 5 -a 941 198 6 -a 941 171 8 -a 941 239 5 -a 941 851 5 -a 941 47 6 -a 941 426 2 -a 941 386 8 -a 941 697 7 -a 941 566 10 -a 941 336 8 -a 941 197 6 -a 941 276 7 -a 941 240 2 -a 941 823 3 -a 941 605 9 -a 941 763 6 -a 941 36 5 -a 941 282 10 -a 941 856 4 -a 941 700 1 -a 941 103 10 -a 941 973 9 -a 941 108 8 -a 941 670 9 -a 941 955 6 -a 941 521 2 -a 941 315 7 -a 941 364 2 -a 941 681 4 -a 941 509 4 -a 941 561 2 -a 941 851 6 -a 941 748 6 -a 941 387 4 -a 941 897 5 -a 941 149 2 -a 941 772 9 -a 941 569 5 -a 941 714 9 -a 941 83 9 -a 941 550 1 -a 941 910 10 -a 941 359 6 -a 941 790 5 -a 941 709 7 -a 941 963 8 -a 941 528 9 -a 941 744 1 -a 941 220 2 -a 941 360 1 -a 941 420 1 -a 941 323 1 -a 941 308 5 -a 941 527 10 -a 941 992 6 -a 941 238 2 -a 941 24 10 -a 941 282 10 -a 941 601 7 -a 941 704 7 -a 941 790 9 -a 941 137 7 -a 941 530 1 -a 941 513 3 -a 941 523 8 -a 941 403 8 -a 941 662 6 -a 941 271 10 -a 941 971 8 -a 941 351 6 -a 941 353 4 -a 941 497 2 -a 941 237 5 -a 941 711 9 -a 941 262 3 -a 941 945 3 -a 941 649 3 -a 941 789 9 -a 941 664 9 -a 941 869 5 -a 941 124 9 -a 941 59 8 -a 941 167 4 -a 941 432 3 -a 941 586 10 -a 941 134 2 -a 941 669 8 -a 942 609 9 -a 942 415 1 -a 942 246 8 -a 942 288 6 -a 942 180 8 -a 942 382 4 -a 942 817 4 -a 942 693 1 -a 942 905 6 -a 942 195 6 -a 942 330 1 -a 942 151 7 -a 942 142 8 -a 942 680 7 -a 942 503 10 -a 942 638 6 -a 942 916 9 -a 942 190 3 -a 942 899 1 -a 942 836 10 -a 942 838 10 -a 942 663 10 -a 942 476 5 -a 942 682 1 -a 942 787 10 -a 942 534 5 -a 942 848 8 -a 942 194 7 -a 942 95 5 -a 942 981 3 -a 942 862 4 -a 942 703 8 -a 942 371 6 -a 942 83 4 -a 942 990 8 -a 942 551 1 -a 942 465 7 -a 942 783 8 -a 942 219 8 -a 942 345 6 -a 942 977 10 -a 942 548 4 -a 942 495 7 -a 942 94 4 -a 942 203 8 -a 942 997 2 -a 942 731 4 -a 942 95 6 -a 942 162 1 -a 942 605 7 -a 942 930 6 -a 942 1000 10 -a 942 244 5 -a 942 381 8 -a 942 657 10 -a 942 6 5 -a 942 915 2 -a 942 481 9 -a 942 199 6 -a 942 437 9 -a 942 36 3 -a 942 688 1 -a 942 808 6 -a 942 119 10 -a 942 653 7 -a 942 334 8 -a 942 583 1 -a 942 411 9 -a 942 552 7 -a 942 927 10 -a 942 364 1 -a 942 75 4 -a 942 397 8 -a 942 457 5 -a 942 277 4 -a 942 369 3 -a 942 164 9 -a 942 371 5 -a 942 531 5 -a 942 768 3 -a 942 277 9 -a 942 506 10 -a 942 657 5 -a 942 138 2 -a 942 547 1 -a 942 618 5 -a 942 190 7 -a 942 532 10 -a 942 31 2 -a 942 226 1 -a 942 195 2 -a 942 838 9 -a 942 344 9 -a 942 847 9 -a 942 147 2 -a 942 926 7 -a 942 234 9 -a 942 698 5 -a 942 828 4 -a 942 597 3 -a 942 772 8 -a 942 200 7 -a 942 29 10 -a 942 24 4 -a 942 568 2 -a 942 192 6 -a 942 395 4 -a 942 74 5 -a 942 960 1 -a 942 671 5 -a 942 579 9 -a 942 946 6 -a 942 303 4 -a 942 717 7 -a 942 938 1 -a 942 850 7 -a 942 310 10 -a 942 103 1 -a 942 357 3 -a 943 340 1 -a 943 328 4 -a 943 551 9 -a 943 153 9 -a 943 671 4 -a 943 373 3 -a 943 299 8 -a 943 572 7 -a 943 606 10 -a 943 996 1 -a 943 375 1 -a 943 178 3 -a 943 743 10 -a 943 574 4 -a 943 207 3 -a 943 767 5 -a 943 118 5 -a 943 398 2 -a 943 137 8 -a 943 191 9 -a 943 333 3 -a 943 807 3 -a 943 770 6 -a 943 255 1 -a 943 85 2 -a 943 462 4 -a 943 168 4 -a 943 934 7 -a 943 771 9 -a 943 270 2 -a 943 266 9 -a 943 87 7 -a 943 598 8 -a 943 816 10 -a 943 239 3 -a 943 244 1 -a 943 165 8 -a 943 538 7 -a 943 816 10 -a 943 770 8 -a 943 509 9 -a 943 166 7 -a 943 948 10 -a 943 228 8 -a 943 740 10 -a 943 130 5 -a 943 994 5 -a 943 857 8 -a 943 527 7 -a 943 106 8 -a 943 23 5 -a 943 860 7 -a 943 912 8 -a 943 792 4 -a 943 90 5 -a 943 996 4 -a 943 229 4 -a 943 257 3 -a 943 906 3 -a 943 1000 4 -a 943 526 2 -a 943 147 5 -a 943 62 7 -a 943 99 9 -a 943 963 2 -a 943 300 8 -a 943 343 9 -a 943 103 5 -a 943 837 3 -a 943 134 4 -a 943 872 8 -a 943 322 2 -a 943 299 9 -a 943 795 8 -a 943 549 5 -a 943 14 10 -a 943 924 6 -a 943 518 10 -a 943 870 5 -a 943 427 6 -a 943 623 10 -a 943 893 6 -a 943 262 2 -a 943 510 4 -a 943 660 6 -a 943 351 7 -a 943 481 7 -a 943 889 5 -a 943 607 10 -a 943 362 1 -a 943 864 2 -a 943 108 9 -a 943 509 3 -a 943 925 4 -a 943 207 9 -a 943 447 7 -a 943 200 2 -a 943 549 8 -a 943 549 8 -a 943 13 4 -a 943 682 1 -a 943 396 1 -a 943 334 2 -a 943 980 5 -a 943 167 10 -a 943 882 7 -a 943 994 1 -a 943 66 6 -a 943 375 10 -a 943 839 3 -a 943 492 1 -a 943 997 7 -a 943 707 7 -a 943 753 9 -a 943 482 3 -a 943 343 9 -a 943 79 4 -a 943 962 10 -a 943 207 2 -a 943 685 1 -a 943 300 5 -a 944 46 1 -a 944 793 4 -a 944 808 2 -a 944 970 8 -a 944 999 9 -a 944 230 7 -a 944 145 7 -a 944 523 5 -a 944 778 2 -a 944 157 1 -a 944 180 8 -a 944 149 3 -a 944 490 2 -a 944 135 1 -a 944 315 10 -a 944 347 1 -a 944 104 9 -a 944 381 3 -a 944 721 3 -a 944 943 7 -a 944 872 8 -a 944 693 5 -a 944 625 5 -a 944 601 5 -a 944 150 2 -a 944 967 1 -a 944 679 1 -a 944 88 10 -a 944 149 4 -a 944 340 5 -a 944 387 9 -a 944 194 9 -a 944 108 7 -a 944 170 7 -a 944 139 2 -a 944 82 10 -a 944 399 2 -a 944 284 7 -a 944 604 9 -a 944 152 2 -a 944 440 3 -a 944 783 6 -a 944 300 7 -a 944 930 1 -a 944 917 1 -a 944 615 9 -a 944 252 10 -a 944 995 5 -a 944 973 4 -a 944 939 2 -a 944 842 2 -a 944 641 2 -a 944 539 8 -a 944 418 9 -a 944 791 5 -a 944 482 9 -a 944 73 2 -a 944 878 6 -a 944 630 5 -a 944 412 8 -a 944 240 1 -a 944 824 9 -a 944 519 3 -a 944 409 10 -a 944 962 9 -a 944 600 8 -a 944 807 10 -a 944 221 6 -a 944 179 6 -a 944 958 4 -a 944 661 6 -a 944 961 5 -a 944 233 8 -a 944 566 10 -a 944 853 9 -a 944 847 3 -a 944 817 2 -a 944 849 3 -a 944 817 3 -a 944 765 10 -a 944 763 4 -a 944 635 2 -a 944 382 6 -a 944 278 7 -a 944 28 8 -a 944 148 3 -a 944 759 6 -a 944 100 1 -a 944 1 1 -a 944 364 3 -a 945 511 8 -a 945 240 2 -a 945 163 6 -a 945 5 1 -a 945 648 10 -a 945 101 8 -a 945 604 2 -a 945 430 7 -a 945 321 3 -a 945 782 4 -a 945 363 10 -a 945 981 3 -a 945 718 2 -a 945 595 5 -a 945 522 2 -a 945 547 7 -a 945 418 4 -a 945 315 6 -a 945 371 3 -a 945 210 10 -a 945 55 6 -a 945 110 3 -a 945 844 5 -a 945 436 7 -a 945 387 6 -a 945 872 1 -a 945 583 2 -a 945 121 4 -a 945 971 4 -a 945 583 8 -a 945 484 3 -a 945 458 6 -a 945 822 3 -a 945 647 10 -a 945 462 9 -a 945 445 9 -a 945 747 2 -a 945 42 9 -a 945 874 10 -a 945 43 2 -a 945 823 3 -a 945 212 2 -a 945 517 4 -a 945 807 5 -a 945 521 7 -a 945 39 9 -a 945 200 5 -a 945 835 2 -a 945 409 7 -a 945 409 4 -a 945 890 1 -a 945 518 4 -a 945 229 5 -a 945 301 3 -a 945 904 6 -a 945 76 5 -a 945 884 5 -a 945 22 1 -a 945 442 3 -a 945 484 2 -a 945 479 9 -a 945 240 5 -a 945 106 4 -a 945 941 1 -a 945 684 3 -a 945 852 4 -a 945 982 7 -a 945 534 10 -a 945 894 5 -a 945 780 4 -a 945 745 2 -a 945 893 2 -a 945 272 4 -a 945 527 4 -a 945 390 1 -a 945 310 6 -a 945 726 6 -a 945 200 5 -a 945 719 6 -a 945 111 10 -a 945 65 5 -a 945 212 1 -a 945 339 7 -a 945 366 9 -a 945 92 8 -a 945 414 8 -a 945 225 6 -a 945 91 3 -a 945 435 9 -a 945 666 6 -a 945 574 9 -a 945 914 10 -a 945 905 6 -a 945 679 3 -a 945 830 6 -a 945 565 8 -a 945 506 9 -a 945 787 4 -a 945 74 5 -a 945 376 6 -a 945 542 2 -a 945 818 2 -a 946 244 5 -a 946 814 1 -a 946 321 4 -a 946 633 6 -a 946 99 9 -a 946 22 7 -a 946 833 7 -a 946 817 10 -a 946 132 2 -a 946 897 1 -a 946 5 4 -a 946 470 3 -a 946 238 10 -a 946 96 6 -a 946 883 3 -a 946 462 4 -a 946 186 1 -a 946 294 1 -a 946 104 4 -a 946 760 4 -a 946 183 9 -a 946 414 4 -a 946 548 6 -a 946 920 6 -a 946 774 8 -a 946 621 7 -a 946 271 4 -a 946 291 8 -a 946 415 8 -a 946 514 7 -a 946 80 2 -a 946 735 2 -a 946 123 6 -a 946 179 4 -a 946 756 3 -a 946 955 9 -a 946 995 9 -a 946 888 5 -a 946 827 8 -a 946 999 5 -a 946 333 8 -a 946 41 8 -a 946 70 6 -a 946 192 2 -a 946 502 4 -a 946 256 7 -a 946 485 10 -a 946 605 3 -a 946 667 5 -a 946 589 4 -a 946 404 7 -a 946 654 7 -a 946 112 3 -a 946 299 8 -a 946 403 4 -a 946 733 3 -a 946 569 5 -a 946 693 4 -a 946 123 7 -a 946 59 9 -a 946 773 3 -a 946 857 2 -a 946 181 8 -a 946 951 8 -a 946 588 8 -a 946 111 10 -a 946 921 9 -a 946 451 7 -a 946 937 2 -a 946 896 9 -a 946 784 6 -a 946 977 1 -a 946 965 1 -a 946 975 5 -a 946 455 5 -a 946 196 1 -a 946 435 2 -a 946 35 7 -a 946 186 5 -a 946 77 3 -a 946 623 3 -a 946 590 7 -a 946 730 5 -a 946 735 3 -a 946 888 6 -a 946 108 8 -a 946 443 2 -a 946 433 9 -a 946 800 1 -a 946 565 7 -a 946 491 9 -a 946 548 1 -a 946 397 3 -a 946 671 7 -a 946 474 9 -a 946 984 10 -a 946 781 4 -a 946 371 6 -a 946 411 1 -a 946 693 4 -a 946 242 7 -a 946 170 1 -a 946 646 8 -a 946 182 8 -a 946 120 4 -a 946 76 10 -a 946 378 7 -a 946 554 5 -a 946 110 2 -a 946 563 3 -a 946 630 5 -a 946 733 2 -a 947 128 5 -a 947 335 7 -a 947 443 3 -a 947 442 2 -a 947 885 5 -a 947 424 3 -a 947 217 5 -a 947 425 4 -a 947 914 9 -a 947 765 5 -a 947 821 1 -a 947 560 2 -a 947 214 10 -a 947 780 4 -a 947 316 5 -a 947 584 2 -a 947 166 8 -a 947 825 7 -a 947 335 10 -a 947 629 9 -a 947 454 8 -a 947 704 9 -a 947 360 2 -a 947 814 1 -a 947 922 6 -a 947 612 6 -a 947 522 6 -a 947 26 6 -a 947 946 7 -a 947 964 10 -a 947 17 9 -a 947 363 5 -a 947 824 9 -a 947 440 1 -a 947 580 5 -a 947 224 6 -a 947 329 1 -a 947 320 5 -a 947 20 8 -a 947 888 10 -a 947 533 7 -a 947 799 8 -a 947 179 7 -a 947 93 3 -a 947 965 2 -a 947 162 9 -a 947 917 6 -a 947 275 6 -a 947 791 5 -a 947 899 2 -a 947 729 5 -a 947 470 6 -a 947 234 3 -a 947 711 3 -a 947 259 3 -a 947 132 4 -a 947 299 10 -a 947 780 2 -a 947 157 10 -a 947 220 9 -a 947 719 4 -a 947 173 2 -a 947 583 3 -a 947 518 9 -a 947 612 3 -a 947 138 7 -a 947 741 4 -a 947 940 2 -a 947 457 9 -a 947 760 6 -a 947 803 10 -a 947 989 4 -a 947 535 8 -a 947 981 2 -a 947 57 4 -a 947 475 2 -a 947 118 3 -a 947 974 7 -a 947 749 6 -a 947 908 10 -a 947 848 9 -a 947 453 4 -a 947 354 8 -a 947 58 10 -a 947 140 3 -a 947 612 1 -a 947 189 5 -a 947 438 6 -a 947 368 3 -a 947 345 7 -a 947 657 9 -a 948 62 8 -a 948 517 4 -a 948 215 3 -a 948 580 8 -a 948 104 1 -a 948 352 6 -a 948 296 7 -a 948 19 10 -a 948 808 6 -a 948 32 8 -a 948 821 4 -a 948 773 1 -a 948 566 3 -a 948 777 6 -a 948 829 1 -a 948 16 7 -a 948 894 9 -a 948 778 7 -a 948 764 2 -a 948 778 8 -a 948 602 9 -a 948 193 5 -a 948 107 3 -a 948 659 3 -a 948 332 3 -a 948 718 5 -a 948 847 3 -a 948 769 5 -a 948 61 8 -a 948 167 2 -a 948 401 10 -a 948 123 7 -a 948 683 8 -a 948 616 5 -a 948 702 6 -a 948 786 6 -a 948 967 6 -a 948 997 10 -a 948 804 1 -a 948 751 1 -a 948 4 2 -a 948 600 5 -a 948 499 10 -a 948 569 9 -a 948 352 2 -a 948 303 7 -a 948 584 7 -a 948 221 4 -a 948 57 10 -a 948 324 4 -a 948 998 2 -a 948 658 7 -a 948 516 7 -a 948 80 6 -a 948 292 7 -a 948 847 8 -a 948 798 7 -a 948 114 6 -a 948 591 8 -a 948 858 5 -a 948 280 8 -a 948 991 4 -a 948 980 10 -a 948 962 8 -a 948 582 8 -a 948 657 3 -a 948 723 8 -a 948 525 4 -a 948 630 6 -a 948 502 9 -a 948 251 10 -a 948 633 4 -a 948 77 1 -a 948 749 9 -a 948 178 7 -a 948 428 8 -a 948 27 6 -a 948 761 3 -a 948 648 1 -a 949 83 10 -a 949 60 1 -a 949 622 7 -a 949 740 2 -a 949 575 6 -a 949 701 8 -a 949 7 4 -a 949 397 10 -a 949 474 5 -a 949 120 4 -a 949 987 4 -a 949 308 2 -a 949 399 10 -a 949 954 3 -a 949 263 7 -a 949 336 10 -a 949 511 5 -a 949 920 3 -a 949 34 9 -a 949 11 5 -a 949 525 10 -a 949 535 4 -a 949 261 3 -a 949 133 4 -a 949 611 5 -a 949 310 4 -a 949 14 8 -a 949 12 8 -a 949 47 2 -a 949 662 1 -a 949 94 5 -a 949 106 6 -a 949 259 8 -a 949 834 7 -a 949 681 9 -a 949 959 7 -a 949 840 1 -a 949 53 10 -a 949 409 8 -a 949 960 1 -a 949 16 3 -a 949 716 9 -a 949 334 10 -a 949 969 6 -a 949 978 5 -a 949 670 10 -a 949 455 1 -a 949 873 8 -a 949 703 1 -a 949 466 8 -a 949 373 8 -a 949 214 3 -a 949 726 9 -a 949 506 8 -a 949 824 5 -a 949 711 3 -a 949 815 9 -a 949 838 9 -a 949 722 5 -a 949 861 7 -a 949 475 3 -a 949 815 5 -a 949 967 7 -a 949 733 8 -a 949 624 6 -a 949 623 2 -a 949 667 2 -a 949 440 2 -a 949 675 8 -a 949 51 9 -a 949 375 1 -a 949 690 10 -a 949 766 5 -a 949 708 6 -a 949 634 2 -a 949 720 3 -a 949 353 5 -a 949 65 9 -a 949 568 6 -a 949 32 5 -a 949 530 10 -a 949 941 1 -a 949 245 3 -a 949 231 6 -a 949 422 4 -a 949 44 7 -a 949 941 8 -a 949 212 2 -a 949 881 10 -a 949 638 1 -a 949 49 7 -a 949 331 1 -a 949 429 9 -a 949 39 6 -a 949 28 5 -a 949 613 8 -a 949 706 9 -a 950 467 2 -a 950 263 1 -a 950 756 1 -a 950 841 6 -a 950 953 10 -a 950 498 10 -a 950 525 6 -a 950 562 10 -a 950 193 5 -a 950 877 2 -a 950 626 10 -a 950 760 1 -a 950 908 7 -a 950 131 10 -a 950 676 10 -a 950 128 9 -a 950 362 7 -a 950 73 3 -a 950 172 7 -a 950 278 5 -a 950 285 9 -a 950 28 5 -a 950 916 7 -a 950 333 10 -a 950 359 7 -a 950 320 4 -a 950 323 2 -a 950 397 9 -a 950 347 5 -a 950 935 2 -a 950 78 2 -a 950 814 8 -a 950 173 10 -a 950 834 3 -a 950 630 7 -a 950 101 6 -a 950 307 5 -a 950 130 10 -a 950 663 1 -a 950 499 5 -a 950 264 8 -a 950 234 4 -a 950 890 7 -a 950 395 3 -a 950 910 6 -a 950 756 1 -a 950 982 6 -a 950 165 1 -a 950 9 7 -a 950 242 10 -a 950 192 1 -a 950 924 9 -a 950 574 9 -a 950 550 10 -a 950 219 4 -a 950 896 5 -a 950 947 3 -a 950 566 6 -a 950 806 8 -a 950 355 10 -a 950 979 8 -a 950 833 1 -a 950 984 8 -a 950 55 7 -a 950 115 5 -a 950 90 1 -a 950 717 6 -a 950 613 2 -a 950 72 7 -a 950 981 7 -a 950 847 8 -a 950 961 7 -a 950 351 8 -a 950 732 4 -a 950 954 9 -a 950 82 9 -a 950 689 1 -a 950 94 3 -a 950 90 2 -a 950 931 10 -a 950 286 10 -a 950 480 2 -a 950 835 4 -a 950 208 6 -a 950 352 4 -a 950 757 5 -a 950 773 1 -a 950 133 1 -a 950 757 9 -a 950 103 2 -a 950 87 7 -a 950 565 10 -a 950 63 6 -a 950 142 5 -a 950 680 9 -a 950 152 9 -a 950 858 2 -a 951 268 8 -a 951 223 1 -a 951 814 8 -a 951 90 3 -a 951 159 1 -a 951 140 5 -a 951 821 2 -a 951 89 2 -a 951 221 4 -a 951 486 8 -a 951 182 4 -a 951 311 8 -a 951 392 8 -a 951 467 6 -a 951 300 7 -a 951 871 4 -a 951 278 7 -a 951 507 1 -a 951 198 3 -a 951 10 8 -a 951 256 8 -a 951 331 3 -a 951 766 4 -a 951 358 6 -a 951 417 1 -a 951 307 2 -a 951 420 3 -a 951 558 3 -a 951 986 2 -a 951 571 5 -a 951 392 6 -a 951 229 8 -a 951 793 4 -a 951 181 10 -a 951 319 5 -a 951 952 2 -a 951 321 7 -a 951 115 9 -a 951 16 6 -a 951 541 10 -a 951 600 4 -a 951 197 2 -a 951 851 5 -a 951 991 2 -a 951 664 7 -a 951 126 6 -a 951 838 4 -a 951 941 10 -a 951 633 5 -a 951 11 1 -a 951 950 1 -a 951 888 3 -a 951 341 8 -a 951 692 10 -a 951 221 1 -a 951 758 9 -a 951 998 8 -a 951 641 7 -a 951 291 2 -a 951 959 9 -a 951 187 1 -a 951 682 3 -a 951 163 5 -a 951 980 9 -a 951 863 10 -a 951 481 3 -a 951 907 1 -a 951 159 4 -a 951 596 2 -a 951 922 1 -a 951 699 9 -a 951 171 8 -a 951 94 6 -a 951 526 9 -a 951 138 1 -a 951 757 2 -a 951 651 9 -a 951 975 8 -a 951 673 6 -a 951 259 8 -a 951 985 9 -a 951 599 8 -a 951 122 7 -a 951 302 6 -a 951 266 3 -a 951 343 9 -a 951 35 4 -a 951 239 5 -a 951 983 5 -a 951 325 2 -a 951 173 1 -a 951 145 10 -a 951 335 3 -a 951 100 6 -a 951 845 3 -a 951 816 3 -a 951 387 2 -a 951 903 2 -a 951 677 4 -a 951 557 10 -a 951 997 2 -a 951 178 1 -a 951 694 7 -a 951 729 8 -a 951 829 5 -a 951 644 4 -a 952 378 10 -a 952 63 9 -a 952 605 2 -a 952 976 4 -a 952 185 8 -a 952 906 4 -a 952 217 8 -a 952 527 10 -a 952 940 9 -a 952 455 10 -a 952 485 10 -a 952 240 3 -a 952 627 10 -a 952 629 1 -a 952 222 3 -a 952 961 6 -a 952 729 8 -a 952 42 10 -a 952 752 6 -a 952 710 4 -a 952 20 3 -a 952 114 7 -a 952 589 8 -a 952 697 8 -a 952 671 4 -a 952 561 3 -a 952 874 5 -a 952 340 7 -a 952 265 5 -a 952 678 5 -a 952 984 1 -a 952 642 9 -a 952 741 9 -a 952 564 1 -a 952 593 8 -a 952 925 8 -a 952 445 7 -a 952 809 5 -a 952 427 10 -a 952 360 9 -a 952 239 10 -a 952 911 3 -a 952 599 8 -a 952 865 1 -a 952 515 7 -a 952 821 5 -a 952 802 1 -a 952 219 1 -a 952 862 1 -a 952 529 5 -a 952 929 5 -a 952 882 5 -a 952 643 7 -a 952 493 4 -a 952 554 5 -a 952 289 2 -a 952 29 5 -a 952 403 9 -a 952 628 6 -a 952 293 8 -a 952 57 10 -a 952 587 8 -a 952 935 6 -a 952 797 5 -a 952 126 8 -a 952 503 8 -a 952 697 2 -a 952 570 4 -a 952 288 2 -a 952 99 4 -a 952 929 3 -a 952 526 8 -a 952 504 7 -a 952 367 7 -a 952 499 8 -a 952 300 6 -a 952 144 6 -a 952 718 10 -a 952 137 1 -a 952 672 4 -a 952 622 3 -a 952 290 7 -a 953 90 9 -a 953 547 3 -a 953 578 5 -a 953 118 10 -a 953 950 4 -a 953 182 7 -a 953 410 10 -a 953 768 10 -a 953 320 1 -a 953 778 3 -a 953 894 1 -a 953 823 8 -a 953 450 1 -a 953 439 5 -a 953 86 7 -a 953 548 10 -a 953 344 6 -a 953 611 3 -a 953 532 2 -a 953 847 8 -a 953 977 3 -a 953 6 2 -a 953 122 9 -a 953 96 7 -a 953 723 2 -a 953 258 3 -a 953 768 7 -a 953 320 3 -a 953 252 5 -a 953 33 8 -a 953 409 1 -a 953 798 1 -a 953 611 2 -a 953 526 6 -a 953 723 6 -a 953 792 2 -a 953 936 1 -a 953 704 7 -a 953 535 3 -a 953 231 8 -a 953 457 3 -a 953 404 4 -a 953 29 5 -a 953 906 10 -a 953 843 9 -a 953 114 1 -a 953 429 9 -a 953 162 9 -a 953 725 5 -a 953 960 5 -a 953 677 5 -a 953 966 10 -a 953 105 10 -a 953 773 8 -a 953 664 10 -a 953 362 5 -a 953 516 10 -a 953 984 9 -a 953 613 4 -a 953 548 7 -a 953 368 6 -a 953 387 1 -a 953 134 10 -a 953 894 2 -a 953 85 5 -a 953 925 3 -a 953 805 4 -a 953 789 6 -a 953 436 3 -a 953 11 3 -a 953 221 10 -a 953 839 7 -a 953 40 8 -a 953 103 7 -a 953 657 10 -a 953 153 4 -a 953 531 3 -a 953 818 8 -a 953 877 7 -a 953 467 2 -a 953 801 3 -a 953 530 5 -a 953 408 8 -a 953 905 8 -a 953 278 6 -a 953 47 1 -a 953 243 9 -a 953 793 10 -a 954 6 4 -a 954 855 8 -a 954 316 7 -a 954 374 7 -a 954 217 2 -a 954 450 9 -a 954 243 4 -a 954 302 5 -a 954 350 5 -a 954 23 2 -a 954 66 10 -a 954 785 8 -a 954 33 4 -a 954 286 7 -a 954 600 6 -a 954 72 4 -a 954 388 8 -a 954 232 8 -a 954 225 7 -a 954 919 7 -a 954 26 3 -a 954 77 6 -a 954 361 9 -a 954 826 7 -a 954 606 8 -a 954 768 1 -a 954 707 5 -a 954 883 5 -a 954 814 4 -a 954 949 10 -a 954 651 1 -a 954 820 10 -a 954 779 7 -a 954 967 7 -a 954 169 7 -a 954 996 10 -a 954 392 7 -a 954 411 2 -a 954 273 4 -a 954 741 1 -a 954 433 5 -a 954 338 8 -a 954 502 7 -a 954 465 5 -a 954 623 2 -a 954 77 2 -a 954 537 9 -a 954 308 6 -a 954 761 9 -a 954 905 3 -a 954 333 1 -a 954 837 2 -a 954 241 4 -a 954 135 10 -a 954 419 9 -a 954 841 10 -a 954 277 1 -a 954 797 2 -a 954 765 7 -a 954 928 7 -a 954 592 3 -a 954 519 2 -a 954 870 3 -a 954 760 1 -a 954 490 4 -a 954 237 9 -a 954 146 4 -a 954 762 6 -a 954 977 10 -a 954 578 2 -a 954 75 7 -a 954 454 9 -a 954 19 3 -a 954 698 10 -a 954 530 4 -a 954 555 1 -a 954 684 3 -a 954 838 10 -a 954 291 3 -a 954 564 9 -a 954 146 2 -a 954 103 9 -a 954 804 4 -a 954 280 6 -a 954 521 7 -a 954 787 7 -a 954 96 3 -a 954 798 5 -a 954 559 2 -a 954 860 4 -a 954 701 1 -a 954 127 4 -a 954 355 5 -a 954 546 2 -a 954 886 4 -a 954 844 10 -a 955 782 5 -a 955 8 5 -a 955 582 2 -a 955 734 8 -a 955 585 4 -a 955 656 5 -a 955 164 10 -a 955 603 4 -a 955 329 1 -a 955 693 2 -a 955 133 8 -a 955 506 2 -a 955 423 6 -a 955 551 10 -a 955 652 7 -a 955 526 6 -a 955 330 1 -a 955 931 8 -a 955 22 7 -a 955 92 3 -a 955 3 7 -a 955 819 5 -a 955 651 9 -a 955 862 8 -a 955 495 6 -a 955 777 5 -a 955 192 3 -a 955 16 4 -a 955 638 1 -a 955 12 2 -a 955 797 6 -a 955 645 1 -a 955 593 1 -a 955 507 2 -a 955 206 3 -a 955 224 2 -a 955 670 3 -a 955 808 1 -a 955 553 8 -a 955 338 9 -a 955 941 2 -a 955 540 7 -a 955 844 10 -a 955 339 2 -a 955 67 8 -a 955 471 4 -a 955 864 8 -a 955 396 1 -a 955 377 10 -a 955 886 10 -a 955 488 8 -a 955 379 6 -a 955 680 3 -a 955 114 8 -a 955 217 4 -a 955 151 5 -a 955 890 5 -a 955 408 5 -a 955 166 2 -a 955 503 1 -a 955 419 8 -a 955 963 6 -a 955 124 2 -a 955 445 2 -a 955 329 5 -a 955 211 5 -a 955 90 5 -a 955 112 2 -a 955 763 6 -a 955 427 10 -a 955 28 5 -a 955 278 10 -a 955 246 8 -a 955 367 6 -a 955 344 4 -a 955 716 10 -a 955 206 5 -a 955 740 4 -a 955 69 1 -a 955 67 2 -a 955 203 4 -a 955 447 8 -a 955 747 7 -a 955 316 5 -a 955 663 10 -a 955 897 4 -a 955 181 9 -a 955 47 8 -a 955 38 9 -a 955 683 5 -a 955 465 10 -a 955 1000 10 -a 955 806 7 -a 955 452 6 -a 955 420 9 -a 955 110 5 -a 955 662 3 -a 955 509 3 -a 955 222 10 -a 955 400 6 -a 955 936 4 -a 955 249 6 -a 955 677 8 -a 955 157 9 -a 955 615 9 -a 955 873 3 -a 955 821 1 -a 955 736 3 -a 955 941 10 -a 955 887 4 -a 955 938 7 -a 956 363 8 -a 956 609 5 -a 956 229 3 -a 956 2 1 -a 956 481 8 -a 956 409 10 -a 956 48 6 -a 956 519 8 -a 956 67 6 -a 956 512 1 -a 956 494 5 -a 956 873 9 -a 956 963 6 -a 956 914 9 -a 956 982 8 -a 956 600 9 -a 956 398 10 -a 956 179 4 -a 956 999 5 -a 956 309 10 -a 956 428 3 -a 956 652 9 -a 956 466 3 -a 956 18 3 -a 956 648 4 -a 956 314 9 -a 956 838 7 -a 956 359 4 -a 956 230 8 -a 956 701 4 -a 956 272 3 -a 956 592 4 -a 956 285 5 -a 956 500 10 -a 956 593 2 -a 956 766 4 -a 956 908 3 -a 956 640 8 -a 956 260 8 -a 956 974 1 -a 956 128 3 -a 956 753 10 -a 956 822 3 -a 956 66 10 -a 956 642 10 -a 956 780 9 -a 956 666 7 -a 956 16 4 -a 956 958 1 -a 956 640 7 -a 956 324 6 -a 956 361 6 -a 956 267 1 -a 956 789 5 -a 956 379 7 -a 956 914 4 -a 956 78 7 -a 956 192 3 -a 956 248 3 -a 956 307 1 -a 956 892 1 -a 956 519 5 -a 956 899 7 -a 956 153 1 -a 956 467 9 -a 956 918 3 -a 956 901 6 -a 956 83 9 -a 956 153 5 -a 956 851 9 -a 956 210 4 -a 956 905 6 -a 956 648 10 -a 956 275 2 -a 956 523 6 -a 956 403 5 -a 956 940 7 -a 956 538 1 -a 956 337 3 -a 956 556 8 -a 956 861 2 -a 956 697 8 -a 956 822 8 -a 956 626 5 -a 956 51 10 -a 956 712 9 -a 956 703 1 -a 956 243 8 -a 956 959 10 -a 956 110 10 -a 956 454 7 -a 956 884 5 -a 956 262 4 -a 956 447 3 -a 956 326 3 -a 956 155 4 -a 956 324 6 -a 956 408 1 -a 956 307 1 -a 956 150 8 -a 956 617 2 -a 956 188 10 -a 956 797 3 -a 956 892 2 -a 956 710 4 -a 956 176 9 -a 956 807 10 -a 957 223 2 -a 957 512 5 -a 957 338 3 -a 957 59 6 -a 957 184 9 -a 957 136 9 -a 957 684 5 -a 957 235 2 -a 957 847 5 -a 957 363 5 -a 957 477 9 -a 957 781 10 -a 957 348 4 -a 957 586 9 -a 957 210 5 -a 957 207 2 -a 957 848 4 -a 957 657 1 -a 957 532 8 -a 957 980 10 -a 957 940 1 -a 957 285 9 -a 957 105 7 -a 957 532 3 -a 957 472 8 -a 957 901 9 -a 957 399 5 -a 957 157 4 -a 957 52 4 -a 957 182 7 -a 957 379 7 -a 957 563 10 -a 957 519 8 -a 957 437 7 -a 957 747 10 -a 957 654 7 -a 957 97 2 -a 957 981 7 -a 957 476 3 -a 957 459 8 -a 957 433 2 -a 957 233 9 -a 957 806 3 -a 957 442 4 -a 957 841 10 -a 957 74 2 -a 957 519 9 -a 957 819 6 -a 957 29 3 -a 957 434 4 -a 957 79 10 -a 957 133 5 -a 957 966 1 -a 957 550 4 -a 957 10 5 -a 957 340 3 -a 957 706 5 -a 957 61 2 -a 957 521 1 -a 957 60 4 -a 957 624 4 -a 957 16 6 -a 957 496 6 -a 957 346 2 -a 957 669 9 -a 957 592 1 -a 957 302 10 -a 957 121 3 -a 957 26 6 -a 957 734 6 -a 957 353 5 -a 957 831 7 -a 957 727 1 -a 957 794 8 -a 957 818 6 -a 957 544 4 -a 957 868 8 -a 957 313 8 -a 957 338 9 -a 957 896 10 -a 957 746 8 -a 957 416 4 -a 957 5 9 -a 957 687 2 -a 957 965 9 -a 957 14 6 -a 957 3 3 -a 957 646 6 -a 957 74 3 -a 958 523 8 -a 958 705 6 -a 958 697 1 -a 958 538 5 -a 958 176 10 -a 958 18 5 -a 958 183 2 -a 958 768 1 -a 958 319 8 -a 958 303 9 -a 958 793 5 -a 958 28 2 -a 958 655 6 -a 958 600 9 -a 958 755 1 -a 958 424 8 -a 958 393 7 -a 958 274 2 -a 958 267 4 -a 958 705 5 -a 958 611 4 -a 958 139 6 -a 958 427 9 -a 958 2 8 -a 958 143 7 -a 958 89 2 -a 958 966 2 -a 958 156 2 -a 958 91 3 -a 958 587 2 -a 958 229 9 -a 958 614 10 -a 958 267 8 -a 958 926 4 -a 958 127 9 -a 958 442 8 -a 958 943 4 -a 958 309 2 -a 958 185 9 -a 958 238 1 -a 958 611 6 -a 958 978 9 -a 958 265 9 -a 958 241 1 -a 958 553 1 -a 958 665 7 -a 958 945 1 -a 958 268 8 -a 958 931 3 -a 958 626 10 -a 958 878 7 -a 958 45 2 -a 958 28 3 -a 958 879 5 -a 958 187 10 -a 958 116 6 -a 958 820 6 -a 958 342 10 -a 958 207 5 -a 958 382 10 -a 958 571 2 -a 958 820 2 -a 958 648 5 -a 958 472 10 -a 958 946 10 -a 958 66 5 -a 958 390 10 -a 958 231 9 -a 958 250 6 -a 958 627 10 -a 958 841 3 -a 958 203 4 -a 958 892 10 -a 958 58 7 -a 958 755 1 -a 958 886 1 -a 958 722 6 -a 958 676 7 -a 958 130 1 -a 958 628 8 -a 958 277 8 -a 958 673 2 -a 958 304 1 -a 958 862 10 -a 958 859 4 -a 958 419 2 -a 958 657 8 -a 958 177 9 -a 958 625 5 -a 958 15 7 -a 958 747 1 -a 959 420 5 -a 959 662 2 -a 959 194 1 -a 959 342 5 -a 959 727 2 -a 959 583 6 -a 959 572 4 -a 959 977 5 -a 959 186 6 -a 959 388 5 -a 959 155 5 -a 959 53 3 -a 959 445 10 -a 959 910 5 -a 959 938 1 -a 959 142 5 -a 959 561 5 -a 959 43 10 -a 959 770 5 -a 959 837 8 -a 959 26 10 -a 959 418 2 -a 959 116 10 -a 959 887 7 -a 959 252 6 -a 959 534 4 -a 959 519 10 -a 959 428 1 -a 959 135 10 -a 959 533 10 -a 959 150 6 -a 959 554 10 -a 959 171 6 -a 959 343 8 -a 959 895 2 -a 959 897 5 -a 959 926 1 -a 959 442 8 -a 959 849 5 -a 959 87 9 -a 959 830 9 -a 959 139 1 -a 959 250 9 -a 959 889 7 -a 959 52 1 -a 959 392 3 -a 959 425 2 -a 959 95 10 -a 959 137 8 -a 959 237 2 -a 959 120 4 -a 959 554 2 -a 959 352 2 -a 959 805 7 -a 959 885 9 -a 959 500 9 -a 959 209 9 -a 959 9 8 -a 959 358 9 -a 959 549 3 -a 959 179 10 -a 959 701 8 -a 959 419 8 -a 959 51 2 -a 959 602 5 -a 959 861 6 -a 959 900 6 -a 959 688 5 -a 959 666 6 -a 959 879 6 -a 959 826 8 -a 959 915 7 -a 959 743 3 -a 959 877 9 -a 959 282 6 -a 959 143 4 -a 959 971 2 -a 959 418 8 -a 959 379 10 -a 959 66 8 -a 959 971 2 -a 959 730 3 -a 959 47 2 -a 959 752 1 -a 959 590 9 -a 959 547 8 -a 959 960 2 -a 959 585 8 -a 959 555 10 -a 959 293 4 -a 959 109 7 -a 959 733 1 -a 959 993 9 -a 959 527 10 -a 959 783 9 -a 959 570 2 -a 959 363 7 -a 959 658 7 -a 959 233 5 -a 959 4 7 -a 959 512 4 -a 959 34 1 -a 959 919 1 -a 959 230 5 -a 959 911 5 -a 959 176 2 -a 959 372 2 -a 959 857 5 -a 959 594 10 -a 959 750 5 -a 959 923 6 -a 960 540 5 -a 960 455 7 -a 960 969 8 -a 960 267 3 -a 960 21 3 -a 960 491 7 -a 960 202 1 -a 960 605 1 -a 960 21 8 -a 960 495 4 -a 960 713 7 -a 960 753 4 -a 960 463 7 -a 960 215 5 -a 960 512 3 -a 960 9 7 -a 960 578 7 -a 960 145 2 -a 960 241 6 -a 960 581 5 -a 960 657 10 -a 960 275 10 -a 960 475 9 -a 960 886 5 -a 960 161 1 -a 960 651 2 -a 960 234 3 -a 960 220 1 -a 960 983 1 -a 960 915 3 -a 960 759 8 -a 960 414 4 -a 960 860 10 -a 960 2 2 -a 960 434 8 -a 960 326 1 -a 960 203 6 -a 960 14 5 -a 960 347 8 -a 960 697 6 -a 960 726 2 -a 960 75 9 -a 960 136 5 -a 960 940 1 -a 960 586 9 -a 960 144 10 -a 960 493 4 -a 960 731 10 -a 960 384 2 -a 960 50 6 -a 960 363 10 -a 960 658 2 -a 960 524 9 -a 960 224 2 -a 960 818 6 -a 960 150 2 -a 960 457 3 -a 960 811 1 -a 960 369 3 -a 960 416 2 -a 960 701 5 -a 960 104 9 -a 960 829 3 -a 960 536 6 -a 960 105 8 -a 960 238 3 -a 960 862 1 -a 960 307 3 -a 960 251 3 -a 960 184 9 -a 960 976 3 -a 960 258 5 -a 960 115 4 -a 960 891 2 -a 960 844 5 -a 960 258 10 -a 960 360 10 -a 960 550 2 -a 960 641 6 -a 960 409 4 -a 960 912 7 -a 960 275 1 -a 960 932 3 -a 960 111 5 -a 960 68 9 -a 960 58 8 -a 960 568 9 -a 960 878 4 -a 960 426 2 -a 960 983 6 -a 960 555 10 -a 960 529 7 -a 960 787 9 -a 960 66 10 -a 960 633 10 -a 960 927 6 -a 960 940 5 -a 960 250 4 -a 960 86 2 -a 960 919 10 -a 960 201 10 -a 960 344 4 -a 960 9 7 -a 961 67 1 -a 961 163 4 -a 961 266 8 -a 961 426 1 -a 961 712 4 -a 961 906 7 -a 961 834 6 -a 961 599 4 -a 961 156 5 -a 961 742 8 -a 961 709 2 -a 961 224 7 -a 961 799 1 -a 961 252 7 -a 961 77 10 -a 961 200 8 -a 961 210 10 -a 961 631 6 -a 961 729 10 -a 961 996 9 -a 961 697 9 -a 961 337 6 -a 961 995 9 -a 961 599 9 -a 961 252 7 -a 961 220 5 -a 961 685 4 -a 961 146 10 -a 961 420 9 -a 961 4 2 -a 961 154 10 -a 961 487 5 -a 961 166 8 -a 961 419 5 -a 961 912 9 -a 961 877 4 -a 961 301 3 -a 961 722 10 -a 961 451 9 -a 961 456 2 -a 961 439 7 -a 961 135 2 -a 961 679 10 -a 961 213 2 -a 961 387 10 -a 961 756 10 -a 961 412 7 -a 961 596 2 -a 961 362 5 -a 961 116 3 -a 961 568 4 -a 961 34 5 -a 961 453 2 -a 961 538 6 -a 961 633 5 -a 961 704 6 -a 961 758 2 -a 961 293 10 -a 961 850 10 -a 961 153 9 -a 961 296 5 -a 961 639 1 -a 961 461 2 -a 961 398 6 -a 961 527 2 -a 961 313 3 -a 961 698 3 -a 961 224 2 -a 961 763 1 -a 961 129 7 -a 961 662 2 -a 961 897 6 -a 961 808 8 -a 961 874 1 -a 961 259 10 -a 961 539 9 -a 961 261 7 -a 961 855 9 -a 961 900 2 -a 961 377 8 -a 961 398 7 -a 961 934 3 -a 961 829 6 -a 961 935 5 -a 961 542 4 -a 961 508 2 -a 961 668 8 -a 961 834 3 -a 961 333 5 -a 961 821 5 -a 961 105 6 -a 961 312 2 -a 961 435 4 -a 961 565 2 -a 961 709 3 -a 961 961 1 -a 961 877 3 -a 961 382 9 -a 961 160 2 -a 961 615 6 -a 962 510 4 -a 962 821 4 -a 962 487 10 -a 962 293 3 -a 962 670 2 -a 962 746 5 -a 962 831 6 -a 962 931 5 -a 962 576 2 -a 962 707 10 -a 962 283 9 -a 962 973 10 -a 962 616 9 -a 962 87 5 -a 962 883 9 -a 962 133 10 -a 962 594 7 -a 962 527 10 -a 962 966 7 -a 962 927 5 -a 962 323 5 -a 962 46 7 -a 962 214 1 -a 962 757 10 -a 962 610 2 -a 962 922 3 -a 962 694 3 -a 962 462 1 -a 962 279 10 -a 962 853 10 -a 962 52 7 -a 962 788 5 -a 962 650 7 -a 962 538 2 -a 962 57 3 -a 962 295 6 -a 962 259 10 -a 962 887 7 -a 962 201 7 -a 962 834 6 -a 962 569 1 -a 962 483 10 -a 962 782 2 -a 962 160 10 -a 962 569 9 -a 962 641 8 -a 962 292 8 -a 962 139 3 -a 962 143 9 -a 962 233 8 -a 962 41 5 -a 962 465 9 -a 962 278 1 -a 962 254 4 -a 962 197 7 -a 962 887 9 -a 962 151 4 -a 962 890 2 -a 962 324 5 -a 962 429 2 -a 962 719 7 -a 962 375 5 -a 962 192 7 -a 962 344 2 -a 962 913 10 -a 962 248 9 -a 962 638 1 -a 962 147 2 -a 962 111 6 -a 962 839 10 -a 962 981 4 -a 962 679 10 -a 962 297 2 -a 962 738 8 -a 962 839 2 -a 962 866 2 -a 962 354 9 -a 962 106 3 -a 962 496 5 -a 962 339 9 -a 962 20 6 -a 962 960 4 -a 962 616 10 -a 962 273 7 -a 962 133 5 -a 962 479 3 -a 962 423 6 -a 962 802 3 -a 962 851 7 -a 962 716 2 -a 962 153 5 -a 962 18 7 -a 962 35 1 -a 962 41 8 -a 962 266 3 -a 962 673 7 -a 962 187 8 -a 962 376 10 -a 962 487 6 -a 962 143 6 -a 962 30 5 -a 962 783 3 -a 962 881 2 -a 962 868 2 -a 963 624 8 -a 963 210 4 -a 963 974 3 -a 963 603 1 -a 963 706 3 -a 963 288 6 -a 963 622 3 -a 963 641 3 -a 963 903 2 -a 963 894 5 -a 963 773 8 -a 963 357 2 -a 963 292 1 -a 963 771 7 -a 963 135 4 -a 963 118 4 -a 963 462 8 -a 963 287 1 -a 963 136 10 -a 963 497 2 -a 963 327 4 -a 963 401 9 -a 963 145 4 -a 963 513 1 -a 963 776 6 -a 963 631 3 -a 963 656 8 -a 963 805 4 -a 963 389 10 -a 963 512 9 -a 963 649 10 -a 963 721 8 -a 963 598 1 -a 963 591 1 -a 963 402 9 -a 963 885 2 -a 963 189 3 -a 963 19 2 -a 963 763 2 -a 963 58 4 -a 963 791 2 -a 963 96 7 -a 963 350 8 -a 963 537 5 -a 963 230 7 -a 963 467 7 -a 963 999 6 -a 963 516 5 -a 963 602 10 -a 963 471 2 -a 963 842 10 -a 963 615 4 -a 963 330 10 -a 963 753 10 -a 963 221 6 -a 963 985 9 -a 963 534 9 -a 963 609 8 -a 963 472 2 -a 963 158 6 -a 963 597 9 -a 963 169 2 -a 963 755 4 -a 963 164 7 -a 963 570 7 -a 963 615 1 -a 963 352 9 -a 963 588 6 -a 963 353 10 -a 963 409 5 -a 963 355 6 -a 963 448 8 -a 963 758 7 -a 963 891 4 -a 963 677 5 -a 963 201 3 -a 963 865 6 -a 963 168 8 -a 963 802 10 -a 963 311 3 -a 963 780 10 -a 963 925 7 -a 963 315 3 -a 963 508 3 -a 963 121 9 -a 963 275 3 -a 963 17 7 -a 963 730 2 -a 963 747 7 -a 963 174 4 -a 963 302 2 -a 963 915 10 -a 963 928 3 -a 963 465 6 -a 963 460 1 -a 963 518 3 -a 964 816 10 -a 964 24 9 -a 964 871 5 -a 964 201 3 -a 964 378 8 -a 964 294 1 -a 964 958 9 -a 964 244 10 -a 964 971 4 -a 964 134 6 -a 964 85 10 -a 964 114 3 -a 964 936 2 -a 964 395 2 -a 964 99 9 -a 964 691 3 -a 964 296 5 -a 964 413 10 -a 964 174 4 -a 964 416 5 -a 964 687 1 -a 964 191 8 -a 964 121 9 -a 964 409 6 -a 964 364 6 -a 964 423 3 -a 964 299 10 -a 964 268 9 -a 964 887 8 -a 964 759 3 -a 964 785 9 -a 964 679 10 -a 964 782 4 -a 964 631 10 -a 964 879 3 -a 964 135 1 -a 964 925 7 -a 964 812 10 -a 964 378 10 -a 964 871 1 -a 964 946 6 -a 964 462 9 -a 964 984 4 -a 964 857 4 -a 964 857 2 -a 964 58 2 -a 964 523 2 -a 964 128 10 -a 964 470 5 -a 964 696 7 -a 964 543 4 -a 964 133 5 -a 964 886 6 -a 964 664 5 -a 964 541 7 -a 964 226 3 -a 964 62 7 -a 964 840 9 -a 964 493 3 -a 964 948 3 -a 964 574 2 -a 964 253 5 -a 964 602 2 -a 964 331 6 -a 964 884 2 -a 964 456 3 -a 964 465 7 -a 964 784 5 -a 964 244 3 -a 964 842 3 -a 964 630 7 -a 964 165 7 -a 964 280 9 -a 964 589 4 -a 964 112 6 -a 964 647 3 -a 964 519 8 -a 964 239 5 -a 964 92 5 -a 964 190 7 -a 964 781 3 -a 964 224 3 -a 964 52 2 -a 964 420 5 -a 964 765 3 -a 964 277 10 -a 964 481 1 -a 964 580 6 -a 964 769 10 -a 964 405 4 -a 964 129 2 -a 964 459 6 -a 964 880 10 -a 964 438 9 -a 964 923 6 -a 964 639 6 -a 964 681 10 -a 964 740 1 -a 964 244 8 -a 964 845 5 -a 964 833 2 -a 964 841 4 -a 964 106 5 -a 964 455 5 -a 964 335 4 -a 964 344 10 -a 964 546 5 -a 964 524 2 -a 964 101 3 -a 964 770 4 -a 965 575 1 -a 965 520 6 -a 965 510 5 -a 965 851 7 -a 965 65 5 -a 965 595 10 -a 965 381 2 -a 965 193 7 -a 965 592 8 -a 965 362 5 -a 965 651 5 -a 965 447 6 -a 965 799 5 -a 965 549 10 -a 965 62 7 -a 965 455 5 -a 965 264 1 -a 965 305 4 -a 965 275 9 -a 965 259 2 -a 965 113 6 -a 965 91 2 -a 965 364 8 -a 965 567 7 -a 965 425 1 -a 965 708 1 -a 965 89 7 -a 965 949 6 -a 965 808 4 -a 965 858 8 -a 965 499 9 -a 965 303 1 -a 965 343 7 -a 965 326 6 -a 965 279 6 -a 965 407 3 -a 965 920 7 -a 965 659 5 -a 965 599 8 -a 965 487 10 -a 965 225 6 -a 965 934 9 -a 965 795 5 -a 965 773 5 -a 965 995 9 -a 965 226 6 -a 965 12 4 -a 965 275 4 -a 965 500 5 -a 965 270 5 -a 965 388 5 -a 965 591 1 -a 965 634 6 -a 965 954 6 -a 965 317 9 -a 965 18 3 -a 965 939 6 -a 965 100 4 -a 965 875 2 -a 965 414 3 -a 965 402 3 -a 965 193 8 -a 965 739 4 -a 965 681 2 -a 965 599 7 -a 965 634 6 -a 965 315 1 -a 965 173 4 -a 965 97 3 -a 965 311 5 -a 965 397 8 -a 965 6 10 -a 965 82 3 -a 965 145 9 -a 965 1000 9 -a 965 307 4 -a 965 157 7 -a 965 250 1 -a 965 806 9 -a 965 426 6 -a 965 637 3 -a 966 372 10 -a 966 35 9 -a 966 567 5 -a 966 363 5 -a 966 351 6 -a 966 584 8 -a 966 277 7 -a 966 450 7 -a 966 435 3 -a 966 690 2 -a 966 852 4 -a 966 627 3 -a 966 404 7 -a 966 508 2 -a 966 202 9 -a 966 14 4 -a 966 822 1 -a 966 374 3 -a 966 110 1 -a 966 109 2 -a 966 771 3 -a 966 115 7 -a 966 190 4 -a 966 915 8 -a 966 90 1 -a 966 496 4 -a 966 47 3 -a 966 339 8 -a 966 277 10 -a 966 473 9 -a 966 976 10 -a 966 649 7 -a 966 507 5 -a 966 518 5 -a 966 858 3 -a 966 77 7 -a 966 263 9 -a 966 283 2 -a 966 511 2 -a 966 953 5 -a 966 110 2 -a 966 114 2 -a 966 332 3 -a 966 617 3 -a 966 315 2 -a 966 345 9 -a 966 415 7 -a 966 688 7 -a 966 454 10 -a 966 523 1 -a 966 434 5 -a 966 568 3 -a 966 712 9 -a 966 325 10 -a 966 657 9 -a 966 183 8 -a 966 371 4 -a 966 996 8 -a 966 459 7 -a 966 843 5 -a 966 947 9 -a 966 83 6 -a 966 326 9 -a 966 440 7 -a 966 69 8 -a 966 159 9 -a 966 516 9 -a 966 332 5 -a 966 441 6 -a 966 3 3 -a 966 260 4 -a 966 551 7 -a 966 116 6 -a 966 591 5 -a 966 143 4 -a 966 430 2 -a 966 936 1 -a 966 557 4 -a 966 93 8 -a 966 365 10 -a 966 55 3 -a 966 527 1 -a 966 933 5 -a 966 766 3 -a 966 851 7 -a 966 565 5 -a 966 948 8 -a 966 197 2 -a 966 536 8 -a 966 383 4 -a 966 16 8 -a 966 458 9 -a 966 465 10 -a 966 341 7 -a 966 897 7 -a 966 534 10 -a 967 499 10 -a 967 389 6 -a 967 865 1 -a 967 939 4 -a 967 391 8 -a 967 100 1 -a 967 465 2 -a 967 506 3 -a 967 690 7 -a 967 608 5 -a 967 935 1 -a 967 601 4 -a 967 140 7 -a 967 3 6 -a 967 966 10 -a 967 195 6 -a 967 529 3 -a 967 874 2 -a 967 960 1 -a 967 355 7 -a 967 414 4 -a 967 884 4 -a 967 552 1 -a 967 950 9 -a 967 242 5 -a 967 567 4 -a 967 383 1 -a 967 706 5 -a 967 907 5 -a 967 256 3 -a 967 215 8 -a 967 381 6 -a 967 644 4 -a 967 55 9 -a 967 295 3 -a 967 10 2 -a 967 154 8 -a 967 760 1 -a 967 515 8 -a 967 844 8 -a 967 343 1 -a 967 425 10 -a 967 420 1 -a 967 482 10 -a 967 427 4 -a 967 361 6 -a 967 676 3 -a 967 956 3 -a 967 210 3 -a 967 612 9 -a 967 286 10 -a 967 624 5 -a 967 471 3 -a 967 837 7 -a 967 549 4 -a 967 712 3 -a 967 379 4 -a 967 931 9 -a 967 393 1 -a 967 261 7 -a 967 162 6 -a 967 608 10 -a 967 641 6 -a 967 805 7 -a 967 662 3 -a 967 936 9 -a 967 814 1 -a 967 816 8 -a 967 671 9 -a 967 304 10 -a 967 635 1 -a 967 728 4 -a 967 30 1 -a 967 470 3 -a 967 131 4 -a 967 391 3 -a 967 122 6 -a 967 62 3 -a 967 600 1 -a 967 733 6 -a 967 347 3 -a 967 199 7 -a 967 179 2 -a 967 160 5 -a 967 747 7 -a 967 890 3 -a 967 538 6 -a 967 654 6 -a 967 258 3 -a 967 799 6 -a 967 815 3 -a 967 865 9 -a 967 415 6 -a 967 596 2 -a 967 503 6 -a 967 326 8 -a 968 385 3 -a 968 294 10 -a 968 996 9 -a 968 689 7 -a 968 928 5 -a 968 984 5 -a 968 392 8 -a 968 957 2 -a 968 430 9 -a 968 522 4 -a 968 323 8 -a 968 551 10 -a 968 583 7 -a 968 923 4 -a 968 259 8 -a 968 930 9 -a 968 97 9 -a 968 437 7 -a 968 65 1 -a 968 844 4 -a 968 302 3 -a 968 602 1 -a 968 473 10 -a 968 559 3 -a 968 376 9 -a 968 263 2 -a 968 400 7 -a 968 791 9 -a 968 858 8 -a 968 902 5 -a 968 92 3 -a 968 219 6 -a 968 171 9 -a 968 64 2 -a 968 907 7 -a 968 74 3 -a 968 23 1 -a 968 274 3 -a 968 6 3 -a 968 452 9 -a 968 796 10 -a 968 329 4 -a 968 354 1 -a 968 227 4 -a 968 236 8 -a 968 259 4 -a 968 323 4 -a 968 672 3 -a 968 323 1 -a 968 142 4 -a 968 973 3 -a 968 925 3 -a 968 614 3 -a 968 508 4 -a 968 276 6 -a 968 877 5 -a 968 907 1 -a 968 42 4 -a 968 710 2 -a 968 784 1 -a 968 134 9 -a 968 928 9 -a 968 954 4 -a 968 197 3 -a 968 810 4 -a 968 3 6 -a 968 219 2 -a 968 60 5 -a 968 8 6 -a 968 671 1 -a 968 855 8 -a 968 336 8 -a 968 648 8 -a 968 184 3 -a 968 562 3 -a 968 884 3 -a 968 443 3 -a 968 885 4 -a 968 531 3 -a 968 765 3 -a 968 2 3 -a 968 480 2 -a 968 665 10 -a 968 616 3 -a 968 987 7 -a 968 941 2 -a 968 468 10 -a 968 869 8 -a 968 982 6 -a 968 153 5 -a 968 628 7 -a 968 91 2 -a 968 57 9 -a 969 557 4 -a 969 287 2 -a 969 866 8 -a 969 559 4 -a 969 506 10 -a 969 925 9 -a 969 566 1 -a 969 152 5 -a 969 755 7 -a 969 902 2 -a 969 799 9 -a 969 939 6 -a 969 439 4 -a 969 658 5 -a 969 357 1 -a 969 299 7 -a 969 165 9 -a 969 97 3 -a 969 301 4 -a 969 644 10 -a 969 762 5 -a 969 916 2 -a 969 606 9 -a 969 678 9 -a 969 359 3 -a 969 450 10 -a 969 635 2 -a 969 511 1 -a 969 53 2 -a 969 726 6 -a 969 567 1 -a 969 609 4 -a 969 409 1 -a 969 143 7 -a 969 493 3 -a 969 309 9 -a 969 708 10 -a 969 644 5 -a 969 40 6 -a 969 585 10 -a 969 419 6 -a 969 978 2 -a 969 52 2 -a 969 310 5 -a 969 298 1 -a 969 216 8 -a 969 406 7 -a 969 598 9 -a 969 859 5 -a 969 143 9 -a 969 489 7 -a 969 440 7 -a 969 820 2 -a 969 847 1 -a 969 889 8 -a 969 431 10 -a 969 334 10 -a 969 941 1 -a 969 132 9 -a 969 900 5 -a 969 525 1 -a 969 119 5 -a 969 284 1 -a 969 667 1 -a 969 612 9 -a 969 593 10 -a 969 351 3 -a 969 231 3 -a 969 632 2 -a 969 935 7 -a 969 649 1 -a 969 585 7 -a 969 934 7 -a 969 701 8 -a 969 894 2 -a 969 208 6 -a 969 916 1 -a 969 275 6 -a 969 805 9 -a 969 751 10 -a 969 418 10 -a 969 270 10 -a 969 166 6 -a 969 213 6 -a 969 92 4 -a 969 31 8 -a 969 643 9 -a 969 425 5 -a 969 971 6 -a 969 774 5 -a 969 301 3 -a 969 472 8 -a 969 893 2 -a 969 584 8 -a 970 114 7 -a 970 480 6 -a 970 152 8 -a 970 464 2 -a 970 710 3 -a 970 783 1 -a 970 375 6 -a 970 335 5 -a 970 343 9 -a 970 284 8 -a 970 11 1 -a 970 212 7 -a 970 491 2 -a 970 926 2 -a 970 487 9 -a 970 272 10 -a 970 652 6 -a 970 904 1 -a 970 541 3 -a 970 818 2 -a 970 92 9 -a 970 632 5 -a 970 848 3 -a 970 735 6 -a 970 33 10 -a 970 794 5 -a 970 484 9 -a 970 333 7 -a 970 241 10 -a 970 352 10 -a 970 916 5 -a 970 355 8 -a 970 831 3 -a 970 44 6 -a 970 818 1 -a 970 517 2 -a 970 826 2 -a 970 168 6 -a 970 851 4 -a 970 145 9 -a 970 452 9 -a 970 861 8 -a 970 356 3 -a 970 942 6 -a 970 762 6 -a 970 842 9 -a 970 189 8 -a 970 390 8 -a 970 721 4 -a 970 729 5 -a 970 183 6 -a 970 813 3 -a 970 337 9 -a 970 6 9 -a 970 523 9 -a 970 369 8 -a 970 799 6 -a 970 701 7 -a 970 16 1 -a 970 334 9 -a 970 592 6 -a 970 370 3 -a 970 140 7 -a 970 635 4 -a 970 163 6 -a 970 656 2 -a 970 437 7 -a 970 331 10 -a 970 482 5 -a 970 581 4 -a 970 782 8 -a 970 318 4 -a 970 936 9 -a 970 699 4 -a 970 56 8 -a 970 754 4 -a 970 888 1 -a 970 445 6 -a 970 450 1 -a 970 592 5 -a 970 627 4 -a 970 238 3 -a 970 928 2 -a 970 632 5 -a 970 760 5 -a 970 272 1 -a 970 406 9 -a 970 742 8 -a 970 972 8 -a 970 421 3 -a 970 51 8 -a 970 540 3 -a 970 790 6 -a 970 190 3 -a 970 150 2 -a 970 953 4 -a 971 846 8 -a 971 586 1 -a 971 259 5 -a 971 303 9 -a 971 142 9 -a 971 16 8 -a 971 621 7 -a 971 54 7 -a 971 714 4 -a 971 676 1 -a 971 807 8 -a 971 577 5 -a 971 96 2 -a 971 232 5 -a 971 145 9 -a 971 722 9 -a 971 470 6 -a 971 48 6 -a 971 329 8 -a 971 205 1 -a 971 320 2 -a 971 734 5 -a 971 946 1 -a 971 267 9 -a 971 131 4 -a 971 996 5 -a 971 806 1 -a 971 920 5 -a 971 162 9 -a 971 956 1 -a 971 848 9 -a 971 517 5 -a 971 82 6 -a 971 285 10 -a 971 659 9 -a 971 97 3 -a 971 905 2 -a 971 712 7 -a 971 811 3 -a 971 556 5 -a 971 494 4 -a 971 363 3 -a 971 651 6 -a 971 725 8 -a 971 507 2 -a 971 348 6 -a 971 170 5 -a 971 555 8 -a 971 676 4 -a 971 375 9 -a 971 874 8 -a 971 386 8 -a 971 296 2 -a 971 116 8 -a 971 516 4 -a 971 268 10 -a 971 922 9 -a 971 411 3 -a 971 429 5 -a 971 853 4 -a 971 235 1 -a 971 411 10 -a 971 345 7 -a 971 316 4 -a 971 695 10 -a 971 413 6 -a 971 576 3 -a 971 690 1 -a 971 199 8 -a 971 107 9 -a 971 159 5 -a 971 561 7 -a 971 758 6 -a 971 884 4 -a 971 44 2 -a 971 81 5 -a 971 29 9 -a 971 598 7 -a 971 757 9 -a 971 403 7 -a 971 447 3 -a 971 118 9 -a 971 699 1 -a 971 562 2 -a 971 633 7 -a 971 966 3 -a 971 459 8 -a 971 19 7 -a 971 370 4 -a 971 287 3 -a 971 253 6 -a 971 780 4 -a 971 632 3 -a 971 569 7 -a 971 450 1 -a 971 610 2 -a 971 981 9 -a 971 1 10 -a 971 276 8 -a 971 155 7 -a 971 108 7 -a 971 434 4 -a 971 715 8 -a 971 865 4 -a 971 293 6 -a 971 758 4 -a 972 945 8 -a 972 322 8 -a 972 331 3 -a 972 677 5 -a 972 724 5 -a 972 777 7 -a 972 794 4 -a 972 398 3 -a 972 315 2 -a 972 402 9 -a 972 339 6 -a 972 773 2 -a 972 421 2 -a 972 708 9 -a 972 36 10 -a 972 673 6 -a 972 463 2 -a 972 667 1 -a 972 217 4 -a 972 913 3 -a 972 252 1 -a 972 173 7 -a 972 913 9 -a 972 527 1 -a 972 327 7 -a 972 961 10 -a 972 18 7 -a 972 860 7 -a 972 229 4 -a 972 775 8 -a 972 781 3 -a 972 550 6 -a 972 82 2 -a 972 433 4 -a 972 250 4 -a 972 858 4 -a 972 203 7 -a 972 647 5 -a 972 148 7 -a 972 604 9 -a 972 986 4 -a 972 921 7 -a 972 669 10 -a 972 956 4 -a 972 673 10 -a 972 108 2 -a 972 598 6 -a 972 889 7 -a 972 849 7 -a 972 38 7 -a 972 908 5 -a 972 352 5 -a 972 364 1 -a 972 904 2 -a 972 288 8 -a 972 381 9 -a 972 739 9 -a 972 516 8 -a 972 132 1 -a 972 495 4 -a 972 42 2 -a 972 213 10 -a 972 928 4 -a 972 291 5 -a 972 46 10 -a 972 106 3 -a 972 937 7 -a 972 194 8 -a 972 709 8 -a 972 898 3 -a 972 90 4 -a 972 709 1 -a 972 543 4 -a 972 21 10 -a 972 357 2 -a 972 650 3 -a 972 618 6 -a 972 221 9 -a 972 645 9 -a 972 442 3 -a 972 258 10 -a 972 528 1 -a 972 793 1 -a 972 622 5 -a 972 407 10 -a 972 56 6 -a 972 122 6 -a 972 572 10 -a 972 109 4 -a 972 616 10 -a 972 613 9 -a 972 321 2 -a 972 519 5 -a 972 903 7 -a 972 367 7 -a 972 624 9 -a 972 815 2 -a 972 560 8 -a 973 309 9 -a 973 689 2 -a 973 649 8 -a 973 207 8 -a 973 669 2 -a 973 349 5 -a 973 856 5 -a 973 262 10 -a 973 569 10 -a 973 476 4 -a 973 703 10 -a 973 827 10 -a 973 472 2 -a 973 424 1 -a 973 386 9 -a 973 527 7 -a 973 401 1 -a 973 507 4 -a 973 74 8 -a 973 510 2 -a 973 98 1 -a 973 686 7 -a 973 830 5 -a 973 617 9 -a 973 564 7 -a 973 172 4 -a 973 216 10 -a 973 355 4 -a 973 731 7 -a 973 524 5 -a 973 19 8 -a 973 355 7 -a 973 516 5 -a 973 225 1 -a 973 864 6 -a 973 56 3 -a 973 260 9 -a 973 409 6 -a 973 531 1 -a 973 963 5 -a 973 211 2 -a 973 509 6 -a 973 410 6 -a 973 634 4 -a 973 894 1 -a 973 936 2 -a 973 10 1 -a 973 376 1 -a 973 519 5 -a 973 474 6 -a 973 671 7 -a 973 325 9 -a 973 66 6 -a 973 211 3 -a 973 496 5 -a 973 281 4 -a 973 565 4 -a 973 203 5 -a 973 805 9 -a 973 583 9 -a 973 557 6 -a 973 296 3 -a 973 807 7 -a 973 556 8 -a 973 136 1 -a 973 862 6 -a 973 815 2 -a 973 544 7 -a 973 368 5 -a 973 753 10 -a 973 754 2 -a 973 876 8 -a 973 138 4 -a 973 363 6 -a 973 746 8 -a 973 50 8 -a 973 372 9 -a 973 97 1 -a 973 35 10 -a 973 891 2 -a 973 570 9 -a 973 705 7 -a 973 191 3 -a 973 635 1 -a 973 915 6 -a 973 686 10 -a 973 916 8 -a 973 455 4 -a 973 888 9 -a 973 696 5 -a 973 13 1 -a 973 421 3 -a 973 991 4 -a 973 819 3 -a 973 976 7 -a 973 102 9 -a 973 656 9 -a 973 766 1 -a 973 645 7 -a 973 495 1 -a 973 374 7 -a 973 875 7 -a 973 632 4 -a 973 736 3 -a 973 596 1 -a 973 681 1 -a 973 84 3 -a 973 692 7 -a 973 715 5 -a 973 974 2 -a 973 238 1 -a 973 396 2 -a 974 140 4 -a 974 872 1 -a 974 286 2 -a 974 825 2 -a 974 763 7 -a 974 741 7 -a 974 689 4 -a 974 434 9 -a 974 753 7 -a 974 85 9 -a 974 401 1 -a 974 548 1 -a 974 36 3 -a 974 502 7 -a 974 179 8 -a 974 801 4 -a 974 123 8 -a 974 178 3 -a 974 271 6 -a 974 496 5 -a 974 28 4 -a 974 903 7 -a 974 208 4 -a 974 623 7 -a 974 559 8 -a 974 291 6 -a 974 290 9 -a 974 250 1 -a 974 240 8 -a 974 527 4 -a 974 645 5 -a 974 379 9 -a 974 375 8 -a 974 930 4 -a 974 179 7 -a 974 113 9 -a 974 646 6 -a 974 867 7 -a 974 547 7 -a 974 375 9 -a 974 951 10 -a 974 947 2 -a 974 922 5 -a 974 986 6 -a 974 424 3 -a 974 76 9 -a 974 763 3 -a 974 546 2 -a 974 253 7 -a 974 9 10 -a 974 18 4 -a 974 280 10 -a 974 911 3 -a 974 225 3 -a 974 902 7 -a 974 446 1 -a 974 515 5 -a 974 168 2 -a 974 695 8 -a 974 754 9 -a 974 694 7 -a 974 315 4 -a 974 108 1 -a 974 44 5 -a 974 220 7 -a 974 286 8 -a 974 157 10 -a 974 866 9 -a 974 129 7 -a 974 703 2 -a 974 216 1 -a 974 55 10 -a 974 625 8 -a 974 113 9 -a 974 17 3 -a 974 24 6 -a 974 188 10 -a 974 779 6 -a 974 570 9 -a 974 441 1 -a 974 787 5 -a 974 587 1 -a 974 720 1 -a 974 674 9 -a 974 811 1 -a 974 598 7 -a 974 95 8 -a 974 301 1 -a 974 765 2 -a 974 789 5 -a 974 30 2 -a 974 434 5 -a 974 79 2 -a 975 137 5 -a 975 478 5 -a 975 298 9 -a 975 422 2 -a 975 634 1 -a 975 139 2 -a 975 550 5 -a 975 312 5 -a 975 354 7 -a 975 605 6 -a 975 936 8 -a 975 466 1 -a 975 621 3 -a 975 959 10 -a 975 654 1 -a 975 375 4 -a 975 504 2 -a 975 70 3 -a 975 137 2 -a 975 66 8 -a 975 789 6 -a 975 810 2 -a 975 876 7 -a 975 362 8 -a 975 904 1 -a 975 152 8 -a 975 102 7 -a 975 668 5 -a 975 181 2 -a 975 536 10 -a 975 746 9 -a 975 317 10 -a 975 20 9 -a 975 739 7 -a 975 622 6 -a 975 158 10 -a 975 264 9 -a 975 933 10 -a 975 512 8 -a 975 868 6 -a 975 844 7 -a 975 977 8 -a 975 464 4 -a 975 778 2 -a 975 606 2 -a 975 838 2 -a 975 258 9 -a 975 675 2 -a 975 975 7 -a 975 323 3 -a 975 440 7 -a 975 760 9 -a 975 175 10 -a 975 801 2 -a 975 640 2 -a 975 326 7 -a 975 903 5 -a 975 283 5 -a 975 507 1 -a 975 414 1 -a 975 5 10 -a 975 823 7 -a 975 402 8 -a 975 24 8 -a 975 537 10 -a 975 181 8 -a 975 801 10 -a 975 931 2 -a 975 692 9 -a 975 644 7 -a 975 750 7 -a 975 645 8 -a 975 84 9 -a 975 503 8 -a 975 226 9 -a 975 921 4 -a 975 760 2 -a 975 901 6 -a 975 871 10 -a 975 59 7 -a 975 316 1 -a 975 607 3 -a 975 233 1 -a 975 92 7 -a 975 222 6 -a 975 558 8 -a 975 994 8 -a 975 504 1 -a 975 40 8 -a 975 383 7 -a 975 508 5 -a 975 863 10 -a 975 784 1 -a 975 531 3 -a 975 375 3 -a 975 782 10 -a 975 712 6 -a 975 151 5 -a 975 688 8 -a 975 379 7 -a 975 795 1 -a 975 413 5 -a 975 878 6 -a 975 916 2 -a 975 225 3 -a 975 774 6 -a 975 651 4 -a 976 101 1 -a 976 621 5 -a 976 709 4 -a 976 416 5 -a 976 203 8 -a 976 941 4 -a 976 507 2 -a 976 424 1 -a 976 475 5 -a 976 477 1 -a 976 927 3 -a 976 514 5 -a 976 859 10 -a 976 411 1 -a 976 352 8 -a 976 619 6 -a 976 941 1 -a 976 727 2 -a 976 376 8 -a 976 628 6 -a 976 877 6 -a 976 40 5 -a 976 647 7 -a 976 452 10 -a 976 500 4 -a 976 343 10 -a 976 205 7 -a 976 250 8 -a 976 994 1 -a 976 305 2 -a 976 870 2 -a 976 678 7 -a 976 720 6 -a 976 48 3 -a 976 595 7 -a 976 203 1 -a 976 471 5 -a 976 45 10 -a 976 679 5 -a 976 373 10 -a 976 558 1 -a 976 513 10 -a 976 783 10 -a 976 910 3 -a 976 107 2 -a 976 700 8 -a 976 612 6 -a 976 483 5 -a 976 303 1 -a 976 464 9 -a 976 522 7 -a 976 285 8 -a 976 87 4 -a 976 973 6 -a 976 266 10 -a 976 586 4 -a 976 292 10 -a 976 470 5 -a 976 835 8 -a 976 261 3 -a 976 775 5 -a 976 680 2 -a 976 938 7 -a 976 470 3 -a 976 727 8 -a 976 508 4 -a 976 672 10 -a 976 173 10 -a 976 552 9 -a 976 326 5 -a 976 546 9 -a 976 86 10 -a 976 839 4 -a 976 304 8 -a 976 995 5 -a 976 945 7 -a 976 582 2 -a 976 403 9 -a 976 282 4 -a 976 21 4 -a 976 924 1 -a 976 566 10 -a 976 107 2 -a 976 873 8 -a 976 831 8 -a 976 693 7 -a 976 140 4 -a 976 277 3 -a 976 503 6 -a 976 400 6 -a 976 27 10 -a 976 159 4 -a 976 313 7 -a 976 496 3 -a 976 885 4 -a 976 821 1 -a 976 144 1 -a 976 34 4 -a 976 348 8 -a 976 469 5 -a 976 579 7 -a 976 433 4 -a 976 283 3 -a 977 882 6 -a 977 403 3 -a 977 204 3 -a 977 861 1 -a 977 984 5 -a 977 606 2 -a 977 118 3 -a 977 506 9 -a 977 683 1 -a 977 87 8 -a 977 354 1 -a 977 490 7 -a 977 779 4 -a 977 493 9 -a 977 766 2 -a 977 258 1 -a 977 892 1 -a 977 792 3 -a 977 416 1 -a 977 180 4 -a 977 263 2 -a 977 276 1 -a 977 1000 9 -a 977 406 5 -a 977 309 6 -a 977 324 2 -a 977 875 3 -a 977 887 8 -a 977 756 3 -a 977 133 3 -a 977 745 10 -a 977 135 5 -a 977 336 5 -a 977 581 8 -a 977 94 5 -a 977 942 7 -a 977 698 10 -a 977 74 2 -a 977 423 3 -a 977 356 2 -a 977 161 6 -a 977 776 8 -a 977 845 2 -a 977 939 9 -a 977 244 4 -a 977 586 10 -a 977 172 4 -a 977 111 4 -a 977 353 2 -a 977 587 1 -a 977 290 4 -a 977 616 7 -a 977 863 6 -a 977 266 4 -a 977 147 1 -a 977 589 7 -a 977 871 4 -a 977 10 7 -a 977 320 5 -a 977 754 9 -a 977 454 10 -a 977 315 7 -a 977 310 8 -a 977 548 1 -a 977 232 2 -a 977 621 2 -a 977 654 1 -a 977 338 5 -a 977 781 6 -a 977 405 6 -a 977 159 10 -a 977 696 4 -a 977 648 1 -a 977 744 7 -a 977 867 3 -a 977 758 5 -a 977 73 8 -a 977 430 10 -a 977 24 1 -a 977 688 6 -a 977 268 4 -a 977 289 5 -a 977 684 9 -a 977 414 4 -a 977 877 7 -a 977 531 7 -a 977 423 2 -a 977 172 4 -a 977 510 8 -a 977 152 6 -a 977 626 7 -a 977 824 7 -a 977 461 9 -a 977 149 9 -a 977 32 2 -a 977 443 8 -a 977 769 8 -a 977 685 7 -a 977 781 7 -a 977 526 1 -a 977 66 1 -a 977 939 10 -a 977 197 5 -a 977 713 9 -a 977 658 2 -a 977 39 3 -a 977 447 1 -a 977 730 10 -a 977 468 4 -a 978 470 8 -a 978 393 2 -a 978 735 3 -a 978 758 8 -a 978 53 6 -a 978 125 6 -a 978 610 6 -a 978 583 6 -a 978 547 3 -a 978 781 1 -a 978 68 6 -a 978 699 4 -a 978 382 10 -a 978 891 10 -a 978 135 6 -a 978 530 8 -a 978 922 10 -a 978 578 8 -a 978 275 3 -a 978 583 1 -a 978 334 1 -a 978 800 7 -a 978 648 1 -a 978 248 5 -a 978 996 3 -a 978 336 4 -a 978 905 3 -a 978 10 9 -a 978 782 2 -a 978 611 3 -a 978 478 5 -a 978 227 7 -a 978 188 1 -a 978 984 1 -a 978 31 10 -a 978 312 9 -a 978 569 4 -a 978 613 2 -a 978 859 9 -a 978 326 6 -a 978 680 9 -a 978 533 10 -a 978 707 6 -a 978 547 9 -a 978 667 5 -a 978 213 2 -a 978 444 2 -a 978 220 7 -a 978 487 8 -a 978 2 1 -a 978 553 7 -a 978 262 9 -a 978 649 3 -a 978 800 9 -a 978 233 4 -a 978 985 4 -a 978 681 4 -a 978 242 1 -a 978 742 2 -a 978 267 10 -a 978 719 10 -a 978 969 10 -a 978 245 4 -a 978 907 10 -a 978 928 8 -a 978 276 1 -a 978 194 6 -a 978 473 2 -a 978 888 3 -a 978 28 2 -a 978 798 7 -a 978 544 3 -a 978 560 2 -a 978 480 3 -a 978 66 10 -a 978 203 5 -a 978 692 8 -a 978 509 9 -a 978 422 8 -a 978 154 7 -a 978 511 3 -a 978 975 2 -a 978 415 2 -a 979 135 3 -a 979 750 6 -a 979 647 7 -a 979 95 3 -a 979 406 9 -a 979 889 6 -a 979 837 1 -a 979 672 7 -a 979 583 8 -a 979 781 3 -a 979 917 1 -a 979 465 8 -a 979 684 5 -a 979 168 1 -a 979 659 3 -a 979 132 8 -a 979 31 8 -a 979 686 9 -a 979 929 10 -a 979 574 8 -a 979 222 9 -a 979 385 6 -a 979 639 3 -a 979 424 5 -a 979 52 3 -a 979 124 9 -a 979 845 7 -a 979 206 7 -a 979 634 1 -a 979 795 5 -a 979 620 9 -a 979 768 2 -a 979 521 3 -a 979 243 10 -a 979 863 4 -a 979 926 1 -a 979 107 7 -a 979 675 2 -a 979 574 5 -a 979 689 3 -a 979 431 8 -a 979 466 1 -a 979 130 1 -a 979 90 10 -a 979 633 9 -a 979 788 7 -a 979 222 4 -a 979 663 6 -a 979 449 5 -a 979 126 10 -a 979 213 6 -a 979 670 6 -a 979 510 6 -a 979 851 3 -a 979 69 2 -a 979 562 1 -a 979 974 2 -a 979 914 4 -a 979 767 1 -a 979 583 4 -a 979 684 2 -a 979 362 3 -a 979 327 1 -a 979 180 1 -a 979 604 9 -a 979 165 1 -a 979 82 2 -a 979 710 9 -a 979 839 4 -a 979 655 6 -a 979 375 1 -a 979 245 10 -a 979 96 7 -a 979 504 6 -a 979 334 8 -a 979 728 9 -a 979 267 4 -a 979 555 3 -a 979 366 5 -a 979 715 10 -a 979 681 1 -a 979 578 7 -a 979 361 9 -a 979 166 1 -a 979 405 7 -a 979 429 5 -a 979 727 9 -a 979 354 7 -a 979 318 2 -a 979 469 5 -a 979 937 5 -a 979 831 9 -a 979 239 2 -a 979 157 10 -a 979 410 7 -a 979 403 2 -a 979 238 6 -a 980 96 10 -a 980 217 10 -a 980 892 3 -a 980 470 9 -a 980 461 1 -a 980 987 1 -a 980 973 10 -a 980 794 7 -a 980 690 2 -a 980 215 7 -a 980 325 4 -a 980 32 3 -a 980 929 8 -a 980 609 1 -a 980 265 5 -a 980 146 9 -a 980 694 10 -a 980 873 4 -a 980 343 4 -a 980 317 3 -a 980 255 3 -a 980 988 6 -a 980 123 1 -a 980 493 7 -a 980 121 10 -a 980 533 4 -a 980 895 3 -a 980 358 6 -a 980 628 10 -a 980 87 10 -a 980 226 7 -a 980 73 5 -a 980 547 6 -a 980 188 2 -a 980 21 4 -a 980 316 10 -a 980 878 4 -a 980 235 9 -a 980 640 6 -a 980 909 4 -a 980 139 9 -a 980 620 6 -a 980 493 7 -a 980 404 9 -a 980 766 8 -a 980 482 9 -a 980 73 3 -a 980 614 5 -a 980 824 2 -a 980 59 2 -a 980 930 1 -a 980 54 8 -a 980 23 3 -a 980 29 10 -a 980 546 6 -a 980 143 5 -a 980 561 2 -a 980 416 5 -a 980 500 8 -a 980 164 5 -a 980 502 4 -a 980 725 2 -a 980 236 3 -a 980 24 4 -a 980 913 8 -a 980 256 1 -a 980 339 7 -a 980 766 10 -a 980 490 5 -a 980 979 8 -a 980 650 2 -a 980 628 2 -a 980 574 1 -a 980 118 3 -a 980 7 9 -a 980 315 6 -a 980 599 1 -a 980 79 10 -a 980 928 5 -a 980 398 1 -a 980 138 8 -a 980 834 5 -a 980 451 5 -a 981 160 6 -a 981 862 6 -a 981 996 4 -a 981 302 6 -a 981 398 2 -a 981 387 2 -a 981 801 4 -a 981 561 10 -a 981 888 1 -a 981 502 6 -a 981 796 2 -a 981 911 6 -a 981 390 3 -a 981 27 10 -a 981 226 2 -a 981 131 4 -a 981 516 1 -a 981 180 8 -a 981 780 10 -a 981 119 4 -a 981 753 2 -a 981 897 9 -a 981 126 8 -a 981 44 4 -a 981 472 9 -a 981 204 4 -a 981 971 2 -a 981 869 1 -a 981 341 7 -a 981 780 1 -a 981 296 6 -a 981 500 1 -a 981 617 8 -a 981 267 9 -a 981 801 2 -a 981 654 9 -a 981 578 1 -a 981 550 2 -a 981 517 8 -a 981 55 10 -a 981 321 8 -a 981 404 1 -a 981 444 4 -a 981 347 4 -a 981 629 3 -a 981 574 3 -a 981 862 3 -a 981 808 3 -a 981 329 9 -a 981 981 8 -a 981 536 3 -a 981 201 9 -a 981 82 10 -a 981 579 10 -a 981 672 4 -a 981 285 10 -a 981 526 3 -a 981 517 9 -a 981 626 5 -a 981 281 5 -a 981 812 1 -a 981 101 4 -a 981 898 9 -a 981 54 1 -a 981 902 6 -a 981 887 3 -a 981 707 4 -a 981 455 5 -a 981 413 5 -a 981 200 7 -a 981 509 5 -a 981 733 4 -a 981 603 2 -a 981 952 5 -a 981 56 8 -a 981 207 9 -a 981 501 10 -a 981 917 1 -a 981 829 3 -a 981 873 4 -a 981 525 5 -a 981 5 4 -a 981 954 3 -a 981 80 7 -a 981 677 6 -a 981 215 1 -a 981 605 4 -a 981 169 2 -a 981 840 2 -a 981 885 9 -a 981 980 4 -a 981 940 5 -a 981 758 10 -a 981 9 1 -a 981 817 2 -a 981 621 8 -a 981 716 10 -a 981 247 2 -a 982 9 10 -a 982 915 5 -a 982 755 1 -a 982 741 3 -a 982 493 1 -a 982 682 8 -a 982 796 9 -a 982 699 6 -a 982 158 9 -a 982 689 7 -a 982 688 10 -a 982 986 2 -a 982 537 8 -a 982 188 2 -a 982 991 5 -a 982 467 10 -a 982 267 9 -a 982 643 3 -a 982 681 1 -a 982 871 5 -a 982 811 1 -a 982 496 6 -a 982 732 7 -a 982 766 6 -a 982 411 5 -a 982 465 2 -a 982 774 4 -a 982 204 5 -a 982 61 8 -a 982 465 6 -a 982 450 10 -a 982 69 3 -a 982 355 9 -a 982 181 5 -a 982 810 9 -a 982 847 8 -a 982 862 4 -a 982 581 6 -a 982 521 8 -a 982 245 4 -a 982 184 6 -a 982 981 4 -a 982 782 7 -a 982 372 6 -a 982 947 9 -a 982 224 7 -a 982 638 8 -a 982 565 6 -a 982 904 3 -a 982 485 6 -a 982 351 9 -a 982 375 4 -a 982 192 4 -a 982 92 2 -a 982 785 4 -a 982 656 6 -a 982 866 1 -a 982 988 9 -a 982 717 6 -a 982 306 6 -a 982 414 10 -a 982 785 2 -a 982 661 7 -a 982 594 6 -a 982 570 8 -a 982 483 2 -a 982 431 6 -a 982 127 9 -a 982 426 3 -a 982 371 2 -a 982 163 5 -a 982 383 8 -a 982 128 9 -a 982 534 9 -a 982 305 6 -a 982 351 9 -a 982 148 8 -a 982 870 8 -a 982 230 5 -a 982 632 7 -a 982 196 1 -a 982 604 3 -a 982 823 7 -a 982 288 8 -a 982 365 9 -a 982 454 10 -a 982 129 9 -a 982 328 10 -a 982 146 2 -a 982 434 9 -a 982 741 1 -a 982 931 2 -a 982 70 7 -a 982 310 8 -a 982 476 9 -a 982 553 6 -a 982 741 4 -a 982 602 2 -a 982 532 8 -a 982 142 4 -a 982 973 5 -a 982 694 6 -a 982 524 3 -a 982 76 3 -a 982 204 10 -a 982 829 4 -a 982 427 8 -a 982 351 5 -a 982 674 3 -a 982 656 9 -a 982 982 7 -a 982 869 5 -a 982 236 7 -a 982 780 2 -a 983 132 9 -a 983 600 3 -a 983 209 3 -a 983 260 3 -a 983 927 10 -a 983 355 3 -a 983 694 4 -a 983 644 5 -a 983 261 1 -a 983 763 1 -a 983 953 3 -a 983 736 6 -a 983 291 5 -a 983 669 2 -a 983 314 4 -a 983 822 8 -a 983 811 1 -a 983 262 7 -a 983 492 2 -a 983 310 5 -a 983 337 10 -a 983 695 4 -a 983 114 7 -a 983 763 9 -a 983 21 3 -a 983 787 6 -a 983 395 5 -a 983 632 9 -a 983 630 9 -a 983 757 10 -a 983 763 8 -a 983 205 4 -a 983 965 10 -a 983 107 1 -a 983 295 2 -a 983 692 1 -a 983 750 4 -a 983 555 6 -a 983 430 1 -a 983 679 4 -a 983 267 5 -a 983 721 10 -a 983 323 7 -a 983 580 7 -a 983 518 9 -a 983 109 6 -a 983 841 5 -a 983 419 4 -a 983 153 3 -a 983 679 1 -a 983 532 5 -a 983 916 2 -a 983 699 3 -a 983 295 2 -a 983 286 1 -a 983 676 1 -a 983 926 6 -a 983 915 3 -a 983 408 5 -a 983 664 6 -a 983 95 4 -a 983 349 7 -a 983 662 1 -a 983 201 10 -a 983 643 4 -a 983 329 9 -a 983 951 10 -a 983 174 10 -a 983 759 4 -a 983 605 7 -a 983 440 6 -a 983 455 2 -a 983 927 8 -a 983 972 7 -a 983 12 8 -a 983 835 7 -a 983 957 6 -a 983 430 7 -a 983 987 1 -a 983 611 9 -a 983 961 4 -a 983 878 4 -a 983 286 8 -a 983 231 1 -a 983 139 4 -a 983 961 1 -a 983 132 8 -a 983 29 5 -a 983 345 6 -a 983 796 5 -a 983 123 9 -a 983 693 8 -a 983 433 4 -a 983 324 8 -a 983 311 7 -a 983 762 10 -a 983 250 6 -a 983 484 6 -a 983 496 5 -a 983 854 10 -a 983 923 1 -a 983 950 3 -a 983 756 1 -a 983 917 10 -a 983 897 1 -a 983 767 8 -a 984 727 4 -a 984 829 6 -a 984 172 8 -a 984 690 3 -a 984 416 9 -a 984 109 9 -a 984 543 3 -a 984 701 6 -a 984 339 8 -a 984 682 9 -a 984 637 5 -a 984 471 5 -a 984 710 4 -a 984 981 5 -a 984 242 10 -a 984 833 6 -a 984 649 5 -a 984 674 4 -a 984 132 3 -a 984 960 6 -a 984 411 1 -a 984 381 2 -a 984 419 3 -a 984 906 4 -a 984 210 1 -a 984 318 6 -a 984 831 1 -a 984 965 5 -a 984 210 8 -a 984 704 9 -a 984 708 2 -a 984 937 4 -a 984 508 1 -a 984 879 8 -a 984 602 8 -a 984 923 1 -a 984 987 7 -a 984 120 4 -a 984 599 2 -a 984 302 3 -a 984 801 1 -a 984 212 1 -a 984 772 3 -a 984 487 6 -a 984 168 2 -a 984 295 3 -a 984 817 8 -a 984 662 10 -a 984 426 8 -a 984 752 6 -a 984 49 6 -a 984 806 6 -a 984 146 3 -a 984 954 4 -a 984 463 6 -a 984 761 10 -a 984 955 4 -a 984 673 3 -a 984 440 1 -a 984 638 6 -a 984 585 1 -a 984 947 4 -a 984 493 4 -a 984 162 4 -a 984 846 6 -a 984 455 10 -a 984 281 4 -a 984 420 7 -a 984 756 6 -a 984 58 4 -a 984 631 6 -a 984 503 5 -a 984 544 4 -a 984 799 2 -a 984 491 7 -a 984 838 10 -a 984 591 2 -a 984 129 10 -a 984 239 8 -a 984 318 9 -a 984 177 8 -a 984 20 4 -a 984 463 2 -a 984 106 7 -a 984 10 7 -a 984 926 9 -a 984 866 2 -a 984 964 7 -a 984 574 5 -a 984 281 3 -a 984 578 1 -a 984 134 6 -a 984 204 10 -a 985 46 7 -a 985 295 5 -a 985 25 1 -a 985 500 2 -a 985 575 7 -a 985 444 9 -a 985 232 10 -a 985 632 3 -a 985 51 7 -a 985 734 1 -a 985 151 6 -a 985 849 10 -a 985 201 8 -a 985 988 8 -a 985 415 10 -a 985 329 3 -a 985 202 4 -a 985 732 9 -a 985 505 5 -a 985 221 8 -a 985 170 6 -a 985 610 9 -a 985 230 1 -a 985 71 2 -a 985 452 5 -a 985 170 9 -a 985 644 5 -a 985 732 7 -a 985 747 4 -a 985 777 5 -a 985 935 3 -a 985 792 8 -a 985 47 10 -a 985 959 8 -a 985 267 10 -a 985 622 7 -a 985 379 8 -a 985 498 8 -a 985 229 1 -a 985 429 8 -a 985 208 7 -a 985 380 1 -a 985 253 9 -a 985 408 10 -a 985 343 7 -a 985 667 8 -a 985 736 3 -a 985 545 5 -a 985 374 4 -a 985 216 6 -a 985 765 2 -a 985 543 8 -a 985 825 6 -a 985 995 4 -a 985 614 5 -a 985 252 6 -a 985 140 4 -a 985 233 7 -a 985 984 3 -a 985 886 8 -a 985 894 9 -a 985 653 6 -a 985 32 2 -a 985 829 9 -a 985 919 2 -a 985 653 4 -a 985 183 4 -a 985 393 6 -a 985 882 8 -a 985 611 2 -a 985 600 9 -a 985 237 9 -a 985 863 1 -a 985 579 9 -a 985 505 9 -a 985 718 2 -a 985 99 5 -a 985 878 7 -a 985 933 1 -a 985 864 9 -a 985 396 6 -a 985 733 5 -a 985 834 7 -a 985 985 1 -a 985 973 8 -a 985 218 6 -a 985 944 6 -a 985 834 7 -a 985 203 1 -a 985 813 8 -a 985 462 1 -a 985 234 4 -a 985 617 5 -a 985 356 7 -a 985 887 4 -a 985 799 4 -a 985 748 6 -a 985 744 1 -a 986 385 2 -a 986 323 8 -a 986 980 9 -a 986 223 1 -a 986 305 8 -a 986 534 3 -a 986 727 2 -a 986 633 2 -a 986 580 2 -a 986 930 3 -a 986 472 3 -a 986 976 4 -a 986 639 6 -a 986 281 7 -a 986 960 7 -a 986 599 4 -a 986 229 6 -a 986 153 5 -a 986 518 9 -a 986 38 1 -a 986 355 3 -a 986 306 6 -a 986 499 2 -a 986 589 7 -a 986 923 9 -a 986 854 9 -a 986 451 5 -a 986 697 9 -a 986 578 7 -a 986 170 7 -a 986 58 10 -a 986 900 6 -a 986 125 9 -a 986 280 8 -a 986 181 6 -a 986 658 10 -a 986 178 5 -a 986 266 8 -a 986 562 5 -a 986 84 8 -a 986 737 1 -a 986 513 2 -a 986 722 9 -a 986 449 1 -a 986 296 4 -a 986 221 2 -a 986 601 1 -a 986 813 5 -a 986 258 10 -a 986 956 9 -a 986 94 4 -a 986 756 2 -a 986 520 4 -a 986 586 6 -a 986 970 8 -a 986 689 2 -a 986 139 9 -a 986 115 4 -a 986 746 4 -a 986 14 6 -a 986 239 1 -a 986 1 6 -a 986 194 3 -a 986 896 6 -a 986 372 7 -a 986 138 1 -a 986 545 8 -a 986 455 4 -a 986 874 5 -a 986 33 8 -a 986 152 4 -a 986 867 5 -a 986 481 5 -a 986 447 2 -a 986 63 3 -a 986 58 2 -a 986 235 4 -a 986 321 7 -a 986 328 6 -a 986 52 5 -a 986 508 9 -a 986 320 7 -a 986 637 1 -a 986 453 4 -a 986 775 2 -a 986 567 1 -a 986 729 10 -a 986 789 9 -a 986 805 9 -a 986 729 2 -a 986 982 1 -a 986 676 7 -a 986 712 2 -a 986 329 8 -a 986 813 4 -a 986 232 6 -a 986 783 7 -a 986 663 5 -a 986 264 2 -a 986 934 9 -a 986 505 10 -a 986 745 7 -a 986 356 9 -a 986 567 1 -a 986 802 7 -a 986 590 8 -a 986 887 6 -a 987 790 5 -a 987 918 9 -a 987 939 9 -a 987 273 5 -a 987 213 5 -a 987 551 5 -a 987 725 1 -a 987 196 2 -a 987 302 8 -a 987 267 6 -a 987 924 4 -a 987 66 9 -a 987 47 1 -a 987 628 2 -a 987 23 7 -a 987 722 4 -a 987 315 2 -a 987 352 3 -a 987 511 6 -a 987 546 7 -a 987 110 1 -a 987 149 7 -a 987 810 4 -a 987 20 10 -a 987 653 8 -a 987 530 4 -a 987 375 3 -a 987 195 4 -a 987 307 2 -a 987 965 1 -a 987 58 3 -a 987 72 3 -a 987 858 5 -a 987 996 9 -a 987 344 6 -a 987 46 6 -a 987 522 5 -a 987 44 9 -a 987 241 3 -a 987 823 1 -a 987 310 9 -a 987 140 2 -a 987 888 10 -a 987 356 3 -a 987 767 10 -a 987 911 1 -a 987 53 7 -a 987 58 10 -a 987 238 9 -a 987 563 8 -a 987 603 3 -a 987 347 7 -a 987 711 6 -a 987 388 9 -a 987 366 1 -a 987 339 10 -a 987 917 1 -a 987 741 1 -a 987 534 1 -a 987 199 5 -a 987 681 1 -a 987 591 10 -a 987 270 8 -a 987 514 10 -a 987 562 6 -a 987 613 8 -a 987 559 5 -a 987 59 7 -a 987 656 3 -a 987 799 6 -a 987 882 3 -a 987 965 8 -a 987 938 8 -a 987 745 7 -a 987 296 7 -a 987 680 3 -a 987 631 6 -a 987 349 3 -a 987 737 2 -a 987 868 1 -a 987 911 6 -a 987 316 1 -a 987 191 7 -a 987 598 10 -a 987 703 5 -a 987 556 1 -a 987 936 3 -a 987 596 5 -a 987 272 2 -a 987 445 10 -a 987 794 5 -a 987 952 1 -a 988 11 10 -a 988 40 3 -a 988 441 9 -a 988 572 4 -a 988 652 6 -a 988 999 1 -a 988 631 4 -a 988 284 7 -a 988 773 1 -a 988 488 1 -a 988 224 9 -a 988 686 7 -a 988 208 4 -a 988 520 9 -a 988 342 2 -a 988 839 6 -a 988 868 2 -a 988 54 4 -a 988 682 7 -a 988 754 1 -a 988 369 3 -a 988 872 7 -a 988 327 6 -a 988 48 10 -a 988 404 7 -a 988 239 7 -a 988 643 7 -a 988 675 8 -a 988 683 1 -a 988 412 3 -a 988 603 2 -a 988 694 9 -a 988 451 10 -a 988 19 10 -a 988 241 3 -a 988 79 9 -a 988 871 6 -a 988 362 2 -a 988 766 9 -a 988 334 4 -a 988 585 1 -a 988 428 10 -a 988 542 1 -a 988 80 5 -a 988 769 5 -a 988 356 10 -a 988 947 7 -a 988 822 3 -a 988 13 1 -a 988 677 3 -a 988 167 5 -a 988 885 7 -a 988 214 6 -a 988 264 1 -a 988 217 8 -a 988 856 4 -a 988 938 2 -a 988 900 1 -a 988 243 8 -a 988 516 3 -a 988 569 1 -a 988 694 6 -a 988 535 2 -a 988 809 6 -a 988 772 5 -a 988 528 7 -a 988 656 5 -a 988 109 9 -a 988 269 3 -a 988 989 7 -a 988 693 1 -a 988 696 2 -a 988 506 10 -a 988 773 2 -a 988 440 4 -a 988 861 4 -a 988 695 4 -a 988 238 5 -a 988 874 6 -a 988 347 5 -a 988 404 2 -a 988 734 10 -a 988 326 10 -a 988 617 3 -a 988 997 10 -a 988 542 4 -a 988 448 8 -a 988 910 8 -a 988 417 8 -a 988 690 3 -a 988 402 4 -a 988 985 7 -a 988 359 4 -a 988 936 6 -a 988 770 10 -a 988 106 1 -a 988 439 9 -a 988 401 5 -a 988 214 10 -a 988 707 4 -a 988 365 3 -a 988 907 2 -a 988 379 3 -a 988 871 6 -a 988 655 3 -a 988 818 4 -a 988 707 1 -a 988 325 10 -a 988 31 7 -a 988 556 4 -a 988 672 10 -a 988 434 1 -a 988 265 7 -a 988 997 10 -a 988 26 8 -a 988 237 7 -a 988 514 6 -a 988 473 4 -a 988 123 5 -a 989 931 3 -a 989 139 4 -a 989 524 8 -a 989 891 4 -a 989 497 6 -a 989 435 3 -a 989 636 3 -a 989 603 7 -a 989 873 10 -a 989 12 3 -a 989 816 1 -a 989 555 10 -a 989 377 6 -a 989 698 10 -a 989 933 9 -a 989 223 4 -a 989 328 3 -a 989 727 10 -a 989 929 3 -a 989 653 9 -a 989 757 3 -a 989 461 5 -a 989 300 10 -a 989 167 8 -a 989 725 1 -a 989 272 10 -a 989 192 10 -a 989 962 9 -a 989 785 2 -a 989 665 9 -a 989 60 2 -a 989 691 8 -a 989 803 4 -a 989 583 1 -a 989 558 9 -a 989 275 5 -a 989 169 4 -a 989 877 7 -a 989 865 8 -a 989 181 5 -a 989 669 7 -a 989 395 2 -a 989 557 1 -a 989 342 9 -a 989 304 2 -a 989 779 7 -a 989 670 6 -a 989 6 10 -a 989 683 8 -a 989 298 3 -a 989 762 5 -a 989 119 5 -a 989 597 6 -a 989 928 2 -a 989 844 10 -a 989 868 10 -a 989 96 5 -a 989 781 4 -a 989 628 7 -a 989 760 4 -a 989 840 10 -a 989 295 8 -a 989 538 10 -a 989 398 6 -a 989 852 1 -a 989 812 1 -a 989 390 8 -a 989 665 8 -a 989 230 5 -a 989 176 10 -a 989 309 3 -a 989 624 7 -a 989 732 1 -a 989 650 8 -a 989 927 8 -a 989 486 1 -a 989 295 6 -a 989 932 1 -a 989 145 3 -a 989 592 5 -a 989 670 4 -a 989 263 3 -a 989 164 6 -a 989 573 6 -a 989 82 6 -a 989 7 4 -a 989 668 10 -a 989 862 9 -a 989 635 3 -a 989 403 9 -a 989 677 4 -a 989 929 10 -a 989 940 8 -a 989 50 4 -a 989 756 4 -a 989 728 4 -a 989 439 4 -a 989 751 6 -a 989 368 3 -a 989 668 8 -a 989 927 2 -a 989 676 10 -a 989 268 8 -a 989 634 9 -a 989 301 6 -a 989 170 3 -a 989 96 4 -a 989 596 2 -a 989 78 8 -a 989 240 9 -a 989 163 5 -a 989 747 5 -a 990 502 2 -a 990 327 1 -a 990 295 3 -a 990 584 6 -a 990 333 1 -a 990 963 4 -a 990 421 1 -a 990 967 7 -a 990 341 9 -a 990 74 5 -a 990 871 8 -a 990 257 5 -a 990 123 5 -a 990 602 10 -a 990 984 7 -a 990 562 3 -a 990 329 3 -a 990 327 10 -a 990 205 1 -a 990 231 6 -a 990 472 10 -a 990 864 3 -a 990 278 7 -a 990 642 3 -a 990 959 4 -a 990 873 7 -a 990 719 9 -a 990 174 2 -a 990 12 6 -a 990 441 2 -a 990 676 8 -a 990 338 2 -a 990 735 9 -a 990 235 6 -a 990 670 7 -a 990 673 9 -a 990 655 9 -a 990 613 5 -a 990 728 8 -a 990 459 2 -a 990 246 5 -a 990 851 1 -a 990 37 7 -a 990 205 7 -a 990 388 2 -a 990 365 10 -a 990 531 5 -a 990 592 8 -a 990 595 9 -a 990 508 10 -a 990 40 6 -a 990 434 7 -a 990 785 6 -a 990 681 4 -a 990 369 9 -a 990 634 1 -a 990 375 1 -a 990 542 3 -a 990 645 2 -a 990 815 6 -a 990 193 6 -a 990 982 2 -a 990 525 7 -a 990 427 4 -a 990 627 9 -a 990 174 7 -a 990 58 2 -a 990 215 1 -a 990 163 6 -a 990 785 6 -a 990 674 7 -a 990 408 2 -a 990 611 2 -a 990 710 7 -a 990 612 10 -a 990 998 3 -a 990 50 2 -a 990 118 8 -a 990 566 1 -a 990 644 2 -a 990 625 10 -a 990 605 3 -a 990 53 9 -a 990 385 4 -a 990 261 5 -a 990 421 5 -a 990 635 1 -a 990 963 5 -a 990 638 4 -a 990 425 6 -a 990 131 1 -a 990 595 10 -a 990 949 1 -a 990 558 6 -a 990 198 2 -a 990 98 6 -a 990 615 4 -a 990 412 7 -a 990 260 6 -a 990 375 2 -a 990 61 8 -a 990 667 4 -a 990 986 3 -a 990 770 3 -a 991 254 5 -a 991 959 10 -a 991 819 4 -a 991 371 8 -a 991 500 8 -a 991 438 8 -a 991 995 3 -a 991 80 4 -a 991 491 8 -a 991 356 7 -a 991 340 1 -a 991 911 2 -a 991 349 7 -a 991 974 7 -a 991 849 8 -a 991 987 4 -a 991 374 5 -a 991 980 10 -a 991 557 2 -a 991 299 4 -a 991 513 10 -a 991 754 9 -a 991 396 6 -a 991 103 4 -a 991 142 5 -a 991 656 8 -a 991 477 7 -a 991 202 4 -a 991 298 10 -a 991 438 7 -a 991 972 10 -a 991 552 8 -a 991 373 1 -a 991 766 8 -a 991 922 9 -a 991 872 2 -a 991 180 4 -a 991 893 6 -a 991 952 7 -a 991 670 8 -a 991 224 10 -a 991 267 4 -a 991 556 7 -a 991 572 2 -a 991 217 10 -a 991 381 4 -a 991 534 2 -a 991 590 9 -a 991 336 9 -a 991 67 3 -a 991 888 8 -a 991 848 6 -a 991 820 5 -a 991 260 6 -a 991 950 7 -a 991 961 3 -a 991 915 8 -a 991 402 5 -a 991 139 2 -a 991 188 1 -a 991 840 3 -a 991 86 7 -a 991 739 4 -a 991 188 4 -a 991 851 8 -a 991 637 7 -a 991 35 3 -a 991 6 7 -a 991 505 2 -a 991 986 4 -a 991 675 8 -a 991 728 3 -a 991 229 9 -a 991 207 6 -a 991 275 2 -a 991 445 4 -a 991 587 5 -a 991 809 10 -a 991 10 2 -a 991 922 4 -a 991 875 10 -a 991 898 2 -a 991 745 3 -a 991 670 4 -a 991 133 9 -a 991 670 2 -a 991 607 1 -a 991 23 9 -a 991 47 3 -a 991 745 5 -a 991 210 6 -a 991 886 1 -a 991 830 1 -a 991 949 6 -a 991 49 7 -a 991 656 9 -a 991 561 10 -a 991 84 2 -a 991 662 2 -a 991 41 9 -a 991 45 4 -a 991 312 2 -a 991 768 2 -a 991 273 3 -a 991 518 4 -a 991 18 6 -a 991 717 6 -a 992 80 9 -a 992 826 6 -a 992 727 9 -a 992 676 9 -a 992 600 7 -a 992 721 5 -a 992 322 8 -a 992 732 9 -a 992 366 7 -a 992 928 8 -a 992 754 10 -a 992 413 9 -a 992 648 7 -a 992 963 2 -a 992 274 4 -a 992 453 1 -a 992 887 6 -a 992 323 6 -a 992 84 7 -a 992 423 3 -a 992 406 1 -a 992 745 6 -a 992 463 4 -a 992 450 9 -a 992 33 2 -a 992 206 9 -a 992 723 1 -a 992 550 7 -a 992 224 8 -a 992 415 6 -a 992 630 8 -a 992 25 3 -a 992 117 2 -a 992 606 10 -a 992 701 7 -a 992 716 6 -a 992 303 4 -a 992 423 2 -a 992 668 7 -a 992 925 10 -a 992 152 2 -a 992 56 8 -a 992 548 3 -a 992 91 5 -a 992 330 8 -a 992 1000 3 -a 992 977 3 -a 992 652 7 -a 992 59 6 -a 992 376 10 -a 992 33 9 -a 992 804 8 -a 992 838 6 -a 992 482 8 -a 992 836 9 -a 992 20 7 -a 992 180 3 -a 992 361 3 -a 992 243 4 -a 992 595 9 -a 992 990 6 -a 992 267 6 -a 992 711 9 -a 992 572 8 -a 992 967 9 -a 992 403 9 -a 992 874 10 -a 992 964 2 -a 992 825 2 -a 992 517 5 -a 992 864 7 -a 992 977 9 -a 992 573 6 -a 992 387 3 -a 992 43 2 -a 992 902 10 -a 992 362 1 -a 992 529 2 -a 992 421 4 -a 992 370 6 -a 992 561 6 -a 992 200 8 -a 992 184 3 -a 992 18 3 -a 992 11 1 -a 992 203 2 -a 992 198 4 -a 992 371 9 -a 992 445 7 -a 993 792 6 -a 993 337 1 -a 993 711 10 -a 993 478 1 -a 993 908 3 -a 993 654 5 -a 993 880 3 -a 993 757 3 -a 993 593 3 -a 993 681 3 -a 993 249 1 -a 993 433 8 -a 993 633 8 -a 993 821 10 -a 993 819 8 -a 993 675 6 -a 993 698 10 -a 993 157 4 -a 993 669 1 -a 993 202 2 -a 993 577 10 -a 993 15 4 -a 993 762 7 -a 993 776 9 -a 993 198 2 -a 993 780 4 -a 993 786 3 -a 993 400 10 -a 993 977 3 -a 993 132 9 -a 993 844 3 -a 993 744 6 -a 993 468 9 -a 993 530 4 -a 993 197 9 -a 993 351 2 -a 993 159 3 -a 993 53 7 -a 993 83 6 -a 993 752 7 -a 993 733 10 -a 993 332 8 -a 993 160 3 -a 993 341 3 -a 993 128 6 -a 993 978 9 -a 993 826 5 -a 993 110 2 -a 993 659 5 -a 993 3 4 -a 993 686 1 -a 993 673 9 -a 993 765 6 -a 993 437 4 -a 993 870 7 -a 993 520 6 -a 993 198 3 -a 993 245 5 -a 993 472 6 -a 993 330 2 -a 993 64 2 -a 993 191 2 -a 993 797 8 -a 993 594 5 -a 993 387 7 -a 993 124 10 -a 993 752 9 -a 993 439 9 -a 993 206 1 -a 993 479 10 -a 993 147 4 -a 993 537 9 -a 993 638 10 -a 993 487 3 -a 993 665 3 -a 993 592 6 -a 993 477 7 -a 993 466 2 -a 993 701 8 -a 993 112 4 -a 993 468 2 -a 993 363 3 -a 993 784 2 -a 993 208 9 -a 993 799 7 -a 993 630 8 -a 993 727 3 -a 993 997 7 -a 993 874 1 -a 993 174 1 -a 993 302 6 -a 993 938 5 -a 993 364 3 -a 993 74 1 -a 993 507 1 -a 993 751 3 -a 993 197 8 -a 993 234 5 -a 993 165 4 -a 993 403 10 -a 993 713 5 -a 993 312 6 -a 993 939 4 -a 993 326 6 -a 993 798 10 -a 993 579 5 -a 993 917 1 -a 993 251 8 -a 994 20 1 -a 994 594 1 -a 994 362 2 -a 994 488 6 -a 994 956 5 -a 994 121 4 -a 994 695 4 -a 994 730 5 -a 994 750 4 -a 994 398 8 -a 994 702 3 -a 994 600 1 -a 994 571 8 -a 994 513 7 -a 994 935 4 -a 994 53 8 -a 994 661 2 -a 994 249 10 -a 994 228 7 -a 994 825 9 -a 994 651 4 -a 994 940 9 -a 994 112 10 -a 994 566 4 -a 994 242 3 -a 994 910 3 -a 994 120 3 -a 994 134 10 -a 994 136 1 -a 994 140 8 -a 994 727 3 -a 994 497 10 -a 994 627 10 -a 994 658 3 -a 994 617 5 -a 994 297 1 -a 994 364 4 -a 994 343 10 -a 994 694 7 -a 994 41 5 -a 994 942 8 -a 994 241 8 -a 994 20 3 -a 994 430 6 -a 994 151 1 -a 994 72 2 -a 994 424 8 -a 994 811 3 -a 994 320 4 -a 994 651 1 -a 994 611 3 -a 994 971 2 -a 994 567 8 -a 994 723 6 -a 994 512 1 -a 994 808 7 -a 994 608 10 -a 994 631 10 -a 994 941 3 -a 994 743 10 -a 994 770 1 -a 994 644 4 -a 994 215 7 -a 994 372 7 -a 994 277 1 -a 994 831 5 -a 994 669 8 -a 994 640 9 -a 994 149 10 -a 994 338 7 -a 994 681 2 -a 994 66 10 -a 994 578 8 -a 994 700 9 -a 994 495 9 -a 994 728 4 -a 994 771 7 -a 994 918 2 -a 994 514 6 -a 994 66 5 -a 994 545 5 -a 994 101 2 -a 994 12 2 -a 994 87 2 -a 994 823 9 -a 994 523 5 -a 994 894 2 -a 994 406 3 -a 994 130 4 -a 994 810 7 -a 995 124 6 -a 995 899 9 -a 995 429 9 -a 995 338 5 -a 995 247 2 -a 995 706 10 -a 995 144 1 -a 995 915 8 -a 995 321 3 -a 995 293 9 -a 995 228 10 -a 995 358 9 -a 995 806 2 -a 995 676 6 -a 995 853 3 -a 995 509 8 -a 995 422 1 -a 995 746 10 -a 995 488 5 -a 995 266 4 -a 995 99 6 -a 995 499 9 -a 995 352 2 -a 995 921 3 -a 995 221 10 -a 995 302 4 -a 995 127 8 -a 995 7 5 -a 995 425 8 -a 995 1 6 -a 995 435 2 -a 995 762 8 -a 995 247 10 -a 995 116 7 -a 995 905 10 -a 995 137 1 -a 995 437 8 -a 995 173 7 -a 995 365 10 -a 995 413 3 -a 995 531 6 -a 995 146 4 -a 995 65 1 -a 995 359 8 -a 995 654 4 -a 995 486 3 -a 995 80 8 -a 995 652 10 -a 995 973 1 -a 995 346 4 -a 995 750 8 -a 995 448 2 -a 995 697 1 -a 995 646 9 -a 995 445 8 -a 995 918 6 -a 995 947 4 -a 995 571 2 -a 995 924 5 -a 995 347 4 -a 995 571 1 -a 995 334 4 -a 995 84 8 -a 995 818 4 -a 995 450 6 -a 995 989 10 -a 995 954 3 -a 995 886 4 -a 995 137 10 -a 995 294 10 -a 995 274 4 -a 995 667 5 -a 995 439 10 -a 995 338 6 -a 995 1 7 -a 995 69 3 -a 995 824 2 -a 995 81 4 -a 995 720 7 -a 995 772 1 -a 995 426 3 -a 995 446 7 -a 995 195 4 -a 995 98 6 -a 995 67 1 -a 995 639 4 -a 995 185 9 -a 995 914 7 -a 995 336 2 -a 996 756 9 -a 996 224 5 -a 996 420 9 -a 996 549 3 -a 996 673 1 -a 996 384 2 -a 996 478 10 -a 996 534 2 -a 996 520 5 -a 996 772 10 -a 996 807 2 -a 996 163 10 -a 996 186 4 -a 996 121 9 -a 996 163 9 -a 996 254 10 -a 996 944 3 -a 996 243 6 -a 996 974 8 -a 996 691 9 -a 996 668 4 -a 996 395 7 -a 996 886 8 -a 996 766 1 -a 996 461 3 -a 996 500 3 -a 996 756 7 -a 996 450 4 -a 996 685 1 -a 996 646 5 -a 996 786 9 -a 996 416 9 -a 996 869 4 -a 996 181 2 -a 996 964 2 -a 996 517 4 -a 996 564 1 -a 996 417 10 -a 996 26 8 -a 996 59 6 -a 996 164 6 -a 996 832 1 -a 996 221 10 -a 996 350 8 -a 996 952 10 -a 996 384 6 -a 996 603 7 -a 996 871 4 -a 996 626 10 -a 996 552 1 -a 996 538 10 -a 996 270 6 -a 996 946 7 -a 996 399 2 -a 996 11 10 -a 996 383 3 -a 996 898 9 -a 996 766 7 -a 996 832 4 -a 996 558 7 -a 996 387 9 -a 996 593 5 -a 996 973 7 -a 996 231 2 -a 996 773 5 -a 996 912 4 -a 996 747 6 -a 996 312 5 -a 996 305 7 -a 996 772 3 -a 996 371 1 -a 996 468 4 -a 996 580 10 -a 996 591 9 -a 996 817 1 -a 996 507 6 -a 996 974 10 -a 996 396 4 -a 996 354 3 -a 996 576 4 -a 996 947 3 -a 996 891 6 -a 996 845 3 -a 996 869 10 -a 996 265 7 -a 996 855 6 -a 996 227 10 -a 996 138 10 -a 996 596 1 -a 996 34 8 -a 996 696 2 -a 996 983 8 -a 996 627 5 -a 996 644 7 -a 996 189 1 -a 996 375 7 -a 996 532 2 -a 996 936 1 -a 996 687 8 -a 996 836 6 -a 996 683 3 -a 996 33 8 -a 997 279 8 -a 997 238 1 -a 997 623 5 -a 997 72 3 -a 997 745 1 -a 997 573 4 -a 997 467 8 -a 997 74 2 -a 997 124 5 -a 997 389 3 -a 997 964 2 -a 997 968 9 -a 997 233 7 -a 997 204 1 -a 997 798 9 -a 997 459 6 -a 997 341 9 -a 997 369 2 -a 997 493 5 -a 997 12 6 -a 997 327 8 -a 997 95 10 -a 997 656 7 -a 997 516 8 -a 997 469 3 -a 997 163 10 -a 997 427 8 -a 997 131 2 -a 997 998 4 -a 997 85 1 -a 997 163 3 -a 997 252 10 -a 997 323 1 -a 997 786 7 -a 997 323 6 -a 997 43 5 -a 997 334 2 -a 997 789 6 -a 997 116 4 -a 997 457 5 -a 997 154 9 -a 997 55 6 -a 997 400 9 -a 997 386 7 -a 997 258 10 -a 997 173 1 -a 997 845 10 -a 997 598 4 -a 997 541 7 -a 997 313 4 -a 997 610 3 -a 997 868 2 -a 997 407 4 -a 997 241 1 -a 997 359 5 -a 997 875 3 -a 997 403 8 -a 997 785 4 -a 997 376 10 -a 997 869 1 -a 997 144 6 -a 997 627 6 -a 997 167 10 -a 997 929 2 -a 997 950 5 -a 997 209 10 -a 997 238 10 -a 997 714 10 -a 997 324 9 -a 997 694 1 -a 997 867 3 -a 997 378 8 -a 997 69 2 -a 997 229 7 -a 997 635 9 -a 997 241 1 -a 997 49 1 -a 997 209 8 -a 997 782 1 -a 997 361 6 -a 997 818 10 -a 997 625 7 -a 997 767 1 -a 997 34 3 -a 997 983 5 -a 997 617 8 -a 997 436 10 -a 998 743 8 -a 998 598 8 -a 998 811 6 -a 998 587 2 -a 998 742 3 -a 998 413 4 -a 998 754 7 -a 998 646 5 -a 998 338 8 -a 998 962 7 -a 998 884 1 -a 998 28 3 -a 998 262 5 -a 998 553 8 -a 998 894 3 -a 998 639 8 -a 998 622 7 -a 998 98 7 -a 998 250 3 -a 998 862 6 -a 998 146 5 -a 998 458 9 -a 998 619 4 -a 998 506 2 -a 998 251 2 -a 998 219 6 -a 998 248 5 -a 998 284 9 -a 998 177 8 -a 998 865 5 -a 998 719 9 -a 998 919 9 -a 998 438 7 -a 998 505 6 -a 998 482 5 -a 998 155 6 -a 998 917 9 -a 998 211 3 -a 998 801 2 -a 998 231 4 -a 998 148 2 -a 998 660 1 -a 998 258 1 -a 998 409 8 -a 998 188 7 -a 998 127 5 -a 998 24 7 -a 998 809 3 -a 998 225 3 -a 998 273 2 -a 998 647 3 -a 998 370 6 -a 998 730 9 -a 998 241 4 -a 998 876 4 -a 998 980 6 -a 998 460 9 -a 998 99 8 -a 998 239 6 -a 998 636 6 -a 998 963 4 -a 998 957 3 -a 998 531 3 -a 998 377 7 -a 998 437 6 -a 998 531 3 -a 998 329 8 -a 998 198 9 -a 998 307 1 -a 998 559 3 -a 998 345 8 -a 998 966 9 -a 998 816 7 -a 998 754 1 -a 998 130 1 -a 998 943 8 -a 998 777 10 -a 998 938 6 -a 998 143 3 -a 998 25 10 -a 998 560 9 -a 998 512 5 -a 998 754 9 -a 998 801 7 -a 998 363 5 -a 998 709 5 -a 998 236 10 -a 998 462 6 -a 998 947 5 -a 998 871 10 -a 998 400 4 -a 998 879 1 -a 998 377 2 -a 998 776 10 -a 998 291 8 -a 998 364 8 -a 998 283 5 -a 998 619 1 -a 998 561 4 -a 998 589 8 -a 998 154 10 -a 998 906 2 -a 998 531 6 -a 999 969 7 -a 999 635 3 -a 999 660 3 -a 999 887 5 -a 999 387 9 -a 999 573 5 -a 999 5 3 -a 999 411 2 -a 999 109 4 -a 999 517 6 -a 999 140 4 -a 999 909 8 -a 999 879 6 -a 999 848 2 -a 999 120 2 -a 999 316 7 -a 999 770 3 -a 999 990 9 -a 999 716 10 -a 999 624 10 -a 999 343 7 -a 999 467 1 -a 999 914 1 -a 999 706 4 -a 999 749 6 -a 999 508 7 -a 999 243 1 -a 999 314 2 -a 999 661 2 -a 999 124 8 -a 999 844 6 -a 999 606 10 -a 999 758 6 -a 999 479 5 -a 999 468 2 -a 999 120 9 -a 999 27 3 -a 999 473 7 -a 999 530 7 -a 999 135 2 -a 999 989 7 -a 999 669 7 -a 999 19 2 -a 999 843 10 -a 999 492 9 -a 999 138 2 -a 999 135 7 -a 999 237 10 -a 999 104 3 -a 999 850 6 -a 999 860 6 -a 999 446 10 -a 999 292 4 -a 999 749 6 -a 999 127 5 -a 999 17 5 -a 999 232 1 -a 999 369 6 -a 999 330 4 -a 999 893 6 -a 999 492 5 -a 999 149 2 -a 999 474 6 -a 999 225 5 -a 999 627 2 -a 999 941 5 -a 999 344 6 -a 999 653 6 -a 999 389 9 -a 999 873 8 -a 999 788 1 -a 999 353 1 -a 999 517 1 -a 999 806 8 -a 999 172 4 -a 999 944 6 -a 999 306 7 -a 999 220 9 -a 999 23 10 -a 999 131 5 -a 999 55 9 -a 999 468 9 -a 999 422 10 -a 999 803 6 -a 999 594 10 -a 999 438 7 -a 999 11 5 -a 999 963 4 -a 999 767 7 -a 999 903 2 -a 999 430 9 -a 999 915 5 -a 999 352 7 -a 999 655 4 -a 999 517 5 -a 999 268 10 -a 999 998 5 -a 1000 146 2 -a 1000 657 2 -a 1000 847 10 -a 1000 933 8 -a 1000 339 10 -a 1000 714 3 -a 1000 156 3 -a 1000 323 6 -a 1000 633 8 -a 1000 461 1 -a 1000 542 1 -a 1000 655 2 -a 1000 591 5 -a 1000 597 8 -a 1000 98 7 -a 1000 375 1 -a 1000 692 9 -a 1000 426 4 -a 1000 385 5 -a 1000 630 3 -a 1000 169 2 -a 1000 263 9 -a 1000 35 4 -a 1000 59 4 -a 1000 614 2 -a 1000 689 4 -a 1000 576 7 -a 1000 882 5 -a 1000 663 6 -a 1000 721 10 -a 1000 514 6 -a 1000 485 6 -a 1000 629 4 -a 1000 498 10 -a 1000 823 3 -a 1000 318 3 -a 1000 654 7 -a 1000 121 9 -a 1000 951 7 -a 1000 90 7 -a 1000 663 9 -a 1000 581 3 -a 1000 681 1 -a 1000 235 4 -a 1000 679 7 -a 1000 669 7 -a 1000 609 4 -a 1000 346 8 -a 1000 70 8 -a 1000 994 8 -a 1000 975 1 -a 1000 238 2 -a 1000 232 3 -a 1000 297 2 -a 1000 846 8 -a 1000 674 2 -a 1000 872 7 -a 1000 703 2 -a 1000 312 5 -a 1000 568 4 -a 1000 192 6 -a 1000 796 5 -a 1000 172 7 -a 1000 689 2 -a 1000 594 8 -a 1000 489 5 -a 1000 318 7 -a 1000 715 6 -a 1000 415 4 -a 1000 408 1 -a 1000 353 3 -a 1000 996 8 -a 1000 64 5 -a 1000 587 9 -a 1000 650 9 -a 1000 732 10 -a 1000 171 6 -a 1000 995 1 -a 1000 801 4 -a 1000 140 10 -a 1000 945 4 -a 1000 15 10 -a 1000 372 10 -a 1000 929 5 -a 1000 311 6 -a 1000 193 5 -a 1000 578 2 -a 1 1 7 -a 1 1000 8 -a 1 2 3 -a 2 1000 7 -a 1 3 2 -a 3 1000 9 -a 1 4 5 -a 4 1000 5 -a 1 5 2 -a 5 1000 4 -a 1 6 6 -a 6 1000 10 -a 1 7 10 -a 7 1000 3 -a 1 8 4 -a 8 1000 2 -a 1 9 2 -a 9 1000 6 -a 1 10 2 -a 10 1000 1 -a 1 11 3 -a 11 1000 5 -a 1 12 3 -a 12 1000 4 -a 1 13 4 -a 13 1000 10 -a 1 14 2 -a 14 1000 8 -a 1 15 6 -a 15 1000 10 -a 1 16 10 -a 16 1000 5 -a 1 17 7 -a 17 1000 1 -a 1 18 7 -a 18 1000 1 -a 1 19 7 -a 19 1000 10 -a 1 20 10 -a 20 1000 8 -a 1 21 11 -a 21 1000 4 -a 1 22 9 -a 22 1000 6 -a 1 23 5 -a 23 1000 1 -a 1 24 6 -a 24 1000 9 -a 1 25 9 -a 25 1000 2 -a 1 26 2 -a 26 1000 1 -a 1 27 2 -a 27 1000 1 -a 1 28 2 -a 28 1000 5 -a 1 29 8 -a 29 1000 8 -a 1 30 6 -a 30 1000 8 -a 1 31 6 -a 31 1000 9 -a 1 32 4 -a 32 1000 8 -a 1 33 9 -a 33 1000 8 -a 1 34 8 -a 34 1000 2 -a 1 35 10 -a 35 1000 8 -a 1 36 8 -a 36 1000 9 -a 1 37 4 -a 37 1000 4 -a 1 38 8 -a 38 1000 6 -a 1 39 7 -a 39 1000 3 -a 1 40 3 -a 40 1000 5 -a 1 41 5 -a 41 1000 3 -a 1 42 2 -a 42 1000 9 -a 1 43 11 -a 43 1000 10 -a 1 44 6 -a 44 1000 7 -a 1 45 2 -a 45 1000 5 -a 1 46 9 -a 46 1000 5 -a 1 47 5 -a 47 1000 2 -a 1 48 3 -a 48 1000 7 -a 1 49 10 -a 49 1000 7 -a 1 50 5 -a 50 1000 9 -a 1 51 9 -a 51 1000 7 -a 1 52 8 -a 52 1000 3 -a 1 53 4 -a 53 1000 8 -a 1 54 4 -a 54 1000 9 -a 1 55 10 -a 55 1000 7 -a 1 56 6 -a 56 1000 1 -a 1 57 8 -a 57 1000 9 -a 1 58 5 -a 58 1000 8 -a 1 59 11 -a 59 1000 1 -a 1 60 6 -a 60 1000 10 -a 1 61 5 -a 61 1000 5 -a 1 62 11 -a 62 1000 2 -a 1 63 9 -a 63 1000 4 -a 1 64 7 -a 64 1000 7 -a 1 65 6 -a 65 1000 2 -a 1 66 7 -a 66 1000 8 -a 1 67 11 -a 67 1000 2 -a 1 68 2 -a 68 1000 6 -a 1 69 11 -a 69 1000 5 -a 1 70 4 -a 70 1000 4 -a 1 71 11 -a 71 1000 1 -a 1 72 2 -a 72 1000 5 -a 1 73 4 -a 73 1000 2 -a 1 74 8 -a 74 1000 4 -a 1 75 10 -a 75 1000 9 -a 1 76 9 -a 76 1000 5 -a 1 77 7 -a 77 1000 4 -a 1 78 5 -a 78 1000 9 -a 1 79 6 -a 79 1000 8 -a 1 80 6 -a 80 1000 5 -a 1 81 10 -a 81 1000 4 -a 1 82 11 -a 82 1000 8 -a 1 83 10 -a 83 1000 5 -a 1 84 9 -a 84 1000 6 -a 1 85 4 -a 85 1000 1 -a 1 86 5 -a 86 1000 4 -a 1 87 5 -a 87 1000 2 -a 1 88 8 -a 88 1000 6 -a 1 89 11 -a 89 1000 4 -a 1 90 11 -a 90 1000 1 -a 1 91 3 -a 91 1000 6 -a 1 92 7 -a 92 1000 9 -a 1 93 10 -a 93 1000 2 -a 1 94 10 -a 94 1000 4 -a 1 95 4 -a 95 1000 5 -a 1 96 3 -a 96 1000 2 -a 1 97 5 -a 97 1000 5 -a 1 98 6 -a 98 1000 2 -a 1 99 9 -a 99 1000 4 -a 1 100 4 -a 100 1000 2 -a 1 101 6 -a 101 1000 10 -a 1 102 7 -a 102 1000 4 -a 1 103 6 -a 103 1000 1 -a 1 104 2 -a 104 1000 5 -a 1 105 3 -a 105 1000 3 -a 1 106 9 -a 106 1000 6 -a 1 107 10 -a 107 1000 10 -a 1 108 8 -a 108 1000 1 -a 1 109 11 -a 109 1000 6 -a 1 110 6 -a 110 1000 8 -a 1 111 10 -a 111 1000 1 -a 1 112 11 -a 112 1000 7 -a 1 113 4 -a 113 1000 1 -a 1 114 8 -a 114 1000 7 -a 1 115 3 -a 115 1000 9 -a 1 116 9 -a 116 1000 7 -a 1 117 10 -a 117 1000 7 -a 1 118 7 -a 118 1000 2 -a 1 119 5 -a 119 1000 8 -a 1 120 3 -a 120 1000 5 -a 1 121 7 -a 121 1000 4 -a 1 122 8 -a 122 1000 6 -a 1 123 2 -a 123 1000 1 -a 1 124 5 -a 124 1000 7 -a 1 125 7 -a 125 1000 2 -a 1 126 7 -a 126 1000 10 -a 1 127 10 -a 127 1000 3 -a 1 128 3 -a 128 1000 4 -a 1 129 4 -a 129 1000 2 -a 1 130 7 -a 130 1000 10 -a 1 131 3 -a 131 1000 2 -a 1 132 9 -a 132 1000 7 -a 1 133 9 -a 133 1000 10 -a 1 134 11 -a 134 1000 5 -a 1 135 6 -a 135 1000 7 -a 1 136 5 -a 136 1000 10 -a 1 137 7 -a 137 1000 5 -a 1 138 8 -a 138 1000 9 -a 1 139 3 -a 139 1000 1 -a 1 140 9 -a 140 1000 4 -a 1 141 8 -a 141 1000 3 -a 1 142 7 -a 142 1000 8 -a 1 143 5 -a 143 1000 4 -a 1 144 4 -a 144 1000 7 -a 1 145 10 -a 145 1000 4 -a 1 146 3 -a 146 1000 10 -a 1 147 9 -a 147 1000 6 -a 1 148 7 -a 148 1000 2 -a 1 149 8 -a 149 1000 7 -a 1 150 11 -a 150 1000 9 -a 1 151 9 -a 151 1000 6 -a 1 152 8 -a 152 1000 1 -a 1 153 4 -a 153 1000 6 -a 1 154 3 -a 154 1000 5 -a 1 155 6 -a 155 1000 8 -a 1 156 8 -a 156 1000 5 -a 1 157 2 -a 157 1000 8 -a 1 158 3 -a 158 1000 5 -a 1 159 7 -a 159 1000 8 -a 1 160 3 -a 160 1000 3 -a 1 161 3 -a 161 1000 2 -a 1 162 10 -a 162 1000 5 -a 1 163 9 -a 163 1000 8 -a 1 164 9 -a 164 1000 1 -a 1 165 11 -a 165 1000 9 -a 1 166 6 -a 166 1000 8 -a 1 167 5 -a 167 1000 9 -a 1 168 11 -a 168 1000 4 -a 1 169 5 -a 169 1000 5 -a 1 170 6 -a 170 1000 2 -a 1 171 7 -a 171 1000 7 -a 1 172 3 -a 172 1000 8 -a 1 173 5 -a 173 1000 2 -a 1 174 7 -a 174 1000 7 -a 1 175 8 -a 175 1000 1 -a 1 176 5 -a 176 1000 8 -a 1 177 2 -a 177 1000 6 -a 1 178 5 -a 178 1000 3 -a 1 179 4 -a 179 1000 2 -a 1 180 7 -a 180 1000 1 -a 1 181 7 -a 181 1000 7 -a 1 182 9 -a 182 1000 5 -a 1 183 3 -a 183 1000 6 -a 1 184 7 -a 184 1000 7 -a 1 185 4 -a 185 1000 10 -a 1 186 7 -a 186 1000 1 -a 1 187 4 -a 187 1000 1 -a 1 188 3 -a 188 1000 6 -a 1 189 4 -a 189 1000 8 -a 1 190 2 -a 190 1000 6 -a 1 191 5 -a 191 1000 8 -a 1 192 9 -a 192 1000 4 -a 1 193 10 -a 193 1000 10 -a 1 194 10 -a 194 1000 5 -a 1 195 2 -a 195 1000 2 -a 1 196 2 -a 196 1000 7 -a 1 197 3 -a 197 1000 9 -a 1 198 3 -a 198 1000 5 -a 1 199 7 -a 199 1000 3 -a 1 200 3 -a 200 1000 1 -a 1 201 4 -a 201 1000 5 -a 1 202 4 -a 202 1000 5 -a 1 203 3 -a 203 1000 10 -a 1 204 9 -a 204 1000 6 -a 1 205 2 -a 205 1000 9 -a 1 206 7 -a 206 1000 10 -a 1 207 7 -a 207 1000 1 -a 1 208 4 -a 208 1000 8 -a 1 209 3 -a 209 1000 2 -a 1 210 6 -a 210 1000 6 -a 1 211 11 -a 211 1000 8 -a 1 212 9 -a 212 1000 2 -a 1 213 2 -a 213 1000 4 -a 1 214 5 -a 214 1000 10 -a 1 215 7 -a 215 1000 1 -a 1 216 8 -a 216 1000 9 -a 1 217 6 -a 217 1000 10 -a 1 218 11 -a 218 1000 3 -a 1 219 10 -a 219 1000 3 -a 1 220 11 -a 220 1000 5 -a 1 221 3 -a 221 1000 3 -a 1 222 4 -a 222 1000 4 -a 1 223 2 -a 223 1000 6 -a 1 224 4 -a 224 1000 8 -a 1 225 10 -a 225 1000 9 -a 1 226 9 -a 226 1000 7 -a 1 227 5 -a 227 1000 5 -a 1 228 8 -a 228 1000 9 -a 1 229 3 -a 229 1000 8 -a 1 230 6 -a 230 1000 7 -a 1 231 3 -a 231 1000 8 -a 1 232 11 -a 232 1000 2 -a 1 233 3 -a 233 1000 10 -a 1 234 3 -a 234 1000 10 -a 1 235 3 -a 235 1000 10 -a 1 236 2 -a 236 1000 5 -a 1 237 8 -a 237 1000 5 -a 1 238 4 -a 238 1000 10 -a 1 239 5 -a 239 1000 3 -a 1 240 5 -a 240 1000 7 -a 1 241 4 -a 241 1000 2 -a 1 242 2 -a 242 1000 5 -a 1 243 11 -a 243 1000 6 -a 1 244 8 -a 244 1000 10 -a 1 245 11 -a 245 1000 10 -a 1 246 10 -a 246 1000 6 -a 1 247 10 -a 247 1000 2 -a 1 248 10 -a 248 1000 1 -a 1 249 9 -a 249 1000 7 -a 1 250 6 -a 250 1000 6 -a 1 251 4 -a 251 1000 1 -a 1 252 6 -a 252 1000 5 -a 1 253 4 -a 253 1000 10 -a 1 254 10 -a 254 1000 8 -a 1 255 3 -a 255 1000 5 -a 1 256 6 -a 256 1000 6 -a 1 257 11 -a 257 1000 7 -a 1 258 8 -a 258 1000 3 -a 1 259 2 -a 259 1000 7 -a 1 260 11 -a 260 1000 2 -a 1 261 2 -a 261 1000 6 -a 1 262 11 -a 262 1000 2 -a 1 263 5 -a 263 1000 8 -a 1 264 11 -a 264 1000 3 -a 1 265 4 -a 265 1000 8 -a 1 266 4 -a 266 1000 2 -a 1 267 9 -a 267 1000 3 -a 1 268 10 -a 268 1000 9 -a 1 269 9 -a 269 1000 7 -a 1 270 6 -a 270 1000 6 -a 1 271 5 -a 271 1000 7 -a 1 272 7 -a 272 1000 2 -a 1 273 6 -a 273 1000 6 -a 1 274 7 -a 274 1000 1 -a 1 275 10 -a 275 1000 1 -a 1 276 2 -a 276 1000 6 -a 1 277 11 -a 277 1000 8 -a 1 278 2 -a 278 1000 4 -a 1 279 7 -a 279 1000 7 -a 1 280 4 -a 280 1000 9 -a 1 281 5 -a 281 1000 3 -a 1 282 5 -a 282 1000 3 -a 1 283 3 -a 283 1000 3 -a 1 284 10 -a 284 1000 1 -a 1 285 7 -a 285 1000 1 -a 1 286 4 -a 286 1000 7 -a 1 287 9 -a 287 1000 6 -a 1 288 7 -a 288 1000 5 -a 1 289 7 -a 289 1000 8 -a 1 290 11 -a 290 1000 5 -a 1 291 8 -a 291 1000 9 -a 1 292 5 -a 292 1000 10 -a 1 293 8 -a 293 1000 10 -a 1 294 10 -a 294 1000 3 -a 1 295 4 -a 295 1000 8 -a 1 296 11 -a 296 1000 3 -a 1 297 3 -a 297 1000 9 -a 1 298 2 -a 298 1000 6 -a 1 299 7 -a 299 1000 6 -a 1 300 11 -a 300 1000 4 -a 1 301 3 -a 301 1000 2 -a 1 302 8 -a 302 1000 7 -a 1 303 8 -a 303 1000 6 -a 1 304 6 -a 304 1000 9 -a 1 305 9 -a 305 1000 3 -a 1 306 5 -a 306 1000 2 -a 1 307 10 -a 307 1000 6 -a 1 308 11 -a 308 1000 3 -a 1 309 3 -a 309 1000 1 -a 1 310 2 -a 310 1000 8 -a 1 311 11 -a 311 1000 5 -a 1 312 10 -a 312 1000 3 -a 1 313 9 -a 313 1000 8 -a 1 314 10 -a 314 1000 6 -a 1 315 5 -a 315 1000 5 -a 1 316 8 -a 316 1000 1 -a 1 317 8 -a 317 1000 10 -a 1 318 11 -a 318 1000 6 -a 1 319 3 -a 319 1000 9 -a 1 320 8 -a 320 1000 1 -a 1 321 3 -a 321 1000 4 -a 1 322 10 -a 322 1000 2 -a 1 323 8 -a 323 1000 9 -a 1 324 3 -a 324 1000 8 -a 1 325 2 -a 325 1000 9 -a 1 326 9 -a 326 1000 5 -a 1 327 6 -a 327 1000 4 -a 1 328 11 -a 328 1000 10 -a 1 329 11 -a 329 1000 7 -a 1 330 6 -a 330 1000 4 -a 1 331 6 -a 331 1000 4 -a 1 332 8 -a 332 1000 6 -a 1 333 4 -a 333 1000 8 -a 1 334 3 -a 334 1000 8 -a 1 335 9 -a 335 1000 9 -a 1 336 6 -a 336 1000 8 -a 1 337 10 -a 337 1000 1 -a 1 338 4 -a 338 1000 5 -a 1 339 10 -a 339 1000 9 -a 1 340 6 -a 340 1000 2 -a 1 341 3 -a 341 1000 9 -a 1 342 8 -a 342 1000 3 -a 1 343 9 -a 343 1000 5 -a 1 344 11 -a 344 1000 7 -a 1 345 7 -a 345 1000 1 -a 1 346 6 -a 346 1000 9 -a 1 347 3 -a 347 1000 6 -a 1 348 5 -a 348 1000 10 -a 1 349 9 -a 349 1000 3 -a 1 350 7 -a 350 1000 7 -a 1 351 2 -a 351 1000 10 -a 1 352 8 -a 352 1000 4 -a 1 353 10 -a 353 1000 9 -a 1 354 3 -a 354 1000 2 -a 1 355 3 -a 355 1000 2 -a 1 356 7 -a 356 1000 8 -a 1 357 11 -a 357 1000 2 -a 1 358 10 -a 358 1000 9 -a 1 359 6 -a 359 1000 7 -a 1 360 11 -a 360 1000 6 -a 1 361 11 -a 361 1000 6 -a 1 362 4 -a 362 1000 6 -a 1 363 8 -a 363 1000 5 -a 1 364 5 -a 364 1000 6 -a 1 365 2 -a 365 1000 5 -a 1 366 9 -a 366 1000 4 -a 1 367 8 -a 367 1000 10 -a 1 368 6 -a 368 1000 8 -a 1 369 6 -a 369 1000 9 -a 1 370 9 -a 370 1000 10 -a 1 371 7 -a 371 1000 5 -a 1 372 10 -a 372 1000 4 -a 1 373 7 -a 373 1000 7 -a 1 374 3 -a 374 1000 5 -a 1 375 5 -a 375 1000 3 -a 1 376 11 -a 376 1000 5 -a 1 377 10 -a 377 1000 4 -a 1 378 8 -a 378 1000 8 -a 1 379 7 -a 379 1000 5 -a 1 380 9 -a 380 1000 5 -a 1 381 4 -a 381 1000 6 -a 1 382 4 -a 382 1000 2 -a 1 383 10 -a 383 1000 8 -a 1 384 10 -a 384 1000 4 -a 1 385 4 -a 385 1000 8 -a 1 386 7 -a 386 1000 3 -a 1 387 3 -a 387 1000 1 -a 1 388 8 -a 388 1000 10 -a 1 389 11 -a 389 1000 9 -a 1 390 10 -a 390 1000 5 -a 1 391 11 -a 391 1000 2 -a 1 392 9 -a 392 1000 2 -a 1 393 3 -a 393 1000 9 -a 1 394 2 -a 394 1000 1 -a 1 395 6 -a 395 1000 2 -a 1 396 10 -a 396 1000 10 -a 1 397 5 -a 397 1000 10 -a 1 398 11 -a 398 1000 3 -a 1 399 6 -a 399 1000 3 -a 1 400 8 -a 400 1000 10 -a 1 401 6 -a 401 1000 8 -a 1 402 7 -a 402 1000 7 -a 1 403 9 -a 403 1000 1 -a 1 404 3 -a 404 1000 9 -a 1 405 3 -a 405 1000 5 -a 1 406 9 -a 406 1000 4 -a 1 407 11 -a 407 1000 10 -a 1 408 8 -a 408 1000 8 -a 1 409 4 -a 409 1000 1 -a 1 410 2 -a 410 1000 7 -a 1 411 10 -a 411 1000 3 -a 1 412 11 -a 412 1000 8 -a 1 413 5 -a 413 1000 8 -a 1 414 2 -a 414 1000 1 -a 1 415 7 -a 415 1000 4 -a 1 416 10 -a 416 1000 2 -a 1 417 10 -a 417 1000 2 -a 1 418 5 -a 418 1000 8 -a 1 419 5 -a 419 1000 1 -a 1 420 5 -a 420 1000 10 -a 1 421 4 -a 421 1000 3 -a 1 422 11 -a 422 1000 3 -a 1 423 8 -a 423 1000 3 -a 1 424 9 -a 424 1000 2 -a 1 425 4 -a 425 1000 8 -a 1 426 4 -a 426 1000 6 -a 1 427 10 -a 427 1000 7 -a 1 428 9 -a 428 1000 10 -a 1 429 11 -a 429 1000 9 -a 1 430 6 -a 430 1000 3 -a 1 431 2 -a 431 1000 5 -a 1 432 2 -a 432 1000 2 -a 1 433 10 -a 433 1000 4 -a 1 434 2 -a 434 1000 1 -a 1 435 3 -a 435 1000 10 -a 1 436 9 -a 436 1000 6 -a 1 437 7 -a 437 1000 8 -a 1 438 5 -a 438 1000 6 -a 1 439 10 -a 439 1000 2 -a 1 440 5 -a 440 1000 5 -a 1 441 10 -a 441 1000 1 -a 1 442 6 -a 442 1000 5 -a 1 443 2 -a 443 1000 4 -a 1 444 7 -a 444 1000 10 -a 1 445 4 -a 445 1000 5 -a 1 446 3 -a 446 1000 8 -a 1 447 2 -a 447 1000 10 -a 1 448 5 -a 448 1000 2 -a 1 449 8 -a 449 1000 2 -a 1 450 2 -a 450 1000 1 -a 1 451 2 -a 451 1000 4 -a 1 452 3 -a 452 1000 9 -a 1 453 2 -a 453 1000 10 -a 1 454 10 -a 454 1000 6 -a 1 455 10 -a 455 1000 9 -a 1 456 4 -a 456 1000 3 -a 1 457 7 -a 457 1000 1 -a 1 458 9 -a 458 1000 4 -a 1 459 10 -a 459 1000 2 -a 1 460 9 -a 460 1000 1 -a 1 461 10 -a 461 1000 1 -a 1 462 5 -a 462 1000 1 -a 1 463 11 -a 463 1000 4 -a 1 464 3 -a 464 1000 7 -a 1 465 11 -a 465 1000 9 -a 1 466 10 -a 466 1000 6 -a 1 467 11 -a 467 1000 7 -a 1 468 6 -a 468 1000 6 -a 1 469 2 -a 469 1000 7 -a 1 470 7 -a 470 1000 6 -a 1 471 4 -a 471 1000 2 -a 1 472 6 -a 472 1000 2 -a 1 473 10 -a 473 1000 4 -a 1 474 9 -a 474 1000 10 -a 1 475 8 -a 475 1000 4 -a 1 476 9 -a 476 1000 10 -a 1 477 4 -a 477 1000 9 -a 1 478 9 -a 478 1000 5 -a 1 479 2 -a 479 1000 1 -a 1 480 2 -a 480 1000 10 -a 1 481 4 -a 481 1000 7 -a 1 482 11 -a 482 1000 9 -a 1 483 2 -a 483 1000 6 -a 1 484 5 -a 484 1000 9 -a 1 485 4 -a 485 1000 9 -a 1 486 7 -a 486 1000 8 -a 1 487 8 -a 487 1000 2 -a 1 488 9 -a 488 1000 7 -a 1 489 4 -a 489 1000 4 -a 1 490 10 -a 490 1000 3 -a 1 491 4 -a 491 1000 3 -a 1 492 6 -a 492 1000 5 -a 1 493 5 -a 493 1000 5 -a 1 494 4 -a 494 1000 3 -a 1 495 9 -a 495 1000 3 -a 1 496 3 -a 496 1000 5 -a 1 497 4 -a 497 1000 2 -a 1 498 10 -a 498 1000 3 -a 1 499 4 -a 499 1000 1 -a 1 500 6 -a 500 1000 3 -a 1 501 10 -a 501 1000 8 -a 1 502 6 -a 502 1000 5 -a 1 503 3 -a 503 1000 6 -a 1 504 3 -a 504 1000 10 -a 1 505 5 -a 505 1000 1 -a 1 506 2 -a 506 1000 2 -a 1 507 4 -a 507 1000 7 -a 1 508 3 -a 508 1000 6 -a 1 509 2 -a 509 1000 4 -a 1 510 6 -a 510 1000 1 -a 1 511 9 -a 511 1000 7 -a 1 512 11 -a 512 1000 4 -a 1 513 4 -a 513 1000 3 -a 1 514 3 -a 514 1000 2 -a 1 515 4 -a 515 1000 7 -a 1 516 9 -a 516 1000 7 -a 1 517 7 -a 517 1000 4 -a 1 518 5 -a 518 1000 4 -a 1 519 6 -a 519 1000 9 -a 1 520 6 -a 520 1000 8 -a 1 521 6 -a 521 1000 3 -a 1 522 3 -a 522 1000 9 -a 1 523 5 -a 523 1000 1 -a 1 524 11 -a 524 1000 1 -a 1 525 5 -a 525 1000 4 -a 1 526 11 -a 526 1000 8 -a 1 527 2 -a 527 1000 6 -a 1 528 2 -a 528 1000 10 -a 1 529 4 -a 529 1000 10 -a 1 530 11 -a 530 1000 6 -a 1 531 3 -a 531 1000 9 -a 1 532 10 -a 532 1000 6 -a 1 533 6 -a 533 1000 1 -a 1 534 6 -a 534 1000 4 -a 1 535 7 -a 535 1000 6 -a 1 536 5 -a 536 1000 9 -a 1 537 11 -a 537 1000 2 -a 1 538 9 -a 538 1000 8 -a 1 539 3 -a 539 1000 4 -a 1 540 6 -a 540 1000 8 -a 1 541 3 -a 541 1000 6 -a 1 542 2 -a 542 1000 5 -a 1 543 5 -a 543 1000 6 -a 1 544 2 -a 544 1000 1 -a 1 545 6 -a 545 1000 3 -a 1 546 6 -a 546 1000 4 -a 1 547 4 -a 547 1000 6 -a 1 548 7 -a 548 1000 8 -a 1 549 6 -a 549 1000 6 -a 1 550 4 -a 550 1000 3 -a 1 551 10 -a 551 1000 6 -a 1 552 3 -a 552 1000 2 -a 1 553 10 -a 553 1000 2 -a 1 554 9 -a 554 1000 1 -a 1 555 9 -a 555 1000 5 -a 1 556 6 -a 556 1000 4 -a 1 557 4 -a 557 1000 9 -a 1 558 11 -a 558 1000 2 -a 1 559 6 -a 559 1000 4 -a 1 560 2 -a 560 1000 10 -a 1 561 3 -a 561 1000 1 -a 1 562 5 -a 562 1000 9 -a 1 563 10 -a 563 1000 7 -a 1 564 10 -a 564 1000 10 -a 1 565 4 -a 565 1000 3 -a 1 566 7 -a 566 1000 3 -a 1 567 11 -a 567 1000 1 -a 1 568 9 -a 568 1000 9 -a 1 569 3 -a 569 1000 7 -a 1 570 6 -a 570 1000 3 -a 1 571 10 -a 571 1000 5 -a 1 572 5 -a 572 1000 1 -a 1 573 3 -a 573 1000 8 -a 1 574 7 -a 574 1000 10 -a 1 575 11 -a 575 1000 8 -a 1 576 3 -a 576 1000 6 -a 1 577 11 -a 577 1000 4 -a 1 578 4 -a 578 1000 1 -a 1 579 11 -a 579 1000 7 -a 1 580 10 -a 580 1000 9 -a 1 581 10 -a 581 1000 8 -a 1 582 6 -a 582 1000 10 -a 1 583 2 -a 583 1000 5 -a 1 584 5 -a 584 1000 10 -a 1 585 2 -a 585 1000 1 -a 1 586 9 -a 586 1000 8 -a 1 587 7 -a 587 1000 2 -a 1 588 2 -a 588 1000 6 -a 1 589 11 -a 589 1000 6 -a 1 590 3 -a 590 1000 10 -a 1 591 8 -a 591 1000 6 -a 1 592 6 -a 592 1000 9 -a 1 593 4 -a 593 1000 9 -a 1 594 11 -a 594 1000 4 -a 1 595 9 -a 595 1000 5 -a 1 596 6 -a 596 1000 5 -a 1 597 5 -a 597 1000 2 -a 1 598 2 -a 598 1000 1 -a 1 599 11 -a 599 1000 10 -a 1 600 8 -a 600 1000 8 -a 1 601 8 -a 601 1000 4 -a 1 602 2 -a 602 1000 3 -a 1 603 5 -a 603 1000 10 -a 1 604 4 -a 604 1000 6 -a 1 605 2 -a 605 1000 7 -a 1 606 4 -a 606 1000 2 -a 1 607 9 -a 607 1000 1 -a 1 608 3 -a 608 1000 7 -a 1 609 3 -a 609 1000 8 -a 1 610 9 -a 610 1000 3 -a 1 611 10 -a 611 1000 7 -a 1 612 10 -a 612 1000 3 -a 1 613 6 -a 613 1000 7 -a 1 614 10 -a 614 1000 3 -a 1 615 7 -a 615 1000 9 -a 1 616 10 -a 616 1000 5 -a 1 617 11 -a 617 1000 5 -a 1 618 8 -a 618 1000 6 -a 1 619 8 -a 619 1000 6 -a 1 620 2 -a 620 1000 9 -a 1 621 7 -a 621 1000 1 -a 1 622 8 -a 622 1000 9 -a 1 623 6 -a 623 1000 6 -a 1 624 4 -a 624 1000 7 -a 1 625 6 -a 625 1000 5 -a 1 626 11 -a 626 1000 3 -a 1 627 4 -a 627 1000 8 -a 1 628 3 -a 628 1000 8 -a 1 629 9 -a 629 1000 5 -a 1 630 5 -a 630 1000 5 -a 1 631 7 -a 631 1000 10 -a 1 632 7 -a 632 1000 5 -a 1 633 3 -a 633 1000 10 -a 1 634 11 -a 634 1000 9 -a 1 635 7 -a 635 1000 1 -a 1 636 4 -a 636 1000 10 -a 1 637 11 -a 637 1000 6 -a 1 638 7 -a 638 1000 8 -a 1 639 3 -a 639 1000 2 -a 1 640 11 -a 640 1000 9 -a 1 641 4 -a 641 1000 1 -a 1 642 7 -a 642 1000 10 -a 1 643 7 -a 643 1000 3 -a 1 644 11 -a 644 1000 8 -a 1 645 4 -a 645 1000 5 -a 1 646 7 -a 646 1000 8 -a 1 647 5 -a 647 1000 2 -a 1 648 2 -a 648 1000 10 -a 1 649 3 -a 649 1000 3 -a 1 650 4 -a 650 1000 8 -a 1 651 10 -a 651 1000 2 -a 1 652 10 -a 652 1000 10 -a 1 653 2 -a 653 1000 6 -a 1 654 7 -a 654 1000 1 -a 1 655 9 -a 655 1000 3 -a 1 656 11 -a 656 1000 1 -a 1 657 4 -a 657 1000 4 -a 1 658 3 -a 658 1000 3 -a 1 659 4 -a 659 1000 6 -a 1 660 8 -a 660 1000 6 -a 1 661 10 -a 661 1000 6 -a 1 662 5 -a 662 1000 1 -a 1 663 5 -a 663 1000 3 -a 1 664 4 -a 664 1000 2 -a 1 665 10 -a 665 1000 10 -a 1 666 9 -a 666 1000 7 -a 1 667 5 -a 667 1000 6 -a 1 668 2 -a 668 1000 10 -a 1 669 7 -a 669 1000 2 -a 1 670 8 -a 670 1000 6 -a 1 671 7 -a 671 1000 7 -a 1 672 10 -a 672 1000 9 -a 1 673 10 -a 673 1000 6 -a 1 674 11 -a 674 1000 7 -a 1 675 6 -a 675 1000 1 -a 1 676 6 -a 676 1000 1 -a 1 677 7 -a 677 1000 7 -a 1 678 8 -a 678 1000 4 -a 1 679 3 -a 679 1000 1 -a 1 680 9 -a 680 1000 6 -a 1 681 5 -a 681 1000 6 -a 1 682 5 -a 682 1000 5 -a 1 683 2 -a 683 1000 9 -a 1 684 6 -a 684 1000 9 -a 1 685 9 -a 685 1000 4 -a 1 686 7 -a 686 1000 3 -a 1 687 11 -a 687 1000 1 -a 1 688 2 -a 688 1000 4 -a 1 689 8 -a 689 1000 10 -a 1 690 7 -a 690 1000 2 -a 1 691 7 -a 691 1000 2 -a 1 692 3 -a 692 1000 10 -a 1 693 5 -a 693 1000 1 -a 1 694 11 -a 694 1000 1 -a 1 695 3 -a 695 1000 3 -a 1 696 6 -a 696 1000 7 -a 1 697 6 -a 697 1000 7 -a 1 698 6 -a 698 1000 1 -a 1 699 4 -a 699 1000 2 -a 1 700 5 -a 700 1000 5 -a 1 701 9 -a 701 1000 2 -a 1 702 8 -a 702 1000 3 -a 1 703 5 -a 703 1000 5 -a 1 704 10 -a 704 1000 8 -a 1 705 2 -a 705 1000 8 -a 1 706 5 -a 706 1000 10 -a 1 707 3 -a 707 1000 4 -a 1 708 5 -a 708 1000 8 -a 1 709 3 -a 709 1000 8 -a 1 710 6 -a 710 1000 8 -a 1 711 7 -a 711 1000 5 -a 1 712 7 -a 712 1000 1 -a 1 713 5 -a 713 1000 3 -a 1 714 11 -a 714 1000 6 -a 1 715 11 -a 715 1000 5 -a 1 716 8 -a 716 1000 1 -a 1 717 6 -a 717 1000 4 -a 1 718 9 -a 718 1000 9 -a 1 719 4 -a 719 1000 10 -a 1 720 11 -a 720 1000 4 -a 1 721 2 -a 721 1000 6 -a 1 722 10 -a 722 1000 5 -a 1 723 4 -a 723 1000 8 -a 1 724 5 -a 724 1000 7 -a 1 725 7 -a 725 1000 5 -a 1 726 7 -a 726 1000 3 -a 1 727 10 -a 727 1000 4 -a 1 728 7 -a 728 1000 3 -a 1 729 2 -a 729 1000 4 -a 1 730 11 -a 730 1000 9 -a 1 731 7 -a 731 1000 9 -a 1 732 3 -a 732 1000 3 -a 1 733 6 -a 733 1000 4 -a 1 734 8 -a 734 1000 7 -a 1 735 2 -a 735 1000 10 -a 1 736 6 -a 736 1000 8 -a 1 737 10 -a 737 1000 9 -a 1 738 9 -a 738 1000 3 -a 1 739 11 -a 739 1000 8 -a 1 740 7 -a 740 1000 4 -a 1 741 2 -a 741 1000 5 -a 1 742 10 -a 742 1000 7 -a 1 743 5 -a 743 1000 6 -a 1 744 5 -a 744 1000 5 -a 1 745 4 -a 745 1000 3 -a 1 746 2 -a 746 1000 2 -a 1 747 6 -a 747 1000 8 -a 1 748 2 -a 748 1000 7 -a 1 749 4 -a 749 1000 7 -a 1 750 11 -a 750 1000 3 -a 1 751 5 -a 751 1000 3 -a 1 752 6 -a 752 1000 6 -a 1 753 9 -a 753 1000 2 -a 1 754 5 -a 754 1000 8 -a 1 755 5 -a 755 1000 6 -a 1 756 11 -a 756 1000 4 -a 1 757 8 -a 757 1000 2 -a 1 758 8 -a 758 1000 4 -a 1 759 5 -a 759 1000 3 -a 1 760 11 -a 760 1000 2 -a 1 761 11 -a 761 1000 4 -a 1 762 11 -a 762 1000 10 -a 1 763 2 -a 763 1000 9 -a 1 764 6 -a 764 1000 1 -a 1 765 5 -a 765 1000 1 -a 1 766 6 -a 766 1000 2 -a 1 767 3 -a 767 1000 5 -a 1 768 9 -a 768 1000 9 -a 1 769 2 -a 769 1000 7 -a 1 770 3 -a 770 1000 9 -a 1 771 6 -a 771 1000 8 -a 1 772 3 -a 772 1000 5 -a 1 773 10 -a 773 1000 6 -a 1 774 10 -a 774 1000 10 -a 1 775 10 -a 775 1000 10 -a 1 776 2 -a 776 1000 8 -a 1 777 6 -a 777 1000 8 -a 1 778 9 -a 778 1000 6 -a 1 779 5 -a 779 1000 8 -a 1 780 10 -a 780 1000 5 -a 1 781 11 -a 781 1000 9 -a 1 782 3 -a 782 1000 5 -a 1 783 4 -a 783 1000 1 -a 1 784 5 -a 784 1000 5 -a 1 785 2 -a 785 1000 8 -a 1 786 5 -a 786 1000 7 -a 1 787 7 -a 787 1000 1 -a 1 788 9 -a 788 1000 9 -a 1 789 2 -a 789 1000 2 -a 1 790 11 -a 790 1000 8 -a 1 791 11 -a 791 1000 8 -a 1 792 7 -a 792 1000 10 -a 1 793 10 -a 793 1000 2 -a 1 794 9 -a 794 1000 2 -a 1 795 11 -a 795 1000 6 -a 1 796 6 -a 796 1000 10 -a 1 797 5 -a 797 1000 6 -a 1 798 8 -a 798 1000 9 -a 1 799 8 -a 799 1000 8 -a 1 800 7 -a 800 1000 5 -a 1 801 4 -a 801 1000 7 -a 1 802 2 -a 802 1000 7 -a 1 803 10 -a 803 1000 3 -a 1 804 9 -a 804 1000 7 -a 1 805 2 -a 805 1000 1 -a 1 806 8 -a 806 1000 4 -a 1 807 8 -a 807 1000 7 -a 1 808 7 -a 808 1000 2 -a 1 809 7 -a 809 1000 9 -a 1 810 6 -a 810 1000 8 -a 1 811 4 -a 811 1000 8 -a 1 812 9 -a 812 1000 10 -a 1 813 7 -a 813 1000 1 -a 1 814 4 -a 814 1000 5 -a 1 815 9 -a 815 1000 8 -a 1 816 3 -a 816 1000 2 -a 1 817 9 -a 817 1000 8 -a 1 818 8 -a 818 1000 8 -a 1 819 3 -a 819 1000 2 -a 1 820 11 -a 820 1000 5 -a 1 821 4 -a 821 1000 5 -a 1 822 3 -a 822 1000 3 -a 1 823 2 -a 823 1000 1 -a 1 824 4 -a 824 1000 10 -a 1 825 9 -a 825 1000 8 -a 1 826 7 -a 826 1000 9 -a 1 827 4 -a 827 1000 5 -a 1 828 10 -a 828 1000 2 -a 1 829 5 -a 829 1000 8 -a 1 830 9 -a 830 1000 6 -a 1 831 5 -a 831 1000 10 -a 1 832 6 -a 832 1000 3 -a 1 833 5 -a 833 1000 3 -a 1 834 6 -a 834 1000 8 -a 1 835 2 -a 835 1000 10 -a 1 836 8 -a 836 1000 3 -a 1 837 9 -a 837 1000 4 -a 1 838 11 -a 838 1000 7 -a 1 839 5 -a 839 1000 7 -a 1 840 2 -a 840 1000 6 -a 1 841 10 -a 841 1000 8 -a 1 842 10 -a 842 1000 8 -a 1 843 4 -a 843 1000 8 -a 1 844 9 -a 844 1000 4 -a 1 845 2 -a 845 1000 5 -a 1 846 2 -a 846 1000 7 -a 1 847 9 -a 847 1000 1 -a 1 848 2 -a 848 1000 5 -a 1 849 8 -a 849 1000 4 -a 1 850 3 -a 850 1000 3 -a 1 851 9 -a 851 1000 8 -a 1 852 4 -a 852 1000 10 -a 1 853 3 -a 853 1000 2 -a 1 854 11 -a 854 1000 10 -a 1 855 6 -a 855 1000 10 -a 1 856 7 -a 856 1000 7 -a 1 857 6 -a 857 1000 7 -a 1 858 6 -a 858 1000 1 -a 1 859 9 -a 859 1000 10 -a 1 860 8 -a 860 1000 7 -a 1 861 4 -a 861 1000 9 -a 1 862 3 -a 862 1000 3 -a 1 863 9 -a 863 1000 5 -a 1 864 5 -a 864 1000 1 -a 1 865 8 -a 865 1000 6 -a 1 866 3 -a 866 1000 3 -a 1 867 4 -a 867 1000 3 -a 1 868 11 -a 868 1000 3 -a 1 869 5 -a 869 1000 8 -a 1 870 10 -a 870 1000 1 -a 1 871 2 -a 871 1000 3 -a 1 872 6 -a 872 1000 6 -a 1 873 8 -a 873 1000 8 -a 1 874 3 -a 874 1000 4 -a 1 875 6 -a 875 1000 2 -a 1 876 8 -a 876 1000 7 -a 1 877 9 -a 877 1000 10 -a 1 878 11 -a 878 1000 9 -a 1 879 9 -a 879 1000 7 -a 1 880 6 -a 880 1000 10 -a 1 881 11 -a 881 1000 2 -a 1 882 8 -a 882 1000 2 -a 1 883 9 -a 883 1000 2 -a 1 884 5 -a 884 1000 7 -a 1 885 5 -a 885 1000 8 -a 1 886 9 -a 886 1000 9 -a 1 887 9 -a 887 1000 6 -a 1 888 3 -a 888 1000 7 -a 1 889 9 -a 889 1000 7 -a 1 890 8 -a 890 1000 4 -a 1 891 2 -a 891 1000 10 -a 1 892 7 -a 892 1000 2 -a 1 893 3 -a 893 1000 7 -a 1 894 7 -a 894 1000 1 -a 1 895 6 -a 895 1000 9 -a 1 896 6 -a 896 1000 3 -a 1 897 3 -a 897 1000 10 -a 1 898 3 -a 898 1000 9 -a 1 899 7 -a 899 1000 8 -a 1 900 6 -a 900 1000 7 -a 1 901 7 -a 901 1000 1 -a 1 902 2 -a 902 1000 7 -a 1 903 3 -a 903 1000 8 -a 1 904 6 -a 904 1000 9 -a 1 905 9 -a 905 1000 7 -a 1 906 7 -a 906 1000 5 -a 1 907 3 -a 907 1000 4 -a 1 908 4 -a 908 1000 7 -a 1 909 3 -a 909 1000 4 -a 1 910 8 -a 910 1000 10 -a 1 911 3 -a 911 1000 5 -a 1 912 2 -a 912 1000 2 -a 1 913 7 -a 913 1000 7 -a 1 914 4 -a 914 1000 3 -a 1 915 2 -a 915 1000 1 -a 1 916 10 -a 916 1000 4 -a 1 917 7 -a 917 1000 10 -a 1 918 3 -a 918 1000 2 -a 1 919 7 -a 919 1000 5 -a 1 920 11 -a 920 1000 1 -a 1 921 3 -a 921 1000 3 -a 1 922 7 -a 922 1000 4 -a 1 923 9 -a 923 1000 4 -a 1 924 6 -a 924 1000 3 -a 1 925 9 -a 925 1000 8 -a 1 926 9 -a 926 1000 6 -a 1 927 8 -a 927 1000 1 -a 1 928 6 -a 928 1000 2 -a 1 929 7 -a 929 1000 4 -a 1 930 11 -a 930 1000 3 -a 1 931 11 -a 931 1000 2 -a 1 932 10 -a 932 1000 4 -a 1 933 10 -a 933 1000 6 -a 1 934 6 -a 934 1000 5 -a 1 935 10 -a 935 1000 9 -a 1 936 3 -a 936 1000 9 -a 1 937 3 -a 937 1000 3 -a 1 938 7 -a 938 1000 8 -a 1 939 11 -a 939 1000 2 -a 1 940 10 -a 940 1000 9 -a 1 941 2 -a 941 1000 4 -a 1 942 2 -a 942 1000 4 -a 1 943 3 -a 943 1000 8 -a 1 944 10 -a 944 1000 1 -a 1 945 8 -a 945 1000 1 -a 1 946 7 -a 946 1000 3 -a 1 947 8 -a 947 1000 7 -a 1 948 3 -a 948 1000 10 -a 1 949 4 -a 949 1000 7 -a 1 950 10 -a 950 1000 4 -a 1 951 11 -a 951 1000 8 -a 1 952 6 -a 952 1000 4 -a 1 953 9 -a 953 1000 10 -a 1 954 5 -a 954 1000 1 -a 1 955 4 -a 955 1000 6 -a 1 956 10 -a 956 1000 3 -a 1 957 11 -a 957 1000 1 -a 1 958 2 -a 958 1000 7 -a 1 959 8 -a 959 1000 10 -a 1 960 10 -a 960 1000 6 -a 1 961 3 -a 961 1000 5 -a 1 962 9 -a 962 1000 4 -a 1 963 7 -a 963 1000 3 -a 1 964 2 -a 964 1000 7 -a 1 965 4 -a 965 1000 3 -a 1 966 6 -a 966 1000 8 -a 1 967 6 -a 967 1000 5 -a 1 968 9 -a 968 1000 8 -a 1 969 5 -a 969 1000 9 -a 1 970 6 -a 970 1000 3 -a 1 971 9 -a 971 1000 1 -a 1 972 2 -a 972 1000 6 -a 1 973 9 -a 973 1000 2 -a 1 974 7 -a 974 1000 5 -a 1 975 9 -a 975 1000 10 -a 1 976 2 -a 976 1000 4 -a 1 977 9 -a 977 1000 3 -a 1 978 7 -a 978 1000 5 -a 1 979 2 -a 979 1000 4 -a 1 980 6 -a 980 1000 1 -a 1 981 9 -a 981 1000 7 -a 1 982 9 -a 982 1000 8 -a 1 983 8 -a 983 1000 2 -a 1 984 8 -a 984 1000 9 -a 1 985 10 -a 985 1000 2 -a 1 986 8 -a 986 1000 10 -a 1 987 6 -a 987 1000 5 -a 1 988 8 -a 988 1000 1 -a 1 989 4 -a 989 1000 9 -a 1 990 7 -a 990 1000 4 -a 1 991 6 -a 991 1000 5 -a 1 992 8 -a 992 1000 7 -a 1 993 5 -a 993 1000 8 -a 1 994 6 -a 994 1000 1 -a 1 995 5 -a 995 1000 6 -a 1 996 4 -a 996 1000 9 -a 1 997 11 -a 997 1000 10 -a 1 998 10 -a 998 1000 8 -a 1 999 7 -a 999 1000 6 -a 1 1000 11 -a 1000 1000 3 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/flow0.dim --- a/src/work/marci/flow0.dim Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,22004 +0,0 @@ -c LEDA maxflow problem -p max 1000 22000 -n 1 s -n 1000 t -a 1 78 6 -a 1 629 10 -a 1 331 4 -a 1 371 8 -a 1 557 2 -a 1 503 9 -a 1 817 4 -a 1 467 7 -a 1 810 6 -a 1 53 8 -a 1 580 4 -a 1 393 6 -a 1 966 4 -a 1 681 9 -a 1 822 6 -a 1 489 10 -a 1 794 3 -a 1 738 9 -a 1 140 2 -a 1 459 10 -a 1 908 4 -a 1 95 3 -a 2 6 5 -a 2 636 8 -a 2 967 6 -a 2 616 2 -a 2 439 6 -a 2 660 9 -a 2 70 8 -a 2 471 8 -a 2 737 1 -a 2 698 10 -a 2 801 3 -a 2 83 5 -a 2 231 5 -a 2 279 2 -a 2 899 7 -a 2 697 9 -a 2 273 8 -a 2 685 7 -a 2 749 1 -a 2 852 10 -a 2 53 8 -a 2 690 6 -a 2 508 1 -a 2 874 5 -a 2 154 7 -a 2 277 6 -a 2 587 9 -a 2 294 7 -a 2 736 10 -a 2 470 9 -a 2 388 5 -a 2 741 3 -a 2 82 2 -a 2 331 6 -a 3 332 1 -a 3 520 9 -a 3 990 4 -a 3 401 3 -a 3 990 9 -a 3 702 10 -a 3 75 7 -a 3 767 3 -a 3 784 4 -a 3 305 9 -a 3 21 1 -a 3 658 7 -a 3 294 8 -a 3 318 7 -a 3 725 1 -a 3 121 9 -a 3 370 10 -a 3 390 2 -a 3 629 8 -a 4 219 9 -a 4 543 8 -a 4 905 8 -a 4 805 5 -a 4 836 3 -a 4 616 8 -a 4 251 5 -a 4 200 8 -a 4 332 4 -a 4 332 6 -a 4 530 5 -a 4 663 8 -a 4 851 8 -a 4 495 7 -a 4 40 6 -a 4 817 9 -a 5 172 3 -a 5 114 3 -a 5 559 7 -a 5 955 7 -a 5 418 5 -a 5 579 5 -a 5 588 4 -a 5 394 4 -a 5 872 3 -a 5 906 1 -a 5 94 1 -a 5 993 5 -a 5 251 8 -a 5 483 9 -a 5 597 7 -a 5 470 5 -a 5 1 3 -a 5 477 1 -a 5 250 1 -a 5 837 2 -a 6 69 3 -a 6 500 5 -a 6 12 2 -a 6 400 4 -a 6 831 5 -a 6 541 8 -a 6 39 3 -a 6 658 3 -a 6 11 4 -a 6 78 10 -a 6 450 3 -a 6 182 7 -a 6 191 2 -a 6 112 4 -a 6 608 2 -a 6 562 9 -a 6 699 9 -a 6 410 1 -a 6 580 2 -a 6 70 3 -a 6 378 6 -a 6 831 8 -a 7 552 10 -a 7 974 5 -a 7 276 7 -a 7 552 1 -a 7 426 5 -a 7 525 8 -a 7 364 7 -a 7 494 7 -a 7 1 6 -a 7 375 4 -a 7 894 9 -a 7 831 7 -a 7 915 10 -a 7 932 8 -a 7 464 5 -a 7 925 8 -a 7 913 5 -a 7 82 9 -a 8 175 3 -a 8 896 10 -a 8 193 7 -a 8 782 5 -a 8 434 4 -a 8 892 5 -a 8 758 9 -a 8 843 4 -a 8 447 9 -a 8 827 6 -a 8 196 1 -a 8 253 7 -a 8 354 1 -a 8 145 1 -a 8 528 6 -a 8 905 9 -a 8 570 8 -a 8 29 10 -a 8 245 8 -a 8 40 8 -a 8 29 3 -a 8 619 1 -a 8 933 2 -a 9 859 10 -a 9 510 5 -a 9 840 1 -a 9 299 8 -a 9 410 3 -a 9 824 4 -a 9 187 7 -a 9 492 4 -a 9 998 1 -a 9 59 5 -a 9 684 4 -a 9 755 9 -a 9 492 4 -a 9 551 1 -a 9 488 4 -a 9 310 1 -a 9 998 8 -a 9 290 9 -a 9 505 7 -a 9 226 9 -a 9 643 1 -a 10 649 9 -a 10 754 3 -a 10 523 7 -a 10 194 7 -a 10 782 7 -a 10 767 10 -a 10 233 3 -a 10 810 5 -a 10 362 2 -a 10 141 8 -a 10 644 3 -a 10 871 3 -a 10 980 4 -a 10 942 3 -a 10 256 10 -a 10 779 10 -a 10 105 8 -a 10 747 3 -a 10 752 7 -a 10 163 7 -a 10 407 7 -a 10 482 5 -a 10 654 2 -a 10 957 9 -a 11 969 1 -a 11 963 4 -a 11 930 5 -a 11 234 9 -a 11 443 6 -a 11 132 9 -a 11 876 10 -a 11 67 5 -a 11 885 7 -a 11 375 4 -a 11 260 3 -a 11 642 1 -a 11 117 8 -a 12 493 9 -a 12 427 10 -a 12 478 4 -a 12 633 9 -a 12 46 5 -a 12 324 10 -a 12 589 7 -a 12 988 2 -a 12 580 3 -a 12 343 1 -a 12 68 6 -a 12 302 5 -a 12 71 4 -a 12 230 9 -a 12 708 6 -a 12 552 7 -a 12 883 8 -a 13 641 1 -a 13 497 4 -a 13 821 9 -a 13 546 7 -a 13 730 7 -a 13 239 10 -a 13 677 8 -a 13 582 4 -a 13 305 4 -a 13 537 1 -a 13 956 5 -a 13 564 1 -a 13 154 4 -a 13 48 5 -a 13 32 9 -a 13 580 10 -a 14 526 4 -a 14 665 7 -a 14 626 3 -a 14 849 3 -a 14 229 5 -a 14 589 8 -a 14 404 3 -a 14 571 3 -a 14 656 8 -a 14 706 3 -a 14 641 2 -a 14 885 1 -a 14 389 8 -a 14 169 9 -a 14 743 4 -a 14 5 8 -a 14 665 7 -a 14 539 7 -a 14 551 3 -a 14 370 3 -a 14 777 5 -a 14 203 8 -a 14 951 5 -a 14 57 7 -a 14 740 2 -a 14 882 4 -a 14 620 9 -a 14 893 10 -a 15 930 6 -a 15 652 3 -a 15 449 7 -a 15 431 8 -a 15 292 3 -a 15 50 8 -a 15 255 9 -a 15 520 7 -a 15 638 8 -a 15 659 7 -a 15 66 10 -a 15 269 6 -a 15 340 6 -a 15 707 7 -a 15 129 8 -a 15 728 9 -a 15 875 4 -a 15 871 8 -a 15 733 3 -a 15 515 1 -a 15 385 10 -a 15 259 1 -a 15 884 7 -a 15 137 7 -a 16 461 6 -a 16 811 2 -a 16 193 5 -a 16 176 10 -a 16 668 5 -a 16 812 9 -a 16 45 8 -a 16 573 10 -a 16 439 1 -a 16 493 6 -a 16 730 1 -a 16 542 5 -a 16 234 8 -a 16 225 6 -a 16 155 2 -a 16 892 9 -a 16 291 2 -a 16 423 6 -a 16 207 8 -a 16 997 5 -a 17 551 2 -a 17 934 2 -a 17 847 6 -a 17 397 9 -a 17 642 1 -a 17 337 1 -a 17 781 1 -a 17 900 8 -a 17 196 10 -a 17 917 5 -a 17 337 10 -a 17 85 4 -a 17 512 6 -a 17 650 5 -a 17 896 8 -a 17 556 3 -a 17 198 10 -a 18 311 7 -a 18 24 4 -a 18 177 6 -a 18 16 5 -a 18 565 5 -a 18 410 7 -a 18 241 4 -a 18 719 3 -a 18 277 3 -a 18 531 2 -a 18 117 9 -a 18 483 6 -a 18 503 5 -a 18 667 10 -a 18 392 4 -a 18 325 8 -a 18 39 6 -a 19 10 6 -a 19 661 5 -a 19 819 5 -a 19 909 5 -a 19 856 8 -a 19 711 10 -a 19 221 1 -a 19 838 2 -a 19 795 7 -a 19 733 3 -a 19 463 1 -a 19 667 6 -a 19 264 8 -a 19 660 2 -a 19 977 1 -a 19 288 1 -a 19 836 7 -a 19 992 6 -a 19 852 2 -a 19 221 9 -a 19 208 10 -a 19 547 9 -a 20 497 2 -a 20 738 3 -a 20 663 10 -a 20 979 7 -a 20 216 6 -a 20 306 7 -a 20 347 9 -a 20 540 9 -a 20 344 4 -a 20 356 4 -a 20 176 5 -a 20 139 2 -a 20 240 10 -a 20 8 8 -a 21 849 10 -a 21 461 9 -a 21 845 1 -a 21 620 6 -a 21 169 4 -a 21 283 3 -a 21 262 10 -a 21 432 9 -a 21 942 5 -a 21 214 2 -a 21 719 4 -a 21 754 1 -a 21 181 3 -a 21 547 3 -a 21 974 4 -a 21 389 1 -a 22 69 7 -a 22 447 9 -a 22 102 3 -a 22 731 3 -a 22 401 9 -a 22 318 1 -a 22 12 8 -a 22 747 10 -a 22 857 6 -a 22 356 3 -a 22 78 7 -a 22 9 6 -a 22 494 6 -a 22 318 9 -a 22 16 2 -a 22 318 10 -a 22 778 2 -a 22 860 8 -a 22 937 2 -a 22 946 6 -a 22 118 10 -a 22 174 8 -a 22 353 5 -a 22 35 2 -a 23 387 8 -a 23 48 5 -a 23 788 7 -a 23 568 10 -a 23 594 2 -a 23 738 3 -a 23 956 8 -a 23 662 10 -a 23 160 4 -a 23 33 2 -a 23 368 3 -a 23 560 5 -a 23 350 9 -a 23 380 7 -a 23 283 6 -a 23 183 3 -a 24 735 2 -a 24 360 2 -a 24 191 1 -a 24 204 9 -a 24 677 9 -a 24 206 7 -a 24 521 7 -a 24 430 9 -a 24 41 4 -a 24 434 8 -a 24 351 6 -a 24 158 5 -a 24 607 9 -a 24 704 7 -a 24 192 8 -a 24 994 7 -a 24 751 4 -a 24 980 3 -a 25 537 6 -a 25 320 4 -a 25 693 6 -a 25 468 9 -a 25 981 2 -a 25 852 8 -a 25 500 4 -a 25 324 8 -a 25 387 7 -a 25 850 3 -a 25 703 3 -a 25 669 3 -a 25 8 10 -a 25 413 5 -a 25 5 2 -a 26 198 1 -a 26 616 4 -a 26 681 9 -a 26 403 10 -a 26 113 6 -a 26 87 3 -a 26 443 4 -a 26 546 8 -a 26 437 9 -a 26 600 3 -a 26 128 1 -a 26 116 10 -a 26 791 1 -a 26 97 3 -a 26 866 6 -a 26 746 1 -a 26 633 6 -a 26 161 10 -a 26 414 10 -a 26 76 7 -a 26 117 7 -a 26 241 10 -a 26 576 1 -a 26 441 8 -a 26 628 4 -a 26 401 8 -a 26 119 8 -a 26 272 5 -a 26 408 7 -a 27 532 5 -a 27 276 2 -a 27 605 2 -a 27 123 1 -a 27 957 1 -a 27 235 1 -a 27 19 2 -a 27 425 2 -a 27 780 9 -a 27 455 6 -a 27 908 8 -a 27 571 5 -a 27 790 5 -a 27 412 5 -a 27 512 5 -a 27 613 9 -a 27 573 6 -a 27 925 6 -a 27 688 9 -a 28 689 8 -a 28 142 7 -a 28 239 6 -a 28 105 2 -a 28 769 1 -a 28 639 1 -a 28 224 3 -a 28 16 1 -a 28 22 2 -a 28 755 10 -a 28 292 1 -a 28 626 5 -a 28 877 7 -a 29 224 4 -a 29 608 8 -a 29 88 2 -a 29 242 1 -a 29 8 10 -a 29 867 2 -a 29 696 2 -a 29 7 2 -a 29 750 9 -a 29 242 8 -a 29 797 7 -a 29 730 10 -a 29 654 8 -a 29 284 7 -a 29 318 8 -a 29 202 2 -a 29 184 8 -a 29 890 10 -a 29 325 1 -a 29 220 10 -a 29 995 9 -a 29 69 6 -a 29 858 8 -a 29 194 3 -a 29 85 2 -a 30 880 10 -a 30 948 9 -a 30 376 10 -a 30 481 7 -a 30 800 2 -a 30 599 9 -a 30 65 6 -a 30 887 8 -a 30 840 3 -a 30 72 9 -a 30 730 6 -a 30 511 4 -a 30 79 2 -a 30 455 9 -a 30 753 9 -a 30 875 3 -a 30 160 8 -a 30 382 9 -a 30 134 5 -a 30 477 6 -a 30 583 8 -a 30 317 2 -a 30 458 9 -a 30 448 9 -a 30 642 6 -a 30 677 10 -a 31 418 8 -a 31 710 5 -a 31 510 2 -a 31 611 1 -a 31 794 5 -a 31 365 3 -a 31 534 10 -a 31 145 10 -a 31 846 6 -a 31 310 7 -a 31 743 4 -a 31 910 2 -a 31 172 8 -a 31 558 6 -a 31 981 10 -a 31 901 10 -a 31 45 8 -a 31 35 7 -a 31 332 10 -a 31 797 5 -a 31 909 7 -a 31 491 4 -a 32 154 4 -a 32 18 3 -a 32 968 8 -a 32 736 5 -a 32 335 8 -a 32 401 1 -a 32 159 10 -a 32 976 3 -a 32 53 7 -a 32 577 7 -a 32 661 6 -a 32 562 9 -a 32 163 2 -a 32 431 5 -a 32 927 5 -a 32 697 9 -a 32 575 10 -a 32 748 7 -a 32 294 1 -a 32 633 10 -a 32 153 4 -a 32 851 9 -a 32 589 1 -a 33 30 1 -a 33 895 3 -a 33 624 3 -a 33 361 1 -a 33 667 8 -a 33 508 2 -a 33 851 6 -a 33 820 5 -a 33 526 6 -a 33 794 10 -a 33 531 5 -a 33 860 4 -a 33 170 3 -a 33 690 1 -a 34 811 4 -a 34 222 7 -a 34 242 9 -a 34 447 3 -a 34 784 2 -a 34 404 9 -a 34 877 3 -a 34 686 3 -a 34 76 5 -a 34 428 4 -a 34 409 10 -a 34 57 2 -a 34 721 5 -a 34 17 3 -a 34 210 7 -a 34 547 4 -a 34 605 5 -a 34 239 3 -a 34 418 8 -a 34 204 8 -a 35 599 6 -a 35 60 8 -a 35 712 2 -a 35 425 2 -a 35 880 2 -a 35 213 10 -a 35 195 4 -a 35 386 3 -a 35 48 2 -a 35 364 7 -a 35 51 5 -a 35 858 8 -a 35 586 7 -a 35 292 8 -a 35 280 9 -a 35 345 4 -a 35 696 5 -a 35 133 6 -a 35 6 10 -a 35 771 4 -a 35 560 4 -a 35 414 4 -a 35 828 6 -a 35 256 5 -a 35 430 7 -a 35 13 10 -a 35 802 6 -a 35 10 9 -a 35 251 4 -a 35 195 8 -a 35 214 6 -a 35 849 3 -a 36 255 9 -a 36 925 7 -a 36 249 4 -a 36 110 6 -a 36 113 1 -a 36 443 9 -a 36 495 9 -a 36 160 4 -a 36 807 4 -a 36 546 10 -a 36 368 1 -a 36 837 10 -a 36 272 9 -a 36 712 9 -a 36 508 2 -a 36 404 1 -a 36 717 9 -a 36 255 3 -a 36 963 7 -a 36 106 1 -a 36 58 3 -a 36 194 10 -a 36 535 5 -a 37 70 8 -a 37 996 4 -a 37 544 5 -a 37 320 8 -a 37 166 4 -a 37 757 8 -a 37 144 6 -a 37 420 9 -a 37 657 7 -a 37 392 8 -a 37 529 5 -a 37 769 4 -a 37 835 6 -a 37 928 6 -a 37 617 4 -a 37 545 3 -a 37 920 5 -a 37 984 4 -a 37 357 10 -a 37 168 5 -a 37 671 9 -a 38 865 9 -a 38 571 3 -a 38 363 2 -a 38 95 8 -a 38 510 4 -a 38 468 5 -a 38 152 10 -a 38 703 1 -a 38 221 7 -a 38 674 9 -a 38 521 1 -a 38 540 5 -a 38 840 6 -a 38 254 3 -a 38 683 7 -a 38 235 3 -a 38 910 6 -a 38 50 9 -a 38 764 10 -a 38 655 4 -a 38 884 4 -a 38 763 2 -a 38 558 6 -a 38 476 8 -a 38 283 6 -a 38 454 2 -a 38 435 5 -a 38 639 3 -a 39 621 9 -a 39 81 8 -a 39 479 2 -a 39 167 9 -a 39 443 7 -a 39 573 7 -a 39 676 10 -a 39 910 9 -a 39 724 8 -a 39 355 5 -a 39 887 2 -a 39 944 3 -a 39 4 5 -a 39 384 6 -a 39 459 4 -a 39 843 2 -a 39 637 10 -a 39 117 9 -a 39 54 9 -a 39 522 8 -a 39 167 1 -a 39 817 9 -a 39 152 6 -a 40 26 2 -a 40 555 6 -a 40 710 5 -a 40 502 7 -a 40 837 6 -a 40 139 10 -a 40 936 8 -a 40 451 8 -a 40 759 8 -a 40 930 7 -a 40 925 7 -a 40 435 1 -a 40 478 4 -a 40 577 8 -a 40 321 10 -a 40 178 2 -a 40 931 4 -a 40 183 7 -a 40 97 10 -a 41 934 4 -a 41 566 6 -a 41 556 2 -a 41 753 1 -a 41 178 6 -a 41 672 5 -a 41 806 9 -a 41 700 10 -a 41 838 9 -a 41 598 6 -a 41 851 9 -a 41 864 10 -a 41 128 7 -a 41 536 2 -a 41 341 10 -a 41 964 8 -a 41 674 5 -a 41 252 6 -a 41 390 5 -a 41 408 8 -a 41 244 3 -a 42 295 1 -a 42 309 7 -a 42 679 8 -a 42 773 2 -a 42 885 8 -a 42 999 2 -a 42 950 1 -a 42 791 6 -a 42 157 1 -a 42 22 7 -a 42 700 10 -a 42 723 9 -a 42 577 4 -a 42 428 6 -a 42 900 8 -a 42 225 6 -a 42 209 7 -a 42 575 2 -a 42 38 7 -a 42 806 1 -a 42 402 5 -a 42 901 1 -a 42 933 2 -a 43 937 3 -a 43 217 3 -a 43 872 3 -a 43 587 10 -a 43 469 4 -a 43 238 10 -a 43 994 5 -a 43 712 9 -a 43 532 4 -a 43 278 10 -a 43 366 9 -a 43 280 5 -a 43 138 6 -a 43 340 6 -a 43 205 3 -a 43 928 4 -a 43 497 5 -a 43 227 2 -a 43 604 7 -a 43 195 2 -a 43 803 10 -a 43 7 6 -a 43 70 1 -a 43 3 8 -a 44 216 3 -a 44 645 4 -a 44 41 5 -a 44 22 1 -a 44 941 7 -a 44 930 2 -a 44 958 5 -a 44 134 7 -a 44 777 4 -a 44 520 7 -a 44 602 3 -a 44 490 7 -a 44 289 6 -a 44 522 7 -a 44 767 6 -a 44 655 8 -a 44 801 7 -a 44 905 2 -a 44 994 6 -a 44 808 2 -a 44 466 7 -a 44 208 4 -a 44 387 7 -a 44 660 9 -a 44 394 9 -a 44 730 3 -a 44 609 4 -a 45 350 5 -a 45 29 3 -a 45 605 7 -a 45 371 5 -a 45 969 1 -a 45 510 2 -a 45 304 8 -a 45 78 7 -a 45 263 9 -a 45 824 9 -a 45 679 10 -a 45 252 6 -a 45 289 6 -a 45 968 10 -a 45 773 4 -a 45 31 9 -a 45 598 2 -a 45 550 9 -a 45 935 5 -a 45 567 10 -a 46 531 8 -a 46 719 3 -a 46 9 8 -a 46 738 2 -a 46 81 2 -a 46 668 3 -a 46 723 2 -a 46 474 9 -a 46 373 3 -a 46 711 8 -a 46 58 2 -a 46 722 1 -a 46 739 1 -a 46 663 6 -a 46 68 6 -a 46 684 6 -a 46 148 9 -a 46 372 6 -a 46 761 10 -a 46 410 2 -a 46 171 4 -a 46 416 5 -a 46 662 5 -a 47 459 7 -a 47 359 4 -a 47 410 8 -a 47 489 4 -a 47 956 8 -a 47 959 7 -a 47 400 10 -a 47 498 2 -a 47 465 3 -a 47 94 9 -a 47 506 4 -a 47 178 2 -a 47 174 10 -a 47 150 2 -a 47 901 6 -a 47 648 10 -a 47 522 4 -a 47 587 5 -a 47 705 2 -a 48 220 2 -a 48 302 1 -a 48 343 10 -a 48 287 3 -a 48 985 10 -a 48 491 7 -a 48 658 9 -a 48 721 7 -a 48 900 7 -a 48 828 8 -a 48 112 1 -a 48 537 5 -a 48 262 2 -a 48 470 8 -a 48 947 5 -a 48 751 1 -a 48 401 9 -a 49 881 5 -a 49 126 10 -a 49 899 2 -a 49 322 5 -a 49 219 3 -a 49 380 5 -a 49 499 7 -a 49 392 5 -a 49 529 7 -a 49 375 3 -a 49 15 10 -a 49 27 1 -a 49 962 4 -a 49 720 9 -a 49 246 2 -a 49 239 1 -a 49 38 7 -a 49 532 9 -a 49 199 6 -a 50 528 2 -a 50 166 2 -a 50 919 7 -a 50 404 6 -a 50 993 10 -a 50 7 1 -a 50 940 1 -a 50 231 1 -a 50 476 3 -a 50 862 5 -a 50 981 8 -a 50 877 1 -a 50 719 3 -a 50 82 5 -a 50 751 9 -a 50 16 6 -a 50 300 7 -a 50 106 10 -a 50 514 5 -a 50 691 9 -a 50 635 9 -a 50 889 2 -a 50 706 4 -a 50 661 8 -a 50 826 8 -a 50 401 5 -a 51 906 7 -a 51 40 2 -a 51 438 6 -a 51 413 7 -a 51 238 6 -a 51 966 10 -a 51 578 1 -a 51 132 2 -a 51 345 7 -a 51 547 7 -a 51 138 2 -a 51 260 9 -a 51 777 10 -a 51 614 9 -a 51 98 8 -a 51 733 3 -a 51 466 7 -a 51 816 9 -a 51 814 6 -a 51 192 2 -a 51 831 6 -a 52 89 9 -a 52 297 2 -a 52 320 1 -a 52 779 1 -a 52 931 2 -a 52 184 7 -a 52 460 7 -a 52 567 7 -a 52 860 1 -a 52 448 3 -a 52 24 5 -a 52 274 7 -a 52 861 4 -a 52 261 6 -a 52 215 3 -a 52 414 5 -a 52 393 7 -a 52 559 8 -a 52 960 2 -a 53 530 9 -a 53 818 2 -a 53 712 6 -a 53 119 2 -a 53 915 7 -a 53 420 9 -a 53 584 10 -a 53 706 8 -a 53 209 6 -a 53 775 4 -a 53 512 9 -a 53 297 9 -a 53 48 3 -a 53 832 6 -a 53 52 6 -a 53 978 10 -a 53 511 5 -a 53 521 10 -a 53 1000 2 -a 53 347 1 -a 54 968 9 -a 54 620 2 -a 54 804 1 -a 54 260 7 -a 54 834 2 -a 54 194 10 -a 54 652 4 -a 54 368 10 -a 54 129 2 -a 54 157 9 -a 54 161 10 -a 54 841 1 -a 54 276 2 -a 54 52 2 -a 54 236 7 -a 54 859 6 -a 54 757 1 -a 54 445 3 -a 54 610 1 -a 54 245 2 -a 55 741 7 -a 55 657 7 -a 55 52 10 -a 55 792 8 -a 55 610 8 -a 55 42 3 -a 55 279 5 -a 55 106 1 -a 55 17 3 -a 55 625 1 -a 55 50 6 -a 55 16 7 -a 55 220 5 -a 55 853 6 -a 55 275 1 -a 55 29 6 -a 55 22 10 -a 55 926 6 -a 55 396 6 -a 55 151 7 -a 56 58 2 -a 56 556 7 -a 56 991 4 -a 56 333 9 -a 56 607 5 -a 56 202 10 -a 56 168 2 -a 56 340 1 -a 56 646 4 -a 56 777 1 -a 56 584 1 -a 56 363 7 -a 56 409 6 -a 56 635 1 -a 56 130 9 -a 56 676 7 -a 56 408 6 -a 56 100 5 -a 57 693 2 -a 57 8 7 -a 57 149 3 -a 57 708 1 -a 57 227 8 -a 57 982 10 -a 57 255 4 -a 57 883 2 -a 57 650 10 -a 57 149 5 -a 57 940 10 -a 57 182 10 -a 57 115 9 -a 57 249 10 -a 57 788 1 -a 57 316 10 -a 57 416 6 -a 58 103 8 -a 58 962 10 -a 58 168 7 -a 58 686 7 -a 58 300 1 -a 58 576 2 -a 58 296 10 -a 58 429 1 -a 58 569 10 -a 58 972 3 -a 58 837 5 -a 58 668 9 -a 58 640 1 -a 58 844 10 -a 58 816 10 -a 58 323 3 -a 58 47 10 -a 58 793 9 -a 58 280 2 -a 58 301 9 -a 58 791 5 -a 59 138 2 -a 59 951 2 -a 59 939 4 -a 59 53 7 -a 59 108 10 -a 59 29 10 -a 59 301 7 -a 59 895 5 -a 59 344 2 -a 59 716 4 -a 59 998 1 -a 59 281 5 -a 59 883 7 -a 59 659 10 -a 59 580 2 -a 59 434 5 -a 59 955 8 -a 60 902 5 -a 60 821 7 -a 60 646 5 -a 60 517 4 -a 60 640 8 -a 60 438 10 -a 60 839 3 -a 60 686 9 -a 60 206 7 -a 60 94 10 -a 60 987 1 -a 60 996 3 -a 60 231 5 -a 60 913 9 -a 60 910 4 -a 60 283 6 -a 61 938 10 -a 61 584 8 -a 61 890 4 -a 61 257 10 -a 61 275 4 -a 61 863 3 -a 61 538 3 -a 61 134 1 -a 61 498 1 -a 61 93 1 -a 61 567 8 -a 61 428 10 -a 61 77 3 -a 61 545 2 -a 62 305 7 -a 62 897 10 -a 62 167 4 -a 62 821 7 -a 62 513 10 -a 62 604 3 -a 62 635 1 -a 62 174 4 -a 62 809 8 -a 62 728 1 -a 62 136 6 -a 62 780 5 -a 62 958 4 -a 62 24 6 -a 62 665 5 -a 62 216 4 -a 62 19 2 -a 62 578 6 -a 62 799 2 -a 62 909 5 -a 62 834 6 -a 62 50 7 -a 62 747 4 -a 62 347 4 -a 63 183 1 -a 63 220 7 -a 63 440 7 -a 63 749 6 -a 63 647 9 -a 63 516 7 -a 63 270 6 -a 63 951 7 -a 63 389 4 -a 63 436 9 -a 63 747 4 -a 63 901 2 -a 63 15 7 -a 63 357 4 -a 63 50 7 -a 63 823 1 -a 63 60 5 -a 63 186 6 -a 63 578 6 -a 63 209 7 -a 63 218 3 -a 63 209 1 -a 63 228 6 -a 63 795 1 -a 63 112 3 -a 64 604 5 -a 64 32 7 -a 64 858 8 -a 64 951 4 -a 64 214 6 -a 64 54 1 -a 64 366 4 -a 64 963 4 -a 64 700 3 -a 64 881 10 -a 64 208 8 -a 64 627 9 -a 64 245 4 -a 64 643 8 -a 64 349 3 -a 64 121 5 -a 64 657 7 -a 64 706 5 -a 64 171 7 -a 64 455 7 -a 64 765 2 -a 64 356 4 -a 64 8 10 -a 65 758 1 -a 65 564 2 -a 65 225 10 -a 65 966 7 -a 65 791 2 -a 65 948 10 -a 65 902 4 -a 65 598 6 -a 65 980 1 -a 65 736 10 -a 65 524 8 -a 65 169 9 -a 65 789 8 -a 65 889 5 -a 65 107 2 -a 65 464 9 -a 65 746 10 -a 65 314 8 -a 65 66 5 -a 65 990 5 -a 65 956 9 -a 65 415 9 -a 65 87 9 -a 65 588 10 -a 65 96 8 -a 66 257 4 -a 66 18 9 -a 66 860 9 -a 66 612 9 -a 66 25 2 -a 66 593 1 -a 66 151 3 -a 66 249 10 -a 66 534 5 -a 66 942 6 -a 66 243 1 -a 66 458 4 -a 66 819 10 -a 66 841 8 -a 66 413 8 -a 66 530 5 -a 66 340 10 -a 66 581 9 -a 66 294 7 -a 66 205 1 -a 66 688 7 -a 66 758 2 -a 66 950 4 -a 67 823 8 -a 67 915 10 -a 67 933 8 -a 67 213 7 -a 67 496 8 -a 67 308 10 -a 67 233 3 -a 67 514 10 -a 67 144 6 -a 67 844 6 -a 67 538 1 -a 67 736 10 -a 67 995 7 -a 67 787 6 -a 67 246 5 -a 68 912 6 -a 68 5 10 -a 68 703 10 -a 68 706 6 -a 68 845 1 -a 68 91 7 -a 68 212 3 -a 68 161 8 -a 68 671 2 -a 68 505 10 -a 68 365 3 -a 68 334 10 -a 68 238 5 -a 68 290 1 -a 68 311 5 -a 68 37 1 -a 68 180 7 -a 68 219 5 -a 68 249 1 -a 68 157 9 -a 68 714 6 -a 68 557 6 -a 68 389 2 -a 69 203 8 -a 69 700 4 -a 69 209 1 -a 69 741 9 -a 69 411 1 -a 69 179 2 -a 69 503 8 -a 69 656 3 -a 69 66 5 -a 69 507 10 -a 69 334 9 -a 69 771 5 -a 69 328 7 -a 69 424 10 -a 70 982 10 -a 70 488 7 -a 70 71 4 -a 70 463 5 -a 70 852 3 -a 70 404 9 -a 70 700 6 -a 70 117 5 -a 70 714 1 -a 70 736 10 -a 70 296 1 -a 70 932 5 -a 70 985 7 -a 70 452 3 -a 70 622 9 -a 70 517 1 -a 70 841 4 -a 70 824 5 -a 70 192 10 -a 70 25 9 -a 70 540 8 -a 70 602 8 -a 70 203 10 -a 71 18 2 -a 71 234 1 -a 71 268 8 -a 71 525 1 -a 71 567 5 -a 71 14 8 -a 71 852 4 -a 71 991 1 -a 71 996 4 -a 71 315 5 -a 71 37 5 -a 71 434 7 -a 71 142 4 -a 71 440 5 -a 71 109 8 -a 71 258 9 -a 71 130 7 -a 71 845 4 -a 71 553 4 -a 71 37 2 -a 71 805 7 -a 71 658 6 -a 71 297 2 -a 72 821 2 -a 72 458 7 -a 72 488 7 -a 72 845 10 -a 72 997 3 -a 72 65 4 -a 72 23 4 -a 72 298 8 -a 72 290 3 -a 72 515 4 -a 72 865 2 -a 72 303 5 -a 72 342 8 -a 72 831 1 -a 72 274 9 -a 72 656 6 -a 72 867 10 -a 72 707 1 -a 72 797 3 -a 72 282 6 -a 72 816 10 -a 72 30 1 -a 73 411 1 -a 73 636 7 -a 73 582 4 -a 73 448 1 -a 73 416 10 -a 73 562 3 -a 73 81 4 -a 73 712 1 -a 73 358 1 -a 73 538 1 -a 73 175 4 -a 73 178 3 -a 73 511 6 -a 73 239 8 -a 73 200 10 -a 73 501 6 -a 73 537 8 -a 73 489 3 -a 73 377 5 -a 73 792 4 -a 73 332 10 -a 74 183 2 -a 74 41 6 -a 74 987 3 -a 74 25 3 -a 74 748 6 -a 74 759 2 -a 74 306 6 -a 74 539 7 -a 74 788 3 -a 74 717 7 -a 74 150 1 -a 74 345 10 -a 74 140 3 -a 74 565 3 -a 74 907 1 -a 74 220 8 -a 74 252 8 -a 75 240 10 -a 75 758 6 -a 75 426 7 -a 75 418 6 -a 75 244 2 -a 75 664 9 -a 75 617 8 -a 75 744 2 -a 75 176 3 -a 75 82 4 -a 75 734 9 -a 75 552 2 -a 75 873 1 -a 75 41 2 -a 75 734 3 -a 75 913 10 -a 75 3 10 -a 75 758 10 -a 75 636 6 -a 75 761 5 -a 75 40 4 -a 75 150 9 -a 75 524 3 -a 75 756 4 -a 75 299 8 -a 75 868 9 -a 76 895 8 -a 76 863 7 -a 76 750 10 -a 76 90 10 -a 76 90 6 -a 76 990 3 -a 76 847 4 -a 76 515 4 -a 76 383 5 -a 76 66 6 -a 76 155 1 -a 76 999 7 -a 76 809 10 -a 76 330 4 -a 76 56 7 -a 76 518 6 -a 77 882 3 -a 77 928 1 -a 77 558 9 -a 77 591 4 -a 77 817 4 -a 77 560 6 -a 77 325 4 -a 77 428 6 -a 77 296 3 -a 77 364 8 -a 77 578 10 -a 77 819 7 -a 77 95 5 -a 77 876 7 -a 77 663 1 -a 77 989 7 -a 77 715 1 -a 77 388 2 -a 77 54 8 -a 77 804 9 -a 77 353 8 -a 77 901 10 -a 78 295 1 -a 78 735 10 -a 78 966 1 -a 78 449 10 -a 78 710 1 -a 78 751 5 -a 78 778 8 -a 78 765 7 -a 78 244 6 -a 78 635 7 -a 78 669 7 -a 79 802 6 -a 79 202 4 -a 79 461 3 -a 79 337 4 -a 79 526 5 -a 79 888 2 -a 79 633 2 -a 79 889 10 -a 79 441 3 -a 79 427 2 -a 79 983 10 -a 79 293 9 -a 79 65 3 -a 79 947 3 -a 79 453 3 -a 79 1000 7 -a 79 786 3 -a 79 805 8 -a 79 876 9 -a 79 56 7 -a 79 516 3 -a 80 818 9 -a 80 504 3 -a 80 201 7 -a 80 544 1 -a 80 258 6 -a 80 965 10 -a 80 787 1 -a 80 892 6 -a 80 609 5 -a 80 564 4 -a 80 69 7 -a 80 45 1 -a 80 901 1 -a 80 594 2 -a 80 933 4 -a 80 509 4 -a 80 458 4 -a 80 349 1 -a 80 935 1 -a 80 416 4 -a 81 641 7 -a 81 1000 4 -a 81 338 4 -a 81 623 9 -a 81 428 8 -a 81 314 9 -a 81 385 2 -a 81 208 4 -a 81 165 3 -a 81 440 9 -a 81 723 4 -a 81 982 3 -a 81 944 7 -a 81 923 2 -a 81 501 9 -a 81 177 7 -a 81 864 1 -a 81 264 3 -a 81 44 5 -a 81 448 4 -a 81 827 10 -a 81 113 1 -a 81 493 7 -a 81 703 2 -a 81 706 8 -a 82 401 10 -a 82 187 1 -a 82 140 4 -a 82 749 1 -a 82 98 3 -a 82 555 8 -a 82 366 5 -a 82 73 4 -a 82 893 6 -a 82 988 3 -a 82 500 2 -a 82 182 7 -a 82 348 6 -a 82 707 1 -a 82 346 10 -a 82 788 8 -a 82 406 2 -a 82 304 6 -a 82 707 3 -a 82 304 7 -a 82 804 4 -a 83 883 2 -a 83 143 4 -a 83 43 6 -a 83 926 3 -a 83 591 4 -a 83 870 5 -a 83 14 6 -a 83 59 10 -a 83 548 1 -a 83 720 8 -a 83 459 7 -a 83 735 4 -a 83 859 5 -a 83 183 3 -a 83 832 1 -a 83 389 1 -a 83 548 4 -a 83 904 9 -a 83 257 2 -a 83 512 9 -a 83 379 6 -a 83 438 4 -a 84 859 5 -a 84 61 7 -a 84 784 5 -a 84 622 10 -a 84 466 2 -a 84 63 1 -a 84 304 4 -a 84 770 7 -a 84 866 10 -a 84 162 5 -a 84 912 5 -a 84 909 1 -a 84 64 9 -a 84 478 3 -a 84 754 6 -a 84 77 6 -a 84 536 1 -a 84 277 5 -a 84 796 3 -a 84 994 8 -a 84 630 7 -a 84 153 5 -a 84 818 5 -a 84 700 6 -a 84 697 2 -a 84 251 4 -a 85 187 7 -a 85 51 3 -a 85 689 7 -a 85 22 10 -a 85 112 6 -a 85 448 10 -a 85 643 9 -a 85 577 3 -a 85 510 9 -a 85 947 9 -a 85 322 1 -a 85 351 6 -a 85 84 9 -a 85 210 1 -a 85 235 8 -a 85 147 8 -a 86 687 6 -a 86 988 1 -a 86 224 5 -a 86 199 6 -a 86 241 5 -a 86 168 3 -a 86 227 7 -a 86 625 8 -a 86 320 6 -a 86 21 8 -a 86 619 5 -a 86 717 10 -a 86 869 2 -a 86 182 7 -a 86 768 10 -a 86 533 5 -a 87 203 10 -a 87 879 9 -a 87 980 7 -a 87 846 4 -a 87 431 8 -a 87 465 2 -a 87 768 2 -a 87 753 8 -a 87 816 1 -a 87 851 9 -a 87 962 2 -a 87 26 9 -a 87 998 3 -a 87 624 8 -a 87 197 5 -a 87 822 5 -a 87 230 2 -a 87 191 10 -a 87 990 6 -a 87 456 2 -a 88 815 2 -a 88 285 2 -a 88 476 6 -a 88 409 3 -a 88 280 7 -a 88 169 6 -a 88 254 6 -a 88 462 3 -a 88 936 2 -a 88 786 2 -a 88 664 1 -a 88 790 9 -a 88 742 6 -a 88 485 1 -a 88 196 7 -a 88 182 1 -a 88 228 5 -a 88 948 2 -a 88 997 6 -a 88 55 1 -a 88 885 5 -a 88 28 1 -a 88 485 7 -a 89 224 8 -a 89 282 1 -a 89 217 10 -a 89 414 3 -a 89 247 10 -a 89 672 9 -a 89 205 5 -a 89 532 1 -a 89 124 10 -a 89 613 4 -a 89 811 7 -a 89 292 9 -a 89 866 7 -a 89 248 8 -a 89 203 2 -a 89 628 10 -a 89 912 6 -a 89 992 2 -a 90 345 4 -a 90 372 1 -a 90 163 8 -a 90 526 2 -a 90 600 9 -a 90 87 10 -a 90 499 2 -a 90 654 6 -a 90 971 8 -a 90 497 8 -a 90 681 8 -a 90 431 3 -a 90 484 2 -a 90 904 5 -a 90 713 8 -a 90 700 1 -a 90 293 2 -a 90 959 2 -a 91 347 3 -a 91 497 7 -a 91 466 2 -a 91 470 9 -a 91 86 7 -a 91 253 5 -a 91 761 6 -a 91 951 3 -a 91 500 8 -a 91 963 10 -a 91 554 2 -a 91 387 10 -a 91 930 8 -a 91 898 9 -a 91 759 9 -a 91 69 10 -a 91 400 7 -a 91 334 10 -a 91 155 3 -a 91 898 10 -a 91 987 7 -a 91 101 3 -a 91 370 2 -a 92 643 8 -a 92 532 9 -a 92 853 8 -a 92 522 6 -a 92 220 1 -a 92 528 6 -a 92 814 7 -a 92 154 5 -a 92 874 5 -a 92 287 10 -a 92 620 10 -a 92 320 6 -a 92 372 6 -a 92 872 4 -a 92 56 6 -a 93 298 8 -a 93 347 5 -a 93 852 5 -a 93 734 4 -a 93 924 3 -a 93 725 8 -a 93 468 6 -a 93 992 9 -a 93 100 8 -a 93 801 6 -a 93 122 7 -a 93 997 3 -a 93 763 7 -a 93 223 8 -a 93 342 10 -a 93 381 7 -a 93 754 8 -a 93 170 4 -a 93 902 3 -a 93 973 8 -a 93 697 2 -a 93 691 3 -a 93 102 10 -a 94 547 1 -a 94 977 7 -a 94 721 6 -a 94 866 3 -a 94 324 1 -a 94 568 4 -a 94 921 2 -a 94 622 6 -a 94 915 3 -a 94 915 4 -a 94 449 5 -a 94 624 10 -a 94 815 7 -a 94 149 3 -a 94 67 4 -a 94 782 8 -a 94 249 9 -a 95 867 6 -a 95 904 8 -a 95 221 5 -a 95 605 2 -a 95 102 9 -a 95 563 9 -a 95 985 2 -a 95 855 6 -a 95 732 3 -a 95 862 6 -a 95 803 5 -a 95 405 4 -a 95 528 8 -a 95 904 8 -a 95 951 6 -a 95 481 5 -a 96 601 3 -a 96 792 1 -a 96 804 6 -a 96 144 1 -a 96 688 10 -a 96 401 3 -a 96 34 6 -a 96 579 9 -a 96 849 3 -a 96 657 5 -a 96 369 2 -a 96 998 10 -a 96 723 6 -a 96 126 3 -a 96 222 7 -a 96 565 7 -a 96 5 10 -a 96 442 6 -a 96 145 3 -a 97 106 10 -a 97 105 4 -a 97 960 8 -a 97 712 7 -a 97 966 4 -a 97 738 6 -a 97 92 1 -a 97 470 1 -a 97 618 4 -a 97 18 9 -a 97 950 1 -a 97 194 1 -a 97 809 1 -a 97 729 3 -a 97 337 5 -a 97 472 4 -a 97 106 9 -a 97 371 10 -a 97 26 2 -a 97 954 8 -a 98 3 8 -a 98 394 9 -a 98 927 10 -a 98 726 2 -a 98 520 1 -a 98 124 2 -a 98 266 9 -a 98 524 4 -a 98 566 7 -a 98 411 9 -a 98 630 4 -a 98 545 5 -a 98 515 3 -a 98 565 7 -a 98 232 2 -a 98 457 1 -a 98 279 9 -a 98 323 2 -a 98 926 8 -a 98 896 3 -a 98 340 9 -a 99 851 1 -a 99 65 3 -a 99 124 2 -a 99 555 4 -a 99 401 10 -a 99 596 3 -a 99 660 10 -a 99 771 3 -a 99 621 7 -a 99 590 5 -a 99 774 10 -a 99 492 10 -a 99 475 3 -a 99 510 6 -a 99 616 8 -a 99 740 5 -a 99 9 9 -a 99 157 4 -a 99 126 10 -a 99 638 9 -a 99 701 5 -a 99 641 10 -a 99 179 3 -a 100 933 7 -a 100 73 3 -a 100 457 3 -a 100 231 6 -a 100 998 5 -a 100 328 5 -a 100 571 5 -a 100 824 8 -a 100 392 8 -a 100 694 1 -a 100 354 2 -a 100 792 7 -a 100 265 7 -a 100 539 4 -a 100 886 8 -a 100 579 7 -a 100 288 6 -a 100 876 6 -a 100 46 4 -a 100 762 8 -a 101 361 8 -a 101 661 10 -a 101 477 10 -a 101 369 4 -a 101 817 5 -a 101 603 5 -a 101 494 8 -a 101 219 2 -a 101 161 9 -a 101 402 9 -a 101 291 8 -a 101 617 3 -a 101 632 3 -a 101 264 9 -a 101 944 1 -a 101 178 8 -a 101 63 2 -a 101 311 7 -a 101 872 10 -a 101 416 5 -a 101 78 4 -a 101 112 4 -a 101 405 2 -a 101 616 7 -a 101 997 2 -a 102 983 2 -a 102 903 7 -a 102 848 8 -a 102 5 9 -a 102 640 8 -a 102 184 2 -a 102 665 2 -a 102 93 9 -a 102 553 10 -a 102 458 2 -a 102 695 8 -a 102 535 7 -a 102 951 1 -a 102 913 10 -a 102 695 4 -a 102 328 10 -a 102 179 7 -a 102 287 2 -a 102 959 4 -a 102 442 10 -a 102 206 5 -a 102 113 9 -a 102 504 1 -a 102 516 10 -a 103 984 4 -a 103 919 4 -a 103 593 6 -a 103 71 5 -a 103 300 9 -a 103 185 2 -a 103 44 2 -a 103 258 2 -a 103 63 8 -a 103 891 5 -a 103 262 9 -a 103 703 2 -a 103 51 5 -a 103 927 8 -a 103 795 9 -a 103 603 6 -a 103 360 6 -a 103 465 4 -a 103 113 7 -a 103 286 1 -a 104 353 2 -a 104 807 4 -a 104 613 9 -a 104 531 3 -a 104 69 3 -a 104 547 10 -a 104 972 4 -a 104 274 1 -a 104 659 3 -a 104 451 8 -a 104 789 9 -a 104 618 5 -a 104 345 5 -a 104 357 6 -a 104 689 3 -a 104 644 9 -a 104 541 10 -a 104 732 7 -a 104 902 10 -a 104 604 8 -a 104 598 6 -a 104 139 7 -a 104 282 6 -a 104 648 8 -a 104 41 9 -a 104 52 9 -a 104 226 10 -a 105 400 8 -a 105 516 8 -a 105 338 8 -a 105 685 4 -a 105 868 7 -a 105 120 8 -a 105 273 8 -a 105 374 7 -a 105 188 5 -a 105 820 5 -a 105 321 6 -a 105 461 3 -a 105 454 2 -a 105 771 8 -a 105 225 6 -a 105 48 1 -a 105 91 10 -a 105 582 7 -a 106 736 8 -a 106 735 7 -a 106 98 6 -a 106 443 3 -a 106 612 5 -a 106 701 5 -a 106 16 1 -a 106 750 1 -a 106 982 5 -a 106 664 6 -a 106 791 1 -a 106 9 8 -a 106 889 6 -a 106 166 10 -a 106 524 7 -a 106 203 10 -a 106 851 6 -a 106 367 9 -a 106 322 9 -a 106 99 6 -a 107 740 4 -a 107 510 4 -a 107 918 1 -a 107 36 2 -a 107 970 8 -a 107 348 5 -a 107 806 6 -a 107 171 5 -a 107 395 9 -a 107 897 1 -a 107 752 7 -a 107 106 8 -a 107 607 7 -a 107 849 8 -a 107 548 8 -a 107 194 2 -a 107 526 2 -a 107 563 10 -a 107 943 1 -a 107 483 9 -a 107 202 6 -a 107 709 2 -a 107 492 8 -a 107 67 9 -a 108 875 2 -a 108 269 9 -a 108 701 7 -a 108 358 4 -a 108 590 5 -a 108 799 4 -a 108 73 4 -a 108 75 4 -a 108 693 10 -a 108 109 7 -a 108 21 2 -a 108 16 4 -a 108 914 9 -a 108 191 10 -a 108 410 3 -a 108 786 9 -a 108 942 3 -a 108 515 10 -a 108 368 3 -a 108 766 10 -a 108 38 1 -a 108 561 2 -a 108 267 5 -a 108 600 8 -a 108 480 2 -a 108 750 6 -a 108 802 8 -a 108 164 5 -a 109 217 4 -a 109 868 8 -a 109 14 1 -a 109 207 10 -a 109 112 3 -a 109 714 5 -a 109 564 1 -a 109 701 7 -a 109 489 6 -a 109 637 1 -a 109 776 5 -a 109 157 7 -a 109 745 3 -a 109 796 2 -a 110 172 10 -a 110 634 4 -a 110 986 4 -a 110 581 8 -a 110 396 7 -a 110 903 5 -a 110 71 10 -a 110 763 10 -a 110 644 1 -a 110 108 9 -a 110 300 1 -a 110 911 2 -a 110 707 3 -a 110 779 5 -a 110 636 6 -a 110 484 6 -a 110 942 6 -a 110 852 4 -a 110 327 2 -a 110 956 5 -a 110 34 2 -a 110 438 5 -a 111 645 8 -a 111 598 1 -a 111 115 6 -a 111 109 2 -a 111 210 1 -a 111 890 9 -a 111 265 10 -a 111 954 10 -a 111 661 2 -a 111 436 5 -a 111 563 9 -a 111 622 8 -a 111 958 10 -a 111 500 9 -a 111 62 4 -a 111 697 4 -a 111 119 3 -a 111 169 9 -a 111 996 5 -a 112 5 7 -a 112 876 4 -a 112 750 4 -a 112 640 1 -a 112 335 4 -a 112 667 10 -a 112 467 2 -a 112 662 4 -a 112 598 2 -a 112 501 4 -a 112 75 6 -a 112 219 3 -a 112 74 10 -a 112 189 5 -a 112 327 9 -a 112 283 5 -a 112 54 7 -a 112 592 3 -a 112 212 2 -a 112 714 5 -a 112 3 4 -a 112 774 7 -a 112 311 4 -a 113 708 10 -a 113 810 4 -a 113 56 8 -a 113 380 5 -a 113 929 1 -a 113 225 9 -a 113 351 1 -a 113 933 4 -a 113 76 7 -a 113 76 6 -a 113 549 6 -a 113 410 10 -a 113 742 1 -a 113 47 2 -a 113 316 5 -a 113 491 1 -a 114 122 1 -a 114 534 3 -a 114 564 3 -a 114 310 1 -a 114 860 8 -a 114 846 1 -a 114 364 7 -a 114 427 3 -a 114 33 4 -a 114 53 1 -a 114 430 1 -a 114 807 7 -a 114 364 9 -a 114 424 1 -a 114 490 7 -a 114 149 1 -a 114 479 5 -a 114 869 7 -a 114 53 10 -a 114 703 6 -a 114 195 1 -a 114 986 10 -a 114 778 1 -a 114 270 9 -a 114 510 1 -a 114 164 6 -a 115 500 10 -a 115 210 7 -a 115 302 8 -a 115 991 7 -a 115 331 8 -a 115 835 4 -a 115 530 4 -a 115 641 1 -a 115 671 9 -a 115 352 7 -a 115 73 9 -a 115 384 4 -a 115 32 2 -a 115 502 9 -a 115 166 3 -a 115 395 9 -a 115 925 7 -a 115 655 7 -a 115 544 4 -a 115 380 3 -a 115 499 10 -a 115 596 10 -a 115 58 10 -a 116 693 10 -a 116 557 5 -a 116 836 8 -a 116 962 9 -a 116 42 10 -a 116 999 6 -a 116 949 3 -a 116 542 7 -a 116 184 3 -a 116 226 9 -a 116 508 4 -a 116 515 2 -a 116 37 6 -a 116 13 8 -a 116 131 6 -a 116 707 8 -a 116 364 8 -a 117 110 2 -a 117 779 4 -a 117 748 1 -a 117 141 6 -a 117 257 1 -a 117 913 2 -a 117 536 5 -a 117 157 5 -a 117 544 10 -a 117 55 4 -a 117 536 4 -a 117 18 1 -a 117 650 7 -a 117 594 3 -a 117 711 8 -a 117 183 10 -a 117 405 9 -a 117 648 2 -a 118 224 10 -a 118 379 3 -a 118 572 2 -a 118 765 1 -a 118 562 2 -a 118 798 1 -a 118 248 2 -a 118 52 3 -a 118 834 9 -a 118 261 4 -a 118 182 3 -a 118 516 9 -a 118 624 7 -a 118 291 3 -a 118 270 3 -a 118 347 8 -a 118 432 1 -a 118 526 6 -a 118 236 2 -a 118 967 9 -a 118 683 5 -a 118 779 3 -a 118 194 2 -a 118 796 7 -a 118 646 4 -a 118 787 1 -a 118 482 7 -a 119 828 6 -a 119 167 2 -a 119 106 5 -a 119 28 3 -a 119 545 1 -a 119 677 6 -a 119 792 5 -a 119 83 10 -a 119 450 5 -a 119 16 1 -a 119 134 7 -a 119 259 9 -a 119 276 4 -a 119 316 9 -a 119 774 6 -a 119 899 10 -a 119 606 8 -a 119 20 6 -a 119 222 9 -a 120 13 4 -a 120 545 10 -a 120 457 3 -a 120 979 1 -a 120 203 4 -a 120 211 6 -a 120 975 2 -a 120 397 10 -a 120 597 10 -a 120 159 7 -a 120 464 4 -a 120 400 3 -a 120 326 10 -a 120 569 10 -a 120 427 1 -a 120 870 8 -a 120 221 1 -a 121 195 7 -a 121 952 7 -a 121 671 9 -a 121 210 4 -a 121 62 10 -a 121 929 3 -a 121 485 3 -a 121 377 3 -a 121 679 3 -a 121 359 2 -a 121 982 3 -a 121 698 3 -a 121 580 6 -a 121 995 8 -a 121 218 4 -a 121 12 1 -a 121 949 5 -a 121 421 10 -a 121 222 7 -a 121 900 10 -a 121 817 2 -a 121 204 7 -a 121 472 8 -a 121 975 4 -a 121 667 1 -a 121 871 1 -a 122 276 6 -a 122 211 3 -a 122 274 1 -a 122 122 8 -a 122 431 5 -a 122 468 3 -a 122 49 10 -a 122 77 10 -a 122 677 8 -a 122 110 10 -a 122 137 3 -a 122 486 5 -a 122 660 1 -a 122 495 2 -a 122 444 10 -a 122 333 4 -a 122 51 3 -a 122 414 10 -a 122 550 3 -a 122 62 5 -a 123 338 9 -a 123 970 6 -a 123 284 6 -a 123 213 9 -a 123 762 8 -a 123 487 9 -a 123 684 3 -a 123 713 5 -a 123 129 4 -a 123 531 10 -a 123 988 5 -a 123 339 2 -a 124 804 4 -a 124 85 3 -a 124 769 1 -a 124 247 7 -a 124 134 4 -a 124 846 10 -a 124 923 5 -a 124 243 1 -a 124 827 5 -a 124 35 6 -a 124 729 8 -a 124 462 1 -a 124 529 9 -a 124 148 4 -a 124 794 3 -a 124 579 8 -a 124 561 1 -a 124 319 7 -a 125 641 5 -a 125 898 2 -a 125 265 3 -a 125 924 4 -a 125 87 9 -a 125 2 2 -a 125 386 2 -a 125 770 10 -a 125 714 8 -a 125 514 1 -a 125 276 4 -a 125 678 2 -a 125 852 1 -a 125 55 5 -a 125 762 4 -a 125 596 5 -a 125 301 5 -a 125 895 9 -a 125 417 7 -a 125 199 10 -a 125 114 9 -a 125 219 3 -a 125 233 6 -a 125 842 5 -a 125 680 7 -a 125 762 1 -a 126 989 1 -a 126 449 9 -a 126 316 5 -a 126 525 10 -a 126 768 9 -a 126 956 8 -a 126 398 10 -a 126 8 4 -a 126 855 7 -a 126 484 2 -a 126 9 2 -a 126 216 7 -a 126 230 3 -a 126 723 8 -a 127 729 5 -a 127 505 2 -a 127 376 3 -a 127 556 3 -a 127 560 2 -a 127 113 2 -a 127 128 4 -a 127 860 3 -a 127 544 1 -a 127 35 2 -a 127 97 7 -a 127 763 5 -a 127 267 5 -a 127 938 9 -a 127 418 6 -a 127 4 1 -a 127 902 5 -a 127 867 7 -a 127 320 7 -a 127 402 7 -a 127 610 3 -a 127 251 9 -a 127 799 2 -a 127 617 4 -a 127 82 7 -a 127 259 7 -a 127 625 2 -a 128 297 10 -a 128 488 1 -a 128 323 7 -a 128 2 9 -a 128 992 6 -a 128 698 8 -a 128 557 6 -a 128 527 4 -a 128 811 3 -a 128 684 2 -a 128 363 8 -a 128 794 6 -a 128 204 1 -a 128 397 7 -a 128 890 10 -a 128 966 10 -a 128 663 8 -a 129 803 6 -a 129 359 1 -a 129 667 6 -a 129 680 1 -a 129 201 7 -a 129 986 5 -a 129 57 2 -a 129 810 2 -a 129 212 2 -a 129 855 8 -a 129 402 10 -a 129 293 2 -a 129 89 7 -a 129 3 2 -a 129 590 10 -a 129 576 1 -a 129 325 5 -a 129 591 6 -a 129 544 4 -a 129 123 7 -a 129 46 5 -a 129 809 3 -a 129 807 5 -a 129 408 3 -a 129 578 3 -a 130 804 7 -a 130 443 4 -a 130 951 4 -a 130 443 5 -a 130 221 4 -a 130 285 4 -a 130 85 1 -a 130 900 9 -a 130 486 3 -a 130 46 2 -a 130 956 4 -a 130 271 7 -a 131 257 4 -a 131 786 2 -a 131 673 8 -a 131 550 6 -a 131 875 6 -a 131 675 9 -a 131 115 1 -a 131 426 1 -a 131 999 5 -a 131 705 1 -a 131 969 2 -a 131 997 1 -a 131 827 2 -a 131 781 10 -a 131 609 7 -a 131 398 10 -a 131 334 6 -a 131 594 8 -a 132 178 4 -a 132 776 9 -a 132 520 9 -a 132 620 6 -a 132 996 7 -a 132 805 6 -a 132 704 2 -a 132 871 10 -a 132 266 2 -a 132 749 10 -a 132 802 1 -a 132 536 9 -a 132 564 9 -a 132 184 6 -a 132 530 3 -a 132 414 5 -a 132 858 5 -a 132 644 5 -a 132 839 2 -a 132 833 3 -a 132 324 1 -a 133 784 2 -a 133 805 7 -a 133 127 10 -a 133 774 7 -a 133 562 9 -a 133 735 5 -a 133 147 1 -a 133 895 10 -a 133 305 9 -a 133 324 9 -a 133 647 7 -a 133 824 9 -a 133 943 1 -a 134 618 7 -a 134 604 6 -a 134 622 2 -a 134 465 10 -a 134 869 9 -a 134 346 4 -a 134 242 3 -a 134 381 10 -a 134 327 7 -a 134 805 6 -a 134 564 7 -a 134 856 7 -a 134 194 5 -a 134 398 6 -a 134 476 9 -a 134 9 8 -a 134 206 8 -a 134 799 8 -a 134 792 7 -a 134 925 5 -a 134 541 1 -a 134 547 9 -a 134 636 2 -a 134 687 2 -a 134 418 8 -a 134 940 7 -a 135 40 9 -a 135 739 10 -a 135 929 1 -a 135 657 6 -a 135 319 6 -a 135 527 6 -a 135 97 6 -a 135 163 9 -a 135 872 1 -a 135 339 7 -a 135 543 3 -a 135 174 5 -a 135 119 1 -a 135 83 6 -a 135 6 8 -a 135 313 6 -a 135 480 8 -a 135 481 9 -a 135 321 1 -a 135 685 4 -a 135 255 2 -a 135 88 1 -a 135 670 9 -a 136 156 8 -a 136 628 6 -a 136 193 5 -a 136 791 5 -a 136 290 2 -a 136 610 10 -a 136 706 8 -a 136 276 5 -a 136 649 4 -a 136 420 10 -a 136 181 2 -a 136 281 6 -a 136 738 7 -a 136 707 6 -a 136 378 7 -a 136 901 9 -a 136 554 7 -a 136 716 2 -a 136 419 7 -a 136 728 5 -a 137 834 7 -a 137 501 9 -a 137 733 8 -a 137 122 10 -a 137 980 2 -a 137 189 4 -a 137 442 1 -a 137 640 6 -a 137 443 1 -a 137 529 6 -a 137 286 9 -a 137 598 5 -a 137 132 2 -a 137 478 6 -a 137 364 10 -a 137 422 7 -a 137 63 5 -a 137 45 2 -a 137 697 8 -a 137 711 4 -a 137 465 8 -a 138 877 9 -a 138 991 10 -a 138 178 4 -a 138 559 5 -a 138 344 6 -a 138 54 7 -a 138 89 9 -a 138 35 9 -a 138 473 10 -a 138 816 1 -a 138 869 4 -a 138 973 6 -a 138 524 10 -a 138 990 8 -a 138 929 1 -a 138 712 2 -a 138 408 9 -a 138 544 9 -a 138 130 6 -a 138 936 9 -a 138 829 2 -a 138 728 8 -a 138 44 2 -a 138 282 6 -a 138 67 5 -a 138 465 3 -a 138 344 1 -a 138 112 9 -a 138 137 4 -a 139 30 4 -a 139 576 6 -a 139 753 5 -a 139 548 7 -a 139 340 8 -a 139 807 4 -a 139 636 5 -a 139 375 9 -a 139 255 6 -a 139 427 6 -a 139 219 8 -a 139 203 5 -a 139 950 7 -a 139 184 5 -a 139 107 10 -a 139 637 7 -a 139 591 5 -a 139 651 8 -a 139 767 7 -a 140 503 3 -a 140 455 3 -a 140 470 7 -a 140 546 2 -a 140 737 6 -a 140 536 4 -a 140 56 8 -a 140 647 1 -a 140 122 5 -a 140 86 4 -a 140 198 6 -a 140 111 2 -a 140 82 1 -a 140 951 7 -a 140 659 3 -a 140 421 3 -a 140 733 7 -a 140 270 8 -a 140 795 2 -a 140 987 7 -a 140 697 9 -a 140 165 10 -a 140 622 4 -a 141 173 4 -a 141 272 10 -a 141 235 7 -a 141 763 2 -a 141 922 10 -a 141 241 2 -a 141 352 5 -a 141 446 1 -a 141 786 5 -a 141 64 8 -a 141 981 5 -a 141 771 2 -a 141 120 1 -a 141 604 8 -a 141 893 10 -a 141 205 4 -a 141 801 5 -a 141 286 5 -a 141 727 5 -a 141 637 6 -a 141 706 10 -a 141 435 1 -a 141 907 10 -a 141 477 7 -a 141 397 9 -a 141 579 10 -a 142 465 6 -a 142 562 1 -a 142 176 5 -a 142 637 5 -a 142 833 5 -a 142 410 3 -a 142 376 8 -a 142 730 4 -a 142 386 7 -a 142 616 1 -a 142 57 5 -a 142 831 5 -a 142 378 2 -a 142 121 8 -a 142 788 10 -a 142 124 1 -a 142 240 1 -a 143 367 9 -a 143 444 1 -a 143 143 6 -a 143 995 3 -a 143 729 6 -a 143 870 5 -a 143 607 7 -a 143 410 9 -a 143 280 6 -a 143 489 1 -a 143 886 9 -a 143 677 3 -a 143 43 9 -a 143 327 8 -a 143 214 3 -a 144 219 2 -a 144 963 4 -a 144 22 7 -a 144 628 3 -a 144 314 2 -a 144 751 2 -a 144 930 5 -a 144 807 8 -a 144 820 2 -a 144 283 3 -a 144 927 8 -a 144 583 3 -a 144 406 2 -a 144 142 9 -a 144 949 8 -a 144 398 9 -a 144 585 5 -a 145 68 8 -a 145 368 10 -a 145 289 1 -a 145 937 1 -a 145 974 9 -a 145 699 2 -a 145 192 3 -a 145 439 3 -a 145 560 1 -a 145 868 10 -a 145 481 4 -a 145 886 7 -a 145 57 4 -a 145 699 9 -a 145 825 5 -a 145 78 6 -a 145 303 3 -a 145 114 2 -a 145 828 2 -a 145 292 6 -a 145 19 5 -a 145 611 1 -a 145 87 8 -a 145 301 7 -a 145 513 3 -a 145 670 9 -a 146 707 1 -a 146 655 6 -a 146 594 3 -a 146 80 4 -a 146 215 10 -a 146 661 1 -a 146 447 2 -a 146 504 4 -a 146 573 7 -a 146 396 2 -a 146 178 6 -a 146 765 4 -a 146 834 7 -a 146 737 6 -a 146 608 6 -a 146 291 5 -a 146 599 3 -a 146 665 5 -a 146 989 1 -a 146 399 4 -a 146 742 2 -a 146 267 4 -a 146 512 4 -a 147 546 9 -a 147 558 6 -a 147 531 9 -a 147 132 4 -a 147 645 7 -a 147 831 3 -a 147 644 9 -a 147 290 6 -a 147 513 4 -a 147 274 10 -a 147 883 8 -a 147 592 9 -a 147 489 1 -a 147 520 6 -a 147 14 2 -a 148 992 6 -a 148 68 5 -a 148 410 1 -a 148 145 8 -a 148 832 4 -a 148 219 6 -a 148 881 7 -a 148 416 1 -a 148 509 4 -a 148 455 3 -a 148 56 3 -a 148 474 2 -a 148 853 8 -a 148 797 5 -a 148 740 4 -a 148 341 2 -a 148 318 3 -a 148 274 8 -a 149 871 10 -a 149 449 8 -a 149 918 6 -a 149 677 2 -a 149 69 8 -a 149 183 1 -a 149 166 4 -a 149 342 4 -a 149 41 1 -a 149 757 1 -a 149 830 4 -a 149 560 8 -a 149 771 4 -a 149 797 8 -a 149 628 7 -a 149 156 1 -a 149 941 6 -a 149 435 2 -a 149 374 3 -a 149 798 6 -a 149 850 7 -a 149 883 4 -a 150 228 2 -a 150 905 7 -a 150 332 8 -a 150 57 6 -a 150 678 4 -a 150 47 10 -a 150 397 5 -a 150 995 10 -a 150 320 6 -a 150 243 7 -a 150 420 7 -a 150 213 4 -a 150 919 3 -a 150 488 1 -a 150 395 10 -a 150 60 9 -a 150 829 4 -a 150 436 8 -a 150 817 3 -a 150 635 3 -a 150 995 9 -a 150 563 3 -a 151 407 9 -a 151 598 3 -a 151 718 1 -a 151 324 2 -a 151 9 6 -a 151 67 8 -a 151 97 2 -a 151 858 5 -a 151 949 7 -a 151 324 1 -a 151 739 5 -a 151 256 2 -a 151 380 10 -a 151 392 4 -a 151 303 10 -a 151 776 6 -a 151 362 3 -a 151 622 1 -a 152 781 6 -a 152 835 9 -a 152 913 1 -a 152 244 1 -a 152 205 9 -a 152 972 4 -a 152 49 2 -a 152 640 5 -a 152 764 6 -a 152 683 7 -a 152 611 7 -a 152 302 9 -a 152 65 9 -a 152 184 9 -a 152 388 4 -a 152 192 9 -a 153 62 10 -a 153 484 9 -a 153 26 1 -a 153 808 10 -a 153 764 6 -a 153 242 4 -a 153 163 4 -a 153 131 7 -a 153 544 7 -a 153 939 4 -a 153 492 4 -a 153 141 5 -a 153 932 1 -a 153 249 5 -a 153 975 9 -a 153 820 10 -a 153 492 4 -a 154 156 3 -a 154 768 8 -a 154 540 6 -a 154 795 7 -a 154 507 3 -a 154 198 10 -a 154 381 8 -a 154 809 10 -a 154 263 4 -a 154 565 10 -a 154 803 1 -a 154 650 1 -a 154 756 5 -a 154 864 1 -a 154 110 1 -a 154 781 10 -a 154 850 1 -a 154 917 10 -a 154 520 9 -a 154 67 4 -a 154 55 6 -a 154 650 10 -a 155 610 10 -a 155 993 2 -a 155 118 3 -a 155 750 9 -a 155 901 5 -a 155 366 6 -a 155 701 3 -a 155 696 2 -a 155 857 3 -a 155 856 2 -a 155 439 7 -a 155 373 2 -a 155 626 4 -a 155 946 4 -a 155 570 8 -a 155 730 8 -a 155 832 3 -a 155 547 6 -a 156 508 5 -a 156 458 2 -a 156 278 2 -a 156 348 4 -a 156 567 1 -a 156 35 5 -a 156 173 2 -a 156 459 3 -a 156 554 1 -a 156 239 3 -a 156 513 8 -a 156 180 4 -a 156 848 7 -a 156 482 2 -a 156 297 10 -a 156 573 9 -a 156 358 9 -a 157 662 1 -a 157 249 10 -a 157 29 6 -a 157 494 8 -a 157 80 3 -a 157 468 4 -a 157 866 10 -a 157 706 4 -a 157 389 5 -a 157 412 7 -a 157 688 4 -a 157 94 10 -a 157 219 2 -a 157 210 6 -a 157 601 10 -a 157 676 4 -a 157 487 5 -a 158 948 5 -a 158 218 4 -a 158 521 3 -a 158 96 10 -a 158 676 2 -a 158 51 1 -a 158 334 6 -a 158 165 4 -a 158 230 4 -a 158 157 1 -a 158 646 7 -a 158 526 9 -a 158 730 1 -a 158 163 8 -a 158 978 10 -a 158 7 10 -a 158 656 9 -a 158 34 4 -a 158 474 5 -a 158 498 8 -a 158 739 2 -a 158 862 1 -a 158 909 3 -a 158 402 5 -a 158 955 10 -a 159 103 4 -a 159 611 5 -a 159 532 7 -a 159 779 8 -a 159 73 8 -a 159 455 4 -a 159 996 8 -a 159 594 7 -a 159 551 8 -a 159 648 7 -a 159 644 1 -a 159 884 8 -a 159 812 4 -a 159 873 3 -a 159 17 3 -a 159 433 2 -a 159 374 5 -a 160 746 6 -a 160 411 6 -a 160 536 4 -a 160 699 2 -a 160 417 4 -a 160 167 10 -a 160 732 7 -a 160 891 1 -a 160 664 3 -a 160 446 2 -a 160 728 8 -a 160 548 1 -a 160 847 8 -a 160 659 8 -a 160 651 8 -a 160 433 6 -a 160 166 3 -a 160 405 1 -a 160 506 10 -a 160 620 5 -a 160 376 10 -a 160 75 3 -a 160 146 7 -a 160 718 4 -a 160 6 1 -a 161 810 10 -a 161 566 6 -a 161 22 6 -a 161 218 7 -a 161 939 8 -a 161 767 4 -a 161 628 3 -a 161 450 10 -a 161 441 6 -a 161 21 3 -a 161 616 3 -a 161 149 10 -a 161 911 6 -a 161 256 7 -a 161 594 8 -a 161 614 9 -a 161 803 4 -a 161 417 4 -a 161 248 6 -a 161 429 9 -a 161 849 2 -a 162 413 4 -a 162 833 2 -a 162 330 1 -a 162 9 6 -a 162 185 2 -a 162 404 1 -a 162 154 9 -a 162 183 6 -a 162 97 10 -a 162 159 5 -a 162 993 7 -a 162 662 2 -a 162 180 2 -a 162 186 10 -a 162 576 3 -a 162 946 6 -a 162 814 8 -a 162 1 5 -a 162 363 5 -a 162 834 2 -a 162 617 1 -a 162 511 3 -a 162 720 7 -a 162 872 8 -a 162 80 2 -a 162 309 4 -a 162 650 7 -a 162 496 2 -a 163 557 2 -a 163 55 7 -a 163 321 2 -a 163 969 10 -a 163 887 8 -a 163 650 7 -a 163 977 1 -a 163 47 9 -a 163 30 2 -a 163 107 1 -a 163 230 5 -a 163 126 4 -a 163 265 1 -a 163 198 2 -a 163 788 2 -a 163 445 3 -a 163 383 3 -a 163 339 9 -a 163 366 6 -a 163 172 3 -a 164 340 7 -a 164 728 9 -a 164 956 2 -a 164 214 4 -a 164 700 8 -a 164 803 9 -a 164 294 4 -a 164 428 5 -a 164 789 9 -a 164 541 3 -a 164 482 5 -a 164 85 1 -a 164 485 4 -a 164 345 5 -a 164 735 6 -a 164 438 7 -a 164 391 5 -a 164 764 1 -a 164 544 2 -a 165 620 6 -a 165 889 3 -a 165 808 8 -a 165 817 10 -a 165 652 5 -a 165 228 1 -a 165 176 3 -a 165 991 6 -a 165 594 10 -a 165 347 1 -a 165 306 7 -a 165 297 9 -a 165 328 7 -a 165 237 3 -a 165 511 7 -a 165 3 2 -a 166 15 5 -a 166 804 8 -a 166 442 5 -a 166 568 9 -a 166 527 5 -a 166 924 3 -a 166 653 9 -a 166 244 6 -a 166 363 5 -a 166 425 7 -a 166 634 4 -a 166 102 2 -a 166 968 6 -a 166 230 10 -a 166 990 9 -a 166 751 6 -a 166 22 8 -a 166 618 5 -a 166 979 1 -a 166 197 10 -a 166 584 4 -a 166 548 6 -a 166 544 9 -a 166 889 1 -a 167 844 9 -a 167 871 8 -a 167 101 8 -a 167 330 5 -a 167 873 3 -a 167 115 4 -a 167 109 5 -a 167 860 9 -a 167 556 2 -a 167 677 2 -a 167 362 2 -a 167 455 6 -a 167 305 9 -a 167 349 10 -a 167 698 8 -a 167 667 3 -a 167 773 2 -a 168 308 2 -a 168 768 8 -a 168 716 9 -a 168 537 9 -a 168 733 2 -a 168 443 7 -a 168 558 2 -a 168 326 3 -a 168 397 6 -a 168 755 5 -a 168 909 5 -a 168 944 8 -a 168 274 1 -a 169 773 9 -a 169 763 10 -a 169 120 5 -a 169 873 2 -a 169 69 10 -a 169 992 10 -a 169 987 1 -a 169 177 9 -a 169 827 10 -a 169 519 5 -a 169 853 1 -a 169 165 2 -a 169 973 7 -a 169 133 7 -a 169 513 2 -a 169 647 8 -a 169 799 9 -a 169 262 9 -a 169 954 1 -a 169 542 4 -a 169 977 9 -a 169 466 9 -a 169 251 6 -a 169 395 6 -a 169 576 7 -a 169 791 9 -a 169 753 4 -a 169 461 2 -a 169 710 4 -a 169 2 4 -a 169 209 5 -a 170 449 10 -a 170 121 5 -a 170 58 2 -a 170 517 2 -a 170 89 8 -a 170 20 10 -a 170 693 8 -a 170 915 1 -a 170 538 3 -a 170 522 5 -a 170 55 1 -a 170 487 7 -a 170 654 4 -a 170 568 8 -a 170 109 2 -a 170 429 2 -a 170 829 7 -a 170 38 10 -a 170 970 1 -a 170 781 3 -a 170 503 4 -a 171 196 2 -a 171 152 3 -a 171 501 7 -a 171 772 10 -a 171 942 10 -a 171 230 3 -a 171 208 5 -a 171 628 9 -a 171 231 1 -a 171 416 6 -a 171 52 4 -a 171 352 5 -a 171 473 3 -a 171 568 4 -a 171 440 8 -a 171 493 3 -a 171 236 6 -a 171 330 6 -a 171 6 8 -a 171 757 7 -a 172 385 5 -a 172 492 4 -a 172 387 10 -a 172 952 6 -a 172 600 10 -a 172 815 6 -a 172 756 4 -a 172 637 10 -a 172 760 10 -a 172 512 3 -a 172 115 5 -a 172 956 1 -a 172 663 7 -a 172 616 3 -a 172 703 9 -a 172 581 4 -a 172 845 3 -a 172 910 7 -a 173 184 8 -a 173 51 4 -a 173 301 1 -a 173 235 1 -a 173 402 9 -a 173 774 4 -a 173 802 3 -a 173 841 7 -a 173 242 2 -a 173 13 8 -a 173 147 5 -a 173 247 1 -a 173 770 7 -a 173 531 6 -a 173 739 6 -a 173 132 5 -a 173 458 8 -a 173 314 6 -a 173 946 3 -a 173 189 10 -a 174 951 2 -a 174 681 10 -a 174 700 5 -a 174 41 10 -a 174 612 5 -a 174 339 10 -a 174 656 5 -a 174 290 8 -a 174 919 6 -a 174 476 8 -a 174 175 6 -a 174 78 9 -a 174 527 1 -a 174 476 6 -a 174 312 7 -a 174 928 3 -a 174 225 10 -a 174 89 7 -a 174 745 9 -a 174 466 7 -a 175 101 7 -a 175 891 9 -a 175 712 10 -a 175 870 2 -a 175 397 7 -a 175 426 3 -a 175 854 3 -a 175 740 10 -a 175 922 5 -a 175 18 10 -a 175 666 1 -a 175 579 2 -a 175 717 1 -a 176 706 7 -a 176 166 10 -a 176 31 7 -a 176 338 6 -a 176 456 3 -a 176 949 3 -a 176 813 6 -a 176 630 9 -a 176 2 2 -a 176 315 2 -a 176 81 4 -a 176 313 3 -a 176 219 1 -a 176 305 5 -a 176 401 1 -a 176 963 3 -a 176 770 4 -a 176 502 3 -a 177 829 9 -a 177 458 9 -a 177 347 8 -a 177 201 9 -a 177 883 4 -a 177 324 1 -a 177 30 9 -a 177 598 2 -a 177 221 8 -a 177 47 8 -a 177 239 6 -a 177 799 9 -a 177 763 9 -a 177 945 10 -a 177 965 1 -a 177 794 4 -a 177 258 8 -a 177 396 9 -a 177 718 3 -a 177 46 4 -a 177 1 5 -a 178 720 10 -a 178 361 8 -a 178 82 1 -a 178 8 7 -a 178 579 8 -a 178 386 6 -a 178 409 7 -a 178 517 5 -a 178 132 3 -a 178 910 6 -a 178 321 5 -a 178 589 1 -a 178 232 10 -a 178 521 3 -a 178 447 9 -a 178 555 1 -a 178 550 1 -a 178 21 4 -a 178 776 2 -a 178 596 6 -a 178 259 7 -a 178 550 7 -a 178 334 2 -a 178 179 5 -a 178 490 3 -a 179 103 9 -a 179 436 9 -a 179 885 5 -a 179 821 6 -a 179 482 9 -a 179 886 10 -a 179 516 6 -a 179 842 7 -a 179 967 9 -a 179 523 2 -a 179 396 10 -a 179 328 8 -a 179 931 3 -a 179 912 9 -a 179 459 6 -a 179 816 6 -a 179 208 9 -a 179 23 3 -a 179 24 6 -a 179 728 6 -a 179 470 5 -a 179 578 5 -a 179 253 10 -a 180 490 10 -a 180 329 2 -a 180 848 10 -a 180 748 8 -a 180 879 2 -a 180 157 1 -a 180 927 7 -a 180 344 10 -a 180 260 7 -a 180 338 3 -a 180 205 4 -a 180 56 9 -a 180 819 3 -a 181 66 8 -a 181 571 1 -a 181 636 7 -a 181 8 9 -a 181 69 3 -a 181 7 5 -a 181 335 7 -a 181 1000 10 -a 181 918 7 -a 181 794 7 -a 181 791 3 -a 181 101 9 -a 181 816 2 -a 181 814 1 -a 181 828 2 -a 181 261 7 -a 181 368 5 -a 181 56 9 -a 181 750 2 -a 181 696 9 -a 181 903 10 -a 181 474 5 -a 181 550 6 -a 181 36 9 -a 181 376 8 -a 181 894 7 -a 182 295 1 -a 182 713 4 -a 182 74 9 -a 182 350 9 -a 182 508 3 -a 182 139 9 -a 182 920 3 -a 182 119 7 -a 182 146 6 -a 182 988 4 -a 182 126 7 -a 182 480 6 -a 182 963 4 -a 182 19 1 -a 182 249 2 -a 182 730 10 -a 183 120 7 -a 183 41 8 -a 183 519 3 -a 183 947 8 -a 183 301 5 -a 183 886 2 -a 183 27 8 -a 183 558 8 -a 183 881 6 -a 183 500 5 -a 183 83 4 -a 183 916 9 -a 183 875 4 -a 183 976 9 -a 183 186 4 -a 183 563 9 -a 184 25 2 -a 184 535 3 -a 184 46 1 -a 184 163 10 -a 184 430 8 -a 184 165 9 -a 184 308 4 -a 184 394 10 -a 184 290 1 -a 184 788 7 -a 184 332 6 -a 184 308 10 -a 184 12 6 -a 184 37 3 -a 184 427 4 -a 184 52 2 -a 184 556 1 -a 184 350 1 -a 184 353 5 -a 184 417 8 -a 184 328 2 -a 184 379 1 -a 184 974 1 -a 184 184 1 -a 184 878 7 -a 185 33 9 -a 185 76 2 -a 185 728 8 -a 185 261 5 -a 185 266 10 -a 185 9 1 -a 185 796 10 -a 185 312 8 -a 185 171 3 -a 185 201 10 -a 185 476 4 -a 185 479 8 -a 185 594 10 -a 185 765 8 -a 185 242 10 -a 185 926 9 -a 185 48 5 -a 185 253 9 -a 185 962 2 -a 185 475 6 -a 185 305 8 -a 185 493 2 -a 185 824 8 -a 185 657 6 -a 185 910 2 -a 185 127 9 -a 186 11 5 -a 186 859 9 -a 186 310 5 -a 186 888 1 -a 186 891 2 -a 186 385 3 -a 186 591 5 -a 186 875 6 -a 186 646 5 -a 186 856 4 -a 186 883 8 -a 186 417 6 -a 186 143 3 -a 186 29 2 -a 186 617 4 -a 186 618 1 -a 186 507 4 -a 186 187 5 -a 186 358 9 -a 186 748 9 -a 187 88 6 -a 187 406 1 -a 187 25 1 -a 187 880 1 -a 187 281 5 -a 187 518 5 -a 187 679 1 -a 187 937 6 -a 187 403 1 -a 187 805 3 -a 187 947 3 -a 187 237 5 -a 187 90 9 -a 187 810 8 -a 187 104 3 -a 187 475 5 -a 187 376 10 -a 187 978 10 -a 187 96 5 -a 187 207 8 -a 187 836 1 -a 188 512 4 -a 188 350 7 -a 188 864 5 -a 188 104 7 -a 188 967 9 -a 188 347 5 -a 188 290 7 -a 188 301 10 -a 188 70 7 -a 188 377 3 -a 188 706 10 -a 188 46 10 -a 188 402 6 -a 188 561 2 -a 188 326 1 -a 188 919 6 -a 188 215 7 -a 188 238 10 -a 188 297 4 -a 188 160 7 -a 188 533 1 -a 189 84 1 -a 189 969 3 -a 189 636 5 -a 189 558 3 -a 189 320 7 -a 189 589 8 -a 189 653 2 -a 189 527 4 -a 189 400 1 -a 189 140 9 -a 189 876 7 -a 189 240 10 -a 189 244 2 -a 189 818 7 -a 189 586 3 -a 189 533 8 -a 189 94 7 -a 189 655 8 -a 189 910 1 -a 189 799 7 -a 189 701 1 -a 190 287 2 -a 190 335 5 -a 190 2 4 -a 190 181 5 -a 190 549 1 -a 190 240 7 -a 190 477 5 -a 190 543 9 -a 190 399 10 -a 190 627 8 -a 190 344 5 -a 190 621 4 -a 190 160 10 -a 190 663 9 -a 190 185 7 -a 190 813 6 -a 191 165 3 -a 191 585 4 -a 191 952 2 -a 191 16 1 -a 191 824 1 -a 191 171 4 -a 191 834 1 -a 191 385 10 -a 191 704 5 -a 191 927 10 -a 191 15 7 -a 191 589 2 -a 191 702 3 -a 191 715 6 -a 191 875 1 -a 191 12 2 -a 191 717 9 -a 191 31 5 -a 191 561 4 -a 191 956 1 -a 191 507 3 -a 191 79 9 -a 191 330 4 -a 191 491 1 -a 191 705 1 -a 191 673 1 -a 191 87 1 -a 191 865 9 -a 191 312 10 -a 192 272 1 -a 192 653 7 -a 192 476 8 -a 192 856 7 -a 192 580 1 -a 192 492 6 -a 192 655 5 -a 192 751 4 -a 192 301 7 -a 192 15 7 -a 192 430 10 -a 192 203 6 -a 192 29 8 -a 192 904 10 -a 192 744 6 -a 192 868 3 -a 192 916 6 -a 192 436 6 -a 192 898 2 -a 192 452 1 -a 193 367 6 -a 193 380 10 -a 193 530 8 -a 193 696 3 -a 193 870 6 -a 193 211 6 -a 193 345 1 -a 193 957 10 -a 193 51 6 -a 193 656 4 -a 193 204 5 -a 193 703 9 -a 193 107 3 -a 193 35 5 -a 193 258 4 -a 193 598 3 -a 193 689 6 -a 193 898 4 -a 193 703 9 -a 194 413 3 -a 194 77 8 -a 194 731 6 -a 194 406 2 -a 194 980 3 -a 194 450 9 -a 194 249 8 -a 194 871 8 -a 194 885 3 -a 194 122 3 -a 194 298 8 -a 194 227 10 -a 194 501 9 -a 194 828 10 -a 194 923 6 -a 194 347 3 -a 195 14 6 -a 195 243 6 -a 195 279 1 -a 195 64 4 -a 195 898 3 -a 195 482 5 -a 195 766 10 -a 195 516 5 -a 195 578 7 -a 195 180 2 -a 195 451 4 -a 195 882 5 -a 195 395 1 -a 195 527 8 -a 195 588 9 -a 195 801 5 -a 195 483 4 -a 195 14 6 -a 195 25 10 -a 195 329 1 -a 195 898 3 -a 195 147 7 -a 195 627 1 -a 196 101 2 -a 196 647 5 -a 196 430 8 -a 196 993 1 -a 196 443 5 -a 196 241 4 -a 196 247 9 -a 196 506 2 -a 196 114 9 -a 196 728 10 -a 196 247 10 -a 196 93 3 -a 196 219 2 -a 196 245 6 -a 196 670 7 -a 196 398 7 -a 196 227 4 -a 196 97 7 -a 196 255 2 -a 196 622 2 -a 197 623 4 -a 197 843 3 -a 197 398 4 -a 197 81 1 -a 197 856 10 -a 197 422 1 -a 197 410 2 -a 197 729 9 -a 197 568 5 -a 197 12 9 -a 197 829 9 -a 197 191 4 -a 197 441 1 -a 197 827 6 -a 197 159 9 -a 197 883 7 -a 197 43 1 -a 198 406 4 -a 198 364 1 -a 198 156 7 -a 198 109 10 -a 198 610 5 -a 198 249 6 -a 198 328 9 -a 198 854 1 -a 198 918 3 -a 198 725 1 -a 198 57 6 -a 198 980 6 -a 198 678 4 -a 198 613 9 -a 198 798 3 -a 198 51 9 -a 198 693 9 -a 198 629 2 -a 198 472 7 -a 198 78 2 -a 198 333 7 -a 198 16 5 -a 198 89 1 -a 198 138 10 -a 198 206 9 -a 198 529 6 -a 198 964 10 -a 198 364 5 -a 199 387 10 -a 199 769 1 -a 199 750 1 -a 199 138 10 -a 199 878 4 -a 199 335 8 -a 199 386 6 -a 199 181 8 -a 199 165 1 -a 199 280 5 -a 199 905 10 -a 199 221 10 -a 199 269 8 -a 199 860 10 -a 199 898 2 -a 199 881 4 -a 199 633 8 -a 199 948 4 -a 199 550 9 -a 199 237 6 -a 200 395 8 -a 200 627 9 -a 200 570 6 -a 200 410 3 -a 200 716 2 -a 200 707 2 -a 200 615 9 -a 200 220 3 -a 200 646 2 -a 200 979 8 -a 200 607 2 -a 200 628 2 -a 200 723 3 -a 200 332 1 -a 200 766 5 -a 200 576 3 -a 200 667 2 -a 200 127 8 -a 200 756 7 -a 200 831 10 -a 200 406 9 -a 201 637 8 -a 201 27 5 -a 201 675 1 -a 201 472 4 -a 201 924 2 -a 201 531 1 -a 201 81 3 -a 201 847 4 -a 201 56 2 -a 201 317 8 -a 201 217 4 -a 201 683 1 -a 201 886 9 -a 201 627 10 -a 201 374 1 -a 201 568 6 -a 202 217 3 -a 202 593 10 -a 202 190 5 -a 202 171 2 -a 202 175 1 -a 202 817 6 -a 202 894 3 -a 202 507 2 -a 202 558 7 -a 202 445 2 -a 202 149 4 -a 202 685 6 -a 202 177 2 -a 202 979 6 -a 202 66 3 -a 202 813 1 -a 202 740 9 -a 202 260 9 -a 202 904 3 -a 203 247 3 -a 203 340 9 -a 203 726 7 -a 203 302 2 -a 203 657 3 -a 203 942 7 -a 203 984 7 -a 203 518 3 -a 203 544 9 -a 203 333 1 -a 203 62 1 -a 203 761 2 -a 203 926 7 -a 203 251 9 -a 203 931 5 -a 204 76 9 -a 204 43 9 -a 204 800 7 -a 204 582 10 -a 204 601 6 -a 204 221 2 -a 204 730 1 -a 204 261 10 -a 204 397 10 -a 204 684 4 -a 204 326 1 -a 204 185 9 -a 204 664 6 -a 204 42 2 -a 204 444 2 -a 204 543 5 -a 205 288 6 -a 205 784 8 -a 205 244 1 -a 205 589 3 -a 205 416 3 -a 205 162 10 -a 205 549 6 -a 205 933 7 -a 205 705 6 -a 205 881 9 -a 205 994 10 -a 205 441 8 -a 205 782 6 -a 205 220 7 -a 205 348 10 -a 205 858 3 -a 205 263 8 -a 206 123 7 -a 206 415 1 -a 206 863 4 -a 206 343 9 -a 206 121 4 -a 206 99 2 -a 206 739 5 -a 206 804 9 -a 206 424 5 -a 206 923 9 -a 206 444 9 -a 206 465 6 -a 206 343 6 -a 206 986 6 -a 206 752 4 -a 206 102 8 -a 206 206 5 -a 206 317 9 -a 207 517 1 -a 207 367 2 -a 207 865 10 -a 207 425 4 -a 207 47 10 -a 207 721 3 -a 207 395 8 -a 207 488 4 -a 207 479 8 -a 207 614 1 -a 207 835 4 -a 207 312 8 -a 207 876 10 -a 207 957 7 -a 207 726 10 -a 208 714 7 -a 208 276 4 -a 208 846 6 -a 208 812 7 -a 208 626 5 -a 208 212 10 -a 208 913 5 -a 208 45 1 -a 208 676 4 -a 208 231 3 -a 208 6 3 -a 208 404 4 -a 208 332 6 -a 208 211 6 -a 208 720 1 -a 209 848 2 -a 209 577 8 -a 209 560 8 -a 209 248 10 -a 209 624 1 -a 209 256 3 -a 209 642 4 -a 209 87 9 -a 209 734 10 -a 209 232 5 -a 209 921 4 -a 209 21 8 -a 209 83 10 -a 209 853 4 -a 209 747 4 -a 210 797 9 -a 210 104 7 -a 210 568 2 -a 210 584 5 -a 210 94 7 -a 210 169 10 -a 210 795 8 -a 210 213 5 -a 210 447 2 -a 210 212 2 -a 210 219 2 -a 211 850 5 -a 211 543 6 -a 211 429 5 -a 211 545 4 -a 211 366 4 -a 211 80 9 -a 211 613 7 -a 211 605 2 -a 211 335 10 -a 211 231 9 -a 211 691 6 -a 211 45 6 -a 211 462 10 -a 211 587 10 -a 211 65 4 -a 211 544 4 -a 211 415 7 -a 211 811 2 -a 211 316 9 -a 211 519 4 -a 211 355 1 -a 211 900 10 -a 211 612 6 -a 212 523 2 -a 212 670 9 -a 212 593 3 -a 212 736 8 -a 212 92 6 -a 212 804 2 -a 212 954 9 -a 212 941 9 -a 212 322 7 -a 212 358 8 -a 212 461 10 -a 212 687 2 -a 212 339 8 -a 212 540 1 -a 213 275 9 -a 213 943 8 -a 213 875 3 -a 213 505 3 -a 213 609 6 -a 213 919 1 -a 213 966 4 -a 213 171 6 -a 213 983 8 -a 213 486 6 -a 213 586 7 -a 213 770 1 -a 213 801 2 -a 213 80 3 -a 213 100 10 -a 213 676 5 -a 213 691 3 -a 214 622 5 -a 214 322 2 -a 214 259 9 -a 214 333 6 -a 214 413 9 -a 214 38 3 -a 214 262 9 -a 214 330 3 -a 214 359 1 -a 214 620 10 -a 214 790 6 -a 214 21 1 -a 214 958 4 -a 214 306 9 -a 214 295 5 -a 214 877 4 -a 214 156 1 -a 214 800 10 -a 214 461 1 -a 214 50 2 -a 214 741 7 -a 214 632 10 -a 214 8 5 -a 215 202 9 -a 215 193 10 -a 215 777 2 -a 215 272 1 -a 215 876 6 -a 215 654 4 -a 215 962 6 -a 215 474 8 -a 215 975 2 -a 216 196 9 -a 216 806 2 -a 216 364 6 -a 216 233 7 -a 216 44 9 -a 216 693 9 -a 216 591 7 -a 216 663 2 -a 216 458 9 -a 216 611 8 -a 216 596 8 -a 216 763 5 -a 216 905 7 -a 216 448 7 -a 216 918 8 -a 216 680 9 -a 216 909 9 -a 216 967 8 -a 216 397 4 -a 216 516 7 -a 216 975 4 -a 216 598 5 -a 216 708 1 -a 217 727 6 -a 217 576 10 -a 217 979 6 -a 217 579 2 -a 217 206 2 -a 217 916 3 -a 217 28 6 -a 217 156 9 -a 217 87 1 -a 217 833 10 -a 217 519 2 -a 217 319 7 -a 217 876 6 -a 217 187 10 -a 218 909 5 -a 218 514 4 -a 218 645 1 -a 218 495 1 -a 218 86 7 -a 218 383 7 -a 218 375 4 -a 218 533 5 -a 218 277 4 -a 218 31 9 -a 218 417 6 -a 218 219 1 -a 218 427 6 -a 219 932 5 -a 219 169 4 -a 219 615 2 -a 219 896 5 -a 219 576 9 -a 219 569 10 -a 219 450 9 -a 219 781 9 -a 219 460 3 -a 219 477 3 -a 219 936 3 -a 219 546 8 -a 219 285 4 -a 219 431 9 -a 219 864 9 -a 219 137 3 -a 219 617 8 -a 220 748 6 -a 220 650 1 -a 220 237 4 -a 220 218 3 -a 220 735 10 -a 220 620 1 -a 220 593 9 -a 220 244 8 -a 220 896 3 -a 220 623 6 -a 220 660 5 -a 220 90 4 -a 220 25 8 -a 220 568 5 -a 220 259 7 -a 220 24 8 -a 220 158 5 -a 220 130 4 -a 220 599 4 -a 220 727 9 -a 220 579 10 -a 221 355 8 -a 221 162 10 -a 221 31 5 -a 221 267 7 -a 221 708 2 -a 221 315 10 -a 221 697 7 -a 221 547 4 -a 221 451 5 -a 221 289 4 -a 221 271 7 -a 221 77 3 -a 221 526 6 -a 221 488 10 -a 221 811 1 -a 221 121 10 -a 221 56 1 -a 221 30 6 -a 222 678 5 -a 222 690 10 -a 222 81 1 -a 222 702 8 -a 222 233 9 -a 222 339 8 -a 222 726 2 -a 222 390 6 -a 222 468 6 -a 222 300 6 -a 222 92 7 -a 222 22 5 -a 222 655 8 -a 222 254 3 -a 222 52 2 -a 222 921 3 -a 222 961 4 -a 222 367 7 -a 222 593 3 -a 222 483 7 -a 222 817 8 -a 222 881 5 -a 222 753 4 -a 222 893 6 -a 222 382 9 -a 222 217 1 -a 222 680 7 -a 222 502 1 -a 222 272 10 -a 222 709 4 -a 222 493 6 -a 222 950 6 -a 223 374 9 -a 223 574 1 -a 223 627 6 -a 223 606 8 -a 223 912 5 -a 223 328 2 -a 223 996 1 -a 223 356 1 -a 223 628 9 -a 223 63 7 -a 223 377 1 -a 223 258 1 -a 223 316 10 -a 223 429 4 -a 223 154 10 -a 223 252 4 -a 223 795 10 -a 223 746 4 -a 223 735 9 -a 224 587 2 -a 224 602 4 -a 224 463 9 -a 224 456 7 -a 224 984 2 -a 224 679 7 -a 224 111 2 -a 224 461 2 -a 224 951 8 -a 224 819 7 -a 224 954 5 -a 224 876 8 -a 224 169 1 -a 224 503 9 -a 224 478 6 -a 224 774 6 -a 224 390 10 -a 225 806 5 -a 225 745 10 -a 225 745 2 -a 225 409 7 -a 225 808 10 -a 225 98 3 -a 225 666 4 -a 225 99 2 -a 225 526 10 -a 225 819 3 -a 225 351 3 -a 225 296 5 -a 225 540 1 -a 225 61 5 -a 225 882 8 -a 225 117 2 -a 225 523 1 -a 226 313 4 -a 226 76 9 -a 226 178 1 -a 226 423 1 -a 226 537 1 -a 226 104 6 -a 226 218 3 -a 226 466 1 -a 226 979 1 -a 226 386 7 -a 226 968 8 -a 227 432 10 -a 227 135 9 -a 227 333 4 -a 227 213 10 -a 227 880 5 -a 227 54 3 -a 227 621 8 -a 227 663 8 -a 227 151 4 -a 227 262 6 -a 227 761 4 -a 227 676 10 -a 227 56 5 -a 227 87 5 -a 227 971 10 -a 227 595 6 -a 227 147 1 -a 227 828 2 -a 227 712 3 -a 228 670 2 -a 228 117 9 -a 228 787 6 -a 228 847 7 -a 228 539 1 -a 228 299 9 -a 228 950 3 -a 228 756 4 -a 228 764 10 -a 228 904 10 -a 228 117 8 -a 228 707 4 -a 228 311 1 -a 228 252 5 -a 228 16 5 -a 228 524 6 -a 228 107 7 -a 229 69 7 -a 229 120 5 -a 229 769 10 -a 229 219 10 -a 229 382 2 -a 229 505 2 -a 229 894 7 -a 229 437 2 -a 229 592 7 -a 229 840 6 -a 229 8 6 -a 229 738 10 -a 229 643 10 -a 229 719 6 -a 229 383 5 -a 229 759 3 -a 229 481 4 -a 229 205 1 -a 229 274 9 -a 229 780 8 -a 229 130 10 -a 229 5 8 -a 229 519 1 -a 229 9 10 -a 229 122 7 -a 229 202 2 -a 229 320 9 -a 229 373 2 -a 229 217 10 -a 229 843 8 -a 230 479 1 -a 230 285 4 -a 230 962 7 -a 230 223 10 -a 230 503 5 -a 230 319 10 -a 230 727 10 -a 230 372 3 -a 230 756 8 -a 230 294 5 -a 230 187 4 -a 230 763 2 -a 230 8 9 -a 230 829 4 -a 230 457 2 -a 230 390 1 -a 231 564 7 -a 231 937 8 -a 231 595 2 -a 231 837 9 -a 231 692 1 -a 231 724 8 -a 231 841 1 -a 231 187 1 -a 231 733 7 -a 231 962 1 -a 231 388 4 -a 231 28 10 -a 231 310 2 -a 231 604 4 -a 231 870 10 -a 231 788 3 -a 231 888 6 -a 232 807 6 -a 232 366 9 -a 232 102 8 -a 232 713 6 -a 232 737 6 -a 232 857 9 -a 232 923 6 -a 232 595 7 -a 232 727 10 -a 232 27 8 -a 232 379 8 -a 232 266 1 -a 232 963 8 -a 232 973 8 -a 232 78 8 -a 232 631 9 -a 232 672 2 -a 232 919 9 -a 232 817 9 -a 232 380 6 -a 232 856 4 -a 233 180 6 -a 233 407 1 -a 233 142 2 -a 233 783 5 -a 233 252 6 -a 233 929 4 -a 233 646 7 -a 233 35 3 -a 233 915 7 -a 233 136 3 -a 233 603 2 -a 233 723 1 -a 233 992 2 -a 233 584 10 -a 233 621 3 -a 233 562 6 -a 233 573 6 -a 233 323 4 -a 233 588 9 -a 233 951 7 -a 233 589 7 -a 234 526 2 -a 234 899 7 -a 234 666 3 -a 234 132 3 -a 234 546 7 -a 234 560 6 -a 234 948 10 -a 234 926 4 -a 234 392 1 -a 234 103 5 -a 234 308 10 -a 234 533 8 -a 234 885 9 -a 234 560 7 -a 234 437 2 -a 234 506 10 -a 234 594 8 -a 234 327 9 -a 234 492 7 -a 235 729 6 -a 235 929 5 -a 235 190 1 -a 235 696 7 -a 235 489 7 -a 235 810 4 -a 235 233 4 -a 235 37 3 -a 235 109 8 -a 235 820 4 -a 235 987 8 -a 235 697 3 -a 235 321 5 -a 235 861 9 -a 235 338 4 -a 235 453 2 -a 235 382 3 -a 235 898 1 -a 235 376 6 -a 235 283 6 -a 235 265 6 -a 236 479 10 -a 236 591 6 -a 236 797 1 -a 236 339 4 -a 236 126 10 -a 236 209 7 -a 236 845 1 -a 236 719 10 -a 236 536 6 -a 236 312 3 -a 236 423 6 -a 236 440 4 -a 236 502 8 -a 236 94 6 -a 236 928 7 -a 236 287 10 -a 236 326 8 -a 236 964 8 -a 236 395 9 -a 236 121 3 -a 236 926 9 -a 236 67 10 -a 236 441 4 -a 236 762 3 -a 236 405 8 -a 237 893 4 -a 237 120 6 -a 237 278 2 -a 237 245 3 -a 237 402 1 -a 237 542 8 -a 237 723 8 -a 237 992 2 -a 237 314 8 -a 237 37 5 -a 237 93 10 -a 237 522 2 -a 237 881 2 -a 237 811 4 -a 237 33 8 -a 237 169 10 -a 238 209 2 -a 238 473 2 -a 238 670 6 -a 238 302 6 -a 238 376 8 -a 238 956 3 -a 238 627 9 -a 238 316 3 -a 238 327 4 -a 238 747 1 -a 238 217 5 -a 238 393 6 -a 238 164 8 -a 238 979 7 -a 238 797 5 -a 238 32 7 -a 238 74 2 -a 238 50 10 -a 239 276 6 -a 239 475 1 -a 239 591 8 -a 239 998 7 -a 239 443 9 -a 239 904 9 -a 239 11 3 -a 239 535 7 -a 239 402 5 -a 239 891 10 -a 239 322 5 -a 239 434 9 -a 239 35 8 -a 239 530 5 -a 239 906 3 -a 239 704 2 -a 239 832 5 -a 239 258 9 -a 239 636 7 -a 239 434 3 -a 239 573 7 -a 239 962 2 -a 239 157 7 -a 239 789 7 -a 239 330 4 -a 240 320 1 -a 240 743 10 -a 240 103 4 -a 240 351 10 -a 240 816 1 -a 240 152 2 -a 240 627 8 -a 240 267 3 -a 240 743 4 -a 240 600 4 -a 240 709 5 -a 240 622 3 -a 240 610 8 -a 240 219 1 -a 240 477 7 -a 240 540 5 -a 240 433 5 -a 241 511 8 -a 241 46 2 -a 241 314 5 -a 241 191 9 -a 241 877 5 -a 241 571 1 -a 241 826 2 -a 241 286 2 -a 241 119 1 -a 241 763 9 -a 241 442 5 -a 241 908 4 -a 241 68 6 -a 241 761 5 -a 241 626 3 -a 241 170 2 -a 241 88 2 -a 241 418 9 -a 241 322 9 -a 241 714 8 -a 241 684 4 -a 242 40 10 -a 242 289 5 -a 242 368 8 -a 242 661 9 -a 242 899 9 -a 242 586 5 -a 242 660 1 -a 242 351 5 -a 242 102 8 -a 242 68 9 -a 242 861 9 -a 242 147 8 -a 242 381 6 -a 242 27 5 -a 243 952 3 -a 243 852 1 -a 243 284 10 -a 243 46 7 -a 243 590 6 -a 243 726 8 -a 243 953 2 -a 243 658 3 -a 243 462 4 -a 243 555 5 -a 243 827 10 -a 243 549 4 -a 243 972 3 -a 243 124 8 -a 243 238 2 -a 243 631 10 -a 243 163 1 -a 243 527 2 -a 243 998 8 -a 243 824 9 -a 243 401 8 -a 244 559 7 -a 244 459 4 -a 244 751 10 -a 244 660 5 -a 244 526 3 -a 244 587 1 -a 244 806 1 -a 244 906 8 -a 244 614 9 -a 244 804 10 -a 244 833 2 -a 244 441 8 -a 244 64 1 -a 244 879 5 -a 244 7 3 -a 244 789 7 -a 244 807 2 -a 244 664 4 -a 244 226 2 -a 244 337 2 -a 244 466 9 -a 244 775 8 -a 244 284 9 -a 244 590 5 -a 244 914 9 -a 244 752 1 -a 244 514 3 -a 244 887 9 -a 245 551 4 -a 245 914 3 -a 245 422 4 -a 245 640 7 -a 245 57 10 -a 245 510 6 -a 245 203 10 -a 245 863 9 -a 245 392 5 -a 245 816 1 -a 245 642 6 -a 245 200 4 -a 245 232 5 -a 245 705 2 -a 245 54 3 -a 245 238 1 -a 245 469 7 -a 245 861 2 -a 246 901 1 -a 246 695 9 -a 246 173 9 -a 246 343 4 -a 246 445 6 -a 246 457 6 -a 246 932 5 -a 246 432 9 -a 246 346 1 -a 246 659 6 -a 246 946 7 -a 246 209 3 -a 246 186 1 -a 246 835 7 -a 246 630 9 -a 246 170 5 -a 246 451 10 -a 246 686 10 -a 246 680 6 -a 246 653 3 -a 246 524 1 -a 246 47 6 -a 246 444 8 -a 246 142 2 -a 247 246 3 -a 247 675 10 -a 247 846 9 -a 247 300 6 -a 247 913 2 -a 247 291 10 -a 247 136 10 -a 247 789 6 -a 247 985 3 -a 247 308 3 -a 247 107 3 -a 247 405 1 -a 247 764 6 -a 247 14 9 -a 247 836 1 -a 247 86 8 -a 247 673 7 -a 247 757 6 -a 247 294 5 -a 247 858 7 -a 247 568 7 -a 247 923 1 -a 247 3 8 -a 247 584 6 -a 247 682 1 -a 247 646 10 -a 248 84 7 -a 248 728 9 -a 248 65 7 -a 248 225 3 -a 248 974 7 -a 248 739 5 -a 248 46 5 -a 248 249 4 -a 248 627 5 -a 248 336 3 -a 248 384 10 -a 248 392 2 -a 248 296 1 -a 248 691 5 -a 248 498 1 -a 248 700 4 -a 248 431 10 -a 249 512 4 -a 249 512 5 -a 249 516 7 -a 249 160 3 -a 249 244 8 -a 249 809 2 -a 249 811 6 -a 249 707 6 -a 249 804 8 -a 249 266 10 -a 249 677 4 -a 249 425 3 -a 249 349 7 -a 249 380 2 -a 249 489 1 -a 249 573 1 -a 249 329 2 -a 249 204 3 -a 249 619 2 -a 249 577 10 -a 249 830 5 -a 249 954 1 -a 250 960 8 -a 250 197 2 -a 250 226 4 -a 250 627 3 -a 250 695 9 -a 250 925 8 -a 250 33 7 -a 250 182 3 -a 250 412 9 -a 250 548 9 -a 250 341 2 -a 250 656 9 -a 250 332 8 -a 250 333 8 -a 250 442 3 -a 250 14 9 -a 250 327 4 -a 250 222 6 -a 250 279 2 -a 250 646 2 -a 250 628 8 -a 250 359 1 -a 250 111 7 -a 250 176 9 -a 250 687 1 -a 251 314 9 -a 251 794 9 -a 251 240 3 -a 251 119 9 -a 251 724 7 -a 251 175 2 -a 251 316 3 -a 251 949 1 -a 251 801 1 -a 251 849 2 -a 251 833 7 -a 251 167 2 -a 251 237 10 -a 251 356 5 -a 251 507 8 -a 251 892 6 -a 251 687 6 -a 251 839 1 -a 251 309 3 -a 251 700 6 -a 252 141 6 -a 252 530 8 -a 252 979 7 -a 252 120 6 -a 252 152 2 -a 252 582 7 -a 252 478 5 -a 252 262 4 -a 252 757 4 -a 252 140 8 -a 252 575 4 -a 252 527 2 -a 252 379 8 -a 252 693 5 -a 253 226 1 -a 253 554 6 -a 253 150 10 -a 253 330 3 -a 253 993 3 -a 253 998 5 -a 253 139 1 -a 253 135 3 -a 253 210 2 -a 253 494 8 -a 253 641 9 -a 253 77 7 -a 253 157 10 -a 253 455 6 -a 253 386 3 -a 253 856 1 -a 253 596 1 -a 253 915 10 -a 253 810 4 -a 253 715 2 -a 253 42 1 -a 254 367 9 -a 254 168 2 -a 254 303 1 -a 254 100 9 -a 254 307 8 -a 254 877 10 -a 254 626 1 -a 254 686 3 -a 254 546 10 -a 254 851 4 -a 254 215 4 -a 254 529 2 -a 254 1000 10 -a 254 544 1 -a 254 498 7 -a 254 973 8 -a 254 682 3 -a 254 632 7 -a 254 159 8 -a 255 152 10 -a 255 249 10 -a 255 235 2 -a 255 308 6 -a 255 703 10 -a 255 620 10 -a 255 139 6 -a 255 274 5 -a 255 511 3 -a 255 949 6 -a 255 988 8 -a 255 552 9 -a 255 291 5 -a 255 131 5 -a 255 855 8 -a 255 390 5 -a 255 438 8 -a 255 707 1 -a 255 99 6 -a 255 228 4 -a 255 841 10 -a 255 313 10 -a 255 757 5 -a 256 816 4 -a 256 856 9 -a 256 230 1 -a 256 765 1 -a 256 514 8 -a 256 861 7 -a 256 923 2 -a 256 665 10 -a 256 85 6 -a 256 133 1 -a 256 972 6 -a 256 788 4 -a 256 753 9 -a 256 86 10 -a 256 37 3 -a 256 239 9 -a 256 10 5 -a 256 1 3 -a 256 790 10 -a 256 301 7 -a 256 131 2 -a 256 620 5 -a 256 690 5 -a 257 568 10 -a 257 303 5 -a 257 681 5 -a 257 666 7 -a 257 530 1 -a 257 497 10 -a 257 978 7 -a 257 262 3 -a 257 289 10 -a 257 810 6 -a 257 491 3 -a 257 29 8 -a 257 299 2 -a 257 328 4 -a 257 951 8 -a 257 963 1 -a 257 412 4 -a 257 59 6 -a 257 910 8 -a 257 175 7 -a 258 811 10 -a 258 995 6 -a 258 212 10 -a 258 25 3 -a 258 212 5 -a 258 815 1 -a 258 281 5 -a 258 342 6 -a 258 410 7 -a 258 970 5 -a 258 910 9 -a 258 712 3 -a 258 626 3 -a 258 551 2 -a 258 218 4 -a 258 99 4 -a 258 505 9 -a 258 479 6 -a 258 387 2 -a 258 290 3 -a 258 970 2 -a 258 415 8 -a 258 588 9 -a 258 273 10 -a 259 341 2 -a 259 526 9 -a 259 684 5 -a 259 399 4 -a 259 411 3 -a 259 859 1 -a 259 186 8 -a 259 381 5 -a 259 46 6 -a 259 210 9 -a 259 361 10 -a 259 257 9 -a 259 641 6 -a 259 598 9 -a 259 410 1 -a 259 587 10 -a 259 483 9 -a 259 97 8 -a 260 188 6 -a 260 10 1 -a 260 314 2 -a 260 286 1 -a 260 514 5 -a 260 793 8 -a 260 672 10 -a 260 803 4 -a 260 738 9 -a 260 62 10 -a 260 366 1 -a 260 402 8 -a 261 891 1 -a 261 669 1 -a 261 801 9 -a 261 277 10 -a 261 503 8 -a 261 986 10 -a 261 657 3 -a 261 548 6 -a 261 171 1 -a 261 804 9 -a 261 171 4 -a 261 634 1 -a 261 378 2 -a 261 580 2 -a 261 196 10 -a 261 860 1 -a 261 676 9 -a 261 384 7 -a 261 869 10 -a 262 990 6 -a 262 669 4 -a 262 358 10 -a 262 758 3 -a 262 317 4 -a 262 136 3 -a 262 471 6 -a 262 378 4 -a 262 501 6 -a 262 456 7 -a 262 780 7 -a 262 367 9 -a 262 100 5 -a 262 556 7 -a 262 643 5 -a 262 603 2 -a 263 517 8 -a 263 276 1 -a 263 126 2 -a 263 687 3 -a 263 269 4 -a 263 930 4 -a 263 857 3 -a 263 902 4 -a 263 283 2 -a 263 412 6 -a 263 74 10 -a 263 118 10 -a 263 64 10 -a 263 457 5 -a 263 987 5 -a 263 29 8 -a 263 101 10 -a 263 320 10 -a 263 786 7 -a 264 417 9 -a 264 456 1 -a 264 232 7 -a 264 795 9 -a 264 956 2 -a 264 687 9 -a 264 550 5 -a 264 299 7 -a 264 786 8 -a 264 81 10 -a 264 941 5 -a 264 364 9 -a 264 597 9 -a 264 192 8 -a 264 490 2 -a 264 259 4 -a 264 460 1 -a 265 395 1 -a 265 92 3 -a 265 338 6 -a 265 677 5 -a 265 503 7 -a 265 411 9 -a 265 794 9 -a 265 566 1 -a 265 867 9 -a 265 756 3 -a 265 594 10 -a 265 967 6 -a 265 52 1 -a 266 355 6 -a 266 360 4 -a 266 507 3 -a 266 586 5 -a 266 130 4 -a 266 438 1 -a 266 248 6 -a 266 679 4 -a 266 736 4 -a 266 10 9 -a 266 759 9 -a 266 653 8 -a 266 373 4 -a 266 331 1 -a 266 844 2 -a 266 862 8 -a 266 589 3 -a 266 280 2 -a 266 232 1 -a 266 680 6 -a 266 617 8 -a 266 908 2 -a 266 159 4 -a 266 3 10 -a 266 678 8 -a 266 724 1 -a 266 869 3 -a 266 409 7 -a 267 294 9 -a 267 811 3 -a 267 460 3 -a 267 648 1 -a 267 146 6 -a 267 966 5 -a 267 210 8 -a 267 275 1 -a 267 380 10 -a 267 457 8 -a 267 953 8 -a 267 91 5 -a 267 466 9 -a 267 687 8 -a 267 743 8 -a 267 839 8 -a 267 563 4 -a 267 676 10 -a 267 582 3 -a 267 842 10 -a 268 908 9 -a 268 237 2 -a 268 434 8 -a 268 791 8 -a 268 395 5 -a 268 436 2 -a 268 444 2 -a 268 95 3 -a 268 280 3 -a 268 853 2 -a 268 388 5 -a 268 66 2 -a 268 288 2 -a 268 11 6 -a 268 212 9 -a 268 230 10 -a 268 220 6 -a 268 486 3 -a 268 609 4 -a 269 677 8 -a 269 415 9 -a 269 699 7 -a 269 118 4 -a 269 77 8 -a 269 418 5 -a 269 956 6 -a 269 70 8 -a 269 980 8 -a 269 608 7 -a 269 651 8 -a 269 797 9 -a 269 491 10 -a 269 887 3 -a 269 206 8 -a 269 257 4 -a 270 258 9 -a 270 641 7 -a 270 701 10 -a 270 352 6 -a 270 920 10 -a 270 529 5 -a 270 739 8 -a 270 985 6 -a 270 816 4 -a 270 749 3 -a 270 172 2 -a 270 21 10 -a 270 969 9 -a 270 658 1 -a 270 629 5 -a 270 621 3 -a 270 48 8 -a 270 304 3 -a 270 738 4 -a 270 124 3 -a 271 721 1 -a 271 670 8 -a 271 193 7 -a 271 676 5 -a 271 253 10 -a 271 843 6 -a 271 448 4 -a 271 743 8 -a 271 706 5 -a 271 653 9 -a 271 999 2 -a 271 963 6 -a 271 269 2 -a 271 675 9 -a 271 290 10 -a 271 164 4 -a 271 179 7 -a 271 4 7 -a 271 124 2 -a 271 995 7 -a 271 752 7 -a 271 296 7 -a 271 696 1 -a 271 953 3 -a 271 620 9 -a 271 292 8 -a 271 1000 10 -a 271 923 3 -a 271 6 6 -a 271 99 2 -a 272 619 4 -a 272 675 1 -a 272 292 9 -a 272 270 8 -a 272 927 10 -a 272 110 5 -a 272 717 2 -a 272 645 6 -a 272 815 6 -a 272 345 1 -a 272 619 2 -a 272 753 5 -a 272 613 8 -a 272 270 2 -a 273 18 10 -a 273 776 10 -a 273 448 6 -a 273 21 10 -a 273 899 3 -a 273 418 8 -a 273 773 10 -a 273 170 1 -a 273 409 7 -a 273 444 3 -a 273 98 9 -a 273 4 4 -a 273 736 1 -a 273 73 4 -a 273 926 3 -a 273 741 5 -a 273 172 8 -a 273 520 6 -a 273 391 9 -a 273 463 5 -a 274 789 10 -a 274 293 3 -a 274 572 6 -a 274 481 3 -a 274 937 9 -a 274 363 5 -a 274 825 2 -a 274 531 9 -a 274 91 8 -a 274 413 2 -a 274 800 4 -a 274 109 1 -a 274 164 6 -a 274 224 9 -a 274 129 1 -a 274 38 6 -a 274 641 3 -a 274 901 1 -a 274 208 6 -a 274 25 3 -a 274 321 4 -a 274 305 2 -a 274 28 6 -a 274 32 8 -a 275 378 6 -a 275 953 4 -a 275 772 3 -a 275 549 5 -a 275 448 6 -a 275 138 10 -a 275 212 6 -a 275 430 5 -a 275 558 6 -a 275 692 3 -a 275 342 3 -a 275 920 3 -a 275 492 8 -a 275 872 10 -a 275 904 6 -a 275 648 8 -a 275 95 7 -a 275 43 2 -a 275 871 10 -a 275 223 2 -a 275 81 9 -a 275 487 10 -a 275 100 4 -a 275 288 10 -a 275 512 9 -a 275 420 4 -a 275 592 6 -a 276 539 6 -a 276 451 8 -a 276 969 8 -a 276 468 5 -a 276 198 7 -a 276 493 6 -a 276 915 4 -a 276 335 7 -a 276 479 7 -a 276 103 5 -a 276 764 6 -a 276 13 9 -a 276 794 4 -a 276 81 9 -a 276 932 8 -a 276 262 1 -a 276 952 3 -a 276 918 10 -a 276 141 9 -a 276 575 7 -a 276 184 9 -a 276 421 4 -a 276 211 8 -a 276 264 7 -a 277 908 7 -a 277 310 4 -a 277 551 3 -a 277 395 1 -a 277 729 3 -a 277 118 5 -a 277 933 3 -a 277 155 1 -a 277 63 3 -a 277 376 9 -a 277 352 1 -a 277 555 2 -a 277 267 5 -a 277 686 5 -a 277 10 4 -a 277 369 7 -a 277 425 4 -a 278 22 5 -a 278 138 5 -a 278 505 1 -a 278 953 1 -a 278 399 2 -a 278 432 3 -a 278 847 2 -a 278 540 4 -a 278 834 6 -a 278 723 6 -a 278 403 9 -a 278 20 9 -a 278 986 2 -a 278 286 7 -a 278 329 5 -a 278 512 2 -a 278 680 9 -a 278 33 9 -a 278 629 5 -a 279 589 10 -a 279 187 3 -a 279 691 7 -a 279 964 7 -a 279 538 3 -a 279 222 7 -a 279 206 8 -a 279 199 4 -a 279 231 9 -a 279 574 9 -a 279 623 7 -a 279 252 7 -a 279 712 5 -a 279 103 6 -a 279 180 3 -a 279 86 2 -a 279 535 8 -a 279 2 8 -a 279 625 3 -a 279 517 2 -a 279 836 5 -a 280 323 10 -a 280 919 2 -a 280 855 8 -a 280 284 2 -a 280 181 1 -a 280 160 10 -a 280 795 7 -a 280 860 7 -a 280 192 7 -a 280 400 10 -a 280 424 7 -a 280 379 4 -a 280 66 5 -a 280 364 5 -a 280 916 3 -a 280 287 4 -a 280 569 4 -a 280 91 10 -a 280 517 1 -a 280 119 2 -a 280 713 8 -a 280 768 6 -a 280 830 5 -a 280 816 9 -a 280 948 1 -a 281 915 1 -a 281 326 1 -a 281 949 2 -a 281 516 1 -a 281 842 1 -a 281 760 7 -a 281 838 7 -a 281 736 2 -a 281 591 1 -a 281 98 2 -a 281 916 7 -a 281 750 3 -a 281 892 1 -a 281 752 6 -a 281 941 10 -a 281 267 6 -a 281 151 5 -a 281 295 1 -a 281 333 5 -a 281 514 5 -a 281 187 5 -a 281 619 5 -a 281 59 6 -a 281 277 5 -a 281 112 7 -a 281 177 6 -a 282 989 5 -a 282 879 2 -a 282 780 3 -a 282 802 2 -a 282 896 10 -a 282 81 10 -a 282 727 2 -a 282 387 5 -a 282 922 8 -a 282 462 7 -a 282 201 9 -a 282 634 7 -a 282 28 7 -a 282 298 5 -a 282 525 9 -a 282 777 6 -a 283 165 5 -a 283 252 1 -a 283 694 7 -a 283 432 9 -a 283 403 6 -a 283 988 6 -a 283 764 1 -a 283 916 9 -a 283 150 2 -a 283 358 9 -a 283 974 2 -a 283 426 9 -a 283 469 8 -a 283 126 10 -a 283 391 3 -a 283 324 5 -a 283 107 9 -a 283 146 2 -a 283 101 1 -a 284 227 7 -a 284 827 1 -a 284 365 4 -a 284 124 6 -a 284 265 1 -a 284 565 2 -a 284 757 2 -a 284 292 5 -a 284 862 10 -a 284 258 6 -a 284 45 5 -a 284 3 7 -a 284 509 5 -a 284 738 1 -a 284 434 6 -a 284 911 5 -a 284 701 2 -a 284 173 5 -a 284 803 8 -a 284 851 5 -a 284 530 10 -a 284 752 9 -a 284 252 6 -a 285 999 9 -a 285 878 3 -a 285 642 6 -a 285 298 1 -a 285 984 1 -a 285 788 10 -a 285 398 3 -a 285 962 4 -a 285 201 6 -a 285 303 8 -a 285 113 8 -a 285 465 2 -a 285 867 7 -a 285 870 1 -a 285 756 5 -a 285 705 7 -a 285 103 1 -a 286 800 7 -a 286 707 4 -a 286 611 7 -a 286 513 6 -a 286 116 1 -a 286 498 4 -a 286 190 6 -a 286 288 1 -a 286 276 2 -a 286 16 8 -a 286 817 4 -a 287 3 6 -a 287 267 4 -a 287 791 9 -a 287 880 9 -a 287 909 1 -a 287 64 5 -a 287 840 7 -a 287 672 6 -a 287 462 4 -a 287 777 6 -a 287 661 7 -a 287 662 1 -a 287 55 5 -a 287 773 1 -a 287 102 8 -a 287 922 1 -a 287 618 1 -a 287 857 5 -a 287 602 3 -a 288 720 6 -a 288 633 9 -a 288 284 2 -a 288 307 9 -a 288 121 2 -a 288 399 10 -a 288 804 6 -a 288 310 10 -a 288 686 10 -a 288 55 5 -a 288 325 5 -a 288 478 5 -a 288 57 5 -a 288 592 9 -a 288 245 1 -a 289 937 6 -a 289 476 1 -a 289 308 6 -a 289 752 5 -a 289 123 3 -a 289 769 4 -a 289 504 9 -a 289 783 1 -a 289 406 1 -a 289 559 7 -a 289 531 4 -a 289 507 1 -a 289 456 10 -a 289 125 4 -a 289 340 4 -a 289 33 2 -a 289 844 1 -a 289 972 2 -a 289 316 7 -a 290 126 6 -a 290 68 10 -a 290 714 7 -a 290 929 10 -a 290 378 7 -a 290 375 10 -a 290 983 4 -a 290 702 2 -a 290 852 2 -a 290 16 8 -a 290 269 8 -a 290 72 8 -a 290 952 8 -a 290 744 1 -a 290 380 7 -a 290 679 5 -a 290 866 5 -a 290 124 6 -a 291 158 6 -a 291 624 2 -a 291 530 10 -a 291 716 9 -a 291 131 9 -a 291 12 10 -a 291 147 6 -a 291 255 2 -a 291 351 2 -a 291 179 3 -a 291 74 4 -a 291 298 8 -a 291 494 6 -a 291 200 1 -a 291 366 3 -a 291 183 10 -a 291 104 4 -a 291 743 8 -a 291 557 9 -a 291 63 3 -a 291 420 3 -a 291 385 5 -a 292 78 2 -a 292 689 2 -a 292 456 6 -a 292 5 10 -a 292 408 5 -a 292 835 1 -a 292 683 1 -a 292 250 1 -a 292 959 5 -a 292 840 3 -a 292 873 5 -a 292 464 1 -a 292 532 5 -a 292 475 2 -a 292 678 2 -a 293 233 3 -a 293 826 10 -a 293 857 8 -a 293 307 5 -a 293 99 8 -a 293 326 6 -a 293 506 3 -a 293 464 4 -a 293 509 1 -a 293 609 4 -a 293 182 2 -a 293 41 7 -a 293 671 3 -a 293 602 6 -a 293 425 9 -a 293 748 7 -a 294 266 5 -a 294 881 10 -a 294 752 6 -a 294 673 9 -a 294 691 1 -a 294 410 5 -a 294 922 8 -a 294 625 7 -a 294 226 2 -a 294 771 6 -a 294 64 10 -a 294 757 4 -a 294 749 3 -a 294 539 6 -a 294 410 10 -a 294 982 2 -a 294 340 3 -a 294 242 10 -a 294 264 2 -a 294 438 7 -a 295 568 3 -a 295 769 7 -a 295 902 7 -a 295 52 4 -a 295 353 5 -a 295 59 2 -a 295 92 7 -a 295 660 2 -a 295 517 4 -a 295 747 7 -a 295 925 10 -a 295 373 10 -a 295 475 3 -a 295 574 4 -a 295 39 3 -a 295 884 5 -a 295 471 2 -a 295 664 8 -a 295 85 1 -a 295 217 10 -a 295 727 3 -a 296 841 2 -a 296 966 2 -a 296 241 6 -a 296 227 6 -a 296 923 8 -a 296 580 10 -a 296 468 6 -a 296 162 4 -a 296 11 2 -a 296 930 3 -a 296 895 6 -a 296 62 1 -a 296 258 7 -a 296 953 3 -a 296 154 2 -a 296 257 5 -a 296 589 1 -a 296 670 9 -a 296 489 6 -a 296 18 10 -a 297 454 1 -a 297 38 10 -a 297 56 9 -a 297 313 3 -a 297 509 4 -a 297 719 10 -a 297 398 9 -a 297 725 5 -a 297 422 7 -a 297 214 8 -a 297 666 10 -a 297 662 1 -a 297 440 7 -a 297 564 9 -a 297 218 5 -a 297 908 8 -a 297 725 10 -a 298 211 8 -a 298 918 1 -a 298 630 9 -a 298 81 6 -a 298 980 1 -a 298 888 7 -a 298 9 4 -a 298 109 3 -a 298 120 2 -a 298 597 2 -a 298 778 9 -a 298 99 3 -a 298 62 8 -a 298 795 1 -a 298 552 7 -a 298 99 6 -a 298 850 1 -a 298 865 9 -a 299 607 8 -a 299 545 5 -a 299 238 2 -a 299 308 8 -a 299 966 3 -a 299 451 8 -a 299 973 10 -a 299 603 5 -a 299 891 9 -a 299 513 3 -a 299 820 7 -a 299 774 3 -a 299 213 3 -a 299 6 9 -a 299 667 8 -a 299 843 9 -a 299 86 3 -a 299 622 4 -a 299 706 7 -a 300 95 8 -a 300 730 10 -a 300 825 6 -a 300 691 5 -a 300 483 5 -a 300 924 8 -a 300 752 4 -a 300 253 2 -a 300 451 3 -a 300 851 3 -a 300 79 10 -a 300 291 2 -a 300 433 8 -a 300 623 1 -a 300 528 1 -a 300 740 2 -a 300 564 1 -a 300 979 8 -a 301 689 7 -a 301 142 4 -a 301 845 4 -a 301 177 4 -a 301 962 2 -a 301 594 7 -a 301 389 3 -a 301 967 1 -a 301 236 8 -a 301 207 6 -a 301 29 3 -a 301 858 6 -a 301 912 5 -a 301 123 2 -a 301 563 7 -a 301 713 9 -a 301 813 7 -a 301 22 8 -a 301 612 4 -a 301 541 9 -a 301 274 10 -a 302 38 4 -a 302 367 1 -a 302 352 2 -a 302 329 5 -a 302 799 3 -a 302 974 3 -a 302 856 2 -a 302 515 4 -a 302 513 5 -a 302 810 5 -a 302 179 4 -a 302 655 10 -a 302 630 7 -a 302 355 2 -a 302 592 8 -a 302 199 4 -a 302 743 1 -a 302 534 8 -a 302 435 1 -a 302 950 4 -a 302 562 1 -a 302 268 1 -a 302 837 3 -a 302 684 2 -a 303 830 1 -a 303 525 6 -a 303 473 2 -a 303 851 3 -a 303 112 4 -a 303 101 4 -a 303 150 6 -a 303 355 9 -a 303 452 8 -a 303 478 10 -a 303 129 5 -a 303 402 1 -a 303 309 6 -a 303 643 7 -a 303 914 5 -a 303 95 2 -a 303 821 7 -a 303 544 2 -a 303 724 9 -a 303 151 9 -a 303 111 1 -a 304 923 10 -a 304 894 1 -a 304 645 4 -a 304 333 2 -a 304 819 2 -a 304 182 9 -a 304 600 10 -a 304 631 9 -a 304 866 2 -a 304 405 9 -a 304 132 1 -a 304 314 3 -a 304 232 7 -a 304 243 8 -a 304 302 7 -a 304 332 8 -a 304 392 8 -a 304 656 3 -a 304 783 3 -a 304 869 10 -a 304 784 1 -a 305 160 3 -a 305 154 8 -a 305 403 1 -a 305 50 5 -a 305 248 2 -a 305 199 10 -a 305 593 4 -a 305 971 5 -a 305 350 5 -a 305 704 5 -a 305 869 2 -a 305 219 6 -a 305 324 5 -a 305 177 6 -a 305 13 3 -a 306 505 4 -a 306 776 3 -a 306 643 5 -a 306 346 5 -a 306 157 9 -a 306 774 6 -a 306 659 1 -a 306 388 6 -a 306 960 5 -a 306 719 7 -a 306 384 5 -a 306 591 8 -a 306 477 8 -a 306 229 4 -a 306 351 9 -a 306 637 6 -a 306 382 5 -a 307 753 4 -a 307 686 9 -a 307 629 10 -a 307 951 10 -a 307 254 4 -a 307 575 6 -a 307 276 1 -a 307 957 10 -a 307 420 3 -a 307 494 3 -a 307 256 5 -a 307 596 7 -a 307 506 6 -a 307 761 9 -a 307 348 2 -a 307 125 2 -a 307 82 2 -a 307 504 7 -a 307 898 5 -a 307 741 9 -a 307 891 2 -a 308 890 5 -a 308 676 10 -a 308 585 7 -a 308 250 6 -a 308 243 5 -a 308 37 1 -a 308 478 5 -a 308 593 7 -a 308 673 4 -a 308 859 9 -a 308 321 3 -a 308 334 3 -a 308 463 5 -a 308 247 6 -a 308 588 5 -a 308 13 5 -a 308 523 4 -a 308 520 3 -a 308 432 2 -a 308 776 5 -a 308 4 2 -a 308 498 7 -a 309 512 6 -a 309 351 10 -a 309 622 9 -a 309 593 8 -a 309 854 7 -a 309 495 9 -a 309 309 5 -a 309 720 1 -a 309 361 8 -a 309 985 9 -a 309 280 5 -a 309 610 2 -a 309 203 3 -a 309 316 7 -a 309 63 10 -a 309 795 9 -a 309 989 6 -a 309 921 5 -a 309 91 3 -a 309 298 8 -a 309 359 9 -a 309 337 4 -a 309 885 2 -a 310 371 6 -a 310 859 7 -a 310 381 5 -a 310 803 1 -a 310 851 8 -a 310 132 10 -a 310 806 7 -a 310 324 5 -a 310 643 3 -a 310 132 4 -a 310 945 10 -a 310 211 7 -a 310 985 1 -a 310 415 9 -a 310 520 9 -a 310 680 9 -a 310 775 7 -a 310 480 4 -a 311 959 4 -a 311 360 8 -a 311 682 10 -a 311 250 3 -a 311 422 6 -a 311 452 5 -a 311 214 7 -a 311 318 6 -a 311 542 3 -a 311 512 8 -a 311 676 9 -a 311 878 3 -a 311 372 4 -a 311 23 6 -a 311 713 3 -a 311 752 5 -a 311 825 3 -a 312 539 9 -a 312 883 3 -a 312 606 3 -a 312 862 2 -a 312 501 1 -a 312 737 10 -a 312 782 10 -a 312 712 7 -a 312 697 6 -a 312 172 7 -a 312 207 1 -a 312 352 9 -a 312 947 2 -a 312 686 1 -a 312 286 2 -a 312 282 6 -a 312 343 7 -a 312 535 8 -a 312 704 9 -a 312 794 2 -a 312 749 1 -a 312 311 10 -a 313 236 6 -a 313 673 2 -a 313 164 7 -a 313 607 2 -a 313 695 7 -a 313 876 4 -a 313 335 7 -a 313 495 6 -a 313 390 5 -a 313 193 8 -a 313 76 6 -a 313 227 8 -a 313 694 4 -a 313 812 8 -a 313 381 5 -a 313 484 3 -a 313 156 9 -a 313 587 4 -a 313 835 5 -a 314 78 10 -a 314 248 3 -a 314 96 10 -a 314 359 7 -a 314 590 8 -a 314 630 5 -a 314 38 2 -a 314 359 8 -a 314 354 7 -a 314 35 3 -a 314 669 5 -a 314 589 10 -a 314 707 1 -a 314 832 1 -a 314 172 5 -a 314 377 10 -a 314 684 5 -a 314 506 3 -a 314 871 7 -a 314 49 2 -a 314 698 1 -a 314 946 4 -a 314 276 8 -a 314 367 4 -a 314 733 9 -a 315 259 6 -a 315 747 1 -a 315 192 8 -a 315 414 7 -a 315 309 1 -a 315 2 5 -a 315 491 8 -a 315 556 5 -a 315 97 5 -a 315 850 1 -a 315 121 9 -a 315 726 7 -a 315 887 8 -a 315 479 6 -a 315 56 4 -a 315 921 2 -a 315 123 8 -a 315 644 4 -a 315 603 5 -a 315 955 7 -a 315 815 4 -a 315 979 5 -a 316 614 8 -a 316 296 3 -a 316 825 4 -a 316 662 1 -a 316 994 4 -a 316 746 8 -a 316 937 3 -a 316 336 4 -a 316 454 10 -a 316 172 9 -a 316 59 1 -a 316 645 10 -a 316 585 1 -a 316 367 7 -a 316 646 7 -a 316 52 8 -a 316 923 10 -a 316 742 9 -a 316 901 4 -a 316 19 10 -a 316 444 8 -a 316 763 4 -a 316 498 1 -a 317 499 3 -a 317 660 5 -a 317 620 6 -a 317 118 1 -a 317 238 8 -a 317 550 1 -a 317 933 1 -a 317 193 8 -a 317 139 8 -a 317 204 6 -a 317 801 4 -a 317 173 1 -a 317 739 7 -a 317 713 6 -a 317 509 8 -a 317 168 4 -a 317 884 8 -a 317 567 7 -a 317 813 10 -a 318 445 2 -a 318 933 5 -a 318 434 6 -a 318 496 2 -a 318 831 7 -a 318 152 7 -a 318 372 6 -a 318 850 10 -a 319 595 4 -a 319 110 1 -a 319 323 6 -a 319 69 2 -a 319 769 3 -a 319 942 6 -a 319 186 4 -a 319 468 4 -a 319 94 2 -a 319 175 3 -a 319 606 8 -a 319 298 1 -a 319 167 2 -a 319 382 8 -a 319 470 5 -a 319 905 1 -a 319 71 8 -a 319 978 8 -a 319 49 3 -a 319 954 6 -a 319 520 3 -a 319 861 3 -a 319 374 7 -a 319 429 9 -a 319 270 4 -a 319 869 6 -a 320 235 8 -a 320 421 4 -a 320 216 10 -a 320 60 5 -a 320 326 4 -a 320 382 2 -a 320 59 4 -a 320 70 2 -a 320 300 8 -a 320 245 2 -a 320 52 3 -a 320 767 1 -a 320 338 6 -a 320 226 5 -a 320 348 8 -a 320 635 10 -a 320 393 6 -a 320 730 8 -a 320 81 6 -a 320 273 10 -a 320 800 3 -a 321 34 7 -a 321 321 2 -a 321 729 6 -a 321 554 5 -a 321 157 7 -a 321 79 7 -a 321 982 8 -a 321 427 10 -a 321 947 8 -a 321 192 5 -a 321 847 6 -a 321 139 2 -a 321 252 5 -a 321 838 7 -a 321 464 3 -a 321 633 2 -a 321 896 2 -a 321 533 4 -a 321 932 3 -a 322 116 4 -a 322 585 9 -a 322 674 1 -a 322 454 10 -a 322 810 1 -a 322 64 8 -a 322 178 8 -a 322 727 8 -a 322 144 6 -a 322 451 7 -a 322 502 6 -a 322 178 10 -a 322 771 10 -a 322 206 1 -a 322 731 3 -a 323 928 7 -a 323 284 7 -a 323 688 6 -a 323 330 9 -a 323 207 1 -a 323 879 5 -a 323 152 6 -a 323 345 8 -a 323 106 2 -a 323 989 9 -a 323 808 2 -a 323 739 4 -a 323 861 10 -a 323 316 9 -a 323 646 6 -a 323 976 6 -a 323 900 4 -a 323 296 3 -a 323 405 4 -a 323 686 6 -a 324 293 1 -a 324 469 6 -a 324 863 6 -a 324 612 10 -a 324 289 3 -a 324 496 9 -a 324 789 2 -a 324 36 5 -a 324 701 3 -a 324 495 4 -a 324 963 7 -a 324 985 2 -a 324 158 2 -a 324 268 4 -a 324 167 8 -a 324 13 6 -a 324 419 5 -a 325 511 6 -a 325 118 3 -a 325 384 1 -a 325 294 1 -a 325 856 5 -a 325 220 3 -a 325 609 6 -a 325 478 6 -a 325 171 3 -a 325 485 10 -a 325 773 8 -a 325 576 7 -a 325 146 2 -a 325 41 8 -a 325 20 2 -a 325 35 3 -a 325 631 10 -a 325 273 4 -a 325 530 9 -a 325 396 10 -a 325 308 1 -a 325 206 4 -a 325 890 2 -a 326 246 1 -a 326 166 6 -a 326 24 10 -a 326 513 2 -a 326 332 5 -a 326 36 7 -a 326 931 7 -a 326 842 3 -a 326 153 3 -a 326 290 10 -a 326 111 3 -a 326 509 10 -a 326 720 1 -a 326 462 7 -a 326 680 10 -a 326 180 4 -a 326 210 8 -a 326 231 7 -a 327 325 4 -a 327 250 8 -a 327 250 10 -a 327 308 5 -a 327 284 2 -a 327 880 5 -a 327 580 4 -a 327 813 2 -a 327 251 10 -a 327 887 4 -a 327 117 7 -a 327 108 8 -a 327 160 8 -a 327 140 10 -a 327 620 8 -a 327 491 9 -a 327 175 10 -a 327 527 2 -a 327 309 10 -a 327 327 10 -a 327 816 9 -a 328 419 5 -a 328 311 3 -a 328 301 10 -a 328 114 4 -a 328 772 3 -a 328 980 4 -a 328 293 5 -a 328 981 7 -a 328 186 7 -a 328 617 7 -a 328 206 1 -a 328 435 3 -a 328 925 10 -a 328 489 7 -a 328 290 1 -a 328 480 4 -a 328 277 9 -a 328 541 10 -a 328 343 3 -a 328 271 2 -a 328 657 10 -a 328 450 3 -a 328 430 8 -a 328 796 3 -a 329 46 6 -a 329 920 7 -a 329 970 8 -a 329 572 5 -a 329 204 1 -a 329 272 8 -a 329 363 8 -a 329 623 6 -a 329 583 8 -a 329 663 1 -a 329 736 1 -a 329 330 3 -a 329 618 8 -a 329 5 3 -a 330 287 2 -a 330 803 9 -a 330 621 2 -a 330 492 9 -a 330 213 6 -a 330 521 5 -a 330 981 3 -a 330 503 1 -a 330 233 7 -a 330 19 1 -a 330 319 8 -a 330 503 6 -a 330 675 8 -a 330 768 5 -a 330 932 5 -a 330 446 9 -a 330 813 7 -a 330 828 1 -a 331 391 3 -a 331 360 6 -a 331 7 1 -a 331 662 1 -a 331 723 9 -a 331 629 10 -a 331 220 6 -a 331 361 1 -a 331 341 10 -a 331 550 7 -a 331 979 6 -a 331 345 4 -a 331 836 3 -a 331 757 9 -a 331 965 10 -a 331 303 1 -a 331 970 2 -a 331 462 10 -a 331 259 2 -a 331 448 3 -a 331 438 7 -a 331 492 7 -a 332 466 3 -a 332 756 7 -a 332 994 9 -a 332 116 7 -a 332 499 8 -a 332 902 10 -a 332 561 8 -a 332 288 8 -a 332 705 5 -a 332 951 6 -a 332 647 3 -a 332 711 8 -a 332 588 4 -a 332 345 2 -a 332 316 5 -a 332 808 1 -a 332 706 2 -a 332 656 2 -a 333 333 8 -a 333 660 9 -a 333 1000 10 -a 333 144 4 -a 333 392 8 -a 333 940 5 -a 333 446 1 -a 333 337 2 -a 333 377 8 -a 333 705 9 -a 333 784 4 -a 333 814 8 -a 333 172 10 -a 333 225 5 -a 333 545 2 -a 333 141 9 -a 333 340 9 -a 333 20 3 -a 333 18 9 -a 334 900 10 -a 334 307 5 -a 334 722 3 -a 334 826 5 -a 334 953 1 -a 334 409 9 -a 334 390 6 -a 334 274 6 -a 334 724 4 -a 334 173 6 -a 334 979 7 -a 334 355 4 -a 334 505 6 -a 334 614 10 -a 334 330 3 -a 334 648 9 -a 334 245 7 -a 335 69 1 -a 335 318 9 -a 335 622 4 -a 335 773 2 -a 335 77 9 -a 335 411 7 -a 335 944 7 -a 335 302 3 -a 335 956 2 -a 335 61 1 -a 335 641 9 -a 335 975 4 -a 335 78 7 -a 335 517 10 -a 335 257 4 -a 335 800 5 -a 335 318 8 -a 335 185 7 -a 335 184 2 -a 335 707 7 -a 335 458 3 -a 335 907 9 -a 335 879 8 -a 335 412 2 -a 335 237 4 -a 336 359 3 -a 336 1 10 -a 336 566 1 -a 336 810 5 -a 336 51 2 -a 336 299 6 -a 336 407 6 -a 336 823 9 -a 336 375 7 -a 336 818 1 -a 336 743 6 -a 336 676 8 -a 336 749 8 -a 336 803 4 -a 336 293 9 -a 337 699 1 -a 337 880 2 -a 337 809 3 -a 337 955 7 -a 337 655 1 -a 337 102 9 -a 337 115 10 -a 337 838 9 -a 337 809 9 -a 337 573 10 -a 337 720 3 -a 337 663 6 -a 337 984 10 -a 337 956 7 -a 337 985 10 -a 337 497 1 -a 337 966 1 -a 337 283 5 -a 337 29 9 -a 337 240 10 -a 337 689 6 -a 338 852 6 -a 338 614 2 -a 338 482 5 -a 338 570 3 -a 338 266 4 -a 338 206 7 -a 338 348 5 -a 338 558 4 -a 339 904 10 -a 339 203 9 -a 339 342 6 -a 339 834 6 -a 339 858 6 -a 339 443 6 -a 339 949 10 -a 339 671 9 -a 339 227 8 -a 339 497 4 -a 339 367 8 -a 339 890 7 -a 339 456 9 -a 339 298 9 -a 339 887 4 -a 339 416 1 -a 339 795 7 -a 339 865 8 -a 340 357 2 -a 340 53 10 -a 340 894 6 -a 340 596 7 -a 340 741 2 -a 340 721 5 -a 340 186 4 -a 340 199 10 -a 340 266 9 -a 340 451 4 -a 340 404 4 -a 340 613 7 -a 340 284 8 -a 340 815 2 -a 340 325 10 -a 340 93 10 -a 340 648 4 -a 340 767 4 -a 341 17 10 -a 341 295 9 -a 341 994 2 -a 341 513 9 -a 341 661 1 -a 341 859 8 -a 341 969 10 -a 341 958 7 -a 341 721 7 -a 341 360 4 -a 341 728 5 -a 341 561 10 -a 341 717 3 -a 341 780 1 -a 341 430 4 -a 341 288 9 -a 341 497 7 -a 341 126 10 -a 342 473 5 -a 342 695 10 -a 342 391 8 -a 342 923 7 -a 342 74 2 -a 342 906 3 -a 342 357 2 -a 342 794 3 -a 342 206 2 -a 342 450 4 -a 342 417 2 -a 342 973 1 -a 342 466 10 -a 342 711 5 -a 342 942 6 -a 342 979 4 -a 343 347 2 -a 343 776 5 -a 343 923 6 -a 343 281 2 -a 343 472 8 -a 343 258 2 -a 343 8 4 -a 343 974 8 -a 343 764 4 -a 343 438 8 -a 343 238 4 -a 343 236 6 -a 343 563 1 -a 343 710 1 -a 343 930 3 -a 343 954 2 -a 343 609 6 -a 343 932 1 -a 343 490 8 -a 343 336 5 -a 343 701 5 -a 343 696 9 -a 343 785 2 -a 343 94 5 -a 343 644 6 -a 343 226 9 -a 343 804 9 -a 343 561 9 -a 343 180 1 -a 343 127 5 -a 343 312 3 -a 344 78 2 -a 344 407 4 -a 344 783 1 -a 344 336 4 -a 344 390 9 -a 344 790 3 -a 344 285 9 -a 344 129 10 -a 344 203 3 -a 344 522 3 -a 344 364 10 -a 344 766 4 -a 344 208 7 -a 344 269 7 -a 344 695 9 -a 344 816 3 -a 344 248 1 -a 344 602 6 -a 344 281 7 -a 344 583 8 -a 344 279 8 -a 344 976 9 -a 344 343 8 -a 345 372 5 -a 345 595 9 -a 345 568 2 -a 345 151 1 -a 345 131 10 -a 345 748 5 -a 345 277 10 -a 345 442 8 -a 345 825 7 -a 345 683 10 -a 345 200 7 -a 345 136 6 -a 345 49 6 -a 345 990 9 -a 345 421 5 -a 345 177 7 -a 345 168 4 -a 345 942 4 -a 345 541 10 -a 345 933 1 -a 345 125 3 -a 345 809 1 -a 345 603 9 -a 345 940 8 -a 345 32 6 -a 345 181 3 -a 345 197 6 -a 346 614 3 -a 346 459 4 -a 346 148 1 -a 346 956 5 -a 346 830 4 -a 346 743 10 -a 346 500 6 -a 346 980 10 -a 346 873 6 -a 346 223 2 -a 346 233 2 -a 346 291 1 -a 346 23 2 -a 346 915 3 -a 346 490 10 -a 346 159 2 -a 346 963 7 -a 346 455 5 -a 346 579 4 -a 346 116 6 -a 346 623 8 -a 346 496 9 -a 346 656 3 -a 347 531 8 -a 347 621 8 -a 347 440 1 -a 347 110 9 -a 347 536 10 -a 347 472 8 -a 347 290 8 -a 347 732 9 -a 347 61 6 -a 347 748 10 -a 347 880 3 -a 347 553 2 -a 347 598 10 -a 347 492 3 -a 347 508 5 -a 347 446 4 -a 347 714 6 -a 347 740 6 -a 347 736 6 -a 347 736 3 -a 347 631 5 -a 347 202 5 -a 347 894 3 -a 348 569 1 -a 348 656 4 -a 348 448 4 -a 348 684 7 -a 348 254 5 -a 348 944 10 -a 348 315 7 -a 348 785 8 -a 348 540 2 -a 348 755 7 -a 348 894 5 -a 348 51 4 -a 348 202 1 -a 348 159 5 -a 348 783 1 -a 349 262 5 -a 349 906 7 -a 349 638 8 -a 349 254 3 -a 349 434 1 -a 349 211 5 -a 349 745 9 -a 349 941 5 -a 349 656 3 -a 349 434 2 -a 349 657 9 -a 349 368 5 -a 349 146 5 -a 349 263 10 -a 349 569 5 -a 349 15 2 -a 349 831 8 -a 349 200 9 -a 349 463 2 -a 350 491 2 -a 350 454 3 -a 350 382 7 -a 350 805 2 -a 350 214 5 -a 350 921 5 -a 350 535 3 -a 350 83 3 -a 350 971 10 -a 350 736 8 -a 350 241 5 -a 350 729 7 -a 350 998 4 -a 350 122 9 -a 350 342 1 -a 350 227 8 -a 350 555 8 -a 350 552 1 -a 351 972 10 -a 351 471 10 -a 351 184 8 -a 351 381 10 -a 351 103 6 -a 351 551 3 -a 351 526 4 -a 351 365 1 -a 351 95 1 -a 351 541 6 -a 351 172 3 -a 351 294 10 -a 351 662 7 -a 351 747 6 -a 351 360 6 -a 351 442 1 -a 351 960 9 -a 351 256 9 -a 352 977 3 -a 352 18 4 -a 352 202 8 -a 352 688 5 -a 352 258 7 -a 352 931 7 -a 352 661 3 -a 352 379 9 -a 352 248 10 -a 352 888 3 -a 352 933 10 -a 352 800 6 -a 352 835 3 -a 352 380 4 -a 352 983 10 -a 352 191 10 -a 352 482 6 -a 352 509 7 -a 352 717 3 -a 352 847 2 -a 353 603 6 -a 353 233 6 -a 353 896 5 -a 353 211 6 -a 353 655 4 -a 353 619 2 -a 353 570 2 -a 353 72 6 -a 353 554 8 -a 353 825 7 -a 353 24 10 -a 353 572 5 -a 353 2 9 -a 353 712 4 -a 353 829 2 -a 353 932 3 -a 353 348 5 -a 353 184 4 -a 354 156 2 -a 354 211 7 -a 354 92 3 -a 354 955 8 -a 354 21 9 -a 354 471 4 -a 354 913 9 -a 354 212 3 -a 354 953 1 -a 354 397 10 -a 354 928 4 -a 354 775 2 -a 354 999 10 -a 354 136 5 -a 354 768 1 -a 354 870 1 -a 354 346 9 -a 354 398 2 -a 354 464 2 -a 354 915 3 -a 355 469 4 -a 355 715 7 -a 355 493 7 -a 355 565 4 -a 355 716 8 -a 355 180 6 -a 355 369 7 -a 355 624 10 -a 355 527 2 -a 355 552 2 -a 355 779 7 -a 355 738 9 -a 355 644 8 -a 355 709 2 -a 355 758 2 -a 355 90 8 -a 355 597 2 -a 355 969 1 -a 355 18 4 -a 356 993 2 -a 356 872 4 -a 356 792 10 -a 356 967 8 -a 356 535 3 -a 356 812 8 -a 356 328 3 -a 356 932 5 -a 356 252 9 -a 356 218 9 -a 356 377 10 -a 356 245 2 -a 356 932 1 -a 356 869 7 -a 356 809 9 -a 356 624 3 -a 356 24 8 -a 356 153 2 -a 356 223 9 -a 356 550 2 -a 356 705 5 -a 357 263 5 -a 357 324 8 -a 357 685 7 -a 357 413 2 -a 357 257 7 -a 357 965 4 -a 357 431 5 -a 357 225 2 -a 357 813 2 -a 357 198 7 -a 357 167 6 -a 357 795 6 -a 357 733 6 -a 357 978 6 -a 357 99 8 -a 357 640 5 -a 357 205 9 -a 357 316 6 -a 357 449 3 -a 357 224 10 -a 357 860 1 -a 357 233 2 -a 357 847 6 -a 358 883 9 -a 358 386 4 -a 358 45 7 -a 358 409 1 -a 358 66 10 -a 358 21 3 -a 358 671 3 -a 358 389 10 -a 358 705 1 -a 358 667 4 -a 358 801 7 -a 358 961 7 -a 358 608 7 -a 358 207 1 -a 358 161 2 -a 358 396 9 -a 358 405 9 -a 358 327 6 -a 358 166 1 -a 358 113 8 -a 358 280 9 -a 358 264 8 -a 358 752 3 -a 358 485 2 -a 359 580 9 -a 359 744 3 -a 359 933 3 -a 359 803 3 -a 359 579 1 -a 359 142 2 -a 359 625 10 -a 359 438 5 -a 359 527 3 -a 359 669 2 -a 359 846 6 -a 359 592 9 -a 359 689 2 -a 359 492 7 -a 359 980 3 -a 359 369 2 -a 359 135 9 -a 359 756 2 -a 359 305 4 -a 359 742 6 -a 359 963 7 -a 360 465 7 -a 360 113 3 -a 360 343 7 -a 360 791 9 -a 360 278 3 -a 360 455 4 -a 360 46 5 -a 360 542 9 -a 360 182 8 -a 360 530 8 -a 360 97 8 -a 360 925 2 -a 360 439 10 -a 360 899 5 -a 360 480 7 -a 360 580 2 -a 360 499 5 -a 360 917 10 -a 360 82 7 -a 360 143 8 -a 360 738 3 -a 360 673 5 -a 360 831 1 -a 360 205 5 -a 360 628 8 -a 360 175 9 -a 360 339 6 -a 361 359 6 -a 361 479 7 -a 361 56 3 -a 361 297 5 -a 361 943 5 -a 361 168 3 -a 361 639 4 -a 361 709 4 -a 361 446 4 -a 361 69 8 -a 361 754 6 -a 361 987 3 -a 361 251 8 -a 361 260 4 -a 361 59 5 -a 361 151 4 -a 361 698 6 -a 362 957 9 -a 362 630 4 -a 362 253 10 -a 362 431 1 -a 362 522 3 -a 362 334 4 -a 362 573 8 -a 362 235 7 -a 362 379 1 -a 362 440 10 -a 362 609 5 -a 362 553 8 -a 362 778 4 -a 362 967 7 -a 362 7 2 -a 363 834 9 -a 363 240 9 -a 363 949 4 -a 363 878 7 -a 363 633 1 -a 363 422 9 -a 363 947 10 -a 363 362 9 -a 363 384 8 -a 363 173 8 -a 363 621 4 -a 363 442 8 -a 363 323 1 -a 363 294 9 -a 363 374 5 -a 363 953 8 -a 364 546 7 -a 364 804 1 -a 364 450 3 -a 364 879 9 -a 364 352 5 -a 364 685 5 -a 364 860 9 -a 364 730 7 -a 364 100 4 -a 364 444 7 -a 364 258 9 -a 364 877 1 -a 364 387 4 -a 364 264 9 -a 364 686 7 -a 364 626 1 -a 364 188 7 -a 364 663 5 -a 364 479 5 -a 364 820 6 -a 365 60 9 -a 365 401 8 -a 365 158 8 -a 365 444 2 -a 365 573 2 -a 365 778 6 -a 365 885 4 -a 365 896 8 -a 365 48 9 -a 365 235 3 -a 365 824 5 -a 365 593 8 -a 365 14 10 -a 365 249 3 -a 366 448 5 -a 366 366 7 -a 366 933 1 -a 366 283 6 -a 366 71 5 -a 366 8 7 -a 366 727 8 -a 366 329 8 -a 366 885 5 -a 366 89 5 -a 366 592 3 -a 366 546 9 -a 366 714 8 -a 366 780 2 -a 366 184 1 -a 366 168 1 -a 366 575 3 -a 366 244 5 -a 366 569 7 -a 367 732 9 -a 367 687 8 -a 367 117 9 -a 367 486 3 -a 367 547 9 -a 367 533 9 -a 367 781 10 -a 367 811 1 -a 367 101 6 -a 367 795 6 -a 367 36 10 -a 367 548 10 -a 367 136 9 -a 367 968 3 -a 367 831 3 -a 367 206 10 -a 367 976 5 -a 368 533 5 -a 368 534 3 -a 368 836 3 -a 368 621 2 -a 368 102 5 -a 368 357 3 -a 368 310 1 -a 368 881 10 -a 368 541 8 -a 368 477 9 -a 368 431 10 -a 368 784 5 -a 368 21 6 -a 368 139 7 -a 368 446 2 -a 368 138 9 -a 369 624 8 -a 369 992 8 -a 369 125 2 -a 369 132 2 -a 369 749 4 -a 369 936 3 -a 369 232 8 -a 369 519 9 -a 369 971 2 -a 369 780 5 -a 369 654 7 -a 369 914 1 -a 369 586 4 -a 369 859 6 -a 369 865 10 -a 369 94 8 -a 369 369 3 -a 370 676 6 -a 370 714 6 -a 370 470 5 -a 370 9 8 -a 370 326 9 -a 370 549 2 -a 370 475 7 -a 370 756 1 -a 370 308 8 -a 370 496 4 -a 370 894 9 -a 370 753 8 -a 370 633 5 -a 370 493 3 -a 370 720 8 -a 370 757 8 -a 370 624 1 -a 371 444 1 -a 371 668 4 -a 371 856 3 -a 371 962 10 -a 371 614 7 -a 371 611 8 -a 371 591 2 -a 371 504 1 -a 371 172 6 -a 371 426 8 -a 371 344 9 -a 371 265 2 -a 371 794 7 -a 371 978 6 -a 371 239 2 -a 371 4 3 -a 371 976 7 -a 372 564 7 -a 372 552 9 -a 372 426 8 -a 372 295 10 -a 372 859 6 -a 372 921 3 -a 372 165 6 -a 372 587 10 -a 372 529 2 -a 372 657 1 -a 372 282 9 -a 373 262 2 -a 373 257 9 -a 373 726 6 -a 373 929 5 -a 373 88 9 -a 373 663 5 -a 373 519 4 -a 373 698 10 -a 373 230 9 -a 373 869 7 -a 373 655 3 -a 373 341 8 -a 373 109 2 -a 373 424 2 -a 373 336 7 -a 373 62 1 -a 373 662 6 -a 374 339 10 -a 374 13 1 -a 374 201 7 -a 374 890 2 -a 374 438 8 -a 374 495 9 -a 374 724 4 -a 374 335 8 -a 374 659 8 -a 374 286 2 -a 374 863 2 -a 374 292 9 -a 374 568 7 -a 374 100 3 -a 374 548 1 -a 374 269 4 -a 374 5 3 -a 374 635 9 -a 374 931 7 -a 374 523 5 -a 374 308 8 -a 374 136 7 -a 374 520 4 -a 375 152 10 -a 375 790 1 -a 375 860 3 -a 375 260 2 -a 375 189 4 -a 375 172 3 -a 375 321 8 -a 375 850 1 -a 375 510 2 -a 375 333 2 -a 375 26 6 -a 375 376 4 -a 375 770 8 -a 375 521 3 -a 375 75 5 -a 375 80 10 -a 375 155 2 -a 375 361 9 -a 375 943 9 -a 376 446 8 -a 376 928 4 -a 376 18 2 -a 376 993 6 -a 376 172 3 -a 376 22 9 -a 376 603 5 -a 376 78 4 -a 376 544 8 -a 376 910 6 -a 376 214 2 -a 376 39 9 -a 376 37 7 -a 376 899 10 -a 376 296 5 -a 376 168 1 -a 376 46 5 -a 376 616 9 -a 376 555 3 -a 376 948 4 -a 376 19 6 -a 377 930 5 -a 377 694 2 -a 377 539 8 -a 377 773 9 -a 377 693 5 -a 377 341 3 -a 377 691 8 -a 377 115 4 -a 377 244 10 -a 377 709 2 -a 377 83 7 -a 377 415 2 -a 377 730 6 -a 377 686 1 -a 377 492 10 -a 377 250 8 -a 377 571 5 -a 377 705 3 -a 377 288 9 -a 377 608 6 -a 377 684 4 -a 377 162 2 -a 377 903 1 -a 377 851 9 -a 377 207 3 -a 378 495 5 -a 378 843 10 -a 378 762 1 -a 378 418 8 -a 378 861 10 -a 378 667 7 -a 378 87 1 -a 378 375 9 -a 378 647 1 -a 378 860 2 -a 378 44 3 -a 378 987 7 -a 378 526 3 -a 378 158 3 -a 378 206 5 -a 378 210 3 -a 378 240 10 -a 378 620 4 -a 378 940 10 -a 379 925 6 -a 379 88 4 -a 379 165 2 -a 379 472 7 -a 379 792 10 -a 379 452 1 -a 379 55 4 -a 379 451 1 -a 379 614 2 -a 379 957 4 -a 379 277 3 -a 379 820 1 -a 379 427 1 -a 379 96 2 -a 379 557 4 -a 379 845 10 -a 379 956 5 -a 380 200 3 -a 380 931 7 -a 380 307 10 -a 380 846 8 -a 380 766 6 -a 380 350 9 -a 380 809 3 -a 380 268 6 -a 380 507 9 -a 380 477 1 -a 380 746 10 -a 380 610 9 -a 380 392 9 -a 380 647 7 -a 380 697 2 -a 380 556 6 -a 380 94 7 -a 380 464 2 -a 380 148 7 -a 380 915 10 -a 380 597 8 -a 380 80 5 -a 380 167 5 -a 380 392 4 -a 380 507 2 -a 380 262 7 -a 381 949 4 -a 381 327 6 -a 381 194 10 -a 381 124 10 -a 381 233 10 -a 381 500 2 -a 381 969 4 -a 381 999 7 -a 381 849 10 -a 381 753 4 -a 381 242 8 -a 381 331 7 -a 381 743 5 -a 381 718 9 -a 381 52 9 -a 381 328 1 -a 381 86 4 -a 381 698 6 -a 381 641 7 -a 381 791 7 -a 381 463 5 -a 381 624 3 -a 381 938 2 -a 381 353 2 -a 381 196 7 -a 381 520 7 -a 381 588 4 -a 381 500 5 -a 382 781 8 -a 382 512 7 -a 382 826 1 -a 382 974 10 -a 382 635 4 -a 382 34 2 -a 382 449 1 -a 382 579 7 -a 382 8 4 -a 382 273 2 -a 382 308 9 -a 382 249 4 -a 382 603 8 -a 382 26 6 -a 382 967 9 -a 382 655 3 -a 383 353 10 -a 383 28 10 -a 383 328 3 -a 383 352 1 -a 383 668 10 -a 383 95 10 -a 383 814 7 -a 383 268 8 -a 383 8 8 -a 383 143 8 -a 383 463 10 -a 383 1 3 -a 383 662 7 -a 383 26 7 -a 383 500 3 -a 383 418 6 -a 383 537 4 -a 383 301 10 -a 383 368 3 -a 383 147 7 -a 383 335 7 -a 383 816 7 -a 383 726 5 -a 384 342 1 -a 384 65 9 -a 384 9 4 -a 384 591 6 -a 384 667 6 -a 384 34 7 -a 384 533 2 -a 384 297 4 -a 384 386 2 -a 384 560 6 -a 384 625 9 -a 384 737 1 -a 384 203 1 -a 384 719 6 -a 384 526 8 -a 384 470 8 -a 384 726 8 -a 384 668 3 -a 385 933 9 -a 385 727 2 -a 385 305 8 -a 385 958 10 -a 385 202 5 -a 385 723 7 -a 385 471 8 -a 385 503 8 -a 385 66 8 -a 385 617 6 -a 385 837 5 -a 385 881 1 -a 385 318 3 -a 385 154 8 -a 385 945 6 -a 385 326 3 -a 385 744 10 -a 385 588 1 -a 385 359 1 -a 385 252 3 -a 385 884 6 -a 385 744 7 -a 385 811 4 -a 385 484 4 -a 385 456 4 -a 385 178 9 -a 386 982 2 -a 386 459 8 -a 386 904 5 -a 386 625 7 -a 386 367 4 -a 386 606 5 -a 386 930 3 -a 386 301 5 -a 386 807 5 -a 386 628 3 -a 386 771 1 -a 386 285 1 -a 386 693 8 -a 386 363 3 -a 386 97 10 -a 386 549 3 -a 387 681 1 -a 387 251 6 -a 387 470 5 -a 387 994 1 -a 387 33 5 -a 387 341 8 -a 387 222 9 -a 387 916 3 -a 387 60 5 -a 387 8 10 -a 387 376 1 -a 387 516 10 -a 387 553 5 -a 387 473 5 -a 387 456 10 -a 387 432 8 -a 388 73 5 -a 388 822 1 -a 388 13 5 -a 388 98 7 -a 388 820 4 -a 388 605 10 -a 388 868 5 -a 388 80 6 -a 388 273 6 -a 388 207 3 -a 388 177 8 -a 388 822 8 -a 388 887 2 -a 388 427 1 -a 388 267 8 -a 388 868 5 -a 388 396 4 -a 388 299 6 -a 388 184 9 -a 389 617 2 -a 389 190 4 -a 389 244 10 -a 389 625 7 -a 389 565 10 -a 389 759 8 -a 389 621 6 -a 389 94 10 -a 389 207 4 -a 389 52 8 -a 389 525 4 -a 389 279 3 -a 389 874 1 -a 389 538 7 -a 389 257 10 -a 389 971 2 -a 389 333 8 -a 389 861 1 -a 389 815 4 -a 389 412 1 -a 390 110 5 -a 390 588 1 -a 390 931 4 -a 390 883 6 -a 390 173 5 -a 390 726 5 -a 390 386 10 -a 390 471 2 -a 390 910 2 -a 390 660 4 -a 390 129 2 -a 390 602 6 -a 390 201 3 -a 390 887 9 -a 390 199 1 -a 390 294 10 -a 390 69 1 -a 390 250 2 -a 390 818 7 -a 391 347 4 -a 391 99 5 -a 391 331 8 -a 391 603 1 -a 391 46 4 -a 391 663 1 -a 391 440 1 -a 391 860 5 -a 391 51 1 -a 391 549 1 -a 391 856 6 -a 391 638 6 -a 391 455 8 -a 391 714 6 -a 391 628 8 -a 391 627 3 -a 391 415 2 -a 391 73 4 -a 391 300 8 -a 392 990 3 -a 392 732 3 -a 392 428 10 -a 392 568 3 -a 392 932 5 -a 392 290 2 -a 392 766 10 -a 392 201 9 -a 392 358 10 -a 392 705 9 -a 392 90 1 -a 392 325 5 -a 392 283 6 -a 392 135 8 -a 392 988 7 -a 392 722 6 -a 392 994 5 -a 392 14 3 -a 392 246 10 -a 392 825 7 -a 392 651 4 -a 392 700 9 -a 393 514 9 -a 393 254 3 -a 393 302 2 -a 393 928 6 -a 393 242 9 -a 393 374 7 -a 393 204 2 -a 393 208 7 -a 393 82 6 -a 393 631 9 -a 393 775 1 -a 393 921 8 -a 393 516 3 -a 393 190 9 -a 393 254 2 -a 393 506 5 -a 393 184 9 -a 393 958 9 -a 393 595 9 -a 393 508 1 -a 393 217 1 -a 393 729 8 -a 393 471 3 -a 394 938 9 -a 394 698 1 -a 394 484 1 -a 394 160 5 -a 394 498 6 -a 394 111 4 -a 394 859 7 -a 394 364 3 -a 394 137 6 -a 394 915 8 -a 394 606 1 -a 394 510 10 -a 394 94 5 -a 394 813 5 -a 394 591 2 -a 394 724 2 -a 394 563 7 -a 395 580 10 -a 395 620 2 -a 395 54 4 -a 395 769 10 -a 395 874 4 -a 395 559 8 -a 395 952 4 -a 395 807 8 -a 395 130 10 -a 395 435 6 -a 395 858 5 -a 395 906 8 -a 395 937 5 -a 395 532 6 -a 395 365 9 -a 395 72 7 -a 395 5 8 -a 395 475 6 -a 395 930 9 -a 395 839 5 -a 395 42 5 -a 395 906 9 -a 395 420 10 -a 396 552 7 -a 396 999 6 -a 396 208 10 -a 396 118 8 -a 396 698 7 -a 396 770 5 -a 396 697 7 -a 396 294 2 -a 396 823 9 -a 396 441 9 -a 396 143 4 -a 396 357 8 -a 396 368 5 -a 396 949 8 -a 396 486 1 -a 396 803 5 -a 396 948 9 -a 397 320 8 -a 397 684 4 -a 397 860 10 -a 397 851 3 -a 397 24 9 -a 397 931 3 -a 397 855 10 -a 397 499 8 -a 397 836 1 -a 397 846 9 -a 397 313 3 -a 397 878 2 -a 397 727 10 -a 397 732 5 -a 397 405 1 -a 397 701 4 -a 397 939 4 -a 397 522 1 -a 397 375 9 -a 397 684 9 -a 397 195 4 -a 397 668 4 -a 397 482 8 -a 397 635 8 -a 398 810 7 -a 398 838 6 -a 398 734 8 -a 398 300 1 -a 398 781 3 -a 398 657 3 -a 398 619 2 -a 398 440 4 -a 398 492 6 -a 398 445 4 -a 398 463 8 -a 398 398 5 -a 398 275 3 -a 398 961 5 -a 398 210 3 -a 398 97 3 -a 398 249 6 -a 398 63 10 -a 398 823 2 -a 398 980 2 -a 398 467 8 -a 399 500 10 -a 399 894 1 -a 399 988 6 -a 399 874 7 -a 399 553 4 -a 399 158 9 -a 399 517 2 -a 399 10 3 -a 399 793 4 -a 399 302 3 -a 399 848 7 -a 399 771 8 -a 399 11 10 -a 399 123 6 -a 399 527 1 -a 399 668 10 -a 399 741 3 -a 399 966 8 -a 400 135 7 -a 400 161 10 -a 400 404 7 -a 400 533 10 -a 400 435 6 -a 400 341 3 -a 400 742 5 -a 400 531 3 -a 400 589 6 -a 400 804 5 -a 400 330 8 -a 400 545 4 -a 400 246 1 -a 400 829 9 -a 400 414 2 -a 400 209 10 -a 400 678 4 -a 400 967 10 -a 400 367 1 -a 400 170 3 -a 400 976 7 -a 400 135 10 -a 400 471 10 -a 401 799 6 -a 401 905 5 -a 401 481 1 -a 401 921 3 -a 401 407 7 -a 401 124 2 -a 401 637 5 -a 401 348 9 -a 401 259 8 -a 401 797 9 -a 401 751 10 -a 401 791 8 -a 401 208 5 -a 401 67 1 -a 401 508 10 -a 401 738 1 -a 401 656 10 -a 401 287 3 -a 401 43 4 -a 401 176 6 -a 401 532 2 -a 401 871 9 -a 401 589 3 -a 401 740 7 -a 402 524 8 -a 402 531 2 -a 402 82 4 -a 402 693 7 -a 402 483 9 -a 402 216 3 -a 402 139 9 -a 402 257 9 -a 402 96 4 -a 402 620 7 -a 402 154 2 -a 402 502 4 -a 402 743 6 -a 402 790 6 -a 402 849 5 -a 402 563 6 -a 402 576 1 -a 402 767 1 -a 402 770 10 -a 403 642 6 -a 403 250 7 -a 403 483 4 -a 403 273 8 -a 403 536 7 -a 403 526 3 -a 403 448 8 -a 403 43 8 -a 403 372 2 -a 403 13 5 -a 403 783 7 -a 403 896 9 -a 403 543 10 -a 403 864 3 -a 403 564 10 -a 403 1 2 -a 403 56 5 -a 403 703 6 -a 403 258 2 -a 403 151 3 -a 403 298 5 -a 403 411 1 -a 403 653 1 -a 403 16 7 -a 403 176 7 -a 404 477 6 -a 404 738 5 -a 404 28 10 -a 404 759 2 -a 404 483 7 -a 404 670 3 -a 404 966 5 -a 404 942 3 -a 404 520 4 -a 404 467 4 -a 404 366 4 -a 404 563 5 -a 404 838 6 -a 404 378 2 -a 404 321 2 -a 404 709 4 -a 404 920 6 -a 404 160 3 -a 404 249 7 -a 404 921 6 -a 405 215 2 -a 405 951 10 -a 405 154 7 -a 405 366 6 -a 405 224 3 -a 405 564 4 -a 405 239 2 -a 405 739 9 -a 405 470 4 -a 405 231 10 -a 405 453 10 -a 405 498 2 -a 405 990 6 -a 405 935 7 -a 406 143 6 -a 406 974 3 -a 406 876 6 -a 406 60 2 -a 406 469 4 -a 406 318 3 -a 406 425 10 -a 406 7 8 -a 406 132 9 -a 406 802 7 -a 406 327 3 -a 406 840 10 -a 407 698 7 -a 407 487 6 -a 407 64 8 -a 407 594 6 -a 407 701 3 -a 407 747 6 -a 407 42 4 -a 407 213 6 -a 407 286 5 -a 407 35 9 -a 407 452 10 -a 407 505 1 -a 407 682 8 -a 407 452 4 -a 407 647 3 -a 407 363 2 -a 407 120 10 -a 407 596 8 -a 407 214 4 -a 407 179 1 -a 407 41 5 -a 407 532 7 -a 407 604 10 -a 407 47 3 -a 407 663 10 -a 407 381 8 -a 407 374 8 -a 407 478 2 -a 408 54 5 -a 408 860 2 -a 408 542 7 -a 408 647 8 -a 408 536 7 -a 408 531 1 -a 408 369 10 -a 408 578 7 -a 408 744 8 -a 408 654 9 -a 408 612 8 -a 408 171 2 -a 408 654 1 -a 408 92 2 -a 408 852 5 -a 408 81 1 -a 408 69 5 -a 408 475 3 -a 408 443 10 -a 409 188 2 -a 409 46 6 -a 409 657 1 -a 409 367 4 -a 409 86 2 -a 409 164 10 -a 409 970 2 -a 409 133 6 -a 409 826 8 -a 409 326 8 -a 409 506 4 -a 409 279 1 -a 409 380 5 -a 409 341 3 -a 409 820 5 -a 409 2 6 -a 409 876 9 -a 410 327 8 -a 410 371 7 -a 410 429 6 -a 410 46 2 -a 410 17 8 -a 410 216 2 -a 410 653 2 -a 410 108 4 -a 410 43 4 -a 410 734 8 -a 410 177 9 -a 410 517 10 -a 410 152 6 -a 410 364 10 -a 410 563 2 -a 410 808 9 -a 410 730 10 -a 410 648 7 -a 410 971 8 -a 410 675 7 -a 410 780 1 -a 410 772 3 -a 411 261 4 -a 411 27 1 -a 411 356 1 -a 411 601 4 -a 411 846 4 -a 411 357 9 -a 411 453 2 -a 411 148 4 -a 411 727 8 -a 411 881 9 -a 411 193 2 -a 411 727 3 -a 411 897 1 -a 411 408 7 -a 411 355 9 -a 411 451 7 -a 411 64 6 -a 411 157 8 -a 411 967 8 -a 411 216 1 -a 411 520 7 -a 411 505 8 -a 411 226 6 -a 411 129 9 -a 411 970 10 -a 411 900 1 -a 412 908 2 -a 412 717 2 -a 412 876 4 -a 412 145 10 -a 412 743 5 -a 412 207 6 -a 412 745 2 -a 412 565 9 -a 412 564 9 -a 412 173 6 -a 412 712 1 -a 412 266 9 -a 412 30 5 -a 412 905 7 -a 412 992 7 -a 412 926 2 -a 412 288 1 -a 412 323 9 -a 413 906 4 -a 413 738 1 -a 413 386 1 -a 413 38 3 -a 413 681 6 -a 413 601 2 -a 413 558 2 -a 413 161 6 -a 413 600 7 -a 413 783 1 -a 413 289 1 -a 413 545 1 -a 413 658 9 -a 413 173 9 -a 413 237 6 -a 413 510 9 -a 413 317 1 -a 414 980 7 -a 414 716 8 -a 414 37 10 -a 414 520 5 -a 414 255 5 -a 414 210 6 -a 414 207 1 -a 414 521 10 -a 414 239 6 -a 414 87 8 -a 414 488 8 -a 414 140 9 -a 414 375 9 -a 414 810 7 -a 414 22 7 -a 414 88 5 -a 414 172 7 -a 415 59 10 -a 415 768 4 -a 415 772 3 -a 415 616 9 -a 415 929 5 -a 415 347 9 -a 415 374 8 -a 415 193 10 -a 415 891 4 -a 415 8 2 -a 415 365 3 -a 415 104 8 -a 415 517 10 -a 415 681 1 -a 416 59 6 -a 416 208 9 -a 416 718 4 -a 416 578 7 -a 416 463 6 -a 416 927 10 -a 416 784 5 -a 416 983 9 -a 416 141 3 -a 416 871 2 -a 416 446 4 -a 416 280 8 -a 416 221 3 -a 416 232 10 -a 416 301 10 -a 416 308 3 -a 416 403 9 -a 416 360 6 -a 417 52 4 -a 417 150 6 -a 417 975 5 -a 417 980 5 -a 417 497 8 -a 417 325 3 -a 417 148 10 -a 417 363 1 -a 417 332 6 -a 417 513 7 -a 417 466 10 -a 417 848 8 -a 417 169 1 -a 417 524 7 -a 417 31 1 -a 417 886 6 -a 417 77 3 -a 417 493 10 -a 417 788 8 -a 417 861 1 -a 417 451 9 -a 418 928 2 -a 418 707 8 -a 418 897 8 -a 418 184 8 -a 418 927 8 -a 418 104 7 -a 418 484 7 -a 418 210 2 -a 418 506 3 -a 418 843 2 -a 418 261 9 -a 418 655 9 -a 418 794 9 -a 418 216 6 -a 418 127 9 -a 418 94 6 -a 418 364 3 -a 418 490 9 -a 418 425 4 -a 418 876 1 -a 418 955 9 -a 418 248 8 -a 418 20 5 -a 418 455 10 -a 418 278 5 -a 418 906 5 -a 418 531 3 -a 418 771 4 -a 418 669 1 -a 418 367 2 -a 419 197 10 -a 419 573 3 -a 419 49 5 -a 419 69 5 -a 419 756 8 -a 419 975 5 -a 419 172 5 -a 419 215 5 -a 419 161 4 -a 419 677 9 -a 419 34 3 -a 419 421 3 -a 419 308 2 -a 419 827 6 -a 419 637 2 -a 419 434 9 -a 419 920 5 -a 419 1000 9 -a 419 923 7 -a 420 320 5 -a 420 851 9 -a 420 854 2 -a 420 567 6 -a 420 870 9 -a 420 284 2 -a 420 844 6 -a 420 751 2 -a 420 814 5 -a 420 590 8 -a 420 396 7 -a 420 157 9 -a 420 787 5 -a 420 968 4 -a 420 205 1 -a 420 855 6 -a 420 699 3 -a 420 156 9 -a 420 3 1 -a 420 913 1 -a 421 316 1 -a 421 679 6 -a 421 946 10 -a 421 736 3 -a 421 986 8 -a 421 748 4 -a 421 348 5 -a 421 396 6 -a 421 643 1 -a 421 323 10 -a 421 294 7 -a 421 962 5 -a 421 149 2 -a 421 123 6 -a 421 504 10 -a 421 406 1 -a 421 324 1 -a 421 745 5 -a 421 196 9 -a 422 913 9 -a 422 116 5 -a 422 352 4 -a 422 675 4 -a 422 59 2 -a 422 556 9 -a 422 506 4 -a 422 757 8 -a 422 711 5 -a 422 508 3 -a 422 646 6 -a 422 2 5 -a 422 162 2 -a 422 567 3 -a 422 738 5 -a 422 124 7 -a 422 291 1 -a 423 61 5 -a 423 519 6 -a 423 933 4 -a 423 384 3 -a 423 812 2 -a 423 871 2 -a 423 532 9 -a 423 935 5 -a 423 350 8 -a 423 526 8 -a 423 316 4 -a 423 673 10 -a 423 247 1 -a 423 511 1 -a 423 562 5 -a 423 362 7 -a 423 862 2 -a 423 212 7 -a 423 421 6 -a 423 394 9 -a 423 717 5 -a 423 153 7 -a 423 80 4 -a 424 200 2 -a 424 798 5 -a 424 82 3 -a 424 362 10 -a 424 341 6 -a 424 819 10 -a 424 485 6 -a 424 631 9 -a 424 879 6 -a 424 539 4 -a 424 238 2 -a 424 790 6 -a 425 385 4 -a 425 770 10 -a 425 700 10 -a 425 735 9 -a 425 271 5 -a 425 383 4 -a 425 517 1 -a 425 502 2 -a 425 944 9 -a 425 879 10 -a 425 340 1 -a 425 132 1 -a 425 275 1 -a 425 733 6 -a 425 848 5 -a 425 427 9 -a 425 812 3 -a 425 24 2 -a 425 201 3 -a 425 893 7 -a 425 385 7 -a 425 541 10 -a 425 687 10 -a 425 869 6 -a 426 147 4 -a 426 542 2 -a 426 847 8 -a 426 685 5 -a 426 779 1 -a 426 612 9 -a 426 46 10 -a 426 524 9 -a 426 288 10 -a 426 780 9 -a 426 795 4 -a 426 279 10 -a 426 138 9 -a 426 287 10 -a 426 780 6 -a 426 58 2 -a 426 141 9 -a 426 95 3 -a 426 189 4 -a 426 415 10 -a 426 827 5 -a 426 12 5 -a 426 842 9 -a 426 615 10 -a 426 35 1 -a 426 18 10 -a 426 483 10 -a 427 419 8 -a 427 558 10 -a 427 146 1 -a 427 263 3 -a 427 704 9 -a 427 687 4 -a 427 85 3 -a 427 364 6 -a 427 441 8 -a 427 697 7 -a 427 409 7 -a 427 965 9 -a 427 984 5 -a 427 164 3 -a 427 735 2 -a 427 238 9 -a 427 302 3 -a 427 359 7 -a 427 138 7 -a 427 88 7 -a 427 547 5 -a 427 552 9 -a 428 914 2 -a 428 558 2 -a 428 369 4 -a 428 504 7 -a 428 593 3 -a 428 386 8 -a 428 987 8 -a 428 943 8 -a 428 108 7 -a 428 250 7 -a 428 622 3 -a 428 794 10 -a 428 334 8 -a 428 986 1 -a 428 210 6 -a 428 6 8 -a 428 370 10 -a 428 150 6 -a 428 989 6 -a 428 534 8 -a 429 884 4 -a 429 202 7 -a 429 835 10 -a 429 881 6 -a 429 195 9 -a 429 169 2 -a 429 282 8 -a 429 715 4 -a 429 545 9 -a 429 171 2 -a 429 248 7 -a 429 914 6 -a 429 675 8 -a 429 840 9 -a 429 275 3 -a 429 637 10 -a 429 827 4 -a 429 194 10 -a 429 744 9 -a 430 52 4 -a 430 815 6 -a 430 513 3 -a 430 385 10 -a 430 776 1 -a 430 722 9 -a 430 391 8 -a 430 122 1 -a 430 872 10 -a 430 355 4 -a 430 655 4 -a 430 731 8 -a 430 557 2 -a 430 465 2 -a 430 587 10 -a 430 751 9 -a 430 633 7 -a 430 580 7 -a 430 8 1 -a 430 323 6 -a 430 101 6 -a 430 178 4 -a 430 570 8 -a 430 852 4 -a 430 386 3 -a 430 264 3 -a 431 464 6 -a 431 188 6 -a 431 457 1 -a 431 183 2 -a 431 239 5 -a 431 248 4 -a 431 695 5 -a 431 623 5 -a 431 393 7 -a 431 120 6 -a 431 240 4 -a 431 344 2 -a 431 774 7 -a 431 970 9 -a 431 900 8 -a 431 214 10 -a 431 533 6 -a 431 626 8 -a 431 846 5 -a 431 88 9 -a 432 633 4 -a 432 144 7 -a 432 188 3 -a 432 810 1 -a 432 714 9 -a 432 177 9 -a 432 638 6 -a 432 75 9 -a 432 441 10 -a 432 77 6 -a 432 262 5 -a 432 897 8 -a 432 260 5 -a 432 500 2 -a 432 120 5 -a 432 954 1 -a 432 98 2 -a 432 119 6 -a 432 322 7 -a 432 87 1 -a 432 238 5 -a 432 561 2 -a 432 430 1 -a 432 507 10 -a 432 305 7 -a 432 201 6 -a 432 15 3 -a 432 930 1 -a 433 23 2 -a 433 102 1 -a 433 538 6 -a 433 166 1 -a 433 290 5 -a 433 323 1 -a 433 879 3 -a 433 466 1 -a 433 960 2 -a 433 953 3 -a 433 906 9 -a 433 13 9 -a 433 190 7 -a 433 779 7 -a 434 272 1 -a 434 689 8 -a 434 898 1 -a 434 201 8 -a 434 787 1 -a 434 523 7 -a 434 873 4 -a 434 230 7 -a 434 59 4 -a 434 278 9 -a 434 217 5 -a 434 565 9 -a 434 582 2 -a 434 417 9 -a 434 579 10 -a 434 487 8 -a 434 439 2 -a 434 681 9 -a 434 605 9 -a 434 970 1 -a 435 322 5 -a 435 459 4 -a 435 411 7 -a 435 258 8 -a 435 388 10 -a 435 293 4 -a 435 270 6 -a 435 577 3 -a 435 47 5 -a 435 541 5 -a 435 242 4 -a 435 944 4 -a 435 741 9 -a 435 4 7 -a 435 936 9 -a 435 239 1 -a 435 876 6 -a 435 141 7 -a 435 298 1 -a 435 129 6 -a 435 357 9 -a 435 862 7 -a 435 710 8 -a 435 773 1 -a 435 417 1 -a 435 172 6 -a 435 188 1 -a 436 73 10 -a 436 171 5 -a 436 792 10 -a 436 18 8 -a 436 492 7 -a 436 226 3 -a 436 428 9 -a 436 749 2 -a 436 613 5 -a 436 720 1 -a 436 166 10 -a 436 766 9 -a 436 534 3 -a 436 407 2 -a 436 686 2 -a 436 251 5 -a 436 410 10 -a 437 597 3 -a 437 489 8 -a 437 261 8 -a 437 737 3 -a 437 786 8 -a 437 389 10 -a 437 69 10 -a 437 624 4 -a 437 74 10 -a 437 841 7 -a 437 16 6 -a 437 245 7 -a 437 4 9 -a 437 88 7 -a 437 415 6 -a 437 795 10 -a 437 105 6 -a 437 906 5 -a 437 532 9 -a 438 631 4 -a 438 609 10 -a 438 228 7 -a 438 624 8 -a 438 774 10 -a 438 993 5 -a 438 134 4 -a 438 156 7 -a 438 654 2 -a 438 384 8 -a 438 565 4 -a 438 226 8 -a 438 872 9 -a 438 825 3 -a 438 962 7 -a 438 634 9 -a 438 189 5 -a 438 6 10 -a 438 233 8 -a 438 262 2 -a 438 847 3 -a 438 248 10 -a 438 506 8 -a 438 850 3 -a 438 335 8 -a 439 920 10 -a 439 621 3 -a 439 439 10 -a 439 802 1 -a 439 617 5 -a 439 970 1 -a 439 408 4 -a 439 201 9 -a 439 173 3 -a 439 7 9 -a 439 975 7 -a 439 142 6 -a 439 140 6 -a 439 106 7 -a 439 795 2 -a 439 523 4 -a 439 671 5 -a 440 371 8 -a 440 471 2 -a 440 958 5 -a 440 660 1 -a 440 964 5 -a 440 212 2 -a 440 921 2 -a 440 786 10 -a 440 459 10 -a 440 403 2 -a 440 611 1 -a 440 793 7 -a 440 298 5 -a 440 207 5 -a 440 207 4 -a 440 75 3 -a 440 823 6 -a 440 152 8 -a 440 482 8 -a 440 325 1 -a 440 489 2 -a 440 974 2 -a 441 466 7 -a 441 628 6 -a 441 55 5 -a 441 236 9 -a 441 127 7 -a 441 725 3 -a 441 232 7 -a 441 497 9 -a 441 172 8 -a 441 166 8 -a 441 476 1 -a 441 831 6 -a 441 105 6 -a 441 687 1 -a 441 727 9 -a 441 890 3 -a 441 121 4 -a 442 105 10 -a 442 476 2 -a 442 913 4 -a 442 403 6 -a 442 683 1 -a 442 95 5 -a 442 477 6 -a 442 481 2 -a 442 246 8 -a 442 959 10 -a 442 480 3 -a 442 570 1 -a 442 423 6 -a 442 429 2 -a 442 11 10 -a 442 26 10 -a 442 484 8 -a 443 247 5 -a 443 152 6 -a 443 184 6 -a 443 478 6 -a 443 648 4 -a 443 355 1 -a 443 643 3 -a 443 99 5 -a 443 161 9 -a 443 747 4 -a 443 785 9 -a 443 888 9 -a 443 612 9 -a 443 905 10 -a 443 992 8 -a 443 64 5 -a 443 793 2 -a 443 370 9 -a 444 746 9 -a 444 887 4 -a 444 847 3 -a 444 202 3 -a 444 109 8 -a 444 781 6 -a 444 682 10 -a 444 678 4 -a 444 179 4 -a 444 86 2 -a 444 689 3 -a 444 204 6 -a 444 569 4 -a 444 935 3 -a 444 356 6 -a 444 753 1 -a 444 388 1 -a 444 83 8 -a 444 7 7 -a 444 78 10 -a 445 244 5 -a 445 753 10 -a 445 862 10 -a 445 107 7 -a 445 341 9 -a 445 743 2 -a 445 74 8 -a 445 404 7 -a 445 511 5 -a 445 444 9 -a 445 125 8 -a 445 374 10 -a 445 266 2 -a 445 326 7 -a 445 482 1 -a 445 22 5 -a 445 135 5 -a 445 200 9 -a 445 69 4 -a 445 823 6 -a 445 403 6 -a 445 637 6 -a 446 733 5 -a 446 758 1 -a 446 365 7 -a 446 97 2 -a 446 737 2 -a 446 448 9 -a 446 103 7 -a 446 814 8 -a 446 691 1 -a 446 855 2 -a 446 651 8 -a 446 797 3 -a 446 171 4 -a 446 369 10 -a 446 870 7 -a 446 574 6 -a 446 880 10 -a 446 289 1 -a 446 698 2 -a 447 229 5 -a 447 554 7 -a 447 710 3 -a 447 575 2 -a 447 844 5 -a 447 774 8 -a 447 50 2 -a 447 643 9 -a 447 153 4 -a 447 687 8 -a 447 351 1 -a 447 910 10 -a 447 27 1 -a 447 447 7 -a 448 622 5 -a 448 474 8 -a 448 549 8 -a 448 411 4 -a 448 140 6 -a 448 380 10 -a 448 38 8 -a 448 936 6 -a 448 550 2 -a 448 406 1 -a 448 782 3 -a 448 100 5 -a 448 261 5 -a 448 46 5 -a 448 797 8 -a 448 489 6 -a 449 600 1 -a 449 796 4 -a 449 174 7 -a 449 150 4 -a 449 778 7 -a 449 924 2 -a 449 827 5 -a 449 636 10 -a 449 52 10 -a 449 489 3 -a 449 986 7 -a 449 961 2 -a 449 516 1 -a 449 409 3 -a 449 559 1 -a 449 989 4 -a 449 957 7 -a 449 969 1 -a 449 105 4 -a 449 312 8 -a 449 16 4 -a 450 862 8 -a 450 388 5 -a 450 797 9 -a 450 961 7 -a 450 648 2 -a 450 843 10 -a 450 733 5 -a 450 113 6 -a 450 418 6 -a 450 505 3 -a 450 286 5 -a 450 567 3 -a 450 258 3 -a 450 279 8 -a 450 466 9 -a 450 60 2 -a 450 914 8 -a 451 517 7 -a 451 549 5 -a 451 876 5 -a 451 454 4 -a 451 40 1 -a 451 260 8 -a 451 4 6 -a 451 192 8 -a 451 956 6 -a 451 108 10 -a 451 504 5 -a 451 938 5 -a 451 124 2 -a 452 341 4 -a 452 301 3 -a 452 920 4 -a 452 277 8 -a 452 948 3 -a 452 738 10 -a 452 36 2 -a 452 131 2 -a 452 489 4 -a 452 322 9 -a 452 698 3 -a 452 746 4 -a 452 600 4 -a 452 139 6 -a 452 806 4 -a 452 490 5 -a 452 656 2 -a 452 330 7 -a 452 341 10 -a 452 85 10 -a 453 369 2 -a 453 600 1 -a 453 72 4 -a 453 372 6 -a 453 791 6 -a 453 3 1 -a 453 480 9 -a 453 270 7 -a 453 940 5 -a 453 603 6 -a 453 610 7 -a 453 216 10 -a 453 498 9 -a 453 886 3 -a 453 140 8 -a 453 212 6 -a 453 871 1 -a 454 175 10 -a 454 342 1 -a 454 335 10 -a 454 496 4 -a 454 15 1 -a 454 57 8 -a 454 72 9 -a 454 154 2 -a 454 862 6 -a 454 561 2 -a 454 809 6 -a 454 167 2 -a 454 901 9 -a 454 893 10 -a 454 535 8 -a 454 476 1 -a 454 964 4 -a 454 906 10 -a 454 242 3 -a 454 966 4 -a 454 361 10 -a 454 512 5 -a 455 882 6 -a 455 963 10 -a 455 97 7 -a 455 73 6 -a 455 437 10 -a 455 983 8 -a 455 212 8 -a 455 648 5 -a 455 829 2 -a 455 387 9 -a 455 989 1 -a 455 139 9 -a 455 882 7 -a 455 195 3 -a 455 953 6 -a 455 133 9 -a 455 32 5 -a 455 489 10 -a 455 941 6 -a 455 198 2 -a 455 365 7 -a 455 809 10 -a 455 732 7 -a 455 840 6 -a 455 748 4 -a 455 614 3 -a 455 58 9 -a 455 689 8 -a 455 974 2 -a 456 569 10 -a 456 546 5 -a 456 913 1 -a 456 665 10 -a 456 619 8 -a 456 325 3 -a 456 623 7 -a 456 830 7 -a 456 972 8 -a 456 427 9 -a 456 192 6 -a 456 936 6 -a 456 566 9 -a 456 50 2 -a 456 915 2 -a 456 760 9 -a 456 23 1 -a 456 792 1 -a 456 467 9 -a 456 963 2 -a 456 989 5 -a 456 831 10 -a 456 747 7 -a 456 697 1 -a 456 647 6 -a 456 470 5 -a 456 286 3 -a 456 704 10 -a 456 135 8 -a 457 235 2 -a 457 248 6 -a 457 680 10 -a 457 123 8 -a 457 912 7 -a 457 274 7 -a 457 447 8 -a 457 511 9 -a 457 80 4 -a 457 394 9 -a 457 937 6 -a 457 271 6 -a 457 306 4 -a 457 478 4 -a 458 320 8 -a 458 196 2 -a 458 214 9 -a 458 298 6 -a 458 219 3 -a 458 764 8 -a 458 157 2 -a 458 969 3 -a 458 570 2 -a 458 904 7 -a 458 641 9 -a 458 192 7 -a 458 349 9 -a 458 926 4 -a 458 895 3 -a 458 483 5 -a 458 137 1 -a 458 118 4 -a 458 139 6 -a 458 259 7 -a 458 6 5 -a 458 412 6 -a 458 706 10 -a 458 516 1 -a 458 491 3 -a 459 75 2 -a 459 428 7 -a 459 762 5 -a 459 380 1 -a 459 906 7 -a 459 57 4 -a 459 576 10 -a 459 95 10 -a 459 354 8 -a 459 794 6 -a 459 75 5 -a 459 93 1 -a 459 950 2 -a 459 19 5 -a 459 663 7 -a 459 829 4 -a 459 660 9 -a 459 854 2 -a 459 154 10 -a 459 561 8 -a 459 725 7 -a 459 636 1 -a 459 697 7 -a 460 842 8 -a 460 774 7 -a 460 956 5 -a 460 847 3 -a 460 162 10 -a 460 637 2 -a 460 338 8 -a 460 652 2 -a 460 711 8 -a 460 766 7 -a 460 389 4 -a 460 67 8 -a 460 647 1 -a 460 446 10 -a 460 642 2 -a 460 741 7 -a 460 799 7 -a 460 411 3 -a 460 815 3 -a 460 892 10 -a 461 336 6 -a 461 833 3 -a 461 530 9 -a 461 141 4 -a 461 468 3 -a 461 359 2 -a 461 294 4 -a 461 5 9 -a 461 59 3 -a 461 929 4 -a 461 701 2 -a 461 901 9 -a 461 679 10 -a 461 632 10 -a 461 723 1 -a 462 840 3 -a 462 244 5 -a 462 37 4 -a 462 467 5 -a 462 955 5 -a 462 802 1 -a 462 856 8 -a 462 424 9 -a 462 277 3 -a 462 638 2 -a 462 140 7 -a 462 51 1 -a 462 24 1 -a 462 954 10 -a 462 942 4 -a 462 359 4 -a 462 762 7 -a 462 447 5 -a 462 499 5 -a 462 206 2 -a 462 806 4 -a 462 792 7 -a 462 210 8 -a 462 864 4 -a 462 697 3 -a 463 910 8 -a 463 740 9 -a 463 351 5 -a 463 518 9 -a 463 439 5 -a 463 166 10 -a 463 761 9 -a 463 475 6 -a 463 632 2 -a 463 691 7 -a 463 252 5 -a 463 463 3 -a 463 687 10 -a 463 675 1 -a 463 739 7 -a 463 300 5 -a 463 814 10 -a 463 790 4 -a 464 323 5 -a 464 743 4 -a 464 707 4 -a 464 682 4 -a 464 480 4 -a 464 130 9 -a 464 156 7 -a 464 685 9 -a 464 935 10 -a 464 948 10 -a 464 894 7 -a 464 774 8 -a 464 620 8 -a 464 780 1 -a 464 490 10 -a 464 970 7 -a 465 273 4 -a 465 928 6 -a 465 111 2 -a 465 9 1 -a 465 378 1 -a 465 742 5 -a 465 700 10 -a 465 629 8 -a 465 181 6 -a 465 362 8 -a 465 279 3 -a 465 919 3 -a 465 662 7 -a 465 68 7 -a 465 684 5 -a 465 984 2 -a 465 810 6 -a 465 367 1 -a 465 641 6 -a 465 265 8 -a 466 496 1 -a 466 797 6 -a 466 950 8 -a 466 406 2 -a 466 720 4 -a 466 819 7 -a 466 155 4 -a 466 315 6 -a 466 574 6 -a 466 644 10 -a 466 260 4 -a 466 846 1 -a 466 547 2 -a 466 370 3 -a 466 855 5 -a 466 924 7 -a 466 87 2 -a 466 530 4 -a 466 528 4 -a 466 267 1 -a 466 891 4 -a 466 806 6 -a 467 162 3 -a 467 528 6 -a 467 873 2 -a 467 845 6 -a 467 488 8 -a 467 658 5 -a 467 187 4 -a 467 104 8 -a 467 923 4 -a 467 682 10 -a 467 900 2 -a 467 848 5 -a 467 63 5 -a 467 595 8 -a 467 642 4 -a 467 218 9 -a 467 909 9 -a 467 192 6 -a 467 861 5 -a 467 144 3 -a 467 13 8 -a 468 384 1 -a 468 513 3 -a 468 867 8 -a 468 283 1 -a 468 600 1 -a 468 372 8 -a 468 811 1 -a 468 866 9 -a 468 239 1 -a 468 592 7 -a 468 3 6 -a 468 766 5 -a 468 441 1 -a 468 848 7 -a 468 229 2 -a 468 74 1 -a 468 10 1 -a 468 333 9 -a 468 996 9 -a 469 692 9 -a 469 208 3 -a 469 819 1 -a 469 754 1 -a 469 803 1 -a 469 437 8 -a 469 971 4 -a 469 687 6 -a 469 628 5 -a 469 808 1 -a 469 831 9 -a 469 640 1 -a 469 167 8 -a 469 319 5 -a 469 483 7 -a 470 449 9 -a 470 918 4 -a 470 854 5 -a 470 235 9 -a 470 760 1 -a 470 68 9 -a 470 827 9 -a 470 762 1 -a 470 834 2 -a 470 243 9 -a 470 585 4 -a 470 38 2 -a 470 316 4 -a 470 595 4 -a 471 370 2 -a 471 288 9 -a 471 262 4 -a 471 578 3 -a 471 82 9 -a 471 356 9 -a 471 518 5 -a 471 962 3 -a 471 18 4 -a 471 121 5 -a 471 745 3 -a 471 848 2 -a 471 761 5 -a 471 911 1 -a 471 143 9 -a 471 219 4 -a 471 335 3 -a 471 36 2 -a 471 48 1 -a 471 570 10 -a 471 795 3 -a 471 116 2 -a 471 372 10 -a 471 533 1 -a 472 949 9 -a 472 614 1 -a 472 93 10 -a 472 986 10 -a 472 929 10 -a 472 687 6 -a 472 332 10 -a 472 192 2 -a 472 948 7 -a 472 909 9 -a 472 274 10 -a 472 939 7 -a 472 240 8 -a 472 791 7 -a 472 876 9 -a 472 257 2 -a 472 912 7 -a 472 596 4 -a 472 81 10 -a 472 648 3 -a 472 482 1 -a 472 223 6 -a 473 866 3 -a 473 816 3 -a 473 258 9 -a 473 913 9 -a 473 361 10 -a 473 29 3 -a 473 4 9 -a 473 732 2 -a 473 561 3 -a 473 952 5 -a 473 321 5 -a 473 653 2 -a 473 914 8 -a 473 226 5 -a 473 316 5 -a 473 221 8 -a 473 417 10 -a 473 239 7 -a 473 105 7 -a 473 690 6 -a 473 153 8 -a 473 344 1 -a 473 457 1 -a 473 4 1 -a 473 600 9 -a 473 344 5 -a 473 599 10 -a 473 680 9 -a 473 991 6 -a 473 56 8 -a 473 902 4 -a 473 832 3 -a 473 872 6 -a 474 136 2 -a 474 720 7 -a 474 208 10 -a 474 164 10 -a 474 724 1 -a 474 940 6 -a 474 724 3 -a 474 651 4 -a 474 236 4 -a 474 352 4 -a 474 540 7 -a 474 461 4 -a 474 667 2 -a 474 760 1 -a 474 878 5 -a 474 906 5 -a 474 864 10 -a 474 543 10 -a 474 34 1 -a 474 183 1 -a 475 999 4 -a 475 38 3 -a 475 783 6 -a 475 318 6 -a 475 636 9 -a 475 438 9 -a 475 284 5 -a 475 692 4 -a 475 316 7 -a 475 91 7 -a 475 539 8 -a 475 451 10 -a 475 811 10 -a 475 746 8 -a 475 614 7 -a 475 510 3 -a 475 661 6 -a 475 313 1 -a 475 136 9 -a 475 897 2 -a 475 664 6 -a 475 676 5 -a 475 333 3 -a 476 307 3 -a 476 411 10 -a 476 186 7 -a 476 188 6 -a 476 251 6 -a 476 729 7 -a 476 221 5 -a 476 433 10 -a 476 703 4 -a 476 258 8 -a 476 191 6 -a 476 894 7 -a 476 629 5 -a 476 280 10 -a 476 561 5 -a 476 944 10 -a 476 371 4 -a 476 75 6 -a 476 370 2 -a 476 157 4 -a 477 820 3 -a 477 983 6 -a 477 666 6 -a 477 457 9 -a 477 271 6 -a 477 801 6 -a 477 329 7 -a 477 934 10 -a 477 452 1 -a 477 661 8 -a 477 216 8 -a 477 863 10 -a 477 847 2 -a 477 403 2 -a 477 89 6 -a 477 551 5 -a 477 624 4 -a 477 521 7 -a 477 229 2 -a 478 881 5 -a 478 712 6 -a 478 225 3 -a 478 750 7 -a 478 316 4 -a 478 505 3 -a 478 286 6 -a 478 235 10 -a 478 875 8 -a 478 360 9 -a 478 604 7 -a 478 7 9 -a 478 156 7 -a 478 562 9 -a 478 672 6 -a 478 612 3 -a 478 832 5 -a 478 448 2 -a 478 940 1 -a 479 741 3 -a 479 900 3 -a 479 576 6 -a 479 957 1 -a 479 738 3 -a 479 398 4 -a 479 335 2 -a 479 826 8 -a 479 948 7 -a 479 958 7 -a 479 322 7 -a 479 153 5 -a 479 815 7 -a 479 9 4 -a 479 377 5 -a 479 540 5 -a 479 324 9 -a 479 881 7 -a 479 826 10 -a 479 558 10 -a 480 731 5 -a 480 161 10 -a 480 137 7 -a 480 737 10 -a 480 316 4 -a 480 698 9 -a 480 384 6 -a 480 927 3 -a 480 505 1 -a 480 832 6 -a 480 842 4 -a 480 222 7 -a 480 707 8 -a 480 394 6 -a 480 154 8 -a 480 420 4 -a 480 791 2 -a 481 488 7 -a 481 221 6 -a 481 715 3 -a 481 422 9 -a 481 542 5 -a 481 867 5 -a 481 212 6 -a 481 551 3 -a 481 219 9 -a 481 751 2 -a 481 874 6 -a 481 76 4 -a 481 552 4 -a 481 408 5 -a 481 806 6 -a 481 713 7 -a 481 544 9 -a 481 519 1 -a 481 4 5 -a 481 218 6 -a 481 902 7 -a 481 931 1 -a 481 722 2 -a 481 709 7 -a 482 748 6 -a 482 943 5 -a 482 391 8 -a 482 117 8 -a 482 72 9 -a 482 810 7 -a 482 908 2 -a 482 560 5 -a 482 6 10 -a 482 598 1 -a 482 981 10 -a 482 548 9 -a 482 440 8 -a 482 168 2 -a 482 74 9 -a 482 658 1 -a 482 918 2 -a 482 947 3 -a 482 733 6 -a 482 446 8 -a 482 330 1 -a 482 515 8 -a 482 134 8 -a 482 874 5 -a 482 9 9 -a 482 137 3 -a 482 67 1 -a 482 910 2 -a 482 43 2 -a 482 788 3 -a 483 595 3 -a 483 791 3 -a 483 707 10 -a 483 985 5 -a 483 907 8 -a 483 778 6 -a 483 771 5 -a 483 790 8 -a 483 313 2 -a 483 776 1 -a 483 363 1 -a 483 269 2 -a 483 299 8 -a 483 802 4 -a 483 436 8 -a 483 372 7 -a 483 436 6 -a 483 330 8 -a 483 295 9 -a 483 144 3 -a 483 775 4 -a 483 624 5 -a 483 658 9 -a 483 908 1 -a 483 473 7 -a 483 666 2 -a 483 20 9 -a 483 539 7 -a 484 552 4 -a 484 63 4 -a 484 303 7 -a 484 122 3 -a 484 853 8 -a 484 82 5 -a 484 735 9 -a 484 762 7 -a 484 852 8 -a 484 501 4 -a 484 51 1 -a 484 604 4 -a 484 863 10 -a 484 319 2 -a 484 902 1 -a 485 641 7 -a 485 755 7 -a 485 250 7 -a 485 52 3 -a 485 60 4 -a 485 544 1 -a 485 195 6 -a 485 834 7 -a 485 143 4 -a 485 853 1 -a 485 717 4 -a 485 616 8 -a 485 494 8 -a 485 736 7 -a 485 130 8 -a 485 21 8 -a 486 798 2 -a 486 432 2 -a 486 142 9 -a 486 626 2 -a 486 416 3 -a 486 224 4 -a 486 337 6 -a 486 154 9 -a 486 51 4 -a 486 837 3 -a 486 204 4 -a 486 654 6 -a 486 675 10 -a 486 522 3 -a 486 532 10 -a 486 291 1 -a 486 252 10 -a 486 781 2 -a 486 342 5 -a 486 311 9 -a 486 300 3 -a 486 537 4 -a 486 120 5 -a 486 442 2 -a 486 365 7 -a 486 836 8 -a 486 33 7 -a 486 858 3 -a 486 548 5 -a 486 163 10 -a 487 879 5 -a 487 321 9 -a 487 594 6 -a 487 947 4 -a 487 219 1 -a 487 259 7 -a 487 139 1 -a 487 270 1 -a 487 71 9 -a 487 342 3 -a 487 923 2 -a 487 745 8 -a 487 863 3 -a 487 430 7 -a 487 12 9 -a 487 91 6 -a 487 186 3 -a 487 353 4 -a 487 401 1 -a 487 485 1 -a 487 889 5 -a 487 521 9 -a 487 927 2 -a 487 229 8 -a 487 332 4 -a 487 959 9 -a 487 63 10 -a 488 879 4 -a 488 97 10 -a 488 941 3 -a 488 176 3 -a 488 691 1 -a 488 936 2 -a 488 98 6 -a 488 676 4 -a 488 131 4 -a 488 356 4 -a 488 814 3 -a 488 400 10 -a 488 426 7 -a 488 131 10 -a 488 298 3 -a 488 146 8 -a 488 993 5 -a 488 728 5 -a 488 157 4 -a 488 59 4 -a 488 913 2 -a 488 510 3 -a 488 460 1 -a 488 374 1 -a 488 374 2 -a 488 980 7 -a 489 276 10 -a 489 603 6 -a 489 287 10 -a 489 210 2 -a 489 665 7 -a 489 142 2 -a 489 307 5 -a 489 581 6 -a 489 317 9 -a 489 997 1 -a 489 492 3 -a 489 414 6 -a 489 648 5 -a 489 622 4 -a 489 769 2 -a 489 437 5 -a 489 170 10 -a 489 567 8 -a 489 295 4 -a 489 315 7 -a 489 535 2 -a 489 472 3 -a 490 594 7 -a 490 910 8 -a 490 981 4 -a 490 29 6 -a 490 259 3 -a 490 330 1 -a 490 534 9 -a 490 932 8 -a 490 270 7 -a 490 744 9 -a 490 572 2 -a 490 411 7 -a 490 26 6 -a 490 128 10 -a 490 727 8 -a 490 620 7 -a 490 116 2 -a 490 645 2 -a 490 217 6 -a 490 884 3 -a 491 57 1 -a 491 214 8 -a 491 29 10 -a 491 623 8 -a 491 508 7 -a 491 344 10 -a 491 133 8 -a 491 505 6 -a 491 815 3 -a 491 726 5 -a 491 390 6 -a 491 771 5 -a 491 754 9 -a 492 649 2 -a 492 76 1 -a 492 737 1 -a 492 158 6 -a 492 901 1 -a 492 555 9 -a 492 393 9 -a 492 926 8 -a 492 683 7 -a 492 96 3 -a 492 923 2 -a 492 278 9 -a 492 211 2 -a 492 543 7 -a 492 494 5 -a 492 71 4 -a 492 599 2 -a 492 707 2 -a 492 99 10 -a 493 197 1 -a 493 190 9 -a 493 442 1 -a 493 330 10 -a 493 694 9 -a 493 232 6 -a 493 31 9 -a 493 60 9 -a 493 785 2 -a 493 708 1 -a 493 54 1 -a 493 497 9 -a 493 865 8 -a 493 37 3 -a 493 479 5 -a 493 742 3 -a 493 591 4 -a 493 872 3 -a 493 643 2 -a 494 249 6 -a 494 967 1 -a 494 542 4 -a 494 526 1 -a 494 153 1 -a 494 60 7 -a 494 223 1 -a 494 659 10 -a 494 702 6 -a 494 322 3 -a 494 855 8 -a 494 892 8 -a 494 763 3 -a 494 160 8 -a 494 561 10 -a 494 995 10 -a 494 191 9 -a 494 620 8 -a 494 972 10 -a 494 975 6 -a 494 303 7 -a 494 1 2 -a 494 447 10 -a 495 144 1 -a 495 37 10 -a 495 926 7 -a 495 885 4 -a 495 628 6 -a 495 773 4 -a 495 503 6 -a 495 876 8 -a 495 715 4 -a 495 20 2 -a 495 378 4 -a 495 867 6 -a 495 80 9 -a 495 373 6 -a 495 66 2 -a 495 738 6 -a 495 50 3 -a 495 387 9 -a 495 568 7 -a 495 941 2 -a 495 125 7 -a 495 728 3 -a 495 478 4 -a 496 95 9 -a 496 918 2 -a 496 73 3 -a 496 43 7 -a 496 868 5 -a 496 376 6 -a 496 43 6 -a 496 290 2 -a 496 519 3 -a 496 80 4 -a 496 191 10 -a 496 379 1 -a 496 707 9 -a 496 963 8 -a 496 881 3 -a 496 558 6 -a 496 653 1 -a 496 901 9 -a 496 935 10 -a 496 496 3 -a 496 980 2 -a 496 283 9 -a 496 561 3 -a 497 693 8 -a 497 333 4 -a 497 947 6 -a 497 236 8 -a 497 249 6 -a 497 47 9 -a 497 963 5 -a 497 726 1 -a 497 142 2 -a 497 856 2 -a 497 799 8 -a 497 184 4 -a 497 699 9 -a 497 150 1 -a 497 226 4 -a 497 989 3 -a 497 668 10 -a 497 305 1 -a 497 155 7 -a 497 22 1 -a 498 94 9 -a 498 902 9 -a 498 545 8 -a 498 746 6 -a 498 778 2 -a 498 455 5 -a 498 217 2 -a 498 733 2 -a 498 738 7 -a 498 777 1 -a 498 401 8 -a 498 46 9 -a 498 699 1 -a 498 637 7 -a 498 294 3 -a 498 746 9 -a 498 575 4 -a 498 887 9 -a 498 407 1 -a 498 794 8 -a 498 46 4 -a 499 81 7 -a 499 943 8 -a 499 271 10 -a 499 45 2 -a 499 586 4 -a 499 576 7 -a 499 200 3 -a 499 607 9 -a 499 562 8 -a 499 293 4 -a 499 484 8 -a 499 82 1 -a 499 14 6 -a 499 238 1 -a 499 537 2 -a 499 231 9 -a 499 970 1 -a 499 250 5 -a 500 347 7 -a 500 295 2 -a 500 682 10 -a 500 983 8 -a 500 588 4 -a 500 403 3 -a 500 533 10 -a 500 583 8 -a 500 265 9 -a 500 939 8 -a 500 352 3 -a 500 310 7 -a 500 270 1 -a 500 580 9 -a 500 40 9 -a 500 855 7 -a 500 131 10 -a 500 239 5 -a 501 437 5 -a 501 693 2 -a 501 531 4 -a 501 921 8 -a 501 774 2 -a 501 545 7 -a 501 134 1 -a 501 286 9 -a 501 775 8 -a 501 79 5 -a 501 535 6 -a 501 757 7 -a 501 425 5 -a 501 829 4 -a 501 414 3 -a 501 383 2 -a 501 393 10 -a 502 816 10 -a 502 916 10 -a 502 975 10 -a 502 56 1 -a 502 830 4 -a 502 303 1 -a 502 365 6 -a 502 825 2 -a 502 572 7 -a 502 945 1 -a 502 865 5 -a 502 403 1 -a 502 51 7 -a 503 79 1 -a 503 839 4 -a 503 743 9 -a 503 610 9 -a 503 735 8 -a 503 493 2 -a 503 130 10 -a 503 868 2 -a 503 778 6 -a 503 904 3 -a 503 947 2 -a 503 289 8 -a 503 636 3 -a 503 347 7 -a 503 93 4 -a 503 26 3 -a 503 730 4 -a 503 485 7 -a 503 841 10 -a 503 621 7 -a 503 436 7 -a 503 897 5 -a 503 426 3 -a 504 738 2 -a 504 237 8 -a 504 227 10 -a 504 285 2 -a 504 157 3 -a 504 67 4 -a 504 687 6 -a 504 208 2 -a 504 145 2 -a 504 502 3 -a 504 950 9 -a 504 754 5 -a 504 212 1 -a 504 418 7 -a 504 883 9 -a 504 56 9 -a 504 172 4 -a 504 762 1 -a 504 460 5 -a 504 374 7 -a 504 324 7 -a 504 552 2 -a 504 399 1 -a 504 29 1 -a 504 13 7 -a 504 215 1 -a 504 649 2 -a 504 448 6 -a 505 87 2 -a 505 51 4 -a 505 161 8 -a 505 324 6 -a 505 277 5 -a 505 445 4 -a 505 480 2 -a 505 343 9 -a 505 108 3 -a 505 687 7 -a 505 487 1 -a 505 609 7 -a 505 613 8 -a 505 217 4 -a 505 820 8 -a 505 6 10 -a 505 75 9 -a 506 875 9 -a 506 177 3 -a 506 837 6 -a 506 852 9 -a 506 636 9 -a 506 186 4 -a 506 152 4 -a 506 164 8 -a 506 584 9 -a 506 180 9 -a 506 176 1 -a 506 798 10 -a 506 829 7 -a 506 623 10 -a 506 885 8 -a 506 879 4 -a 506 783 1 -a 506 184 2 -a 506 131 1 -a 506 203 8 -a 506 663 5 -a 506 473 7 -a 506 310 7 -a 507 326 5 -a 507 959 6 -a 507 918 10 -a 507 938 2 -a 507 151 2 -a 507 714 9 -a 507 943 6 -a 507 226 10 -a 507 564 1 -a 507 96 6 -a 507 38 3 -a 507 392 3 -a 507 731 5 -a 507 223 3 -a 507 543 4 -a 507 894 1 -a 507 806 7 -a 508 722 1 -a 508 45 8 -a 508 579 7 -a 508 526 1 -a 508 667 5 -a 508 439 4 -a 508 380 2 -a 508 425 3 -a 508 622 5 -a 508 510 4 -a 508 628 8 -a 508 261 9 -a 508 982 10 -a 508 937 9 -a 508 586 5 -a 508 917 5 -a 508 831 4 -a 508 499 1 -a 508 43 4 -a 508 520 3 -a 508 417 7 -a 508 268 4 -a 508 59 5 -a 508 512 8 -a 508 305 4 -a 508 450 1 -a 508 219 6 -a 508 527 6 -a 508 992 10 -a 508 88 4 -a 508 308 2 -a 508 690 5 -a 509 133 4 -a 509 887 7 -a 509 191 10 -a 509 799 8 -a 509 301 2 -a 509 571 8 -a 509 200 7 -a 509 923 2 -a 509 56 8 -a 509 827 1 -a 509 159 2 -a 509 14 4 -a 509 739 9 -a 509 744 6 -a 509 930 2 -a 509 545 2 -a 510 218 6 -a 510 972 6 -a 510 40 9 -a 510 634 7 -a 510 216 8 -a 510 99 8 -a 510 122 7 -a 510 520 2 -a 510 548 5 -a 510 340 1 -a 510 23 6 -a 510 516 6 -a 510 427 6 -a 510 330 8 -a 510 181 7 -a 510 559 9 -a 510 192 3 -a 510 371 3 -a 511 334 1 -a 511 493 2 -a 511 941 8 -a 511 533 3 -a 511 391 9 -a 511 997 1 -a 511 335 3 -a 511 549 9 -a 511 49 9 -a 511 268 9 -a 511 915 8 -a 511 594 6 -a 511 485 2 -a 511 862 1 -a 511 633 10 -a 511 94 3 -a 511 53 4 -a 512 731 5 -a 512 215 8 -a 512 573 10 -a 512 255 10 -a 512 554 3 -a 512 595 10 -a 512 770 10 -a 512 981 8 -a 512 924 3 -a 512 950 8 -a 512 515 4 -a 512 92 7 -a 512 296 10 -a 512 848 10 -a 512 584 6 -a 512 213 8 -a 512 356 5 -a 513 974 9 -a 513 185 5 -a 513 690 4 -a 513 498 6 -a 513 170 4 -a 513 739 9 -a 513 765 1 -a 513 60 6 -a 513 308 6 -a 513 225 5 -a 513 921 2 -a 513 940 8 -a 513 318 6 -a 513 974 2 -a 513 647 2 -a 513 533 4 -a 513 522 2 -a 513 901 10 -a 514 62 6 -a 514 92 8 -a 514 646 5 -a 514 18 8 -a 514 571 4 -a 514 533 10 -a 514 82 6 -a 514 866 7 -a 514 356 2 -a 514 665 6 -a 514 54 3 -a 514 712 7 -a 514 614 9 -a 514 238 2 -a 514 377 6 -a 514 87 7 -a 514 407 2 -a 514 91 7 -a 514 851 6 -a 514 466 3 -a 515 398 2 -a 515 51 5 -a 515 363 10 -a 515 314 10 -a 515 369 2 -a 515 312 8 -a 515 960 6 -a 515 901 7 -a 515 833 2 -a 515 836 8 -a 515 962 1 -a 515 924 5 -a 515 457 1 -a 515 980 8 -a 515 914 2 -a 515 3 8 -a 515 488 3 -a 515 996 9 -a 515 868 5 -a 515 843 8 -a 515 636 9 -a 515 922 9 -a 515 530 1 -a 515 226 3 -a 516 135 10 -a 516 907 10 -a 516 312 7 -a 516 542 5 -a 516 997 5 -a 516 139 7 -a 516 371 4 -a 516 189 1 -a 516 345 7 -a 516 684 8 -a 516 557 1 -a 516 656 2 -a 516 619 4 -a 516 433 8 -a 517 464 6 -a 517 430 5 -a 517 371 7 -a 517 363 2 -a 517 886 3 -a 517 326 10 -a 517 253 5 -a 517 888 4 -a 517 813 10 -a 517 224 1 -a 517 731 3 -a 517 631 7 -a 517 859 9 -a 517 628 10 -a 517 137 3 -a 517 60 9 -a 518 763 2 -a 518 19 6 -a 518 372 7 -a 518 280 9 -a 518 510 5 -a 518 262 8 -a 518 361 6 -a 518 698 9 -a 518 607 9 -a 518 20 5 -a 518 231 10 -a 518 238 2 -a 518 638 5 -a 518 663 8 -a 518 702 4 -a 518 43 5 -a 518 9 2 -a 518 40 3 -a 518 928 8 -a 518 334 1 -a 519 292 10 -a 519 791 2 -a 519 122 5 -a 519 515 2 -a 519 498 1 -a 519 753 8 -a 519 350 4 -a 519 101 4 -a 519 889 8 -a 519 409 8 -a 520 863 9 -a 520 907 9 -a 520 780 1 -a 520 118 2 -a 520 897 2 -a 520 265 5 -a 520 380 2 -a 520 234 4 -a 520 963 9 -a 520 986 1 -a 520 253 5 -a 520 169 7 -a 520 199 4 -a 520 891 7 -a 520 831 9 -a 520 900 2 -a 520 933 4 -a 520 840 4 -a 520 940 7 -a 520 837 4 -a 520 149 1 -a 520 207 8 -a 520 603 9 -a 520 271 2 -a 520 722 2 -a 520 76 2 -a 521 47 8 -a 521 177 7 -a 521 887 7 -a 521 455 2 -a 521 15 10 -a 521 769 5 -a 521 211 8 -a 521 133 7 -a 521 641 6 -a 521 475 3 -a 521 512 9 -a 521 874 7 -a 521 413 6 -a 521 473 5 -a 521 103 1 -a 521 581 9 -a 521 671 9 -a 521 993 9 -a 521 388 5 -a 521 547 2 -a 522 901 3 -a 522 203 7 -a 522 462 2 -a 522 713 1 -a 522 351 6 -a 522 668 1 -a 522 292 3 -a 522 621 5 -a 522 365 2 -a 522 367 8 -a 522 619 6 -a 523 411 9 -a 523 543 10 -a 523 481 5 -a 523 866 3 -a 523 558 1 -a 523 225 5 -a 523 52 1 -a 523 690 6 -a 523 866 2 -a 523 526 2 -a 523 177 2 -a 523 715 1 -a 523 939 3 -a 523 649 7 -a 523 817 2 -a 523 495 3 -a 523 295 2 -a 523 785 3 -a 523 882 8 -a 523 841 3 -a 523 662 9 -a 523 60 4 -a 524 278 4 -a 524 350 10 -a 524 411 5 -a 524 946 4 -a 524 641 7 -a 524 7 3 -a 524 286 6 -a 524 626 5 -a 524 697 6 -a 524 526 1 -a 524 82 6 -a 524 538 9 -a 524 59 2 -a 524 307 9 -a 524 589 5 -a 524 748 5 -a 524 148 3 -a 524 90 3 -a 524 924 5 -a 524 862 1 -a 525 4 9 -a 525 548 8 -a 525 655 5 -a 525 499 6 -a 525 843 2 -a 525 415 2 -a 525 356 2 -a 525 659 5 -a 525 52 3 -a 525 416 5 -a 525 937 9 -a 525 402 6 -a 525 826 10 -a 525 858 5 -a 525 18 8 -a 525 832 8 -a 525 119 4 -a 525 1 8 -a 525 433 7 -a 525 815 3 -a 526 527 2 -a 526 515 6 -a 526 328 9 -a 526 585 7 -a 526 821 5 -a 526 916 2 -a 526 309 4 -a 526 968 6 -a 526 208 8 -a 526 805 8 -a 526 756 2 -a 526 435 1 -a 526 483 7 -a 526 574 6 -a 526 850 1 -a 526 839 10 -a 526 208 1 -a 526 901 6 -a 526 230 9 -a 526 120 5 -a 526 278 5 -a 527 31 3 -a 527 977 5 -a 527 296 9 -a 527 862 2 -a 527 72 6 -a 527 296 8 -a 527 271 3 -a 527 886 4 -a 527 822 4 -a 527 785 4 -a 527 190 6 -a 527 383 3 -a 527 581 9 -a 528 81 6 -a 528 691 2 -a 528 524 3 -a 528 62 10 -a 528 898 3 -a 528 304 8 -a 528 47 9 -a 528 629 4 -a 528 739 3 -a 528 529 5 -a 528 178 8 -a 528 564 10 -a 528 343 2 -a 528 386 5 -a 528 440 6 -a 528 572 3 -a 528 505 6 -a 528 718 5 -a 529 602 9 -a 529 458 8 -a 529 440 1 -a 529 529 10 -a 529 284 4 -a 529 710 6 -a 529 390 9 -a 529 82 6 -a 529 470 8 -a 529 579 2 -a 529 464 8 -a 529 26 10 -a 529 660 2 -a 529 130 3 -a 529 549 6 -a 529 721 2 -a 529 3 4 -a 529 852 4 -a 530 767 8 -a 530 632 3 -a 530 566 10 -a 530 272 2 -a 530 809 5 -a 530 105 9 -a 530 614 7 -a 530 170 5 -a 530 545 3 -a 530 162 10 -a 530 675 1 -a 530 238 7 -a 530 763 6 -a 530 108 8 -a 530 226 2 -a 530 178 2 -a 530 636 4 -a 530 509 5 -a 531 887 7 -a 531 1 7 -a 531 590 4 -a 531 332 8 -a 531 580 5 -a 531 29 6 -a 531 357 1 -a 531 215 6 -a 531 158 1 -a 531 905 5 -a 531 935 8 -a 531 161 9 -a 531 733 1 -a 531 678 2 -a 531 792 2 -a 531 274 1 -a 531 949 3 -a 532 576 6 -a 532 379 7 -a 532 538 2 -a 532 746 4 -a 532 923 10 -a 532 699 7 -a 532 396 5 -a 532 136 3 -a 532 438 5 -a 532 503 3 -a 532 361 5 -a 532 615 6 -a 532 114 8 -a 532 869 3 -a 532 478 3 -a 532 114 2 -a 532 435 4 -a 532 809 3 -a 532 693 4 -a 532 463 5 -a 532 142 1 -a 533 907 8 -a 533 621 9 -a 533 22 10 -a 533 818 8 -a 533 781 10 -a 533 754 3 -a 533 471 10 -a 533 548 9 -a 533 4 5 -a 533 395 9 -a 533 99 7 -a 533 382 3 -a 533 932 2 -a 533 844 9 -a 533 280 2 -a 533 607 1 -a 533 215 6 -a 533 415 5 -a 533 20 5 -a 534 717 3 -a 534 775 5 -a 534 634 3 -a 534 830 4 -a 534 619 10 -a 534 87 9 -a 534 944 1 -a 534 29 7 -a 534 896 10 -a 534 612 4 -a 534 492 1 -a 534 13 5 -a 534 495 2 -a 534 88 3 -a 534 34 8 -a 534 288 8 -a 534 868 3 -a 534 788 5 -a 534 758 8 -a 534 391 10 -a 534 791 4 -a 534 128 10 -a 534 489 6 -a 534 148 9 -a 535 35 10 -a 535 309 5 -a 535 427 9 -a 535 641 5 -a 535 523 8 -a 535 841 9 -a 535 660 3 -a 535 216 7 -a 535 591 1 -a 535 270 6 -a 535 21 7 -a 535 185 8 -a 535 356 1 -a 535 964 10 -a 535 214 1 -a 535 227 10 -a 535 552 5 -a 535 705 1 -a 535 239 8 -a 535 22 7 -a 536 792 5 -a 536 273 8 -a 536 309 10 -a 536 635 10 -a 536 36 6 -a 536 42 10 -a 536 1 2 -a 536 826 1 -a 536 169 8 -a 536 489 6 -a 536 973 4 -a 536 203 6 -a 536 797 10 -a 537 375 3 -a 537 844 4 -a 537 296 10 -a 537 191 10 -a 537 479 10 -a 537 511 9 -a 537 781 5 -a 537 748 7 -a 537 531 10 -a 537 965 5 -a 537 80 4 -a 537 471 9 -a 537 154 5 -a 537 306 10 -a 537 858 10 -a 537 545 6 -a 537 19 4 -a 537 625 9 -a 537 817 9 -a 537 327 3 -a 537 235 2 -a 537 852 6 -a 537 368 8 -a 537 235 9 -a 537 653 4 -a 537 536 5 -a 537 724 2 -a 537 601 2 -a 537 738 3 -a 538 496 1 -a 538 975 3 -a 538 557 10 -a 538 791 1 -a 538 141 2 -a 538 12 10 -a 538 277 5 -a 538 921 6 -a 538 759 1 -a 538 808 6 -a 538 861 4 -a 538 838 7 -a 538 254 1 -a 539 120 6 -a 539 251 10 -a 539 848 10 -a 539 664 9 -a 539 269 9 -a 539 449 10 -a 539 456 8 -a 539 595 7 -a 539 683 4 -a 539 283 2 -a 539 962 8 -a 539 918 2 -a 539 935 5 -a 539 473 8 -a 539 617 4 -a 539 511 1 -a 539 186 4 -a 540 88 1 -a 540 461 1 -a 540 743 2 -a 540 879 7 -a 540 601 5 -a 540 754 6 -a 540 131 7 -a 540 497 9 -a 540 488 3 -a 540 938 1 -a 540 333 5 -a 540 302 7 -a 540 167 6 -a 540 323 1 -a 541 421 10 -a 541 417 6 -a 541 147 4 -a 541 60 10 -a 541 685 7 -a 541 595 8 -a 541 515 10 -a 541 255 3 -a 541 253 4 -a 541 797 9 -a 541 192 4 -a 541 146 6 -a 541 707 8 -a 541 664 10 -a 541 762 10 -a 541 193 9 -a 541 850 7 -a 541 850 1 -a 541 653 9 -a 541 568 1 -a 541 704 5 -a 542 229 8 -a 542 297 5 -a 542 834 6 -a 542 725 6 -a 542 784 5 -a 542 748 9 -a 542 33 8 -a 542 61 1 -a 542 914 2 -a 542 356 4 -a 542 481 3 -a 542 307 10 -a 542 502 7 -a 542 540 8 -a 542 991 1 -a 542 72 2 -a 542 30 10 -a 542 222 3 -a 543 324 10 -a 543 826 10 -a 543 413 10 -a 543 470 9 -a 543 508 1 -a 543 53 4 -a 543 207 6 -a 543 700 8 -a 543 902 1 -a 543 32 4 -a 543 328 1 -a 543 445 5 -a 543 735 4 -a 543 556 2 -a 543 741 10 -a 543 545 9 -a 543 256 9 -a 543 500 10 -a 543 268 10 -a 543 289 8 -a 543 561 3 -a 543 157 5 -a 543 644 7 -a 543 17 6 -a 543 463 6 -a 544 121 7 -a 544 557 6 -a 544 430 9 -a 544 192 4 -a 544 586 4 -a 544 651 8 -a 544 515 6 -a 544 388 9 -a 544 39 8 -a 544 984 3 -a 544 895 2 -a 544 91 1 -a 544 167 9 -a 544 571 4 -a 544 992 8 -a 544 198 4 -a 544 898 3 -a 544 412 1 -a 545 933 10 -a 545 430 4 -a 545 128 5 -a 545 453 4 -a 545 685 10 -a 545 628 7 -a 545 720 7 -a 545 973 10 -a 545 164 6 -a 545 876 3 -a 545 592 3 -a 545 180 6 -a 545 315 4 -a 545 712 2 -a 545 736 9 -a 545 744 8 -a 546 903 7 -a 546 298 2 -a 546 370 2 -a 546 394 9 -a 546 685 2 -a 546 408 4 -a 546 353 6 -a 546 555 9 -a 546 499 7 -a 546 519 9 -a 546 101 2 -a 546 466 2 -a 546 717 4 -a 546 999 4 -a 546 878 7 -a 546 625 5 -a 547 404 2 -a 547 53 10 -a 547 64 10 -a 547 608 8 -a 547 772 3 -a 547 13 10 -a 547 771 4 -a 547 623 2 -a 547 604 3 -a 547 951 10 -a 547 937 2 -a 547 292 8 -a 547 662 8 -a 547 656 3 -a 547 170 10 -a 547 959 1 -a 547 1 4 -a 547 563 4 -a 548 619 7 -a 548 409 8 -a 548 916 5 -a 548 150 1 -a 548 907 5 -a 548 410 8 -a 548 250 7 -a 548 348 9 -a 548 102 1 -a 548 224 2 -a 548 201 5 -a 548 726 5 -a 548 627 6 -a 548 182 7 -a 548 778 6 -a 548 691 6 -a 548 789 10 -a 548 525 8 -a 548 703 7 -a 548 536 9 -a 548 124 9 -a 548 282 3 -a 549 462 5 -a 549 36 6 -a 549 573 4 -a 549 99 8 -a 549 692 8 -a 549 743 3 -a 549 34 4 -a 549 692 4 -a 549 281 8 -a 549 652 9 -a 549 76 10 -a 549 172 7 -a 549 801 3 -a 549 982 5 -a 549 582 4 -a 550 27 6 -a 550 306 6 -a 550 683 9 -a 550 250 7 -a 550 506 6 -a 550 385 10 -a 550 877 8 -a 550 687 1 -a 550 138 1 -a 550 543 3 -a 550 452 6 -a 550 663 3 -a 550 221 10 -a 550 987 5 -a 550 786 2 -a 550 502 10 -a 550 424 7 -a 550 821 2 -a 550 51 10 -a 550 522 7 -a 550 488 2 -a 550 793 7 -a 550 555 10 -a 551 156 4 -a 551 49 7 -a 551 183 2 -a 551 231 9 -a 551 221 10 -a 551 983 7 -a 551 189 10 -a 551 802 6 -a 551 494 6 -a 551 460 1 -a 551 235 6 -a 551 999 6 -a 551 844 2 -a 551 87 2 -a 551 662 8 -a 551 982 1 -a 551 629 2 -a 551 89 3 -a 551 620 7 -a 552 849 8 -a 552 51 6 -a 552 381 6 -a 552 326 7 -a 552 474 7 -a 552 177 7 -a 552 376 2 -a 552 995 1 -a 552 665 3 -a 552 144 1 -a 552 526 9 -a 552 820 1 -a 552 193 10 -a 552 708 9 -a 552 26 2 -a 552 413 5 -a 552 666 6 -a 552 214 1 -a 552 190 4 -a 552 651 6 -a 552 707 1 -a 552 649 1 -a 552 885 8 -a 553 682 9 -a 553 469 4 -a 553 971 3 -a 553 319 5 -a 553 426 6 -a 553 575 8 -a 553 407 5 -a 553 21 2 -a 553 399 1 -a 553 457 6 -a 553 401 9 -a 553 724 10 -a 553 930 5 -a 553 577 1 -a 553 76 4 -a 553 900 6 -a 554 217 1 -a 554 219 3 -a 554 401 8 -a 554 12 8 -a 554 411 7 -a 554 84 6 -a 554 38 9 -a 554 823 1 -a 554 750 5 -a 554 251 5 -a 554 376 9 -a 554 958 5 -a 554 637 9 -a 554 236 10 -a 554 615 5 -a 554 81 6 -a 554 182 8 -a 554 933 4 -a 554 506 9 -a 554 756 5 -a 555 315 4 -a 555 526 6 -a 555 130 8 -a 555 771 8 -a 555 926 4 -a 555 853 5 -a 555 676 2 -a 555 478 8 -a 555 928 10 -a 555 551 9 -a 555 695 7 -a 555 123 5 -a 555 952 9 -a 555 706 4 -a 555 533 8 -a 555 11 5 -a 555 743 2 -a 555 332 7 -a 555 760 3 -a 555 994 10 -a 555 319 2 -a 555 111 2 -a 555 927 9 -a 555 955 9 -a 555 346 9 -a 556 517 4 -a 556 11 8 -a 556 527 1 -a 556 425 6 -a 556 516 2 -a 556 258 10 -a 556 739 6 -a 556 17 2 -a 556 387 6 -a 556 485 7 -a 556 942 6 -a 556 216 9 -a 556 136 5 -a 556 396 5 -a 557 119 8 -a 557 686 6 -a 557 66 7 -a 557 241 9 -a 557 613 3 -a 557 771 1 -a 557 774 6 -a 557 624 4 -a 557 490 6 -a 557 81 6 -a 557 359 1 -a 557 459 2 -a 557 399 6 -a 557 470 6 -a 557 361 10 -a 557 330 3 -a 557 815 1 -a 557 877 7 -a 557 340 7 -a 557 318 8 -a 557 277 10 -a 557 856 3 -a 557 575 4 -a 557 872 7 -a 557 962 10 -a 557 475 7 -a 558 790 10 -a 558 153 8 -a 558 610 3 -a 558 161 8 -a 558 271 9 -a 558 271 2 -a 558 226 2 -a 558 512 8 -a 558 884 4 -a 558 996 8 -a 558 261 4 -a 558 483 7 -a 558 461 8 -a 558 341 6 -a 558 841 7 -a 558 919 1 -a 558 739 10 -a 558 286 8 -a 558 255 3 -a 558 44 7 -a 558 77 1 -a 558 107 2 -a 559 384 9 -a 559 394 5 -a 559 383 10 -a 559 215 8 -a 559 968 9 -a 559 373 3 -a 559 62 4 -a 559 905 5 -a 559 847 9 -a 559 851 4 -a 559 33 4 -a 559 432 3 -a 559 304 1 -a 559 703 5 -a 559 212 9 -a 559 815 7 -a 560 562 8 -a 560 184 7 -a 560 51 4 -a 560 20 1 -a 560 644 10 -a 560 391 2 -a 560 860 10 -a 560 539 7 -a 560 105 7 -a 560 122 8 -a 560 793 2 -a 560 149 4 -a 560 198 5 -a 560 900 3 -a 560 532 8 -a 560 591 8 -a 560 258 3 -a 560 746 6 -a 560 534 2 -a 560 631 5 -a 560 807 1 -a 560 415 4 -a 560 453 10 -a 560 634 3 -a 560 447 1 -a 560 885 3 -a 561 620 1 -a 561 750 3 -a 561 563 4 -a 561 832 7 -a 561 540 6 -a 561 100 1 -a 561 590 1 -a 561 119 3 -a 561 634 2 -a 561 980 7 -a 561 978 2 -a 561 148 10 -a 561 61 6 -a 561 75 5 -a 561 941 9 -a 561 209 8 -a 561 272 4 -a 561 816 9 -a 561 740 4 -a 561 862 6 -a 561 49 8 -a 561 461 1 -a 562 372 3 -a 562 679 7 -a 562 243 5 -a 562 786 10 -a 562 108 5 -a 562 876 5 -a 562 208 10 -a 562 992 8 -a 562 472 6 -a 562 958 7 -a 562 530 7 -a 562 279 3 -a 562 473 8 -a 562 629 6 -a 562 269 2 -a 562 39 3 -a 562 747 5 -a 562 902 10 -a 562 700 6 -a 562 26 4 -a 563 54 10 -a 563 775 3 -a 563 966 1 -a 563 262 3 -a 563 22 2 -a 563 757 7 -a 563 884 2 -a 563 805 1 -a 563 437 6 -a 563 231 5 -a 563 460 4 -a 563 680 10 -a 564 567 1 -a 564 531 10 -a 564 199 1 -a 564 534 2 -a 564 132 10 -a 564 39 2 -a 564 256 1 -a 564 605 4 -a 564 667 1 -a 564 524 5 -a 564 643 3 -a 564 389 10 -a 564 402 3 -a 564 636 8 -a 564 64 8 -a 564 427 9 -a 564 690 9 -a 564 838 7 -a 564 368 3 -a 564 951 6 -a 564 860 7 -a 564 100 7 -a 564 928 1 -a 564 719 6 -a 564 904 9 -a 565 340 6 -a 565 949 9 -a 565 339 3 -a 565 940 9 -a 565 905 5 -a 565 526 4 -a 565 114 2 -a 565 414 4 -a 565 503 8 -a 565 246 2 -a 565 452 5 -a 565 759 10 -a 565 850 3 -a 566 94 2 -a 566 258 2 -a 566 468 5 -a 566 482 7 -a 566 659 9 -a 566 79 3 -a 566 546 9 -a 566 61 1 -a 566 768 2 -a 566 359 5 -a 566 428 10 -a 566 695 8 -a 566 194 2 -a 566 527 3 -a 566 598 8 -a 566 912 7 -a 566 407 5 -a 566 937 5 -a 566 836 8 -a 566 745 9 -a 566 932 1 -a 566 751 5 -a 567 626 2 -a 567 433 2 -a 567 865 6 -a 567 15 6 -a 567 935 8 -a 567 86 8 -a 567 467 5 -a 567 669 6 -a 567 935 9 -a 567 560 6 -a 567 927 2 -a 567 378 7 -a 567 18 8 -a 567 561 9 -a 567 456 8 -a 567 563 1 -a 567 622 4 -a 567 200 8 -a 567 921 5 -a 567 25 3 -a 567 894 9 -a 567 91 9 -a 568 552 4 -a 568 467 10 -a 568 958 9 -a 568 379 2 -a 568 814 1 -a 568 678 6 -a 568 286 1 -a 568 540 9 -a 568 279 10 -a 568 718 8 -a 568 380 2 -a 568 294 6 -a 568 629 4 -a 568 465 9 -a 569 760 1 -a 569 273 3 -a 569 375 9 -a 569 295 3 -a 569 175 4 -a 569 752 8 -a 569 312 3 -a 569 736 3 -a 569 184 9 -a 569 874 2 -a 569 333 9 -a 569 383 4 -a 569 771 4 -a 569 357 4 -a 569 252 5 -a 569 861 2 -a 569 908 7 -a 569 718 3 -a 569 838 2 -a 569 841 2 -a 569 72 9 -a 569 627 6 -a 569 495 9 -a 569 358 5 -a 570 143 10 -a 570 773 2 -a 570 51 6 -a 570 522 6 -a 570 42 10 -a 570 679 1 -a 570 987 8 -a 570 801 3 -a 570 952 4 -a 570 337 4 -a 570 72 6 -a 570 102 7 -a 571 65 10 -a 571 383 2 -a 571 837 6 -a 571 248 4 -a 571 233 5 -a 571 145 9 -a 571 630 7 -a 571 502 1 -a 571 881 2 -a 571 839 9 -a 571 385 5 -a 571 574 4 -a 571 652 9 -a 571 202 6 -a 571 645 9 -a 571 255 10 -a 571 696 5 -a 571 397 2 -a 571 444 8 -a 571 29 7 -a 571 918 10 -a 571 486 5 -a 571 707 1 -a 571 880 7 -a 571 262 10 -a 571 634 8 -a 572 193 1 -a 572 333 8 -a 572 736 8 -a 572 257 8 -a 572 716 1 -a 572 548 4 -a 572 504 6 -a 572 948 10 -a 572 693 1 -a 572 109 9 -a 572 926 2 -a 572 170 7 -a 572 989 5 -a 572 740 6 -a 572 554 2 -a 572 538 9 -a 572 367 2 -a 572 755 4 -a 572 158 3 -a 572 621 7 -a 572 426 3 -a 573 136 4 -a 573 870 3 -a 573 164 9 -a 573 911 10 -a 573 331 9 -a 573 870 2 -a 573 766 9 -a 573 592 9 -a 573 480 9 -a 573 958 6 -a 573 925 10 -a 573 191 8 -a 573 190 5 -a 573 616 2 -a 573 738 4 -a 573 693 2 -a 573 539 8 -a 573 406 7 -a 573 801 9 -a 573 440 7 -a 573 575 9 -a 573 765 2 -a 573 155 10 -a 573 105 1 -a 573 278 8 -a 573 521 7 -a 573 859 9 -a 573 436 2 -a 573 118 7 -a 574 261 9 -a 574 571 4 -a 574 110 2 -a 574 106 9 -a 574 734 2 -a 574 436 7 -a 574 579 4 -a 574 762 2 -a 574 3 7 -a 574 34 9 -a 574 695 3 -a 574 927 5 -a 574 224 1 -a 574 885 7 -a 574 518 5 -a 574 962 7 -a 574 553 7 -a 574 32 7 -a 574 343 8 -a 575 330 5 -a 575 471 8 -a 575 918 8 -a 575 70 10 -a 575 625 6 -a 575 348 8 -a 575 122 7 -a 575 856 3 -a 575 783 3 -a 575 239 2 -a 575 92 4 -a 575 329 10 -a 575 348 1 -a 575 197 4 -a 575 38 10 -a 575 344 3 -a 575 632 5 -a 575 616 6 -a 575 81 4 -a 575 635 10 -a 576 650 3 -a 576 775 5 -a 576 537 2 -a 576 873 9 -a 576 635 9 -a 576 31 8 -a 576 810 6 -a 576 164 7 -a 576 62 10 -a 576 129 3 -a 576 493 5 -a 576 533 10 -a 576 22 7 -a 576 562 10 -a 576 133 8 -a 576 19 10 -a 576 909 8 -a 576 254 3 -a 576 874 3 -a 576 667 2 -a 576 492 5 -a 576 966 3 -a 576 995 9 -a 576 840 1 -a 577 138 10 -a 577 8 10 -a 577 159 9 -a 577 770 8 -a 577 624 1 -a 577 239 3 -a 577 380 6 -a 577 249 9 -a 577 916 7 -a 577 97 7 -a 577 624 1 -a 577 946 7 -a 577 907 4 -a 577 787 7 -a 577 11 9 -a 577 255 3 -a 577 516 5 -a 577 32 9 -a 577 816 5 -a 577 648 5 -a 577 50 2 -a 578 701 4 -a 578 902 10 -a 578 923 6 -a 578 343 8 -a 578 369 3 -a 578 864 3 -a 578 314 8 -a 578 184 1 -a 578 321 6 -a 578 342 1 -a 578 747 8 -a 578 944 5 -a 578 580 7 -a 578 102 7 -a 578 168 5 -a 578 569 3 -a 578 265 9 -a 578 168 8 -a 579 939 3 -a 579 147 1 -a 579 954 10 -a 579 922 1 -a 579 157 4 -a 579 184 3 -a 579 413 7 -a 579 188 1 -a 579 999 3 -a 579 36 5 -a 579 237 2 -a 579 675 2 -a 579 937 7 -a 579 135 1 -a 579 282 9 -a 580 999 7 -a 580 307 3 -a 580 465 5 -a 580 976 7 -a 580 627 7 -a 580 807 5 -a 580 698 6 -a 580 547 5 -a 580 362 1 -a 580 799 8 -a 580 714 1 -a 580 930 7 -a 580 791 8 -a 580 978 4 -a 580 73 9 -a 580 705 4 -a 580 100 6 -a 580 2 7 -a 581 602 5 -a 581 256 8 -a 581 185 4 -a 581 443 2 -a 581 160 4 -a 581 26 10 -a 581 679 9 -a 581 834 7 -a 581 962 3 -a 581 814 4 -a 581 827 9 -a 581 219 9 -a 581 788 6 -a 581 109 7 -a 581 684 4 -a 581 739 5 -a 581 736 4 -a 581 466 9 -a 581 412 10 -a 581 258 1 -a 581 827 1 -a 581 186 4 -a 581 971 10 -a 581 733 8 -a 582 976 6 -a 582 925 5 -a 582 805 5 -a 582 657 8 -a 582 807 8 -a 582 234 5 -a 582 256 7 -a 582 991 6 -a 582 224 7 -a 582 698 4 -a 582 126 10 -a 582 249 10 -a 583 353 9 -a 583 960 3 -a 583 186 9 -a 583 142 7 -a 583 762 3 -a 583 405 9 -a 583 929 7 -a 583 871 2 -a 583 64 9 -a 583 643 10 -a 583 582 5 -a 583 529 4 -a 583 30 4 -a 583 839 7 -a 583 331 2 -a 583 215 7 -a 583 785 4 -a 583 39 3 -a 583 166 8 -a 583 685 6 -a 583 844 1 -a 583 822 5 -a 584 685 2 -a 584 626 10 -a 584 32 4 -a 584 940 10 -a 584 592 3 -a 584 255 8 -a 584 613 6 -a 584 718 3 -a 584 503 10 -a 584 965 2 -a 584 653 5 -a 584 688 2 -a 584 82 4 -a 584 390 2 -a 584 68 10 -a 584 236 8 -a 584 131 1 -a 584 628 8 -a 584 817 10 -a 584 659 8 -a 585 657 9 -a 585 631 10 -a 585 990 6 -a 585 871 4 -a 585 392 8 -a 585 4 2 -a 585 13 6 -a 585 52 5 -a 585 847 4 -a 585 834 1 -a 585 736 4 -a 585 448 6 -a 585 865 7 -a 585 651 3 -a 585 16 10 -a 585 95 2 -a 585 240 10 -a 585 733 8 -a 585 597 8 -a 585 180 1 -a 585 361 8 -a 586 261 3 -a 586 262 9 -a 586 750 1 -a 586 328 7 -a 586 247 3 -a 586 986 4 -a 586 459 2 -a 586 875 4 -a 586 778 5 -a 586 93 4 -a 586 507 2 -a 586 385 7 -a 586 58 5 -a 586 354 6 -a 586 776 7 -a 586 62 6 -a 586 366 6 -a 586 827 5 -a 586 908 9 -a 586 175 5 -a 586 539 2 -a 587 332 2 -a 587 16 3 -a 587 165 2 -a 587 347 7 -a 587 110 3 -a 587 404 2 -a 587 55 5 -a 587 707 9 -a 587 584 2 -a 587 415 4 -a 587 967 7 -a 587 845 2 -a 587 140 8 -a 587 270 7 -a 588 67 2 -a 588 101 8 -a 588 728 3 -a 588 941 3 -a 588 879 1 -a 588 821 3 -a 588 424 10 -a 588 239 2 -a 588 878 9 -a 588 777 8 -a 588 939 4 -a 588 118 10 -a 588 816 7 -a 588 823 4 -a 588 292 2 -a 588 330 10 -a 588 130 1 -a 588 307 5 -a 588 495 3 -a 588 476 5 -a 589 417 6 -a 589 898 3 -a 589 530 7 -a 589 99 5 -a 589 457 1 -a 589 944 10 -a 589 41 7 -a 589 277 1 -a 589 59 8 -a 589 310 7 -a 589 344 3 -a 589 160 1 -a 589 14 8 -a 589 260 8 -a 589 14 5 -a 589 834 3 -a 589 683 6 -a 589 252 5 -a 589 687 1 -a 589 435 4 -a 589 241 3 -a 589 602 8 -a 589 552 1 -a 589 32 10 -a 590 400 6 -a 590 844 5 -a 590 362 7 -a 590 529 2 -a 590 126 7 -a 590 856 10 -a 590 542 7 -a 590 729 4 -a 590 509 1 -a 590 640 6 -a 590 162 7 -a 590 428 9 -a 590 680 10 -a 590 438 5 -a 590 486 5 -a 590 990 10 -a 590 781 8 -a 590 645 9 -a 590 17 3 -a 590 658 1 -a 590 812 3 -a 590 699 2 -a 590 909 8 -a 590 474 9 -a 591 110 7 -a 591 125 10 -a 591 51 10 -a 591 661 8 -a 591 157 3 -a 591 450 8 -a 591 480 7 -a 591 518 4 -a 591 978 2 -a 591 606 2 -a 591 349 10 -a 591 957 5 -a 591 123 2 -a 592 53 10 -a 592 441 7 -a 592 763 3 -a 592 214 6 -a 592 868 3 -a 592 418 10 -a 592 652 3 -a 592 330 7 -a 592 383 9 -a 592 408 10 -a 592 974 3 -a 592 361 2 -a 592 424 3 -a 592 608 9 -a 592 148 1 -a 592 99 1 -a 592 492 9 -a 592 622 8 -a 593 208 7 -a 593 617 9 -a 593 672 5 -a 593 868 6 -a 593 773 2 -a 593 98 6 -a 593 324 9 -a 593 266 8 -a 593 51 10 -a 593 929 8 -a 593 614 3 -a 593 27 1 -a 593 666 9 -a 593 424 5 -a 593 789 2 -a 593 880 5 -a 593 268 10 -a 593 183 5 -a 593 507 5 -a 593 597 5 -a 593 565 10 -a 593 914 2 -a 593 546 10 -a 593 926 9 -a 593 314 10 -a 594 129 1 -a 594 49 9 -a 594 412 4 -a 594 621 4 -a 594 670 6 -a 594 619 10 -a 594 213 10 -a 594 318 6 -a 594 462 9 -a 594 985 8 -a 594 415 7 -a 594 785 2 -a 594 226 9 -a 594 465 1 -a 594 689 3 -a 594 839 7 -a 594 448 10 -a 595 716 8 -a 595 480 10 -a 595 872 8 -a 595 480 5 -a 595 335 6 -a 595 115 8 -a 595 662 1 -a 595 841 3 -a 595 711 5 -a 595 203 10 -a 595 731 8 -a 595 232 8 -a 596 104 2 -a 596 20 10 -a 596 361 6 -a 596 152 1 -a 596 431 8 -a 596 981 2 -a 596 822 7 -a 596 25 3 -a 596 169 3 -a 596 115 8 -a 596 486 10 -a 596 129 7 -a 596 529 1 -a 596 247 7 -a 596 354 5 -a 596 993 1 -a 596 935 7 -a 596 168 1 -a 596 417 8 -a 596 626 8 -a 596 647 10 -a 596 264 7 -a 596 82 5 -a 597 982 9 -a 597 378 6 -a 597 743 6 -a 597 798 6 -a 597 64 2 -a 597 945 1 -a 597 504 2 -a 597 295 4 -a 597 24 7 -a 597 523 4 -a 597 655 4 -a 597 176 1 -a 597 953 8 -a 598 611 7 -a 598 997 8 -a 598 977 8 -a 598 779 6 -a 598 87 5 -a 598 439 4 -a 598 907 6 -a 598 615 8 -a 598 685 1 -a 598 236 2 -a 598 583 4 -a 598 595 6 -a 598 403 4 -a 598 999 5 -a 598 197 8 -a 598 26 7 -a 599 238 5 -a 599 278 10 -a 599 615 5 -a 599 780 9 -a 599 678 1 -a 599 941 9 -a 599 260 8 -a 599 973 6 -a 599 964 4 -a 600 782 5 -a 600 603 1 -a 600 115 10 -a 600 711 4 -a 600 190 6 -a 600 87 4 -a 600 663 4 -a 600 968 4 -a 600 173 7 -a 600 77 10 -a 600 851 1 -a 600 787 6 -a 600 761 6 -a 600 62 10 -a 600 346 4 -a 600 332 4 -a 600 465 5 -a 600 320 9 -a 600 528 1 -a 600 490 5 -a 600 558 1 -a 601 805 5 -a 601 472 5 -a 601 148 1 -a 601 800 8 -a 601 227 5 -a 601 826 9 -a 601 716 1 -a 601 486 8 -a 601 774 1 -a 601 656 8 -a 601 244 7 -a 601 352 7 -a 601 770 4 -a 601 954 8 -a 601 541 10 -a 601 857 1 -a 601 592 1 -a 601 485 5 -a 602 5 5 -a 602 669 6 -a 602 311 3 -a 602 792 2 -a 602 405 1 -a 602 372 2 -a 602 113 8 -a 602 736 7 -a 602 836 8 -a 602 432 2 -a 602 239 3 -a 602 301 3 -a 602 989 1 -a 602 19 3 -a 602 772 10 -a 602 113 2 -a 602 819 6 -a 602 999 5 -a 602 938 7 -a 602 510 5 -a 602 460 2 -a 603 687 5 -a 603 141 2 -a 603 703 10 -a 603 14 2 -a 603 911 4 -a 603 632 2 -a 603 555 10 -a 603 743 3 -a 603 200 5 -a 603 15 1 -a 603 747 1 -a 603 868 1 -a 603 325 3 -a 603 514 7 -a 603 248 4 -a 603 696 7 -a 603 626 1 -a 603 984 8 -a 603 508 10 -a 603 34 9 -a 603 198 1 -a 603 808 4 -a 603 217 2 -a 603 556 10 -a 604 110 1 -a 604 11 7 -a 604 530 2 -a 604 23 7 -a 604 520 7 -a 604 989 9 -a 604 709 3 -a 604 661 7 -a 604 668 4 -a 604 723 1 -a 604 547 3 -a 604 275 3 -a 604 253 5 -a 604 265 1 -a 604 474 6 -a 604 267 10 -a 604 317 1 -a 604 591 8 -a 604 501 3 -a 604 565 6 -a 604 262 3 -a 604 102 2 -a 604 524 7 -a 604 769 9 -a 605 135 8 -a 605 721 2 -a 605 553 4 -a 605 133 6 -a 605 937 10 -a 605 84 7 -a 605 242 10 -a 605 947 7 -a 605 613 5 -a 605 265 3 -a 605 443 7 -a 605 577 1 -a 605 973 5 -a 605 79 8 -a 605 220 7 -a 605 671 5 -a 605 625 9 -a 605 495 6 -a 605 923 4 -a 605 889 10 -a 605 968 10 -a 606 165 8 -a 606 875 4 -a 606 261 9 -a 606 755 5 -a 606 351 2 -a 606 825 8 -a 606 453 9 -a 606 324 7 -a 606 761 8 -a 606 587 2 -a 606 20 8 -a 606 289 10 -a 606 719 9 -a 606 957 8 -a 606 372 3 -a 607 961 4 -a 607 879 9 -a 607 984 7 -a 607 201 8 -a 607 297 2 -a 607 537 2 -a 607 149 9 -a 607 375 3 -a 607 756 10 -a 607 820 1 -a 607 999 8 -a 607 226 8 -a 607 718 4 -a 607 863 3 -a 607 170 10 -a 607 883 5 -a 607 714 7 -a 607 430 2 -a 607 613 3 -a 608 40 7 -a 608 230 5 -a 608 605 2 -a 608 492 1 -a 608 553 10 -a 608 342 7 -a 608 55 7 -a 608 572 7 -a 608 630 9 -a 608 773 4 -a 608 504 9 -a 608 709 2 -a 608 359 9 -a 608 961 7 -a 609 909 4 -a 609 655 3 -a 609 473 3 -a 609 34 9 -a 609 6 1 -a 609 205 4 -a 609 853 3 -a 609 430 7 -a 609 546 4 -a 609 843 10 -a 609 599 2 -a 609 404 10 -a 609 532 2 -a 609 4 5 -a 609 571 3 -a 609 233 3 -a 609 597 4 -a 609 39 9 -a 609 785 8 -a 609 938 7 -a 609 93 9 -a 609 333 5 -a 609 544 7 -a 609 865 7 -a 609 836 4 -a 609 521 10 -a 609 550 1 -a 609 170 4 -a 609 457 5 -a 609 434 6 -a 609 825 5 -a 610 930 7 -a 610 467 9 -a 610 830 9 -a 610 110 8 -a 610 295 6 -a 610 809 5 -a 610 539 7 -a 610 841 4 -a 610 627 1 -a 610 114 3 -a 610 220 8 -a 610 134 6 -a 610 117 2 -a 610 212 8 -a 610 705 7 -a 610 350 4 -a 610 809 2 -a 610 743 2 -a 610 110 7 -a 610 722 1 -a 610 835 3 -a 610 442 2 -a 611 241 8 -a 611 675 8 -a 611 254 7 -a 611 761 7 -a 611 200 8 -a 611 423 2 -a 611 194 7 -a 611 634 9 -a 611 223 6 -a 611 99 4 -a 611 76 5 -a 611 28 6 -a 611 208 10 -a 611 371 9 -a 611 837 6 -a 611 746 10 -a 611 187 7 -a 611 439 4 -a 611 859 1 -a 611 406 6 -a 611 573 5 -a 611 976 3 -a 611 618 4 -a 611 253 10 -a 612 301 8 -a 612 402 2 -a 612 995 5 -a 612 410 8 -a 612 99 10 -a 612 805 2 -a 612 852 5 -a 612 340 6 -a 612 455 7 -a 612 81 8 -a 612 76 10 -a 612 655 2 -a 612 503 9 -a 612 269 5 -a 612 264 7 -a 612 726 6 -a 613 367 9 -a 613 339 8 -a 613 753 9 -a 613 574 3 -a 613 709 1 -a 613 565 9 -a 613 296 8 -a 613 895 9 -a 613 130 3 -a 613 277 4 -a 613 552 2 -a 613 81 4 -a 613 894 8 -a 613 804 7 -a 613 381 1 -a 613 271 6 -a 613 774 1 -a 613 791 9 -a 613 369 10 -a 613 554 7 -a 614 618 8 -a 614 708 3 -a 614 698 6 -a 614 784 4 -a 614 638 10 -a 614 176 8 -a 614 28 2 -a 614 901 9 -a 614 901 3 -a 614 395 2 -a 614 216 4 -a 614 630 6 -a 614 968 3 -a 614 924 10 -a 614 170 2 -a 614 239 10 -a 614 795 5 -a 614 149 2 -a 614 369 2 -a 614 47 8 -a 614 700 6 -a 614 449 5 -a 614 940 4 -a 614 479 10 -a 615 830 8 -a 615 186 9 -a 615 228 7 -a 615 596 8 -a 615 554 8 -a 615 781 2 -a 615 189 4 -a 615 238 7 -a 615 765 5 -a 615 886 1 -a 615 378 4 -a 615 37 10 -a 615 24 9 -a 615 255 7 -a 615 938 8 -a 615 418 10 -a 615 470 2 -a 616 543 6 -a 616 362 3 -a 616 369 5 -a 616 712 2 -a 616 600 3 -a 616 139 6 -a 616 861 2 -a 616 968 10 -a 616 185 4 -a 616 536 8 -a 616 393 8 -a 616 100 6 -a 616 198 10 -a 616 285 6 -a 616 218 5 -a 616 793 6 -a 616 839 1 -a 616 999 8 -a 616 981 1 -a 616 52 5 -a 616 739 10 -a 616 842 1 -a 616 48 5 -a 616 92 7 -a 617 878 6 -a 617 71 4 -a 617 346 10 -a 617 791 9 -a 617 489 8 -a 617 815 8 -a 617 309 9 -a 617 850 5 -a 617 160 3 -a 617 425 8 -a 617 298 3 -a 617 857 3 -a 617 369 6 -a 617 483 2 -a 617 368 2 -a 617 761 6 -a 617 582 9 -a 618 358 4 -a 618 958 7 -a 618 867 2 -a 618 576 1 -a 618 726 4 -a 618 681 2 -a 618 550 9 -a 618 682 8 -a 618 732 3 -a 618 264 3 -a 618 499 5 -a 618 779 10 -a 618 355 3 -a 618 352 5 -a 618 849 4 -a 618 701 10 -a 618 119 7 -a 618 313 6 -a 618 491 4 -a 619 427 7 -a 619 138 6 -a 619 650 2 -a 619 423 7 -a 619 563 6 -a 619 948 9 -a 619 255 9 -a 619 931 3 -a 619 406 10 -a 619 623 10 -a 619 667 10 -a 619 987 1 -a 619 980 3 -a 619 600 7 -a 619 829 3 -a 619 531 1 -a 619 301 9 -a 619 485 1 -a 619 56 8 -a 619 982 5 -a 619 192 4 -a 620 319 4 -a 620 456 3 -a 620 970 3 -a 620 674 8 -a 620 807 5 -a 620 795 5 -a 620 350 9 -a 620 925 1 -a 620 83 2 -a 620 840 1 -a 620 328 10 -a 620 221 4 -a 620 466 7 -a 620 750 5 -a 620 783 1 -a 620 389 5 -a 620 689 5 -a 620 794 9 -a 620 603 9 -a 620 331 6 -a 620 756 9 -a 621 558 5 -a 621 930 9 -a 621 561 6 -a 621 65 10 -a 621 206 5 -a 621 21 7 -a 621 120 7 -a 621 163 10 -a 621 213 4 -a 621 439 4 -a 621 618 2 -a 621 158 8 -a 621 88 2 -a 621 400 1 -a 621 952 4 -a 621 437 10 -a 621 301 3 -a 621 11 10 -a 621 252 7 -a 621 628 9 -a 621 231 4 -a 622 717 8 -a 622 353 3 -a 622 81 9 -a 622 333 10 -a 622 677 3 -a 622 874 8 -a 622 935 3 -a 622 606 10 -a 622 469 8 -a 622 912 5 -a 622 142 6 -a 622 533 5 -a 623 93 3 -a 623 162 1 -a 623 652 10 -a 623 255 9 -a 623 374 6 -a 623 66 6 -a 623 872 3 -a 623 532 8 -a 623 153 8 -a 623 247 4 -a 624 459 7 -a 624 589 8 -a 624 547 10 -a 624 469 9 -a 624 841 8 -a 624 150 5 -a 624 699 6 -a 624 533 4 -a 624 503 4 -a 624 687 2 -a 624 614 6 -a 624 835 3 -a 624 339 3 -a 624 463 5 -a 624 746 7 -a 624 321 8 -a 624 44 8 -a 624 190 7 -a 625 208 5 -a 625 185 8 -a 625 722 5 -a 625 300 10 -a 625 347 4 -a 625 349 10 -a 625 554 9 -a 625 720 2 -a 625 415 7 -a 625 401 5 -a 625 227 9 -a 625 567 2 -a 625 648 7 -a 625 686 6 -a 625 132 5 -a 625 170 5 -a 625 130 1 -a 625 972 2 -a 625 320 8 -a 625 829 6 -a 626 480 2 -a 626 822 6 -a 626 491 3 -a 626 69 3 -a 626 632 1 -a 626 830 5 -a 626 532 2 -a 626 353 3 -a 626 126 6 -a 626 575 1 -a 626 542 5 -a 626 334 1 -a 626 760 1 -a 626 239 10 -a 626 633 9 -a 626 82 8 -a 626 588 4 -a 626 163 10 -a 626 801 9 -a 627 563 8 -a 627 4 8 -a 627 544 7 -a 627 186 8 -a 627 689 7 -a 627 675 9 -a 627 356 9 -a 627 818 10 -a 627 622 4 -a 627 675 9 -a 627 622 8 -a 627 78 9 -a 627 472 1 -a 627 89 5 -a 627 146 4 -a 627 79 6 -a 627 918 6 -a 627 677 2 -a 627 432 4 -a 628 19 7 -a 628 228 5 -a 628 973 5 -a 628 352 1 -a 628 987 7 -a 628 188 5 -a 628 985 4 -a 628 44 1 -a 628 775 2 -a 628 123 9 -a 628 844 9 -a 628 752 10 -a 628 685 3 -a 628 847 2 -a 628 271 10 -a 628 871 7 -a 628 511 5 -a 628 946 8 -a 628 202 5 -a 628 305 3 -a 628 543 10 -a 628 876 5 -a 628 926 9 -a 628 620 3 -a 628 323 2 -a 629 766 5 -a 629 401 2 -a 629 907 1 -a 629 418 3 -a 629 832 2 -a 629 926 5 -a 629 645 8 -a 629 781 10 -a 629 253 10 -a 629 607 7 -a 629 968 4 -a 629 213 2 -a 629 650 6 -a 629 718 10 -a 629 335 6 -a 629 470 4 -a 629 445 7 -a 629 292 4 -a 629 715 6 -a 629 866 9 -a 629 803 2 -a 629 636 3 -a 629 43 6 -a 629 83 6 -a 629 155 5 -a 630 918 6 -a 630 774 8 -a 630 216 4 -a 630 998 7 -a 630 515 1 -a 630 616 9 -a 630 880 5 -a 630 933 5 -a 630 424 10 -a 630 781 8 -a 630 553 7 -a 630 180 5 -a 630 10 1 -a 630 136 10 -a 630 123 3 -a 630 222 7 -a 630 785 8 -a 630 840 4 -a 630 557 3 -a 631 230 10 -a 631 260 2 -a 631 552 6 -a 631 522 2 -a 631 974 6 -a 631 393 4 -a 631 300 10 -a 631 586 1 -a 631 435 2 -a 631 382 1 -a 631 740 7 -a 631 328 8 -a 631 365 6 -a 631 489 6 -a 631 543 5 -a 631 338 9 -a 631 134 8 -a 631 194 2 -a 631 912 2 -a 631 557 2 -a 631 974 7 -a 631 440 1 -a 631 736 5 -a 631 983 2 -a 631 575 2 -a 631 858 7 -a 631 181 10 -a 632 336 5 -a 632 673 2 -a 632 737 1 -a 632 565 7 -a 632 932 6 -a 632 264 10 -a 632 62 8 -a 632 882 1 -a 632 656 7 -a 632 361 2 -a 632 443 4 -a 632 66 2 -a 632 742 3 -a 632 158 9 -a 632 393 10 -a 632 83 5 -a 632 646 5 -a 632 935 7 -a 632 420 7 -a 632 625 10 -a 632 44 3 -a 632 613 4 -a 632 512 2 -a 632 601 8 -a 633 563 3 -a 633 952 5 -a 633 312 1 -a 633 521 4 -a 633 502 9 -a 633 146 2 -a 633 701 6 -a 633 837 1 -a 633 818 3 -a 633 413 10 -a 633 378 1 -a 633 726 10 -a 634 676 9 -a 634 439 5 -a 634 583 6 -a 634 307 5 -a 634 800 7 -a 634 1 2 -a 634 372 8 -a 634 517 9 -a 634 158 9 -a 634 764 2 -a 634 599 2 -a 634 803 6 -a 634 674 4 -a 634 404 4 -a 634 718 6 -a 634 607 3 -a 634 915 6 -a 634 294 2 -a 634 145 2 -a 634 842 2 -a 634 605 8 -a 634 666 3 -a 635 320 7 -a 635 750 9 -a 635 342 7 -a 635 132 5 -a 635 544 5 -a 635 755 6 -a 635 509 6 -a 635 245 3 -a 635 406 8 -a 635 948 8 -a 635 827 5 -a 635 713 6 -a 635 723 8 -a 635 827 7 -a 635 60 2 -a 635 215 4 -a 636 984 4 -a 636 824 4 -a 636 814 10 -a 636 762 10 -a 636 473 5 -a 636 808 9 -a 636 141 6 -a 636 166 2 -a 636 390 7 -a 636 32 2 -a 636 459 9 -a 636 535 9 -a 636 873 9 -a 636 40 5 -a 636 176 3 -a 636 168 4 -a 636 789 8 -a 636 517 6 -a 636 300 10 -a 636 308 4 -a 636 247 7 -a 636 808 1 -a 636 552 6 -a 637 653 3 -a 637 731 10 -a 637 354 10 -a 637 341 7 -a 637 429 10 -a 637 156 1 -a 637 400 8 -a 637 644 2 -a 637 115 9 -a 637 199 1 -a 637 433 7 -a 637 877 8 -a 637 672 3 -a 637 216 10 -a 637 837 3 -a 637 605 2 -a 637 24 2 -a 637 272 9 -a 637 115 5 -a 637 897 8 -a 637 311 1 -a 637 290 3 -a 637 40 4 -a 637 75 8 -a 638 807 3 -a 638 339 9 -a 638 383 10 -a 638 29 3 -a 638 123 4 -a 638 934 10 -a 638 681 5 -a 638 853 1 -a 638 264 6 -a 638 258 6 -a 638 419 1 -a 638 397 4 -a 638 901 6 -a 638 534 5 -a 638 595 7 -a 638 309 8 -a 638 386 4 -a 639 242 4 -a 639 524 5 -a 639 378 1 -a 639 55 7 -a 639 104 5 -a 639 402 9 -a 639 326 8 -a 639 219 8 -a 639 274 6 -a 639 636 1 -a 639 508 3 -a 639 313 1 -a 639 710 2 -a 639 290 8 -a 639 652 2 -a 639 68 5 -a 639 319 5 -a 639 774 2 -a 639 999 5 -a 639 602 9 -a 639 241 8 -a 639 996 8 -a 639 859 7 -a 639 659 6 -a 640 368 5 -a 640 735 7 -a 640 168 3 -a 640 962 4 -a 640 19 6 -a 640 553 9 -a 640 180 6 -a 640 542 6 -a 640 931 6 -a 640 234 7 -a 640 646 2 -a 640 308 7 -a 640 559 4 -a 640 864 7 -a 640 581 5 -a 640 170 4 -a 640 347 6 -a 640 893 8 -a 641 879 5 -a 641 637 7 -a 641 520 3 -a 641 947 9 -a 641 955 1 -a 641 269 9 -a 641 924 4 -a 641 929 7 -a 641 871 4 -a 641 140 6 -a 641 900 9 -a 641 705 9 -a 641 798 2 -a 641 243 10 -a 642 416 5 -a 642 966 5 -a 642 181 9 -a 642 434 10 -a 642 494 2 -a 642 360 5 -a 642 976 1 -a 642 400 5 -a 642 593 2 -a 642 597 2 -a 642 707 8 -a 642 127 1 -a 642 436 3 -a 642 263 7 -a 643 296 3 -a 643 782 8 -a 643 132 5 -a 643 150 2 -a 643 394 9 -a 643 651 3 -a 643 72 6 -a 643 324 7 -a 643 920 6 -a 643 995 4 -a 643 229 10 -a 643 766 1 -a 643 110 1 -a 643 104 9 -a 643 446 3 -a 643 908 2 -a 643 347 2 -a 643 861 4 -a 643 849 5 -a 643 527 9 -a 643 271 8 -a 643 318 10 -a 644 886 4 -a 644 222 7 -a 644 718 10 -a 644 454 3 -a 644 818 3 -a 644 400 2 -a 644 580 10 -a 644 229 6 -a 644 663 6 -a 644 875 5 -a 644 794 4 -a 644 380 6 -a 644 420 5 -a 644 72 4 -a 644 703 7 -a 644 315 1 -a 644 42 9 -a 645 931 5 -a 645 56 4 -a 645 152 2 -a 645 11 10 -a 645 502 9 -a 645 35 4 -a 645 357 7 -a 645 338 1 -a 645 883 3 -a 645 883 10 -a 645 608 3 -a 645 176 7 -a 645 744 1 -a 645 829 5 -a 645 893 8 -a 645 173 2 -a 646 622 7 -a 646 269 8 -a 646 752 10 -a 646 850 2 -a 646 931 6 -a 646 602 6 -a 646 836 8 -a 646 700 3 -a 646 601 7 -a 646 191 1 -a 646 95 5 -a 646 672 7 -a 646 893 5 -a 646 410 5 -a 646 714 4 -a 646 800 7 -a 646 465 6 -a 646 865 4 -a 646 810 4 -a 647 966 1 -a 647 899 7 -a 647 142 8 -a 647 280 8 -a 647 757 5 -a 647 887 1 -a 647 932 7 -a 647 743 6 -a 647 692 2 -a 647 801 5 -a 647 915 8 -a 647 289 6 -a 647 45 9 -a 647 642 6 -a 648 115 10 -a 648 975 10 -a 648 219 3 -a 648 950 1 -a 648 650 8 -a 648 819 4 -a 648 116 9 -a 648 744 4 -a 648 467 7 -a 648 129 9 -a 648 156 10 -a 648 783 5 -a 648 594 1 -a 648 568 1 -a 648 535 10 -a 648 894 1 -a 648 709 10 -a 648 814 6 -a 648 626 10 -a 648 708 8 -a 648 677 3 -a 649 533 9 -a 649 426 8 -a 649 344 2 -a 649 309 6 -a 649 316 2 -a 649 632 1 -a 649 353 8 -a 649 957 5 -a 649 746 9 -a 649 303 2 -a 649 151 4 -a 649 671 2 -a 649 952 4 -a 649 970 9 -a 649 786 1 -a 649 672 4 -a 649 412 8 -a 649 770 10 -a 650 800 9 -a 650 567 2 -a 650 528 5 -a 650 369 2 -a 650 562 9 -a 650 72 8 -a 650 904 1 -a 650 431 8 -a 650 780 8 -a 650 693 5 -a 650 32 1 -a 650 464 5 -a 650 345 3 -a 650 564 7 -a 650 889 6 -a 650 688 6 -a 650 873 2 -a 650 181 7 -a 650 296 9 -a 650 201 1 -a 650 113 8 -a 650 17 9 -a 651 504 8 -a 651 264 2 -a 651 688 7 -a 651 431 1 -a 651 209 6 -a 651 449 8 -a 651 78 9 -a 651 620 8 -a 651 194 4 -a 651 878 8 -a 651 162 9 -a 651 722 3 -a 651 222 5 -a 651 723 8 -a 651 793 6 -a 651 101 5 -a 651 129 6 -a 651 548 4 -a 651 794 9 -a 652 160 5 -a 652 114 7 -a 652 723 5 -a 652 876 7 -a 652 802 4 -a 652 571 3 -a 652 32 8 -a 652 73 9 -a 652 772 1 -a 652 144 2 -a 652 89 1 -a 652 251 9 -a 652 407 7 -a 652 776 4 -a 652 681 9 -a 652 615 3 -a 652 201 10 -a 652 759 3 -a 652 210 6 -a 652 394 8 -a 653 612 10 -a 653 371 3 -a 653 91 2 -a 653 833 7 -a 653 69 8 -a 653 883 10 -a 653 934 10 -a 653 197 2 -a 653 407 8 -a 653 703 2 -a 653 356 4 -a 653 393 3 -a 653 816 1 -a 653 55 5 -a 653 244 1 -a 653 593 10 -a 653 625 4 -a 653 275 2 -a 653 665 6 -a 653 372 3 -a 653 419 4 -a 653 754 6 -a 653 622 5 -a 653 825 9 -a 653 505 7 -a 654 279 8 -a 654 416 5 -a 654 705 5 -a 654 13 7 -a 654 625 8 -a 654 75 6 -a 654 624 8 -a 654 996 10 -a 654 165 2 -a 654 432 8 -a 654 40 3 -a 654 24 1 -a 654 341 8 -a 654 237 6 -a 654 430 2 -a 654 19 9 -a 654 592 6 -a 654 822 4 -a 654 835 10 -a 654 646 6 -a 654 42 7 -a 654 403 4 -a 654 247 2 -a 654 316 8 -a 655 44 9 -a 655 618 9 -a 655 734 6 -a 655 797 6 -a 655 216 7 -a 655 535 8 -a 655 277 7 -a 655 494 5 -a 655 950 9 -a 655 982 1 -a 655 506 8 -a 655 550 7 -a 656 32 6 -a 656 105 3 -a 656 521 4 -a 656 196 9 -a 656 536 2 -a 656 561 5 -a 656 219 7 -a 656 877 3 -a 656 797 8 -a 656 648 9 -a 656 895 1 -a 656 364 6 -a 656 446 5 -a 656 705 4 -a 656 487 10 -a 656 84 7 -a 656 232 5 -a 656 802 9 -a 657 127 3 -a 657 849 10 -a 657 512 7 -a 657 923 3 -a 657 40 1 -a 657 22 8 -a 657 175 4 -a 657 533 1 -a 657 971 5 -a 657 132 5 -a 657 14 4 -a 657 496 10 -a 657 163 10 -a 657 118 4 -a 657 359 3 -a 657 654 2 -a 657 553 7 -a 657 577 9 -a 657 506 7 -a 657 325 10 -a 657 201 3 -a 657 376 5 -a 657 688 2 -a 657 646 4 -a 657 57 1 -a 657 673 10 -a 657 108 7 -a 657 140 10 -a 658 904 6 -a 658 909 8 -a 658 266 9 -a 658 729 9 -a 658 396 1 -a 658 164 2 -a 658 768 1 -a 658 417 6 -a 658 338 7 -a 658 277 4 -a 658 363 6 -a 658 470 10 -a 659 290 3 -a 659 859 9 -a 659 632 4 -a 659 408 2 -a 659 851 6 -a 659 990 7 -a 659 37 3 -a 659 379 2 -a 659 543 10 -a 659 542 6 -a 659 703 4 -a 659 743 1 -a 659 917 10 -a 659 366 10 -a 659 364 6 -a 659 973 8 -a 659 15 4 -a 659 471 3 -a 659 88 3 -a 659 918 1 -a 659 355 4 -a 659 353 5 -a 659 622 4 -a 659 751 7 -a 659 516 2 -a 659 366 2 -a 659 143 10 -a 659 854 9 -a 659 642 2 -a 659 506 10 -a 659 299 9 -a 659 931 4 -a 659 340 5 -a 659 930 8 -a 660 314 3 -a 660 166 6 -a 660 896 10 -a 660 350 8 -a 660 544 7 -a 660 414 1 -a 660 891 2 -a 660 222 6 -a 660 132 4 -a 660 784 7 -a 660 587 5 -a 660 495 4 -a 660 732 7 -a 660 601 4 -a 660 965 6 -a 660 820 9 -a 660 495 2 -a 660 295 3 -a 660 148 9 -a 660 92 9 -a 661 21 3 -a 661 664 3 -a 661 457 8 -a 661 164 1 -a 661 493 4 -a 661 74 4 -a 661 669 5 -a 661 791 9 -a 661 696 4 -a 661 294 8 -a 661 149 10 -a 661 567 9 -a 661 644 2 -a 661 692 4 -a 661 980 10 -a 661 510 5 -a 661 913 1 -a 662 87 9 -a 662 269 10 -a 662 475 3 -a 662 581 10 -a 662 52 4 -a 662 521 5 -a 662 796 7 -a 662 546 4 -a 662 816 9 -a 662 943 1 -a 662 637 5 -a 662 836 6 -a 662 582 2 -a 662 70 7 -a 662 999 1 -a 662 50 3 -a 662 143 10 -a 662 643 1 -a 662 840 7 -a 662 123 10 -a 663 626 4 -a 663 512 6 -a 663 417 10 -a 663 774 10 -a 663 54 10 -a 663 36 9 -a 663 441 8 -a 663 10 2 -a 663 545 5 -a 663 329 8 -a 663 96 6 -a 663 814 4 -a 663 804 2 -a 663 677 3 -a 663 790 1 -a 663 855 8 -a 663 173 5 -a 663 561 5 -a 664 376 2 -a 664 988 5 -a 664 479 5 -a 664 800 7 -a 664 37 9 -a 664 57 8 -a 664 774 5 -a 664 86 3 -a 664 200 8 -a 664 393 5 -a 664 926 9 -a 664 322 1 -a 664 413 2 -a 664 738 9 -a 664 768 6 -a 664 466 4 -a 664 773 10 -a 664 184 2 -a 664 475 6 -a 664 294 10 -a 664 513 9 -a 664 571 10 -a 664 83 8 -a 664 292 2 -a 664 223 9 -a 664 872 3 -a 664 122 2 -a 664 395 10 -a 665 408 4 -a 665 497 4 -a 665 359 5 -a 665 886 2 -a 665 484 9 -a 665 134 6 -a 665 922 4 -a 665 541 4 -a 665 907 1 -a 665 740 3 -a 665 275 7 -a 665 909 10 -a 665 37 4 -a 665 269 4 -a 665 297 6 -a 665 775 9 -a 665 12 1 -a 665 762 7 -a 665 523 10 -a 665 195 9 -a 666 213 10 -a 666 816 9 -a 666 707 10 -a 666 783 3 -a 666 898 7 -a 666 998 8 -a 666 745 7 -a 666 95 3 -a 666 375 4 -a 666 128 2 -a 666 591 6 -a 666 733 7 -a 666 51 3 -a 666 866 8 -a 666 911 9 -a 666 591 7 -a 666 749 10 -a 666 894 8 -a 666 306 6 -a 666 778 9 -a 667 342 2 -a 667 267 8 -a 667 50 3 -a 667 92 1 -a 667 278 5 -a 667 812 4 -a 667 615 10 -a 667 473 2 -a 667 406 2 -a 667 155 7 -a 667 782 3 -a 667 280 5 -a 667 129 2 -a 667 762 9 -a 667 223 4 -a 667 112 9 -a 667 128 9 -a 667 814 8 -a 667 845 3 -a 667 117 9 -a 667 864 9 -a 667 686 10 -a 668 3 9 -a 668 430 8 -a 668 410 7 -a 668 897 10 -a 668 735 7 -a 668 409 8 -a 668 650 4 -a 668 52 7 -a 668 675 9 -a 668 700 7 -a 668 144 3 -a 668 953 10 -a 668 487 7 -a 668 758 3 -a 669 401 3 -a 669 486 10 -a 669 139 3 -a 669 555 2 -a 669 243 7 -a 669 418 7 -a 669 683 4 -a 669 418 7 -a 669 906 1 -a 669 91 9 -a 669 545 7 -a 669 695 4 -a 669 935 9 -a 669 661 10 -a 669 534 5 -a 669 597 7 -a 669 663 7 -a 669 963 5 -a 669 535 1 -a 669 673 1 -a 669 390 3 -a 669 161 2 -a 670 724 7 -a 670 41 1 -a 670 860 4 -a 670 867 2 -a 670 993 7 -a 670 322 4 -a 670 600 1 -a 670 369 4 -a 670 807 6 -a 670 739 10 -a 670 923 10 -a 670 25 8 -a 670 132 4 -a 670 582 9 -a 670 4 10 -a 670 549 3 -a 670 463 4 -a 670 94 3 -a 670 69 4 -a 670 133 5 -a 670 5 5 -a 671 729 5 -a 671 666 5 -a 671 601 9 -a 671 368 2 -a 671 604 1 -a 671 582 5 -a 671 902 8 -a 671 252 3 -a 671 972 1 -a 671 38 8 -a 671 975 9 -a 671 897 8 -a 671 818 2 -a 671 980 1 -a 671 194 4 -a 671 393 4 -a 671 324 8 -a 672 1000 2 -a 672 107 8 -a 672 222 7 -a 672 239 10 -a 672 803 10 -a 672 3 7 -a 672 787 8 -a 672 241 4 -a 672 97 7 -a 672 856 6 -a 672 373 6 -a 672 101 4 -a 672 560 6 -a 672 14 2 -a 672 701 6 -a 672 927 7 -a 672 617 7 -a 672 258 7 -a 672 805 7 -a 672 868 5 -a 672 205 6 -a 672 842 10 -a 672 819 2 -a 672 192 9 -a 673 715 1 -a 673 612 3 -a 673 147 7 -a 673 908 9 -a 673 470 3 -a 673 884 7 -a 673 87 10 -a 673 692 6 -a 673 883 1 -a 673 325 7 -a 673 470 8 -a 673 886 6 -a 673 87 2 -a 673 711 4 -a 673 982 8 -a 673 942 10 -a 673 59 7 -a 673 58 8 -a 673 478 4 -a 673 73 9 -a 673 758 1 -a 674 380 3 -a 674 689 2 -a 674 160 8 -a 674 533 4 -a 674 196 6 -a 674 327 4 -a 674 387 7 -a 674 692 1 -a 674 938 2 -a 674 534 5 -a 674 575 9 -a 674 917 3 -a 674 434 1 -a 674 670 4 -a 674 293 2 -a 674 303 5 -a 674 116 4 -a 674 154 10 -a 674 390 5 -a 674 826 8 -a 674 111 6 -a 674 307 10 -a 674 884 2 -a 674 168 1 -a 675 784 5 -a 675 956 1 -a 675 925 5 -a 675 140 2 -a 675 621 9 -a 675 915 10 -a 675 299 10 -a 675 129 10 -a 675 86 7 -a 675 276 4 -a 675 455 9 -a 675 473 4 -a 675 967 8 -a 675 368 4 -a 675 518 3 -a 675 260 6 -a 675 984 5 -a 675 951 3 -a 675 239 10 -a 675 630 2 -a 675 219 9 -a 675 541 2 -a 675 745 4 -a 675 372 9 -a 675 930 3 -a 675 546 4 -a 675 482 7 -a 676 213 7 -a 676 405 4 -a 676 649 8 -a 676 996 3 -a 676 337 9 -a 676 549 2 -a 676 111 10 -a 676 957 5 -a 676 440 6 -a 676 410 8 -a 676 61 2 -a 676 525 4 -a 676 685 2 -a 677 515 5 -a 677 997 5 -a 677 628 2 -a 677 882 1 -a 677 978 8 -a 677 121 7 -a 677 117 4 -a 677 938 4 -a 677 47 10 -a 677 355 3 -a 677 543 10 -a 677 266 9 -a 677 896 5 -a 677 263 2 -a 677 637 10 -a 677 801 6 -a 677 808 7 -a 677 95 3 -a 677 188 7 -a 677 743 8 -a 677 985 8 -a 677 524 1 -a 678 268 5 -a 678 71 9 -a 678 456 4 -a 678 707 1 -a 678 480 5 -a 678 516 8 -a 678 207 2 -a 678 141 4 -a 678 6 5 -a 678 180 6 -a 678 768 7 -a 678 887 6 -a 678 133 7 -a 678 888 7 -a 678 46 8 -a 678 934 8 -a 678 334 3 -a 678 588 7 -a 678 175 7 -a 679 205 4 -a 679 850 3 -a 679 812 3 -a 679 633 7 -a 679 906 3 -a 679 994 10 -a 679 821 5 -a 679 624 10 -a 679 954 6 -a 679 320 2 -a 679 891 7 -a 679 1 9 -a 679 776 8 -a 679 573 4 -a 679 480 9 -a 679 267 2 -a 679 780 8 -a 679 620 6 -a 679 273 8 -a 679 959 1 -a 679 363 5 -a 679 135 8 -a 679 67 4 -a 679 226 4 -a 680 114 4 -a 680 113 1 -a 680 136 10 -a 680 448 10 -a 680 700 1 -a 680 310 9 -a 680 652 6 -a 680 526 5 -a 680 97 7 -a 680 633 8 -a 680 134 2 -a 680 603 5 -a 680 954 3 -a 680 602 3 -a 681 532 2 -a 681 250 7 -a 681 468 10 -a 681 532 5 -a 681 1 9 -a 681 17 7 -a 681 267 4 -a 681 796 9 -a 681 607 6 -a 681 539 3 -a 681 730 2 -a 681 970 2 -a 681 674 8 -a 681 796 6 -a 681 171 5 -a 681 787 5 -a 681 908 6 -a 682 306 9 -a 682 210 9 -a 682 584 4 -a 682 616 4 -a 682 862 5 -a 682 85 7 -a 682 712 7 -a 682 470 5 -a 682 218 8 -a 682 690 1 -a 682 48 3 -a 682 148 6 -a 682 267 7 -a 682 580 3 -a 682 397 6 -a 682 734 9 -a 682 87 7 -a 682 397 10 -a 683 750 4 -a 683 74 4 -a 683 663 2 -a 683 521 8 -a 683 681 3 -a 683 178 6 -a 683 226 1 -a 683 626 7 -a 683 851 4 -a 683 796 5 -a 683 613 6 -a 683 905 2 -a 683 78 8 -a 683 823 6 -a 683 464 2 -a 683 693 1 -a 683 660 9 -a 683 548 6 -a 683 380 9 -a 683 105 4 -a 683 766 6 -a 683 45 6 -a 684 153 10 -a 684 913 9 -a 684 311 9 -a 684 732 10 -a 684 285 8 -a 684 21 5 -a 684 818 2 -a 684 681 6 -a 684 770 7 -a 684 892 8 -a 684 319 4 -a 684 267 5 -a 684 548 7 -a 684 496 5 -a 684 492 1 -a 684 149 8 -a 684 322 6 -a 685 489 2 -a 685 944 7 -a 685 935 9 -a 685 370 7 -a 685 733 7 -a 685 833 2 -a 685 689 5 -a 685 368 2 -a 685 357 10 -a 685 45 1 -a 685 472 9 -a 685 98 1 -a 685 89 10 -a 685 624 7 -a 685 400 1 -a 685 331 2 -a 685 270 8 -a 685 420 6 -a 685 125 2 -a 686 950 9 -a 686 165 4 -a 686 244 4 -a 686 431 10 -a 686 539 10 -a 686 740 2 -a 686 923 4 -a 686 687 5 -a 686 37 6 -a 686 387 6 -a 686 606 3 -a 686 971 4 -a 686 756 3 -a 686 603 2 -a 686 679 8 -a 686 565 1 -a 686 267 4 -a 686 22 4 -a 686 921 7 -a 687 311 7 -a 687 494 1 -a 687 400 5 -a 687 93 4 -a 687 799 2 -a 687 424 5 -a 687 248 5 -a 687 194 7 -a 687 548 3 -a 687 173 2 -a 687 358 3 -a 687 539 2 -a 687 416 4 -a 687 789 5 -a 687 53 3 -a 688 131 5 -a 688 687 6 -a 688 739 3 -a 688 168 10 -a 688 49 7 -a 688 320 10 -a 688 114 8 -a 688 805 2 -a 688 922 7 -a 688 793 8 -a 688 345 2 -a 688 165 9 -a 688 814 1 -a 688 241 6 -a 689 475 8 -a 689 283 5 -a 689 234 3 -a 689 874 4 -a 689 376 2 -a 689 212 7 -a 689 648 6 -a 689 799 9 -a 689 459 10 -a 689 841 4 -a 689 322 9 -a 689 631 2 -a 689 175 6 -a 689 860 6 -a 689 22 9 -a 689 963 8 -a 689 912 4 -a 689 153 3 -a 689 625 1 -a 689 626 8 -a 689 320 1 -a 689 673 7 -a 689 945 1 -a 689 433 10 -a 689 453 10 -a 689 843 4 -a 689 201 10 -a 689 797 8 -a 689 13 3 -a 689 457 10 -a 690 273 2 -a 690 246 7 -a 690 307 7 -a 690 648 8 -a 690 457 6 -a 690 954 2 -a 690 422 6 -a 690 915 4 -a 690 771 2 -a 690 743 6 -a 690 521 8 -a 690 945 2 -a 690 578 1 -a 690 543 3 -a 690 883 4 -a 690 465 4 -a 690 695 5 -a 690 483 5 -a 691 66 8 -a 691 131 3 -a 691 422 9 -a 691 584 7 -a 691 829 8 -a 691 623 5 -a 691 356 8 -a 691 811 8 -a 691 613 9 -a 691 369 3 -a 691 243 7 -a 691 885 1 -a 691 614 4 -a 691 549 6 -a 691 509 1 -a 691 47 8 -a 692 479 2 -a 692 930 5 -a 692 961 6 -a 692 225 4 -a 692 649 9 -a 692 458 1 -a 692 145 7 -a 692 202 3 -a 692 1000 9 -a 692 3 5 -a 692 667 3 -a 692 670 1 -a 692 485 2 -a 692 732 10 -a 692 659 9 -a 692 615 4 -a 692 718 9 -a 692 56 8 -a 692 174 5 -a 692 522 10 -a 692 678 6 -a 692 530 5 -a 692 308 7 -a 692 266 1 -a 692 898 10 -a 693 551 3 -a 693 127 4 -a 693 487 2 -a 693 75 4 -a 693 635 3 -a 693 533 4 -a 693 553 2 -a 693 540 10 -a 693 470 3 -a 693 777 10 -a 693 164 5 -a 693 927 10 -a 693 921 3 -a 693 366 3 -a 693 902 10 -a 694 923 3 -a 694 8 4 -a 694 547 8 -a 694 383 5 -a 694 739 1 -a 694 181 8 -a 694 998 2 -a 694 433 2 -a 694 236 4 -a 694 147 9 -a 694 954 1 -a 694 914 3 -a 694 676 10 -a 694 238 5 -a 694 155 4 -a 695 549 8 -a 695 788 9 -a 695 281 7 -a 695 12 7 -a 695 862 9 -a 695 915 5 -a 695 544 10 -a 695 391 2 -a 695 431 7 -a 695 143 5 -a 695 594 5 -a 695 915 4 -a 696 40 3 -a 696 959 5 -a 696 792 4 -a 696 962 7 -a 696 966 5 -a 696 314 7 -a 696 321 5 -a 696 681 8 -a 696 494 7 -a 696 294 7 -a 696 89 2 -a 696 730 10 -a 696 440 9 -a 696 18 4 -a 696 619 7 -a 696 92 10 -a 696 255 5 -a 696 773 7 -a 697 640 8 -a 697 18 4 -a 697 30 7 -a 697 651 8 -a 697 880 10 -a 697 944 3 -a 697 171 5 -a 697 246 9 -a 697 350 10 -a 697 159 4 -a 697 388 7 -a 697 944 4 -a 697 50 7 -a 697 427 4 -a 697 878 2 -a 697 841 3 -a 697 365 1 -a 697 820 9 -a 697 131 9 -a 697 685 1 -a 697 476 9 -a 697 624 7 -a 697 978 4 -a 697 564 7 -a 697 329 1 -a 698 393 9 -a 698 581 6 -a 698 947 10 -a 698 484 2 -a 698 836 5 -a 698 696 7 -a 698 100 2 -a 698 853 1 -a 698 725 2 -a 698 750 7 -a 698 708 5 -a 698 644 1 -a 698 920 3 -a 698 953 7 -a 698 994 4 -a 698 55 4 -a 698 317 2 -a 698 913 10 -a 699 104 6 -a 699 743 2 -a 699 766 7 -a 699 944 8 -a 699 83 8 -a 699 561 9 -a 699 50 10 -a 699 767 4 -a 699 12 7 -a 699 674 10 -a 699 720 9 -a 699 575 8 -a 699 89 5 -a 699 132 9 -a 699 925 7 -a 699 572 6 -a 699 967 4 -a 699 596 10 -a 699 671 5 -a 699 795 7 -a 699 296 4 -a 699 397 5 -a 699 479 4 -a 699 939 9 -a 699 292 7 -a 699 407 3 -a 700 908 5 -a 700 346 10 -a 700 723 3 -a 700 796 3 -a 700 449 10 -a 700 442 8 -a 700 538 2 -a 700 369 2 -a 700 524 9 -a 700 74 2 -a 700 418 1 -a 700 267 8 -a 700 86 5 -a 700 67 4 -a 700 986 2 -a 700 660 9 -a 701 45 10 -a 701 50 5 -a 701 791 5 -a 701 969 2 -a 701 622 3 -a 701 733 9 -a 701 540 4 -a 701 268 2 -a 701 504 8 -a 701 835 9 -a 701 664 9 -a 701 982 10 -a 701 749 1 -a 701 956 9 -a 701 364 2 -a 701 633 4 -a 701 277 5 -a 701 63 5 -a 702 404 6 -a 702 726 1 -a 702 504 2 -a 702 941 6 -a 702 70 1 -a 702 3 1 -a 702 487 8 -a 702 269 9 -a 702 76 4 -a 702 554 3 -a 702 231 2 -a 702 735 1 -a 703 598 5 -a 703 280 10 -a 703 502 10 -a 703 542 8 -a 703 901 6 -a 703 210 3 -a 703 57 9 -a 703 145 10 -a 703 713 10 -a 703 891 10 -a 703 808 6 -a 704 670 2 -a 704 615 10 -a 704 739 5 -a 704 10 9 -a 704 223 6 -a 704 72 7 -a 704 627 10 -a 704 717 9 -a 704 575 3 -a 704 543 8 -a 704 786 2 -a 704 577 2 -a 704 533 7 -a 704 248 10 -a 704 846 6 -a 704 608 3 -a 704 801 8 -a 704 52 4 -a 704 319 1 -a 704 374 1 -a 704 331 3 -a 704 820 6 -a 705 915 2 -a 705 208 2 -a 705 5 10 -a 705 971 6 -a 705 352 7 -a 705 718 5 -a 705 837 2 -a 705 135 6 -a 705 363 8 -a 705 428 10 -a 705 874 2 -a 705 372 6 -a 705 650 4 -a 705 865 6 -a 705 443 8 -a 705 252 6 -a 705 557 8 -a 705 795 1 -a 705 318 10 -a 706 570 10 -a 706 303 7 -a 706 565 3 -a 706 391 5 -a 706 911 8 -a 706 342 10 -a 706 442 2 -a 706 205 9 -a 706 715 7 -a 706 772 10 -a 706 606 2 -a 706 979 7 -a 706 4 9 -a 706 552 8 -a 706 306 7 -a 706 721 9 -a 706 365 4 -a 706 441 8 -a 706 60 9 -a 706 792 6 -a 706 290 8 -a 707 431 3 -a 707 417 5 -a 707 130 5 -a 707 874 3 -a 707 669 1 -a 707 686 8 -a 707 866 6 -a 707 439 1 -a 707 411 7 -a 707 741 7 -a 707 543 8 -a 707 801 8 -a 707 627 8 -a 707 884 3 -a 707 218 5 -a 707 831 6 -a 707 575 1 -a 708 990 4 -a 708 830 9 -a 708 156 5 -a 708 944 1 -a 708 834 10 -a 708 707 4 -a 708 226 8 -a 708 530 1 -a 708 47 3 -a 708 666 5 -a 708 589 2 -a 708 838 3 -a 708 955 10 -a 708 231 3 -a 708 60 1 -a 708 869 6 -a 708 899 1 -a 709 745 3 -a 709 710 9 -a 709 313 2 -a 709 723 1 -a 709 97 9 -a 709 29 5 -a 709 241 5 -a 709 897 8 -a 709 656 7 -a 709 101 10 -a 709 91 10 -a 709 462 5 -a 709 675 3 -a 709 56 7 -a 709 268 8 -a 709 830 2 -a 709 999 4 -a 709 77 5 -a 709 512 4 -a 709 200 10 -a 710 606 8 -a 710 559 9 -a 710 865 8 -a 710 171 9 -a 710 372 5 -a 710 795 8 -a 710 166 2 -a 710 602 2 -a 710 854 2 -a 710 10 6 -a 710 476 6 -a 710 574 6 -a 710 719 4 -a 710 788 1 -a 710 272 9 -a 710 815 8 -a 710 817 10 -a 710 513 7 -a 710 688 2 -a 710 448 5 -a 710 613 4 -a 710 778 7 -a 710 909 8 -a 711 263 5 -a 711 833 1 -a 711 152 6 -a 711 68 9 -a 711 807 3 -a 711 228 3 -a 711 579 3 -a 711 834 8 -a 711 113 6 -a 711 847 5 -a 711 485 9 -a 711 618 4 -a 711 145 3 -a 711 62 3 -a 711 447 5 -a 711 154 10 -a 711 538 5 -a 711 872 4 -a 712 301 6 -a 712 268 4 -a 712 663 2 -a 712 93 9 -a 712 780 10 -a 712 326 3 -a 712 540 2 -a 712 368 10 -a 712 79 2 -a 713 425 1 -a 713 630 9 -a 713 911 1 -a 713 576 10 -a 713 697 4 -a 713 693 1 -a 713 804 2 -a 713 252 4 -a 713 675 4 -a 713 613 10 -a 713 364 8 -a 713 498 7 -a 713 592 9 -a 713 848 4 -a 713 91 9 -a 713 736 10 -a 713 910 10 -a 713 537 10 -a 713 889 10 -a 713 423 4 -a 713 533 8 -a 713 736 7 -a 713 723 3 -a 714 801 8 -a 714 374 7 -a 714 816 1 -a 714 556 9 -a 714 699 7 -a 714 331 9 -a 714 924 9 -a 714 777 6 -a 714 755 8 -a 714 529 8 -a 714 663 1 -a 714 307 6 -a 714 202 9 -a 714 332 3 -a 714 86 6 -a 714 453 3 -a 714 698 10 -a 714 816 4 -a 714 479 5 -a 715 265 8 -a 715 640 6 -a 715 569 4 -a 715 1000 4 -a 715 525 9 -a 715 82 4 -a 715 864 7 -a 715 947 6 -a 715 614 3 -a 715 575 8 -a 715 645 3 -a 715 390 7 -a 715 949 9 -a 715 436 4 -a 715 946 2 -a 716 623 3 -a 716 767 4 -a 716 845 5 -a 716 376 4 -a 716 497 4 -a 716 349 9 -a 716 14 8 -a 716 803 6 -a 716 550 10 -a 716 345 4 -a 716 888 1 -a 716 327 1 -a 716 561 1 -a 716 794 7 -a 716 805 9 -a 717 825 3 -a 717 409 6 -a 717 350 2 -a 717 800 1 -a 717 933 5 -a 717 431 4 -a 717 639 5 -a 717 855 3 -a 717 20 7 -a 717 190 6 -a 717 475 4 -a 717 410 1 -a 717 114 6 -a 717 911 6 -a 717 331 3 -a 717 736 5 -a 717 653 3 -a 717 151 3 -a 717 87 2 -a 717 125 6 -a 717 499 9 -a 717 101 4 -a 717 928 1 -a 717 25 5 -a 718 445 3 -a 718 791 10 -a 718 2 3 -a 718 771 2 -a 718 328 5 -a 718 795 9 -a 718 552 1 -a 718 128 7 -a 718 179 2 -a 718 901 1 -a 718 928 2 -a 718 87 1 -a 718 307 4 -a 718 542 3 -a 718 941 2 -a 718 326 4 -a 718 731 4 -a 718 392 7 -a 718 735 3 -a 719 844 8 -a 719 278 8 -a 719 41 7 -a 719 556 1 -a 719 930 8 -a 719 191 5 -a 719 642 2 -a 719 30 3 -a 719 690 9 -a 719 742 5 -a 719 957 9 -a 719 714 1 -a 719 163 8 -a 719 724 4 -a 719 715 3 -a 719 933 4 -a 719 27 10 -a 719 486 5 -a 719 460 1 -a 719 154 8 -a 719 664 7 -a 719 336 8 -a 719 57 5 -a 719 751 4 -a 719 642 3 -a 720 599 1 -a 720 667 4 -a 720 968 8 -a 720 305 7 -a 720 34 7 -a 720 678 9 -a 720 125 1 -a 720 311 10 -a 720 719 10 -a 720 680 7 -a 720 216 7 -a 720 909 2 -a 720 297 1 -a 720 246 2 -a 720 574 3 -a 720 15 1 -a 720 178 8 -a 720 263 3 -a 720 177 8 -a 720 901 5 -a 720 978 7 -a 720 85 8 -a 720 927 8 -a 720 439 8 -a 720 545 5 -a 720 57 9 -a 720 78 1 -a 720 880 1 -a 721 113 4 -a 721 828 10 -a 721 498 7 -a 721 711 3 -a 721 471 9 -a 721 441 8 -a 721 504 4 -a 721 94 10 -a 721 116 3 -a 721 815 6 -a 721 812 10 -a 721 795 10 -a 721 6 9 -a 721 697 6 -a 721 67 1 -a 721 251 8 -a 721 246 4 -a 722 81 6 -a 722 429 4 -a 722 509 10 -a 722 257 6 -a 722 305 8 -a 722 462 2 -a 722 342 10 -a 722 208 2 -a 722 900 10 -a 722 886 3 -a 722 264 6 -a 722 977 3 -a 722 741 5 -a 722 376 6 -a 722 781 8 -a 722 214 9 -a 722 63 3 -a 722 227 10 -a 722 654 10 -a 722 54 8 -a 722 730 5 -a 723 748 10 -a 723 169 9 -a 723 520 4 -a 723 535 2 -a 723 963 7 -a 723 526 6 -a 723 207 2 -a 723 5 3 -a 723 776 4 -a 723 453 8 -a 723 86 9 -a 723 180 9 -a 723 961 5 -a 723 342 8 -a 723 485 3 -a 723 398 6 -a 723 683 8 -a 723 692 9 -a 723 273 8 -a 723 544 7 -a 723 955 1 -a 723 225 5 -a 724 261 4 -a 724 306 9 -a 724 474 7 -a 724 368 8 -a 724 207 9 -a 724 104 3 -a 724 421 10 -a 724 937 5 -a 724 851 8 -a 724 589 5 -a 724 432 1 -a 724 361 7 -a 724 527 7 -a 724 957 7 -a 724 568 4 -a 724 532 6 -a 724 709 7 -a 724 617 10 -a 724 888 9 -a 724 956 2 -a 724 958 7 -a 724 348 8 -a 724 329 1 -a 724 617 5 -a 724 15 2 -a 724 601 2 -a 725 136 1 -a 725 969 8 -a 725 825 7 -a 725 396 3 -a 725 251 9 -a 725 806 2 -a 725 870 4 -a 725 618 3 -a 725 973 4 -a 725 15 10 -a 725 924 10 -a 725 799 2 -a 725 603 1 -a 725 332 9 -a 725 135 1 -a 725 106 6 -a 725 264 4 -a 725 702 7 -a 726 637 3 -a 726 972 6 -a 726 697 5 -a 726 229 2 -a 726 836 5 -a 726 628 10 -a 726 162 2 -a 726 159 10 -a 726 956 6 -a 726 778 6 -a 726 174 3 -a 726 532 7 -a 726 914 4 -a 726 118 7 -a 726 333 2 -a 726 285 4 -a 726 368 4 -a 726 114 1 -a 726 130 1 -a 726 986 2 -a 726 101 3 -a 726 78 5 -a 726 1000 6 -a 727 1 2 -a 727 876 7 -a 727 578 3 -a 727 332 1 -a 727 683 1 -a 727 595 10 -a 727 688 2 -a 727 295 8 -a 727 543 4 -a 727 361 9 -a 727 523 3 -a 727 354 7 -a 727 988 6 -a 727 685 3 -a 727 512 6 -a 727 920 1 -a 727 438 1 -a 727 685 1 -a 727 427 2 -a 727 327 4 -a 728 803 4 -a 728 759 7 -a 728 612 5 -a 728 146 10 -a 728 872 9 -a 728 741 5 -a 728 107 4 -a 728 973 10 -a 728 819 3 -a 728 82 1 -a 728 973 8 -a 728 670 1 -a 728 660 5 -a 728 280 6 -a 728 656 3 -a 728 318 6 -a 728 874 2 -a 728 320 7 -a 728 613 1 -a 728 392 10 -a 728 680 4 -a 728 111 2 -a 728 745 2 -a 728 643 4 -a 729 795 1 -a 729 233 6 -a 729 538 5 -a 729 209 9 -a 729 917 8 -a 729 965 2 -a 729 535 7 -a 729 695 7 -a 729 699 2 -a 729 122 5 -a 729 841 5 -a 729 547 2 -a 729 863 6 -a 729 947 8 -a 729 495 6 -a 729 657 10 -a 729 5 1 -a 729 443 9 -a 729 302 5 -a 729 664 6 -a 729 722 5 -a 729 958 9 -a 729 981 4 -a 730 571 3 -a 730 253 2 -a 730 569 5 -a 730 963 10 -a 730 932 4 -a 730 680 1 -a 730 683 5 -a 730 550 5 -a 730 450 9 -a 730 915 10 -a 730 64 8 -a 730 658 4 -a 730 808 4 -a 730 4 2 -a 730 169 4 -a 730 478 1 -a 730 702 1 -a 730 290 2 -a 730 294 5 -a 730 224 10 -a 730 128 8 -a 730 217 7 -a 730 718 10 -a 731 784 9 -a 731 221 4 -a 731 136 8 -a 731 62 4 -a 731 884 9 -a 731 857 6 -a 731 840 7 -a 731 404 10 -a 731 247 3 -a 731 385 6 -a 731 342 10 -a 731 154 4 -a 731 40 7 -a 731 703 3 -a 731 489 4 -a 731 915 3 -a 731 766 10 -a 731 123 3 -a 732 698 7 -a 732 769 4 -a 732 291 3 -a 732 151 5 -a 732 447 5 -a 732 580 10 -a 732 445 10 -a 732 670 3 -a 732 708 3 -a 732 661 5 -a 732 364 1 -a 732 467 4 -a 732 881 9 -a 732 499 4 -a 732 528 8 -a 732 740 10 -a 732 332 2 -a 732 522 7 -a 732 555 6 -a 732 735 6 -a 732 768 7 -a 732 939 10 -a 732 52 6 -a 732 921 3 -a 732 978 2 -a 733 51 8 -a 733 600 3 -a 733 443 9 -a 733 965 10 -a 733 341 1 -a 733 565 6 -a 733 638 8 -a 733 86 3 -a 733 855 6 -a 733 789 5 -a 733 532 9 -a 733 410 5 -a 733 209 9 -a 733 177 5 -a 733 93 1 -a 734 869 10 -a 734 540 3 -a 734 560 8 -a 734 725 8 -a 734 15 7 -a 734 63 7 -a 734 440 7 -a 734 346 3 -a 734 585 7 -a 734 994 5 -a 734 56 1 -a 734 328 4 -a 734 909 1 -a 734 107 9 -a 734 225 9 -a 734 862 7 -a 734 157 10 -a 735 824 6 -a 735 280 2 -a 735 98 7 -a 735 140 3 -a 735 844 9 -a 735 735 5 -a 735 225 1 -a 735 674 8 -a 735 499 7 -a 735 756 7 -a 735 60 7 -a 736 707 4 -a 736 933 7 -a 736 152 4 -a 736 551 9 -a 736 448 2 -a 736 711 2 -a 736 251 1 -a 736 462 1 -a 736 774 8 -a 736 690 10 -a 736 807 7 -a 736 334 8 -a 736 660 1 -a 736 862 6 -a 736 661 9 -a 736 544 7 -a 736 968 1 -a 736 885 7 -a 737 381 9 -a 737 101 5 -a 737 684 5 -a 737 661 1 -a 737 198 4 -a 737 824 2 -a 737 480 4 -a 737 932 3 -a 737 24 5 -a 737 130 3 -a 737 407 9 -a 737 780 9 -a 737 189 7 -a 737 89 4 -a 737 688 8 -a 737 340 3 -a 737 640 5 -a 737 111 6 -a 737 27 9 -a 737 890 6 -a 737 573 1 -a 737 800 6 -a 737 556 6 -a 737 355 4 -a 738 109 7 -a 738 191 9 -a 738 193 10 -a 738 769 8 -a 738 734 3 -a 738 136 8 -a 738 630 1 -a 738 90 2 -a 738 236 1 -a 738 289 9 -a 738 750 4 -a 738 433 1 -a 738 88 9 -a 738 206 7 -a 739 341 3 -a 739 112 8 -a 739 335 1 -a 739 747 9 -a 739 891 8 -a 739 523 5 -a 739 835 10 -a 739 554 3 -a 739 862 10 -a 739 450 7 -a 739 664 8 -a 739 888 9 -a 739 316 6 -a 739 212 3 -a 739 663 8 -a 739 871 6 -a 740 567 7 -a 740 771 4 -a 740 37 7 -a 740 759 3 -a 740 516 2 -a 740 770 2 -a 740 894 3 -a 740 121 5 -a 740 859 6 -a 740 106 10 -a 740 409 3 -a 740 585 5 -a 740 538 5 -a 740 497 4 -a 740 790 7 -a 740 878 6 -a 740 608 10 -a 740 100 9 -a 740 600 8 -a 740 474 1 -a 740 622 4 -a 740 411 10 -a 741 3 5 -a 741 459 6 -a 741 860 5 -a 741 666 4 -a 741 323 7 -a 741 151 6 -a 741 878 6 -a 741 985 1 -a 741 420 10 -a 741 732 4 -a 741 33 7 -a 741 154 8 -a 741 223 9 -a 741 802 2 -a 741 23 7 -a 742 343 3 -a 742 637 10 -a 742 128 6 -a 742 751 1 -a 742 197 6 -a 742 666 8 -a 742 223 9 -a 742 986 2 -a 742 519 4 -a 742 830 6 -a 742 61 7 -a 742 95 5 -a 742 279 5 -a 742 682 5 -a 742 505 3 -a 742 281 7 -a 743 116 10 -a 743 340 5 -a 743 947 7 -a 743 438 1 -a 743 491 6 -a 743 800 8 -a 743 399 3 -a 743 487 1 -a 743 195 2 -a 743 106 6 -a 743 520 8 -a 743 348 4 -a 743 328 3 -a 743 297 9 -a 743 370 4 -a 743 670 2 -a 743 933 3 -a 743 498 6 -a 743 396 5 -a 743 105 9 -a 743 139 6 -a 743 619 5 -a 743 66 9 -a 743 657 3 -a 743 424 4 -a 743 126 3 -a 743 751 8 -a 744 703 10 -a 744 807 1 -a 744 231 10 -a 744 983 10 -a 744 923 2 -a 744 571 10 -a 744 905 9 -a 744 336 5 -a 744 37 2 -a 744 680 8 -a 744 734 5 -a 744 523 6 -a 744 874 6 -a 744 839 2 -a 744 18 3 -a 744 197 8 -a 745 142 4 -a 745 315 1 -a 745 567 5 -a 745 811 4 -a 745 223 10 -a 745 40 6 -a 745 183 8 -a 745 328 10 -a 745 178 5 -a 745 801 10 -a 745 393 6 -a 745 834 6 -a 745 200 5 -a 745 519 6 -a 745 561 1 -a 745 902 10 -a 745 301 5 -a 745 791 6 -a 745 861 9 -a 745 199 10 -a 745 337 4 -a 745 741 8 -a 745 535 4 -a 746 373 2 -a 746 397 7 -a 746 244 8 -a 746 896 4 -a 746 246 5 -a 746 59 1 -a 746 913 8 -a 746 443 4 -a 746 200 3 -a 746 203 3 -a 746 426 3 -a 746 24 3 -a 746 169 8 -a 746 753 1 -a 746 201 7 -a 746 969 6 -a 746 121 3 -a 746 10 9 -a 747 144 6 -a 747 639 9 -a 747 570 10 -a 747 22 5 -a 747 940 4 -a 747 337 1 -a 747 882 8 -a 747 114 9 -a 747 673 1 -a 747 598 6 -a 747 648 9 -a 747 22 1 -a 747 994 3 -a 747 892 9 -a 747 917 3 -a 747 216 10 -a 747 950 9 -a 747 805 6 -a 747 658 5 -a 747 125 5 -a 747 642 1 -a 747 111 8 -a 747 409 5 -a 747 665 1 -a 747 279 6 -a 747 137 3 -a 748 865 9 -a 748 223 6 -a 748 257 1 -a 748 874 4 -a 748 367 7 -a 748 896 4 -a 748 420 10 -a 748 388 2 -a 748 811 7 -a 748 756 3 -a 748 245 4 -a 748 924 6 -a 748 404 6 -a 748 842 5 -a 748 548 7 -a 748 425 7 -a 748 812 9 -a 748 415 5 -a 748 317 6 -a 748 3 10 -a 748 340 3 -a 748 98 9 -a 749 660 6 -a 749 464 10 -a 749 81 3 -a 749 277 1 -a 749 575 8 -a 749 489 10 -a 749 941 3 -a 749 853 1 -a 749 625 6 -a 749 781 4 -a 749 52 7 -a 749 881 6 -a 749 630 7 -a 749 418 6 -a 749 752 8 -a 749 25 4 -a 749 805 7 -a 749 538 2 -a 749 780 2 -a 749 25 9 -a 749 438 7 -a 749 160 9 -a 749 866 2 -a 749 985 8 -a 750 584 7 -a 750 653 3 -a 750 375 5 -a 750 901 9 -a 750 655 7 -a 750 714 9 -a 750 998 5 -a 750 290 4 -a 750 153 1 -a 750 54 7 -a 750 566 4 -a 750 727 3 -a 750 542 10 -a 750 482 5 -a 750 556 6 -a 751 142 4 -a 751 238 7 -a 751 607 8 -a 751 868 3 -a 751 750 9 -a 751 892 4 -a 751 804 1 -a 751 263 2 -a 751 648 7 -a 751 828 9 -a 751 700 2 -a 751 807 4 -a 751 669 3 -a 751 660 8 -a 751 366 6 -a 751 298 8 -a 752 10 1 -a 752 242 2 -a 752 952 7 -a 752 723 9 -a 752 215 5 -a 752 218 7 -a 752 876 4 -a 752 268 4 -a 752 783 7 -a 752 578 2 -a 753 809 8 -a 753 241 6 -a 753 109 4 -a 753 950 7 -a 753 478 6 -a 753 715 2 -a 753 948 5 -a 753 321 5 -a 753 714 10 -a 753 673 1 -a 753 189 7 -a 753 493 8 -a 753 935 1 -a 753 836 4 -a 753 296 9 -a 753 611 7 -a 753 618 2 -a 753 965 9 -a 753 246 10 -a 753 983 6 -a 753 238 5 -a 754 256 9 -a 754 201 1 -a 754 165 6 -a 754 978 6 -a 754 415 10 -a 754 382 4 -a 754 829 10 -a 754 683 3 -a 754 141 10 -a 754 383 6 -a 754 467 4 -a 754 381 4 -a 754 491 5 -a 754 393 10 -a 754 858 1 -a 754 182 4 -a 754 316 1 -a 754 155 4 -a 754 895 6 -a 754 988 2 -a 754 343 6 -a 754 364 7 -a 754 898 9 -a 754 154 5 -a 754 659 9 -a 754 484 4 -a 754 771 8 -a 754 599 2 -a 754 730 8 -a 754 729 8 -a 754 836 10 -a 755 985 8 -a 755 929 8 -a 755 938 4 -a 755 320 8 -a 755 358 1 -a 755 743 9 -a 755 498 6 -a 755 101 1 -a 755 444 8 -a 755 878 9 -a 755 591 5 -a 755 836 6 -a 755 712 3 -a 755 772 3 -a 755 127 8 -a 755 866 4 -a 755 643 7 -a 755 90 2 -a 755 184 5 -a 755 988 10 -a 755 337 4 -a 755 640 10 -a 755 447 2 -a 755 83 4 -a 755 215 2 -a 755 152 1 -a 755 811 3 -a 755 26 8 -a 755 112 9 -a 756 716 2 -a 756 2 6 -a 756 26 4 -a 756 11 8 -a 756 360 3 -a 756 768 5 -a 756 857 6 -a 756 868 4 -a 756 431 6 -a 756 711 10 -a 756 434 6 -a 756 243 3 -a 756 398 9 -a 756 182 6 -a 756 369 6 -a 756 239 8 -a 756 824 1 -a 756 459 5 -a 757 422 8 -a 757 805 9 -a 757 422 1 -a 757 758 8 -a 757 420 10 -a 757 868 9 -a 757 840 10 -a 757 634 8 -a 757 626 4 -a 757 660 1 -a 757 107 8 -a 757 317 1 -a 757 661 10 -a 757 132 3 -a 757 327 2 -a 757 899 2 -a 757 314 8 -a 757 853 9 -a 757 742 8 -a 758 745 5 -a 758 539 3 -a 758 152 9 -a 758 987 3 -a 758 936 1 -a 758 333 10 -a 758 331 3 -a 758 150 5 -a 758 132 3 -a 758 789 6 -a 758 571 8 -a 759 936 6 -a 759 186 1 -a 759 304 8 -a 759 331 8 -a 759 30 9 -a 759 119 4 -a 759 965 2 -a 759 25 4 -a 759 744 4 -a 759 600 2 -a 759 131 6 -a 759 37 7 -a 759 236 1 -a 759 263 1 -a 759 363 9 -a 759 232 6 -a 759 137 8 -a 759 677 7 -a 759 60 7 -a 759 879 4 -a 759 397 9 -a 760 598 1 -a 760 6 4 -a 760 359 8 -a 760 509 5 -a 760 338 2 -a 760 689 2 -a 760 658 9 -a 760 469 3 -a 760 454 5 -a 760 204 9 -a 760 380 5 -a 760 639 2 -a 760 507 10 -a 760 710 4 -a 760 668 8 -a 760 625 4 -a 760 650 10 -a 760 692 10 -a 760 344 3 -a 761 225 6 -a 761 823 10 -a 761 380 1 -a 761 461 4 -a 761 61 2 -a 761 743 8 -a 761 692 6 -a 761 197 6 -a 761 395 9 -a 761 751 10 -a 761 51 8 -a 761 791 1 -a 761 324 3 -a 761 56 2 -a 761 125 7 -a 761 832 6 -a 761 393 9 -a 761 813 10 -a 761 465 4 -a 761 861 5 -a 761 242 9 -a 762 668 2 -a 762 216 7 -a 762 881 7 -a 762 150 8 -a 762 926 8 -a 762 524 4 -a 762 774 6 -a 762 551 8 -a 762 192 3 -a 762 93 3 -a 762 776 10 -a 762 473 10 -a 762 212 4 -a 762 50 7 -a 762 191 5 -a 762 903 2 -a 762 246 7 -a 762 585 1 -a 762 629 1 -a 762 297 9 -a 762 351 2 -a 762 952 2 -a 763 352 6 -a 763 475 9 -a 763 759 9 -a 763 745 1 -a 763 263 4 -a 763 199 5 -a 763 581 10 -a 763 505 2 -a 763 866 3 -a 763 797 7 -a 763 361 5 -a 763 698 10 -a 763 884 3 -a 763 764 10 -a 763 224 7 -a 763 51 4 -a 763 856 7 -a 763 999 4 -a 764 40 7 -a 764 304 8 -a 764 186 8 -a 764 89 10 -a 764 494 2 -a 764 64 3 -a 764 335 2 -a 764 54 1 -a 764 692 6 -a 764 631 9 -a 764 404 8 -a 764 619 5 -a 764 982 2 -a 764 878 4 -a 765 353 6 -a 765 702 5 -a 765 117 10 -a 765 551 4 -a 765 259 4 -a 765 621 10 -a 765 392 3 -a 765 31 8 -a 765 981 7 -a 765 382 1 -a 765 728 9 -a 765 840 2 -a 765 121 3 -a 765 951 2 -a 765 891 7 -a 765 977 4 -a 765 926 7 -a 765 930 5 -a 765 256 10 -a 766 87 1 -a 766 750 9 -a 766 151 4 -a 766 329 6 -a 766 803 9 -a 766 842 7 -a 766 959 9 -a 766 183 1 -a 766 437 6 -a 766 916 4 -a 766 36 1 -a 766 789 6 -a 766 594 2 -a 766 152 6 -a 766 316 5 -a 766 852 9 -a 766 772 9 -a 766 707 3 -a 766 882 4 -a 766 728 3 -a 767 65 6 -a 767 585 7 -a 767 544 6 -a 767 185 10 -a 767 511 4 -a 767 410 3 -a 767 137 3 -a 767 412 5 -a 767 315 1 -a 767 393 10 -a 767 499 3 -a 768 309 10 -a 768 118 8 -a 768 649 8 -a 768 637 3 -a 768 920 5 -a 768 466 6 -a 768 571 6 -a 768 78 2 -a 768 902 10 -a 768 463 8 -a 768 114 7 -a 768 667 5 -a 768 32 1 -a 768 265 5 -a 768 982 4 -a 768 883 8 -a 768 13 10 -a 768 664 2 -a 768 740 9 -a 768 740 2 -a 768 728 2 -a 768 300 8 -a 769 259 4 -a 769 913 6 -a 769 810 7 -a 769 668 8 -a 769 25 1 -a 769 198 2 -a 769 983 6 -a 769 417 5 -a 769 696 8 -a 769 267 5 -a 769 534 9 -a 769 320 8 -a 769 904 10 -a 769 430 6 -a 769 785 1 -a 769 450 3 -a 769 507 10 -a 769 663 10 -a 769 912 5 -a 769 620 3 -a 769 305 4 -a 769 943 6 -a 769 885 4 -a 770 262 9 -a 770 801 4 -a 770 897 4 -a 770 925 6 -a 770 516 6 -a 770 612 7 -a 770 629 8 -a 770 815 7 -a 770 871 4 -a 770 517 6 -a 770 601 9 -a 770 514 9 -a 770 541 1 -a 770 798 9 -a 770 472 10 -a 770 958 3 -a 770 469 6 -a 770 739 5 -a 770 467 1 -a 770 788 1 -a 770 618 1 -a 770 896 1 -a 771 548 6 -a 771 43 1 -a 771 379 2 -a 771 186 10 -a 771 955 4 -a 771 998 9 -a 771 490 4 -a 771 873 9 -a 771 858 3 -a 771 751 4 -a 771 650 4 -a 771 730 7 -a 771 652 3 -a 771 141 4 -a 771 318 3 -a 771 256 3 -a 771 956 4 -a 771 164 8 -a 771 772 9 -a 771 532 10 -a 771 677 3 -a 771 288 8 -a 771 305 8 -a 772 125 6 -a 772 221 7 -a 772 773 1 -a 772 863 3 -a 772 688 5 -a 772 536 2 -a 772 456 2 -a 772 559 5 -a 772 59 5 -a 772 498 4 -a 772 937 3 -a 772 245 4 -a 772 428 1 -a 772 911 5 -a 772 734 9 -a 772 277 9 -a 772 744 4 -a 772 461 1 -a 773 926 1 -a 773 450 3 -a 773 88 9 -a 773 42 5 -a 773 767 8 -a 773 343 8 -a 773 997 8 -a 773 930 9 -a 773 90 6 -a 773 504 10 -a 773 582 7 -a 773 377 10 -a 773 808 7 -a 773 706 2 -a 773 598 6 -a 773 556 5 -a 773 544 2 -a 774 261 2 -a 774 67 3 -a 774 999 10 -a 774 819 6 -a 774 126 3 -a 774 473 3 -a 774 732 7 -a 774 370 4 -a 774 900 10 -a 774 618 1 -a 774 79 4 -a 774 152 9 -a 774 337 1 -a 774 539 3 -a 774 53 2 -a 774 786 7 -a 774 626 2 -a 774 95 2 -a 774 528 1 -a 774 968 7 -a 774 67 5 -a 775 433 9 -a 775 33 6 -a 775 571 3 -a 775 410 5 -a 775 354 9 -a 775 696 7 -a 775 910 9 -a 775 216 5 -a 775 243 6 -a 775 976 8 -a 775 190 5 -a 775 37 6 -a 775 77 10 -a 775 662 7 -a 776 768 5 -a 776 446 6 -a 776 538 6 -a 776 361 6 -a 776 525 10 -a 776 689 10 -a 776 698 5 -a 776 39 9 -a 776 742 7 -a 776 459 3 -a 776 665 6 -a 776 836 4 -a 776 987 1 -a 776 608 6 -a 776 902 4 -a 776 395 2 -a 776 641 1 -a 776 448 5 -a 776 385 8 -a 777 26 10 -a 777 802 10 -a 777 57 2 -a 777 8 7 -a 777 687 9 -a 777 272 9 -a 777 250 5 -a 777 638 5 -a 777 461 6 -a 777 286 7 -a 777 715 10 -a 777 99 9 -a 777 30 1 -a 777 136 10 -a 777 636 9 -a 777 390 6 -a 777 660 6 -a 777 300 1 -a 778 63 8 -a 778 699 7 -a 778 17 1 -a 778 522 6 -a 778 339 10 -a 778 852 6 -a 778 484 4 -a 778 946 5 -a 778 730 4 -a 778 878 2 -a 778 562 1 -a 778 153 9 -a 778 239 8 -a 778 587 1 -a 778 954 9 -a 778 295 4 -a 778 594 10 -a 779 616 8 -a 779 566 5 -a 779 843 4 -a 779 230 2 -a 779 2 10 -a 779 105 9 -a 779 944 5 -a 779 100 10 -a 779 134 9 -a 779 55 6 -a 779 735 7 -a 779 523 5 -a 779 715 9 -a 779 11 8 -a 779 586 5 -a 779 389 1 -a 779 27 2 -a 779 83 7 -a 779 727 2 -a 779 879 5 -a 779 566 2 -a 779 648 9 -a 779 584 2 -a 780 419 9 -a 780 186 9 -a 780 736 4 -a 780 657 8 -a 780 772 8 -a 780 666 3 -a 780 951 9 -a 780 342 4 -a 780 257 8 -a 780 492 8 -a 780 160 1 -a 780 486 6 -a 780 494 1 -a 780 264 4 -a 780 405 2 -a 780 593 4 -a 780 397 5 -a 780 460 8 -a 780 304 3 -a 780 920 4 -a 780 150 2 -a 780 314 1 -a 781 481 10 -a 781 538 2 -a 781 340 9 -a 781 563 8 -a 781 240 9 -a 781 194 9 -a 781 104 5 -a 781 887 9 -a 781 777 10 -a 781 522 10 -a 781 48 6 -a 781 489 8 -a 781 155 7 -a 781 820 10 -a 781 130 8 -a 781 81 9 -a 781 137 6 -a 781 386 6 -a 781 573 9 -a 781 296 8 -a 781 872 7 -a 781 42 9 -a 781 560 4 -a 781 252 2 -a 782 634 10 -a 782 956 6 -a 782 711 5 -a 782 937 10 -a 782 851 4 -a 782 860 3 -a 782 226 4 -a 782 307 3 -a 782 373 2 -a 782 566 6 -a 782 869 7 -a 782 612 8 -a 782 759 4 -a 782 972 4 -a 782 475 3 -a 782 512 2 -a 783 470 10 -a 783 522 10 -a 783 1000 8 -a 783 624 3 -a 783 317 6 -a 783 105 4 -a 783 704 9 -a 783 453 9 -a 783 490 8 -a 783 252 8 -a 783 749 5 -a 783 337 6 -a 783 293 8 -a 783 284 10 -a 783 589 2 -a 783 927 3 -a 783 215 6 -a 783 275 7 -a 783 839 8 -a 783 42 4 -a 783 111 3 -a 784 41 9 -a 784 348 6 -a 784 483 3 -a 784 606 6 -a 784 193 1 -a 784 71 4 -a 784 340 9 -a 784 140 7 -a 784 545 4 -a 784 851 5 -a 784 609 5 -a 784 42 3 -a 784 826 6 -a 784 208 1 -a 784 359 9 -a 784 930 6 -a 784 912 5 -a 784 811 3 -a 784 396 8 -a 784 139 2 -a 784 535 8 -a 784 732 4 -a 784 432 4 -a 784 818 8 -a 784 296 3 -a 784 334 6 -a 784 9 10 -a 784 571 2 -a 784 148 4 -a 784 50 2 -a 784 681 6 -a 785 188 8 -a 785 397 4 -a 785 139 8 -a 785 793 2 -a 785 589 4 -a 785 209 7 -a 785 109 6 -a 785 729 7 -a 785 753 2 -a 785 959 1 -a 785 313 5 -a 785 795 9 -a 785 761 4 -a 785 521 10 -a 785 129 8 -a 785 666 1 -a 785 408 1 -a 785 939 4 -a 785 37 3 -a 786 546 2 -a 786 450 3 -a 786 769 4 -a 786 977 1 -a 786 243 10 -a 786 40 6 -a 786 286 10 -a 786 251 7 -a 786 610 8 -a 786 434 7 -a 786 300 3 -a 786 266 8 -a 786 621 10 -a 786 697 3 -a 786 405 10 -a 786 390 3 -a 786 261 3 -a 787 613 5 -a 787 498 3 -a 787 989 1 -a 787 342 7 -a 787 432 3 -a 787 278 2 -a 787 112 4 -a 787 168 3 -a 787 798 4 -a 787 240 5 -a 787 834 3 -a 787 181 8 -a 787 154 10 -a 787 870 7 -a 787 726 8 -a 787 603 8 -a 787 614 9 -a 787 679 1 -a 787 846 10 -a 787 654 5 -a 787 964 6 -a 787 72 3 -a 788 239 9 -a 788 373 8 -a 788 372 4 -a 788 505 8 -a 788 994 8 -a 788 44 7 -a 788 909 7 -a 788 359 10 -a 788 304 6 -a 788 497 7 -a 788 856 8 -a 788 269 1 -a 788 838 10 -a 788 263 1 -a 788 546 4 -a 788 949 4 -a 788 431 9 -a 788 319 4 -a 788 164 4 -a 788 240 9 -a 789 499 9 -a 789 318 6 -a 789 85 5 -a 789 200 5 -a 789 920 7 -a 789 699 3 -a 789 878 4 -a 789 741 4 -a 789 328 8 -a 789 818 2 -a 789 813 5 -a 789 566 2 -a 789 166 1 -a 789 160 2 -a 789 46 4 -a 789 135 10 -a 789 203 4 -a 789 954 9 -a 789 493 10 -a 789 506 9 -a 789 427 3 -a 789 324 1 -a 789 774 9 -a 789 240 5 -a 789 587 2 -a 789 295 2 -a 789 165 8 -a 789 613 6 -a 790 328 2 -a 790 232 7 -a 790 87 6 -a 790 645 3 -a 790 316 6 -a 790 287 1 -a 790 541 3 -a 790 140 9 -a 790 257 6 -a 790 317 8 -a 790 957 7 -a 790 45 1 -a 790 883 1 -a 790 99 9 -a 790 204 3 -a 790 928 5 -a 790 233 3 -a 790 406 10 -a 790 858 7 -a 790 726 7 -a 790 912 8 -a 791 260 9 -a 791 25 10 -a 791 661 3 -a 791 499 6 -a 791 611 4 -a 791 956 8 -a 791 663 7 -a 791 603 4 -a 791 544 3 -a 791 991 5 -a 791 834 5 -a 791 631 9 -a 791 611 7 -a 791 126 5 -a 791 917 6 -a 791 127 5 -a 791 115 9 -a 791 32 10 -a 791 384 1 -a 791 432 2 -a 791 989 6 -a 791 428 4 -a 792 290 1 -a 792 63 1 -a 792 632 9 -a 792 193 4 -a 792 295 3 -a 792 13 3 -a 792 26 8 -a 792 924 5 -a 792 285 10 -a 792 21 7 -a 792 561 4 -a 792 784 9 -a 792 631 5 -a 792 492 1 -a 792 422 3 -a 792 210 1 -a 792 11 5 -a 792 388 3 -a 792 19 4 -a 792 641 5 -a 793 999 3 -a 793 144 8 -a 793 533 7 -a 793 101 2 -a 793 259 6 -a 793 565 9 -a 793 484 1 -a 793 690 8 -a 793 529 7 -a 793 912 3 -a 793 979 6 -a 793 591 4 -a 793 519 2 -a 793 147 9 -a 793 885 8 -a 793 531 2 -a 793 173 5 -a 793 881 3 -a 793 431 7 -a 793 457 6 -a 793 901 3 -a 793 991 10 -a 793 216 2 -a 793 507 9 -a 793 458 1 -a 794 638 10 -a 794 716 2 -a 794 468 10 -a 794 1 7 -a 794 735 7 -a 794 85 6 -a 794 999 9 -a 794 878 1 -a 794 617 2 -a 794 76 7 -a 794 112 4 -a 794 157 4 -a 794 559 5 -a 794 801 9 -a 794 685 7 -a 794 446 8 -a 794 755 7 -a 794 251 10 -a 794 964 4 -a 794 902 8 -a 794 112 9 -a 794 471 5 -a 795 50 1 -a 795 992 10 -a 795 901 8 -a 795 506 4 -a 795 868 1 -a 795 867 10 -a 795 722 1 -a 795 350 4 -a 795 300 9 -a 795 335 6 -a 795 42 1 -a 795 767 7 -a 795 335 8 -a 795 776 10 -a 795 851 7 -a 795 310 1 -a 795 629 7 -a 795 444 10 -a 796 385 2 -a 796 741 1 -a 796 600 2 -a 796 943 9 -a 796 517 10 -a 796 261 9 -a 796 365 1 -a 796 248 7 -a 796 511 3 -a 796 304 9 -a 796 125 8 -a 796 622 9 -a 796 774 2 -a 796 174 10 -a 796 589 9 -a 796 650 2 -a 796 679 10 -a 796 432 6 -a 796 492 9 -a 796 376 3 -a 796 782 1 -a 796 791 10 -a 796 710 4 -a 796 823 6 -a 796 534 9 -a 796 21 8 -a 796 574 1 -a 797 360 8 -a 797 330 6 -a 797 178 3 -a 797 803 1 -a 797 714 2 -a 797 918 8 -a 797 379 10 -a 797 632 9 -a 797 411 9 -a 797 639 8 -a 797 996 2 -a 797 658 1 -a 797 125 9 -a 797 276 6 -a 797 782 1 -a 797 747 6 -a 797 25 10 -a 797 955 1 -a 797 311 4 -a 798 675 5 -a 798 609 10 -a 798 743 8 -a 798 142 5 -a 798 985 8 -a 798 500 8 -a 798 933 10 -a 798 670 3 -a 798 298 8 -a 798 442 5 -a 798 690 5 -a 798 871 8 -a 798 801 5 -a 798 24 5 -a 798 580 5 -a 799 708 5 -a 799 942 3 -a 799 958 4 -a 799 316 3 -a 799 328 3 -a 799 572 10 -a 799 287 6 -a 799 985 6 -a 799 696 8 -a 799 562 4 -a 799 742 3 -a 799 418 3 -a 799 587 6 -a 799 672 2 -a 799 729 10 -a 799 237 7 -a 800 256 7 -a 800 447 1 -a 800 378 2 -a 800 216 8 -a 800 946 10 -a 800 286 6 -a 800 886 4 -a 800 219 8 -a 800 727 2 -a 800 551 1 -a 800 65 3 -a 800 504 5 -a 800 546 9 -a 800 88 5 -a 800 59 5 -a 800 229 2 -a 801 5 3 -a 801 544 9 -a 801 332 9 -a 801 563 7 -a 801 831 8 -a 801 292 2 -a 801 234 4 -a 801 368 9 -a 801 9 5 -a 801 652 3 -a 801 954 9 -a 801 680 5 -a 801 356 10 -a 801 166 8 -a 802 936 3 -a 802 802 2 -a 802 544 4 -a 802 127 8 -a 802 723 6 -a 802 829 9 -a 802 941 8 -a 802 532 2 -a 802 539 3 -a 802 11 3 -a 802 60 10 -a 802 68 3 -a 802 69 2 -a 802 288 5 -a 802 73 5 -a 802 60 1 -a 802 832 5 -a 802 404 2 -a 803 622 3 -a 803 638 10 -a 803 696 9 -a 803 855 5 -a 803 704 1 -a 803 482 10 -a 803 935 5 -a 803 360 8 -a 803 837 4 -a 803 76 6 -a 803 271 7 -a 803 614 4 -a 803 619 4 -a 803 397 1 -a 803 312 9 -a 803 424 4 -a 803 385 10 -a 803 228 8 -a 804 955 10 -a 804 923 7 -a 804 208 3 -a 804 965 2 -a 804 982 10 -a 804 276 2 -a 804 9 8 -a 804 245 9 -a 804 348 3 -a 804 68 3 -a 804 52 1 -a 804 751 7 -a 804 689 6 -a 804 689 1 -a 804 422 5 -a 804 519 3 -a 804 670 2 -a 804 102 9 -a 804 580 6 -a 804 461 10 -a 804 813 2 -a 804 655 8 -a 805 731 7 -a 805 403 5 -a 805 250 3 -a 805 103 9 -a 805 714 4 -a 805 673 1 -a 805 487 8 -a 805 942 3 -a 805 603 4 -a 805 385 5 -a 805 125 7 -a 805 543 10 -a 805 342 1 -a 805 400 6 -a 805 551 8 -a 805 587 10 -a 805 747 5 -a 805 618 7 -a 805 638 4 -a 806 474 2 -a 806 282 3 -a 806 303 4 -a 806 895 9 -a 806 800 1 -a 806 972 6 -a 806 996 6 -a 806 776 10 -a 806 527 6 -a 806 432 1 -a 806 565 8 -a 806 157 6 -a 806 138 5 -a 806 967 1 -a 806 406 5 -a 806 241 4 -a 806 656 7 -a 806 54 6 -a 806 727 8 -a 806 573 6 -a 806 656 3 -a 806 88 3 -a 806 698 8 -a 806 174 3 -a 806 429 9 -a 806 73 2 -a 806 724 10 -a 806 820 10 -a 807 317 10 -a 807 629 5 -a 807 269 10 -a 807 598 8 -a 807 931 4 -a 807 139 2 -a 807 374 9 -a 807 878 2 -a 807 111 10 -a 807 125 10 -a 807 380 1 -a 807 542 1 -a 807 689 10 -a 807 536 2 -a 807 680 10 -a 807 631 8 -a 807 942 9 -a 808 920 8 -a 808 263 4 -a 808 995 5 -a 808 622 6 -a 808 835 9 -a 808 627 5 -a 808 709 1 -a 808 508 1 -a 808 800 6 -a 808 114 2 -a 808 581 10 -a 808 500 8 -a 808 104 10 -a 809 376 1 -a 809 816 9 -a 809 732 10 -a 809 644 2 -a 809 390 7 -a 809 638 3 -a 809 782 4 -a 809 763 9 -a 809 491 8 -a 809 892 8 -a 809 887 8 -a 809 870 8 -a 809 410 8 -a 809 552 1 -a 809 382 6 -a 809 65 6 -a 809 158 3 -a 809 299 4 -a 809 984 9 -a 809 420 8 -a 809 269 3 -a 810 581 7 -a 810 231 8 -a 810 895 5 -a 810 266 8 -a 810 738 5 -a 810 671 4 -a 810 379 5 -a 810 294 7 -a 810 146 2 -a 810 482 7 -a 810 669 7 -a 810 961 2 -a 810 190 9 -a 810 288 6 -a 810 326 5 -a 810 827 6 -a 810 46 1 -a 810 64 9 -a 810 294 4 -a 810 937 3 -a 810 951 9 -a 810 139 7 -a 810 322 7 -a 810 478 5 -a 810 520 4 -a 810 386 10 -a 810 635 2 -a 810 818 4 -a 810 345 6 -a 810 31 5 -a 810 63 5 -a 810 926 1 -a 811 261 2 -a 811 957 4 -a 811 167 6 -a 811 998 9 -a 811 603 4 -a 811 545 5 -a 811 268 1 -a 811 748 9 -a 811 2 3 -a 811 936 1 -a 811 685 9 -a 811 191 1 -a 811 200 3 -a 811 245 10 -a 811 50 1 -a 811 287 3 -a 811 157 5 -a 811 1000 1 -a 811 425 4 -a 811 479 5 -a 811 453 3 -a 811 945 10 -a 812 864 8 -a 812 63 5 -a 812 738 10 -a 812 185 9 -a 812 93 2 -a 812 800 3 -a 812 86 3 -a 812 353 7 -a 812 733 5 -a 812 252 1 -a 812 327 8 -a 812 311 7 -a 812 796 5 -a 812 594 8 -a 813 35 10 -a 813 797 4 -a 813 505 2 -a 813 719 6 -a 813 988 9 -a 813 704 2 -a 813 704 6 -a 813 981 7 -a 813 948 4 -a 813 753 7 -a 813 243 1 -a 813 81 9 -a 813 728 9 -a 813 667 6 -a 813 559 4 -a 813 156 10 -a 813 587 2 -a 813 398 4 -a 813 219 4 -a 813 301 6 -a 813 582 5 -a 813 311 2 -a 813 76 10 -a 813 667 1 -a 813 664 9 -a 813 808 7 -a 814 918 6 -a 814 990 10 -a 814 95 4 -a 814 689 4 -a 814 559 8 -a 814 129 7 -a 814 462 5 -a 814 39 2 -a 814 847 9 -a 814 425 8 -a 814 743 4 -a 814 526 9 -a 814 381 1 -a 814 666 3 -a 814 255 5 -a 814 623 1 -a 814 746 4 -a 814 982 5 -a 814 265 7 -a 814 280 1 -a 814 114 10 -a 814 852 1 -a 814 678 4 -a 814 332 10 -a 814 128 2 -a 814 235 7 -a 814 642 5 -a 814 203 7 -a 815 902 3 -a 815 281 3 -a 815 795 8 -a 815 246 10 -a 815 81 7 -a 815 460 5 -a 815 804 3 -a 815 209 8 -a 815 921 6 -a 815 843 7 -a 815 31 5 -a 815 321 2 -a 815 561 7 -a 815 556 8 -a 816 701 7 -a 816 202 8 -a 816 810 8 -a 816 299 6 -a 816 948 9 -a 816 768 1 -a 816 563 10 -a 816 203 3 -a 816 881 7 -a 816 390 6 -a 816 880 1 -a 816 188 4 -a 816 517 10 -a 816 91 4 -a 816 829 9 -a 816 720 9 -a 816 992 1 -a 816 86 10 -a 816 706 8 -a 816 762 4 -a 816 331 5 -a 816 786 2 -a 816 197 6 -a 816 111 9 -a 816 994 2 -a 816 93 1 -a 817 953 2 -a 817 413 7 -a 817 489 6 -a 817 555 6 -a 817 89 1 -a 817 690 5 -a 817 341 9 -a 817 387 1 -a 817 613 10 -a 817 84 3 -a 817 950 10 -a 817 816 7 -a 817 964 8 -a 817 315 9 -a 817 671 8 -a 817 127 5 -a 817 832 6 -a 817 761 6 -a 817 955 4 -a 818 527 9 -a 818 728 1 -a 818 16 10 -a 818 208 10 -a 818 466 5 -a 818 347 2 -a 818 993 4 -a 818 662 2 -a 818 457 3 -a 818 962 1 -a 818 755 7 -a 818 385 6 -a 818 961 7 -a 818 143 10 -a 818 873 3 -a 818 491 5 -a 818 232 8 -a 818 538 7 -a 818 831 10 -a 818 618 3 -a 818 127 8 -a 818 914 2 -a 819 543 9 -a 819 942 3 -a 819 853 7 -a 819 858 3 -a 819 588 5 -a 819 979 1 -a 819 665 2 -a 819 325 10 -a 819 910 4 -a 819 167 10 -a 819 28 5 -a 819 925 7 -a 819 374 6 -a 819 493 3 -a 819 247 9 -a 819 342 3 -a 819 131 10 -a 819 703 4 -a 819 279 4 -a 819 885 3 -a 819 63 2 -a 820 215 6 -a 820 3 2 -a 820 935 4 -a 820 705 4 -a 820 234 1 -a 820 449 4 -a 820 512 10 -a 820 852 2 -a 820 575 6 -a 820 401 9 -a 820 370 10 -a 820 492 8 -a 820 230 2 -a 820 203 8 -a 820 55 1 -a 820 184 6 -a 820 867 10 -a 820 379 9 -a 820 69 2 -a 820 9 9 -a 820 407 9 -a 820 994 3 -a 820 382 5 -a 820 899 6 -a 820 216 5 -a 820 723 10 -a 821 5 4 -a 821 919 7 -a 821 889 7 -a 821 981 9 -a 821 191 6 -a 821 892 2 -a 821 892 1 -a 821 896 9 -a 821 101 3 -a 821 316 7 -a 821 383 10 -a 821 952 3 -a 821 890 8 -a 821 783 5 -a 821 298 4 -a 821 357 7 -a 821 500 2 -a 821 411 8 -a 821 172 7 -a 821 343 3 -a 821 790 6 -a 821 240 6 -a 821 351 6 -a 821 172 7 -a 821 209 1 -a 821 733 8 -a 821 46 6 -a 821 425 10 -a 822 431 5 -a 822 51 1 -a 822 319 5 -a 822 408 10 -a 822 939 3 -a 822 275 9 -a 822 598 10 -a 822 806 10 -a 822 142 4 -a 822 469 5 -a 822 907 1 -a 822 457 6 -a 822 851 4 -a 822 834 10 -a 822 322 6 -a 822 610 9 -a 822 107 5 -a 822 678 8 -a 823 597 8 -a 823 607 6 -a 823 65 2 -a 823 768 10 -a 823 949 1 -a 823 854 6 -a 823 275 5 -a 823 1 7 -a 823 192 6 -a 823 46 8 -a 823 616 1 -a 823 414 1 -a 823 96 9 -a 823 934 4 -a 823 821 5 -a 823 11 9 -a 823 185 9 -a 823 394 8 -a 823 816 8 -a 823 326 4 -a 823 863 1 -a 823 698 5 -a 824 783 9 -a 824 689 3 -a 824 508 3 -a 824 80 3 -a 824 274 8 -a 824 614 3 -a 824 758 2 -a 824 871 3 -a 824 196 8 -a 824 822 7 -a 824 614 7 -a 824 120 5 -a 824 651 2 -a 824 597 9 -a 824 395 10 -a 824 651 4 -a 824 789 10 -a 824 377 1 -a 824 696 7 -a 824 380 9 -a 825 790 10 -a 825 792 1 -a 825 290 4 -a 825 586 9 -a 825 802 10 -a 825 474 6 -a 825 980 6 -a 825 593 4 -a 825 799 3 -a 825 818 8 -a 825 267 1 -a 825 557 4 -a 825 482 7 -a 825 774 2 -a 825 637 3 -a 825 756 10 -a 825 363 5 -a 825 370 3 -a 825 602 1 -a 825 559 3 -a 825 167 10 -a 826 191 3 -a 826 678 6 -a 826 817 2 -a 826 788 4 -a 826 48 1 -a 826 443 4 -a 826 552 6 -a 826 425 3 -a 826 114 8 -a 826 931 2 -a 826 190 6 -a 826 905 8 -a 826 196 5 -a 826 776 10 -a 826 682 4 -a 826 669 4 -a 826 731 7 -a 826 251 4 -a 826 444 8 -a 826 524 9 -a 826 517 4 -a 827 1000 10 -a 827 266 4 -a 827 612 9 -a 827 736 9 -a 827 628 7 -a 827 981 10 -a 827 313 3 -a 827 162 10 -a 827 123 3 -a 827 504 5 -a 827 840 7 -a 827 939 7 -a 827 267 1 -a 827 887 7 -a 827 357 6 -a 827 818 5 -a 827 287 10 -a 827 471 2 -a 827 724 10 -a 827 477 8 -a 827 351 8 -a 827 920 2 -a 827 228 2 -a 827 9 5 -a 828 564 8 -a 828 958 7 -a 828 259 5 -a 828 457 10 -a 828 775 1 -a 828 983 4 -a 828 437 10 -a 828 16 1 -a 828 570 10 -a 828 149 10 -a 828 643 7 -a 828 527 10 -a 828 461 10 -a 828 805 1 -a 828 649 1 -a 828 964 1 -a 828 620 2 -a 828 564 5 -a 828 206 6 -a 828 482 6 -a 829 920 6 -a 829 769 10 -a 829 366 5 -a 829 723 6 -a 829 221 10 -a 829 717 1 -a 829 618 1 -a 829 448 5 -a 829 725 4 -a 829 157 10 -a 829 381 5 -a 829 983 1 -a 829 140 7 -a 829 837 1 -a 829 733 5 -a 830 98 9 -a 830 249 10 -a 830 748 4 -a 830 667 10 -a 830 397 10 -a 830 366 4 -a 830 169 8 -a 830 858 9 -a 830 146 8 -a 830 818 3 -a 830 797 7 -a 830 765 8 -a 830 357 1 -a 830 223 1 -a 831 252 10 -a 831 991 1 -a 831 618 5 -a 831 699 8 -a 831 187 2 -a 831 310 5 -a 831 292 4 -a 831 634 4 -a 831 10 7 -a 831 449 7 -a 831 992 6 -a 831 588 1 -a 831 826 3 -a 831 700 9 -a 831 685 3 -a 831 50 5 -a 831 423 10 -a 831 327 9 -a 831 447 7 -a 831 788 6 -a 831 496 3 -a 831 280 7 -a 831 934 8 -a 832 289 7 -a 832 52 9 -a 832 674 10 -a 832 645 7 -a 832 30 1 -a 832 896 8 -a 832 896 1 -a 832 7 1 -a 832 862 9 -a 832 489 6 -a 832 705 7 -a 832 24 7 -a 832 798 10 -a 832 997 10 -a 832 657 2 -a 832 807 1 -a 832 421 5 -a 832 646 8 -a 832 774 2 -a 832 447 2 -a 832 449 2 -a 833 668 5 -a 833 497 6 -a 833 871 8 -a 833 994 5 -a 833 943 2 -a 833 635 8 -a 833 465 4 -a 833 198 5 -a 833 544 2 -a 833 753 4 -a 833 249 10 -a 833 193 8 -a 833 373 10 -a 833 279 6 -a 833 65 3 -a 833 245 3 -a 833 285 4 -a 833 926 3 -a 833 733 4 -a 833 989 1 -a 833 950 8 -a 833 507 9 -a 833 961 3 -a 834 582 7 -a 834 289 6 -a 834 357 9 -a 834 204 7 -a 834 39 5 -a 834 340 6 -a 834 650 10 -a 834 487 8 -a 834 122 9 -a 834 334 4 -a 834 977 8 -a 834 40 6 -a 834 968 10 -a 834 417 8 -a 834 237 1 -a 834 487 1 -a 834 146 5 -a 834 486 7 -a 834 679 4 -a 834 518 4 -a 834 764 4 -a 835 743 10 -a 835 762 6 -a 835 24 6 -a 835 645 2 -a 835 471 5 -a 835 570 2 -a 835 977 7 -a 835 949 1 -a 835 127 8 -a 835 241 5 -a 835 281 9 -a 835 330 6 -a 835 279 2 -a 835 621 2 -a 835 980 1 -a 835 766 4 -a 835 603 6 -a 835 77 1 -a 835 75 2 -a 835 555 4 -a 835 117 2 -a 835 18 1 -a 836 972 1 -a 836 353 6 -a 836 504 2 -a 836 93 7 -a 836 838 1 -a 836 158 4 -a 836 610 1 -a 836 577 9 -a 836 901 6 -a 836 348 1 -a 836 600 8 -a 836 521 1 -a 836 818 5 -a 836 588 3 -a 836 66 6 -a 836 770 3 -a 836 512 4 -a 836 192 8 -a 836 792 7 -a 837 522 5 -a 837 265 4 -a 837 388 6 -a 837 477 4 -a 837 6 4 -a 837 991 7 -a 837 553 10 -a 837 80 8 -a 837 521 6 -a 837 669 7 -a 837 97 7 -a 837 468 7 -a 837 600 6 -a 837 560 6 -a 837 835 6 -a 837 757 2 -a 837 146 9 -a 837 388 6 -a 837 633 10 -a 837 493 7 -a 837 987 1 -a 837 129 3 -a 837 286 4 -a 837 550 6 -a 838 194 3 -a 838 31 9 -a 838 37 2 -a 838 386 7 -a 838 16 1 -a 838 829 6 -a 838 907 7 -a 838 280 3 -a 838 192 1 -a 838 359 8 -a 838 285 10 -a 838 158 6 -a 838 911 7 -a 838 364 3 -a 838 679 6 -a 838 556 5 -a 838 460 9 -a 838 122 9 -a 838 553 10 -a 838 35 3 -a 838 682 8 -a 839 363 1 -a 839 792 4 -a 839 827 6 -a 839 750 2 -a 839 400 2 -a 839 295 2 -a 839 713 7 -a 839 529 8 -a 839 580 9 -a 839 238 3 -a 839 722 10 -a 839 610 4 -a 839 275 3 -a 839 83 1 -a 839 625 1 -a 839 79 6 -a 839 989 3 -a 840 905 7 -a 840 270 4 -a 840 323 6 -a 840 165 1 -a 840 428 2 -a 840 210 1 -a 840 529 9 -a 840 82 2 -a 840 765 5 -a 840 988 3 -a 840 203 6 -a 840 293 9 -a 840 884 4 -a 840 655 1 -a 840 790 10 -a 840 686 1 -a 840 381 8 -a 840 165 5 -a 840 980 7 -a 840 69 5 -a 840 693 3 -a 840 535 3 -a 840 306 4 -a 840 391 8 -a 841 120 4 -a 841 580 5 -a 841 473 9 -a 841 745 6 -a 841 658 9 -a 841 438 8 -a 841 625 2 -a 841 928 1 -a 841 760 1 -a 841 789 7 -a 841 331 6 -a 841 969 5 -a 841 293 5 -a 841 412 9 -a 841 709 9 -a 841 257 7 -a 841 614 2 -a 841 255 9 -a 842 474 5 -a 842 632 2 -a 842 20 4 -a 842 135 9 -a 842 184 7 -a 842 91 1 -a 842 56 2 -a 842 877 2 -a 842 625 9 -a 842 361 2 -a 842 243 4 -a 842 745 7 -a 842 941 8 -a 842 715 5 -a 842 465 8 -a 842 574 1 -a 842 128 3 -a 842 65 9 -a 843 477 5 -a 843 888 9 -a 843 853 2 -a 843 807 10 -a 843 832 10 -a 843 122 8 -a 843 194 9 -a 843 517 7 -a 843 378 7 -a 843 808 2 -a 843 493 1 -a 843 632 2 -a 843 257 1 -a 843 100 9 -a 843 651 9 -a 843 391 9 -a 843 87 8 -a 843 834 3 -a 844 481 6 -a 844 142 6 -a 844 686 5 -a 844 82 8 -a 844 503 4 -a 844 928 6 -a 844 826 10 -a 844 419 10 -a 844 619 6 -a 844 266 6 -a 844 992 9 -a 844 746 5 -a 844 330 4 -a 844 445 6 -a 844 609 9 -a 844 158 7 -a 844 227 5 -a 844 417 3 -a 844 279 10 -a 844 421 6 -a 844 933 10 -a 844 656 7 -a 844 204 2 -a 845 401 9 -a 845 263 6 -a 845 460 6 -a 845 501 10 -a 845 913 9 -a 845 850 6 -a 845 587 5 -a 845 723 9 -a 845 307 4 -a 845 729 3 -a 845 384 7 -a 845 388 2 -a 845 207 8 -a 845 288 4 -a 845 189 10 -a 845 625 10 -a 845 906 9 -a 845 454 8 -a 845 592 5 -a 845 627 10 -a 846 783 3 -a 846 12 7 -a 846 212 10 -a 846 940 10 -a 846 239 9 -a 846 628 7 -a 846 195 5 -a 846 659 6 -a 846 536 5 -a 846 850 6 -a 846 862 7 -a 846 936 5 -a 846 89 4 -a 846 297 9 -a 846 412 9 -a 846 122 6 -a 846 999 6 -a 847 699 10 -a 847 428 4 -a 847 703 2 -a 847 59 8 -a 847 815 8 -a 847 909 8 -a 847 346 4 -a 847 509 6 -a 847 227 9 -a 847 432 9 -a 847 76 1 -a 847 853 7 -a 847 190 9 -a 847 88 3 -a 847 40 4 -a 847 106 8 -a 847 326 6 -a 847 667 4 -a 847 300 10 -a 847 984 9 -a 847 178 3 -a 847 125 8 -a 847 821 4 -a 847 90 9 -a 847 213 2 -a 847 93 1 -a 847 501 10 -a 847 190 8 -a 848 214 3 -a 848 475 5 -a 848 888 8 -a 848 642 3 -a 848 153 3 -a 848 946 9 -a 848 432 4 -a 848 37 7 -a 848 267 7 -a 848 411 9 -a 848 545 9 -a 848 493 7 -a 848 842 7 -a 848 621 8 -a 848 322 1 -a 848 8 3 -a 848 708 6 -a 848 361 3 -a 849 113 2 -a 849 9 1 -a 849 4 10 -a 849 412 3 -a 849 992 4 -a 849 181 2 -a 849 536 4 -a 849 788 6 -a 849 270 10 -a 850 749 3 -a 850 880 1 -a 850 771 9 -a 850 938 9 -a 850 69 1 -a 850 221 5 -a 850 801 1 -a 850 710 7 -a 850 374 6 -a 850 723 6 -a 850 118 6 -a 850 410 8 -a 850 989 7 -a 850 528 5 -a 850 955 7 -a 850 458 7 -a 850 345 9 -a 850 551 3 -a 850 779 4 -a 851 352 8 -a 851 234 4 -a 851 115 7 -a 851 464 10 -a 851 242 10 -a 851 118 2 -a 851 875 3 -a 851 209 2 -a 851 299 7 -a 851 387 8 -a 851 996 3 -a 851 568 3 -a 851 111 8 -a 851 851 2 -a 851 314 9 -a 851 24 2 -a 852 919 4 -a 852 535 6 -a 852 824 3 -a 852 605 4 -a 852 908 5 -a 852 522 7 -a 852 722 6 -a 852 293 8 -a 852 487 2 -a 852 225 5 -a 852 223 7 -a 852 944 1 -a 852 569 8 -a 852 773 10 -a 852 698 4 -a 852 921 3 -a 852 812 6 -a 852 360 3 -a 853 223 2 -a 853 930 2 -a 853 211 3 -a 853 431 6 -a 853 204 1 -a 853 597 8 -a 853 402 4 -a 853 771 10 -a 853 707 4 -a 853 228 4 -a 853 61 7 -a 853 730 5 -a 853 123 8 -a 853 595 9 -a 853 529 5 -a 853 727 4 -a 853 478 7 -a 853 27 9 -a 853 424 1 -a 853 770 9 -a 853 513 3 -a 853 648 4 -a 853 993 2 -a 853 432 2 -a 853 192 5 -a 854 741 9 -a 854 105 5 -a 854 88 3 -a 854 723 5 -a 854 916 6 -a 854 448 9 -a 854 945 5 -a 854 821 10 -a 854 658 2 -a 854 352 10 -a 854 230 8 -a 854 753 6 -a 854 771 6 -a 854 936 3 -a 854 981 6 -a 854 831 2 -a 854 641 5 -a 854 79 5 -a 854 401 5 -a 854 145 5 -a 854 805 1 -a 854 878 7 -a 854 171 8 -a 855 204 2 -a 855 623 8 -a 855 683 3 -a 855 851 7 -a 855 591 7 -a 855 90 6 -a 855 18 5 -a 855 308 9 -a 855 194 7 -a 855 106 10 -a 855 6 1 -a 855 86 4 -a 855 553 6 -a 855 950 6 -a 855 906 8 -a 855 186 10 -a 855 277 6 -a 855 906 2 -a 856 415 8 -a 856 6 6 -a 856 652 2 -a 856 326 2 -a 856 986 7 -a 856 458 10 -a 856 966 9 -a 856 40 10 -a 856 858 10 -a 856 86 9 -a 856 844 3 -a 856 711 5 -a 856 257 8 -a 856 23 5 -a 856 309 2 -a 856 939 10 -a 856 873 3 -a 856 900 1 -a 856 5 7 -a 857 890 6 -a 857 183 9 -a 857 198 8 -a 857 995 7 -a 857 188 3 -a 857 283 7 -a 857 523 2 -a 857 113 8 -a 857 165 9 -a 857 708 4 -a 857 390 5 -a 857 46 3 -a 857 98 2 -a 857 395 5 -a 857 697 6 -a 857 423 5 -a 857 356 10 -a 857 130 1 -a 858 364 4 -a 858 395 2 -a 858 987 3 -a 858 450 2 -a 858 214 7 -a 858 673 9 -a 858 706 7 -a 858 236 1 -a 858 981 6 -a 858 620 3 -a 858 84 9 -a 858 856 7 -a 858 624 8 -a 858 973 1 -a 858 14 2 -a 858 822 1 -a 858 944 1 -a 858 201 1 -a 858 80 3 -a 858 442 9 -a 858 314 4 -a 858 244 1 -a 858 126 8 -a 859 703 1 -a 859 289 2 -a 859 223 1 -a 859 73 6 -a 859 985 7 -a 859 646 10 -a 859 428 2 -a 859 90 1 -a 859 822 6 -a 859 52 8 -a 859 434 7 -a 859 11 3 -a 859 724 7 -a 859 115 7 -a 859 246 9 -a 859 681 9 -a 859 735 3 -a 859 329 9 -a 859 512 6 -a 859 334 5 -a 859 277 1 -a 859 526 9 -a 860 131 5 -a 860 196 8 -a 860 726 9 -a 860 211 6 -a 860 638 4 -a 860 15 7 -a 860 454 6 -a 860 763 3 -a 860 717 1 -a 860 743 4 -a 860 985 7 -a 860 789 10 -a 860 703 7 -a 860 606 4 -a 860 192 3 -a 860 793 4 -a 860 591 6 -a 860 844 4 -a 860 544 10 -a 861 115 4 -a 861 244 9 -a 861 200 1 -a 861 849 4 -a 861 572 7 -a 861 711 9 -a 861 158 3 -a 861 849 5 -a 861 212 1 -a 861 289 9 -a 861 20 4 -a 861 938 2 -a 861 499 2 -a 861 657 10 -a 861 952 5 -a 861 952 2 -a 861 395 7 -a 861 645 7 -a 861 670 3 -a 861 356 7 -a 861 409 6 -a 861 349 6 -a 861 961 9 -a 861 601 8 -a 861 117 8 -a 861 527 6 -a 861 589 3 -a 861 960 4 -a 862 527 10 -a 862 588 2 -a 862 479 5 -a 862 641 6 -a 862 831 3 -a 862 678 4 -a 862 465 9 -a 862 379 7 -a 862 365 2 -a 862 622 8 -a 862 203 5 -a 862 576 4 -a 862 910 9 -a 862 222 4 -a 862 489 5 -a 862 384 8 -a 862 879 4 -a 862 417 4 -a 862 312 2 -a 863 249 3 -a 863 37 2 -a 863 981 2 -a 863 604 6 -a 863 445 5 -a 863 305 6 -a 863 541 7 -a 863 21 10 -a 863 421 2 -a 863 43 10 -a 863 610 9 -a 863 357 9 -a 863 569 10 -a 863 173 9 -a 863 835 4 -a 863 185 7 -a 863 489 6 -a 863 649 7 -a 863 357 8 -a 863 853 3 -a 863 247 3 -a 863 559 4 -a 863 404 4 -a 863 132 9 -a 863 781 3 -a 864 893 2 -a 864 516 9 -a 864 635 10 -a 864 285 7 -a 864 827 8 -a 864 883 3 -a 864 321 6 -a 864 783 1 -a 864 463 10 -a 864 765 6 -a 864 64 2 -a 864 786 8 -a 864 484 8 -a 864 21 10 -a 864 371 2 -a 864 840 2 -a 864 590 1 -a 864 543 10 -a 864 651 10 -a 864 774 5 -a 864 521 5 -a 865 115 9 -a 865 399 1 -a 865 878 1 -a 865 967 1 -a 865 645 10 -a 865 412 4 -a 865 346 9 -a 865 776 7 -a 865 168 1 -a 865 214 1 -a 865 267 6 -a 865 802 9 -a 865 498 2 -a 865 69 2 -a 865 661 6 -a 865 818 7 -a 865 852 4 -a 865 99 3 -a 865 559 2 -a 865 915 4 -a 865 77 3 -a 865 320 2 -a 865 374 2 -a 866 97 3 -a 866 690 2 -a 866 190 5 -a 866 686 4 -a 866 208 4 -a 866 840 3 -a 866 436 5 -a 866 728 8 -a 866 954 5 -a 866 834 7 -a 866 581 2 -a 866 896 9 -a 866 454 4 -a 866 993 1 -a 866 217 6 -a 866 205 4 -a 866 136 9 -a 866 431 1 -a 866 472 5 -a 866 938 4 -a 866 928 7 -a 867 540 1 -a 867 574 1 -a 867 722 4 -a 867 367 6 -a 867 672 2 -a 867 256 3 -a 867 257 5 -a 867 748 7 -a 867 575 8 -a 867 631 3 -a 867 844 5 -a 867 240 1 -a 867 820 1 -a 867 506 5 -a 867 447 6 -a 867 635 8 -a 867 941 9 -a 867 150 9 -a 867 564 2 -a 867 750 6 -a 868 731 9 -a 868 435 8 -a 868 179 8 -a 868 699 10 -a 868 651 6 -a 868 383 5 -a 868 834 7 -a 868 57 9 -a 868 854 9 -a 868 747 7 -a 868 985 9 -a 868 370 9 -a 868 296 4 -a 868 682 10 -a 868 736 8 -a 868 967 2 -a 868 937 6 -a 868 993 4 -a 868 690 8 -a 869 487 2 -a 869 599 10 -a 869 510 5 -a 869 726 4 -a 869 394 4 -a 869 148 1 -a 869 4 6 -a 869 931 6 -a 869 297 3 -a 869 567 9 -a 869 656 6 -a 869 3 4 -a 869 834 6 -a 869 701 7 -a 869 627 4 -a 869 192 4 -a 869 511 1 -a 869 684 9 -a 869 22 9 -a 869 233 4 -a 869 644 8 -a 869 391 5 -a 869 529 8 -a 870 301 10 -a 870 102 10 -a 870 471 10 -a 870 213 7 -a 870 70 2 -a 870 137 1 -a 870 699 5 -a 870 668 2 -a 870 646 2 -a 870 400 5 -a 870 37 10 -a 870 636 2 -a 870 547 7 -a 870 40 3 -a 870 542 7 -a 870 843 4 -a 870 606 4 -a 870 173 6 -a 870 846 3 -a 870 582 7 -a 870 522 2 -a 870 185 5 -a 870 173 3 -a 870 8 1 -a 871 868 2 -a 871 194 4 -a 871 241 7 -a 871 487 10 -a 871 584 1 -a 871 769 2 -a 871 787 2 -a 871 686 10 -a 871 215 1 -a 871 999 6 -a 871 755 9 -a 871 351 2 -a 871 673 10 -a 871 399 2 -a 871 996 5 -a 871 48 2 -a 871 435 2 -a 871 607 9 -a 871 594 10 -a 871 475 4 -a 871 124 10 -a 871 412 10 -a 871 56 1 -a 872 296 2 -a 872 233 10 -a 872 638 9 -a 872 277 8 -a 872 755 6 -a 872 822 7 -a 872 450 9 -a 872 762 9 -a 872 665 8 -a 872 643 4 -a 872 127 10 -a 872 203 2 -a 872 746 1 -a 872 913 9 -a 872 888 9 -a 872 961 8 -a 872 887 2 -a 872 618 7 -a 872 287 9 -a 872 535 1 -a 872 259 10 -a 872 582 3 -a 872 427 7 -a 873 865 5 -a 873 151 3 -a 873 901 4 -a 873 989 10 -a 873 562 9 -a 873 956 9 -a 873 260 1 -a 873 795 4 -a 873 569 10 -a 873 537 5 -a 873 525 5 -a 873 366 1 -a 873 986 4 -a 873 262 8 -a 873 6 5 -a 873 604 3 -a 873 240 3 -a 873 132 2 -a 873 806 8 -a 873 985 3 -a 873 20 7 -a 873 669 10 -a 874 921 6 -a 874 906 3 -a 874 263 10 -a 874 184 8 -a 874 416 6 -a 874 254 5 -a 874 442 8 -a 874 997 9 -a 874 680 2 -a 874 282 6 -a 874 123 2 -a 874 556 5 -a 874 246 4 -a 874 685 5 -a 874 488 7 -a 874 506 2 -a 874 455 6 -a 874 32 3 -a 874 18 9 -a 874 979 8 -a 874 398 9 -a 874 216 3 -a 875 403 6 -a 875 582 6 -a 875 455 8 -a 875 535 8 -a 875 364 4 -a 875 416 1 -a 875 554 4 -a 875 8 6 -a 875 312 8 -a 875 436 3 -a 875 270 7 -a 875 495 4 -a 875 851 10 -a 875 524 2 -a 875 936 9 -a 875 824 7 -a 875 179 1 -a 875 194 10 -a 876 946 4 -a 876 735 1 -a 876 439 5 -a 876 606 4 -a 876 198 3 -a 876 944 1 -a 876 36 1 -a 876 229 7 -a 876 961 8 -a 876 626 4 -a 876 939 8 -a 876 206 2 -a 876 5 1 -a 876 497 9 -a 876 660 4 -a 876 539 4 -a 876 860 10 -a 876 51 10 -a 876 68 10 -a 876 867 5 -a 876 363 4 -a 876 503 3 -a 876 113 4 -a 876 857 2 -a 877 330 6 -a 877 636 7 -a 877 769 2 -a 877 129 2 -a 877 814 4 -a 877 962 8 -a 877 50 5 -a 877 524 2 -a 877 376 3 -a 877 656 8 -a 877 721 4 -a 877 296 3 -a 877 691 2 -a 877 950 6 -a 877 232 5 -a 877 681 5 -a 878 551 1 -a 878 147 6 -a 878 886 2 -a 878 555 8 -a 878 643 6 -a 878 521 10 -a 878 69 7 -a 878 478 3 -a 878 572 2 -a 878 137 5 -a 878 320 4 -a 878 934 5 -a 878 639 7 -a 878 432 7 -a 878 766 2 -a 878 968 2 -a 878 43 7 -a 878 510 5 -a 879 72 2 -a 879 857 1 -a 879 447 9 -a 879 122 6 -a 879 356 5 -a 879 823 1 -a 879 777 4 -a 879 53 1 -a 879 94 10 -a 879 443 5 -a 879 325 9 -a 879 99 1 -a 879 528 5 -a 879 471 8 -a 879 984 6 -a 879 59 1 -a 879 89 9 -a 879 481 2 -a 879 127 2 -a 879 566 1 -a 879 28 3 -a 879 263 2 -a 879 886 2 -a 879 961 9 -a 879 902 7 -a 880 293 8 -a 880 702 4 -a 880 845 9 -a 880 336 8 -a 880 188 5 -a 880 917 9 -a 880 168 6 -a 880 634 6 -a 880 14 8 -a 880 523 10 -a 880 432 10 -a 880 790 5 -a 880 575 4 -a 880 525 6 -a 880 208 7 -a 880 552 4 -a 880 850 4 -a 880 307 2 -a 880 56 1 -a 880 296 1 -a 880 266 9 -a 880 114 5 -a 880 385 6 -a 880 746 9 -a 880 240 3 -a 880 950 10 -a 881 773 4 -a 881 503 10 -a 881 811 7 -a 881 709 5 -a 881 380 8 -a 881 80 2 -a 881 387 1 -a 881 200 4 -a 881 415 7 -a 881 574 3 -a 881 92 8 -a 881 582 5 -a 881 183 9 -a 881 105 8 -a 881 80 7 -a 881 615 6 -a 882 894 1 -a 882 655 10 -a 882 115 7 -a 882 78 6 -a 882 182 1 -a 882 964 5 -a 882 384 7 -a 882 237 2 -a 882 236 6 -a 882 649 3 -a 882 350 1 -a 882 620 5 -a 882 371 9 -a 882 590 6 -a 882 545 2 -a 882 119 8 -a 882 68 5 -a 882 332 8 -a 882 828 5 -a 882 447 1 -a 882 411 7 -a 882 190 9 -a 882 646 6 -a 882 825 4 -a 882 763 7 -a 882 738 1 -a 882 382 4 -a 882 945 7 -a 882 842 3 -a 882 461 5 -a 882 535 4 -a 883 712 1 -a 883 91 9 -a 883 650 3 -a 883 789 5 -a 883 273 10 -a 883 589 2 -a 883 148 2 -a 883 509 1 -a 883 824 6 -a 883 796 2 -a 883 859 4 -a 883 419 2 -a 883 142 7 -a 883 424 7 -a 883 964 8 -a 883 261 9 -a 883 491 4 -a 884 271 3 -a 884 64 2 -a 884 937 1 -a 884 681 1 -a 884 253 5 -a 884 558 3 -a 884 481 1 -a 884 271 7 -a 884 862 4 -a 884 935 2 -a 884 89 1 -a 884 298 1 -a 884 446 5 -a 884 800 4 -a 884 389 1 -a 884 71 1 -a 884 564 10 -a 884 661 7 -a 885 659 9 -a 885 711 3 -a 885 145 10 -a 885 459 10 -a 885 482 4 -a 885 877 10 -a 885 624 3 -a 885 402 1 -a 885 816 3 -a 885 884 4 -a 885 892 3 -a 885 62 7 -a 885 947 3 -a 885 804 1 -a 885 742 10 -a 885 175 6 -a 885 338 3 -a 885 198 3 -a 885 165 1 -a 885 608 2 -a 885 35 1 -a 885 75 9 -a 886 696 2 -a 886 333 10 -a 886 520 10 -a 886 471 9 -a 886 721 9 -a 886 590 10 -a 886 10 7 -a 886 357 1 -a 886 225 4 -a 886 720 8 -a 886 501 2 -a 886 683 8 -a 886 178 8 -a 886 480 7 -a 886 535 10 -a 886 801 7 -a 886 881 6 -a 886 327 3 -a 886 660 5 -a 886 749 5 -a 886 388 3 -a 886 582 10 -a 886 528 6 -a 886 106 7 -a 886 756 5 -a 886 865 4 -a 887 303 5 -a 887 920 5 -a 887 449 9 -a 887 338 9 -a 887 994 10 -a 887 120 3 -a 887 670 1 -a 887 490 7 -a 887 591 6 -a 887 366 9 -a 887 55 5 -a 887 600 4 -a 887 722 4 -a 887 279 7 -a 887 296 2 -a 887 198 2 -a 887 961 9 -a 887 473 7 -a 887 677 8 -a 887 472 5 -a 887 249 10 -a 888 534 5 -a 888 798 2 -a 888 908 10 -a 888 258 10 -a 888 161 7 -a 888 465 8 -a 888 785 7 -a 888 266 9 -a 888 196 1 -a 888 626 2 -a 888 569 3 -a 888 91 6 -a 888 50 9 -a 888 906 4 -a 888 60 10 -a 888 169 4 -a 888 551 2 -a 888 549 5 -a 888 759 7 -a 888 916 8 -a 888 604 8 -a 888 335 8 -a 888 613 9 -a 889 882 6 -a 889 630 4 -a 889 810 2 -a 889 819 1 -a 889 78 5 -a 889 463 1 -a 889 266 2 -a 889 326 7 -a 889 996 6 -a 889 39 5 -a 889 209 3 -a 889 229 7 -a 889 199 10 -a 889 673 6 -a 889 465 5 -a 889 868 1 -a 889 614 4 -a 889 9 6 -a 889 958 1 -a 889 663 3 -a 889 914 9 -a 889 832 1 -a 889 440 10 -a 889 542 1 -a 889 566 1 -a 889 331 10 -a 889 121 2 -a 889 900 7 -a 889 943 9 -a 889 505 9 -a 889 728 2 -a 889 796 8 -a 890 582 4 -a 890 166 8 -a 890 37 1 -a 890 907 9 -a 890 137 1 -a 890 75 6 -a 890 91 9 -a 890 365 2 -a 890 274 4 -a 890 763 2 -a 890 354 2 -a 890 738 10 -a 890 606 6 -a 890 967 2 -a 890 746 10 -a 890 539 4 -a 890 606 10 -a 890 635 8 -a 891 532 2 -a 891 413 5 -a 891 50 5 -a 891 49 1 -a 891 978 3 -a 891 380 9 -a 891 169 4 -a 891 854 4 -a 892 298 6 -a 892 146 1 -a 892 334 7 -a 892 1 10 -a 892 942 1 -a 892 916 9 -a 892 167 3 -a 892 978 2 -a 892 798 10 -a 892 303 9 -a 892 29 1 -a 892 889 6 -a 892 668 2 -a 892 302 10 -a 892 627 1 -a 892 15 3 -a 892 209 9 -a 892 963 5 -a 893 760 7 -a 893 747 9 -a 893 544 10 -a 893 370 7 -a 893 254 4 -a 893 956 1 -a 893 419 4 -a 893 302 8 -a 893 910 3 -a 893 798 2 -a 893 470 3 -a 893 739 5 -a 893 71 6 -a 893 616 5 -a 893 48 9 -a 893 71 5 -a 893 533 1 -a 893 963 7 -a 893 237 5 -a 893 486 9 -a 893 737 8 -a 893 540 8 -a 893 514 2 -a 894 601 4 -a 894 183 10 -a 894 815 3 -a 894 203 10 -a 894 179 6 -a 894 829 6 -a 894 411 2 -a 894 117 1 -a 894 564 3 -a 894 134 3 -a 894 661 8 -a 894 933 10 -a 894 387 5 -a 894 592 1 -a 894 327 10 -a 894 689 3 -a 894 477 9 -a 894 100 7 -a 894 134 1 -a 894 191 3 -a 894 170 9 -a 895 749 10 -a 895 239 8 -a 895 241 8 -a 895 257 10 -a 895 177 10 -a 895 477 6 -a 895 743 10 -a 895 913 3 -a 895 232 5 -a 895 489 6 -a 895 174 7 -a 895 23 2 -a 895 692 2 -a 895 352 7 -a 895 851 1 -a 895 78 2 -a 895 469 1 -a 895 391 4 -a 895 211 9 -a 895 105 4 -a 896 299 4 -a 896 598 8 -a 896 696 6 -a 896 626 2 -a 896 262 9 -a 896 149 6 -a 896 725 2 -a 896 395 1 -a 896 339 4 -a 896 895 5 -a 896 120 5 -a 896 577 7 -a 896 111 6 -a 896 376 1 -a 896 754 7 -a 896 587 7 -a 896 94 1 -a 896 642 4 -a 896 579 10 -a 896 326 10 -a 896 107 8 -a 896 752 4 -a 897 348 7 -a 897 798 8 -a 897 80 3 -a 897 174 4 -a 897 875 7 -a 897 548 5 -a 897 564 8 -a 897 62 3 -a 897 652 4 -a 897 863 7 -a 897 659 6 -a 897 323 10 -a 897 464 6 -a 897 920 1 -a 897 471 3 -a 897 164 7 -a 897 290 4 -a 897 810 9 -a 897 34 3 -a 897 409 1 -a 897 362 3 -a 897 144 1 -a 897 785 10 -a 898 91 3 -a 898 731 2 -a 898 878 4 -a 898 733 6 -a 898 285 8 -a 898 179 6 -a 898 839 8 -a 898 12 1 -a 898 526 8 -a 898 612 7 -a 898 91 9 -a 898 700 6 -a 898 462 6 -a 898 638 2 -a 898 239 8 -a 898 523 7 -a 898 265 4 -a 898 77 8 -a 898 157 5 -a 899 588 1 -a 899 540 4 -a 899 52 6 -a 899 34 1 -a 899 704 1 -a 899 342 8 -a 899 843 4 -a 899 737 6 -a 899 750 6 -a 899 181 5 -a 899 881 9 -a 899 510 5 -a 899 271 10 -a 899 587 6 -a 899 364 1 -a 899 871 4 -a 899 542 10 -a 899 817 9 -a 899 882 8 -a 899 44 7 -a 899 404 3 -a 900 973 9 -a 900 743 1 -a 900 866 6 -a 900 586 10 -a 900 981 6 -a 900 364 5 -a 900 851 4 -a 900 34 10 -a 900 521 10 -a 900 414 10 -a 900 573 7 -a 900 572 6 -a 900 447 7 -a 900 252 7 -a 900 913 9 -a 900 266 7 -a 900 989 1 -a 900 639 5 -a 900 446 4 -a 900 845 10 -a 900 124 1 -a 900 716 10 -a 901 407 7 -a 901 487 3 -a 901 695 5 -a 901 253 9 -a 901 5 2 -a 901 487 3 -a 901 110 8 -a 901 48 6 -a 901 891 2 -a 901 58 5 -a 901 790 9 -a 901 732 10 -a 901 644 8 -a 901 746 4 -a 901 71 6 -a 901 470 8 -a 901 779 5 -a 901 591 5 -a 901 883 8 -a 901 328 2 -a 901 139 4 -a 902 305 8 -a 902 579 8 -a 902 27 4 -a 902 570 8 -a 902 543 10 -a 902 665 10 -a 902 363 1 -a 902 789 4 -a 902 707 8 -a 902 769 6 -a 902 251 3 -a 902 377 9 -a 902 255 5 -a 902 863 3 -a 902 107 8 -a 902 302 7 -a 902 729 5 -a 902 164 6 -a 903 67 9 -a 903 436 2 -a 903 807 9 -a 903 813 9 -a 903 507 1 -a 903 252 2 -a 903 567 10 -a 903 73 3 -a 903 110 2 -a 903 894 5 -a 903 211 1 -a 903 415 9 -a 903 449 10 -a 903 238 7 -a 903 984 4 -a 903 991 8 -a 903 902 7 -a 903 975 7 -a 903 330 10 -a 903 666 5 -a 904 657 2 -a 904 74 2 -a 904 917 10 -a 904 9 5 -a 904 71 2 -a 904 147 10 -a 904 871 7 -a 904 177 3 -a 904 449 9 -a 904 576 1 -a 904 340 7 -a 904 515 9 -a 904 123 10 -a 904 303 5 -a 904 493 5 -a 904 374 6 -a 904 870 8 -a 904 566 1 -a 904 484 2 -a 904 739 10 -a 904 776 5 -a 904 898 10 -a 904 163 6 -a 904 857 6 -a 904 130 1 -a 905 891 9 -a 905 807 1 -a 905 459 9 -a 905 532 1 -a 905 439 1 -a 905 532 1 -a 905 424 10 -a 905 447 5 -a 905 602 5 -a 905 571 9 -a 905 294 6 -a 905 778 10 -a 905 869 10 -a 905 94 1 -a 905 509 5 -a 905 855 9 -a 905 216 10 -a 905 812 9 -a 905 324 2 -a 905 589 8 -a 905 657 8 -a 905 889 6 -a 905 48 2 -a 906 371 6 -a 906 640 6 -a 906 945 2 -a 906 534 6 -a 906 629 10 -a 906 778 6 -a 906 663 10 -a 906 495 3 -a 906 560 4 -a 906 97 8 -a 906 2 4 -a 906 999 8 -a 906 628 9 -a 906 426 5 -a 906 421 2 -a 906 206 1 -a 906 996 7 -a 906 714 9 -a 906 983 4 -a 906 990 1 -a 906 558 9 -a 906 52 9 -a 906 474 2 -a 906 389 7 -a 906 267 10 -a 906 261 10 -a 907 712 7 -a 907 856 6 -a 907 917 6 -a 907 576 6 -a 907 903 1 -a 907 264 8 -a 907 191 5 -a 907 824 5 -a 907 797 8 -a 907 819 1 -a 907 577 3 -a 907 435 4 -a 907 289 8 -a 907 112 4 -a 907 531 10 -a 907 291 7 -a 907 86 1 -a 907 134 10 -a 907 716 7 -a 907 507 5 -a 907 339 7 -a 907 687 5 -a 907 196 9 -a 908 298 4 -a 908 652 9 -a 908 754 8 -a 908 349 1 -a 908 101 8 -a 908 118 9 -a 908 616 8 -a 908 362 6 -a 908 829 4 -a 908 447 1 -a 908 254 2 -a 908 380 10 -a 908 325 8 -a 908 517 10 -a 908 570 7 -a 908 124 4 -a 909 289 8 -a 909 365 6 -a 909 700 10 -a 909 723 5 -a 909 653 10 -a 909 812 9 -a 909 229 2 -a 909 943 3 -a 909 897 1 -a 909 363 9 -a 909 634 1 -a 909 379 1 -a 909 701 1 -a 909 296 9 -a 909 575 1 -a 910 998 8 -a 910 947 3 -a 910 304 1 -a 910 323 1 -a 910 24 1 -a 910 421 5 -a 910 938 9 -a 910 385 5 -a 910 225 5 -a 910 360 10 -a 910 638 6 -a 910 604 9 -a 910 684 3 -a 910 131 5 -a 910 149 1 -a 910 808 4 -a 910 419 8 -a 911 513 2 -a 911 483 8 -a 911 118 2 -a 911 142 1 -a 911 270 2 -a 911 346 3 -a 911 60 3 -a 911 143 3 -a 911 708 4 -a 911 694 1 -a 911 521 6 -a 911 385 5 -a 912 989 2 -a 912 71 1 -a 912 358 7 -a 912 912 10 -a 912 374 10 -a 912 680 3 -a 912 935 2 -a 912 794 10 -a 912 593 10 -a 912 295 10 -a 912 952 9 -a 912 932 5 -a 912 597 2 -a 912 612 6 -a 912 38 4 -a 913 746 2 -a 913 395 7 -a 913 457 4 -a 913 234 3 -a 913 877 9 -a 913 574 4 -a 913 375 3 -a 913 123 6 -a 913 919 4 -a 913 435 8 -a 913 265 9 -a 913 603 1 -a 913 104 7 -a 913 785 10 -a 913 987 2 -a 913 68 4 -a 913 856 10 -a 913 320 10 -a 913 979 9 -a 913 205 10 -a 914 1000 3 -a 914 889 6 -a 914 999 10 -a 914 568 6 -a 914 159 8 -a 914 992 3 -a 914 496 9 -a 914 67 5 -a 914 565 5 -a 914 83 3 -a 914 104 1 -a 914 286 2 -a 914 477 10 -a 914 560 10 -a 914 519 10 -a 914 329 8 -a 914 109 5 -a 914 894 1 -a 914 451 10 -a 914 4 4 -a 914 304 9 -a 914 715 8 -a 914 606 5 -a 914 407 2 -a 914 476 9 -a 914 568 7 -a 914 474 7 -a 914 307 2 -a 914 887 4 -a 914 429 5 -a 915 511 3 -a 915 862 8 -a 915 293 3 -a 915 485 5 -a 915 406 9 -a 915 452 5 -a 915 453 2 -a 915 901 3 -a 915 518 7 -a 915 983 1 -a 915 621 1 -a 915 278 6 -a 915 435 9 -a 915 157 10 -a 915 796 9 -a 915 763 2 -a 915 265 1 -a 916 665 7 -a 916 190 6 -a 916 268 2 -a 916 968 9 -a 916 904 9 -a 916 873 7 -a 916 350 4 -a 916 355 9 -a 916 416 3 -a 916 824 4 -a 916 661 10 -a 916 279 4 -a 916 228 6 -a 916 148 4 -a 916 116 10 -a 916 520 4 -a 916 632 5 -a 916 521 3 -a 916 971 4 -a 916 60 3 -a 917 397 9 -a 917 464 1 -a 917 52 5 -a 917 355 7 -a 917 61 1 -a 917 329 4 -a 917 789 10 -a 917 217 5 -a 917 101 9 -a 917 528 1 -a 917 481 1 -a 918 765 10 -a 918 717 4 -a 918 749 1 -a 918 709 9 -a 918 596 8 -a 918 597 1 -a 918 34 3 -a 918 951 5 -a 918 857 5 -a 918 587 8 -a 918 267 2 -a 918 60 8 -a 918 734 5 -a 918 382 4 -a 918 580 3 -a 919 342 5 -a 919 903 5 -a 919 526 10 -a 919 401 5 -a 919 275 1 -a 919 990 6 -a 919 453 8 -a 919 630 10 -a 919 26 5 -a 919 781 2 -a 919 394 5 -a 919 242 5 -a 919 881 9 -a 920 921 10 -a 920 722 2 -a 920 622 3 -a 920 613 1 -a 920 446 3 -a 920 306 10 -a 920 185 5 -a 920 19 7 -a 920 339 10 -a 920 111 8 -a 920 7 1 -a 920 172 6 -a 920 697 6 -a 920 273 8 -a 920 231 10 -a 920 407 9 -a 920 654 6 -a 921 810 7 -a 921 748 3 -a 921 532 6 -a 921 312 10 -a 921 124 1 -a 921 807 4 -a 921 277 6 -a 921 576 4 -a 921 412 10 -a 921 302 4 -a 921 333 2 -a 921 805 9 -a 921 543 1 -a 921 189 7 -a 921 702 9 -a 921 240 10 -a 921 810 8 -a 921 290 4 -a 921 686 3 -a 921 91 9 -a 921 474 8 -a 921 704 7 -a 921 430 7 -a 921 584 2 -a 921 710 10 -a 921 601 10 -a 921 257 5 -a 921 982 5 -a 921 831 5 -a 922 663 5 -a 922 611 5 -a 922 617 8 -a 922 386 2 -a 922 119 2 -a 922 928 6 -a 922 509 1 -a 922 925 2 -a 922 180 5 -a 922 61 3 -a 922 312 5 -a 922 481 10 -a 922 393 8 -a 922 92 9 -a 922 581 7 -a 922 793 7 -a 922 238 6 -a 922 367 10 -a 922 59 6 -a 922 923 10 -a 922 457 6 -a 922 532 4 -a 922 602 10 -a 922 886 5 -a 923 92 2 -a 923 287 7 -a 923 462 7 -a 923 348 8 -a 923 244 10 -a 923 269 1 -a 923 855 7 -a 923 885 8 -a 923 371 5 -a 923 973 6 -a 923 788 4 -a 923 879 4 -a 923 873 9 -a 923 967 5 -a 923 939 10 -a 924 160 2 -a 924 423 4 -a 924 307 6 -a 924 251 1 -a 924 421 5 -a 924 888 10 -a 924 20 7 -a 924 658 6 -a 924 230 1 -a 924 78 10 -a 924 557 3 -a 924 686 1 -a 924 609 2 -a 924 134 2 -a 924 548 8 -a 924 700 10 -a 924 421 1 -a 924 23 2 -a 924 664 9 -a 924 253 6 -a 924 8 6 -a 924 494 4 -a 925 113 8 -a 925 378 9 -a 925 442 10 -a 925 900 8 -a 925 233 8 -a 925 290 9 -a 925 842 2 -a 925 147 2 -a 925 449 3 -a 925 240 7 -a 925 454 2 -a 925 700 4 -a 925 660 6 -a 925 317 8 -a 925 719 10 -a 925 294 10 -a 925 546 3 -a 925 796 10 -a 926 850 3 -a 926 207 6 -a 926 380 5 -a 926 983 6 -a 926 754 4 -a 926 56 4 -a 926 379 7 -a 926 739 6 -a 926 78 9 -a 926 19 2 -a 926 991 10 -a 926 86 5 -a 926 512 5 -a 926 80 6 -a 926 463 8 -a 926 954 10 -a 926 979 10 -a 926 695 9 -a 926 219 9 -a 926 797 9 -a 926 842 10 -a 926 668 9 -a 926 12 5 -a 926 271 2 -a 926 343 7 -a 927 672 8 -a 927 587 9 -a 927 37 1 -a 927 965 4 -a 927 108 10 -a 927 832 4 -a 927 790 2 -a 927 314 10 -a 927 187 3 -a 927 748 7 -a 927 44 3 -a 927 242 4 -a 927 103 3 -a 927 782 8 -a 927 320 10 -a 927 121 5 -a 927 748 4 -a 927 405 5 -a 927 632 8 -a 927 827 7 -a 927 867 3 -a 927 561 9 -a 927 782 6 -a 927 538 4 -a 927 780 1 -a 928 554 6 -a 928 355 1 -a 928 423 10 -a 928 565 9 -a 928 625 4 -a 928 765 8 -a 928 212 3 -a 928 187 10 -a 928 801 6 -a 928 152 4 -a 928 294 6 -a 928 608 2 -a 928 941 9 -a 928 607 8 -a 928 794 1 -a 928 665 1 -a 928 650 3 -a 928 12 7 -a 929 767 1 -a 929 407 1 -a 929 331 7 -a 929 887 6 -a 929 131 7 -a 929 735 7 -a 929 494 3 -a 929 957 10 -a 929 577 6 -a 929 31 1 -a 929 714 4 -a 929 90 8 -a 929 810 3 -a 929 243 10 -a 929 444 3 -a 929 208 2 -a 929 808 8 -a 929 44 8 -a 929 972 9 -a 930 230 2 -a 930 748 2 -a 930 147 5 -a 930 523 2 -a 930 331 5 -a 930 63 4 -a 930 106 1 -a 930 100 9 -a 930 727 2 -a 930 755 1 -a 930 111 6 -a 930 469 8 -a 930 138 5 -a 930 441 9 -a 930 331 6 -a 930 268 4 -a 930 151 7 -a 930 825 2 -a 930 200 5 -a 930 728 9 -a 930 855 6 -a 930 914 2 -a 930 817 9 -a 930 640 6 -a 930 132 1 -a 931 237 4 -a 931 847 10 -a 931 939 3 -a 931 280 4 -a 931 794 8 -a 931 934 3 -a 931 510 10 -a 931 517 2 -a 931 56 3 -a 931 8 9 -a 931 847 7 -a 931 118 6 -a 931 113 6 -a 931 946 4 -a 931 845 8 -a 931 868 1 -a 931 33 4 -a 931 289 4 -a 931 473 9 -a 931 620 2 -a 931 248 3 -a 931 624 6 -a 932 420 3 -a 932 447 7 -a 932 327 6 -a 932 250 8 -a 932 336 9 -a 932 119 9 -a 932 889 8 -a 932 468 2 -a 932 355 5 -a 932 711 4 -a 932 382 4 -a 932 635 9 -a 933 480 3 -a 933 291 10 -a 933 120 8 -a 933 996 1 -a 933 346 5 -a 933 127 3 -a 933 818 1 -a 933 464 7 -a 933 240 2 -a 933 739 7 -a 933 284 9 -a 933 83 5 -a 933 771 8 -a 933 572 6 -a 933 63 4 -a 933 220 8 -a 933 167 5 -a 934 310 1 -a 934 843 2 -a 934 586 4 -a 934 756 4 -a 934 145 4 -a 934 835 3 -a 934 68 2 -a 934 263 9 -a 934 699 5 -a 934 535 1 -a 934 618 5 -a 934 385 4 -a 934 916 2 -a 934 228 9 -a 934 864 4 -a 934 183 2 -a 934 347 4 -a 934 835 6 -a 934 528 6 -a 934 473 8 -a 934 628 6 -a 935 991 9 -a 935 712 10 -a 935 343 3 -a 935 250 2 -a 935 794 9 -a 935 89 3 -a 935 822 6 -a 935 856 8 -a 935 308 3 -a 935 988 6 -a 935 141 7 -a 935 126 5 -a 935 550 10 -a 935 897 8 -a 936 270 1 -a 936 360 2 -a 936 964 2 -a 936 533 6 -a 936 35 2 -a 936 474 10 -a 936 126 4 -a 936 419 6 -a 936 365 6 -a 936 353 8 -a 936 259 5 -a 936 547 1 -a 936 699 3 -a 936 69 8 -a 936 51 1 -a 937 147 3 -a 937 697 4 -a 937 17 9 -a 937 859 8 -a 937 15 10 -a 937 267 8 -a 937 628 5 -a 937 103 4 -a 937 64 10 -a 937 460 5 -a 937 411 6 -a 937 27 10 -a 937 600 7 -a 937 536 5 -a 937 576 9 -a 937 472 10 -a 937 806 10 -a 937 936 3 -a 937 411 8 -a 937 314 10 -a 938 970 4 -a 938 884 8 -a 938 439 6 -a 938 364 6 -a 938 225 5 -a 938 791 6 -a 938 622 1 -a 938 771 8 -a 938 465 5 -a 938 691 10 -a 938 821 1 -a 938 611 2 -a 938 363 4 -a 938 838 8 -a 938 445 6 -a 938 377 9 -a 938 80 3 -a 938 49 8 -a 938 479 8 -a 938 143 9 -a 939 508 1 -a 939 889 10 -a 939 169 7 -a 939 83 8 -a 939 401 3 -a 939 745 10 -a 939 555 8 -a 939 182 4 -a 939 656 4 -a 939 965 9 -a 939 495 7 -a 939 601 3 -a 939 825 6 -a 939 933 7 -a 939 964 1 -a 940 25 8 -a 940 699 10 -a 940 562 8 -a 940 795 3 -a 940 139 1 -a 940 228 2 -a 940 592 3 -a 940 749 9 -a 940 590 2 -a 940 405 10 -a 940 170 9 -a 940 966 8 -a 940 484 6 -a 940 218 8 -a 940 420 5 -a 940 626 1 -a 940 725 2 -a 940 285 4 -a 941 794 3 -a 941 807 8 -a 941 685 6 -a 941 514 9 -a 941 337 6 -a 941 866 7 -a 941 145 9 -a 941 278 8 -a 941 336 8 -a 941 745 10 -a 941 78 9 -a 941 244 10 -a 941 685 2 -a 941 102 10 -a 941 942 6 -a 941 222 1 -a 941 896 3 -a 941 56 3 -a 941 449 10 -a 941 463 8 -a 941 804 1 -a 941 14 9 -a 941 867 7 -a 941 973 2 -a 941 979 6 -a 942 326 4 -a 942 166 7 -a 942 374 5 -a 942 951 10 -a 942 890 4 -a 942 658 3 -a 942 721 7 -a 942 673 3 -a 942 318 1 -a 942 210 6 -a 942 159 8 -a 942 355 7 -a 942 262 9 -a 942 494 7 -a 942 75 7 -a 942 339 8 -a 942 737 1 -a 942 759 6 -a 942 440 3 -a 942 654 4 -a 942 980 3 -a 942 312 7 -a 942 709 9 -a 942 404 7 -a 942 774 9 -a 943 489 6 -a 943 417 2 -a 943 617 7 -a 943 437 2 -a 943 371 6 -a 943 942 10 -a 943 603 5 -a 943 745 9 -a 943 869 5 -a 943 468 10 -a 943 378 2 -a 943 565 9 -a 943 116 6 -a 943 696 6 -a 943 774 4 -a 943 101 2 -a 943 854 8 -a 943 104 6 -a 943 362 5 -a 943 324 5 -a 943 179 1 -a 943 701 6 -a 943 36 3 -a 943 937 9 -a 943 116 4 -a 944 690 10 -a 944 893 3 -a 944 427 5 -a 944 374 6 -a 944 272 4 -a 944 177 9 -a 944 862 9 -a 944 689 8 -a 944 793 10 -a 944 275 10 -a 944 35 5 -a 944 710 2 -a 944 877 9 -a 944 779 6 -a 944 554 10 -a 944 320 8 -a 944 133 6 -a 944 94 6 -a 944 436 8 -a 944 828 1 -a 945 868 8 -a 945 536 3 -a 945 657 6 -a 945 971 9 -a 945 897 8 -a 945 980 2 -a 945 125 4 -a 945 573 3 -a 945 38 10 -a 945 689 4 -a 945 681 3 -a 945 930 8 -a 945 91 2 -a 945 30 8 -a 945 177 2 -a 945 267 2 -a 945 892 4 -a 945 865 2 -a 945 35 1 -a 945 142 4 -a 945 900 7 -a 946 745 9 -a 946 654 6 -a 946 274 10 -a 946 313 2 -a 946 786 5 -a 946 368 8 -a 946 748 8 -a 946 589 7 -a 946 211 10 -a 946 259 10 -a 946 222 6 -a 946 157 3 -a 946 132 7 -a 946 177 10 -a 946 282 1 -a 946 704 8 -a 946 168 2 -a 946 319 8 -a 946 368 9 -a 946 848 7 -a 947 224 6 -a 947 459 5 -a 947 878 9 -a 947 400 7 -a 947 725 4 -a 947 745 4 -a 947 241 5 -a 947 760 10 -a 947 886 8 -a 947 116 8 -a 947 480 4 -a 947 879 5 -a 947 769 10 -a 947 753 10 -a 947 167 1 -a 948 531 8 -a 948 96 10 -a 948 915 4 -a 948 95 7 -a 948 306 8 -a 948 149 10 -a 948 316 6 -a 948 463 9 -a 948 280 1 -a 948 493 5 -a 948 744 7 -a 948 984 8 -a 948 660 10 -a 948 38 1 -a 948 327 6 -a 948 484 9 -a 948 261 1 -a 948 785 7 -a 949 337 10 -a 949 660 1 -a 949 486 10 -a 949 57 5 -a 949 900 1 -a 949 221 7 -a 949 942 6 -a 949 700 10 -a 949 796 3 -a 949 760 2 -a 949 428 3 -a 949 962 8 -a 949 266 6 -a 949 524 9 -a 949 852 3 -a 949 360 2 -a 949 829 2 -a 949 676 7 -a 949 267 6 -a 949 256 4 -a 949 144 2 -a 949 215 8 -a 950 803 1 -a 950 23 7 -a 950 542 1 -a 950 262 7 -a 950 283 7 -a 950 302 3 -a 950 598 9 -a 950 943 1 -a 950 787 4 -a 950 654 7 -a 950 818 3 -a 950 571 6 -a 950 809 3 -a 950 682 4 -a 950 342 7 -a 950 544 5 -a 950 86 5 -a 950 280 3 -a 950 809 7 -a 950 609 8 -a 950 107 10 -a 950 144 2 -a 950 413 3 -a 950 83 10 -a 950 819 2 -a 950 680 9 -a 950 339 10 -a 950 962 1 -a 951 665 1 -a 951 553 9 -a 951 741 4 -a 951 688 5 -a 951 70 6 -a 951 970 6 -a 951 372 7 -a 951 576 10 -a 951 888 7 -a 951 134 4 -a 951 205 1 -a 951 682 1 -a 951 117 3 -a 951 776 1 -a 951 466 9 -a 951 798 3 -a 951 93 6 -a 952 883 4 -a 952 372 3 -a 952 793 2 -a 952 467 2 -a 952 479 2 -a 952 936 8 -a 952 880 1 -a 952 561 1 -a 952 731 2 -a 952 535 8 -a 952 899 10 -a 952 668 8 -a 952 175 9 -a 952 428 5 -a 952 384 2 -a 952 862 2 -a 952 497 1 -a 953 362 3 -a 953 808 1 -a 953 868 7 -a 953 937 2 -a 953 671 9 -a 953 117 2 -a 953 328 5 -a 953 94 8 -a 953 892 2 -a 953 793 7 -a 953 891 5 -a 953 985 10 -a 953 777 3 -a 953 750 4 -a 953 332 2 -a 954 545 8 -a 954 192 6 -a 954 810 1 -a 954 457 9 -a 954 47 7 -a 954 347 1 -a 954 163 7 -a 954 581 9 -a 954 221 6 -a 954 830 10 -a 954 756 6 -a 954 648 2 -a 954 190 7 -a 954 593 7 -a 954 121 10 -a 954 551 4 -a 954 376 8 -a 954 988 4 -a 954 463 9 -a 954 23 2 -a 954 965 10 -a 954 579 8 -a 954 350 3 -a 954 34 3 -a 954 447 4 -a 954 119 2 -a 954 925 2 -a 954 407 7 -a 954 895 2 -a 954 650 7 -a 954 738 2 -a 955 416 6 -a 955 841 1 -a 955 524 2 -a 955 872 6 -a 955 888 3 -a 955 870 5 -a 955 10 9 -a 955 444 4 -a 955 66 1 -a 955 839 6 -a 955 175 10 -a 955 714 9 -a 955 4 7 -a 955 768 8 -a 955 834 5 -a 955 554 2 -a 955 119 1 -a 955 797 3 -a 955 141 4 -a 955 738 6 -a 955 571 4 -a 955 491 2 -a 955 771 3 -a 956 609 1 -a 956 671 8 -a 956 399 6 -a 956 479 5 -a 956 296 4 -a 956 112 2 -a 956 894 1 -a 956 113 3 -a 956 635 10 -a 956 741 1 -a 956 1000 6 -a 956 480 4 -a 956 750 4 -a 956 419 5 -a 956 546 1 -a 956 565 7 -a 956 594 4 -a 956 235 3 -a 956 568 10 -a 956 337 6 -a 956 44 6 -a 956 98 8 -a 956 455 1 -a 956 840 9 -a 957 89 2 -a 957 596 7 -a 957 553 9 -a 957 659 10 -a 957 62 2 -a 957 300 4 -a 957 651 8 -a 957 670 4 -a 957 970 1 -a 957 25 6 -a 957 124 6 -a 957 242 2 -a 957 137 5 -a 957 354 5 -a 957 771 3 -a 957 734 7 -a 957 329 8 -a 958 227 6 -a 958 460 8 -a 958 747 3 -a 958 772 8 -a 958 316 4 -a 958 567 3 -a 958 652 2 -a 958 25 1 -a 958 664 3 -a 958 83 5 -a 958 864 10 -a 958 753 6 -a 958 678 2 -a 958 393 8 -a 958 387 1 -a 958 739 5 -a 958 692 3 -a 958 14 1 -a 958 384 6 -a 958 637 9 -a 958 38 3 -a 958 507 5 -a 958 878 6 -a 959 174 8 -a 959 500 2 -a 959 207 1 -a 959 945 8 -a 959 210 1 -a 959 535 5 -a 959 147 7 -a 959 669 4 -a 959 258 5 -a 959 918 3 -a 959 668 9 -a 959 573 2 -a 959 899 4 -a 959 210 1 -a 959 201 5 -a 959 923 5 -a 959 874 1 -a 959 283 4 -a 959 762 1 -a 959 602 9 -a 959 960 3 -a 959 130 3 -a 959 988 2 -a 959 674 9 -a 960 821 5 -a 960 33 3 -a 960 434 9 -a 960 15 3 -a 960 539 6 -a 960 287 2 -a 960 188 1 -a 960 15 6 -a 960 494 5 -a 960 108 5 -a 960 224 9 -a 960 4 6 -a 960 254 4 -a 960 892 2 -a 960 261 4 -a 960 147 5 -a 960 535 2 -a 960 834 1 -a 960 21 10 -a 960 744 4 -a 960 10 2 -a 960 943 10 -a 960 593 6 -a 960 292 8 -a 961 681 10 -a 961 170 8 -a 961 227 8 -a 961 810 7 -a 961 134 9 -a 961 900 1 -a 961 607 3 -a 961 110 6 -a 961 932 4 -a 961 16 2 -a 961 124 8 -a 961 446 7 -a 961 302 1 -a 961 312 4 -a 961 460 9 -a 961 795 3 -a 961 419 2 -a 961 683 3 -a 961 799 4 -a 962 673 1 -a 962 550 7 -a 962 35 4 -a 962 819 4 -a 962 60 3 -a 962 868 2 -a 962 840 6 -a 962 804 9 -a 962 877 7 -a 962 758 6 -a 962 372 10 -a 962 144 4 -a 962 414 4 -a 962 542 8 -a 962 370 6 -a 962 200 10 -a 962 675 9 -a 962 245 8 -a 962 806 4 -a 962 784 5 -a 963 152 7 -a 963 821 8 -a 963 908 1 -a 963 598 9 -a 963 98 6 -a 963 195 1 -a 963 33 2 -a 963 893 4 -a 963 613 7 -a 963 716 1 -a 963 667 4 -a 963 261 3 -a 963 241 7 -a 963 701 6 -a 963 56 5 -a 963 301 2 -a 963 545 10 -a 963 895 3 -a 963 80 5 -a 963 397 5 -a 963 628 10 -a 963 451 4 -a 963 541 5 -a 963 18 10 -a 963 992 8 -a 963 910 2 -a 963 217 2 -a 963 642 1 -a 963 131 1 -a 963 402 7 -a 963 282 6 -a 963 818 2 -a 964 285 8 -a 964 879 5 -a 964 915 6 -a 964 479 9 -a 964 912 9 -a 964 783 5 -a 964 67 7 -a 964 603 1 -a 964 425 2 -a 964 328 9 -a 964 843 6 -a 964 102 9 -a 964 383 8 -a 964 119 6 -a 964 646 9 -a 964 253 6 -a 964 198 9 -a 964 18 10 -a 964 880 1 -a 964 649 3 -a 964 558 3 -a 965 897 9 -a 965 616 1 -a 965 444 5 -a 965 89 10 -a 965 234 5 -a 965 574 10 -a 965 86 4 -a 965 635 3 -a 965 855 8 -a 965 903 9 -a 965 919 3 -a 965 710 6 -a 965 794 9 -a 965 373 10 -a 965 597 6 -a 965 552 9 -a 965 439 8 -a 965 175 3 -a 965 977 7 -a 965 766 2 -a 965 54 7 -a 965 124 2 -a 966 112 4 -a 966 699 9 -a 966 376 5 -a 966 309 4 -a 966 716 2 -a 966 232 9 -a 966 957 7 -a 966 250 10 -a 966 104 7 -a 966 549 6 -a 966 693 8 -a 966 193 7 -a 966 782 10 -a 966 242 10 -a 966 278 10 -a 966 392 1 -a 966 72 5 -a 966 157 4 -a 966 286 8 -a 966 781 8 -a 966 950 7 -a 966 658 3 -a 966 353 7 -a 966 477 10 -a 966 72 6 -a 966 527 7 -a 967 429 6 -a 967 838 5 -a 967 520 9 -a 967 482 1 -a 967 961 5 -a 967 631 4 -a 967 156 10 -a 967 313 5 -a 967 939 2 -a 967 872 2 -a 967 544 8 -a 967 872 6 -a 967 97 3 -a 967 647 1 -a 967 396 4 -a 967 789 3 -a 967 839 6 -a 967 153 2 -a 967 6 7 -a 967 93 6 -a 968 544 6 -a 968 77 9 -a 968 249 6 -a 968 829 3 -a 968 858 10 -a 968 174 4 -a 968 462 3 -a 968 186 8 -a 968 650 5 -a 968 533 10 -a 968 713 2 -a 968 55 5 -a 968 346 4 -a 968 208 10 -a 968 536 5 -a 968 283 5 -a 969 838 2 -a 969 692 8 -a 969 595 3 -a 969 752 10 -a 969 539 5 -a 969 114 3 -a 969 599 1 -a 969 635 7 -a 969 760 10 -a 969 994 5 -a 969 399 7 -a 969 575 6 -a 969 122 3 -a 969 404 10 -a 969 667 6 -a 970 665 2 -a 970 480 6 -a 970 915 1 -a 970 469 8 -a 970 313 10 -a 970 64 10 -a 970 930 1 -a 970 499 1 -a 970 713 3 -a 970 439 6 -a 970 187 6 -a 970 767 2 -a 970 784 5 -a 970 394 7 -a 970 279 7 -a 971 42 8 -a 971 207 1 -a 971 970 9 -a 971 636 1 -a 971 958 5 -a 971 484 9 -a 971 749 6 -a 971 533 4 -a 971 94 7 -a 971 485 5 -a 971 502 7 -a 971 492 7 -a 971 35 3 -a 971 624 4 -a 971 895 1 -a 971 701 7 -a 971 264 1 -a 971 350 6 -a 971 591 7 -a 971 733 4 -a 971 663 3 -a 971 654 8 -a 971 638 9 -a 972 137 8 -a 972 342 6 -a 972 52 5 -a 972 323 4 -a 972 85 6 -a 972 836 7 -a 972 716 8 -a 972 363 1 -a 972 877 6 -a 972 922 7 -a 972 308 6 -a 972 489 1 -a 972 855 10 -a 972 791 1 -a 972 213 3 -a 972 363 7 -a 972 884 8 -a 972 697 3 -a 972 865 3 -a 972 351 7 -a 973 731 2 -a 973 464 9 -a 973 221 3 -a 973 407 7 -a 973 727 4 -a 973 570 1 -a 973 997 9 -a 973 435 4 -a 973 208 4 -a 973 626 4 -a 973 49 4 -a 973 344 3 -a 973 968 3 -a 973 100 7 -a 973 666 5 -a 973 28 9 -a 974 935 5 -a 974 357 7 -a 974 390 4 -a 974 788 2 -a 974 254 3 -a 974 697 5 -a 974 252 9 -a 974 85 8 -a 974 463 4 -a 974 464 7 -a 974 447 2 -a 974 322 1 -a 974 137 9 -a 974 287 5 -a 974 672 9 -a 974 867 6 -a 974 750 1 -a 975 892 8 -a 975 250 2 -a 975 453 4 -a 975 437 4 -a 975 222 3 -a 975 887 3 -a 975 645 3 -a 975 848 4 -a 975 935 10 -a 975 988 10 -a 975 791 9 -a 975 11 8 -a 975 630 9 -a 975 818 3 -a 975 945 2 -a 975 986 1 -a 975 183 10 -a 976 708 7 -a 976 216 6 -a 976 879 10 -a 976 959 5 -a 976 300 6 -a 976 317 6 -a 976 399 1 -a 976 746 9 -a 976 638 2 -a 976 535 8 -a 976 9 4 -a 976 285 10 -a 976 377 1 -a 976 758 10 -a 976 152 10 -a 976 626 4 -a 976 186 2 -a 976 588 3 -a 976 848 4 -a 977 49 5 -a 977 208 8 -a 977 671 5 -a 977 983 2 -a 977 172 5 -a 977 437 9 -a 977 993 7 -a 977 801 7 -a 977 230 9 -a 977 914 7 -a 977 762 3 -a 977 412 2 -a 977 597 9 -a 977 977 3 -a 977 266 5 -a 977 532 8 -a 977 252 1 -a 977 582 9 -a 977 930 3 -a 977 998 7 -a 977 195 2 -a 977 440 10 -a 977 479 3 -a 977 816 6 -a 978 739 7 -a 978 630 5 -a 978 418 3 -a 978 925 5 -a 978 193 4 -a 978 241 9 -a 978 973 4 -a 978 401 7 -a 978 911 10 -a 978 931 9 -a 978 572 8 -a 978 323 1 -a 978 900 5 -a 979 348 1 -a 979 552 4 -a 979 789 7 -a 979 85 3 -a 979 963 2 -a 979 361 10 -a 979 38 5 -a 979 204 2 -a 979 892 10 -a 979 289 10 -a 979 785 5 -a 979 797 5 -a 979 262 7 -a 979 979 8 -a 979 212 4 -a 979 243 8 -a 979 433 7 -a 979 4 3 -a 979 982 2 -a 979 38 5 -a 979 421 9 -a 980 882 8 -a 980 230 8 -a 980 661 6 -a 980 830 3 -a 980 630 6 -a 980 547 4 -a 980 736 1 -a 980 177 9 -a 980 869 1 -a 980 611 9 -a 980 524 7 -a 980 396 7 -a 980 375 7 -a 980 609 6 -a 980 334 2 -a 980 736 4 -a 980 646 4 -a 980 537 6 -a 980 603 5 -a 980 934 10 -a 980 297 6 -a 980 376 9 -a 980 172 2 -a 980 251 1 -a 981 587 4 -a 981 414 9 -a 981 683 2 -a 981 590 4 -a 981 371 2 -a 981 720 7 -a 981 228 7 -a 981 949 2 -a 981 646 8 -a 981 33 10 -a 981 555 5 -a 981 168 1 -a 981 769 10 -a 981 731 4 -a 981 12 9 -a 981 355 2 -a 981 231 9 -a 981 407 3 -a 981 730 1 -a 982 839 1 -a 982 740 10 -a 982 441 4 -a 982 460 7 -a 982 252 1 -a 982 19 1 -a 982 369 2 -a 982 548 5 -a 982 394 4 -a 982 540 2 -a 982 798 1 -a 982 981 10 -a 982 954 7 -a 982 456 6 -a 982 546 9 -a 982 300 3 -a 982 151 4 -a 982 532 8 -a 982 528 1 -a 983 76 8 -a 983 153 2 -a 983 560 7 -a 983 630 5 -a 983 321 8 -a 983 304 7 -a 983 336 6 -a 983 332 5 -a 983 659 9 -a 983 566 4 -a 983 739 9 -a 983 364 4 -a 983 380 7 -a 983 454 4 -a 984 804 8 -a 984 839 3 -a 984 706 8 -a 984 822 3 -a 984 184 1 -a 984 229 2 -a 984 192 9 -a 984 723 5 -a 984 3 4 -a 984 148 10 -a 984 652 7 -a 984 458 8 -a 984 693 2 -a 984 952 10 -a 984 609 8 -a 984 200 1 -a 984 455 6 -a 984 684 4 -a 984 353 7 -a 985 289 5 -a 985 673 2 -a 985 294 8 -a 985 624 10 -a 985 952 2 -a 985 166 10 -a 985 718 3 -a 985 291 4 -a 985 545 9 -a 985 148 3 -a 985 70 10 -a 985 360 6 -a 985 853 6 -a 985 891 8 -a 985 543 10 -a 985 57 3 -a 985 58 1 -a 985 241 9 -a 985 59 5 -a 985 205 8 -a 985 893 6 -a 985 517 4 -a 985 898 9 -a 986 820 5 -a 986 101 3 -a 986 73 6 -a 986 250 7 -a 986 784 6 -a 986 425 2 -a 986 239 8 -a 986 48 10 -a 986 73 10 -a 986 532 10 -a 986 671 7 -a 986 53 3 -a 986 459 4 -a 986 836 9 -a 986 770 4 -a 986 749 1 -a 986 357 8 -a 986 917 6 -a 986 818 6 -a 986 716 2 -a 986 745 2 -a 986 685 5 -a 986 234 5 -a 986 802 7 -a 987 742 9 -a 987 474 5 -a 987 860 9 -a 987 947 1 -a 987 342 2 -a 987 352 10 -a 987 820 1 -a 987 137 4 -a 988 452 3 -a 988 892 7 -a 988 386 7 -a 988 211 7 -a 988 293 10 -a 988 625 5 -a 988 258 1 -a 988 365 10 -a 988 132 6 -a 988 929 2 -a 988 417 10 -a 988 591 7 -a 988 740 4 -a 988 163 9 -a 988 315 6 -a 988 72 8 -a 988 55 7 -a 988 109 8 -a 989 787 7 -a 989 800 8 -a 989 793 2 -a 989 577 9 -a 989 510 5 -a 989 470 2 -a 989 412 8 -a 989 432 4 -a 989 811 4 -a 989 764 6 -a 989 227 3 -a 989 948 5 -a 990 191 1 -a 990 95 2 -a 990 309 3 -a 990 402 5 -a 990 387 8 -a 990 933 8 -a 990 659 3 -a 990 751 2 -a 990 41 9 -a 990 563 6 -a 990 144 8 -a 990 631 1 -a 990 279 7 -a 990 306 7 -a 990 945 9 -a 990 350 9 -a 990 360 7 -a 990 29 6 -a 990 113 5 -a 990 135 10 -a 990 821 2 -a 990 108 1 -a 990 711 4 -a 990 307 2 -a 991 577 1 -a 991 99 3 -a 991 738 1 -a 991 364 8 -a 991 862 8 -a 991 965 9 -a 991 287 10 -a 991 28 6 -a 991 35 10 -a 991 595 3 -a 991 429 2 -a 991 421 3 -a 991 504 2 -a 991 64 8 -a 991 147 1 -a 991 544 3 -a 991 626 5 -a 991 290 6 -a 991 150 8 -a 991 904 9 -a 991 595 9 -a 991 70 8 -a 991 230 10 -a 991 955 8 -a 991 99 3 -a 991 342 1 -a 992 65 7 -a 992 919 10 -a 992 449 2 -a 992 776 3 -a 992 201 2 -a 992 2 10 -a 992 874 2 -a 992 939 2 -a 992 365 1 -a 992 711 5 -a 992 879 4 -a 992 651 5 -a 992 738 4 -a 992 913 8 -a 993 221 8 -a 993 143 10 -a 993 309 9 -a 993 724 5 -a 993 206 4 -a 993 455 3 -a 993 243 2 -a 993 831 2 -a 993 745 1 -a 993 392 1 -a 993 711 6 -a 993 315 2 -a 993 462 1 -a 993 940 4 -a 993 245 8 -a 993 560 2 -a 993 257 5 -a 993 310 8 -a 993 454 5 -a 993 705 4 -a 993 61 3 -a 993 655 2 -a 993 706 10 -a 993 934 1 -a 993 569 4 -a 993 46 9 -a 993 620 6 -a 993 423 1 -a 994 696 6 -a 994 333 9 -a 994 311 10 -a 994 917 8 -a 994 475 1 -a 994 619 6 -a 994 616 5 -a 994 680 8 -a 994 49 2 -a 994 859 5 -a 994 487 9 -a 994 793 1 -a 994 226 10 -a 994 173 3 -a 994 84 10 -a 994 687 3 -a 994 88 7 -a 994 328 3 -a 994 222 7 -a 994 344 4 -a 994 637 8 -a 994 676 3 -a 995 24 1 -a 995 697 1 -a 995 306 8 -a 995 730 1 -a 995 606 7 -a 995 874 5 -a 995 775 10 -a 995 201 3 -a 995 272 3 -a 995 447 3 -a 995 534 9 -a 995 582 5 -a 995 339 10 -a 995 176 10 -a 995 954 5 -a 995 664 1 -a 995 224 8 -a 995 788 7 -a 995 126 3 -a 995 298 9 -a 995 76 7 -a 995 676 7 -a 995 385 6 -a 995 403 4 -a 995 898 10 -a 995 728 10 -a 995 16 8 -a 995 549 10 -a 996 751 4 -a 996 712 5 -a 996 854 7 -a 996 456 2 -a 996 294 1 -a 996 703 1 -a 996 207 6 -a 996 494 1 -a 996 974 5 -a 996 653 3 -a 996 3 5 -a 996 531 2 -a 996 991 5 -a 996 706 1 -a 996 920 7 -a 996 650 1 -a 996 929 10 -a 996 684 10 -a 997 775 5 -a 997 921 6 -a 997 673 6 -a 997 48 5 -a 997 996 3 -a 997 324 3 -a 997 432 3 -a 997 375 3 -a 997 197 3 -a 997 135 5 -a 997 390 2 -a 997 745 3 -a 997 885 1 -a 997 77 6 -a 997 574 5 -a 997 317 6 -a 997 370 1 -a 997 252 6 -a 997 523 10 -a 997 864 1 -a 997 201 10 -a 997 151 5 -a 997 866 3 -a 997 731 8 -a 998 117 5 -a 998 852 6 -a 998 412 3 -a 998 12 8 -a 998 477 2 -a 998 317 2 -a 998 695 10 -a 998 227 6 -a 998 213 3 -a 998 343 7 -a 998 274 9 -a 998 185 1 -a 998 667 9 -a 998 705 6 -a 998 559 5 -a 998 863 9 -a 998 839 2 -a 998 948 4 -a 998 584 6 -a 998 700 3 -a 998 133 8 -a 998 370 2 -a 998 385 2 -a 998 514 7 -a 999 209 4 -a 999 585 10 -a 999 664 6 -a 999 50 8 -a 999 292 4 -a 999 780 1 -a 999 902 6 -a 999 703 4 -a 999 791 9 -a 999 354 6 -a 999 462 10 -a 999 581 10 -a 999 208 4 -a 999 804 9 -a 999 854 5 -a 999 392 10 -a 999 446 7 -a 999 535 9 -a 999 950 2 -a 999 285 10 -a 999 349 1 -a 999 873 7 -a 999 868 4 -a 999 24 7 -a 999 872 9 -a 999 1000 9 -a 1000 15 8 -a 1000 217 9 -a 1000 360 5 -a 1000 528 8 -a 1000 425 8 -a 1000 945 1 -a 1000 167 3 -a 1000 475 6 -a 1000 212 4 -a 1000 946 2 -a 1000 352 8 -a 1000 914 4 -a 1000 713 8 -a 1000 705 2 -a 1000 909 1 -a 1000 150 7 -a 1 1 3 -a 1 1000 2 -a 1 2 8 -a 2 1000 3 -a 1 3 5 -a 3 1000 3 -a 1 4 3 -a 4 1000 10 -a 1 5 10 -a 5 1000 10 -a 1 6 2 -a 6 1000 3 -a 1 7 8 -a 7 1000 1 -a 1 8 9 -a 8 1000 8 -a 1 9 2 -a 9 1000 10 -a 1 10 2 -a 10 1000 6 -a 1 11 5 -a 11 1000 2 -a 1 12 7 -a 12 1000 10 -a 1 13 10 -a 13 1000 5 -a 1 14 3 -a 14 1000 9 -a 1 15 4 -a 15 1000 1 -a 1 16 10 -a 16 1000 3 -a 1 17 2 -a 17 1000 7 -a 1 18 9 -a 18 1000 6 -a 1 19 2 -a 19 1000 4 -a 1 20 2 -a 20 1000 1 -a 1 21 2 -a 21 1000 9 -a 1 22 9 -a 22 1000 4 -a 1 23 4 -a 23 1000 7 -a 1 24 10 -a 24 1000 4 -a 1 25 6 -a 25 1000 7 -a 1 26 11 -a 26 1000 7 -a 1 27 7 -a 27 1000 10 -a 1 28 7 -a 28 1000 2 -a 1 29 6 -a 29 1000 1 -a 1 30 3 -a 30 1000 4 -a 1 31 7 -a 31 1000 5 -a 1 32 7 -a 32 1000 4 -a 1 33 8 -a 33 1000 1 -a 1 34 2 -a 34 1000 8 -a 1 35 5 -a 35 1000 8 -a 1 36 8 -a 36 1000 2 -a 1 37 4 -a 37 1000 2 -a 1 38 9 -a 38 1000 5 -a 1 39 8 -a 39 1000 3 -a 1 40 7 -a 40 1000 3 -a 1 41 9 -a 41 1000 3 -a 1 42 9 -a 42 1000 2 -a 1 43 8 -a 43 1000 2 -a 1 44 4 -a 44 1000 10 -a 1 45 3 -a 45 1000 2 -a 1 46 8 -a 46 1000 10 -a 1 47 9 -a 47 1000 3 -a 1 48 4 -a 48 1000 5 -a 1 49 7 -a 49 1000 4 -a 1 50 11 -a 50 1000 5 -a 1 51 8 -a 51 1000 4 -a 1 52 4 -a 52 1000 6 -a 1 53 4 -a 53 1000 5 -a 1 54 2 -a 54 1000 6 -a 1 55 7 -a 55 1000 9 -a 1 56 8 -a 56 1000 8 -a 1 57 4 -a 57 1000 9 -a 1 58 10 -a 58 1000 7 -a 1 59 4 -a 59 1000 6 -a 1 60 5 -a 60 1000 2 -a 1 61 11 -a 61 1000 3 -a 1 62 10 -a 62 1000 3 -a 1 63 2 -a 63 1000 1 -a 1 64 6 -a 64 1000 3 -a 1 65 9 -a 65 1000 3 -a 1 66 5 -a 66 1000 5 -a 1 67 11 -a 67 1000 8 -a 1 68 4 -a 68 1000 1 -a 1 69 8 -a 69 1000 5 -a 1 70 10 -a 70 1000 3 -a 1 71 4 -a 71 1000 3 -a 1 72 6 -a 72 1000 3 -a 1 73 3 -a 73 1000 3 -a 1 74 4 -a 74 1000 6 -a 1 75 2 -a 75 1000 8 -a 1 76 9 -a 76 1000 10 -a 1 77 2 -a 77 1000 8 -a 1 78 6 -a 78 1000 7 -a 1 79 10 -a 79 1000 1 -a 1 80 11 -a 80 1000 9 -a 1 81 8 -a 81 1000 1 -a 1 82 11 -a 82 1000 4 -a 1 83 3 -a 83 1000 5 -a 1 84 5 -a 84 1000 10 -a 1 85 5 -a 85 1000 1 -a 1 86 5 -a 86 1000 1 -a 1 87 3 -a 87 1000 5 -a 1 88 6 -a 88 1000 2 -a 1 89 4 -a 89 1000 4 -a 1 90 7 -a 90 1000 9 -a 1 91 3 -a 91 1000 6 -a 1 92 3 -a 92 1000 1 -a 1 93 10 -a 93 1000 3 -a 1 94 7 -a 94 1000 6 -a 1 95 11 -a 95 1000 7 -a 1 96 11 -a 96 1000 6 -a 1 97 4 -a 97 1000 6 -a 1 98 10 -a 98 1000 7 -a 1 99 11 -a 99 1000 10 -a 1 100 3 -a 100 1000 6 -a 1 101 6 -a 101 1000 5 -a 1 102 7 -a 102 1000 1 -a 1 103 7 -a 103 1000 7 -a 1 104 10 -a 104 1000 5 -a 1 105 10 -a 105 1000 6 -a 1 106 5 -a 106 1000 7 -a 1 107 2 -a 107 1000 1 -a 1 108 8 -a 108 1000 8 -a 1 109 10 -a 109 1000 3 -a 1 110 7 -a 110 1000 1 -a 1 111 9 -a 111 1000 5 -a 1 112 7 -a 112 1000 6 -a 1 113 3 -a 113 1000 1 -a 1 114 7 -a 114 1000 9 -a 1 115 5 -a 115 1000 9 -a 1 116 7 -a 116 1000 7 -a 1 117 5 -a 117 1000 5 -a 1 118 8 -a 118 1000 8 -a 1 119 11 -a 119 1000 6 -a 1 120 9 -a 120 1000 1 -a 1 121 10 -a 121 1000 3 -a 1 122 11 -a 122 1000 1 -a 1 123 4 -a 123 1000 4 -a 1 124 9 -a 124 1000 8 -a 1 125 3 -a 125 1000 4 -a 1 126 2 -a 126 1000 4 -a 1 127 8 -a 127 1000 3 -a 1 128 6 -a 128 1000 7 -a 1 129 8 -a 129 1000 1 -a 1 130 8 -a 130 1000 4 -a 1 131 10 -a 131 1000 1 -a 1 132 7 -a 132 1000 2 -a 1 133 8 -a 133 1000 1 -a 1 134 11 -a 134 1000 8 -a 1 135 6 -a 135 1000 5 -a 1 136 9 -a 136 1000 10 -a 1 137 7 -a 137 1000 8 -a 1 138 2 -a 138 1000 3 -a 1 139 9 -a 139 1000 1 -a 1 140 2 -a 140 1000 7 -a 1 141 2 -a 141 1000 5 -a 1 142 11 -a 142 1000 10 -a 1 143 6 -a 143 1000 6 -a 1 144 3 -a 144 1000 10 -a 1 145 8 -a 145 1000 8 -a 1 146 4 -a 146 1000 8 -a 1 147 4 -a 147 1000 8 -a 1 148 6 -a 148 1000 8 -a 1 149 5 -a 149 1000 1 -a 1 150 10 -a 150 1000 8 -a 1 151 3 -a 151 1000 6 -a 1 152 4 -a 152 1000 1 -a 1 153 9 -a 153 1000 3 -a 1 154 11 -a 154 1000 10 -a 1 155 10 -a 155 1000 8 -a 1 156 5 -a 156 1000 3 -a 1 157 7 -a 157 1000 1 -a 1 158 11 -a 158 1000 8 -a 1 159 2 -a 159 1000 8 -a 1 160 3 -a 160 1000 8 -a 1 161 10 -a 161 1000 3 -a 1 162 5 -a 162 1000 10 -a 1 163 10 -a 163 1000 7 -a 1 164 9 -a 164 1000 2 -a 1 165 6 -a 165 1000 8 -a 1 166 2 -a 166 1000 2 -a 1 167 9 -a 167 1000 10 -a 1 168 11 -a 168 1000 6 -a 1 169 11 -a 169 1000 1 -a 1 170 8 -a 170 1000 1 -a 1 171 7 -a 171 1000 9 -a 1 172 3 -a 172 1000 7 -a 1 173 6 -a 173 1000 3 -a 1 174 5 -a 174 1000 1 -a 1 175 3 -a 175 1000 1 -a 1 176 9 -a 176 1000 3 -a 1 177 6 -a 177 1000 6 -a 1 178 7 -a 178 1000 1 -a 1 179 5 -a 179 1000 10 -a 1 180 10 -a 180 1000 8 -a 1 181 11 -a 181 1000 9 -a 1 182 5 -a 182 1000 5 -a 1 183 2 -a 183 1000 1 -a 1 184 7 -a 184 1000 8 -a 1 185 5 -a 185 1000 1 -a 1 186 11 -a 186 1000 4 -a 1 187 5 -a 187 1000 2 -a 1 188 4 -a 188 1000 9 -a 1 189 9 -a 189 1000 1 -a 1 190 6 -a 190 1000 1 -a 1 191 9 -a 191 1000 10 -a 1 192 2 -a 192 1000 3 -a 1 193 4 -a 193 1000 7 -a 1 194 5 -a 194 1000 7 -a 1 195 11 -a 195 1000 8 -a 1 196 9 -a 196 1000 8 -a 1 197 3 -a 197 1000 3 -a 1 198 8 -a 198 1000 10 -a 1 199 8 -a 199 1000 2 -a 1 200 3 -a 200 1000 8 -a 1 201 3 -a 201 1000 4 -a 1 202 11 -a 202 1000 1 -a 1 203 6 -a 203 1000 10 -a 1 204 8 -a 204 1000 1 -a 1 205 5 -a 205 1000 10 -a 1 206 9 -a 206 1000 5 -a 1 207 3 -a 207 1000 6 -a 1 208 9 -a 208 1000 9 -a 1 209 8 -a 209 1000 2 -a 1 210 4 -a 210 1000 3 -a 1 211 8 -a 211 1000 4 -a 1 212 2 -a 212 1000 7 -a 1 213 9 -a 213 1000 10 -a 1 214 6 -a 214 1000 10 -a 1 215 2 -a 215 1000 3 -a 1 216 3 -a 216 1000 6 -a 1 217 3 -a 217 1000 2 -a 1 218 5 -a 218 1000 7 -a 1 219 7 -a 219 1000 7 -a 1 220 10 -a 220 1000 8 -a 1 221 9 -a 221 1000 9 -a 1 222 11 -a 222 1000 10 -a 1 223 11 -a 223 1000 5 -a 1 224 5 -a 224 1000 3 -a 1 225 2 -a 225 1000 8 -a 1 226 2 -a 226 1000 6 -a 1 227 9 -a 227 1000 9 -a 1 228 5 -a 228 1000 5 -a 1 229 6 -a 229 1000 10 -a 1 230 8 -a 230 1000 5 -a 1 231 3 -a 231 1000 7 -a 1 232 9 -a 232 1000 2 -a 1 233 2 -a 233 1000 3 -a 1 234 2 -a 234 1000 8 -a 1 235 9 -a 235 1000 5 -a 1 236 11 -a 236 1000 7 -a 1 237 3 -a 237 1000 6 -a 1 238 6 -a 238 1000 2 -a 1 239 10 -a 239 1000 1 -a 1 240 7 -a 240 1000 6 -a 1 241 2 -a 241 1000 3 -a 1 242 6 -a 242 1000 7 -a 1 243 4 -a 243 1000 6 -a 1 244 11 -a 244 1000 4 -a 1 245 5 -a 245 1000 10 -a 1 246 6 -a 246 1000 6 -a 1 247 10 -a 247 1000 5 -a 1 248 2 -a 248 1000 6 -a 1 249 11 -a 249 1000 6 -a 1 250 2 -a 250 1000 6 -a 1 251 4 -a 251 1000 4 -a 1 252 7 -a 252 1000 10 -a 1 253 6 -a 253 1000 5 -a 1 254 4 -a 254 1000 6 -a 1 255 8 -a 255 1000 4 -a 1 256 2 -a 256 1000 4 -a 1 257 2 -a 257 1000 4 -a 1 258 10 -a 258 1000 6 -a 1 259 3 -a 259 1000 2 -a 1 260 3 -a 260 1000 8 -a 1 261 5 -a 261 1000 1 -a 1 262 4 -a 262 1000 10 -a 1 263 2 -a 263 1000 5 -a 1 264 6 -a 264 1000 2 -a 1 265 4 -a 265 1000 8 -a 1 266 4 -a 266 1000 8 -a 1 267 2 -a 267 1000 3 -a 1 268 10 -a 268 1000 7 -a 1 269 7 -a 269 1000 2 -a 1 270 4 -a 270 1000 7 -a 1 271 2 -a 271 1000 4 -a 1 272 10 -a 272 1000 7 -a 1 273 8 -a 273 1000 8 -a 1 274 6 -a 274 1000 6 -a 1 275 4 -a 275 1000 1 -a 1 276 4 -a 276 1000 3 -a 1 277 9 -a 277 1000 1 -a 1 278 2 -a 278 1000 7 -a 1 279 2 -a 279 1000 3 -a 1 280 5 -a 280 1000 8 -a 1 281 2 -a 281 1000 5 -a 1 282 8 -a 282 1000 3 -a 1 283 5 -a 283 1000 8 -a 1 284 3 -a 284 1000 4 -a 1 285 6 -a 285 1000 5 -a 1 286 8 -a 286 1000 6 -a 1 287 10 -a 287 1000 6 -a 1 288 9 -a 288 1000 6 -a 1 289 8 -a 289 1000 10 -a 1 290 6 -a 290 1000 4 -a 1 291 8 -a 291 1000 6 -a 1 292 6 -a 292 1000 10 -a 1 293 11 -a 293 1000 10 -a 1 294 5 -a 294 1000 2 -a 1 295 9 -a 295 1000 8 -a 1 296 4 -a 296 1000 3 -a 1 297 3 -a 297 1000 3 -a 1 298 10 -a 298 1000 7 -a 1 299 3 -a 299 1000 5 -a 1 300 11 -a 300 1000 10 -a 1 301 10 -a 301 1000 4 -a 1 302 3 -a 302 1000 9 -a 1 303 3 -a 303 1000 6 -a 1 304 11 -a 304 1000 9 -a 1 305 5 -a 305 1000 2 -a 1 306 3 -a 306 1000 5 -a 1 307 7 -a 307 1000 8 -a 1 308 2 -a 308 1000 6 -a 1 309 5 -a 309 1000 2 -a 1 310 11 -a 310 1000 4 -a 1 311 6 -a 311 1000 7 -a 1 312 8 -a 312 1000 6 -a 1 313 6 -a 313 1000 1 -a 1 314 8 -a 314 1000 6 -a 1 315 9 -a 315 1000 10 -a 1 316 10 -a 316 1000 10 -a 1 317 7 -a 317 1000 8 -a 1 318 7 -a 318 1000 4 -a 1 319 9 -a 319 1000 4 -a 1 320 6 -a 320 1000 7 -a 1 321 2 -a 321 1000 10 -a 1 322 2 -a 322 1000 7 -a 1 323 3 -a 323 1000 4 -a 1 324 9 -a 324 1000 10 -a 1 325 7 -a 325 1000 9 -a 1 326 7 -a 326 1000 2 -a 1 327 5 -a 327 1000 8 -a 1 328 10 -a 328 1000 2 -a 1 329 6 -a 329 1000 5 -a 1 330 6 -a 330 1000 9 -a 1 331 2 -a 331 1000 1 -a 1 332 10 -a 332 1000 10 -a 1 333 2 -a 333 1000 5 -a 1 334 10 -a 334 1000 8 -a 1 335 7 -a 335 1000 4 -a 1 336 7 -a 336 1000 10 -a 1 337 2 -a 337 1000 7 -a 1 338 11 -a 338 1000 7 -a 1 339 3 -a 339 1000 5 -a 1 340 8 -a 340 1000 4 -a 1 341 6 -a 341 1000 10 -a 1 342 10 -a 342 1000 2 -a 1 343 3 -a 343 1000 1 -a 1 344 5 -a 344 1000 10 -a 1 345 2 -a 345 1000 1 -a 1 346 11 -a 346 1000 10 -a 1 347 2 -a 347 1000 5 -a 1 348 3 -a 348 1000 4 -a 1 349 11 -a 349 1000 4 -a 1 350 7 -a 350 1000 6 -a 1 351 3 -a 351 1000 3 -a 1 352 2 -a 352 1000 3 -a 1 353 6 -a 353 1000 6 -a 1 354 11 -a 354 1000 1 -a 1 355 6 -a 355 1000 3 -a 1 356 3 -a 356 1000 2 -a 1 357 8 -a 357 1000 10 -a 1 358 3 -a 358 1000 8 -a 1 359 7 -a 359 1000 2 -a 1 360 4 -a 360 1000 3 -a 1 361 4 -a 361 1000 2 -a 1 362 3 -a 362 1000 10 -a 1 363 9 -a 363 1000 2 -a 1 364 7 -a 364 1000 1 -a 1 365 2 -a 365 1000 7 -a 1 366 8 -a 366 1000 2 -a 1 367 10 -a 367 1000 5 -a 1 368 7 -a 368 1000 7 -a 1 369 3 -a 369 1000 4 -a 1 370 6 -a 370 1000 5 -a 1 371 6 -a 371 1000 2 -a 1 372 3 -a 372 1000 10 -a 1 373 4 -a 373 1000 2 -a 1 374 4 -a 374 1000 10 -a 1 375 4 -a 375 1000 9 -a 1 376 9 -a 376 1000 9 -a 1 377 7 -a 377 1000 6 -a 1 378 6 -a 378 1000 5 -a 1 379 9 -a 379 1000 9 -a 1 380 5 -a 380 1000 6 -a 1 381 5 -a 381 1000 10 -a 1 382 6 -a 382 1000 3 -a 1 383 7 -a 383 1000 1 -a 1 384 11 -a 384 1000 2 -a 1 385 8 -a 385 1000 10 -a 1 386 5 -a 386 1000 4 -a 1 387 4 -a 387 1000 8 -a 1 388 5 -a 388 1000 10 -a 1 389 2 -a 389 1000 7 -a 1 390 7 -a 390 1000 5 -a 1 391 4 -a 391 1000 5 -a 1 392 10 -a 392 1000 5 -a 1 393 2 -a 393 1000 10 -a 1 394 9 -a 394 1000 8 -a 1 395 10 -a 395 1000 3 -a 1 396 7 -a 396 1000 2 -a 1 397 8 -a 397 1000 9 -a 1 398 2 -a 398 1000 9 -a 1 399 5 -a 399 1000 2 -a 1 400 8 -a 400 1000 6 -a 1 401 2 -a 401 1000 4 -a 1 402 7 -a 402 1000 9 -a 1 403 3 -a 403 1000 6 -a 1 404 5 -a 404 1000 4 -a 1 405 8 -a 405 1000 5 -a 1 406 4 -a 406 1000 10 -a 1 407 10 -a 407 1000 2 -a 1 408 2 -a 408 1000 1 -a 1 409 3 -a 409 1000 4 -a 1 410 3 -a 410 1000 1 -a 1 411 9 -a 411 1000 4 -a 1 412 3 -a 412 1000 5 -a 1 413 6 -a 413 1000 6 -a 1 414 7 -a 414 1000 10 -a 1 415 6 -a 415 1000 7 -a 1 416 10 -a 416 1000 5 -a 1 417 10 -a 417 1000 7 -a 1 418 7 -a 418 1000 9 -a 1 419 8 -a 419 1000 7 -a 1 420 9 -a 420 1000 8 -a 1 421 11 -a 421 1000 7 -a 1 422 2 -a 422 1000 6 -a 1 423 11 -a 423 1000 5 -a 1 424 6 -a 424 1000 8 -a 1 425 3 -a 425 1000 10 -a 1 426 10 -a 426 1000 2 -a 1 427 11 -a 427 1000 3 -a 1 428 3 -a 428 1000 2 -a 1 429 11 -a 429 1000 9 -a 1 430 2 -a 430 1000 7 -a 1 431 7 -a 431 1000 3 -a 1 432 5 -a 432 1000 5 -a 1 433 11 -a 433 1000 9 -a 1 434 3 -a 434 1000 10 -a 1 435 7 -a 435 1000 8 -a 1 436 8 -a 436 1000 7 -a 1 437 5 -a 437 1000 3 -a 1 438 2 -a 438 1000 6 -a 1 439 6 -a 439 1000 2 -a 1 440 6 -a 440 1000 1 -a 1 441 8 -a 441 1000 2 -a 1 442 2 -a 442 1000 8 -a 1 443 3 -a 443 1000 9 -a 1 444 3 -a 444 1000 6 -a 1 445 5 -a 445 1000 6 -a 1 446 2 -a 446 1000 8 -a 1 447 9 -a 447 1000 4 -a 1 448 7 -a 448 1000 1 -a 1 449 11 -a 449 1000 10 -a 1 450 4 -a 450 1000 10 -a 1 451 10 -a 451 1000 8 -a 1 452 11 -a 452 1000 2 -a 1 453 2 -a 453 1000 4 -a 1 454 2 -a 454 1000 9 -a 1 455 6 -a 455 1000 7 -a 1 456 5 -a 456 1000 9 -a 1 457 6 -a 457 1000 3 -a 1 458 5 -a 458 1000 4 -a 1 459 10 -a 459 1000 2 -a 1 460 3 -a 460 1000 3 -a 1 461 2 -a 461 1000 3 -a 1 462 8 -a 462 1000 10 -a 1 463 6 -a 463 1000 2 -a 1 464 3 -a 464 1000 8 -a 1 465 2 -a 465 1000 9 -a 1 466 3 -a 466 1000 10 -a 1 467 11 -a 467 1000 3 -a 1 468 3 -a 468 1000 5 -a 1 469 7 -a 469 1000 6 -a 1 470 9 -a 470 1000 3 -a 1 471 11 -a 471 1000 9 -a 1 472 9 -a 472 1000 8 -a 1 473 10 -a 473 1000 10 -a 1 474 9 -a 474 1000 9 -a 1 475 2 -a 475 1000 4 -a 1 476 2 -a 476 1000 6 -a 1 477 11 -a 477 1000 2 -a 1 478 8 -a 478 1000 6 -a 1 479 4 -a 479 1000 10 -a 1 480 6 -a 480 1000 1 -a 1 481 11 -a 481 1000 10 -a 1 482 4 -a 482 1000 4 -a 1 483 3 -a 483 1000 2 -a 1 484 8 -a 484 1000 1 -a 1 485 2 -a 485 1000 2 -a 1 486 2 -a 486 1000 8 -a 1 487 8 -a 487 1000 2 -a 1 488 2 -a 488 1000 10 -a 1 489 4 -a 489 1000 5 -a 1 490 5 -a 490 1000 10 -a 1 491 7 -a 491 1000 2 -a 1 492 3 -a 492 1000 1 -a 1 493 5 -a 493 1000 1 -a 1 494 8 -a 494 1000 3 -a 1 495 10 -a 495 1000 8 -a 1 496 11 -a 496 1000 4 -a 1 497 3 -a 497 1000 9 -a 1 498 10 -a 498 1000 3 -a 1 499 2 -a 499 1000 10 -a 1 500 7 -a 500 1000 3 -a 1 501 2 -a 501 1000 10 -a 1 502 2 -a 502 1000 6 -a 1 503 8 -a 503 1000 4 -a 1 504 9 -a 504 1000 5 -a 1 505 8 -a 505 1000 2 -a 1 506 4 -a 506 1000 8 -a 1 507 5 -a 507 1000 6 -a 1 508 6 -a 508 1000 2 -a 1 509 4 -a 509 1000 2 -a 1 510 4 -a 510 1000 7 -a 1 511 9 -a 511 1000 3 -a 1 512 10 -a 512 1000 4 -a 1 513 5 -a 513 1000 8 -a 1 514 3 -a 514 1000 5 -a 1 515 11 -a 515 1000 5 -a 1 516 5 -a 516 1000 2 -a 1 517 2 -a 517 1000 3 -a 1 518 4 -a 518 1000 4 -a 1 519 5 -a 519 1000 6 -a 1 520 3 -a 520 1000 5 -a 1 521 7 -a 521 1000 9 -a 1 522 8 -a 522 1000 5 -a 1 523 6 -a 523 1000 5 -a 1 524 4 -a 524 1000 1 -a 1 525 7 -a 525 1000 9 -a 1 526 5 -a 526 1000 9 -a 1 527 9 -a 527 1000 4 -a 1 528 8 -a 528 1000 1 -a 1 529 5 -a 529 1000 9 -a 1 530 2 -a 530 1000 2 -a 1 531 10 -a 531 1000 9 -a 1 532 4 -a 532 1000 5 -a 1 533 11 -a 533 1000 10 -a 1 534 4 -a 534 1000 1 -a 1 535 8 -a 535 1000 9 -a 1 536 11 -a 536 1000 10 -a 1 537 7 -a 537 1000 6 -a 1 538 6 -a 538 1000 2 -a 1 539 6 -a 539 1000 2 -a 1 540 6 -a 540 1000 4 -a 1 541 9 -a 541 1000 10 -a 1 542 10 -a 542 1000 8 -a 1 543 4 -a 543 1000 5 -a 1 544 9 -a 544 1000 5 -a 1 545 7 -a 545 1000 1 -a 1 546 6 -a 546 1000 6 -a 1 547 11 -a 547 1000 8 -a 1 548 4 -a 548 1000 3 -a 1 549 10 -a 549 1000 8 -a 1 550 7 -a 550 1000 7 -a 1 551 11 -a 551 1000 10 -a 1 552 7 -a 552 1000 9 -a 1 553 11 -a 553 1000 10 -a 1 554 5 -a 554 1000 6 -a 1 555 10 -a 555 1000 2 -a 1 556 5 -a 556 1000 8 -a 1 557 2 -a 557 1000 10 -a 1 558 5 -a 558 1000 10 -a 1 559 10 -a 559 1000 1 -a 1 560 4 -a 560 1000 6 -a 1 561 10 -a 561 1000 9 -a 1 562 7 -a 562 1000 6 -a 1 563 4 -a 563 1000 10 -a 1 564 7 -a 564 1000 3 -a 1 565 9 -a 565 1000 1 -a 1 566 3 -a 566 1000 9 -a 1 567 4 -a 567 1000 1 -a 1 568 5 -a 568 1000 10 -a 1 569 8 -a 569 1000 5 -a 1 570 3 -a 570 1000 7 -a 1 571 8 -a 571 1000 1 -a 1 572 10 -a 572 1000 4 -a 1 573 10 -a 573 1000 3 -a 1 574 4 -a 574 1000 8 -a 1 575 6 -a 575 1000 7 -a 1 576 6 -a 576 1000 5 -a 1 577 9 -a 577 1000 2 -a 1 578 3 -a 578 1000 6 -a 1 579 5 -a 579 1000 1 -a 1 580 8 -a 580 1000 10 -a 1 581 8 -a 581 1000 7 -a 1 582 7 -a 582 1000 5 -a 1 583 2 -a 583 1000 8 -a 1 584 11 -a 584 1000 10 -a 1 585 3 -a 585 1000 8 -a 1 586 9 -a 586 1000 4 -a 1 587 10 -a 587 1000 6 -a 1 588 2 -a 588 1000 9 -a 1 589 8 -a 589 1000 3 -a 1 590 2 -a 590 1000 8 -a 1 591 6 -a 591 1000 9 -a 1 592 7 -a 592 1000 2 -a 1 593 7 -a 593 1000 7 -a 1 594 8 -a 594 1000 3 -a 1 595 6 -a 595 1000 10 -a 1 596 11 -a 596 1000 9 -a 1 597 11 -a 597 1000 3 -a 1 598 4 -a 598 1000 1 -a 1 599 6 -a 599 1000 4 -a 1 600 9 -a 600 1000 8 -a 1 601 5 -a 601 1000 4 -a 1 602 6 -a 602 1000 9 -a 1 603 2 -a 603 1000 3 -a 1 604 6 -a 604 1000 10 -a 1 605 8 -a 605 1000 4 -a 1 606 9 -a 606 1000 2 -a 1 607 2 -a 607 1000 5 -a 1 608 11 -a 608 1000 10 -a 1 609 8 -a 609 1000 10 -a 1 610 8 -a 610 1000 6 -a 1 611 8 -a 611 1000 10 -a 1 612 11 -a 612 1000 10 -a 1 613 3 -a 613 1000 6 -a 1 614 10 -a 614 1000 10 -a 1 615 5 -a 615 1000 1 -a 1 616 2 -a 616 1000 2 -a 1 617 5 -a 617 1000 6 -a 1 618 7 -a 618 1000 5 -a 1 619 5 -a 619 1000 5 -a 1 620 2 -a 620 1000 4 -a 1 621 11 -a 621 1000 5 -a 1 622 11 -a 622 1000 4 -a 1 623 9 -a 623 1000 3 -a 1 624 5 -a 624 1000 6 -a 1 625 5 -a 625 1000 9 -a 1 626 6 -a 626 1000 10 -a 1 627 9 -a 627 1000 5 -a 1 628 10 -a 628 1000 1 -a 1 629 4 -a 629 1000 6 -a 1 630 8 -a 630 1000 9 -a 1 631 11 -a 631 1000 6 -a 1 632 3 -a 632 1000 5 -a 1 633 11 -a 633 1000 1 -a 1 634 11 -a 634 1000 7 -a 1 635 5 -a 635 1000 10 -a 1 636 10 -a 636 1000 3 -a 1 637 8 -a 637 1000 7 -a 1 638 5 -a 638 1000 10 -a 1 639 4 -a 639 1000 7 -a 1 640 6 -a 640 1000 4 -a 1 641 11 -a 641 1000 5 -a 1 642 4 -a 642 1000 7 -a 1 643 9 -a 643 1000 4 -a 1 644 9 -a 644 1000 4 -a 1 645 8 -a 645 1000 9 -a 1 646 10 -a 646 1000 6 -a 1 647 5 -a 647 1000 3 -a 1 648 11 -a 648 1000 5 -a 1 649 9 -a 649 1000 5 -a 1 650 3 -a 650 1000 4 -a 1 651 9 -a 651 1000 4 -a 1 652 6 -a 652 1000 4 -a 1 653 2 -a 653 1000 9 -a 1 654 3 -a 654 1000 7 -a 1 655 3 -a 655 1000 10 -a 1 656 10 -a 656 1000 5 -a 1 657 8 -a 657 1000 3 -a 1 658 2 -a 658 1000 2 -a 1 659 11 -a 659 1000 1 -a 1 660 10 -a 660 1000 8 -a 1 661 9 -a 661 1000 3 -a 1 662 2 -a 662 1000 4 -a 1 663 11 -a 663 1000 3 -a 1 664 10 -a 664 1000 8 -a 1 665 4 -a 665 1000 10 -a 1 666 5 -a 666 1000 7 -a 1 667 11 -a 667 1000 7 -a 1 668 7 -a 668 1000 10 -a 1 669 2 -a 669 1000 9 -a 1 670 9 -a 670 1000 3 -a 1 671 11 -a 671 1000 6 -a 1 672 10 -a 672 1000 5 -a 1 673 8 -a 673 1000 9 -a 1 674 8 -a 674 1000 4 -a 1 675 4 -a 675 1000 7 -a 1 676 4 -a 676 1000 5 -a 1 677 4 -a 677 1000 8 -a 1 678 7 -a 678 1000 5 -a 1 679 2 -a 679 1000 1 -a 1 680 7 -a 680 1000 6 -a 1 681 10 -a 681 1000 9 -a 1 682 9 -a 682 1000 9 -a 1 683 6 -a 683 1000 6 -a 1 684 4 -a 684 1000 10 -a 1 685 2 -a 685 1000 5 -a 1 686 5 -a 686 1000 9 -a 1 687 7 -a 687 1000 1 -a 1 688 6 -a 688 1000 1 -a 1 689 6 -a 689 1000 1 -a 1 690 3 -a 690 1000 2 -a 1 691 3 -a 691 1000 7 -a 1 692 2 -a 692 1000 10 -a 1 693 2 -a 693 1000 8 -a 1 694 6 -a 694 1000 2 -a 1 695 5 -a 695 1000 7 -a 1 696 10 -a 696 1000 9 -a 1 697 4 -a 697 1000 4 -a 1 698 9 -a 698 1000 8 -a 1 699 5 -a 699 1000 8 -a 1 700 9 -a 700 1000 9 -a 1 701 10 -a 701 1000 8 -a 1 702 9 -a 702 1000 4 -a 1 703 7 -a 703 1000 5 -a 1 704 10 -a 704 1000 9 -a 1 705 11 -a 705 1000 1 -a 1 706 9 -a 706 1000 9 -a 1 707 8 -a 707 1000 1 -a 1 708 9 -a 708 1000 1 -a 1 709 10 -a 709 1000 10 -a 1 710 5 -a 710 1000 1 -a 1 711 8 -a 711 1000 8 -a 1 712 8 -a 712 1000 1 -a 1 713 7 -a 713 1000 5 -a 1 714 6 -a 714 1000 2 -a 1 715 3 -a 715 1000 10 -a 1 716 8 -a 716 1000 4 -a 1 717 8 -a 717 1000 2 -a 1 718 3 -a 718 1000 3 -a 1 719 11 -a 719 1000 1 -a 1 720 10 -a 720 1000 8 -a 1 721 5 -a 721 1000 3 -a 1 722 6 -a 722 1000 10 -a 1 723 4 -a 723 1000 8 -a 1 724 7 -a 724 1000 9 -a 1 725 7 -a 725 1000 3 -a 1 726 9 -a 726 1000 7 -a 1 727 10 -a 727 1000 9 -a 1 728 4 -a 728 1000 4 -a 1 729 5 -a 729 1000 2 -a 1 730 10 -a 730 1000 8 -a 1 731 5 -a 731 1000 3 -a 1 732 2 -a 732 1000 1 -a 1 733 11 -a 733 1000 6 -a 1 734 9 -a 734 1000 4 -a 1 735 4 -a 735 1000 10 -a 1 736 4 -a 736 1000 9 -a 1 737 7 -a 737 1000 6 -a 1 738 9 -a 738 1000 5 -a 1 739 10 -a 739 1000 5 -a 1 740 7 -a 740 1000 1 -a 1 741 10 -a 741 1000 3 -a 1 742 11 -a 742 1000 9 -a 1 743 4 -a 743 1000 4 -a 1 744 4 -a 744 1000 2 -a 1 745 4 -a 745 1000 9 -a 1 746 11 -a 746 1000 4 -a 1 747 7 -a 747 1000 6 -a 1 748 9 -a 748 1000 8 -a 1 749 6 -a 749 1000 4 -a 1 750 3 -a 750 1000 8 -a 1 751 8 -a 751 1000 4 -a 1 752 2 -a 752 1000 8 -a 1 753 4 -a 753 1000 10 -a 1 754 6 -a 754 1000 2 -a 1 755 3 -a 755 1000 5 -a 1 756 11 -a 756 1000 10 -a 1 757 11 -a 757 1000 1 -a 1 758 11 -a 758 1000 7 -a 1 759 7 -a 759 1000 4 -a 1 760 6 -a 760 1000 9 -a 1 761 6 -a 761 1000 2 -a 1 762 4 -a 762 1000 9 -a 1 763 3 -a 763 1000 10 -a 1 764 7 -a 764 1000 1 -a 1 765 4 -a 765 1000 8 -a 1 766 10 -a 766 1000 10 -a 1 767 9 -a 767 1000 2 -a 1 768 9 -a 768 1000 7 -a 1 769 4 -a 769 1000 7 -a 1 770 2 -a 770 1000 1 -a 1 771 11 -a 771 1000 10 -a 1 772 10 -a 772 1000 2 -a 1 773 3 -a 773 1000 5 -a 1 774 5 -a 774 1000 6 -a 1 775 7 -a 775 1000 6 -a 1 776 4 -a 776 1000 8 -a 1 777 11 -a 777 1000 9 -a 1 778 6 -a 778 1000 9 -a 1 779 9 -a 779 1000 9 -a 1 780 2 -a 780 1000 8 -a 1 781 8 -a 781 1000 2 -a 1 782 8 -a 782 1000 5 -a 1 783 9 -a 783 1000 1 -a 1 784 10 -a 784 1000 4 -a 1 785 6 -a 785 1000 9 -a 1 786 2 -a 786 1000 2 -a 1 787 4 -a 787 1000 6 -a 1 788 2 -a 788 1000 7 -a 1 789 5 -a 789 1000 10 -a 1 790 3 -a 790 1000 8 -a 1 791 11 -a 791 1000 10 -a 1 792 3 -a 792 1000 6 -a 1 793 9 -a 793 1000 10 -a 1 794 10 -a 794 1000 10 -a 1 795 2 -a 795 1000 2 -a 1 796 9 -a 796 1000 1 -a 1 797 2 -a 797 1000 1 -a 1 798 3 -a 798 1000 8 -a 1 799 8 -a 799 1000 3 -a 1 800 7 -a 800 1000 4 -a 1 801 5 -a 801 1000 4 -a 1 802 7 -a 802 1000 10 -a 1 803 8 -a 803 1000 3 -a 1 804 7 -a 804 1000 9 -a 1 805 2 -a 805 1000 10 -a 1 806 11 -a 806 1000 10 -a 1 807 10 -a 807 1000 4 -a 1 808 11 -a 808 1000 10 -a 1 809 5 -a 809 1000 5 -a 1 810 8 -a 810 1000 1 -a 1 811 6 -a 811 1000 2 -a 1 812 11 -a 812 1000 6 -a 1 813 2 -a 813 1000 9 -a 1 814 4 -a 814 1000 6 -a 1 815 3 -a 815 1000 3 -a 1 816 3 -a 816 1000 4 -a 1 817 8 -a 817 1000 4 -a 1 818 9 -a 818 1000 1 -a 1 819 4 -a 819 1000 1 -a 1 820 6 -a 820 1000 7 -a 1 821 4 -a 821 1000 5 -a 1 822 6 -a 822 1000 1 -a 1 823 4 -a 823 1000 4 -a 1 824 2 -a 824 1000 6 -a 1 825 7 -a 825 1000 8 -a 1 826 8 -a 826 1000 6 -a 1 827 5 -a 827 1000 2 -a 1 828 11 -a 828 1000 5 -a 1 829 2 -a 829 1000 1 -a 1 830 4 -a 830 1000 10 -a 1 831 2 -a 831 1000 2 -a 1 832 9 -a 832 1000 1 -a 1 833 2 -a 833 1000 2 -a 1 834 6 -a 834 1000 6 -a 1 835 8 -a 835 1000 10 -a 1 836 2 -a 836 1000 1 -a 1 837 8 -a 837 1000 8 -a 1 838 3 -a 838 1000 10 -a 1 839 10 -a 839 1000 4 -a 1 840 9 -a 840 1000 5 -a 1 841 6 -a 841 1000 5 -a 1 842 7 -a 842 1000 10 -a 1 843 10 -a 843 1000 6 -a 1 844 6 -a 844 1000 1 -a 1 845 4 -a 845 1000 2 -a 1 846 10 -a 846 1000 9 -a 1 847 4 -a 847 1000 1 -a 1 848 9 -a 848 1000 6 -a 1 849 3 -a 849 1000 4 -a 1 850 10 -a 850 1000 6 -a 1 851 11 -a 851 1000 10 -a 1 852 5 -a 852 1000 4 -a 1 853 10 -a 853 1000 9 -a 1 854 11 -a 854 1000 1 -a 1 855 11 -a 855 1000 5 -a 1 856 11 -a 856 1000 2 -a 1 857 2 -a 857 1000 2 -a 1 858 9 -a 858 1000 1 -a 1 859 11 -a 859 1000 4 -a 1 860 8 -a 860 1000 8 -a 1 861 4 -a 861 1000 6 -a 1 862 6 -a 862 1000 8 -a 1 863 6 -a 863 1000 10 -a 1 864 3 -a 864 1000 6 -a 1 865 4 -a 865 1000 1 -a 1 866 11 -a 866 1000 2 -a 1 867 11 -a 867 1000 3 -a 1 868 6 -a 868 1000 10 -a 1 869 4 -a 869 1000 1 -a 1 870 10 -a 870 1000 5 -a 1 871 9 -a 871 1000 8 -a 1 872 4 -a 872 1000 10 -a 1 873 8 -a 873 1000 1 -a 1 874 3 -a 874 1000 1 -a 1 875 8 -a 875 1000 2 -a 1 876 8 -a 876 1000 10 -a 1 877 8 -a 877 1000 7 -a 1 878 4 -a 878 1000 9 -a 1 879 3 -a 879 1000 7 -a 1 880 3 -a 880 1000 7 -a 1 881 5 -a 881 1000 6 -a 1 882 9 -a 882 1000 7 -a 1 883 7 -a 883 1000 10 -a 1 884 2 -a 884 1000 1 -a 1 885 10 -a 885 1000 1 -a 1 886 3 -a 886 1000 5 -a 1 887 9 -a 887 1000 8 -a 1 888 10 -a 888 1000 6 -a 1 889 10 -a 889 1000 2 -a 1 890 5 -a 890 1000 9 -a 1 891 10 -a 891 1000 10 -a 1 892 3 -a 892 1000 10 -a 1 893 2 -a 893 1000 5 -a 1 894 3 -a 894 1000 3 -a 1 895 4 -a 895 1000 6 -a 1 896 6 -a 896 1000 8 -a 1 897 7 -a 897 1000 4 -a 1 898 6 -a 898 1000 3 -a 1 899 6 -a 899 1000 1 -a 1 900 7 -a 900 1000 9 -a 1 901 11 -a 901 1000 10 -a 1 902 10 -a 902 1000 7 -a 1 903 4 -a 903 1000 10 -a 1 904 11 -a 904 1000 5 -a 1 905 9 -a 905 1000 1 -a 1 906 10 -a 906 1000 4 -a 1 907 7 -a 907 1000 1 -a 1 908 10 -a 908 1000 4 -a 1 909 3 -a 909 1000 9 -a 1 910 9 -a 910 1000 5 -a 1 911 7 -a 911 1000 7 -a 1 912 6 -a 912 1000 10 -a 1 913 8 -a 913 1000 5 -a 1 914 7 -a 914 1000 5 -a 1 915 11 -a 915 1000 10 -a 1 916 2 -a 916 1000 1 -a 1 917 4 -a 917 1000 5 -a 1 918 7 -a 918 1000 3 -a 1 919 6 -a 919 1000 6 -a 1 920 11 -a 920 1000 6 -a 1 921 8 -a 921 1000 3 -a 1 922 4 -a 922 1000 1 -a 1 923 3 -a 923 1000 5 -a 1 924 5 -a 924 1000 8 -a 1 925 3 -a 925 1000 6 -a 1 926 2 -a 926 1000 3 -a 1 927 4 -a 927 1000 7 -a 1 928 10 -a 928 1000 6 -a 1 929 7 -a 929 1000 9 -a 1 930 9 -a 930 1000 7 -a 1 931 9 -a 931 1000 2 -a 1 932 6 -a 932 1000 9 -a 1 933 7 -a 933 1000 4 -a 1 934 3 -a 934 1000 6 -a 1 935 3 -a 935 1000 1 -a 1 936 2 -a 936 1000 1 -a 1 937 3 -a 937 1000 3 -a 1 938 9 -a 938 1000 2 -a 1 939 5 -a 939 1000 1 -a 1 940 9 -a 940 1000 3 -a 1 941 9 -a 941 1000 4 -a 1 942 5 -a 942 1000 9 -a 1 943 2 -a 943 1000 5 -a 1 944 7 -a 944 1000 4 -a 1 945 7 -a 945 1000 5 -a 1 946 6 -a 946 1000 4 -a 1 947 6 -a 947 1000 5 -a 1 948 9 -a 948 1000 8 -a 1 949 3 -a 949 1000 9 -a 1 950 3 -a 950 1000 5 -a 1 951 11 -a 951 1000 7 -a 1 952 4 -a 952 1000 9 -a 1 953 7 -a 953 1000 3 -a 1 954 4 -a 954 1000 1 -a 1 955 4 -a 955 1000 7 -a 1 956 8 -a 956 1000 7 -a 1 957 2 -a 957 1000 5 -a 1 958 8 -a 958 1000 2 -a 1 959 7 -a 959 1000 10 -a 1 960 9 -a 960 1000 8 -a 1 961 2 -a 961 1000 10 -a 1 962 3 -a 962 1000 5 -a 1 963 4 -a 963 1000 5 -a 1 964 7 -a 964 1000 5 -a 1 965 2 -a 965 1000 3 -a 1 966 2 -a 966 1000 8 -a 1 967 5 -a 967 1000 5 -a 1 968 2 -a 968 1000 9 -a 1 969 8 -a 969 1000 4 -a 1 970 5 -a 970 1000 4 -a 1 971 11 -a 971 1000 10 -a 1 972 3 -a 972 1000 9 -a 1 973 4 -a 973 1000 1 -a 1 974 7 -a 974 1000 4 -a 1 975 4 -a 975 1000 6 -a 1 976 7 -a 976 1000 2 -a 1 977 8 -a 977 1000 10 -a 1 978 10 -a 978 1000 3 -a 1 979 8 -a 979 1000 3 -a 1 980 10 -a 980 1000 6 -a 1 981 8 -a 981 1000 7 -a 1 982 9 -a 982 1000 3 -a 1 983 5 -a 983 1000 3 -a 1 984 8 -a 984 1000 3 -a 1 985 11 -a 985 1000 5 -a 1 986 7 -a 986 1000 4 -a 1 987 8 -a 987 1000 2 -a 1 988 2 -a 988 1000 3 -a 1 989 8 -a 989 1000 9 -a 1 990 7 -a 990 1000 3 -a 1 991 4 -a 991 1000 9 -a 1 992 9 -a 992 1000 10 -a 1 993 3 -a 993 1000 2 -a 1 994 7 -a 994 1000 8 -a 1 995 5 -a 995 1000 6 -a 1 996 2 -a 996 1000 9 -a 1 997 5 -a 997 1000 3 -a 1 998 2 -a 998 1000 6 -a 1 999 4 -a 999 1000 5 -a 1 1000 7 -a 1000 1000 8 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/flow1.dim --- a/src/work/marci/flow1.dim Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3005 +0,0 @@ -c LEDA maxflow problem -p max 2000 3001 -n 1 s -n 2000 t -a 1 2 1000 -a 1 1001 1 -a 2 3 999 -a 2 1001 1 -a 3 4 998 -a 3 1001 1 -a 4 5 997 -a 4 1001 1 -a 5 6 996 -a 5 1001 1 -a 6 7 995 -a 6 1001 1 -a 7 8 994 -a 7 1001 1 -a 8 9 993 -a 8 1001 1 -a 9 10 992 -a 9 1001 1 -a 10 11 991 -a 10 1001 1 -a 11 12 990 -a 11 1001 1 -a 12 13 989 -a 12 1001 1 -a 13 14 988 -a 13 1001 1 -a 14 15 987 -a 14 1001 1 -a 15 16 986 -a 15 1001 1 -a 16 17 985 -a 16 1001 1 -a 17 18 984 -a 17 1001 1 -a 18 19 983 -a 18 1001 1 -a 19 20 982 -a 19 1001 1 -a 20 21 981 -a 20 1001 1 -a 21 22 980 -a 21 1001 1 -a 22 23 979 -a 22 1001 1 -a 23 24 978 -a 23 1001 1 -a 24 25 977 -a 24 1001 1 -a 25 26 976 -a 25 1001 1 -a 26 27 975 -a 26 1001 1 -a 27 28 974 -a 27 1001 1 -a 28 29 973 -a 28 1001 1 -a 29 30 972 -a 29 1001 1 -a 30 31 971 -a 30 1001 1 -a 31 32 970 -a 31 1001 1 -a 32 33 969 -a 32 1001 1 -a 33 34 968 -a 33 1001 1 -a 34 35 967 -a 34 1001 1 -a 35 36 966 -a 35 1001 1 -a 36 37 965 -a 36 1001 1 -a 37 38 964 -a 37 1001 1 -a 38 39 963 -a 38 1001 1 -a 39 40 962 -a 39 1001 1 -a 40 41 961 -a 40 1001 1 -a 41 42 960 -a 41 1001 1 -a 42 43 959 -a 42 1001 1 -a 43 44 958 -a 43 1001 1 -a 44 45 957 -a 44 1001 1 -a 45 46 956 -a 45 1001 1 -a 46 47 955 -a 46 1001 1 -a 47 48 954 -a 47 1001 1 -a 48 49 953 -a 48 1001 1 -a 49 50 952 -a 49 1001 1 -a 50 51 951 -a 50 1001 1 -a 51 52 950 -a 51 1001 1 -a 52 53 949 -a 52 1001 1 -a 53 54 948 -a 53 1001 1 -a 54 55 947 -a 54 1001 1 -a 55 56 946 -a 55 1001 1 -a 56 57 945 -a 56 1001 1 -a 57 58 944 -a 57 1001 1 -a 58 59 943 -a 58 1001 1 -a 59 60 942 -a 59 1001 1 -a 60 61 941 -a 60 1001 1 -a 61 62 940 -a 61 1001 1 -a 62 63 939 -a 62 1001 1 -a 63 64 938 -a 63 1001 1 -a 64 65 937 -a 64 1001 1 -a 65 66 936 -a 65 1001 1 -a 66 67 935 -a 66 1001 1 -a 67 68 934 -a 67 1001 1 -a 68 69 933 -a 68 1001 1 -a 69 70 932 -a 69 1001 1 -a 70 71 931 -a 70 1001 1 -a 71 72 930 -a 71 1001 1 -a 72 73 929 -a 72 1001 1 -a 73 74 928 -a 73 1001 1 -a 74 75 927 -a 74 1001 1 -a 75 76 926 -a 75 1001 1 -a 76 77 925 -a 76 1001 1 -a 77 78 924 -a 77 1001 1 -a 78 79 923 -a 78 1001 1 -a 79 80 922 -a 79 1001 1 -a 80 81 921 -a 80 1001 1 -a 81 82 920 -a 81 1001 1 -a 82 83 919 -a 82 1001 1 -a 83 84 918 -a 83 1001 1 -a 84 85 917 -a 84 1001 1 -a 85 86 916 -a 85 1001 1 -a 86 87 915 -a 86 1001 1 -a 87 88 914 -a 87 1001 1 -a 88 89 913 -a 88 1001 1 -a 89 90 912 -a 89 1001 1 -a 90 91 911 -a 90 1001 1 -a 91 92 910 -a 91 1001 1 -a 92 93 909 -a 92 1001 1 -a 93 94 908 -a 93 1001 1 -a 94 95 907 -a 94 1001 1 -a 95 96 906 -a 95 1001 1 -a 96 97 905 -a 96 1001 1 -a 97 98 904 -a 97 1001 1 -a 98 99 903 -a 98 1001 1 -a 99 100 902 -a 99 1001 1 -a 100 101 901 -a 100 1001 1 -a 101 102 900 -a 101 1001 1 -a 102 103 899 -a 102 1001 1 -a 103 104 898 -a 103 1001 1 -a 104 105 897 -a 104 1001 1 -a 105 106 896 -a 105 1001 1 -a 106 107 895 -a 106 1001 1 -a 107 108 894 -a 107 1001 1 -a 108 109 893 -a 108 1001 1 -a 109 110 892 -a 109 1001 1 -a 110 111 891 -a 110 1001 1 -a 111 112 890 -a 111 1001 1 -a 112 113 889 -a 112 1001 1 -a 113 114 888 -a 113 1001 1 -a 114 115 887 -a 114 1001 1 -a 115 116 886 -a 115 1001 1 -a 116 117 885 -a 116 1001 1 -a 117 118 884 -a 117 1001 1 -a 118 119 883 -a 118 1001 1 -a 119 120 882 -a 119 1001 1 -a 120 121 881 -a 120 1001 1 -a 121 122 880 -a 121 1001 1 -a 122 123 879 -a 122 1001 1 -a 123 124 878 -a 123 1001 1 -a 124 125 877 -a 124 1001 1 -a 125 126 876 -a 125 1001 1 -a 126 127 875 -a 126 1001 1 -a 127 128 874 -a 127 1001 1 -a 128 129 873 -a 128 1001 1 -a 129 130 872 -a 129 1001 1 -a 130 131 871 -a 130 1001 1 -a 131 132 870 -a 131 1001 1 -a 132 133 869 -a 132 1001 1 -a 133 134 868 -a 133 1001 1 -a 134 135 867 -a 134 1001 1 -a 135 136 866 -a 135 1001 1 -a 136 137 865 -a 136 1001 1 -a 137 138 864 -a 137 1001 1 -a 138 139 863 -a 138 1001 1 -a 139 140 862 -a 139 1001 1 -a 140 141 861 -a 140 1001 1 -a 141 142 860 -a 141 1001 1 -a 142 143 859 -a 142 1001 1 -a 143 144 858 -a 143 1001 1 -a 144 145 857 -a 144 1001 1 -a 145 146 856 -a 145 1001 1 -a 146 147 855 -a 146 1001 1 -a 147 148 854 -a 147 1001 1 -a 148 149 853 -a 148 1001 1 -a 149 150 852 -a 149 1001 1 -a 150 151 851 -a 150 1001 1 -a 151 152 850 -a 151 1001 1 -a 152 153 849 -a 152 1001 1 -a 153 154 848 -a 153 1001 1 -a 154 155 847 -a 154 1001 1 -a 155 156 846 -a 155 1001 1 -a 156 157 845 -a 156 1001 1 -a 157 158 844 -a 157 1001 1 -a 158 159 843 -a 158 1001 1 -a 159 160 842 -a 159 1001 1 -a 160 161 841 -a 160 1001 1 -a 161 162 840 -a 161 1001 1 -a 162 163 839 -a 162 1001 1 -a 163 164 838 -a 163 1001 1 -a 164 165 837 -a 164 1001 1 -a 165 166 836 -a 165 1001 1 -a 166 167 835 -a 166 1001 1 -a 167 168 834 -a 167 1001 1 -a 168 169 833 -a 168 1001 1 -a 169 170 832 -a 169 1001 1 -a 170 171 831 -a 170 1001 1 -a 171 172 830 -a 171 1001 1 -a 172 173 829 -a 172 1001 1 -a 173 174 828 -a 173 1001 1 -a 174 175 827 -a 174 1001 1 -a 175 176 826 -a 175 1001 1 -a 176 177 825 -a 176 1001 1 -a 177 178 824 -a 177 1001 1 -a 178 179 823 -a 178 1001 1 -a 179 180 822 -a 179 1001 1 -a 180 181 821 -a 180 1001 1 -a 181 182 820 -a 181 1001 1 -a 182 183 819 -a 182 1001 1 -a 183 184 818 -a 183 1001 1 -a 184 185 817 -a 184 1001 1 -a 185 186 816 -a 185 1001 1 -a 186 187 815 -a 186 1001 1 -a 187 188 814 -a 187 1001 1 -a 188 189 813 -a 188 1001 1 -a 189 190 812 -a 189 1001 1 -a 190 191 811 -a 190 1001 1 -a 191 192 810 -a 191 1001 1 -a 192 193 809 -a 192 1001 1 -a 193 194 808 -a 193 1001 1 -a 194 195 807 -a 194 1001 1 -a 195 196 806 -a 195 1001 1 -a 196 197 805 -a 196 1001 1 -a 197 198 804 -a 197 1001 1 -a 198 199 803 -a 198 1001 1 -a 199 200 802 -a 199 1001 1 -a 200 201 801 -a 200 1001 1 -a 201 202 800 -a 201 1001 1 -a 202 203 799 -a 202 1001 1 -a 203 204 798 -a 203 1001 1 -a 204 205 797 -a 204 1001 1 -a 205 206 796 -a 205 1001 1 -a 206 207 795 -a 206 1001 1 -a 207 208 794 -a 207 1001 1 -a 208 209 793 -a 208 1001 1 -a 209 210 792 -a 209 1001 1 -a 210 211 791 -a 210 1001 1 -a 211 212 790 -a 211 1001 1 -a 212 213 789 -a 212 1001 1 -a 213 214 788 -a 213 1001 1 -a 214 215 787 -a 214 1001 1 -a 215 216 786 -a 215 1001 1 -a 216 217 785 -a 216 1001 1 -a 217 218 784 -a 217 1001 1 -a 218 219 783 -a 218 1001 1 -a 219 220 782 -a 219 1001 1 -a 220 221 781 -a 220 1001 1 -a 221 222 780 -a 221 1001 1 -a 222 223 779 -a 222 1001 1 -a 223 224 778 -a 223 1001 1 -a 224 225 777 -a 224 1001 1 -a 225 226 776 -a 225 1001 1 -a 226 227 775 -a 226 1001 1 -a 227 228 774 -a 227 1001 1 -a 228 229 773 -a 228 1001 1 -a 229 230 772 -a 229 1001 1 -a 230 231 771 -a 230 1001 1 -a 231 232 770 -a 231 1001 1 -a 232 233 769 -a 232 1001 1 -a 233 234 768 -a 233 1001 1 -a 234 235 767 -a 234 1001 1 -a 235 236 766 -a 235 1001 1 -a 236 237 765 -a 236 1001 1 -a 237 238 764 -a 237 1001 1 -a 238 239 763 -a 238 1001 1 -a 239 240 762 -a 239 1001 1 -a 240 241 761 -a 240 1001 1 -a 241 242 760 -a 241 1001 1 -a 242 243 759 -a 242 1001 1 -a 243 244 758 -a 243 1001 1 -a 244 245 757 -a 244 1001 1 -a 245 246 756 -a 245 1001 1 -a 246 247 755 -a 246 1001 1 -a 247 248 754 -a 247 1001 1 -a 248 249 753 -a 248 1001 1 -a 249 250 752 -a 249 1001 1 -a 250 251 751 -a 250 1001 1 -a 251 252 750 -a 251 1001 1 -a 252 253 749 -a 252 1001 1 -a 253 254 748 -a 253 1001 1 -a 254 255 747 -a 254 1001 1 -a 255 256 746 -a 255 1001 1 -a 256 257 745 -a 256 1001 1 -a 257 258 744 -a 257 1001 1 -a 258 259 743 -a 258 1001 1 -a 259 260 742 -a 259 1001 1 -a 260 261 741 -a 260 1001 1 -a 261 262 740 -a 261 1001 1 -a 262 263 739 -a 262 1001 1 -a 263 264 738 -a 263 1001 1 -a 264 265 737 -a 264 1001 1 -a 265 266 736 -a 265 1001 1 -a 266 267 735 -a 266 1001 1 -a 267 268 734 -a 267 1001 1 -a 268 269 733 -a 268 1001 1 -a 269 270 732 -a 269 1001 1 -a 270 271 731 -a 270 1001 1 -a 271 272 730 -a 271 1001 1 -a 272 273 729 -a 272 1001 1 -a 273 274 728 -a 273 1001 1 -a 274 275 727 -a 274 1001 1 -a 275 276 726 -a 275 1001 1 -a 276 277 725 -a 276 1001 1 -a 277 278 724 -a 277 1001 1 -a 278 279 723 -a 278 1001 1 -a 279 280 722 -a 279 1001 1 -a 280 281 721 -a 280 1001 1 -a 281 282 720 -a 281 1001 1 -a 282 283 719 -a 282 1001 1 -a 283 284 718 -a 283 1001 1 -a 284 285 717 -a 284 1001 1 -a 285 286 716 -a 285 1001 1 -a 286 287 715 -a 286 1001 1 -a 287 288 714 -a 287 1001 1 -a 288 289 713 -a 288 1001 1 -a 289 290 712 -a 289 1001 1 -a 290 291 711 -a 290 1001 1 -a 291 292 710 -a 291 1001 1 -a 292 293 709 -a 292 1001 1 -a 293 294 708 -a 293 1001 1 -a 294 295 707 -a 294 1001 1 -a 295 296 706 -a 295 1001 1 -a 296 297 705 -a 296 1001 1 -a 297 298 704 -a 297 1001 1 -a 298 299 703 -a 298 1001 1 -a 299 300 702 -a 299 1001 1 -a 300 301 701 -a 300 1001 1 -a 301 302 700 -a 301 1001 1 -a 302 303 699 -a 302 1001 1 -a 303 304 698 -a 303 1001 1 -a 304 305 697 -a 304 1001 1 -a 305 306 696 -a 305 1001 1 -a 306 307 695 -a 306 1001 1 -a 307 308 694 -a 307 1001 1 -a 308 309 693 -a 308 1001 1 -a 309 310 692 -a 309 1001 1 -a 310 311 691 -a 310 1001 1 -a 311 312 690 -a 311 1001 1 -a 312 313 689 -a 312 1001 1 -a 313 314 688 -a 313 1001 1 -a 314 315 687 -a 314 1001 1 -a 315 316 686 -a 315 1001 1 -a 316 317 685 -a 316 1001 1 -a 317 318 684 -a 317 1001 1 -a 318 319 683 -a 318 1001 1 -a 319 320 682 -a 319 1001 1 -a 320 321 681 -a 320 1001 1 -a 321 322 680 -a 321 1001 1 -a 322 323 679 -a 322 1001 1 -a 323 324 678 -a 323 1001 1 -a 324 325 677 -a 324 1001 1 -a 325 326 676 -a 325 1001 1 -a 326 327 675 -a 326 1001 1 -a 327 328 674 -a 327 1001 1 -a 328 329 673 -a 328 1001 1 -a 329 330 672 -a 329 1001 1 -a 330 331 671 -a 330 1001 1 -a 331 332 670 -a 331 1001 1 -a 332 333 669 -a 332 1001 1 -a 333 334 668 -a 333 1001 1 -a 334 335 667 -a 334 1001 1 -a 335 336 666 -a 335 1001 1 -a 336 337 665 -a 336 1001 1 -a 337 338 664 -a 337 1001 1 -a 338 339 663 -a 338 1001 1 -a 339 340 662 -a 339 1001 1 -a 340 341 661 -a 340 1001 1 -a 341 342 660 -a 341 1001 1 -a 342 343 659 -a 342 1001 1 -a 343 344 658 -a 343 1001 1 -a 344 345 657 -a 344 1001 1 -a 345 346 656 -a 345 1001 1 -a 346 347 655 -a 346 1001 1 -a 347 348 654 -a 347 1001 1 -a 348 349 653 -a 348 1001 1 -a 349 350 652 -a 349 1001 1 -a 350 351 651 -a 350 1001 1 -a 351 352 650 -a 351 1001 1 -a 352 353 649 -a 352 1001 1 -a 353 354 648 -a 353 1001 1 -a 354 355 647 -a 354 1001 1 -a 355 356 646 -a 355 1001 1 -a 356 357 645 -a 356 1001 1 -a 357 358 644 -a 357 1001 1 -a 358 359 643 -a 358 1001 1 -a 359 360 642 -a 359 1001 1 -a 360 361 641 -a 360 1001 1 -a 361 362 640 -a 361 1001 1 -a 362 363 639 -a 362 1001 1 -a 363 364 638 -a 363 1001 1 -a 364 365 637 -a 364 1001 1 -a 365 366 636 -a 365 1001 1 -a 366 367 635 -a 366 1001 1 -a 367 368 634 -a 367 1001 1 -a 368 369 633 -a 368 1001 1 -a 369 370 632 -a 369 1001 1 -a 370 371 631 -a 370 1001 1 -a 371 372 630 -a 371 1001 1 -a 372 373 629 -a 372 1001 1 -a 373 374 628 -a 373 1001 1 -a 374 375 627 -a 374 1001 1 -a 375 376 626 -a 375 1001 1 -a 376 377 625 -a 376 1001 1 -a 377 378 624 -a 377 1001 1 -a 378 379 623 -a 378 1001 1 -a 379 380 622 -a 379 1001 1 -a 380 381 621 -a 380 1001 1 -a 381 382 620 -a 381 1001 1 -a 382 383 619 -a 382 1001 1 -a 383 384 618 -a 383 1001 1 -a 384 385 617 -a 384 1001 1 -a 385 386 616 -a 385 1001 1 -a 386 387 615 -a 386 1001 1 -a 387 388 614 -a 387 1001 1 -a 388 389 613 -a 388 1001 1 -a 389 390 612 -a 389 1001 1 -a 390 391 611 -a 390 1001 1 -a 391 392 610 -a 391 1001 1 -a 392 393 609 -a 392 1001 1 -a 393 394 608 -a 393 1001 1 -a 394 395 607 -a 394 1001 1 -a 395 396 606 -a 395 1001 1 -a 396 397 605 -a 396 1001 1 -a 397 398 604 -a 397 1001 1 -a 398 399 603 -a 398 1001 1 -a 399 400 602 -a 399 1001 1 -a 400 401 601 -a 400 1001 1 -a 401 402 600 -a 401 1001 1 -a 402 403 599 -a 402 1001 1 -a 403 404 598 -a 403 1001 1 -a 404 405 597 -a 404 1001 1 -a 405 406 596 -a 405 1001 1 -a 406 407 595 -a 406 1001 1 -a 407 408 594 -a 407 1001 1 -a 408 409 593 -a 408 1001 1 -a 409 410 592 -a 409 1001 1 -a 410 411 591 -a 410 1001 1 -a 411 412 590 -a 411 1001 1 -a 412 413 589 -a 412 1001 1 -a 413 414 588 -a 413 1001 1 -a 414 415 587 -a 414 1001 1 -a 415 416 586 -a 415 1001 1 -a 416 417 585 -a 416 1001 1 -a 417 418 584 -a 417 1001 1 -a 418 419 583 -a 418 1001 1 -a 419 420 582 -a 419 1001 1 -a 420 421 581 -a 420 1001 1 -a 421 422 580 -a 421 1001 1 -a 422 423 579 -a 422 1001 1 -a 423 424 578 -a 423 1001 1 -a 424 425 577 -a 424 1001 1 -a 425 426 576 -a 425 1001 1 -a 426 427 575 -a 426 1001 1 -a 427 428 574 -a 427 1001 1 -a 428 429 573 -a 428 1001 1 -a 429 430 572 -a 429 1001 1 -a 430 431 571 -a 430 1001 1 -a 431 432 570 -a 431 1001 1 -a 432 433 569 -a 432 1001 1 -a 433 434 568 -a 433 1001 1 -a 434 435 567 -a 434 1001 1 -a 435 436 566 -a 435 1001 1 -a 436 437 565 -a 436 1001 1 -a 437 438 564 -a 437 1001 1 -a 438 439 563 -a 438 1001 1 -a 439 440 562 -a 439 1001 1 -a 440 441 561 -a 440 1001 1 -a 441 442 560 -a 441 1001 1 -a 442 443 559 -a 442 1001 1 -a 443 444 558 -a 443 1001 1 -a 444 445 557 -a 444 1001 1 -a 445 446 556 -a 445 1001 1 -a 446 447 555 -a 446 1001 1 -a 447 448 554 -a 447 1001 1 -a 448 449 553 -a 448 1001 1 -a 449 450 552 -a 449 1001 1 -a 450 451 551 -a 450 1001 1 -a 451 452 550 -a 451 1001 1 -a 452 453 549 -a 452 1001 1 -a 453 454 548 -a 453 1001 1 -a 454 455 547 -a 454 1001 1 -a 455 456 546 -a 455 1001 1 -a 456 457 545 -a 456 1001 1 -a 457 458 544 -a 457 1001 1 -a 458 459 543 -a 458 1001 1 -a 459 460 542 -a 459 1001 1 -a 460 461 541 -a 460 1001 1 -a 461 462 540 -a 461 1001 1 -a 462 463 539 -a 462 1001 1 -a 463 464 538 -a 463 1001 1 -a 464 465 537 -a 464 1001 1 -a 465 466 536 -a 465 1001 1 -a 466 467 535 -a 466 1001 1 -a 467 468 534 -a 467 1001 1 -a 468 469 533 -a 468 1001 1 -a 469 470 532 -a 469 1001 1 -a 470 471 531 -a 470 1001 1 -a 471 472 530 -a 471 1001 1 -a 472 473 529 -a 472 1001 1 -a 473 474 528 -a 473 1001 1 -a 474 475 527 -a 474 1001 1 -a 475 476 526 -a 475 1001 1 -a 476 477 525 -a 476 1001 1 -a 477 478 524 -a 477 1001 1 -a 478 479 523 -a 478 1001 1 -a 479 480 522 -a 479 1001 1 -a 480 481 521 -a 480 1001 1 -a 481 482 520 -a 481 1001 1 -a 482 483 519 -a 482 1001 1 -a 483 484 518 -a 483 1001 1 -a 484 485 517 -a 484 1001 1 -a 485 486 516 -a 485 1001 1 -a 486 487 515 -a 486 1001 1 -a 487 488 514 -a 487 1001 1 -a 488 489 513 -a 488 1001 1 -a 489 490 512 -a 489 1001 1 -a 490 491 511 -a 490 1001 1 -a 491 492 510 -a 491 1001 1 -a 492 493 509 -a 492 1001 1 -a 493 494 508 -a 493 1001 1 -a 494 495 507 -a 494 1001 1 -a 495 496 506 -a 495 1001 1 -a 496 497 505 -a 496 1001 1 -a 497 498 504 -a 497 1001 1 -a 498 499 503 -a 498 1001 1 -a 499 500 502 -a 499 1001 1 -a 500 501 501 -a 500 1001 1 -a 501 502 500 -a 501 1001 1 -a 502 503 499 -a 502 1001 1 -a 503 504 498 -a 503 1001 1 -a 504 505 497 -a 504 1001 1 -a 505 506 496 -a 505 1001 1 -a 506 507 495 -a 506 1001 1 -a 507 508 494 -a 507 1001 1 -a 508 509 493 -a 508 1001 1 -a 509 510 492 -a 509 1001 1 -a 510 511 491 -a 510 1001 1 -a 511 512 490 -a 511 1001 1 -a 512 513 489 -a 512 1001 1 -a 513 514 488 -a 513 1001 1 -a 514 515 487 -a 514 1001 1 -a 515 516 486 -a 515 1001 1 -a 516 517 485 -a 516 1001 1 -a 517 518 484 -a 517 1001 1 -a 518 519 483 -a 518 1001 1 -a 519 520 482 -a 519 1001 1 -a 520 521 481 -a 520 1001 1 -a 521 522 480 -a 521 1001 1 -a 522 523 479 -a 522 1001 1 -a 523 524 478 -a 523 1001 1 -a 524 525 477 -a 524 1001 1 -a 525 526 476 -a 525 1001 1 -a 526 527 475 -a 526 1001 1 -a 527 528 474 -a 527 1001 1 -a 528 529 473 -a 528 1001 1 -a 529 530 472 -a 529 1001 1 -a 530 531 471 -a 530 1001 1 -a 531 532 470 -a 531 1001 1 -a 532 533 469 -a 532 1001 1 -a 533 534 468 -a 533 1001 1 -a 534 535 467 -a 534 1001 1 -a 535 536 466 -a 535 1001 1 -a 536 537 465 -a 536 1001 1 -a 537 538 464 -a 537 1001 1 -a 538 539 463 -a 538 1001 1 -a 539 540 462 -a 539 1001 1 -a 540 541 461 -a 540 1001 1 -a 541 542 460 -a 541 1001 1 -a 542 543 459 -a 542 1001 1 -a 543 544 458 -a 543 1001 1 -a 544 545 457 -a 544 1001 1 -a 545 546 456 -a 545 1001 1 -a 546 547 455 -a 546 1001 1 -a 547 548 454 -a 547 1001 1 -a 548 549 453 -a 548 1001 1 -a 549 550 452 -a 549 1001 1 -a 550 551 451 -a 550 1001 1 -a 551 552 450 -a 551 1001 1 -a 552 553 449 -a 552 1001 1 -a 553 554 448 -a 553 1001 1 -a 554 555 447 -a 554 1001 1 -a 555 556 446 -a 555 1001 1 -a 556 557 445 -a 556 1001 1 -a 557 558 444 -a 557 1001 1 -a 558 559 443 -a 558 1001 1 -a 559 560 442 -a 559 1001 1 -a 560 561 441 -a 560 1001 1 -a 561 562 440 -a 561 1001 1 -a 562 563 439 -a 562 1001 1 -a 563 564 438 -a 563 1001 1 -a 564 565 437 -a 564 1001 1 -a 565 566 436 -a 565 1001 1 -a 566 567 435 -a 566 1001 1 -a 567 568 434 -a 567 1001 1 -a 568 569 433 -a 568 1001 1 -a 569 570 432 -a 569 1001 1 -a 570 571 431 -a 570 1001 1 -a 571 572 430 -a 571 1001 1 -a 572 573 429 -a 572 1001 1 -a 573 574 428 -a 573 1001 1 -a 574 575 427 -a 574 1001 1 -a 575 576 426 -a 575 1001 1 -a 576 577 425 -a 576 1001 1 -a 577 578 424 -a 577 1001 1 -a 578 579 423 -a 578 1001 1 -a 579 580 422 -a 579 1001 1 -a 580 581 421 -a 580 1001 1 -a 581 582 420 -a 581 1001 1 -a 582 583 419 -a 582 1001 1 -a 583 584 418 -a 583 1001 1 -a 584 585 417 -a 584 1001 1 -a 585 586 416 -a 585 1001 1 -a 586 587 415 -a 586 1001 1 -a 587 588 414 -a 587 1001 1 -a 588 589 413 -a 588 1001 1 -a 589 590 412 -a 589 1001 1 -a 590 591 411 -a 590 1001 1 -a 591 592 410 -a 591 1001 1 -a 592 593 409 -a 592 1001 1 -a 593 594 408 -a 593 1001 1 -a 594 595 407 -a 594 1001 1 -a 595 596 406 -a 595 1001 1 -a 596 597 405 -a 596 1001 1 -a 597 598 404 -a 597 1001 1 -a 598 599 403 -a 598 1001 1 -a 599 600 402 -a 599 1001 1 -a 600 601 401 -a 600 1001 1 -a 601 602 400 -a 601 1001 1 -a 602 603 399 -a 602 1001 1 -a 603 604 398 -a 603 1001 1 -a 604 605 397 -a 604 1001 1 -a 605 606 396 -a 605 1001 1 -a 606 607 395 -a 606 1001 1 -a 607 608 394 -a 607 1001 1 -a 608 609 393 -a 608 1001 1 -a 609 610 392 -a 609 1001 1 -a 610 611 391 -a 610 1001 1 -a 611 612 390 -a 611 1001 1 -a 612 613 389 -a 612 1001 1 -a 613 614 388 -a 613 1001 1 -a 614 615 387 -a 614 1001 1 -a 615 616 386 -a 615 1001 1 -a 616 617 385 -a 616 1001 1 -a 617 618 384 -a 617 1001 1 -a 618 619 383 -a 618 1001 1 -a 619 620 382 -a 619 1001 1 -a 620 621 381 -a 620 1001 1 -a 621 622 380 -a 621 1001 1 -a 622 623 379 -a 622 1001 1 -a 623 624 378 -a 623 1001 1 -a 624 625 377 -a 624 1001 1 -a 625 626 376 -a 625 1001 1 -a 626 627 375 -a 626 1001 1 -a 627 628 374 -a 627 1001 1 -a 628 629 373 -a 628 1001 1 -a 629 630 372 -a 629 1001 1 -a 630 631 371 -a 630 1001 1 -a 631 632 370 -a 631 1001 1 -a 632 633 369 -a 632 1001 1 -a 633 634 368 -a 633 1001 1 -a 634 635 367 -a 634 1001 1 -a 635 636 366 -a 635 1001 1 -a 636 637 365 -a 636 1001 1 -a 637 638 364 -a 637 1001 1 -a 638 639 363 -a 638 1001 1 -a 639 640 362 -a 639 1001 1 -a 640 641 361 -a 640 1001 1 -a 641 642 360 -a 641 1001 1 -a 642 643 359 -a 642 1001 1 -a 643 644 358 -a 643 1001 1 -a 644 645 357 -a 644 1001 1 -a 645 646 356 -a 645 1001 1 -a 646 647 355 -a 646 1001 1 -a 647 648 354 -a 647 1001 1 -a 648 649 353 -a 648 1001 1 -a 649 650 352 -a 649 1001 1 -a 650 651 351 -a 650 1001 1 -a 651 652 350 -a 651 1001 1 -a 652 653 349 -a 652 1001 1 -a 653 654 348 -a 653 1001 1 -a 654 655 347 -a 654 1001 1 -a 655 656 346 -a 655 1001 1 -a 656 657 345 -a 656 1001 1 -a 657 658 344 -a 657 1001 1 -a 658 659 343 -a 658 1001 1 -a 659 660 342 -a 659 1001 1 -a 660 661 341 -a 660 1001 1 -a 661 662 340 -a 661 1001 1 -a 662 663 339 -a 662 1001 1 -a 663 664 338 -a 663 1001 1 -a 664 665 337 -a 664 1001 1 -a 665 666 336 -a 665 1001 1 -a 666 667 335 -a 666 1001 1 -a 667 668 334 -a 667 1001 1 -a 668 669 333 -a 668 1001 1 -a 669 670 332 -a 669 1001 1 -a 670 671 331 -a 670 1001 1 -a 671 672 330 -a 671 1001 1 -a 672 673 329 -a 672 1001 1 -a 673 674 328 -a 673 1001 1 -a 674 675 327 -a 674 1001 1 -a 675 676 326 -a 675 1001 1 -a 676 677 325 -a 676 1001 1 -a 677 678 324 -a 677 1001 1 -a 678 679 323 -a 678 1001 1 -a 679 680 322 -a 679 1001 1 -a 680 681 321 -a 680 1001 1 -a 681 682 320 -a 681 1001 1 -a 682 683 319 -a 682 1001 1 -a 683 684 318 -a 683 1001 1 -a 684 685 317 -a 684 1001 1 -a 685 686 316 -a 685 1001 1 -a 686 687 315 -a 686 1001 1 -a 687 688 314 -a 687 1001 1 -a 688 689 313 -a 688 1001 1 -a 689 690 312 -a 689 1001 1 -a 690 691 311 -a 690 1001 1 -a 691 692 310 -a 691 1001 1 -a 692 693 309 -a 692 1001 1 -a 693 694 308 -a 693 1001 1 -a 694 695 307 -a 694 1001 1 -a 695 696 306 -a 695 1001 1 -a 696 697 305 -a 696 1001 1 -a 697 698 304 -a 697 1001 1 -a 698 699 303 -a 698 1001 1 -a 699 700 302 -a 699 1001 1 -a 700 701 301 -a 700 1001 1 -a 701 702 300 -a 701 1001 1 -a 702 703 299 -a 702 1001 1 -a 703 704 298 -a 703 1001 1 -a 704 705 297 -a 704 1001 1 -a 705 706 296 -a 705 1001 1 -a 706 707 295 -a 706 1001 1 -a 707 708 294 -a 707 1001 1 -a 708 709 293 -a 708 1001 1 -a 709 710 292 -a 709 1001 1 -a 710 711 291 -a 710 1001 1 -a 711 712 290 -a 711 1001 1 -a 712 713 289 -a 712 1001 1 -a 713 714 288 -a 713 1001 1 -a 714 715 287 -a 714 1001 1 -a 715 716 286 -a 715 1001 1 -a 716 717 285 -a 716 1001 1 -a 717 718 284 -a 717 1001 1 -a 718 719 283 -a 718 1001 1 -a 719 720 282 -a 719 1001 1 -a 720 721 281 -a 720 1001 1 -a 721 722 280 -a 721 1001 1 -a 722 723 279 -a 722 1001 1 -a 723 724 278 -a 723 1001 1 -a 724 725 277 -a 724 1001 1 -a 725 726 276 -a 725 1001 1 -a 726 727 275 -a 726 1001 1 -a 727 728 274 -a 727 1001 1 -a 728 729 273 -a 728 1001 1 -a 729 730 272 -a 729 1001 1 -a 730 731 271 -a 730 1001 1 -a 731 732 270 -a 731 1001 1 -a 732 733 269 -a 732 1001 1 -a 733 734 268 -a 733 1001 1 -a 734 735 267 -a 734 1001 1 -a 735 736 266 -a 735 1001 1 -a 736 737 265 -a 736 1001 1 -a 737 738 264 -a 737 1001 1 -a 738 739 263 -a 738 1001 1 -a 739 740 262 -a 739 1001 1 -a 740 741 261 -a 740 1001 1 -a 741 742 260 -a 741 1001 1 -a 742 743 259 -a 742 1001 1 -a 743 744 258 -a 743 1001 1 -a 744 745 257 -a 744 1001 1 -a 745 746 256 -a 745 1001 1 -a 746 747 255 -a 746 1001 1 -a 747 748 254 -a 747 1001 1 -a 748 749 253 -a 748 1001 1 -a 749 750 252 -a 749 1001 1 -a 750 751 251 -a 750 1001 1 -a 751 752 250 -a 751 1001 1 -a 752 753 249 -a 752 1001 1 -a 753 754 248 -a 753 1001 1 -a 754 755 247 -a 754 1001 1 -a 755 756 246 -a 755 1001 1 -a 756 757 245 -a 756 1001 1 -a 757 758 244 -a 757 1001 1 -a 758 759 243 -a 758 1001 1 -a 759 760 242 -a 759 1001 1 -a 760 761 241 -a 760 1001 1 -a 761 762 240 -a 761 1001 1 -a 762 763 239 -a 762 1001 1 -a 763 764 238 -a 763 1001 1 -a 764 765 237 -a 764 1001 1 -a 765 766 236 -a 765 1001 1 -a 766 767 235 -a 766 1001 1 -a 767 768 234 -a 767 1001 1 -a 768 769 233 -a 768 1001 1 -a 769 770 232 -a 769 1001 1 -a 770 771 231 -a 770 1001 1 -a 771 772 230 -a 771 1001 1 -a 772 773 229 -a 772 1001 1 -a 773 774 228 -a 773 1001 1 -a 774 775 227 -a 774 1001 1 -a 775 776 226 -a 775 1001 1 -a 776 777 225 -a 776 1001 1 -a 777 778 224 -a 777 1001 1 -a 778 779 223 -a 778 1001 1 -a 779 780 222 -a 779 1001 1 -a 780 781 221 -a 780 1001 1 -a 781 782 220 -a 781 1001 1 -a 782 783 219 -a 782 1001 1 -a 783 784 218 -a 783 1001 1 -a 784 785 217 -a 784 1001 1 -a 785 786 216 -a 785 1001 1 -a 786 787 215 -a 786 1001 1 -a 787 788 214 -a 787 1001 1 -a 788 789 213 -a 788 1001 1 -a 789 790 212 -a 789 1001 1 -a 790 791 211 -a 790 1001 1 -a 791 792 210 -a 791 1001 1 -a 792 793 209 -a 792 1001 1 -a 793 794 208 -a 793 1001 1 -a 794 795 207 -a 794 1001 1 -a 795 796 206 -a 795 1001 1 -a 796 797 205 -a 796 1001 1 -a 797 798 204 -a 797 1001 1 -a 798 799 203 -a 798 1001 1 -a 799 800 202 -a 799 1001 1 -a 800 801 201 -a 800 1001 1 -a 801 802 200 -a 801 1001 1 -a 802 803 199 -a 802 1001 1 -a 803 804 198 -a 803 1001 1 -a 804 805 197 -a 804 1001 1 -a 805 806 196 -a 805 1001 1 -a 806 807 195 -a 806 1001 1 -a 807 808 194 -a 807 1001 1 -a 808 809 193 -a 808 1001 1 -a 809 810 192 -a 809 1001 1 -a 810 811 191 -a 810 1001 1 -a 811 812 190 -a 811 1001 1 -a 812 813 189 -a 812 1001 1 -a 813 814 188 -a 813 1001 1 -a 814 815 187 -a 814 1001 1 -a 815 816 186 -a 815 1001 1 -a 816 817 185 -a 816 1001 1 -a 817 818 184 -a 817 1001 1 -a 818 819 183 -a 818 1001 1 -a 819 820 182 -a 819 1001 1 -a 820 821 181 -a 820 1001 1 -a 821 822 180 -a 821 1001 1 -a 822 823 179 -a 822 1001 1 -a 823 824 178 -a 823 1001 1 -a 824 825 177 -a 824 1001 1 -a 825 826 176 -a 825 1001 1 -a 826 827 175 -a 826 1001 1 -a 827 828 174 -a 827 1001 1 -a 828 829 173 -a 828 1001 1 -a 829 830 172 -a 829 1001 1 -a 830 831 171 -a 830 1001 1 -a 831 832 170 -a 831 1001 1 -a 832 833 169 -a 832 1001 1 -a 833 834 168 -a 833 1001 1 -a 834 835 167 -a 834 1001 1 -a 835 836 166 -a 835 1001 1 -a 836 837 165 -a 836 1001 1 -a 837 838 164 -a 837 1001 1 -a 838 839 163 -a 838 1001 1 -a 839 840 162 -a 839 1001 1 -a 840 841 161 -a 840 1001 1 -a 841 842 160 -a 841 1001 1 -a 842 843 159 -a 842 1001 1 -a 843 844 158 -a 843 1001 1 -a 844 845 157 -a 844 1001 1 -a 845 846 156 -a 845 1001 1 -a 846 847 155 -a 846 1001 1 -a 847 848 154 -a 847 1001 1 -a 848 849 153 -a 848 1001 1 -a 849 850 152 -a 849 1001 1 -a 850 851 151 -a 850 1001 1 -a 851 852 150 -a 851 1001 1 -a 852 853 149 -a 852 1001 1 -a 853 854 148 -a 853 1001 1 -a 854 855 147 -a 854 1001 1 -a 855 856 146 -a 855 1001 1 -a 856 857 145 -a 856 1001 1 -a 857 858 144 -a 857 1001 1 -a 858 859 143 -a 858 1001 1 -a 859 860 142 -a 859 1001 1 -a 860 861 141 -a 860 1001 1 -a 861 862 140 -a 861 1001 1 -a 862 863 139 -a 862 1001 1 -a 863 864 138 -a 863 1001 1 -a 864 865 137 -a 864 1001 1 -a 865 866 136 -a 865 1001 1 -a 866 867 135 -a 866 1001 1 -a 867 868 134 -a 867 1001 1 -a 868 869 133 -a 868 1001 1 -a 869 870 132 -a 869 1001 1 -a 870 871 131 -a 870 1001 1 -a 871 872 130 -a 871 1001 1 -a 872 873 129 -a 872 1001 1 -a 873 874 128 -a 873 1001 1 -a 874 875 127 -a 874 1001 1 -a 875 876 126 -a 875 1001 1 -a 876 877 125 -a 876 1001 1 -a 877 878 124 -a 877 1001 1 -a 878 879 123 -a 878 1001 1 -a 879 880 122 -a 879 1001 1 -a 880 881 121 -a 880 1001 1 -a 881 882 120 -a 881 1001 1 -a 882 883 119 -a 882 1001 1 -a 883 884 118 -a 883 1001 1 -a 884 885 117 -a 884 1001 1 -a 885 886 116 -a 885 1001 1 -a 886 887 115 -a 886 1001 1 -a 887 888 114 -a 887 1001 1 -a 888 889 113 -a 888 1001 1 -a 889 890 112 -a 889 1001 1 -a 890 891 111 -a 890 1001 1 -a 891 892 110 -a 891 1001 1 -a 892 893 109 -a 892 1001 1 -a 893 894 108 -a 893 1001 1 -a 894 895 107 -a 894 1001 1 -a 895 896 106 -a 895 1001 1 -a 896 897 105 -a 896 1001 1 -a 897 898 104 -a 897 1001 1 -a 898 899 103 -a 898 1001 1 -a 899 900 102 -a 899 1001 1 -a 900 901 101 -a 900 1001 1 -a 901 902 100 -a 901 1001 1 -a 902 903 99 -a 902 1001 1 -a 903 904 98 -a 903 1001 1 -a 904 905 97 -a 904 1001 1 -a 905 906 96 -a 905 1001 1 -a 906 907 95 -a 906 1001 1 -a 907 908 94 -a 907 1001 1 -a 908 909 93 -a 908 1001 1 -a 909 910 92 -a 909 1001 1 -a 910 911 91 -a 910 1001 1 -a 911 912 90 -a 911 1001 1 -a 912 913 89 -a 912 1001 1 -a 913 914 88 -a 913 1001 1 -a 914 915 87 -a 914 1001 1 -a 915 916 86 -a 915 1001 1 -a 916 917 85 -a 916 1001 1 -a 917 918 84 -a 917 1001 1 -a 918 919 83 -a 918 1001 1 -a 919 920 82 -a 919 1001 1 -a 920 921 81 -a 920 1001 1 -a 921 922 80 -a 921 1001 1 -a 922 923 79 -a 922 1001 1 -a 923 924 78 -a 923 1001 1 -a 924 925 77 -a 924 1001 1 -a 925 926 76 -a 925 1001 1 -a 926 927 75 -a 926 1001 1 -a 927 928 74 -a 927 1001 1 -a 928 929 73 -a 928 1001 1 -a 929 930 72 -a 929 1001 1 -a 930 931 71 -a 930 1001 1 -a 931 932 70 -a 931 1001 1 -a 932 933 69 -a 932 1001 1 -a 933 934 68 -a 933 1001 1 -a 934 935 67 -a 934 1001 1 -a 935 936 66 -a 935 1001 1 -a 936 937 65 -a 936 1001 1 -a 937 938 64 -a 937 1001 1 -a 938 939 63 -a 938 1001 1 -a 939 940 62 -a 939 1001 1 -a 940 941 61 -a 940 1001 1 -a 941 942 60 -a 941 1001 1 -a 942 943 59 -a 942 1001 1 -a 943 944 58 -a 943 1001 1 -a 944 945 57 -a 944 1001 1 -a 945 946 56 -a 945 1001 1 -a 946 947 55 -a 946 1001 1 -a 947 948 54 -a 947 1001 1 -a 948 949 53 -a 948 1001 1 -a 949 950 52 -a 949 1001 1 -a 950 951 51 -a 950 1001 1 -a 951 952 50 -a 951 1001 1 -a 952 953 49 -a 952 1001 1 -a 953 954 48 -a 953 1001 1 -a 954 955 47 -a 954 1001 1 -a 955 956 46 -a 955 1001 1 -a 956 957 45 -a 956 1001 1 -a 957 958 44 -a 957 1001 1 -a 958 959 43 -a 958 1001 1 -a 959 960 42 -a 959 1001 1 -a 960 961 41 -a 960 1001 1 -a 961 962 40 -a 961 1001 1 -a 962 963 39 -a 962 1001 1 -a 963 964 38 -a 963 1001 1 -a 964 965 37 -a 964 1001 1 -a 965 966 36 -a 965 1001 1 -a 966 967 35 -a 966 1001 1 -a 967 968 34 -a 967 1001 1 -a 968 969 33 -a 968 1001 1 -a 969 970 32 -a 969 1001 1 -a 970 971 31 -a 970 1001 1 -a 971 972 30 -a 971 1001 1 -a 972 973 29 -a 972 1001 1 -a 973 974 28 -a 973 1001 1 -a 974 975 27 -a 974 1001 1 -a 975 976 26 -a 975 1001 1 -a 976 977 25 -a 976 1001 1 -a 977 978 24 -a 977 1001 1 -a 978 979 23 -a 978 1001 1 -a 979 980 22 -a 979 1001 1 -a 980 981 21 -a 980 1001 1 -a 981 982 20 -a 981 1001 1 -a 982 983 19 -a 982 1001 1 -a 983 984 18 -a 983 1001 1 -a 984 985 17 -a 984 1001 1 -a 985 986 16 -a 985 1001 1 -a 986 987 15 -a 986 1001 1 -a 987 988 14 -a 987 1001 1 -a 988 989 13 -a 988 1001 1 -a 989 990 12 -a 989 1001 1 -a 990 991 11 -a 990 1001 1 -a 991 992 10 -a 991 1001 1 -a 992 993 9 -a 992 1001 1 -a 993 994 8 -a 993 1001 1 -a 994 995 7 -a 994 1001 1 -a 995 996 6 -a 995 1001 1 -a 996 997 5 -a 996 1001 1 -a 997 998 4 -a 997 1001 1 -a 998 999 3 -a 998 1001 1 -a 999 1000 2 -a 999 1001 1 -a 1000 1001 1 -a 1000 1001 1 -a 1000 2000 1 -a 1000 1001 1 -a 1001 1002 1000 -a 1002 1003 1000 -a 1003 1004 1000 -a 1004 1005 1000 -a 1005 1006 1000 -a 1006 1007 1000 -a 1007 1008 1000 -a 1008 1009 1000 -a 1009 1010 1000 -a 1010 1011 1000 -a 1011 1012 1000 -a 1012 1013 1000 -a 1013 1014 1000 -a 1014 1015 1000 -a 1015 1016 1000 -a 1016 1017 1000 -a 1017 1018 1000 -a 1018 1019 1000 -a 1019 1020 1000 -a 1020 1021 1000 -a 1021 1022 1000 -a 1022 1023 1000 -a 1023 1024 1000 -a 1024 1025 1000 -a 1025 1026 1000 -a 1026 1027 1000 -a 1027 1028 1000 -a 1028 1029 1000 -a 1029 1030 1000 -a 1030 1031 1000 -a 1031 1032 1000 -a 1032 1033 1000 -a 1033 1034 1000 -a 1034 1035 1000 -a 1035 1036 1000 -a 1036 1037 1000 -a 1037 1038 1000 -a 1038 1039 1000 -a 1039 1040 1000 -a 1040 1041 1000 -a 1041 1042 1000 -a 1042 1043 1000 -a 1043 1044 1000 -a 1044 1045 1000 -a 1045 1046 1000 -a 1046 1047 1000 -a 1047 1048 1000 -a 1048 1049 1000 -a 1049 1050 1000 -a 1050 1051 1000 -a 1051 1052 1000 -a 1052 1053 1000 -a 1053 1054 1000 -a 1054 1055 1000 -a 1055 1056 1000 -a 1056 1057 1000 -a 1057 1058 1000 -a 1058 1059 1000 -a 1059 1060 1000 -a 1060 1061 1000 -a 1061 1062 1000 -a 1062 1063 1000 -a 1063 1064 1000 -a 1064 1065 1000 -a 1065 1066 1000 -a 1066 1067 1000 -a 1067 1068 1000 -a 1068 1069 1000 -a 1069 1070 1000 -a 1070 1071 1000 -a 1071 1072 1000 -a 1072 1073 1000 -a 1073 1074 1000 -a 1074 1075 1000 -a 1075 1076 1000 -a 1076 1077 1000 -a 1077 1078 1000 -a 1078 1079 1000 -a 1079 1080 1000 -a 1080 1081 1000 -a 1081 1082 1000 -a 1082 1083 1000 -a 1083 1084 1000 -a 1084 1085 1000 -a 1085 1086 1000 -a 1086 1087 1000 -a 1087 1088 1000 -a 1088 1089 1000 -a 1089 1090 1000 -a 1090 1091 1000 -a 1091 1092 1000 -a 1092 1093 1000 -a 1093 1094 1000 -a 1094 1095 1000 -a 1095 1096 1000 -a 1096 1097 1000 -a 1097 1098 1000 -a 1098 1099 1000 -a 1099 1100 1000 -a 1100 1101 1000 -a 1101 1102 1000 -a 1102 1103 1000 -a 1103 1104 1000 -a 1104 1105 1000 -a 1105 1106 1000 -a 1106 1107 1000 -a 1107 1108 1000 -a 1108 1109 1000 -a 1109 1110 1000 -a 1110 1111 1000 -a 1111 1112 1000 -a 1112 1113 1000 -a 1113 1114 1000 -a 1114 1115 1000 -a 1115 1116 1000 -a 1116 1117 1000 -a 1117 1118 1000 -a 1118 1119 1000 -a 1119 1120 1000 -a 1120 1121 1000 -a 1121 1122 1000 -a 1122 1123 1000 -a 1123 1124 1000 -a 1124 1125 1000 -a 1125 1126 1000 -a 1126 1127 1000 -a 1127 1128 1000 -a 1128 1129 1000 -a 1129 1130 1000 -a 1130 1131 1000 -a 1131 1132 1000 -a 1132 1133 1000 -a 1133 1134 1000 -a 1134 1135 1000 -a 1135 1136 1000 -a 1136 1137 1000 -a 1137 1138 1000 -a 1138 1139 1000 -a 1139 1140 1000 -a 1140 1141 1000 -a 1141 1142 1000 -a 1142 1143 1000 -a 1143 1144 1000 -a 1144 1145 1000 -a 1145 1146 1000 -a 1146 1147 1000 -a 1147 1148 1000 -a 1148 1149 1000 -a 1149 1150 1000 -a 1150 1151 1000 -a 1151 1152 1000 -a 1152 1153 1000 -a 1153 1154 1000 -a 1154 1155 1000 -a 1155 1156 1000 -a 1156 1157 1000 -a 1157 1158 1000 -a 1158 1159 1000 -a 1159 1160 1000 -a 1160 1161 1000 -a 1161 1162 1000 -a 1162 1163 1000 -a 1163 1164 1000 -a 1164 1165 1000 -a 1165 1166 1000 -a 1166 1167 1000 -a 1167 1168 1000 -a 1168 1169 1000 -a 1169 1170 1000 -a 1170 1171 1000 -a 1171 1172 1000 -a 1172 1173 1000 -a 1173 1174 1000 -a 1174 1175 1000 -a 1175 1176 1000 -a 1176 1177 1000 -a 1177 1178 1000 -a 1178 1179 1000 -a 1179 1180 1000 -a 1180 1181 1000 -a 1181 1182 1000 -a 1182 1183 1000 -a 1183 1184 1000 -a 1184 1185 1000 -a 1185 1186 1000 -a 1186 1187 1000 -a 1187 1188 1000 -a 1188 1189 1000 -a 1189 1190 1000 -a 1190 1191 1000 -a 1191 1192 1000 -a 1192 1193 1000 -a 1193 1194 1000 -a 1194 1195 1000 -a 1195 1196 1000 -a 1196 1197 1000 -a 1197 1198 1000 -a 1198 1199 1000 -a 1199 1200 1000 -a 1200 1201 1000 -a 1201 1202 1000 -a 1202 1203 1000 -a 1203 1204 1000 -a 1204 1205 1000 -a 1205 1206 1000 -a 1206 1207 1000 -a 1207 1208 1000 -a 1208 1209 1000 -a 1209 1210 1000 -a 1210 1211 1000 -a 1211 1212 1000 -a 1212 1213 1000 -a 1213 1214 1000 -a 1214 1215 1000 -a 1215 1216 1000 -a 1216 1217 1000 -a 1217 1218 1000 -a 1218 1219 1000 -a 1219 1220 1000 -a 1220 1221 1000 -a 1221 1222 1000 -a 1222 1223 1000 -a 1223 1224 1000 -a 1224 1225 1000 -a 1225 1226 1000 -a 1226 1227 1000 -a 1227 1228 1000 -a 1228 1229 1000 -a 1229 1230 1000 -a 1230 1231 1000 -a 1231 1232 1000 -a 1232 1233 1000 -a 1233 1234 1000 -a 1234 1235 1000 -a 1235 1236 1000 -a 1236 1237 1000 -a 1237 1238 1000 -a 1238 1239 1000 -a 1239 1240 1000 -a 1240 1241 1000 -a 1241 1242 1000 -a 1242 1243 1000 -a 1243 1244 1000 -a 1244 1245 1000 -a 1245 1246 1000 -a 1246 1247 1000 -a 1247 1248 1000 -a 1248 1249 1000 -a 1249 1250 1000 -a 1250 1251 1000 -a 1251 1252 1000 -a 1252 1253 1000 -a 1253 1254 1000 -a 1254 1255 1000 -a 1255 1256 1000 -a 1256 1257 1000 -a 1257 1258 1000 -a 1258 1259 1000 -a 1259 1260 1000 -a 1260 1261 1000 -a 1261 1262 1000 -a 1262 1263 1000 -a 1263 1264 1000 -a 1264 1265 1000 -a 1265 1266 1000 -a 1266 1267 1000 -a 1267 1268 1000 -a 1268 1269 1000 -a 1269 1270 1000 -a 1270 1271 1000 -a 1271 1272 1000 -a 1272 1273 1000 -a 1273 1274 1000 -a 1274 1275 1000 -a 1275 1276 1000 -a 1276 1277 1000 -a 1277 1278 1000 -a 1278 1279 1000 -a 1279 1280 1000 -a 1280 1281 1000 -a 1281 1282 1000 -a 1282 1283 1000 -a 1283 1284 1000 -a 1284 1285 1000 -a 1285 1286 1000 -a 1286 1287 1000 -a 1287 1288 1000 -a 1288 1289 1000 -a 1289 1290 1000 -a 1290 1291 1000 -a 1291 1292 1000 -a 1292 1293 1000 -a 1293 1294 1000 -a 1294 1295 1000 -a 1295 1296 1000 -a 1296 1297 1000 -a 1297 1298 1000 -a 1298 1299 1000 -a 1299 1300 1000 -a 1300 1301 1000 -a 1301 1302 1000 -a 1302 1303 1000 -a 1303 1304 1000 -a 1304 1305 1000 -a 1305 1306 1000 -a 1306 1307 1000 -a 1307 1308 1000 -a 1308 1309 1000 -a 1309 1310 1000 -a 1310 1311 1000 -a 1311 1312 1000 -a 1312 1313 1000 -a 1313 1314 1000 -a 1314 1315 1000 -a 1315 1316 1000 -a 1316 1317 1000 -a 1317 1318 1000 -a 1318 1319 1000 -a 1319 1320 1000 -a 1320 1321 1000 -a 1321 1322 1000 -a 1322 1323 1000 -a 1323 1324 1000 -a 1324 1325 1000 -a 1325 1326 1000 -a 1326 1327 1000 -a 1327 1328 1000 -a 1328 1329 1000 -a 1329 1330 1000 -a 1330 1331 1000 -a 1331 1332 1000 -a 1332 1333 1000 -a 1333 1334 1000 -a 1334 1335 1000 -a 1335 1336 1000 -a 1336 1337 1000 -a 1337 1338 1000 -a 1338 1339 1000 -a 1339 1340 1000 -a 1340 1341 1000 -a 1341 1342 1000 -a 1342 1343 1000 -a 1343 1344 1000 -a 1344 1345 1000 -a 1345 1346 1000 -a 1346 1347 1000 -a 1347 1348 1000 -a 1348 1349 1000 -a 1349 1350 1000 -a 1350 1351 1000 -a 1351 1352 1000 -a 1352 1353 1000 -a 1353 1354 1000 -a 1354 1355 1000 -a 1355 1356 1000 -a 1356 1357 1000 -a 1357 1358 1000 -a 1358 1359 1000 -a 1359 1360 1000 -a 1360 1361 1000 -a 1361 1362 1000 -a 1362 1363 1000 -a 1363 1364 1000 -a 1364 1365 1000 -a 1365 1366 1000 -a 1366 1367 1000 -a 1367 1368 1000 -a 1368 1369 1000 -a 1369 1370 1000 -a 1370 1371 1000 -a 1371 1372 1000 -a 1372 1373 1000 -a 1373 1374 1000 -a 1374 1375 1000 -a 1375 1376 1000 -a 1376 1377 1000 -a 1377 1378 1000 -a 1378 1379 1000 -a 1379 1380 1000 -a 1380 1381 1000 -a 1381 1382 1000 -a 1382 1383 1000 -a 1383 1384 1000 -a 1384 1385 1000 -a 1385 1386 1000 -a 1386 1387 1000 -a 1387 1388 1000 -a 1388 1389 1000 -a 1389 1390 1000 -a 1390 1391 1000 -a 1391 1392 1000 -a 1392 1393 1000 -a 1393 1394 1000 -a 1394 1395 1000 -a 1395 1396 1000 -a 1396 1397 1000 -a 1397 1398 1000 -a 1398 1399 1000 -a 1399 1400 1000 -a 1400 1401 1000 -a 1401 1402 1000 -a 1402 1403 1000 -a 1403 1404 1000 -a 1404 1405 1000 -a 1405 1406 1000 -a 1406 1407 1000 -a 1407 1408 1000 -a 1408 1409 1000 -a 1409 1410 1000 -a 1410 1411 1000 -a 1411 1412 1000 -a 1412 1413 1000 -a 1413 1414 1000 -a 1414 1415 1000 -a 1415 1416 1000 -a 1416 1417 1000 -a 1417 1418 1000 -a 1418 1419 1000 -a 1419 1420 1000 -a 1420 1421 1000 -a 1421 1422 1000 -a 1422 1423 1000 -a 1423 1424 1000 -a 1424 1425 1000 -a 1425 1426 1000 -a 1426 1427 1000 -a 1427 1428 1000 -a 1428 1429 1000 -a 1429 1430 1000 -a 1430 1431 1000 -a 1431 1432 1000 -a 1432 1433 1000 -a 1433 1434 1000 -a 1434 1435 1000 -a 1435 1436 1000 -a 1436 1437 1000 -a 1437 1438 1000 -a 1438 1439 1000 -a 1439 1440 1000 -a 1440 1441 1000 -a 1441 1442 1000 -a 1442 1443 1000 -a 1443 1444 1000 -a 1444 1445 1000 -a 1445 1446 1000 -a 1446 1447 1000 -a 1447 1448 1000 -a 1448 1449 1000 -a 1449 1450 1000 -a 1450 1451 1000 -a 1451 1452 1000 -a 1452 1453 1000 -a 1453 1454 1000 -a 1454 1455 1000 -a 1455 1456 1000 -a 1456 1457 1000 -a 1457 1458 1000 -a 1458 1459 1000 -a 1459 1460 1000 -a 1460 1461 1000 -a 1461 1462 1000 -a 1462 1463 1000 -a 1463 1464 1000 -a 1464 1465 1000 -a 1465 1466 1000 -a 1466 1467 1000 -a 1467 1468 1000 -a 1468 1469 1000 -a 1469 1470 1000 -a 1470 1471 1000 -a 1471 1472 1000 -a 1472 1473 1000 -a 1473 1474 1000 -a 1474 1475 1000 -a 1475 1476 1000 -a 1476 1477 1000 -a 1477 1478 1000 -a 1478 1479 1000 -a 1479 1480 1000 -a 1480 1481 1000 -a 1481 1482 1000 -a 1482 1483 1000 -a 1483 1484 1000 -a 1484 1485 1000 -a 1485 1486 1000 -a 1486 1487 1000 -a 1487 1488 1000 -a 1488 1489 1000 -a 1489 1490 1000 -a 1490 1491 1000 -a 1491 1492 1000 -a 1492 1493 1000 -a 1493 1494 1000 -a 1494 1495 1000 -a 1495 1496 1000 -a 1496 1497 1000 -a 1497 1498 1000 -a 1498 1499 1000 -a 1499 1500 1000 -a 1500 1501 1000 -a 1501 1502 1000 -a 1502 1503 1000 -a 1503 1504 1000 -a 1504 1505 1000 -a 1505 1506 1000 -a 1506 1507 1000 -a 1507 1508 1000 -a 1508 1509 1000 -a 1509 1510 1000 -a 1510 1511 1000 -a 1511 1512 1000 -a 1512 1513 1000 -a 1513 1514 1000 -a 1514 1515 1000 -a 1515 1516 1000 -a 1516 1517 1000 -a 1517 1518 1000 -a 1518 1519 1000 -a 1519 1520 1000 -a 1520 1521 1000 -a 1521 1522 1000 -a 1522 1523 1000 -a 1523 1524 1000 -a 1524 1525 1000 -a 1525 1526 1000 -a 1526 1527 1000 -a 1527 1528 1000 -a 1528 1529 1000 -a 1529 1530 1000 -a 1530 1531 1000 -a 1531 1532 1000 -a 1532 1533 1000 -a 1533 1534 1000 -a 1534 1535 1000 -a 1535 1536 1000 -a 1536 1537 1000 -a 1537 1538 1000 -a 1538 1539 1000 -a 1539 1540 1000 -a 1540 1541 1000 -a 1541 1542 1000 -a 1542 1543 1000 -a 1543 1544 1000 -a 1544 1545 1000 -a 1545 1546 1000 -a 1546 1547 1000 -a 1547 1548 1000 -a 1548 1549 1000 -a 1549 1550 1000 -a 1550 1551 1000 -a 1551 1552 1000 -a 1552 1553 1000 -a 1553 1554 1000 -a 1554 1555 1000 -a 1555 1556 1000 -a 1556 1557 1000 -a 1557 1558 1000 -a 1558 1559 1000 -a 1559 1560 1000 -a 1560 1561 1000 -a 1561 1562 1000 -a 1562 1563 1000 -a 1563 1564 1000 -a 1564 1565 1000 -a 1565 1566 1000 -a 1566 1567 1000 -a 1567 1568 1000 -a 1568 1569 1000 -a 1569 1570 1000 -a 1570 1571 1000 -a 1571 1572 1000 -a 1572 1573 1000 -a 1573 1574 1000 -a 1574 1575 1000 -a 1575 1576 1000 -a 1576 1577 1000 -a 1577 1578 1000 -a 1578 1579 1000 -a 1579 1580 1000 -a 1580 1581 1000 -a 1581 1582 1000 -a 1582 1583 1000 -a 1583 1584 1000 -a 1584 1585 1000 -a 1585 1586 1000 -a 1586 1587 1000 -a 1587 1588 1000 -a 1588 1589 1000 -a 1589 1590 1000 -a 1590 1591 1000 -a 1591 1592 1000 -a 1592 1593 1000 -a 1593 1594 1000 -a 1594 1595 1000 -a 1595 1596 1000 -a 1596 1597 1000 -a 1597 1598 1000 -a 1598 1599 1000 -a 1599 1600 1000 -a 1600 1601 1000 -a 1601 1602 1000 -a 1602 1603 1000 -a 1603 1604 1000 -a 1604 1605 1000 -a 1605 1606 1000 -a 1606 1607 1000 -a 1607 1608 1000 -a 1608 1609 1000 -a 1609 1610 1000 -a 1610 1611 1000 -a 1611 1612 1000 -a 1612 1613 1000 -a 1613 1614 1000 -a 1614 1615 1000 -a 1615 1616 1000 -a 1616 1617 1000 -a 1617 1618 1000 -a 1618 1619 1000 -a 1619 1620 1000 -a 1620 1621 1000 -a 1621 1622 1000 -a 1622 1623 1000 -a 1623 1624 1000 -a 1624 1625 1000 -a 1625 1626 1000 -a 1626 1627 1000 -a 1627 1628 1000 -a 1628 1629 1000 -a 1629 1630 1000 -a 1630 1631 1000 -a 1631 1632 1000 -a 1632 1633 1000 -a 1633 1634 1000 -a 1634 1635 1000 -a 1635 1636 1000 -a 1636 1637 1000 -a 1637 1638 1000 -a 1638 1639 1000 -a 1639 1640 1000 -a 1640 1641 1000 -a 1641 1642 1000 -a 1642 1643 1000 -a 1643 1644 1000 -a 1644 1645 1000 -a 1645 1646 1000 -a 1646 1647 1000 -a 1647 1648 1000 -a 1648 1649 1000 -a 1649 1650 1000 -a 1650 1651 1000 -a 1651 1652 1000 -a 1652 1653 1000 -a 1653 1654 1000 -a 1654 1655 1000 -a 1655 1656 1000 -a 1656 1657 1000 -a 1657 1658 1000 -a 1658 1659 1000 -a 1659 1660 1000 -a 1660 1661 1000 -a 1661 1662 1000 -a 1662 1663 1000 -a 1663 1664 1000 -a 1664 1665 1000 -a 1665 1666 1000 -a 1666 1667 1000 -a 1667 1668 1000 -a 1668 1669 1000 -a 1669 1670 1000 -a 1670 1671 1000 -a 1671 1672 1000 -a 1672 1673 1000 -a 1673 1674 1000 -a 1674 1675 1000 -a 1675 1676 1000 -a 1676 1677 1000 -a 1677 1678 1000 -a 1678 1679 1000 -a 1679 1680 1000 -a 1680 1681 1000 -a 1681 1682 1000 -a 1682 1683 1000 -a 1683 1684 1000 -a 1684 1685 1000 -a 1685 1686 1000 -a 1686 1687 1000 -a 1687 1688 1000 -a 1688 1689 1000 -a 1689 1690 1000 -a 1690 1691 1000 -a 1691 1692 1000 -a 1692 1693 1000 -a 1693 1694 1000 -a 1694 1695 1000 -a 1695 1696 1000 -a 1696 1697 1000 -a 1697 1698 1000 -a 1698 1699 1000 -a 1699 1700 1000 -a 1700 1701 1000 -a 1701 1702 1000 -a 1702 1703 1000 -a 1703 1704 1000 -a 1704 1705 1000 -a 1705 1706 1000 -a 1706 1707 1000 -a 1707 1708 1000 -a 1708 1709 1000 -a 1709 1710 1000 -a 1710 1711 1000 -a 1711 1712 1000 -a 1712 1713 1000 -a 1713 1714 1000 -a 1714 1715 1000 -a 1715 1716 1000 -a 1716 1717 1000 -a 1717 1718 1000 -a 1718 1719 1000 -a 1719 1720 1000 -a 1720 1721 1000 -a 1721 1722 1000 -a 1722 1723 1000 -a 1723 1724 1000 -a 1724 1725 1000 -a 1725 1726 1000 -a 1726 1727 1000 -a 1727 1728 1000 -a 1728 1729 1000 -a 1729 1730 1000 -a 1730 1731 1000 -a 1731 1732 1000 -a 1732 1733 1000 -a 1733 1734 1000 -a 1734 1735 1000 -a 1735 1736 1000 -a 1736 1737 1000 -a 1737 1738 1000 -a 1738 1739 1000 -a 1739 1740 1000 -a 1740 1741 1000 -a 1741 1742 1000 -a 1742 1743 1000 -a 1743 1744 1000 -a 1744 1745 1000 -a 1745 1746 1000 -a 1746 1747 1000 -a 1747 1748 1000 -a 1748 1749 1000 -a 1749 1750 1000 -a 1750 1751 1000 -a 1751 1752 1000 -a 1752 1753 1000 -a 1753 1754 1000 -a 1754 1755 1000 -a 1755 1756 1000 -a 1756 1757 1000 -a 1757 1758 1000 -a 1758 1759 1000 -a 1759 1760 1000 -a 1760 1761 1000 -a 1761 1762 1000 -a 1762 1763 1000 -a 1763 1764 1000 -a 1764 1765 1000 -a 1765 1766 1000 -a 1766 1767 1000 -a 1767 1768 1000 -a 1768 1769 1000 -a 1769 1770 1000 -a 1770 1771 1000 -a 1771 1772 1000 -a 1772 1773 1000 -a 1773 1774 1000 -a 1774 1775 1000 -a 1775 1776 1000 -a 1776 1777 1000 -a 1777 1778 1000 -a 1778 1779 1000 -a 1779 1780 1000 -a 1780 1781 1000 -a 1781 1782 1000 -a 1782 1783 1000 -a 1783 1784 1000 -a 1784 1785 1000 -a 1785 1786 1000 -a 1786 1787 1000 -a 1787 1788 1000 -a 1788 1789 1000 -a 1789 1790 1000 -a 1790 1791 1000 -a 1791 1792 1000 -a 1792 1793 1000 -a 1793 1794 1000 -a 1794 1795 1000 -a 1795 1796 1000 -a 1796 1797 1000 -a 1797 1798 1000 -a 1798 1799 1000 -a 1799 1800 1000 -a 1800 1801 1000 -a 1801 1802 1000 -a 1802 1803 1000 -a 1803 1804 1000 -a 1804 1805 1000 -a 1805 1806 1000 -a 1806 1807 1000 -a 1807 1808 1000 -a 1808 1809 1000 -a 1809 1810 1000 -a 1810 1811 1000 -a 1811 1812 1000 -a 1812 1813 1000 -a 1813 1814 1000 -a 1814 1815 1000 -a 1815 1816 1000 -a 1816 1817 1000 -a 1817 1818 1000 -a 1818 1819 1000 -a 1819 1820 1000 -a 1820 1821 1000 -a 1821 1822 1000 -a 1822 1823 1000 -a 1823 1824 1000 -a 1824 1825 1000 -a 1825 1826 1000 -a 1826 1827 1000 -a 1827 1828 1000 -a 1828 1829 1000 -a 1829 1830 1000 -a 1830 1831 1000 -a 1831 1832 1000 -a 1832 1833 1000 -a 1833 1834 1000 -a 1834 1835 1000 -a 1835 1836 1000 -a 1836 1837 1000 -a 1837 1838 1000 -a 1838 1839 1000 -a 1839 1840 1000 -a 1840 1841 1000 -a 1841 1842 1000 -a 1842 1843 1000 -a 1843 1844 1000 -a 1844 1845 1000 -a 1845 1846 1000 -a 1846 1847 1000 -a 1847 1848 1000 -a 1848 1849 1000 -a 1849 1850 1000 -a 1850 1851 1000 -a 1851 1852 1000 -a 1852 1853 1000 -a 1853 1854 1000 -a 1854 1855 1000 -a 1855 1856 1000 -a 1856 1857 1000 -a 1857 1858 1000 -a 1858 1859 1000 -a 1859 1860 1000 -a 1860 1861 1000 -a 1861 1862 1000 -a 1862 1863 1000 -a 1863 1864 1000 -a 1864 1865 1000 -a 1865 1866 1000 -a 1866 1867 1000 -a 1867 1868 1000 -a 1868 1869 1000 -a 1869 1870 1000 -a 1870 1871 1000 -a 1871 1872 1000 -a 1872 1873 1000 -a 1873 1874 1000 -a 1874 1875 1000 -a 1875 1876 1000 -a 1876 1877 1000 -a 1877 1878 1000 -a 1878 1879 1000 -a 1879 1880 1000 -a 1880 1881 1000 -a 1881 1882 1000 -a 1882 1883 1000 -a 1883 1884 1000 -a 1884 1885 1000 -a 1885 1886 1000 -a 1886 1887 1000 -a 1887 1888 1000 -a 1888 1889 1000 -a 1889 1890 1000 -a 1890 1891 1000 -a 1891 1892 1000 -a 1892 1893 1000 -a 1893 1894 1000 -a 1894 1895 1000 -a 1895 1896 1000 -a 1896 1897 1000 -a 1897 1898 1000 -a 1898 1899 1000 -a 1899 1900 1000 -a 1900 1901 1000 -a 1901 1902 1000 -a 1902 1903 1000 -a 1903 1904 1000 -a 1904 1905 1000 -a 1905 1906 1000 -a 1906 1907 1000 -a 1907 1908 1000 -a 1908 1909 1000 -a 1909 1910 1000 -a 1910 1911 1000 -a 1911 1912 1000 -a 1912 1913 1000 -a 1913 1914 1000 -a 1914 1915 1000 -a 1915 1916 1000 -a 1916 1917 1000 -a 1917 1918 1000 -a 1918 1919 1000 -a 1919 1920 1000 -a 1920 1921 1000 -a 1921 1922 1000 -a 1922 1923 1000 -a 1923 1924 1000 -a 1924 1925 1000 -a 1925 1926 1000 -a 1926 1927 1000 -a 1927 1928 1000 -a 1928 1929 1000 -a 1929 1930 1000 -a 1930 1931 1000 -a 1931 1932 1000 -a 1932 1933 1000 -a 1933 1934 1000 -a 1934 1935 1000 -a 1935 1936 1000 -a 1936 1937 1000 -a 1937 1938 1000 -a 1938 1939 1000 -a 1939 1940 1000 -a 1940 1941 1000 -a 1941 1942 1000 -a 1942 1943 1000 -a 1943 1944 1000 -a 1944 1945 1000 -a 1945 1946 1000 -a 1946 1947 1000 -a 1947 1948 1000 -a 1948 1949 1000 -a 1949 1950 1000 -a 1950 1951 1000 -a 1951 1952 1000 -a 1952 1953 1000 -a 1953 1954 1000 -a 1954 1955 1000 -a 1955 1956 1000 -a 1956 1957 1000 -a 1957 1958 1000 -a 1958 1959 1000 -a 1959 1960 1000 -a 1960 1961 1000 -a 1961 1962 1000 -a 1962 1963 1000 -a 1963 1964 1000 -a 1964 1965 1000 -a 1965 1966 1000 -a 1966 1967 1000 -a 1967 1968 1000 -a 1968 1969 1000 -a 1969 1970 1000 -a 1970 1971 1000 -a 1971 1972 1000 -a 1972 1973 1000 -a 1973 1974 1000 -a 1974 1975 1000 -a 1975 1976 1000 -a 1976 1977 1000 -a 1977 1978 1000 -a 1978 1979 1000 -a 1979 1980 1000 -a 1980 1981 1000 -a 1981 1982 1000 -a 1982 1983 1000 -a 1983 1984 1000 -a 1984 1985 1000 -a 1985 1986 1000 -a 1986 1987 1000 -a 1987 1988 1000 -a 1988 1989 1000 -a 1989 1990 1000 -a 1990 1991 1000 -a 1991 1992 1000 -a 1992 1993 1000 -a 1993 1994 1000 -a 1994 1995 1000 -a 1995 1996 1000 -a 1996 1997 1000 -a 1997 1998 1000 -a 1998 1999 1000 -a 1999 2000 1000 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/flow2.dim --- a/src/work/marci/flow2.dim Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3003 +0,0 @@ -c LEDA maxflow problem -p max 2000 2999 -n 1 s -n 2000 t -a 1 2000 1 -a 2 1999 1 -a 3 1998 1 -a 4 1997 1 -a 5 1996 1 -a 6 1995 1 -a 7 1994 1 -a 8 1993 1 -a 9 1992 1 -a 10 1991 1 -a 11 1990 1 -a 12 1989 1 -a 13 1988 1 -a 14 1987 1 -a 15 1986 1 -a 16 1985 1 -a 17 1984 1 -a 18 1983 1 -a 19 1982 1 -a 20 1981 1 -a 21 1980 1 -a 22 1979 1 -a 23 1978 1 -a 24 1977 1 -a 25 1976 1 -a 26 1975 1 -a 27 1974 1 -a 28 1973 1 -a 29 1972 1 -a 30 1971 1 -a 31 1970 1 -a 32 1969 1 -a 33 1968 1 -a 34 1967 1 -a 35 1966 1 -a 36 1965 1 -a 37 1964 1 -a 38 1963 1 -a 39 1962 1 -a 40 1961 1 -a 41 1960 1 -a 42 1959 1 -a 43 1958 1 -a 44 1957 1 -a 45 1956 1 -a 46 1955 1 -a 47 1954 1 -a 48 1953 1 -a 49 1952 1 -a 50 1951 1 -a 51 1950 1 -a 52 1949 1 -a 53 1948 1 -a 54 1947 1 -a 55 1946 1 -a 56 1945 1 -a 57 1944 1 -a 58 1943 1 -a 59 1942 1 -a 60 1941 1 -a 61 1940 1 -a 62 1939 1 -a 63 1938 1 -a 64 1937 1 -a 65 1936 1 -a 66 1935 1 -a 67 1934 1 -a 68 1933 1 -a 69 1932 1 -a 70 1931 1 -a 71 1930 1 -a 72 1929 1 -a 73 1928 1 -a 74 1927 1 -a 75 1926 1 -a 76 1925 1 -a 77 1924 1 -a 78 1923 1 -a 79 1922 1 -a 80 1921 1 -a 81 1920 1 -a 82 1919 1 -a 83 1918 1 -a 84 1917 1 -a 85 1916 1 -a 86 1915 1 -a 87 1914 1 -a 88 1913 1 -a 89 1912 1 -a 90 1911 1 -a 91 1910 1 -a 92 1909 1 -a 93 1908 1 -a 94 1907 1 -a 95 1906 1 -a 96 1905 1 -a 97 1904 1 -a 98 1903 1 -a 99 1902 1 -a 100 1901 1 -a 101 1900 1 -a 102 1899 1 -a 103 1898 1 -a 104 1897 1 -a 105 1896 1 -a 106 1895 1 -a 107 1894 1 -a 108 1893 1 -a 109 1892 1 -a 110 1891 1 -a 111 1890 1 -a 112 1889 1 -a 113 1888 1 -a 114 1887 1 -a 115 1886 1 -a 116 1885 1 -a 117 1884 1 -a 118 1883 1 -a 119 1882 1 -a 120 1881 1 -a 121 1880 1 -a 122 1879 1 -a 123 1878 1 -a 124 1877 1 -a 125 1876 1 -a 126 1875 1 -a 127 1874 1 -a 128 1873 1 -a 129 1872 1 -a 130 1871 1 -a 131 1870 1 -a 132 1869 1 -a 133 1868 1 -a 134 1867 1 -a 135 1866 1 -a 136 1865 1 -a 137 1864 1 -a 138 1863 1 -a 139 1862 1 -a 140 1861 1 -a 141 1860 1 -a 142 1859 1 -a 143 1858 1 -a 144 1857 1 -a 145 1856 1 -a 146 1855 1 -a 147 1854 1 -a 148 1853 1 -a 149 1852 1 -a 150 1851 1 -a 151 1850 1 -a 152 1849 1 -a 153 1848 1 -a 154 1847 1 -a 155 1846 1 -a 156 1845 1 -a 157 1844 1 -a 158 1843 1 -a 159 1842 1 -a 160 1841 1 -a 161 1840 1 -a 162 1839 1 -a 163 1838 1 -a 164 1837 1 -a 165 1836 1 -a 166 1835 1 -a 167 1834 1 -a 168 1833 1 -a 169 1832 1 -a 170 1831 1 -a 171 1830 1 -a 172 1829 1 -a 173 1828 1 -a 174 1827 1 -a 175 1826 1 -a 176 1825 1 -a 177 1824 1 -a 178 1823 1 -a 179 1822 1 -a 180 1821 1 -a 181 1820 1 -a 182 1819 1 -a 183 1818 1 -a 184 1817 1 -a 185 1816 1 -a 186 1815 1 -a 187 1814 1 -a 188 1813 1 -a 189 1812 1 -a 190 1811 1 -a 191 1810 1 -a 192 1809 1 -a 193 1808 1 -a 194 1807 1 -a 195 1806 1 -a 196 1805 1 -a 197 1804 1 -a 198 1803 1 -a 199 1802 1 -a 200 1801 1 -a 201 1800 1 -a 202 1799 1 -a 203 1798 1 -a 204 1797 1 -a 205 1796 1 -a 206 1795 1 -a 207 1794 1 -a 208 1793 1 -a 209 1792 1 -a 210 1791 1 -a 211 1790 1 -a 212 1789 1 -a 213 1788 1 -a 214 1787 1 -a 215 1786 1 -a 216 1785 1 -a 217 1784 1 -a 218 1783 1 -a 219 1782 1 -a 220 1781 1 -a 221 1780 1 -a 222 1779 1 -a 223 1778 1 -a 224 1777 1 -a 225 1776 1 -a 226 1775 1 -a 227 1774 1 -a 228 1773 1 -a 229 1772 1 -a 230 1771 1 -a 231 1770 1 -a 232 1769 1 -a 233 1768 1 -a 234 1767 1 -a 235 1766 1 -a 236 1765 1 -a 237 1764 1 -a 238 1763 1 -a 239 1762 1 -a 240 1761 1 -a 241 1760 1 -a 242 1759 1 -a 243 1758 1 -a 244 1757 1 -a 245 1756 1 -a 246 1755 1 -a 247 1754 1 -a 248 1753 1 -a 249 1752 1 -a 250 1751 1 -a 251 1750 1 -a 252 1749 1 -a 253 1748 1 -a 254 1747 1 -a 255 1746 1 -a 256 1745 1 -a 257 1744 1 -a 258 1743 1 -a 259 1742 1 -a 260 1741 1 -a 261 1740 1 -a 262 1739 1 -a 263 1738 1 -a 264 1737 1 -a 265 1736 1 -a 266 1735 1 -a 267 1734 1 -a 268 1733 1 -a 269 1732 1 -a 270 1731 1 -a 271 1730 1 -a 272 1729 1 -a 273 1728 1 -a 274 1727 1 -a 275 1726 1 -a 276 1725 1 -a 277 1724 1 -a 278 1723 1 -a 279 1722 1 -a 280 1721 1 -a 281 1720 1 -a 282 1719 1 -a 283 1718 1 -a 284 1717 1 -a 285 1716 1 -a 286 1715 1 -a 287 1714 1 -a 288 1713 1 -a 289 1712 1 -a 290 1711 1 -a 291 1710 1 -a 292 1709 1 -a 293 1708 1 -a 294 1707 1 -a 295 1706 1 -a 296 1705 1 -a 297 1704 1 -a 298 1703 1 -a 299 1702 1 -a 300 1701 1 -a 301 1700 1 -a 302 1699 1 -a 303 1698 1 -a 304 1697 1 -a 305 1696 1 -a 306 1695 1 -a 307 1694 1 -a 308 1693 1 -a 309 1692 1 -a 310 1691 1 -a 311 1690 1 -a 312 1689 1 -a 313 1688 1 -a 314 1687 1 -a 315 1686 1 -a 316 1685 1 -a 317 1684 1 -a 318 1683 1 -a 319 1682 1 -a 320 1681 1 -a 321 1680 1 -a 322 1679 1 -a 323 1678 1 -a 324 1677 1 -a 325 1676 1 -a 326 1675 1 -a 327 1674 1 -a 328 1673 1 -a 329 1672 1 -a 330 1671 1 -a 331 1670 1 -a 332 1669 1 -a 333 1668 1 -a 334 1667 1 -a 335 1666 1 -a 336 1665 1 -a 337 1664 1 -a 338 1663 1 -a 339 1662 1 -a 340 1661 1 -a 341 1660 1 -a 342 1659 1 -a 343 1658 1 -a 344 1657 1 -a 345 1656 1 -a 346 1655 1 -a 347 1654 1 -a 348 1653 1 -a 349 1652 1 -a 350 1651 1 -a 351 1650 1 -a 352 1649 1 -a 353 1648 1 -a 354 1647 1 -a 355 1646 1 -a 356 1645 1 -a 357 1644 1 -a 358 1643 1 -a 359 1642 1 -a 360 1641 1 -a 361 1640 1 -a 362 1639 1 -a 363 1638 1 -a 364 1637 1 -a 365 1636 1 -a 366 1635 1 -a 367 1634 1 -a 368 1633 1 -a 369 1632 1 -a 370 1631 1 -a 371 1630 1 -a 372 1629 1 -a 373 1628 1 -a 374 1627 1 -a 375 1626 1 -a 376 1625 1 -a 377 1624 1 -a 378 1623 1 -a 379 1622 1 -a 380 1621 1 -a 381 1620 1 -a 382 1619 1 -a 383 1618 1 -a 384 1617 1 -a 385 1616 1 -a 386 1615 1 -a 387 1614 1 -a 388 1613 1 -a 389 1612 1 -a 390 1611 1 -a 391 1610 1 -a 392 1609 1 -a 393 1608 1 -a 394 1607 1 -a 395 1606 1 -a 396 1605 1 -a 397 1604 1 -a 398 1603 1 -a 399 1602 1 -a 400 1601 1 -a 401 1600 1 -a 402 1599 1 -a 403 1598 1 -a 404 1597 1 -a 405 1596 1 -a 406 1595 1 -a 407 1594 1 -a 408 1593 1 -a 409 1592 1 -a 410 1591 1 -a 411 1590 1 -a 412 1589 1 -a 413 1588 1 -a 414 1587 1 -a 415 1586 1 -a 416 1585 1 -a 417 1584 1 -a 418 1583 1 -a 419 1582 1 -a 420 1581 1 -a 421 1580 1 -a 422 1579 1 -a 423 1578 1 -a 424 1577 1 -a 425 1576 1 -a 426 1575 1 -a 427 1574 1 -a 428 1573 1 -a 429 1572 1 -a 430 1571 1 -a 431 1570 1 -a 432 1569 1 -a 433 1568 1 -a 434 1567 1 -a 435 1566 1 -a 436 1565 1 -a 437 1564 1 -a 438 1563 1 -a 439 1562 1 -a 440 1561 1 -a 441 1560 1 -a 442 1559 1 -a 443 1558 1 -a 444 1557 1 -a 445 1556 1 -a 446 1555 1 -a 447 1554 1 -a 448 1553 1 -a 449 1552 1 -a 450 1551 1 -a 451 1550 1 -a 452 1549 1 -a 453 1548 1 -a 454 1547 1 -a 455 1546 1 -a 456 1545 1 -a 457 1544 1 -a 458 1543 1 -a 459 1542 1 -a 460 1541 1 -a 461 1540 1 -a 462 1539 1 -a 463 1538 1 -a 464 1537 1 -a 465 1536 1 -a 466 1535 1 -a 467 1534 1 -a 468 1533 1 -a 469 1532 1 -a 470 1531 1 -a 471 1530 1 -a 472 1529 1 -a 473 1528 1 -a 474 1527 1 -a 475 1526 1 -a 476 1525 1 -a 477 1524 1 -a 478 1523 1 -a 479 1522 1 -a 480 1521 1 -a 481 1520 1 -a 482 1519 1 -a 483 1518 1 -a 484 1517 1 -a 485 1516 1 -a 486 1515 1 -a 487 1514 1 -a 488 1513 1 -a 489 1512 1 -a 490 1511 1 -a 491 1510 1 -a 492 1509 1 -a 493 1508 1 -a 494 1507 1 -a 495 1506 1 -a 496 1505 1 -a 497 1504 1 -a 498 1503 1 -a 499 1502 1 -a 500 1501 1 -a 501 1500 1 -a 502 1499 1 -a 503 1498 1 -a 504 1497 1 -a 505 1496 1 -a 506 1495 1 -a 507 1494 1 -a 508 1493 1 -a 509 1492 1 -a 510 1491 1 -a 511 1490 1 -a 512 1489 1 -a 513 1488 1 -a 514 1487 1 -a 515 1486 1 -a 516 1485 1 -a 517 1484 1 -a 518 1483 1 -a 519 1482 1 -a 520 1481 1 -a 521 1480 1 -a 522 1479 1 -a 523 1478 1 -a 524 1477 1 -a 525 1476 1 -a 526 1475 1 -a 527 1474 1 -a 528 1473 1 -a 529 1472 1 -a 530 1471 1 -a 531 1470 1 -a 532 1469 1 -a 533 1468 1 -a 534 1467 1 -a 535 1466 1 -a 536 1465 1 -a 537 1464 1 -a 538 1463 1 -a 539 1462 1 -a 540 1461 1 -a 541 1460 1 -a 542 1459 1 -a 543 1458 1 -a 544 1457 1 -a 545 1456 1 -a 546 1455 1 -a 547 1454 1 -a 548 1453 1 -a 549 1452 1 -a 550 1451 1 -a 551 1450 1 -a 552 1449 1 -a 553 1448 1 -a 554 1447 1 -a 555 1446 1 -a 556 1445 1 -a 557 1444 1 -a 558 1443 1 -a 559 1442 1 -a 560 1441 1 -a 561 1440 1 -a 562 1439 1 -a 563 1438 1 -a 564 1437 1 -a 565 1436 1 -a 566 1435 1 -a 567 1434 1 -a 568 1433 1 -a 569 1432 1 -a 570 1431 1 -a 571 1430 1 -a 572 1429 1 -a 573 1428 1 -a 574 1427 1 -a 575 1426 1 -a 576 1425 1 -a 577 1424 1 -a 578 1423 1 -a 579 1422 1 -a 580 1421 1 -a 581 1420 1 -a 582 1419 1 -a 583 1418 1 -a 584 1417 1 -a 585 1416 1 -a 586 1415 1 -a 587 1414 1 -a 588 1413 1 -a 589 1412 1 -a 590 1411 1 -a 591 1410 1 -a 592 1409 1 -a 593 1408 1 -a 594 1407 1 -a 595 1406 1 -a 596 1405 1 -a 597 1404 1 -a 598 1403 1 -a 599 1402 1 -a 600 1401 1 -a 601 1400 1 -a 602 1399 1 -a 603 1398 1 -a 604 1397 1 -a 605 1396 1 -a 606 1395 1 -a 607 1394 1 -a 608 1393 1 -a 609 1392 1 -a 610 1391 1 -a 611 1390 1 -a 612 1389 1 -a 613 1388 1 -a 614 1387 1 -a 615 1386 1 -a 616 1385 1 -a 617 1384 1 -a 618 1383 1 -a 619 1382 1 -a 620 1381 1 -a 621 1380 1 -a 622 1379 1 -a 623 1378 1 -a 624 1377 1 -a 625 1376 1 -a 626 1375 1 -a 627 1374 1 -a 628 1373 1 -a 629 1372 1 -a 630 1371 1 -a 631 1370 1 -a 632 1369 1 -a 633 1368 1 -a 634 1367 1 -a 635 1366 1 -a 636 1365 1 -a 637 1364 1 -a 638 1363 1 -a 639 1362 1 -a 640 1361 1 -a 641 1360 1 -a 642 1359 1 -a 643 1358 1 -a 644 1357 1 -a 645 1356 1 -a 646 1355 1 -a 647 1354 1 -a 648 1353 1 -a 649 1352 1 -a 650 1351 1 -a 651 1350 1 -a 652 1349 1 -a 653 1348 1 -a 654 1347 1 -a 655 1346 1 -a 656 1345 1 -a 657 1344 1 -a 658 1343 1 -a 659 1342 1 -a 660 1341 1 -a 661 1340 1 -a 662 1339 1 -a 663 1338 1 -a 664 1337 1 -a 665 1336 1 -a 666 1335 1 -a 667 1334 1 -a 668 1333 1 -a 669 1332 1 -a 670 1331 1 -a 671 1330 1 -a 672 1329 1 -a 673 1328 1 -a 674 1327 1 -a 675 1326 1 -a 676 1325 1 -a 677 1324 1 -a 678 1323 1 -a 679 1322 1 -a 680 1321 1 -a 681 1320 1 -a 682 1319 1 -a 683 1318 1 -a 684 1317 1 -a 685 1316 1 -a 686 1315 1 -a 687 1314 1 -a 688 1313 1 -a 689 1312 1 -a 690 1311 1 -a 691 1310 1 -a 692 1309 1 -a 693 1308 1 -a 694 1307 1 -a 695 1306 1 -a 696 1305 1 -a 697 1304 1 -a 698 1303 1 -a 699 1302 1 -a 700 1301 1 -a 701 1300 1 -a 702 1299 1 -a 703 1298 1 -a 704 1297 1 -a 705 1296 1 -a 706 1295 1 -a 707 1294 1 -a 708 1293 1 -a 709 1292 1 -a 710 1291 1 -a 711 1290 1 -a 712 1289 1 -a 713 1288 1 -a 714 1287 1 -a 715 1286 1 -a 716 1285 1 -a 717 1284 1 -a 718 1283 1 -a 719 1282 1 -a 720 1281 1 -a 721 1280 1 -a 722 1279 1 -a 723 1278 1 -a 724 1277 1 -a 725 1276 1 -a 726 1275 1 -a 727 1274 1 -a 728 1273 1 -a 729 1272 1 -a 730 1271 1 -a 731 1270 1 -a 732 1269 1 -a 733 1268 1 -a 734 1267 1 -a 735 1266 1 -a 736 1265 1 -a 737 1264 1 -a 738 1263 1 -a 739 1262 1 -a 740 1261 1 -a 741 1260 1 -a 742 1259 1 -a 743 1258 1 -a 744 1257 1 -a 745 1256 1 -a 746 1255 1 -a 747 1254 1 -a 748 1253 1 -a 749 1252 1 -a 750 1251 1 -a 751 1250 1 -a 752 1249 1 -a 753 1248 1 -a 754 1247 1 -a 755 1246 1 -a 756 1245 1 -a 757 1244 1 -a 758 1243 1 -a 759 1242 1 -a 760 1241 1 -a 761 1240 1 -a 762 1239 1 -a 763 1238 1 -a 764 1237 1 -a 765 1236 1 -a 766 1235 1 -a 767 1234 1 -a 768 1233 1 -a 769 1232 1 -a 770 1231 1 -a 771 1230 1 -a 772 1229 1 -a 773 1228 1 -a 774 1227 1 -a 775 1226 1 -a 776 1225 1 -a 777 1224 1 -a 778 1223 1 -a 779 1222 1 -a 780 1221 1 -a 781 1220 1 -a 782 1219 1 -a 783 1218 1 -a 784 1217 1 -a 785 1216 1 -a 786 1215 1 -a 787 1214 1 -a 788 1213 1 -a 789 1212 1 -a 790 1211 1 -a 791 1210 1 -a 792 1209 1 -a 793 1208 1 -a 794 1207 1 -a 795 1206 1 -a 796 1205 1 -a 797 1204 1 -a 798 1203 1 -a 799 1202 1 -a 800 1201 1 -a 801 1200 1 -a 802 1199 1 -a 803 1198 1 -a 804 1197 1 -a 805 1196 1 -a 806 1195 1 -a 807 1194 1 -a 808 1193 1 -a 809 1192 1 -a 810 1191 1 -a 811 1190 1 -a 812 1189 1 -a 813 1188 1 -a 814 1187 1 -a 815 1186 1 -a 816 1185 1 -a 817 1184 1 -a 818 1183 1 -a 819 1182 1 -a 820 1181 1 -a 821 1180 1 -a 822 1179 1 -a 823 1178 1 -a 824 1177 1 -a 825 1176 1 -a 826 1175 1 -a 827 1174 1 -a 828 1173 1 -a 829 1172 1 -a 830 1171 1 -a 831 1170 1 -a 832 1169 1 -a 833 1168 1 -a 834 1167 1 -a 835 1166 1 -a 836 1165 1 -a 837 1164 1 -a 838 1163 1 -a 839 1162 1 -a 840 1161 1 -a 841 1160 1 -a 842 1159 1 -a 843 1158 1 -a 844 1157 1 -a 845 1156 1 -a 846 1155 1 -a 847 1154 1 -a 848 1153 1 -a 849 1152 1 -a 850 1151 1 -a 851 1150 1 -a 852 1149 1 -a 853 1148 1 -a 854 1147 1 -a 855 1146 1 -a 856 1145 1 -a 857 1144 1 -a 858 1143 1 -a 859 1142 1 -a 860 1141 1 -a 861 1140 1 -a 862 1139 1 -a 863 1138 1 -a 864 1137 1 -a 865 1136 1 -a 866 1135 1 -a 867 1134 1 -a 868 1133 1 -a 869 1132 1 -a 870 1131 1 -a 871 1130 1 -a 872 1129 1 -a 873 1128 1 -a 874 1127 1 -a 875 1126 1 -a 876 1125 1 -a 877 1124 1 -a 878 1123 1 -a 879 1122 1 -a 880 1121 1 -a 881 1120 1 -a 882 1119 1 -a 883 1118 1 -a 884 1117 1 -a 885 1116 1 -a 886 1115 1 -a 887 1114 1 -a 888 1113 1 -a 889 1112 1 -a 890 1111 1 -a 891 1110 1 -a 892 1109 1 -a 893 1108 1 -a 894 1107 1 -a 895 1106 1 -a 896 1105 1 -a 897 1104 1 -a 898 1103 1 -a 899 1102 1 -a 900 1101 1 -a 901 1100 1 -a 902 1099 1 -a 903 1098 1 -a 904 1097 1 -a 905 1096 1 -a 906 1095 1 -a 907 1094 1 -a 908 1093 1 -a 909 1092 1 -a 910 1091 1 -a 911 1090 1 -a 912 1089 1 -a 913 1088 1 -a 914 1087 1 -a 915 1086 1 -a 916 1085 1 -a 917 1084 1 -a 918 1083 1 -a 919 1082 1 -a 920 1081 1 -a 921 1080 1 -a 922 1079 1 -a 923 1078 1 -a 924 1077 1 -a 925 1076 1 -a 926 1075 1 -a 927 1074 1 -a 928 1073 1 -a 929 1072 1 -a 930 1071 1 -a 931 1070 1 -a 932 1069 1 -a 933 1068 1 -a 934 1067 1 -a 935 1066 1 -a 936 1065 1 -a 937 1064 1 -a 938 1063 1 -a 939 1062 1 -a 940 1061 1 -a 941 1060 1 -a 942 1059 1 -a 943 1058 1 -a 944 1057 1 -a 945 1056 1 -a 946 1055 1 -a 947 1054 1 -a 948 1053 1 -a 949 1052 1 -a 950 1051 1 -a 951 1050 1 -a 952 1049 1 -a 953 1048 1 -a 954 1047 1 -a 955 1046 1 -a 956 1045 1 -a 957 1044 1 -a 958 1043 1 -a 959 1042 1 -a 960 1041 1 -a 961 1040 1 -a 962 1039 1 -a 963 1038 1 -a 964 1037 1 -a 965 1036 1 -a 966 1035 1 -a 967 1034 1 -a 968 1033 1 -a 969 1032 1 -a 970 1031 1 -a 971 1030 1 -a 972 1029 1 -a 973 1028 1 -a 974 1027 1 -a 975 1026 1 -a 976 1025 1 -a 977 1024 1 -a 978 1023 1 -a 979 1022 1 -a 980 1021 1 -a 981 1020 1 -a 982 1019 1 -a 983 1018 1 -a 984 1017 1 -a 985 1016 1 -a 986 1015 1 -a 987 1014 1 -a 988 1013 1 -a 989 1012 1 -a 990 1011 1 -a 991 1010 1 -a 992 1009 1 -a 993 1008 1 -a 994 1007 1 -a 995 1006 1 -a 996 1005 1 -a 997 1004 1 -a 998 1003 1 -a 999 1002 1 -a 1000 1001 1 -a 1 2 2000 -a 2 3 2000 -a 3 4 2000 -a 4 5 2000 -a 5 6 2000 -a 6 7 2000 -a 7 8 2000 -a 8 9 2000 -a 9 10 2000 -a 10 11 2000 -a 11 12 2000 -a 12 13 2000 -a 13 14 2000 -a 14 15 2000 -a 15 16 2000 -a 16 17 2000 -a 17 18 2000 -a 18 19 2000 -a 19 20 2000 -a 20 21 2000 -a 21 22 2000 -a 22 23 2000 -a 23 24 2000 -a 24 25 2000 -a 25 26 2000 -a 26 27 2000 -a 27 28 2000 -a 28 29 2000 -a 29 30 2000 -a 30 31 2000 -a 31 32 2000 -a 32 33 2000 -a 33 34 2000 -a 34 35 2000 -a 35 36 2000 -a 36 37 2000 -a 37 38 2000 -a 38 39 2000 -a 39 40 2000 -a 40 41 2000 -a 41 42 2000 -a 42 43 2000 -a 43 44 2000 -a 44 45 2000 -a 45 46 2000 -a 46 47 2000 -a 47 48 2000 -a 48 49 2000 -a 49 50 2000 -a 50 51 2000 -a 51 52 2000 -a 52 53 2000 -a 53 54 2000 -a 54 55 2000 -a 55 56 2000 -a 56 57 2000 -a 57 58 2000 -a 58 59 2000 -a 59 60 2000 -a 60 61 2000 -a 61 62 2000 -a 62 63 2000 -a 63 64 2000 -a 64 65 2000 -a 65 66 2000 -a 66 67 2000 -a 67 68 2000 -a 68 69 2000 -a 69 70 2000 -a 70 71 2000 -a 71 72 2000 -a 72 73 2000 -a 73 74 2000 -a 74 75 2000 -a 75 76 2000 -a 76 77 2000 -a 77 78 2000 -a 78 79 2000 -a 79 80 2000 -a 80 81 2000 -a 81 82 2000 -a 82 83 2000 -a 83 84 2000 -a 84 85 2000 -a 85 86 2000 -a 86 87 2000 -a 87 88 2000 -a 88 89 2000 -a 89 90 2000 -a 90 91 2000 -a 91 92 2000 -a 92 93 2000 -a 93 94 2000 -a 94 95 2000 -a 95 96 2000 -a 96 97 2000 -a 97 98 2000 -a 98 99 2000 -a 99 100 2000 -a 100 101 2000 -a 101 102 2000 -a 102 103 2000 -a 103 104 2000 -a 104 105 2000 -a 105 106 2000 -a 106 107 2000 -a 107 108 2000 -a 108 109 2000 -a 109 110 2000 -a 110 111 2000 -a 111 112 2000 -a 112 113 2000 -a 113 114 2000 -a 114 115 2000 -a 115 116 2000 -a 116 117 2000 -a 117 118 2000 -a 118 119 2000 -a 119 120 2000 -a 120 121 2000 -a 121 122 2000 -a 122 123 2000 -a 123 124 2000 -a 124 125 2000 -a 125 126 2000 -a 126 127 2000 -a 127 128 2000 -a 128 129 2000 -a 129 130 2000 -a 130 131 2000 -a 131 132 2000 -a 132 133 2000 -a 133 134 2000 -a 134 135 2000 -a 135 136 2000 -a 136 137 2000 -a 137 138 2000 -a 138 139 2000 -a 139 140 2000 -a 140 141 2000 -a 141 142 2000 -a 142 143 2000 -a 143 144 2000 -a 144 145 2000 -a 145 146 2000 -a 146 147 2000 -a 147 148 2000 -a 148 149 2000 -a 149 150 2000 -a 150 151 2000 -a 151 152 2000 -a 152 153 2000 -a 153 154 2000 -a 154 155 2000 -a 155 156 2000 -a 156 157 2000 -a 157 158 2000 -a 158 159 2000 -a 159 160 2000 -a 160 161 2000 -a 161 162 2000 -a 162 163 2000 -a 163 164 2000 -a 164 165 2000 -a 165 166 2000 -a 166 167 2000 -a 167 168 2000 -a 168 169 2000 -a 169 170 2000 -a 170 171 2000 -a 171 172 2000 -a 172 173 2000 -a 173 174 2000 -a 174 175 2000 -a 175 176 2000 -a 176 177 2000 -a 177 178 2000 -a 178 179 2000 -a 179 180 2000 -a 180 181 2000 -a 181 182 2000 -a 182 183 2000 -a 183 184 2000 -a 184 185 2000 -a 185 186 2000 -a 186 187 2000 -a 187 188 2000 -a 188 189 2000 -a 189 190 2000 -a 190 191 2000 -a 191 192 2000 -a 192 193 2000 -a 193 194 2000 -a 194 195 2000 -a 195 196 2000 -a 196 197 2000 -a 197 198 2000 -a 198 199 2000 -a 199 200 2000 -a 200 201 2000 -a 201 202 2000 -a 202 203 2000 -a 203 204 2000 -a 204 205 2000 -a 205 206 2000 -a 206 207 2000 -a 207 208 2000 -a 208 209 2000 -a 209 210 2000 -a 210 211 2000 -a 211 212 2000 -a 212 213 2000 -a 213 214 2000 -a 214 215 2000 -a 215 216 2000 -a 216 217 2000 -a 217 218 2000 -a 218 219 2000 -a 219 220 2000 -a 220 221 2000 -a 221 222 2000 -a 222 223 2000 -a 223 224 2000 -a 224 225 2000 -a 225 226 2000 -a 226 227 2000 -a 227 228 2000 -a 228 229 2000 -a 229 230 2000 -a 230 231 2000 -a 231 232 2000 -a 232 233 2000 -a 233 234 2000 -a 234 235 2000 -a 235 236 2000 -a 236 237 2000 -a 237 238 2000 -a 238 239 2000 -a 239 240 2000 -a 240 241 2000 -a 241 242 2000 -a 242 243 2000 -a 243 244 2000 -a 244 245 2000 -a 245 246 2000 -a 246 247 2000 -a 247 248 2000 -a 248 249 2000 -a 249 250 2000 -a 250 251 2000 -a 251 252 2000 -a 252 253 2000 -a 253 254 2000 -a 254 255 2000 -a 255 256 2000 -a 256 257 2000 -a 257 258 2000 -a 258 259 2000 -a 259 260 2000 -a 260 261 2000 -a 261 262 2000 -a 262 263 2000 -a 263 264 2000 -a 264 265 2000 -a 265 266 2000 -a 266 267 2000 -a 267 268 2000 -a 268 269 2000 -a 269 270 2000 -a 270 271 2000 -a 271 272 2000 -a 272 273 2000 -a 273 274 2000 -a 274 275 2000 -a 275 276 2000 -a 276 277 2000 -a 277 278 2000 -a 278 279 2000 -a 279 280 2000 -a 280 281 2000 -a 281 282 2000 -a 282 283 2000 -a 283 284 2000 -a 284 285 2000 -a 285 286 2000 -a 286 287 2000 -a 287 288 2000 -a 288 289 2000 -a 289 290 2000 -a 290 291 2000 -a 291 292 2000 -a 292 293 2000 -a 293 294 2000 -a 294 295 2000 -a 295 296 2000 -a 296 297 2000 -a 297 298 2000 -a 298 299 2000 -a 299 300 2000 -a 300 301 2000 -a 301 302 2000 -a 302 303 2000 -a 303 304 2000 -a 304 305 2000 -a 305 306 2000 -a 306 307 2000 -a 307 308 2000 -a 308 309 2000 -a 309 310 2000 -a 310 311 2000 -a 311 312 2000 -a 312 313 2000 -a 313 314 2000 -a 314 315 2000 -a 315 316 2000 -a 316 317 2000 -a 317 318 2000 -a 318 319 2000 -a 319 320 2000 -a 320 321 2000 -a 321 322 2000 -a 322 323 2000 -a 323 324 2000 -a 324 325 2000 -a 325 326 2000 -a 326 327 2000 -a 327 328 2000 -a 328 329 2000 -a 329 330 2000 -a 330 331 2000 -a 331 332 2000 -a 332 333 2000 -a 333 334 2000 -a 334 335 2000 -a 335 336 2000 -a 336 337 2000 -a 337 338 2000 -a 338 339 2000 -a 339 340 2000 -a 340 341 2000 -a 341 342 2000 -a 342 343 2000 -a 343 344 2000 -a 344 345 2000 -a 345 346 2000 -a 346 347 2000 -a 347 348 2000 -a 348 349 2000 -a 349 350 2000 -a 350 351 2000 -a 351 352 2000 -a 352 353 2000 -a 353 354 2000 -a 354 355 2000 -a 355 356 2000 -a 356 357 2000 -a 357 358 2000 -a 358 359 2000 -a 359 360 2000 -a 360 361 2000 -a 361 362 2000 -a 362 363 2000 -a 363 364 2000 -a 364 365 2000 -a 365 366 2000 -a 366 367 2000 -a 367 368 2000 -a 368 369 2000 -a 369 370 2000 -a 370 371 2000 -a 371 372 2000 -a 372 373 2000 -a 373 374 2000 -a 374 375 2000 -a 375 376 2000 -a 376 377 2000 -a 377 378 2000 -a 378 379 2000 -a 379 380 2000 -a 380 381 2000 -a 381 382 2000 -a 382 383 2000 -a 383 384 2000 -a 384 385 2000 -a 385 386 2000 -a 386 387 2000 -a 387 388 2000 -a 388 389 2000 -a 389 390 2000 -a 390 391 2000 -a 391 392 2000 -a 392 393 2000 -a 393 394 2000 -a 394 395 2000 -a 395 396 2000 -a 396 397 2000 -a 397 398 2000 -a 398 399 2000 -a 399 400 2000 -a 400 401 2000 -a 401 402 2000 -a 402 403 2000 -a 403 404 2000 -a 404 405 2000 -a 405 406 2000 -a 406 407 2000 -a 407 408 2000 -a 408 409 2000 -a 409 410 2000 -a 410 411 2000 -a 411 412 2000 -a 412 413 2000 -a 413 414 2000 -a 414 415 2000 -a 415 416 2000 -a 416 417 2000 -a 417 418 2000 -a 418 419 2000 -a 419 420 2000 -a 420 421 2000 -a 421 422 2000 -a 422 423 2000 -a 423 424 2000 -a 424 425 2000 -a 425 426 2000 -a 426 427 2000 -a 427 428 2000 -a 428 429 2000 -a 429 430 2000 -a 430 431 2000 -a 431 432 2000 -a 432 433 2000 -a 433 434 2000 -a 434 435 2000 -a 435 436 2000 -a 436 437 2000 -a 437 438 2000 -a 438 439 2000 -a 439 440 2000 -a 440 441 2000 -a 441 442 2000 -a 442 443 2000 -a 443 444 2000 -a 444 445 2000 -a 445 446 2000 -a 446 447 2000 -a 447 448 2000 -a 448 449 2000 -a 449 450 2000 -a 450 451 2000 -a 451 452 2000 -a 452 453 2000 -a 453 454 2000 -a 454 455 2000 -a 455 456 2000 -a 456 457 2000 -a 457 458 2000 -a 458 459 2000 -a 459 460 2000 -a 460 461 2000 -a 461 462 2000 -a 462 463 2000 -a 463 464 2000 -a 464 465 2000 -a 465 466 2000 -a 466 467 2000 -a 467 468 2000 -a 468 469 2000 -a 469 470 2000 -a 470 471 2000 -a 471 472 2000 -a 472 473 2000 -a 473 474 2000 -a 474 475 2000 -a 475 476 2000 -a 476 477 2000 -a 477 478 2000 -a 478 479 2000 -a 479 480 2000 -a 480 481 2000 -a 481 482 2000 -a 482 483 2000 -a 483 484 2000 -a 484 485 2000 -a 485 486 2000 -a 486 487 2000 -a 487 488 2000 -a 488 489 2000 -a 489 490 2000 -a 490 491 2000 -a 491 492 2000 -a 492 493 2000 -a 493 494 2000 -a 494 495 2000 -a 495 496 2000 -a 496 497 2000 -a 497 498 2000 -a 498 499 2000 -a 499 500 2000 -a 500 501 2000 -a 501 502 2000 -a 502 503 2000 -a 503 504 2000 -a 504 505 2000 -a 505 506 2000 -a 506 507 2000 -a 507 508 2000 -a 508 509 2000 -a 509 510 2000 -a 510 511 2000 -a 511 512 2000 -a 512 513 2000 -a 513 514 2000 -a 514 515 2000 -a 515 516 2000 -a 516 517 2000 -a 517 518 2000 -a 518 519 2000 -a 519 520 2000 -a 520 521 2000 -a 521 522 2000 -a 522 523 2000 -a 523 524 2000 -a 524 525 2000 -a 525 526 2000 -a 526 527 2000 -a 527 528 2000 -a 528 529 2000 -a 529 530 2000 -a 530 531 2000 -a 531 532 2000 -a 532 533 2000 -a 533 534 2000 -a 534 535 2000 -a 535 536 2000 -a 536 537 2000 -a 537 538 2000 -a 538 539 2000 -a 539 540 2000 -a 540 541 2000 -a 541 542 2000 -a 542 543 2000 -a 543 544 2000 -a 544 545 2000 -a 545 546 2000 -a 546 547 2000 -a 547 548 2000 -a 548 549 2000 -a 549 550 2000 -a 550 551 2000 -a 551 552 2000 -a 552 553 2000 -a 553 554 2000 -a 554 555 2000 -a 555 556 2000 -a 556 557 2000 -a 557 558 2000 -a 558 559 2000 -a 559 560 2000 -a 560 561 2000 -a 561 562 2000 -a 562 563 2000 -a 563 564 2000 -a 564 565 2000 -a 565 566 2000 -a 566 567 2000 -a 567 568 2000 -a 568 569 2000 -a 569 570 2000 -a 570 571 2000 -a 571 572 2000 -a 572 573 2000 -a 573 574 2000 -a 574 575 2000 -a 575 576 2000 -a 576 577 2000 -a 577 578 2000 -a 578 579 2000 -a 579 580 2000 -a 580 581 2000 -a 581 582 2000 -a 582 583 2000 -a 583 584 2000 -a 584 585 2000 -a 585 586 2000 -a 586 587 2000 -a 587 588 2000 -a 588 589 2000 -a 589 590 2000 -a 590 591 2000 -a 591 592 2000 -a 592 593 2000 -a 593 594 2000 -a 594 595 2000 -a 595 596 2000 -a 596 597 2000 -a 597 598 2000 -a 598 599 2000 -a 599 600 2000 -a 600 601 2000 -a 601 602 2000 -a 602 603 2000 -a 603 604 2000 -a 604 605 2000 -a 605 606 2000 -a 606 607 2000 -a 607 608 2000 -a 608 609 2000 -a 609 610 2000 -a 610 611 2000 -a 611 612 2000 -a 612 613 2000 -a 613 614 2000 -a 614 615 2000 -a 615 616 2000 -a 616 617 2000 -a 617 618 2000 -a 618 619 2000 -a 619 620 2000 -a 620 621 2000 -a 621 622 2000 -a 622 623 2000 -a 623 624 2000 -a 624 625 2000 -a 625 626 2000 -a 626 627 2000 -a 627 628 2000 -a 628 629 2000 -a 629 630 2000 -a 630 631 2000 -a 631 632 2000 -a 632 633 2000 -a 633 634 2000 -a 634 635 2000 -a 635 636 2000 -a 636 637 2000 -a 637 638 2000 -a 638 639 2000 -a 639 640 2000 -a 640 641 2000 -a 641 642 2000 -a 642 643 2000 -a 643 644 2000 -a 644 645 2000 -a 645 646 2000 -a 646 647 2000 -a 647 648 2000 -a 648 649 2000 -a 649 650 2000 -a 650 651 2000 -a 651 652 2000 -a 652 653 2000 -a 653 654 2000 -a 654 655 2000 -a 655 656 2000 -a 656 657 2000 -a 657 658 2000 -a 658 659 2000 -a 659 660 2000 -a 660 661 2000 -a 661 662 2000 -a 662 663 2000 -a 663 664 2000 -a 664 665 2000 -a 665 666 2000 -a 666 667 2000 -a 667 668 2000 -a 668 669 2000 -a 669 670 2000 -a 670 671 2000 -a 671 672 2000 -a 672 673 2000 -a 673 674 2000 -a 674 675 2000 -a 675 676 2000 -a 676 677 2000 -a 677 678 2000 -a 678 679 2000 -a 679 680 2000 -a 680 681 2000 -a 681 682 2000 -a 682 683 2000 -a 683 684 2000 -a 684 685 2000 -a 685 686 2000 -a 686 687 2000 -a 687 688 2000 -a 688 689 2000 -a 689 690 2000 -a 690 691 2000 -a 691 692 2000 -a 692 693 2000 -a 693 694 2000 -a 694 695 2000 -a 695 696 2000 -a 696 697 2000 -a 697 698 2000 -a 698 699 2000 -a 699 700 2000 -a 700 701 2000 -a 701 702 2000 -a 702 703 2000 -a 703 704 2000 -a 704 705 2000 -a 705 706 2000 -a 706 707 2000 -a 707 708 2000 -a 708 709 2000 -a 709 710 2000 -a 710 711 2000 -a 711 712 2000 -a 712 713 2000 -a 713 714 2000 -a 714 715 2000 -a 715 716 2000 -a 716 717 2000 -a 717 718 2000 -a 718 719 2000 -a 719 720 2000 -a 720 721 2000 -a 721 722 2000 -a 722 723 2000 -a 723 724 2000 -a 724 725 2000 -a 725 726 2000 -a 726 727 2000 -a 727 728 2000 -a 728 729 2000 -a 729 730 2000 -a 730 731 2000 -a 731 732 2000 -a 732 733 2000 -a 733 734 2000 -a 734 735 2000 -a 735 736 2000 -a 736 737 2000 -a 737 738 2000 -a 738 739 2000 -a 739 740 2000 -a 740 741 2000 -a 741 742 2000 -a 742 743 2000 -a 743 744 2000 -a 744 745 2000 -a 745 746 2000 -a 746 747 2000 -a 747 748 2000 -a 748 749 2000 -a 749 750 2000 -a 750 751 2000 -a 751 752 2000 -a 752 753 2000 -a 753 754 2000 -a 754 755 2000 -a 755 756 2000 -a 756 757 2000 -a 757 758 2000 -a 758 759 2000 -a 759 760 2000 -a 760 761 2000 -a 761 762 2000 -a 762 763 2000 -a 763 764 2000 -a 764 765 2000 -a 765 766 2000 -a 766 767 2000 -a 767 768 2000 -a 768 769 2000 -a 769 770 2000 -a 770 771 2000 -a 771 772 2000 -a 772 773 2000 -a 773 774 2000 -a 774 775 2000 -a 775 776 2000 -a 776 777 2000 -a 777 778 2000 -a 778 779 2000 -a 779 780 2000 -a 780 781 2000 -a 781 782 2000 -a 782 783 2000 -a 783 784 2000 -a 784 785 2000 -a 785 786 2000 -a 786 787 2000 -a 787 788 2000 -a 788 789 2000 -a 789 790 2000 -a 790 791 2000 -a 791 792 2000 -a 792 793 2000 -a 793 794 2000 -a 794 795 2000 -a 795 796 2000 -a 796 797 2000 -a 797 798 2000 -a 798 799 2000 -a 799 800 2000 -a 800 801 2000 -a 801 802 2000 -a 802 803 2000 -a 803 804 2000 -a 804 805 2000 -a 805 806 2000 -a 806 807 2000 -a 807 808 2000 -a 808 809 2000 -a 809 810 2000 -a 810 811 2000 -a 811 812 2000 -a 812 813 2000 -a 813 814 2000 -a 814 815 2000 -a 815 816 2000 -a 816 817 2000 -a 817 818 2000 -a 818 819 2000 -a 819 820 2000 -a 820 821 2000 -a 821 822 2000 -a 822 823 2000 -a 823 824 2000 -a 824 825 2000 -a 825 826 2000 -a 826 827 2000 -a 827 828 2000 -a 828 829 2000 -a 829 830 2000 -a 830 831 2000 -a 831 832 2000 -a 832 833 2000 -a 833 834 2000 -a 834 835 2000 -a 835 836 2000 -a 836 837 2000 -a 837 838 2000 -a 838 839 2000 -a 839 840 2000 -a 840 841 2000 -a 841 842 2000 -a 842 843 2000 -a 843 844 2000 -a 844 845 2000 -a 845 846 2000 -a 846 847 2000 -a 847 848 2000 -a 848 849 2000 -a 849 850 2000 -a 850 851 2000 -a 851 852 2000 -a 852 853 2000 -a 853 854 2000 -a 854 855 2000 -a 855 856 2000 -a 856 857 2000 -a 857 858 2000 -a 858 859 2000 -a 859 860 2000 -a 860 861 2000 -a 861 862 2000 -a 862 863 2000 -a 863 864 2000 -a 864 865 2000 -a 865 866 2000 -a 866 867 2000 -a 867 868 2000 -a 868 869 2000 -a 869 870 2000 -a 870 871 2000 -a 871 872 2000 -a 872 873 2000 -a 873 874 2000 -a 874 875 2000 -a 875 876 2000 -a 876 877 2000 -a 877 878 2000 -a 878 879 2000 -a 879 880 2000 -a 880 881 2000 -a 881 882 2000 -a 882 883 2000 -a 883 884 2000 -a 884 885 2000 -a 885 886 2000 -a 886 887 2000 -a 887 888 2000 -a 888 889 2000 -a 889 890 2000 -a 890 891 2000 -a 891 892 2000 -a 892 893 2000 -a 893 894 2000 -a 894 895 2000 -a 895 896 2000 -a 896 897 2000 -a 897 898 2000 -a 898 899 2000 -a 899 900 2000 -a 900 901 2000 -a 901 902 2000 -a 902 903 2000 -a 903 904 2000 -a 904 905 2000 -a 905 906 2000 -a 906 907 2000 -a 907 908 2000 -a 908 909 2000 -a 909 910 2000 -a 910 911 2000 -a 911 912 2000 -a 912 913 2000 -a 913 914 2000 -a 914 915 2000 -a 915 916 2000 -a 916 917 2000 -a 917 918 2000 -a 918 919 2000 -a 919 920 2000 -a 920 921 2000 -a 921 922 2000 -a 922 923 2000 -a 923 924 2000 -a 924 925 2000 -a 925 926 2000 -a 926 927 2000 -a 927 928 2000 -a 928 929 2000 -a 929 930 2000 -a 930 931 2000 -a 931 932 2000 -a 932 933 2000 -a 933 934 2000 -a 934 935 2000 -a 935 936 2000 -a 936 937 2000 -a 937 938 2000 -a 938 939 2000 -a 939 940 2000 -a 940 941 2000 -a 941 942 2000 -a 942 943 2000 -a 943 944 2000 -a 944 945 2000 -a 945 946 2000 -a 946 947 2000 -a 947 948 2000 -a 948 949 2000 -a 949 950 2000 -a 950 951 2000 -a 951 952 2000 -a 952 953 2000 -a 953 954 2000 -a 954 955 2000 -a 955 956 2000 -a 956 957 2000 -a 957 958 2000 -a 958 959 2000 -a 959 960 2000 -a 960 961 2000 -a 961 962 2000 -a 962 963 2000 -a 963 964 2000 -a 964 965 2000 -a 965 966 2000 -a 966 967 2000 -a 967 968 2000 -a 968 969 2000 -a 969 970 2000 -a 970 971 2000 -a 971 972 2000 -a 972 973 2000 -a 973 974 2000 -a 974 975 2000 -a 975 976 2000 -a 976 977 2000 -a 977 978 2000 -a 978 979 2000 -a 979 980 2000 -a 980 981 2000 -a 981 982 2000 -a 982 983 2000 -a 983 984 2000 -a 984 985 2000 -a 985 986 2000 -a 986 987 2000 -a 987 988 2000 -a 988 989 2000 -a 989 990 2000 -a 990 991 2000 -a 991 992 2000 -a 992 993 2000 -a 993 994 2000 -a 994 995 2000 -a 995 996 2000 -a 996 997 2000 -a 997 998 2000 -a 998 999 2000 -a 999 1000 2000 -a 1000 1001 2000 -a 1001 1002 1000 -a 1002 1003 1000 -a 1003 1004 1000 -a 1004 1005 1000 -a 1005 1006 1000 -a 1006 1007 1000 -a 1007 1008 1000 -a 1008 1009 1000 -a 1009 1010 1000 -a 1010 1011 1000 -a 1011 1012 1000 -a 1012 1013 1000 -a 1013 1014 1000 -a 1014 1015 1000 -a 1015 1016 1000 -a 1016 1017 1000 -a 1017 1018 1000 -a 1018 1019 1000 -a 1019 1020 1000 -a 1020 1021 1000 -a 1021 1022 1000 -a 1022 1023 1000 -a 1023 1024 1000 -a 1024 1025 1000 -a 1025 1026 1000 -a 1026 1027 1000 -a 1027 1028 1000 -a 1028 1029 1000 -a 1029 1030 1000 -a 1030 1031 1000 -a 1031 1032 1000 -a 1032 1033 1000 -a 1033 1034 1000 -a 1034 1035 1000 -a 1035 1036 1000 -a 1036 1037 1000 -a 1037 1038 1000 -a 1038 1039 1000 -a 1039 1040 1000 -a 1040 1041 1000 -a 1041 1042 1000 -a 1042 1043 1000 -a 1043 1044 1000 -a 1044 1045 1000 -a 1045 1046 1000 -a 1046 1047 1000 -a 1047 1048 1000 -a 1048 1049 1000 -a 1049 1050 1000 -a 1050 1051 1000 -a 1051 1052 1000 -a 1052 1053 1000 -a 1053 1054 1000 -a 1054 1055 1000 -a 1055 1056 1000 -a 1056 1057 1000 -a 1057 1058 1000 -a 1058 1059 1000 -a 1059 1060 1000 -a 1060 1061 1000 -a 1061 1062 1000 -a 1062 1063 1000 -a 1063 1064 1000 -a 1064 1065 1000 -a 1065 1066 1000 -a 1066 1067 1000 -a 1067 1068 1000 -a 1068 1069 1000 -a 1069 1070 1000 -a 1070 1071 1000 -a 1071 1072 1000 -a 1072 1073 1000 -a 1073 1074 1000 -a 1074 1075 1000 -a 1075 1076 1000 -a 1076 1077 1000 -a 1077 1078 1000 -a 1078 1079 1000 -a 1079 1080 1000 -a 1080 1081 1000 -a 1081 1082 1000 -a 1082 1083 1000 -a 1083 1084 1000 -a 1084 1085 1000 -a 1085 1086 1000 -a 1086 1087 1000 -a 1087 1088 1000 -a 1088 1089 1000 -a 1089 1090 1000 -a 1090 1091 1000 -a 1091 1092 1000 -a 1092 1093 1000 -a 1093 1094 1000 -a 1094 1095 1000 -a 1095 1096 1000 -a 1096 1097 1000 -a 1097 1098 1000 -a 1098 1099 1000 -a 1099 1100 1000 -a 1100 1101 1000 -a 1101 1102 1000 -a 1102 1103 1000 -a 1103 1104 1000 -a 1104 1105 1000 -a 1105 1106 1000 -a 1106 1107 1000 -a 1107 1108 1000 -a 1108 1109 1000 -a 1109 1110 1000 -a 1110 1111 1000 -a 1111 1112 1000 -a 1112 1113 1000 -a 1113 1114 1000 -a 1114 1115 1000 -a 1115 1116 1000 -a 1116 1117 1000 -a 1117 1118 1000 -a 1118 1119 1000 -a 1119 1120 1000 -a 1120 1121 1000 -a 1121 1122 1000 -a 1122 1123 1000 -a 1123 1124 1000 -a 1124 1125 1000 -a 1125 1126 1000 -a 1126 1127 1000 -a 1127 1128 1000 -a 1128 1129 1000 -a 1129 1130 1000 -a 1130 1131 1000 -a 1131 1132 1000 -a 1132 1133 1000 -a 1133 1134 1000 -a 1134 1135 1000 -a 1135 1136 1000 -a 1136 1137 1000 -a 1137 1138 1000 -a 1138 1139 1000 -a 1139 1140 1000 -a 1140 1141 1000 -a 1141 1142 1000 -a 1142 1143 1000 -a 1143 1144 1000 -a 1144 1145 1000 -a 1145 1146 1000 -a 1146 1147 1000 -a 1147 1148 1000 -a 1148 1149 1000 -a 1149 1150 1000 -a 1150 1151 1000 -a 1151 1152 1000 -a 1152 1153 1000 -a 1153 1154 1000 -a 1154 1155 1000 -a 1155 1156 1000 -a 1156 1157 1000 -a 1157 1158 1000 -a 1158 1159 1000 -a 1159 1160 1000 -a 1160 1161 1000 -a 1161 1162 1000 -a 1162 1163 1000 -a 1163 1164 1000 -a 1164 1165 1000 -a 1165 1166 1000 -a 1166 1167 1000 -a 1167 1168 1000 -a 1168 1169 1000 -a 1169 1170 1000 -a 1170 1171 1000 -a 1171 1172 1000 -a 1172 1173 1000 -a 1173 1174 1000 -a 1174 1175 1000 -a 1175 1176 1000 -a 1176 1177 1000 -a 1177 1178 1000 -a 1178 1179 1000 -a 1179 1180 1000 -a 1180 1181 1000 -a 1181 1182 1000 -a 1182 1183 1000 -a 1183 1184 1000 -a 1184 1185 1000 -a 1185 1186 1000 -a 1186 1187 1000 -a 1187 1188 1000 -a 1188 1189 1000 -a 1189 1190 1000 -a 1190 1191 1000 -a 1191 1192 1000 -a 1192 1193 1000 -a 1193 1194 1000 -a 1194 1195 1000 -a 1195 1196 1000 -a 1196 1197 1000 -a 1197 1198 1000 -a 1198 1199 1000 -a 1199 1200 1000 -a 1200 1201 1000 -a 1201 1202 1000 -a 1202 1203 1000 -a 1203 1204 1000 -a 1204 1205 1000 -a 1205 1206 1000 -a 1206 1207 1000 -a 1207 1208 1000 -a 1208 1209 1000 -a 1209 1210 1000 -a 1210 1211 1000 -a 1211 1212 1000 -a 1212 1213 1000 -a 1213 1214 1000 -a 1214 1215 1000 -a 1215 1216 1000 -a 1216 1217 1000 -a 1217 1218 1000 -a 1218 1219 1000 -a 1219 1220 1000 -a 1220 1221 1000 -a 1221 1222 1000 -a 1222 1223 1000 -a 1223 1224 1000 -a 1224 1225 1000 -a 1225 1226 1000 -a 1226 1227 1000 -a 1227 1228 1000 -a 1228 1229 1000 -a 1229 1230 1000 -a 1230 1231 1000 -a 1231 1232 1000 -a 1232 1233 1000 -a 1233 1234 1000 -a 1234 1235 1000 -a 1235 1236 1000 -a 1236 1237 1000 -a 1237 1238 1000 -a 1238 1239 1000 -a 1239 1240 1000 -a 1240 1241 1000 -a 1241 1242 1000 -a 1242 1243 1000 -a 1243 1244 1000 -a 1244 1245 1000 -a 1245 1246 1000 -a 1246 1247 1000 -a 1247 1248 1000 -a 1248 1249 1000 -a 1249 1250 1000 -a 1250 1251 1000 -a 1251 1252 1000 -a 1252 1253 1000 -a 1253 1254 1000 -a 1254 1255 1000 -a 1255 1256 1000 -a 1256 1257 1000 -a 1257 1258 1000 -a 1258 1259 1000 -a 1259 1260 1000 -a 1260 1261 1000 -a 1261 1262 1000 -a 1262 1263 1000 -a 1263 1264 1000 -a 1264 1265 1000 -a 1265 1266 1000 -a 1266 1267 1000 -a 1267 1268 1000 -a 1268 1269 1000 -a 1269 1270 1000 -a 1270 1271 1000 -a 1271 1272 1000 -a 1272 1273 1000 -a 1273 1274 1000 -a 1274 1275 1000 -a 1275 1276 1000 -a 1276 1277 1000 -a 1277 1278 1000 -a 1278 1279 1000 -a 1279 1280 1000 -a 1280 1281 1000 -a 1281 1282 1000 -a 1282 1283 1000 -a 1283 1284 1000 -a 1284 1285 1000 -a 1285 1286 1000 -a 1286 1287 1000 -a 1287 1288 1000 -a 1288 1289 1000 -a 1289 1290 1000 -a 1290 1291 1000 -a 1291 1292 1000 -a 1292 1293 1000 -a 1293 1294 1000 -a 1294 1295 1000 -a 1295 1296 1000 -a 1296 1297 1000 -a 1297 1298 1000 -a 1298 1299 1000 -a 1299 1300 1000 -a 1300 1301 1000 -a 1301 1302 1000 -a 1302 1303 1000 -a 1303 1304 1000 -a 1304 1305 1000 -a 1305 1306 1000 -a 1306 1307 1000 -a 1307 1308 1000 -a 1308 1309 1000 -a 1309 1310 1000 -a 1310 1311 1000 -a 1311 1312 1000 -a 1312 1313 1000 -a 1313 1314 1000 -a 1314 1315 1000 -a 1315 1316 1000 -a 1316 1317 1000 -a 1317 1318 1000 -a 1318 1319 1000 -a 1319 1320 1000 -a 1320 1321 1000 -a 1321 1322 1000 -a 1322 1323 1000 -a 1323 1324 1000 -a 1324 1325 1000 -a 1325 1326 1000 -a 1326 1327 1000 -a 1327 1328 1000 -a 1328 1329 1000 -a 1329 1330 1000 -a 1330 1331 1000 -a 1331 1332 1000 -a 1332 1333 1000 -a 1333 1334 1000 -a 1334 1335 1000 -a 1335 1336 1000 -a 1336 1337 1000 -a 1337 1338 1000 -a 1338 1339 1000 -a 1339 1340 1000 -a 1340 1341 1000 -a 1341 1342 1000 -a 1342 1343 1000 -a 1343 1344 1000 -a 1344 1345 1000 -a 1345 1346 1000 -a 1346 1347 1000 -a 1347 1348 1000 -a 1348 1349 1000 -a 1349 1350 1000 -a 1350 1351 1000 -a 1351 1352 1000 -a 1352 1353 1000 -a 1353 1354 1000 -a 1354 1355 1000 -a 1355 1356 1000 -a 1356 1357 1000 -a 1357 1358 1000 -a 1358 1359 1000 -a 1359 1360 1000 -a 1360 1361 1000 -a 1361 1362 1000 -a 1362 1363 1000 -a 1363 1364 1000 -a 1364 1365 1000 -a 1365 1366 1000 -a 1366 1367 1000 -a 1367 1368 1000 -a 1368 1369 1000 -a 1369 1370 1000 -a 1370 1371 1000 -a 1371 1372 1000 -a 1372 1373 1000 -a 1373 1374 1000 -a 1374 1375 1000 -a 1375 1376 1000 -a 1376 1377 1000 -a 1377 1378 1000 -a 1378 1379 1000 -a 1379 1380 1000 -a 1380 1381 1000 -a 1381 1382 1000 -a 1382 1383 1000 -a 1383 1384 1000 -a 1384 1385 1000 -a 1385 1386 1000 -a 1386 1387 1000 -a 1387 1388 1000 -a 1388 1389 1000 -a 1389 1390 1000 -a 1390 1391 1000 -a 1391 1392 1000 -a 1392 1393 1000 -a 1393 1394 1000 -a 1394 1395 1000 -a 1395 1396 1000 -a 1396 1397 1000 -a 1397 1398 1000 -a 1398 1399 1000 -a 1399 1400 1000 -a 1400 1401 1000 -a 1401 1402 1000 -a 1402 1403 1000 -a 1403 1404 1000 -a 1404 1405 1000 -a 1405 1406 1000 -a 1406 1407 1000 -a 1407 1408 1000 -a 1408 1409 1000 -a 1409 1410 1000 -a 1410 1411 1000 -a 1411 1412 1000 -a 1412 1413 1000 -a 1413 1414 1000 -a 1414 1415 1000 -a 1415 1416 1000 -a 1416 1417 1000 -a 1417 1418 1000 -a 1418 1419 1000 -a 1419 1420 1000 -a 1420 1421 1000 -a 1421 1422 1000 -a 1422 1423 1000 -a 1423 1424 1000 -a 1424 1425 1000 -a 1425 1426 1000 -a 1426 1427 1000 -a 1427 1428 1000 -a 1428 1429 1000 -a 1429 1430 1000 -a 1430 1431 1000 -a 1431 1432 1000 -a 1432 1433 1000 -a 1433 1434 1000 -a 1434 1435 1000 -a 1435 1436 1000 -a 1436 1437 1000 -a 1437 1438 1000 -a 1438 1439 1000 -a 1439 1440 1000 -a 1440 1441 1000 -a 1441 1442 1000 -a 1442 1443 1000 -a 1443 1444 1000 -a 1444 1445 1000 -a 1445 1446 1000 -a 1446 1447 1000 -a 1447 1448 1000 -a 1448 1449 1000 -a 1449 1450 1000 -a 1450 1451 1000 -a 1451 1452 1000 -a 1452 1453 1000 -a 1453 1454 1000 -a 1454 1455 1000 -a 1455 1456 1000 -a 1456 1457 1000 -a 1457 1458 1000 -a 1458 1459 1000 -a 1459 1460 1000 -a 1460 1461 1000 -a 1461 1462 1000 -a 1462 1463 1000 -a 1463 1464 1000 -a 1464 1465 1000 -a 1465 1466 1000 -a 1466 1467 1000 -a 1467 1468 1000 -a 1468 1469 1000 -a 1469 1470 1000 -a 1470 1471 1000 -a 1471 1472 1000 -a 1472 1473 1000 -a 1473 1474 1000 -a 1474 1475 1000 -a 1475 1476 1000 -a 1476 1477 1000 -a 1477 1478 1000 -a 1478 1479 1000 -a 1479 1480 1000 -a 1480 1481 1000 -a 1481 1482 1000 -a 1482 1483 1000 -a 1483 1484 1000 -a 1484 1485 1000 -a 1485 1486 1000 -a 1486 1487 1000 -a 1487 1488 1000 -a 1488 1489 1000 -a 1489 1490 1000 -a 1490 1491 1000 -a 1491 1492 1000 -a 1492 1493 1000 -a 1493 1494 1000 -a 1494 1495 1000 -a 1495 1496 1000 -a 1496 1497 1000 -a 1497 1498 1000 -a 1498 1499 1000 -a 1499 1500 1000 -a 1500 1501 1000 -a 1501 1502 1000 -a 1502 1503 1000 -a 1503 1504 1000 -a 1504 1505 1000 -a 1505 1506 1000 -a 1506 1507 1000 -a 1507 1508 1000 -a 1508 1509 1000 -a 1509 1510 1000 -a 1510 1511 1000 -a 1511 1512 1000 -a 1512 1513 1000 -a 1513 1514 1000 -a 1514 1515 1000 -a 1515 1516 1000 -a 1516 1517 1000 -a 1517 1518 1000 -a 1518 1519 1000 -a 1519 1520 1000 -a 1520 1521 1000 -a 1521 1522 1000 -a 1522 1523 1000 -a 1523 1524 1000 -a 1524 1525 1000 -a 1525 1526 1000 -a 1526 1527 1000 -a 1527 1528 1000 -a 1528 1529 1000 -a 1529 1530 1000 -a 1530 1531 1000 -a 1531 1532 1000 -a 1532 1533 1000 -a 1533 1534 1000 -a 1534 1535 1000 -a 1535 1536 1000 -a 1536 1537 1000 -a 1537 1538 1000 -a 1538 1539 1000 -a 1539 1540 1000 -a 1540 1541 1000 -a 1541 1542 1000 -a 1542 1543 1000 -a 1543 1544 1000 -a 1544 1545 1000 -a 1545 1546 1000 -a 1546 1547 1000 -a 1547 1548 1000 -a 1548 1549 1000 -a 1549 1550 1000 -a 1550 1551 1000 -a 1551 1552 1000 -a 1552 1553 1000 -a 1553 1554 1000 -a 1554 1555 1000 -a 1555 1556 1000 -a 1556 1557 1000 -a 1557 1558 1000 -a 1558 1559 1000 -a 1559 1560 1000 -a 1560 1561 1000 -a 1561 1562 1000 -a 1562 1563 1000 -a 1563 1564 1000 -a 1564 1565 1000 -a 1565 1566 1000 -a 1566 1567 1000 -a 1567 1568 1000 -a 1568 1569 1000 -a 1569 1570 1000 -a 1570 1571 1000 -a 1571 1572 1000 -a 1572 1573 1000 -a 1573 1574 1000 -a 1574 1575 1000 -a 1575 1576 1000 -a 1576 1577 1000 -a 1577 1578 1000 -a 1578 1579 1000 -a 1579 1580 1000 -a 1580 1581 1000 -a 1581 1582 1000 -a 1582 1583 1000 -a 1583 1584 1000 -a 1584 1585 1000 -a 1585 1586 1000 -a 1586 1587 1000 -a 1587 1588 1000 -a 1588 1589 1000 -a 1589 1590 1000 -a 1590 1591 1000 -a 1591 1592 1000 -a 1592 1593 1000 -a 1593 1594 1000 -a 1594 1595 1000 -a 1595 1596 1000 -a 1596 1597 1000 -a 1597 1598 1000 -a 1598 1599 1000 -a 1599 1600 1000 -a 1600 1601 1000 -a 1601 1602 1000 -a 1602 1603 1000 -a 1603 1604 1000 -a 1604 1605 1000 -a 1605 1606 1000 -a 1606 1607 1000 -a 1607 1608 1000 -a 1608 1609 1000 -a 1609 1610 1000 -a 1610 1611 1000 -a 1611 1612 1000 -a 1612 1613 1000 -a 1613 1614 1000 -a 1614 1615 1000 -a 1615 1616 1000 -a 1616 1617 1000 -a 1617 1618 1000 -a 1618 1619 1000 -a 1619 1620 1000 -a 1620 1621 1000 -a 1621 1622 1000 -a 1622 1623 1000 -a 1623 1624 1000 -a 1624 1625 1000 -a 1625 1626 1000 -a 1626 1627 1000 -a 1627 1628 1000 -a 1628 1629 1000 -a 1629 1630 1000 -a 1630 1631 1000 -a 1631 1632 1000 -a 1632 1633 1000 -a 1633 1634 1000 -a 1634 1635 1000 -a 1635 1636 1000 -a 1636 1637 1000 -a 1637 1638 1000 -a 1638 1639 1000 -a 1639 1640 1000 -a 1640 1641 1000 -a 1641 1642 1000 -a 1642 1643 1000 -a 1643 1644 1000 -a 1644 1645 1000 -a 1645 1646 1000 -a 1646 1647 1000 -a 1647 1648 1000 -a 1648 1649 1000 -a 1649 1650 1000 -a 1650 1651 1000 -a 1651 1652 1000 -a 1652 1653 1000 -a 1653 1654 1000 -a 1654 1655 1000 -a 1655 1656 1000 -a 1656 1657 1000 -a 1657 1658 1000 -a 1658 1659 1000 -a 1659 1660 1000 -a 1660 1661 1000 -a 1661 1662 1000 -a 1662 1663 1000 -a 1663 1664 1000 -a 1664 1665 1000 -a 1665 1666 1000 -a 1666 1667 1000 -a 1667 1668 1000 -a 1668 1669 1000 -a 1669 1670 1000 -a 1670 1671 1000 -a 1671 1672 1000 -a 1672 1673 1000 -a 1673 1674 1000 -a 1674 1675 1000 -a 1675 1676 1000 -a 1676 1677 1000 -a 1677 1678 1000 -a 1678 1679 1000 -a 1679 1680 1000 -a 1680 1681 1000 -a 1681 1682 1000 -a 1682 1683 1000 -a 1683 1684 1000 -a 1684 1685 1000 -a 1685 1686 1000 -a 1686 1687 1000 -a 1687 1688 1000 -a 1688 1689 1000 -a 1689 1690 1000 -a 1690 1691 1000 -a 1691 1692 1000 -a 1692 1693 1000 -a 1693 1694 1000 -a 1694 1695 1000 -a 1695 1696 1000 -a 1696 1697 1000 -a 1697 1698 1000 -a 1698 1699 1000 -a 1699 1700 1000 -a 1700 1701 1000 -a 1701 1702 1000 -a 1702 1703 1000 -a 1703 1704 1000 -a 1704 1705 1000 -a 1705 1706 1000 -a 1706 1707 1000 -a 1707 1708 1000 -a 1708 1709 1000 -a 1709 1710 1000 -a 1710 1711 1000 -a 1711 1712 1000 -a 1712 1713 1000 -a 1713 1714 1000 -a 1714 1715 1000 -a 1715 1716 1000 -a 1716 1717 1000 -a 1717 1718 1000 -a 1718 1719 1000 -a 1719 1720 1000 -a 1720 1721 1000 -a 1721 1722 1000 -a 1722 1723 1000 -a 1723 1724 1000 -a 1724 1725 1000 -a 1725 1726 1000 -a 1726 1727 1000 -a 1727 1728 1000 -a 1728 1729 1000 -a 1729 1730 1000 -a 1730 1731 1000 -a 1731 1732 1000 -a 1732 1733 1000 -a 1733 1734 1000 -a 1734 1735 1000 -a 1735 1736 1000 -a 1736 1737 1000 -a 1737 1738 1000 -a 1738 1739 1000 -a 1739 1740 1000 -a 1740 1741 1000 -a 1741 1742 1000 -a 1742 1743 1000 -a 1743 1744 1000 -a 1744 1745 1000 -a 1745 1746 1000 -a 1746 1747 1000 -a 1747 1748 1000 -a 1748 1749 1000 -a 1749 1750 1000 -a 1750 1751 1000 -a 1751 1752 1000 -a 1752 1753 1000 -a 1753 1754 1000 -a 1754 1755 1000 -a 1755 1756 1000 -a 1756 1757 1000 -a 1757 1758 1000 -a 1758 1759 1000 -a 1759 1760 1000 -a 1760 1761 1000 -a 1761 1762 1000 -a 1762 1763 1000 -a 1763 1764 1000 -a 1764 1765 1000 -a 1765 1766 1000 -a 1766 1767 1000 -a 1767 1768 1000 -a 1768 1769 1000 -a 1769 1770 1000 -a 1770 1771 1000 -a 1771 1772 1000 -a 1772 1773 1000 -a 1773 1774 1000 -a 1774 1775 1000 -a 1775 1776 1000 -a 1776 1777 1000 -a 1777 1778 1000 -a 1778 1779 1000 -a 1779 1780 1000 -a 1780 1781 1000 -a 1781 1782 1000 -a 1782 1783 1000 -a 1783 1784 1000 -a 1784 1785 1000 -a 1785 1786 1000 -a 1786 1787 1000 -a 1787 1788 1000 -a 1788 1789 1000 -a 1789 1790 1000 -a 1790 1791 1000 -a 1791 1792 1000 -a 1792 1793 1000 -a 1793 1794 1000 -a 1794 1795 1000 -a 1795 1796 1000 -a 1796 1797 1000 -a 1797 1798 1000 -a 1798 1799 1000 -a 1799 1800 1000 -a 1800 1801 1000 -a 1801 1802 1000 -a 1802 1803 1000 -a 1803 1804 1000 -a 1804 1805 1000 -a 1805 1806 1000 -a 1806 1807 1000 -a 1807 1808 1000 -a 1808 1809 1000 -a 1809 1810 1000 -a 1810 1811 1000 -a 1811 1812 1000 -a 1812 1813 1000 -a 1813 1814 1000 -a 1814 1815 1000 -a 1815 1816 1000 -a 1816 1817 1000 -a 1817 1818 1000 -a 1818 1819 1000 -a 1819 1820 1000 -a 1820 1821 1000 -a 1821 1822 1000 -a 1822 1823 1000 -a 1823 1824 1000 -a 1824 1825 1000 -a 1825 1826 1000 -a 1826 1827 1000 -a 1827 1828 1000 -a 1828 1829 1000 -a 1829 1830 1000 -a 1830 1831 1000 -a 1831 1832 1000 -a 1832 1833 1000 -a 1833 1834 1000 -a 1834 1835 1000 -a 1835 1836 1000 -a 1836 1837 1000 -a 1837 1838 1000 -a 1838 1839 1000 -a 1839 1840 1000 -a 1840 1841 1000 -a 1841 1842 1000 -a 1842 1843 1000 -a 1843 1844 1000 -a 1844 1845 1000 -a 1845 1846 1000 -a 1846 1847 1000 -a 1847 1848 1000 -a 1848 1849 1000 -a 1849 1850 1000 -a 1850 1851 1000 -a 1851 1852 1000 -a 1852 1853 1000 -a 1853 1854 1000 -a 1854 1855 1000 -a 1855 1856 1000 -a 1856 1857 1000 -a 1857 1858 1000 -a 1858 1859 1000 -a 1859 1860 1000 -a 1860 1861 1000 -a 1861 1862 1000 -a 1862 1863 1000 -a 1863 1864 1000 -a 1864 1865 1000 -a 1865 1866 1000 -a 1866 1867 1000 -a 1867 1868 1000 -a 1868 1869 1000 -a 1869 1870 1000 -a 1870 1871 1000 -a 1871 1872 1000 -a 1872 1873 1000 -a 1873 1874 1000 -a 1874 1875 1000 -a 1875 1876 1000 -a 1876 1877 1000 -a 1877 1878 1000 -a 1878 1879 1000 -a 1879 1880 1000 -a 1880 1881 1000 -a 1881 1882 1000 -a 1882 1883 1000 -a 1883 1884 1000 -a 1884 1885 1000 -a 1885 1886 1000 -a 1886 1887 1000 -a 1887 1888 1000 -a 1888 1889 1000 -a 1889 1890 1000 -a 1890 1891 1000 -a 1891 1892 1000 -a 1892 1893 1000 -a 1893 1894 1000 -a 1894 1895 1000 -a 1895 1896 1000 -a 1896 1897 1000 -a 1897 1898 1000 -a 1898 1899 1000 -a 1899 1900 1000 -a 1900 1901 1000 -a 1901 1902 1000 -a 1902 1903 1000 -a 1903 1904 1000 -a 1904 1905 1000 -a 1905 1906 1000 -a 1906 1907 1000 -a 1907 1908 1000 -a 1908 1909 1000 -a 1909 1910 1000 -a 1910 1911 1000 -a 1911 1912 1000 -a 1912 1913 1000 -a 1913 1914 1000 -a 1914 1915 1000 -a 1915 1916 1000 -a 1916 1917 1000 -a 1917 1918 1000 -a 1918 1919 1000 -a 1919 1920 1000 -a 1920 1921 1000 -a 1921 1922 1000 -a 1922 1923 1000 -a 1923 1924 1000 -a 1924 1925 1000 -a 1925 1926 1000 -a 1926 1927 1000 -a 1927 1928 1000 -a 1928 1929 1000 -a 1929 1930 1000 -a 1930 1931 1000 -a 1931 1932 1000 -a 1932 1933 1000 -a 1933 1934 1000 -a 1934 1935 1000 -a 1935 1936 1000 -a 1936 1937 1000 -a 1937 1938 1000 -a 1938 1939 1000 -a 1939 1940 1000 -a 1940 1941 1000 -a 1941 1942 1000 -a 1942 1943 1000 -a 1943 1944 1000 -a 1944 1945 1000 -a 1945 1946 1000 -a 1946 1947 1000 -a 1947 1948 1000 -a 1948 1949 1000 -a 1949 1950 1000 -a 1950 1951 1000 -a 1951 1952 1000 -a 1952 1953 1000 -a 1953 1954 1000 -a 1954 1955 1000 -a 1955 1956 1000 -a 1956 1957 1000 -a 1957 1958 1000 -a 1958 1959 1000 -a 1959 1960 1000 -a 1960 1961 1000 -a 1961 1962 1000 -a 1962 1963 1000 -a 1963 1964 1000 -a 1964 1965 1000 -a 1965 1966 1000 -a 1966 1967 1000 -a 1967 1968 1000 -a 1968 1969 1000 -a 1969 1970 1000 -a 1970 1971 1000 -a 1971 1972 1000 -a 1972 1973 1000 -a 1973 1974 1000 -a 1974 1975 1000 -a 1975 1976 1000 -a 1976 1977 1000 -a 1977 1978 1000 -a 1978 1979 1000 -a 1979 1980 1000 -a 1980 1981 1000 -a 1981 1982 1000 -a 1982 1983 1000 -a 1983 1984 1000 -a 1984 1985 1000 -a 1985 1986 1000 -a 1986 1987 1000 -a 1987 1988 1000 -a 1988 1989 1000 -a 1989 1990 1000 -a 1990 1991 1000 -a 1991 1992 1000 -a 1992 1993 1000 -a 1993 1994 1000 -a 1994 1995 1000 -a 1995 1996 1000 -a 1996 1997 1000 -a 1997 1998 1000 -a 1998 1999 1000 -a 1999 2000 1000 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/flow3.dim --- a/src/work/marci/flow3.dim Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,2002 +0,0 @@ -c LEDA maxflow problem -p max 1001 1998 -n 1 s -n 1001 t -a 1 1000 10000 -a 1000 1001 1 -a 1 999 10000 -a 999 1000 1 -a 1 998 10000 -a 998 999 1 -a 1 997 10000 -a 997 998 1 -a 1 996 10000 -a 996 997 1 -a 1 995 10000 -a 995 996 1 -a 1 994 10000 -a 994 995 1 -a 1 993 10000 -a 993 994 1 -a 1 992 10000 -a 992 993 1 -a 1 991 10000 -a 991 992 1 -a 1 990 10000 -a 990 991 1 -a 1 989 10000 -a 989 990 1 -a 1 988 10000 -a 988 989 1 -a 1 987 10000 -a 987 988 1 -a 1 986 10000 -a 986 987 1 -a 1 985 10000 -a 985 986 1 -a 1 984 10000 -a 984 985 1 -a 1 983 10000 -a 983 984 1 -a 1 982 10000 -a 982 983 1 -a 1 981 10000 -a 981 982 1 -a 1 980 10000 -a 980 981 1 -a 1 979 10000 -a 979 980 1 -a 1 978 10000 -a 978 979 1 -a 1 977 10000 -a 977 978 1 -a 1 976 10000 -a 976 977 1 -a 1 975 10000 -a 975 976 1 -a 1 974 10000 -a 974 975 1 -a 1 973 10000 -a 973 974 1 -a 1 972 10000 -a 972 973 1 -a 1 971 10000 -a 971 972 1 -a 1 970 10000 -a 970 971 1 -a 1 969 10000 -a 969 970 1 -a 1 968 10000 -a 968 969 1 -a 1 967 10000 -a 967 968 1 -a 1 966 10000 -a 966 967 1 -a 1 965 10000 -a 965 966 1 -a 1 964 10000 -a 964 965 1 -a 1 963 10000 -a 963 964 1 -a 1 962 10000 -a 962 963 1 -a 1 961 10000 -a 961 962 1 -a 1 960 10000 -a 960 961 1 -a 1 959 10000 -a 959 960 1 -a 1 958 10000 -a 958 959 1 -a 1 957 10000 -a 957 958 1 -a 1 956 10000 -a 956 957 1 -a 1 955 10000 -a 955 956 1 -a 1 954 10000 -a 954 955 1 -a 1 953 10000 -a 953 954 1 -a 1 952 10000 -a 952 953 1 -a 1 951 10000 -a 951 952 1 -a 1 950 10000 -a 950 951 1 -a 1 949 10000 -a 949 950 1 -a 1 948 10000 -a 948 949 1 -a 1 947 10000 -a 947 948 1 -a 1 946 10000 -a 946 947 1 -a 1 945 10000 -a 945 946 1 -a 1 944 10000 -a 944 945 1 -a 1 943 10000 -a 943 944 1 -a 1 942 10000 -a 942 943 1 -a 1 941 10000 -a 941 942 1 -a 1 940 10000 -a 940 941 1 -a 1 939 10000 -a 939 940 1 -a 1 938 10000 -a 938 939 1 -a 1 937 10000 -a 937 938 1 -a 1 936 10000 -a 936 937 1 -a 1 935 10000 -a 935 936 1 -a 1 934 10000 -a 934 935 1 -a 1 933 10000 -a 933 934 1 -a 1 932 10000 -a 932 933 1 -a 1 931 10000 -a 931 932 1 -a 1 930 10000 -a 930 931 1 -a 1 929 10000 -a 929 930 1 -a 1 928 10000 -a 928 929 1 -a 1 927 10000 -a 927 928 1 -a 1 926 10000 -a 926 927 1 -a 1 925 10000 -a 925 926 1 -a 1 924 10000 -a 924 925 1 -a 1 923 10000 -a 923 924 1 -a 1 922 10000 -a 922 923 1 -a 1 921 10000 -a 921 922 1 -a 1 920 10000 -a 920 921 1 -a 1 919 10000 -a 919 920 1 -a 1 918 10000 -a 918 919 1 -a 1 917 10000 -a 917 918 1 -a 1 916 10000 -a 916 917 1 -a 1 915 10000 -a 915 916 1 -a 1 914 10000 -a 914 915 1 -a 1 913 10000 -a 913 914 1 -a 1 912 10000 -a 912 913 1 -a 1 911 10000 -a 911 912 1 -a 1 910 10000 -a 910 911 1 -a 1 909 10000 -a 909 910 1 -a 1 908 10000 -a 908 909 1 -a 1 907 10000 -a 907 908 1 -a 1 906 10000 -a 906 907 1 -a 1 905 10000 -a 905 906 1 -a 1 904 10000 -a 904 905 1 -a 1 903 10000 -a 903 904 1 -a 1 902 10000 -a 902 903 1 -a 1 901 10000 -a 901 902 1 -a 1 900 10000 -a 900 901 1 -a 1 899 10000 -a 899 900 1 -a 1 898 10000 -a 898 899 1 -a 1 897 10000 -a 897 898 1 -a 1 896 10000 -a 896 897 1 -a 1 895 10000 -a 895 896 1 -a 1 894 10000 -a 894 895 1 -a 1 893 10000 -a 893 894 1 -a 1 892 10000 -a 892 893 1 -a 1 891 10000 -a 891 892 1 -a 1 890 10000 -a 890 891 1 -a 1 889 10000 -a 889 890 1 -a 1 888 10000 -a 888 889 1 -a 1 887 10000 -a 887 888 1 -a 1 886 10000 -a 886 887 1 -a 1 885 10000 -a 885 886 1 -a 1 884 10000 -a 884 885 1 -a 1 883 10000 -a 883 884 1 -a 1 882 10000 -a 882 883 1 -a 1 881 10000 -a 881 882 1 -a 1 880 10000 -a 880 881 1 -a 1 879 10000 -a 879 880 1 -a 1 878 10000 -a 878 879 1 -a 1 877 10000 -a 877 878 1 -a 1 876 10000 -a 876 877 1 -a 1 875 10000 -a 875 876 1 -a 1 874 10000 -a 874 875 1 -a 1 873 10000 -a 873 874 1 -a 1 872 10000 -a 872 873 1 -a 1 871 10000 -a 871 872 1 -a 1 870 10000 -a 870 871 1 -a 1 869 10000 -a 869 870 1 -a 1 868 10000 -a 868 869 1 -a 1 867 10000 -a 867 868 1 -a 1 866 10000 -a 866 867 1 -a 1 865 10000 -a 865 866 1 -a 1 864 10000 -a 864 865 1 -a 1 863 10000 -a 863 864 1 -a 1 862 10000 -a 862 863 1 -a 1 861 10000 -a 861 862 1 -a 1 860 10000 -a 860 861 1 -a 1 859 10000 -a 859 860 1 -a 1 858 10000 -a 858 859 1 -a 1 857 10000 -a 857 858 1 -a 1 856 10000 -a 856 857 1 -a 1 855 10000 -a 855 856 1 -a 1 854 10000 -a 854 855 1 -a 1 853 10000 -a 853 854 1 -a 1 852 10000 -a 852 853 1 -a 1 851 10000 -a 851 852 1 -a 1 850 10000 -a 850 851 1 -a 1 849 10000 -a 849 850 1 -a 1 848 10000 -a 848 849 1 -a 1 847 10000 -a 847 848 1 -a 1 846 10000 -a 846 847 1 -a 1 845 10000 -a 845 846 1 -a 1 844 10000 -a 844 845 1 -a 1 843 10000 -a 843 844 1 -a 1 842 10000 -a 842 843 1 -a 1 841 10000 -a 841 842 1 -a 1 840 10000 -a 840 841 1 -a 1 839 10000 -a 839 840 1 -a 1 838 10000 -a 838 839 1 -a 1 837 10000 -a 837 838 1 -a 1 836 10000 -a 836 837 1 -a 1 835 10000 -a 835 836 1 -a 1 834 10000 -a 834 835 1 -a 1 833 10000 -a 833 834 1 -a 1 832 10000 -a 832 833 1 -a 1 831 10000 -a 831 832 1 -a 1 830 10000 -a 830 831 1 -a 1 829 10000 -a 829 830 1 -a 1 828 10000 -a 828 829 1 -a 1 827 10000 -a 827 828 1 -a 1 826 10000 -a 826 827 1 -a 1 825 10000 -a 825 826 1 -a 1 824 10000 -a 824 825 1 -a 1 823 10000 -a 823 824 1 -a 1 822 10000 -a 822 823 1 -a 1 821 10000 -a 821 822 1 -a 1 820 10000 -a 820 821 1 -a 1 819 10000 -a 819 820 1 -a 1 818 10000 -a 818 819 1 -a 1 817 10000 -a 817 818 1 -a 1 816 10000 -a 816 817 1 -a 1 815 10000 -a 815 816 1 -a 1 814 10000 -a 814 815 1 -a 1 813 10000 -a 813 814 1 -a 1 812 10000 -a 812 813 1 -a 1 811 10000 -a 811 812 1 -a 1 810 10000 -a 810 811 1 -a 1 809 10000 -a 809 810 1 -a 1 808 10000 -a 808 809 1 -a 1 807 10000 -a 807 808 1 -a 1 806 10000 -a 806 807 1 -a 1 805 10000 -a 805 806 1 -a 1 804 10000 -a 804 805 1 -a 1 803 10000 -a 803 804 1 -a 1 802 10000 -a 802 803 1 -a 1 801 10000 -a 801 802 1 -a 1 800 10000 -a 800 801 1 -a 1 799 10000 -a 799 800 1 -a 1 798 10000 -a 798 799 1 -a 1 797 10000 -a 797 798 1 -a 1 796 10000 -a 796 797 1 -a 1 795 10000 -a 795 796 1 -a 1 794 10000 -a 794 795 1 -a 1 793 10000 -a 793 794 1 -a 1 792 10000 -a 792 793 1 -a 1 791 10000 -a 791 792 1 -a 1 790 10000 -a 790 791 1 -a 1 789 10000 -a 789 790 1 -a 1 788 10000 -a 788 789 1 -a 1 787 10000 -a 787 788 1 -a 1 786 10000 -a 786 787 1 -a 1 785 10000 -a 785 786 1 -a 1 784 10000 -a 784 785 1 -a 1 783 10000 -a 783 784 1 -a 1 782 10000 -a 782 783 1 -a 1 781 10000 -a 781 782 1 -a 1 780 10000 -a 780 781 1 -a 1 779 10000 -a 779 780 1 -a 1 778 10000 -a 778 779 1 -a 1 777 10000 -a 777 778 1 -a 1 776 10000 -a 776 777 1 -a 1 775 10000 -a 775 776 1 -a 1 774 10000 -a 774 775 1 -a 1 773 10000 -a 773 774 1 -a 1 772 10000 -a 772 773 1 -a 1 771 10000 -a 771 772 1 -a 1 770 10000 -a 770 771 1 -a 1 769 10000 -a 769 770 1 -a 1 768 10000 -a 768 769 1 -a 1 767 10000 -a 767 768 1 -a 1 766 10000 -a 766 767 1 -a 1 765 10000 -a 765 766 1 -a 1 764 10000 -a 764 765 1 -a 1 763 10000 -a 763 764 1 -a 1 762 10000 -a 762 763 1 -a 1 761 10000 -a 761 762 1 -a 1 760 10000 -a 760 761 1 -a 1 759 10000 -a 759 760 1 -a 1 758 10000 -a 758 759 1 -a 1 757 10000 -a 757 758 1 -a 1 756 10000 -a 756 757 1 -a 1 755 10000 -a 755 756 1 -a 1 754 10000 -a 754 755 1 -a 1 753 10000 -a 753 754 1 -a 1 752 10000 -a 752 753 1 -a 1 751 10000 -a 751 752 1 -a 1 750 10000 -a 750 751 1 -a 1 749 10000 -a 749 750 1 -a 1 748 10000 -a 748 749 1 -a 1 747 10000 -a 747 748 1 -a 1 746 10000 -a 746 747 1 -a 1 745 10000 -a 745 746 1 -a 1 744 10000 -a 744 745 1 -a 1 743 10000 -a 743 744 1 -a 1 742 10000 -a 742 743 1 -a 1 741 10000 -a 741 742 1 -a 1 740 10000 -a 740 741 1 -a 1 739 10000 -a 739 740 1 -a 1 738 10000 -a 738 739 1 -a 1 737 10000 -a 737 738 1 -a 1 736 10000 -a 736 737 1 -a 1 735 10000 -a 735 736 1 -a 1 734 10000 -a 734 735 1 -a 1 733 10000 -a 733 734 1 -a 1 732 10000 -a 732 733 1 -a 1 731 10000 -a 731 732 1 -a 1 730 10000 -a 730 731 1 -a 1 729 10000 -a 729 730 1 -a 1 728 10000 -a 728 729 1 -a 1 727 10000 -a 727 728 1 -a 1 726 10000 -a 726 727 1 -a 1 725 10000 -a 725 726 1 -a 1 724 10000 -a 724 725 1 -a 1 723 10000 -a 723 724 1 -a 1 722 10000 -a 722 723 1 -a 1 721 10000 -a 721 722 1 -a 1 720 10000 -a 720 721 1 -a 1 719 10000 -a 719 720 1 -a 1 718 10000 -a 718 719 1 -a 1 717 10000 -a 717 718 1 -a 1 716 10000 -a 716 717 1 -a 1 715 10000 -a 715 716 1 -a 1 714 10000 -a 714 715 1 -a 1 713 10000 -a 713 714 1 -a 1 712 10000 -a 712 713 1 -a 1 711 10000 -a 711 712 1 -a 1 710 10000 -a 710 711 1 -a 1 709 10000 -a 709 710 1 -a 1 708 10000 -a 708 709 1 -a 1 707 10000 -a 707 708 1 -a 1 706 10000 -a 706 707 1 -a 1 705 10000 -a 705 706 1 -a 1 704 10000 -a 704 705 1 -a 1 703 10000 -a 703 704 1 -a 1 702 10000 -a 702 703 1 -a 1 701 10000 -a 701 702 1 -a 1 700 10000 -a 700 701 1 -a 1 699 10000 -a 699 700 1 -a 1 698 10000 -a 698 699 1 -a 1 697 10000 -a 697 698 1 -a 1 696 10000 -a 696 697 1 -a 1 695 10000 -a 695 696 1 -a 1 694 10000 -a 694 695 1 -a 1 693 10000 -a 693 694 1 -a 1 692 10000 -a 692 693 1 -a 1 691 10000 -a 691 692 1 -a 1 690 10000 -a 690 691 1 -a 1 689 10000 -a 689 690 1 -a 1 688 10000 -a 688 689 1 -a 1 687 10000 -a 687 688 1 -a 1 686 10000 -a 686 687 1 -a 1 685 10000 -a 685 686 1 -a 1 684 10000 -a 684 685 1 -a 1 683 10000 -a 683 684 1 -a 1 682 10000 -a 682 683 1 -a 1 681 10000 -a 681 682 1 -a 1 680 10000 -a 680 681 1 -a 1 679 10000 -a 679 680 1 -a 1 678 10000 -a 678 679 1 -a 1 677 10000 -a 677 678 1 -a 1 676 10000 -a 676 677 1 -a 1 675 10000 -a 675 676 1 -a 1 674 10000 -a 674 675 1 -a 1 673 10000 -a 673 674 1 -a 1 672 10000 -a 672 673 1 -a 1 671 10000 -a 671 672 1 -a 1 670 10000 -a 670 671 1 -a 1 669 10000 -a 669 670 1 -a 1 668 10000 -a 668 669 1 -a 1 667 10000 -a 667 668 1 -a 1 666 10000 -a 666 667 1 -a 1 665 10000 -a 665 666 1 -a 1 664 10000 -a 664 665 1 -a 1 663 10000 -a 663 664 1 -a 1 662 10000 -a 662 663 1 -a 1 661 10000 -a 661 662 1 -a 1 660 10000 -a 660 661 1 -a 1 659 10000 -a 659 660 1 -a 1 658 10000 -a 658 659 1 -a 1 657 10000 -a 657 658 1 -a 1 656 10000 -a 656 657 1 -a 1 655 10000 -a 655 656 1 -a 1 654 10000 -a 654 655 1 -a 1 653 10000 -a 653 654 1 -a 1 652 10000 -a 652 653 1 -a 1 651 10000 -a 651 652 1 -a 1 650 10000 -a 650 651 1 -a 1 649 10000 -a 649 650 1 -a 1 648 10000 -a 648 649 1 -a 1 647 10000 -a 647 648 1 -a 1 646 10000 -a 646 647 1 -a 1 645 10000 -a 645 646 1 -a 1 644 10000 -a 644 645 1 -a 1 643 10000 -a 643 644 1 -a 1 642 10000 -a 642 643 1 -a 1 641 10000 -a 641 642 1 -a 1 640 10000 -a 640 641 1 -a 1 639 10000 -a 639 640 1 -a 1 638 10000 -a 638 639 1 -a 1 637 10000 -a 637 638 1 -a 1 636 10000 -a 636 637 1 -a 1 635 10000 -a 635 636 1 -a 1 634 10000 -a 634 635 1 -a 1 633 10000 -a 633 634 1 -a 1 632 10000 -a 632 633 1 -a 1 631 10000 -a 631 632 1 -a 1 630 10000 -a 630 631 1 -a 1 629 10000 -a 629 630 1 -a 1 628 10000 -a 628 629 1 -a 1 627 10000 -a 627 628 1 -a 1 626 10000 -a 626 627 1 -a 1 625 10000 -a 625 626 1 -a 1 624 10000 -a 624 625 1 -a 1 623 10000 -a 623 624 1 -a 1 622 10000 -a 622 623 1 -a 1 621 10000 -a 621 622 1 -a 1 620 10000 -a 620 621 1 -a 1 619 10000 -a 619 620 1 -a 1 618 10000 -a 618 619 1 -a 1 617 10000 -a 617 618 1 -a 1 616 10000 -a 616 617 1 -a 1 615 10000 -a 615 616 1 -a 1 614 10000 -a 614 615 1 -a 1 613 10000 -a 613 614 1 -a 1 612 10000 -a 612 613 1 -a 1 611 10000 -a 611 612 1 -a 1 610 10000 -a 610 611 1 -a 1 609 10000 -a 609 610 1 -a 1 608 10000 -a 608 609 1 -a 1 607 10000 -a 607 608 1 -a 1 606 10000 -a 606 607 1 -a 1 605 10000 -a 605 606 1 -a 1 604 10000 -a 604 605 1 -a 1 603 10000 -a 603 604 1 -a 1 602 10000 -a 602 603 1 -a 1 601 10000 -a 601 602 1 -a 1 600 10000 -a 600 601 1 -a 1 599 10000 -a 599 600 1 -a 1 598 10000 -a 598 599 1 -a 1 597 10000 -a 597 598 1 -a 1 596 10000 -a 596 597 1 -a 1 595 10000 -a 595 596 1 -a 1 594 10000 -a 594 595 1 -a 1 593 10000 -a 593 594 1 -a 1 592 10000 -a 592 593 1 -a 1 591 10000 -a 591 592 1 -a 1 590 10000 -a 590 591 1 -a 1 589 10000 -a 589 590 1 -a 1 588 10000 -a 588 589 1 -a 1 587 10000 -a 587 588 1 -a 1 586 10000 -a 586 587 1 -a 1 585 10000 -a 585 586 1 -a 1 584 10000 -a 584 585 1 -a 1 583 10000 -a 583 584 1 -a 1 582 10000 -a 582 583 1 -a 1 581 10000 -a 581 582 1 -a 1 580 10000 -a 580 581 1 -a 1 579 10000 -a 579 580 1 -a 1 578 10000 -a 578 579 1 -a 1 577 10000 -a 577 578 1 -a 1 576 10000 -a 576 577 1 -a 1 575 10000 -a 575 576 1 -a 1 574 10000 -a 574 575 1 -a 1 573 10000 -a 573 574 1 -a 1 572 10000 -a 572 573 1 -a 1 571 10000 -a 571 572 1 -a 1 570 10000 -a 570 571 1 -a 1 569 10000 -a 569 570 1 -a 1 568 10000 -a 568 569 1 -a 1 567 10000 -a 567 568 1 -a 1 566 10000 -a 566 567 1 -a 1 565 10000 -a 565 566 1 -a 1 564 10000 -a 564 565 1 -a 1 563 10000 -a 563 564 1 -a 1 562 10000 -a 562 563 1 -a 1 561 10000 -a 561 562 1 -a 1 560 10000 -a 560 561 1 -a 1 559 10000 -a 559 560 1 -a 1 558 10000 -a 558 559 1 -a 1 557 10000 -a 557 558 1 -a 1 556 10000 -a 556 557 1 -a 1 555 10000 -a 555 556 1 -a 1 554 10000 -a 554 555 1 -a 1 553 10000 -a 553 554 1 -a 1 552 10000 -a 552 553 1 -a 1 551 10000 -a 551 552 1 -a 1 550 10000 -a 550 551 1 -a 1 549 10000 -a 549 550 1 -a 1 548 10000 -a 548 549 1 -a 1 547 10000 -a 547 548 1 -a 1 546 10000 -a 546 547 1 -a 1 545 10000 -a 545 546 1 -a 1 544 10000 -a 544 545 1 -a 1 543 10000 -a 543 544 1 -a 1 542 10000 -a 542 543 1 -a 1 541 10000 -a 541 542 1 -a 1 540 10000 -a 540 541 1 -a 1 539 10000 -a 539 540 1 -a 1 538 10000 -a 538 539 1 -a 1 537 10000 -a 537 538 1 -a 1 536 10000 -a 536 537 1 -a 1 535 10000 -a 535 536 1 -a 1 534 10000 -a 534 535 1 -a 1 533 10000 -a 533 534 1 -a 1 532 10000 -a 532 533 1 -a 1 531 10000 -a 531 532 1 -a 1 530 10000 -a 530 531 1 -a 1 529 10000 -a 529 530 1 -a 1 528 10000 -a 528 529 1 -a 1 527 10000 -a 527 528 1 -a 1 526 10000 -a 526 527 1 -a 1 525 10000 -a 525 526 1 -a 1 524 10000 -a 524 525 1 -a 1 523 10000 -a 523 524 1 -a 1 522 10000 -a 522 523 1 -a 1 521 10000 -a 521 522 1 -a 1 520 10000 -a 520 521 1 -a 1 519 10000 -a 519 520 1 -a 1 518 10000 -a 518 519 1 -a 1 517 10000 -a 517 518 1 -a 1 516 10000 -a 516 517 1 -a 1 515 10000 -a 515 516 1 -a 1 514 10000 -a 514 515 1 -a 1 513 10000 -a 513 514 1 -a 1 512 10000 -a 512 513 1 -a 1 511 10000 -a 511 512 1 -a 1 510 10000 -a 510 511 1 -a 1 509 10000 -a 509 510 1 -a 1 508 10000 -a 508 509 1 -a 1 507 10000 -a 507 508 1 -a 1 506 10000 -a 506 507 1 -a 1 505 10000 -a 505 506 1 -a 1 504 10000 -a 504 505 1 -a 1 503 10000 -a 503 504 1 -a 1 502 10000 -a 502 503 1 -a 1 501 10000 -a 501 502 1 -a 1 500 10000 -a 500 501 1 -a 1 499 10000 -a 499 500 1 -a 1 498 10000 -a 498 499 1 -a 1 497 10000 -a 497 498 1 -a 1 496 10000 -a 496 497 1 -a 1 495 10000 -a 495 496 1 -a 1 494 10000 -a 494 495 1 -a 1 493 10000 -a 493 494 1 -a 1 492 10000 -a 492 493 1 -a 1 491 10000 -a 491 492 1 -a 1 490 10000 -a 490 491 1 -a 1 489 10000 -a 489 490 1 -a 1 488 10000 -a 488 489 1 -a 1 487 10000 -a 487 488 1 -a 1 486 10000 -a 486 487 1 -a 1 485 10000 -a 485 486 1 -a 1 484 10000 -a 484 485 1 -a 1 483 10000 -a 483 484 1 -a 1 482 10000 -a 482 483 1 -a 1 481 10000 -a 481 482 1 -a 1 480 10000 -a 480 481 1 -a 1 479 10000 -a 479 480 1 -a 1 478 10000 -a 478 479 1 -a 1 477 10000 -a 477 478 1 -a 1 476 10000 -a 476 477 1 -a 1 475 10000 -a 475 476 1 -a 1 474 10000 -a 474 475 1 -a 1 473 10000 -a 473 474 1 -a 1 472 10000 -a 472 473 1 -a 1 471 10000 -a 471 472 1 -a 1 470 10000 -a 470 471 1 -a 1 469 10000 -a 469 470 1 -a 1 468 10000 -a 468 469 1 -a 1 467 10000 -a 467 468 1 -a 1 466 10000 -a 466 467 1 -a 1 465 10000 -a 465 466 1 -a 1 464 10000 -a 464 465 1 -a 1 463 10000 -a 463 464 1 -a 1 462 10000 -a 462 463 1 -a 1 461 10000 -a 461 462 1 -a 1 460 10000 -a 460 461 1 -a 1 459 10000 -a 459 460 1 -a 1 458 10000 -a 458 459 1 -a 1 457 10000 -a 457 458 1 -a 1 456 10000 -a 456 457 1 -a 1 455 10000 -a 455 456 1 -a 1 454 10000 -a 454 455 1 -a 1 453 10000 -a 453 454 1 -a 1 452 10000 -a 452 453 1 -a 1 451 10000 -a 451 452 1 -a 1 450 10000 -a 450 451 1 -a 1 449 10000 -a 449 450 1 -a 1 448 10000 -a 448 449 1 -a 1 447 10000 -a 447 448 1 -a 1 446 10000 -a 446 447 1 -a 1 445 10000 -a 445 446 1 -a 1 444 10000 -a 444 445 1 -a 1 443 10000 -a 443 444 1 -a 1 442 10000 -a 442 443 1 -a 1 441 10000 -a 441 442 1 -a 1 440 10000 -a 440 441 1 -a 1 439 10000 -a 439 440 1 -a 1 438 10000 -a 438 439 1 -a 1 437 10000 -a 437 438 1 -a 1 436 10000 -a 436 437 1 -a 1 435 10000 -a 435 436 1 -a 1 434 10000 -a 434 435 1 -a 1 433 10000 -a 433 434 1 -a 1 432 10000 -a 432 433 1 -a 1 431 10000 -a 431 432 1 -a 1 430 10000 -a 430 431 1 -a 1 429 10000 -a 429 430 1 -a 1 428 10000 -a 428 429 1 -a 1 427 10000 -a 427 428 1 -a 1 426 10000 -a 426 427 1 -a 1 425 10000 -a 425 426 1 -a 1 424 10000 -a 424 425 1 -a 1 423 10000 -a 423 424 1 -a 1 422 10000 -a 422 423 1 -a 1 421 10000 -a 421 422 1 -a 1 420 10000 -a 420 421 1 -a 1 419 10000 -a 419 420 1 -a 1 418 10000 -a 418 419 1 -a 1 417 10000 -a 417 418 1 -a 1 416 10000 -a 416 417 1 -a 1 415 10000 -a 415 416 1 -a 1 414 10000 -a 414 415 1 -a 1 413 10000 -a 413 414 1 -a 1 412 10000 -a 412 413 1 -a 1 411 10000 -a 411 412 1 -a 1 410 10000 -a 410 411 1 -a 1 409 10000 -a 409 410 1 -a 1 408 10000 -a 408 409 1 -a 1 407 10000 -a 407 408 1 -a 1 406 10000 -a 406 407 1 -a 1 405 10000 -a 405 406 1 -a 1 404 10000 -a 404 405 1 -a 1 403 10000 -a 403 404 1 -a 1 402 10000 -a 402 403 1 -a 1 401 10000 -a 401 402 1 -a 1 400 10000 -a 400 401 1 -a 1 399 10000 -a 399 400 1 -a 1 398 10000 -a 398 399 1 -a 1 397 10000 -a 397 398 1 -a 1 396 10000 -a 396 397 1 -a 1 395 10000 -a 395 396 1 -a 1 394 10000 -a 394 395 1 -a 1 393 10000 -a 393 394 1 -a 1 392 10000 -a 392 393 1 -a 1 391 10000 -a 391 392 1 -a 1 390 10000 -a 390 391 1 -a 1 389 10000 -a 389 390 1 -a 1 388 10000 -a 388 389 1 -a 1 387 10000 -a 387 388 1 -a 1 386 10000 -a 386 387 1 -a 1 385 10000 -a 385 386 1 -a 1 384 10000 -a 384 385 1 -a 1 383 10000 -a 383 384 1 -a 1 382 10000 -a 382 383 1 -a 1 381 10000 -a 381 382 1 -a 1 380 10000 -a 380 381 1 -a 1 379 10000 -a 379 380 1 -a 1 378 10000 -a 378 379 1 -a 1 377 10000 -a 377 378 1 -a 1 376 10000 -a 376 377 1 -a 1 375 10000 -a 375 376 1 -a 1 374 10000 -a 374 375 1 -a 1 373 10000 -a 373 374 1 -a 1 372 10000 -a 372 373 1 -a 1 371 10000 -a 371 372 1 -a 1 370 10000 -a 370 371 1 -a 1 369 10000 -a 369 370 1 -a 1 368 10000 -a 368 369 1 -a 1 367 10000 -a 367 368 1 -a 1 366 10000 -a 366 367 1 -a 1 365 10000 -a 365 366 1 -a 1 364 10000 -a 364 365 1 -a 1 363 10000 -a 363 364 1 -a 1 362 10000 -a 362 363 1 -a 1 361 10000 -a 361 362 1 -a 1 360 10000 -a 360 361 1 -a 1 359 10000 -a 359 360 1 -a 1 358 10000 -a 358 359 1 -a 1 357 10000 -a 357 358 1 -a 1 356 10000 -a 356 357 1 -a 1 355 10000 -a 355 356 1 -a 1 354 10000 -a 354 355 1 -a 1 353 10000 -a 353 354 1 -a 1 352 10000 -a 352 353 1 -a 1 351 10000 -a 351 352 1 -a 1 350 10000 -a 350 351 1 -a 1 349 10000 -a 349 350 1 -a 1 348 10000 -a 348 349 1 -a 1 347 10000 -a 347 348 1 -a 1 346 10000 -a 346 347 1 -a 1 345 10000 -a 345 346 1 -a 1 344 10000 -a 344 345 1 -a 1 343 10000 -a 343 344 1 -a 1 342 10000 -a 342 343 1 -a 1 341 10000 -a 341 342 1 -a 1 340 10000 -a 340 341 1 -a 1 339 10000 -a 339 340 1 -a 1 338 10000 -a 338 339 1 -a 1 337 10000 -a 337 338 1 -a 1 336 10000 -a 336 337 1 -a 1 335 10000 -a 335 336 1 -a 1 334 10000 -a 334 335 1 -a 1 333 10000 -a 333 334 1 -a 1 332 10000 -a 332 333 1 -a 1 331 10000 -a 331 332 1 -a 1 330 10000 -a 330 331 1 -a 1 329 10000 -a 329 330 1 -a 1 328 10000 -a 328 329 1 -a 1 327 10000 -a 327 328 1 -a 1 326 10000 -a 326 327 1 -a 1 325 10000 -a 325 326 1 -a 1 324 10000 -a 324 325 1 -a 1 323 10000 -a 323 324 1 -a 1 322 10000 -a 322 323 1 -a 1 321 10000 -a 321 322 1 -a 1 320 10000 -a 320 321 1 -a 1 319 10000 -a 319 320 1 -a 1 318 10000 -a 318 319 1 -a 1 317 10000 -a 317 318 1 -a 1 316 10000 -a 316 317 1 -a 1 315 10000 -a 315 316 1 -a 1 314 10000 -a 314 315 1 -a 1 313 10000 -a 313 314 1 -a 1 312 10000 -a 312 313 1 -a 1 311 10000 -a 311 312 1 -a 1 310 10000 -a 310 311 1 -a 1 309 10000 -a 309 310 1 -a 1 308 10000 -a 308 309 1 -a 1 307 10000 -a 307 308 1 -a 1 306 10000 -a 306 307 1 -a 1 305 10000 -a 305 306 1 -a 1 304 10000 -a 304 305 1 -a 1 303 10000 -a 303 304 1 -a 1 302 10000 -a 302 303 1 -a 1 301 10000 -a 301 302 1 -a 1 300 10000 -a 300 301 1 -a 1 299 10000 -a 299 300 1 -a 1 298 10000 -a 298 299 1 -a 1 297 10000 -a 297 298 1 -a 1 296 10000 -a 296 297 1 -a 1 295 10000 -a 295 296 1 -a 1 294 10000 -a 294 295 1 -a 1 293 10000 -a 293 294 1 -a 1 292 10000 -a 292 293 1 -a 1 291 10000 -a 291 292 1 -a 1 290 10000 -a 290 291 1 -a 1 289 10000 -a 289 290 1 -a 1 288 10000 -a 288 289 1 -a 1 287 10000 -a 287 288 1 -a 1 286 10000 -a 286 287 1 -a 1 285 10000 -a 285 286 1 -a 1 284 10000 -a 284 285 1 -a 1 283 10000 -a 283 284 1 -a 1 282 10000 -a 282 283 1 -a 1 281 10000 -a 281 282 1 -a 1 280 10000 -a 280 281 1 -a 1 279 10000 -a 279 280 1 -a 1 278 10000 -a 278 279 1 -a 1 277 10000 -a 277 278 1 -a 1 276 10000 -a 276 277 1 -a 1 275 10000 -a 275 276 1 -a 1 274 10000 -a 274 275 1 -a 1 273 10000 -a 273 274 1 -a 1 272 10000 -a 272 273 1 -a 1 271 10000 -a 271 272 1 -a 1 270 10000 -a 270 271 1 -a 1 269 10000 -a 269 270 1 -a 1 268 10000 -a 268 269 1 -a 1 267 10000 -a 267 268 1 -a 1 266 10000 -a 266 267 1 -a 1 265 10000 -a 265 266 1 -a 1 264 10000 -a 264 265 1 -a 1 263 10000 -a 263 264 1 -a 1 262 10000 -a 262 263 1 -a 1 261 10000 -a 261 262 1 -a 1 260 10000 -a 260 261 1 -a 1 259 10000 -a 259 260 1 -a 1 258 10000 -a 258 259 1 -a 1 257 10000 -a 257 258 1 -a 1 256 10000 -a 256 257 1 -a 1 255 10000 -a 255 256 1 -a 1 254 10000 -a 254 255 1 -a 1 253 10000 -a 253 254 1 -a 1 252 10000 -a 252 253 1 -a 1 251 10000 -a 251 252 1 -a 1 250 10000 -a 250 251 1 -a 1 249 10000 -a 249 250 1 -a 1 248 10000 -a 248 249 1 -a 1 247 10000 -a 247 248 1 -a 1 246 10000 -a 246 247 1 -a 1 245 10000 -a 245 246 1 -a 1 244 10000 -a 244 245 1 -a 1 243 10000 -a 243 244 1 -a 1 242 10000 -a 242 243 1 -a 1 241 10000 -a 241 242 1 -a 1 240 10000 -a 240 241 1 -a 1 239 10000 -a 239 240 1 -a 1 238 10000 -a 238 239 1 -a 1 237 10000 -a 237 238 1 -a 1 236 10000 -a 236 237 1 -a 1 235 10000 -a 235 236 1 -a 1 234 10000 -a 234 235 1 -a 1 233 10000 -a 233 234 1 -a 1 232 10000 -a 232 233 1 -a 1 231 10000 -a 231 232 1 -a 1 230 10000 -a 230 231 1 -a 1 229 10000 -a 229 230 1 -a 1 228 10000 -a 228 229 1 -a 1 227 10000 -a 227 228 1 -a 1 226 10000 -a 226 227 1 -a 1 225 10000 -a 225 226 1 -a 1 224 10000 -a 224 225 1 -a 1 223 10000 -a 223 224 1 -a 1 222 10000 -a 222 223 1 -a 1 221 10000 -a 221 222 1 -a 1 220 10000 -a 220 221 1 -a 1 219 10000 -a 219 220 1 -a 1 218 10000 -a 218 219 1 -a 1 217 10000 -a 217 218 1 -a 1 216 10000 -a 216 217 1 -a 1 215 10000 -a 215 216 1 -a 1 214 10000 -a 214 215 1 -a 1 213 10000 -a 213 214 1 -a 1 212 10000 -a 212 213 1 -a 1 211 10000 -a 211 212 1 -a 1 210 10000 -a 210 211 1 -a 1 209 10000 -a 209 210 1 -a 1 208 10000 -a 208 209 1 -a 1 207 10000 -a 207 208 1 -a 1 206 10000 -a 206 207 1 -a 1 205 10000 -a 205 206 1 -a 1 204 10000 -a 204 205 1 -a 1 203 10000 -a 203 204 1 -a 1 202 10000 -a 202 203 1 -a 1 201 10000 -a 201 202 1 -a 1 200 10000 -a 200 201 1 -a 1 199 10000 -a 199 200 1 -a 1 198 10000 -a 198 199 1 -a 1 197 10000 -a 197 198 1 -a 1 196 10000 -a 196 197 1 -a 1 195 10000 -a 195 196 1 -a 1 194 10000 -a 194 195 1 -a 1 193 10000 -a 193 194 1 -a 1 192 10000 -a 192 193 1 -a 1 191 10000 -a 191 192 1 -a 1 190 10000 -a 190 191 1 -a 1 189 10000 -a 189 190 1 -a 1 188 10000 -a 188 189 1 -a 1 187 10000 -a 187 188 1 -a 1 186 10000 -a 186 187 1 -a 1 185 10000 -a 185 186 1 -a 1 184 10000 -a 184 185 1 -a 1 183 10000 -a 183 184 1 -a 1 182 10000 -a 182 183 1 -a 1 181 10000 -a 181 182 1 -a 1 180 10000 -a 180 181 1 -a 1 179 10000 -a 179 180 1 -a 1 178 10000 -a 178 179 1 -a 1 177 10000 -a 177 178 1 -a 1 176 10000 -a 176 177 1 -a 1 175 10000 -a 175 176 1 -a 1 174 10000 -a 174 175 1 -a 1 173 10000 -a 173 174 1 -a 1 172 10000 -a 172 173 1 -a 1 171 10000 -a 171 172 1 -a 1 170 10000 -a 170 171 1 -a 1 169 10000 -a 169 170 1 -a 1 168 10000 -a 168 169 1 -a 1 167 10000 -a 167 168 1 -a 1 166 10000 -a 166 167 1 -a 1 165 10000 -a 165 166 1 -a 1 164 10000 -a 164 165 1 -a 1 163 10000 -a 163 164 1 -a 1 162 10000 -a 162 163 1 -a 1 161 10000 -a 161 162 1 -a 1 160 10000 -a 160 161 1 -a 1 159 10000 -a 159 160 1 -a 1 158 10000 -a 158 159 1 -a 1 157 10000 -a 157 158 1 -a 1 156 10000 -a 156 157 1 -a 1 155 10000 -a 155 156 1 -a 1 154 10000 -a 154 155 1 -a 1 153 10000 -a 153 154 1 -a 1 152 10000 -a 152 153 1 -a 1 151 10000 -a 151 152 1 -a 1 150 10000 -a 150 151 1 -a 1 149 10000 -a 149 150 1 -a 1 148 10000 -a 148 149 1 -a 1 147 10000 -a 147 148 1 -a 1 146 10000 -a 146 147 1 -a 1 145 10000 -a 145 146 1 -a 1 144 10000 -a 144 145 1 -a 1 143 10000 -a 143 144 1 -a 1 142 10000 -a 142 143 1 -a 1 141 10000 -a 141 142 1 -a 1 140 10000 -a 140 141 1 -a 1 139 10000 -a 139 140 1 -a 1 138 10000 -a 138 139 1 -a 1 137 10000 -a 137 138 1 -a 1 136 10000 -a 136 137 1 -a 1 135 10000 -a 135 136 1 -a 1 134 10000 -a 134 135 1 -a 1 133 10000 -a 133 134 1 -a 1 132 10000 -a 132 133 1 -a 1 131 10000 -a 131 132 1 -a 1 130 10000 -a 130 131 1 -a 1 129 10000 -a 129 130 1 -a 1 128 10000 -a 128 129 1 -a 1 127 10000 -a 127 128 1 -a 1 126 10000 -a 126 127 1 -a 1 125 10000 -a 125 126 1 -a 1 124 10000 -a 124 125 1 -a 1 123 10000 -a 123 124 1 -a 1 122 10000 -a 122 123 1 -a 1 121 10000 -a 121 122 1 -a 1 120 10000 -a 120 121 1 -a 1 119 10000 -a 119 120 1 -a 1 118 10000 -a 118 119 1 -a 1 117 10000 -a 117 118 1 -a 1 116 10000 -a 116 117 1 -a 1 115 10000 -a 115 116 1 -a 1 114 10000 -a 114 115 1 -a 1 113 10000 -a 113 114 1 -a 1 112 10000 -a 112 113 1 -a 1 111 10000 -a 111 112 1 -a 1 110 10000 -a 110 111 1 -a 1 109 10000 -a 109 110 1 -a 1 108 10000 -a 108 109 1 -a 1 107 10000 -a 107 108 1 -a 1 106 10000 -a 106 107 1 -a 1 105 10000 -a 105 106 1 -a 1 104 10000 -a 104 105 1 -a 1 103 10000 -a 103 104 1 -a 1 102 10000 -a 102 103 1 -a 1 101 10000 -a 101 102 1 -a 1 100 10000 -a 100 101 1 -a 1 99 10000 -a 99 100 1 -a 1 98 10000 -a 98 99 1 -a 1 97 10000 -a 97 98 1 -a 1 96 10000 -a 96 97 1 -a 1 95 10000 -a 95 96 1 -a 1 94 10000 -a 94 95 1 -a 1 93 10000 -a 93 94 1 -a 1 92 10000 -a 92 93 1 -a 1 91 10000 -a 91 92 1 -a 1 90 10000 -a 90 91 1 -a 1 89 10000 -a 89 90 1 -a 1 88 10000 -a 88 89 1 -a 1 87 10000 -a 87 88 1 -a 1 86 10000 -a 86 87 1 -a 1 85 10000 -a 85 86 1 -a 1 84 10000 -a 84 85 1 -a 1 83 10000 -a 83 84 1 -a 1 82 10000 -a 82 83 1 -a 1 81 10000 -a 81 82 1 -a 1 80 10000 -a 80 81 1 -a 1 79 10000 -a 79 80 1 -a 1 78 10000 -a 78 79 1 -a 1 77 10000 -a 77 78 1 -a 1 76 10000 -a 76 77 1 -a 1 75 10000 -a 75 76 1 -a 1 74 10000 -a 74 75 1 -a 1 73 10000 -a 73 74 1 -a 1 72 10000 -a 72 73 1 -a 1 71 10000 -a 71 72 1 -a 1 70 10000 -a 70 71 1 -a 1 69 10000 -a 69 70 1 -a 1 68 10000 -a 68 69 1 -a 1 67 10000 -a 67 68 1 -a 1 66 10000 -a 66 67 1 -a 1 65 10000 -a 65 66 1 -a 1 64 10000 -a 64 65 1 -a 1 63 10000 -a 63 64 1 -a 1 62 10000 -a 62 63 1 -a 1 61 10000 -a 61 62 1 -a 1 60 10000 -a 60 61 1 -a 1 59 10000 -a 59 60 1 -a 1 58 10000 -a 58 59 1 -a 1 57 10000 -a 57 58 1 -a 1 56 10000 -a 56 57 1 -a 1 55 10000 -a 55 56 1 -a 1 54 10000 -a 54 55 1 -a 1 53 10000 -a 53 54 1 -a 1 52 10000 -a 52 53 1 -a 1 51 10000 -a 51 52 1 -a 1 50 10000 -a 50 51 1 -a 1 49 10000 -a 49 50 1 -a 1 48 10000 -a 48 49 1 -a 1 47 10000 -a 47 48 1 -a 1 46 10000 -a 46 47 1 -a 1 45 10000 -a 45 46 1 -a 1 44 10000 -a 44 45 1 -a 1 43 10000 -a 43 44 1 -a 1 42 10000 -a 42 43 1 -a 1 41 10000 -a 41 42 1 -a 1 40 10000 -a 40 41 1 -a 1 39 10000 -a 39 40 1 -a 1 38 10000 -a 38 39 1 -a 1 37 10000 -a 37 38 1 -a 1 36 10000 -a 36 37 1 -a 1 35 10000 -a 35 36 1 -a 1 34 10000 -a 34 35 1 -a 1 33 10000 -a 33 34 1 -a 1 32 10000 -a 32 33 1 -a 1 31 10000 -a 31 32 1 -a 1 30 10000 -a 30 31 1 -a 1 29 10000 -a 29 30 1 -a 1 28 10000 -a 28 29 1 -a 1 27 10000 -a 27 28 1 -a 1 26 10000 -a 26 27 1 -a 1 25 10000 -a 25 26 1 -a 1 24 10000 -a 24 25 1 -a 1 23 10000 -a 23 24 1 -a 1 22 10000 -a 22 23 1 -a 1 21 10000 -a 21 22 1 -a 1 20 10000 -a 20 21 1 -a 1 19 10000 -a 19 20 1 -a 1 18 10000 -a 18 19 1 -a 1 17 10000 -a 17 18 1 -a 1 16 10000 -a 16 17 1 -a 1 15 10000 -a 15 16 1 -a 1 14 10000 -a 14 15 1 -a 1 13 10000 -a 13 14 1 -a 1 12 10000 -a 12 13 1 -a 1 11 10000 -a 11 12 1 -a 1 10 10000 -a 10 11 1 -a 1 9 10000 -a 9 10 1 -a 1 8 10000 -a 8 9 1 -a 1 7 10000 -a 7 8 1 -a 1 6 10000 -a 6 7 1 -a 1 5 10000 -a 5 6 1 -a 1 4 10000 -a 4 5 1 -a 1 3 10000 -a 3 4 1 -a 1 2 10000 -a 2 3 1 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/for_each_macros.h --- a/src/work/marci/for_each_macros.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,175 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_FOR_EACH_MACROS_H -#define LEMON_FOR_EACH_MACROS_H - -// /// \ingroup gwrappers -/// \file -/// \brief Iteration macros. -/// -/// This file contains several macros which make easier writting -/// for cycles in LEMON using LEMON iterators. -/// -/// \author Marton Makai - -namespace lemon { - - /// This macro provides a comfortable interface for iterating with LEMON - /// iterators. - /// \code - /// Graph g; - /// ... - /// Graph::NodeIt n; - /// h_for_glob(n, g) { - /// ... - /// } - /// Graph::EdgeIt e; - /// h_for_glob(e, g) { - /// ... - /// } - /// \endcode - /// Note that the iterated variables \c n and \c e are global ones. -#define h_for_glob(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) - -/// \deprecated -#define FOR_EACH_GLOB(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) - - /// This macro provides a comfortable interface for iterating with LEMON - /// iterators. - /// \code - /// Graph g; - /// ... - /// Graph::Node v; - /// Graph::OutEdgeIt e; - /// h_for_inc_glob(e, g, v) { - /// ... - /// } - /// typedef BipartiteGraph BGraph; - /// BGraph h; - /// ... - /// BGraph::ClassNodeIt n; - /// h_for_inc_glob(BGraph::ClassNodeIt, n, h, h.S_CLASS) { - /// ... - /// } - /// \endcode - /// Note that iterated variables \c e and \c n are global ones. -#define h_for_inc_glob(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) - -/// \deprecated -#define FOR_EACH_INC_GLOB(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) - -/// \deprecated -//#define FOR_EACH_EDGE_GLOB(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) -/// \deprecated -//#define FOR_EACH_NODE_GLOB(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) -/// \deprecated -//#define FOR_EACH_INEDGE_GLOB(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) -/// \deprecated -//#define FOR_EACH_OUTEDGE_GLOB(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) - -// template -// It loopFirst(const Graph& g) const { -// It e; g.first(e); return e; -// } - -// template -// It loopFirst(const Graph& g, const Node& v) const { -// It e; g.first(e, v); return e; -// } - -// template -// typename Graph::NodeIt loopFirstNode(const Graph& g) const { -// typename Graph::NodeIt e; g.first(e); return e; -// } -// template -// typename Graph::EdgeIt loopFirstEdge(const Graph& g) const { -// typename Graph::EdgeIt e; g.first(e); return e; -// } -// template -// typename Graph::OutEdgeIt -// loopFirstOutEdge(const Graph& g, const Node& n) const { -// typename Graph::OutEdgeIt e; g.first(e, n); return e; -// } -// template -// typename Graph::InEdgeIt -// loopFirstIn Edge(const Graph& g, const Node& n) const { -// typename Graph::InEdgeIt e; g.first(e, n); return e; -// } - -//FIXME ezt hogy a gorcsbe birja levezetni. Csak ugy leveszi a const-ot?? - template - It loopFirst(const It&, const Graph& g) { - It e; g.first(e); return e; - } - - template - It loopFirst(const It&, const Graph& g, const Node& v) { - It e; g.first(e, v); return e; - } - -// template -// typename Graph::NodeIt loopFirstNode(const Graph& g) const { -// typename Graph::NodeIt e; g.first(e); return e; -// } -// template -// typename Graph::EdgeIt loopFirstEdge(const Graph& g) const { -// typename Graph::EdgeIt e; g.first(e); return e; -// } -// template -// typename Graph::OutEdgeIt -// loopFirstOutEdge(const Graph& g, const Node& n) const { -// typename Graph::OutEdgeIt e; g.first(e, n); return e; -// } -// template -// typename Graph::InEdgeIt -// loopFirstIn Edge(const Graph& g, const Node& n) const { -// typename Graph::InEdgeIt e; g.first(e, n); return e; -// } - - /// This macro provides a comfortable interface for iterating with LEMON - /// iterators. - /// \code - /// Graph g; - /// ... - /// h_for(Graph::NodeIt, n, g) { - /// ... - /// } - /// h_for(Graph::EdgeIt, e, g) { - /// ... - /// } - /// \endcode - /// Note that the iterated variables \c n and \c e are local ones. -#define h_for(Ittype, e, g) for(Ittype e=loopFirst(Ittype(), (g)); (g).valid(e); (g).next(e)) - -/// \deprecated -#define FOR_EACH_LOC(Ittype, e, g) for(Ittype e=loopFirst(Ittype(), (g)); (g).valid(e); (g).next(e)) - - /// This macro provides a comfortable interface for iterating with LEMON - /// iterators. - /// \code - /// Graph g; - /// ... - /// Graph::Node v; - /// h_for_inc(Graph::OutEdgeIt, e, g, v) { - /// ... - /// } - /// typedef BipartiteGraph BGraph; - /// BGraph h; - /// ... - /// h_for_inc(BGraph::ClassNodeIt, n, h, h.S_CLASS) { - /// ... - /// } - /// \endcode - /// Note that the iterated variables \c e and \c n are local ones. -#define h_for_inc(Ittype, e, g, v) for(Ittype e=loopFirst(Ittype(), (g), (v)); (g).valid(e); (g).next(e)) - -/// \deprecated -#define FOR_EACH_INC_LOC(Ittype, e, g, v) for(Ittype e=loopFirst(Ittype(), (g), (v)); (g).valid(e); (g).next(e)) - -// #define FOR_EACH_EDGE_LOC(e, g) ezt nem tom hogy kell for((g).first((e)); (g).valid((e)); (g).next((e))) -// #define FOR_EACH_NODE_LOC(e, g) for((g).first((e)); (g).valid((e)); (g).next((e))) -// #define FOR_EACH_INEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) -// #define FOR_EACH_OUTEDGE_LOC(e, g, v) for((g).first((e), (v)); (g).valid((e)); (g).next((e))) - -} //namespace lemon - -#endif //LEMON_FOR_EACH_MACROS_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/graph_concept.h --- a/src/work/marci/graph_concept.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,494 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_GRAPH_H -#define LEMON_GRAPH_H - -///\file -///\brief Declaration of GraphConcept. - -#include - -namespace lemon { - - /// @defgroup empty_graph The GraphConcept class - /// @{ - - /// An empty graph class. - - /// This class provides all the common features of a graph structure, - /// however completely without implementations and real data structures - /// behind the interface. - /// All graph algorithms should compile with this class, but it will not - /// run properly, of course. - /// - /// It can be used for checking the interface compatibility, - /// or it can serve as a skeleton of a new graph structure. - /// - /// Also, you will find here the full documentation of a certain graph - /// feature, the documentation of a real graph imlementation - /// like @ref ListGraph or - /// @ref SmartGraph will just refer to this structure. - class GraphConcept - { - public: - /// Defalult constructor. - GraphConcept() { } - - /// \brief Copy consructor. - /// - /// \todo It is not clear, what we expect from a copy constructor. - /// E.g. How to assign the nodes/edges to each other? What about maps? - GraphConcept(const GraphConcept&) { } - - /// \brief The base type of the node iterators. - /// - /// This is the base type of each node iterators, - /// thus each kind of node iterator will convert to this. - /// Sometimes it is said to be a trivial iterator. - class Node { - public: - /// @warning The default constructor sets the iterator - /// to an undefined value. - Node() { } //FIXME - - // /// Copy constructor. - // Node(const Node&) { } - - /// \brief Invalid constructor \& conversion. - /// - /// This constructor initializes the iterator to be invalid. - /// \sa Invalid for more details. - Node(const Invalid&) { } - - /// Two iterators are equal if and only if they point to the - /// same object or both are invalid. - bool operator==(Node n) const { return true; } - - /// \sa \ref operator==(Node n) - /// - bool operator!=(Node n) const { return true; } - - bool operator<(Node n) const { return true; } - }; - - /// The base type of the edge iterators. - class Edge { - public: - /// @warning The default constructor sets the iterator - /// to an undefined value. - Edge() { } //FIXME - - // /// Copy constructor. - // Edge(const Edge&) { } - - /// Initialize the iterator to be invalid - Edge(const Invalid&) { } - /// Two iterators are equal if and only if they point to the - /// same object or both are invalid. - bool operator==(Edge n) const { return true; } - bool operator!=(Edge n) const { return true; } - bool operator<(Edge n) const { return true; } - }; - - // class SymEdgeIt : public Edge {}; - - - // SymEdgeIt &first(SymEdgeIt &, Node) const { return i;} - -// Node getNext(Node) const {} -// InEdgeIt getNext(InEdgeIt) const {} -// OutEdgeIt getNext(OutEdgeIt) const {} -// //SymEdgeIt getNext(SymEdgeIt) const {} -// EdgeIt getNext(EdgeIt) const {} - - //SymEdgeIt &next(SymEdgeIt &) const {} - - - /// Gives back the target node of an edge. - Node target(const Edge&) const { return INVALID; } - /// Gives back the source node of an edge. - Node source(const Edge&) const { return INVALID; } - - // Node aNode(SymEdgeIt) const {} - // Node bNode(SymEdgeIt) const {} - - /// \brief Checks if a node iterator is valid - /// - /// \todo Maybe, it would be better if iterator converted to - /// bool directly, as Jacint prefers. - bool valid(const Node&) const { return true; } - /// \brief Checks if an edge iterator is valid - /// - /// \todo Maybe, it would be better if iterator converted to - /// bool directly, as Jacint prefers. - bool valid(const Edge&) const { return true; } - - /// \brief Gives back the \e id of a node. - /// - /// \warning Not all graph structures provide this feature. - /// - int id(const Node&) const { return 0; } - /// \brief Gives back the \e id of an edge. - /// - /// \warning Not all graph structures provide this feature. - /// - int id(const Edge&) const { return 0; } - - //void setInvalid(Node &) const {}; - //void setInvalid(Edge &) const {}; - - /// \brief Add a new node to the graph. - /// - /// \return the new node. - Node addNode() { return INVALID; } - /// \brief Add a new edge to the graph. - /// - /// Add a new edge to the graph with source node \c source - /// and target node \c target. - /// \return the new edge. - Edge addEdge(const Node& source, const Node& target) { return INVALID; } - - /// \brief Resets the graph. - /// - /// This function deletes all edges and nodes of the graph. - /// It also frees the memory allocated to store them. - /// \todo What happens with the maps? - void clear() { } - - /// Read/write/reference map of the nodes to type \c T. - - /// Read/write/reference map of the nodes to type \c T. - /// \sa MemoryMapConcept - /// \todo We may need copy constructor - /// \todo We may need conversion from other nodetype - /// \todo We may need operator= - /// \warning Making maps that can handle bool type (NodeMap) - /// needs extra attention! - - template class NodeMap - { - public: - typedef T Value; - typedef Node Key; - - NodeMap(const GraphConcept& g) { } - NodeMap(const GraphConcept& g, T t) { } - - template NodeMap(const NodeMap& m) { } - - /// Sets the value of a node. - - /// Sets the value associated with node \c i to the value \c t. - /// - void set(Node i, T t) {} - /// Gets the value of a node. - T get(Node i) const {return *(T*)0;} //FIXME: Is it necessary - T &operator[](Node i) {return *(T*)0;} - const T &operator[](Node i) const {return *(T*)0;} - - /// Updates the map if the graph has been changed - - /// \todo Do we need this? - /// - void update() { } - //void update(T a) { } //FIXME: Is it necessary - }; - - ///Read/write/reference map of the edges to type \c T. - - /// Read/write/reference map of the edges to type \c T. - /// It behaves exactly in the same way as \ref NodeMap. - /// \sa NodeMap - /// \sa MemoryMapConcept - /// \todo We may need copy constructor - /// \todo We may need conversion from other edgetype - /// \todo We may need operator= - template class EdgeMap - { - public: - typedef T Value; - typedef Edge Key; - - EdgeMap(const GraphConcept& g) {} - EdgeMap(const GraphConcept& g, T t) {} - - void set(Edge i, T t) {} - T get(Edge i) const {return *(T*)0;} - T &operator[](Edge i) {return *(T*)0;} - - void update() { } - //void update(T a) { } //FIXME: Is it necessary - }; - }; - - - /// \brief Node-iterable graph concept. - /// - /// A graph class which provides functions to - /// iterate on its nodes. - class NodeIterableGraphConcept : virtual public GraphConcept - { - public: - - /// \brief This iterator goes trough the nodes of the graph. - /// - /// This iterator goes trough the \e nodes of the graph. - /// Its usage is quite simple, for example you can count the number - /// of nodes in graph \c g of type \c Graph as follows. - /// \code - /// int count=0; - /// for(Graph::NodeIt n(g); g.valid(n); g.next(n)) ++count; - /// \endcode - class NodeIt : public Node { - public: - /// @warning The default constructor sets the iterator. - /// to an undefined value. - NodeIt() { } - // /// Copy constructor - //NodeIt(const NodeIt& n) { } - /// Initialize the iterator to be invalid. - NodeIt(const Invalid&) { } - /// \brief This constructor sets the iterator to first node. - /// - /// This constructor set the iterator to the first - /// node of the graph \c g. - /// - ///@param g the graph - NodeIt(const GraphConcept& g) { } - }; - - /// The first node. - NodeIt &first(NodeIt &i) const { return i; } - - /// Go to the next node. - NodeIt &next(NodeIt &i) const { return i; } - }; - - - /// \brief Edge-iterable graph concept. - /// - /// A graph class which provides functions to - /// iterate on its edges. - class EdgeIterableGraphConcept : virtual public GraphConcept - { - public: - - /// \brief This iterator goes trough the edges of the graph. - /// - /// This iterator goes trough the \e edges of the graph. - /// Its usage is quite simple, for example you can count the number - /// of edges in graph \c g of type \c Graph as follows. - /// \code - /// int count=0; - /// for(Graph::EdgeIt e(g); g.valid(e); g.next(e)) ++count; - /// \endcode - class EdgeIt : public Edge { - public: - /// @warning The default constructor sets the iterator. - /// to an undefined value. - EdgeIt() { } - // /// Copy constructor - // EdgeIt(const EdgeIt&) { } - /// Initialize the iterator to be invalid. - EdgeIt(const Invalid&) { } - /// \brief This constructor sets the iterator to first edge. - /// - /// This constructor set the iterator to the first - /// edge of the graph \c g. - /// - ///@param g the graph - EdgeIt(const GraphConcept& g) { } - }; - - /// The first edge. - EdgeIt &first(EdgeIt &i) const { return i; } - - /// Go to the next edge. - EdgeIt &next(EdgeIt &i) const { return i; } - }; - - - /// \brief Out-edge-iterable graph concept. - /// - /// A graph class which provides functions to - /// iterate on out-edges of any node. - class OutEdgeIterableGraphConcept : virtual public GraphConcept - { - public: - - /// \brief This iterator goes trough the outgoing edges of a node. - /// - /// This iterator goes trough the \e outgoing edges of a certain node - /// of a graph. - /// Its usage is quite simple, for example you can count the number - /// of outgoing edges of a node \c n - /// in graph \c g of type \c Graph as follows. - /// \code - /// int count=0; - /// for(Graph::OutEdgeIt e(g, n); g.valid(e); g.next(e)) ++count; - /// \endcode - class OutEdgeIt : public Edge { - public: - /// @warning The default constructor sets the iterator. - /// to an undefined value. - OutEdgeIt() { } - /// Initialize the iterator to be invalid. - OutEdgeIt(const Invalid&) { } - /// \brief This constructor sets the iterator to first outgoing edge. - /// - /// This constructor set the iterator to the first outgoing edge of - /// node - ///@param n the node - ///@param g the graph - OutEdgeIt(const GraphConcept& g, const Node& n) { } - }; - - /// The first outgoing edge. - OutEdgeIt &first(OutEdgeIt &i, const Node& n) const { return i; } - - /// Go to the next outgoing edge. - OutEdgeIt &next(OutEdgeIt &i) const { return i; } - - Node aNode(const OutEdgeIt&) const { return Node(); } - Node bNode(const OutEdgeIt&) const { return Node(); } - }; - - - /// \brief In-edge-iterable graph concept. - /// - /// A Graph class which provides a function to - /// iterate on in-edges of any node. - class InEdgeIterableGraphConcept : virtual public GraphConcept - { - public: - - /// \brief This iterator goes trough the incoming edges of a node. - /// - /// This iterator goes trough the \e incoming edges of a certain node - /// of a graph. - /// Its usage is quite simple, for example you can count the number - /// of incoming edges of a node \c n - /// in graph \c g of type \c Graph as follows. - /// \code - /// int count=0; - /// for(Graph::InEdgeIt e(g, n); g.valid(e); g.next(e)) ++count; - /// \endcode - class InEdgeIt : public Edge { - public: - /// @warning The default constructor sets the iterator - /// to an undefined value. - InEdgeIt() { } - /// Initialize the iterator to be invalid - InEdgeIt(const Invalid&) { } - /// \brief This constructor sets the iterator to first incomig edge. - /// - /// This constructor set the iterator to the first incomig edge of - /// node - ///@param n the node - ///@param g the graph - InEdgeIt(const GraphConcept& g, const Node& n) { } - }; - - /// The first incoming edge. - InEdgeIt &first(InEdgeIt &i, const Node& n) const { return i; } - - /// Go to the next incoming edge. - InEdgeIt &next(InEdgeIt &i) const { return i; } - - Node aNode(const InEdgeIt&) const { return Node(); } - Node bNode(const InEdgeIt&) const { return Node(); } - }; - - - /// \brief Node-erasable graph concept. - /// - /// A graph class which provides a function to - /// delete any of its nodes. - class NodeErasableGraphConcept : virtual public GraphConcept - { - public: - /// Deletes a node. - void erase(const Node& n) { } - }; - - - /// \brief Edge-erasable graph concept. - /// - /// A graph class which provides a function to delete any - /// of its edges. - class EdgeErasableGraphConcept : virtual public GraphConcept - { - public: - /// Deletes a node. - void erase(const Edge& n) { } - }; - - - /// \brief An empty graph class which provides a function to - /// get the number of its nodes. - /// - /// This graph class provides a function for getting the number of its - /// nodes. - /// Clearly, for physical graph structures it can be expected to have such a - /// function. For wrappers or graphs which are given in an implicit way, - /// the implementation can be circumstantial, that is why this composes a - /// separate concept. - class NodeCountingGraphConcept : virtual public GraphConcept - { - public: - /// Returns the number of nodes. - int nodeNum() const { return 0; } - }; - - - /// \brief An empty graph class which provides a function to - /// get the number of its edges. - /// - /// This graph class provides a function for getting the number of its - /// edges. - /// Clearly, for physical graph structures it can be expected to have such a - /// function. For wrappers or graphs which are given in an implicit way, - /// the implementation can be circumstantial, that is why this composes a - /// separate concept. - class EdgeCountingGraphConcept : virtual public GraphConcept - { - public: - /// Returns the number of edges. - int edgeNum() const { return 0; } - }; - - class FullFeatureGraphConcept : virtual public NodeIterableGraphConcept, - virtual public EdgeIterableGraphConcept, - virtual public OutEdgeIterableGraphConcept, - virtual public InEdgeIterableGraphConcept, - virtual public NodeCountingGraphConcept { - public: - FullFeatureGraphConcept() { } - using EdgeIterableGraphConcept::next; - using NodeIterableGraphConcept::next; - using OutEdgeIterableGraphConcept::next; - using InEdgeIterableGraphConcept::next; - }; - - /// @} - -} //namespace lemon - - - -// class EmptyBipGraph : public Graph Concept -// { -// class ANode {}; -// class BNode {}; - -// ANode &next(ANode &) {} -// BNode &next(BNode &) {} - -// ANode &getFirst(ANode &) const {} -// BNode &getFirst(BNode &) const {} - -// enum NodeClass { A = 0, B = 1 }; -// NodeClass getClass(Node n) {} - -// } - -#endif // LEMON_GRAPH_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/graph_wrapper_time.cc --- a/src/work/marci/graph_wrapper_time.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,71 +0,0 @@ -// -*- c++ -*- - -// Use a DIMACS max flow file as follows: -// graph_wrapper_time dimacs_max_flow_file - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace lemon; - -using std::cout; -using std::endl; - -template -void timeTest(std::string str, Graph& g) { - g.clear(); - typename Graph::Node s; - typename Graph::Node t; - typedef typename Graph::template EdgeMap FlowMap; - FlowMap cap(g); - FlowMap flow(g); - std::ifstream is(str.c_str()); - readDimacs(is, g, cap, s, t); - Timer ts; - ts.reset(); - - typedef Preflow MyPreflow; - MyPreflow max_flow(g, s, t, cap, flow); - max_flow.run(MyPreflow::NO_FLOW); - cout << "flow value: " << max_flow.flowValue() << endl; - cout << ts << endl; -} - -int main(int, char** argv) { - std::string in=argv[1]; - - typedef ListGraph Graph; - Graph g; - timeTest(in, g); - typedef GraphWrapper Graph1; - Graph1 g1(g); - timeTest(in, g1); - typedef GraphWrapper Graph2; - Graph2 g2(g1); - timeTest(in, g2); - typedef GraphWrapper Graph3; - Graph3 g3(g2); - timeTest(in, g3); - typedef GraphWrapper Graph4; - Graph4 g4(g3); - timeTest(in, g4); - typedef GraphWrapper Graph5; - Graph5 g5(g4); - timeTest(in, g5); - typedef GraphWrapper Graph6; - Graph6 g6(g5); - timeTest(in, g6); - typedef GraphWrapper Graph7; - Graph7 g7(g6); - timeTest(in, g7); - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/gw_vs_not.cc --- a/src/work/marci/gw_vs_not.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,179 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -#include -#include -#include -#include -#include - -using namespace lemon; - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo < dimacs_max_flow_file - -int main(int, char **) { - - typedef ListGraph MutableGraph; - //typedef SmartGraph Graph; - typedef ListGraph Graph; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph G; - Node s, t; - Graph::EdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - - { - typedef TrivGraphWrapper GW; - GW gw(G); - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - Timer ts; - GW::EdgeMap flow(gw); - MaxFlow, EMW > max_flow_test(gw, s, t, flow, cw); - int i; - - { - std::cout << "edmonds karp demo (physical blocking flow augmentation)..." << std::endl; - for (GW::EdgeIt e(gw); gw.valid(e); gw.next(e)) flow.set(e, 0); - ts.reset(); - - i=0; - while (max_flow_test.augmentOnBlockingFlow()) { ++i; } - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "edmonds karp demo (physical blocking flow 1 augmentation)..." << std::endl; - for (GW::EdgeIt e(gw); gw.valid(e); gw.next(e)) flow.set(e, 0); - ts.reset(); - - i=0; - while (max_flow_test.augmentOnBlockingFlow1()) { ++i; } - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "edmonds karp demo (on-the-fly blocking flow augmentation)..." << std::endl; - for (GW::EdgeIt e(gw); gw.valid(e); gw.next(e)) flow.set(e, 0); - ts.reset(); - - i=0; - while (max_flow_test.augmentOnBlockingFlow2()) { ++i; } - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "edmonds karp demo (on-the-fly shortest path augmentation)..." << std::endl; - for (GW::EdgeIt e(gw); gw.valid(e); gw.next(e)) flow.set(e, 0); - ts.reset(); - - i=0; - while (max_flow_test.augmentOnShortestPath()) { ++i; } - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - } - - - - - { - typedef TrivGraphWrapper GW1; - GW1 gw1(G); - typedef TrivGraphWrapper GW2; - GW2 gw2(gw1); - typedef TrivGraphWrapper GW3; - GW3 gw3(gw2); - typedef TrivGraphWrapper GW4; - GW4 gw4(gw3); - typedef TrivGraphWrapper GW5; - GW5 gw5(gw4); - typedef TrivGraphWrapper GW6; - GW6 gw6(gw5); - typedef TrivGraphWrapper GW7; - GW7 gw7(gw6); - typedef TrivGraphWrapper GW8; - GW8 gw8(gw7); - typedef TrivGraphWrapper GW9; - GW9 gw9(gw8); - typedef TrivGraphWrapper GW; - GW gw(gw9); - typedef GW::EdgeMapWrapper< Graph::EdgeMap, int > EMW; - EMW cw(cap); - Timer ts; - GW::EdgeMap flow(gw); - MaxFlow, EMW > max_flow_test(gw, s, t, flow, cw); - int i; - - { - std::cout << "edmonds karp demo (physical blocking flow augmentation)..." << std::endl; - for (GW::EdgeIt e(gw); gw.valid(e); gw.next(e)) flow.set(e, 0); - ts.reset(); - - i=0; - while (max_flow_test.augmentOnBlockingFlow()) { ++i; } - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "edmonds karp demo (physical blocking flow 1 augmentation)..." << std::endl; - for (GW::EdgeIt e(gw); gw.valid(e); gw.next(e)) flow.set(e, 0); - ts.reset(); - - i=0; - while (max_flow_test.augmentOnBlockingFlow1()) { ++i; } - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "edmonds karp demo (on-the-fly blocking flow augmentation)..." << std::endl; - for (GW::EdgeIt e(gw); gw.valid(e); gw.next(e)) flow.set(e, 0); - ts.reset(); - - i=0; - while (max_flow_test.augmentOnBlockingFlow2()) { ++i; } - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "edmonds karp demo (on-the-fly shortest path augmentation)..." << std::endl; - for (GW::EdgeIt e(gw); gw.valid(e); gw.next(e)) flow.set(e, 0); - ts.reset(); - - i=0; - while (max_flow_test.augmentOnShortestPath()) { ++i; } - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - } - - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/iterator_bfs_demo.cc --- a/src/work/marci/iterator_bfs_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,388 +0,0 @@ -// -*- c++ -*- -#include -#include -#include - -#include -#include -#include -#include - -using namespace lemon; - -using std::cout; -using std::endl; -using std::string; - -template -class EdgeNameMap { - Graph& graph; - NodeNameMap& node_name_map; -public: - EdgeNameMap(Graph& _graph, NodeNameMap& _node_name_map) : - graph(_graph), node_name_map(_node_name_map) { } - string operator[](typename Graph::Edge e) const { - return - (node_name_map[graph.source(e)]+"->"+node_name_map[graph.target(e)]); - } -}; - -int main (int, char*[]) -{ - typedef SmartGraph Graph; - //typedef SageGraph Graph; - - typedef Graph::Node Node; - typedef Graph::Edge Edge; - - Graph G; - - Node s=G.addNode(); - Node v1=G.addNode(); - Node v2=G.addNode(); - Node v3=G.addNode(); - Node v4=G.addNode(); - Node t=G.addNode(); - - Graph::NodeMap node_name(G); - node_name.set(s, "s"); - node_name.set(v1, "v1"); - node_name.set(v2, "v2"); - node_name.set(v3, "v3"); - node_name.set(v4, "v4"); - node_name.set(t, "t"); - - G.addEdge(s, v1); - G.addEdge(s, v2); - G.addEdge(v1, v2); - G.addEdge(v2, v1); - G.addEdge(v1, v3); - G.addEdge(v3, v2); - G.addEdge(v2, v4); - G.addEdge(v4, v3); - G.addEdge(v3, t); - G.addEdge(v4, t); - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - { - EdgeNameMap< Graph, Graph::NodeMap > edge_name(G, node_name); - - cout << "bfs and dfs iterator demo on the directed graph" << endl; - for(Graph::NodeIt n(G); n!=INVALID; ++n) { - cout << node_name[n] << ": "; - cout << "out edges: "; - for(Graph::OutEdgeIt e(G, n); e!=INVALID; ++e) - cout << edge_name[e] << " "; - cout << "in edges: "; - for(Graph::InEdgeIt e(G, n); e!=INVALID; ++e) - cout << edge_name[e] << " "; - cout << endl; - } - - cout << "bfs from s ..." << endl; - BfsIterator< Graph, Graph::NodeMap > bfs(G); - bfs.pushAndSetReached(s); - while (!bfs.finished()) { - //cout << "edge: "; - if (Graph::Edge(bfs)!=INVALID) { - cout << edge_name[bfs] << /*endl*/", " << - node_name[G.source(bfs)] << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name[G.target(bfs)] << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name[bfs.source()] << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from s ..." << endl; - DfsIterator< Graph, Graph::NodeMap > dfs(G); - dfs.pushAndSetReached(s); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (Graph::Edge(dfs)!=INVALID) { - cout << edge_name[dfs] << /*endl*/", " << - node_name[G.source(dfs)] << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name[G.target(dfs)] << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name[dfs.source()] << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - } - } - - - { - typedef RevGraphWrapper GW; - GW gw(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(gw, node_name); - - cout << "bfs and dfs iterator demo on the reversed directed graph" << endl; - for(GW::NodeIt n(gw); n!=INVALID; ++n) { - cout << node_name[GW::Node(n)] << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e(gw, n); e!=INVALID; ++e) - cout << edge_name[e] << " "; - cout << "in edges: "; - for(GW::InEdgeIt e(gw, n); e!=INVALID; ++e) - cout << edge_name[e] << " "; - cout << endl; - } - - cout << "bfs from t ..." << endl; - BfsIterator< GW, GW::NodeMap > bfs(gw); - bfs.pushAndSetReached(t); - while (!bfs.finished()) { - //cout << "edge: "; - if (GW::Edge(bfs)!=INVALID) { - cout << edge_name[GW::Edge(bfs)] << /*endl*/", " << - node_name[gw.source(bfs)] << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name[gw.target(bfs)] << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name[bfs.source()] << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from t ..." << endl; - DfsIterator< GW, GW::NodeMap > dfs(gw); - dfs.pushAndSetReached(t); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (GW::Edge(dfs)!=INVALID) { - cout << edge_name[GW::Edge(dfs)] << /*endl*/", " << - node_name[gw.source(dfs)] << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name[gw.target(dfs)] << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name[dfs.source()] << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - } - } - -// { -// typedef UndirGraphWrapper GW; -// GW gw(G); - -// EdgeNameMap< GW, Graph::NodeMap > edge_name(gw, node_name); - -// cout << "bfs and dfs iterator demo on the undirected graph" << endl; -// for(GW::NodeIt n(gw); gw.valid(n); gw.next(n)) { -// cout << node_name[GW::Node(n)] << ": "; -// cout << "out edges: "; -// for(GW::OutEdgeIt e(gw, n); gw.valid(e); gw.next(e)) -// cout << edge_name[e] << " "; -// cout << "in edges: "; -// for(GW::InEdgeIt e(gw, n); gw.valid(e); gw.next(e)) -// cout << edge_name[e] << " "; -// cout << endl; -// } -// // for(GW::EdgeIt e=gw.first(); gw.valid(e); gw.next(e)) { -// // cout << edge_name.get(e) << " "; -// // } -// // cout << endl; - -// cout << "bfs from t ..." << endl; -// BfsIterator< GW, GW::NodeMap > bfs(gw); -// bfs.pushAndSetReached(t); -// while (!bfs.finished()) { -// //cout << "edge: "; -// if (gw.valid(GW::OutEdgeIt(bfs))) { -// cout << edge_name[GW::OutEdgeIt(bfs)] << /*endl*/", " << -// node_name[gw.aNode(bfs)] << -// (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << -// node_name[gw.bNode(bfs)] << -// (bfs.isBNodeNewlyReached() ? ": is newly reached." : -// ": is not newly reached."); -// } else { -// cout << "invalid" << /*endl*/", " << -// node_name[bfs.aNode()] << -// (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - -// "invalid."; -// } -// cout << endl; -// ++bfs; -// } - -// cout << " /--> -------------> "<< endl; -// cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; -// cout << " / | | / /-> \\ "<< endl; -// cout << " / | | / | ^ \\ "<< endl; -// cout << "s | | / | | \\-> t "<< endl; -// cout << " \\ | | / | | /-> "<< endl; -// cout << " \\ | --/ / | | / "<< endl; -// cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; -// cout << " \\--> -------------> "<< endl; - -// cout << "dfs from t ..." << endl; -// DfsIterator< GW, GW::NodeMap > dfs(gw); -// dfs.pushAndSetReached(t); -// while (!dfs.finished()) { -// ++dfs; -// //cout << "edge: "; -// if (gw.valid(GW::OutEdgeIt(dfs))) { -// cout << edge_name[GW::OutEdgeIt(dfs)] << /*endl*/", " << -// node_name[gw.aNode(dfs)] << -// (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << -// node_name[gw.bNode(dfs)] << -// (dfs.isBNodeNewlyReached() ? ": is newly reached." : -// ": is not newly reached."); -// } else { -// cout << "invalid" << /*endl*/", " << -// node_name[dfs.aNode()] << -// (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - -// "invalid."; -// } -// cout << endl; -// } -// } - - - - { - typedef BidirGraphWrapper GW; - GW gw(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(gw, node_name); - - cout << "bfs and dfs iterator demo on the bidirected graph" << endl; -// for(GW::EdgeIt e(gw); e!=INVALID; ++e) { -// cout << node_name[gw.source(e)] << "->" << node_name[gw.target(e)] << " "; -// } - for(GW::NodeIt n(gw); n!=INVALID; ++n) { - cout << node_name[GW::Node(n)] << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e(gw, n); e!=INVALID; ++e) - cout << edge_name[e] << " "; - cout << "in edges: "; - for(GW::InEdgeIt e(gw, n); e!=INVALID; ++e) - cout << edge_name[e] << " "; - cout << endl; - } -// for(GW::EdgeIt e=gw.first(); gw.valid(e); gw.next(e)) { -// cout << edge_name.get(e) << " "; -// } -// cout << endl; - - cout << "bfs from t ..." << endl; - BfsIterator< GW, GW::NodeMap > bfs(gw); - bfs.pushAndSetReached(t); - while (!bfs.finished()) { - //cout << "edge: "; - if (GW::Edge(bfs)!=INVALID) { - cout << edge_name[GW::Edge(bfs)] << /*endl*/", " << - node_name[gw.source(bfs)] << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name[gw.target(bfs)] << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name[bfs.source()] << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from t ..." << endl; - DfsIterator< GW, GW::NodeMap > dfs(gw); - dfs.pushAndSetReached(t); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (GW::Edge(dfs)!=INVALID) { - cout << edge_name[GW::Edge(dfs)] << /*endl*/", " << - node_name[gw.source(dfs)] << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - node_name[gw.target(dfs)] << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - node_name[dfs.source()] << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - - "invalid."; - } - cout << endl; - } - } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/leda/bipartite_matching_comparison.cc --- a/src/work/marci/leda/bipartite_matching_comparison.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,152 +0,0 @@ -// -*- c++ -*- -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -//#include -//#include -#include -#include -#include -#include -#include -#include - -using std::cin; -using std::cout; -using std::endl; - -using namespace lemon; - -int main() { - //for leda graph - leda::graph lg; - //lg.make_undirected(); - typedef LedaGraphWrapper Graph; - Graph g(lg); - - //for UndirSageGraph - //typedef UndirSageGraph Graph; - //Graph g; - - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - - std::vector s_nodes; - std::vector t_nodes; - - int a; - cout << "number of nodes in the first color class="; - cin >> a; - int b; - cout << "number of nodes in the second color class="; - cin >> b; - int m; - cout << "number of edges="; - cin >> m; - int k; - cout << "A bipartite graph is a random group graph if the color classes \nA and B are partitiones to A_0, A_1, ..., A_{k-1} and B_0, B_1, ..., B_{k-1} \nas equally as possible \nand the edges from A_i goes to A_{i-1 mod k} and A_{i+1 mod k}.\n"; - cout << "number of groups in LEDA random group graph="; - cin >> k; - cout << endl; - - leda_list lS; - leda_list lT; - random_bigraph(lg, a, b, m, lS, lT, k); - - Graph::NodeMap ref_map(g, -1); - IterableBoolMap< Graph::NodeMap > bipartite_map(ref_map); - - //generating leda random group graph - leda_node ln; - forall(ln, lS) bipartite_map.insert(ln, false); - forall(ln, lT) bipartite_map.insert(ln, true); - - //making bipartite graph - typedef BipartiteGraphWrapper BGW; - BGW bgw(g, bipartite_map); - - - //st-wrapper - typedef stBipartiteGraphWrapper stGW; - stGW stgw(bgw); - ConstMap const1map(1); - stGW::EdgeMap flow(stgw); - - Timer ts; - - ts.reset(); - FOR_EACH_LOC(stGW::EdgeIt, e, stgw) flow.set(e, 0); - MaxFlow, stGW::EdgeMap > - max_flow_test(stgw, stgw.S_NODE, stgw.T_NODE, const1map, flow/*, true*/); - max_flow_test.run(); - cout << "LEMON max matching algorithm based on preflow." << endl - << "Size of matching: " - << max_flow_test.flowValue() << endl; - cout << "elapsed time: " << ts << endl << endl; - - ts.reset(); - leda_list ml=MAX_CARD_BIPARTITE_MATCHING(lg); - cout << "LEDA max matching algorithm." << endl - << "Size of matching: " - << ml.size() << endl; - cout << "elapsed time: " << ts << endl << endl; - -// ts.reset(); -// FOR_EACH_LOC(stGW::EdgeIt, e, stgw) flow.set(e, 0); -// typedef SageGraph MutableGraph; -// while (max_flow_test.augmentOnBlockingFlow()) { } -// cout << "LEMON max matching algorithm based on blocking flow augmentation." -// << endl << "Matching size: " -// << max_flow_test.flowValue() << endl; -// cout << "elapsed time: " << ts << endl << endl; - - { - SageGraph hg; - SageGraph::Node s=hg.addNode(); - SageGraph::Node t=hg.addNode(); - BGW::NodeMap b_s_nodes(bgw); - BGW::NodeMap b_t_nodes(bgw); - - FOR_EACH_INC_LOC(BGW::ClassNodeIt, n, bgw, BGW::S_CLASS) { - b_s_nodes.set(n, hg.addNode()); - hg.addEdge(s, b_s_nodes[n]); - } - FOR_EACH_INC_LOC(BGW::ClassNodeIt, n, bgw, BGW::T_CLASS) { - b_t_nodes.set(n, hg.addNode()); - hg.addEdge(b_t_nodes[n], t); - } - - FOR_EACH_LOC(BGW::EdgeIt, e, bgw) - hg.addEdge(b_s_nodes[bgw.source(e)], b_t_nodes[bgw.target(e)]); - - ConstMap cm(1); - SageGraph::EdgeMap flow(hg); //0 - - Timer ts; - - ts.reset(); - MaxFlow, - SageGraph::EdgeMap > - max_flow_test(hg, s, t, cm, flow); - max_flow_test.run(); - cout << "LEMON max matching algorithm on SageGraph by copying the graph, based on preflow." - << endl - << "Size of matching: " - << max_flow_test.flowValue() << endl; - cout << "elapsed time: " << ts << endl << endl; - } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/leda/bipartite_matching_leda.cc --- a/src/work/marci/leda/bipartite_matching_leda.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,131 +0,0 @@ -// -*- c++ -*- -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -//#include -//#include -#include -#include -#include -#include -#include -#include - -/** - * Inicializalja a veletlenszamgeneratort. - * Figyelem, ez nem jo igazi random szamokhoz, - * erre ne bizzad a titkaidat! - */ -void random_init() -{ - unsigned int seed = getpid(); - seed |= seed << 15; - seed ^= time(0); - - srand(seed); -} - -/** - * Egy veletlen int-et ad vissza 0 es m-1 kozott. - */ -int random(int m) -{ - return int( double(m) * rand() / (RAND_MAX + 1.0) ); -} - -using namespace lemon; - -int main() { - //for leda graph - leda::graph lg; - //lg.make_undirected(); - typedef LedaGraphWrapper Graph; - Graph g(lg); - - //for UndirSageGraph - //typedef UndirSageGraph Graph; - //Graph g; - - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - - std::vector s_nodes; - std::vector t_nodes; - - int a; - std::cout << "number of nodes in the first color class="; - std::cin >> a; - int b; - std::cout << "number of nodes in the second color class="; - std::cin >> b; - int m; - std::cout << "number of edges="; - std::cin >> m; - - - for (int i=0; i ref_map(g, -1); - - IterableBoolMap< Graph::NodeMap > bipartite_map(ref_map); - for (int i=0; i BGW; - BGW bgw(g, bipartite_map); - - BGW::NodeMap dbyj(bgw); - BGW::EdgeMap dbyxcj(bgw); - - typedef stBipartiteGraphWrapper stGW; - stGW stgw(bgw); - ConstMap const1map(1); - - Timer ts; - stGW::EdgeMap flow(stgw); - MaxFlow, stGW::EdgeMap > - max_flow_test(stgw, stgw.S_NODE, stgw.T_NODE, const1map, flow); - - ts.reset(); - FOR_EACH_LOC(stGW::EdgeIt, e, stgw) flow.set(e, 0); -// while (max_flow_test.augmentOnShortestPath()) { } - typedef SageGraph MutableGraph; -// while (max_flow_test.augmentOnBlockingFlow1()) { -// while (max_flow_test.augmentOnBlockingFlow2()) { -// std::cout << max_flow_test.flowValue() << std::endl; -// } - max_flow_test.run(); - std::cout << "max flow value: " << max_flow_test.flowValue() << std::endl; - std::cout << "elapsed time: " << ts << std::endl; - - ts.reset(); - FOR_EACH_LOC(stGW::EdgeIt, e, stgw) flow.set(e, 0); - max_flow_test.run(); - std::cout << "pre flow value: " << max_flow_test.flowValue() << std::endl; - std::cout << "elapsed time: " << ts << std::endl; - - ts.reset(); - leda_list ml=MAX_CARD_BIPARTITE_MATCHING(lg); - std::cout << "leda matching value: " << ml.size() << std::endl; - std::cout << "elapsed time: " << ts << std::endl; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/leda/bipartite_matching_leda_gen.cc --- a/src/work/marci/leda/bipartite_matching_leda_gen.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,138 +0,0 @@ -// -*- c++ -*- -#include -#include -#include -#include - -#include -#include -#include -#include - -#include -#include -//#include -//#include -#include -#include -#include -#include -#include -#include -#include - -/** - * Inicializalja a veletlenszamgeneratort. - * Figyelem, ez nem jo igazi random szamokhoz, - * erre ne bizzad a titkaidat! - */ -void random_init() -{ - unsigned int seed = getpid(); - seed |= seed << 15; - seed ^= time(0); - - srand(seed); -} - -/** - * Egy veletlen int-et ad vissza 0 es m-1 kozott. - */ -int random(int m) -{ - return int( double(m) * rand() / (RAND_MAX + 1.0) ); -} - -using namespace lemon; - -int main() { - //for leda graph - leda::graph lg; - //lg.make_undirected(); - typedef LedaGraphWrapper Graph; - Graph g(lg); - - //for UndirSageGraph - //typedef UndirSageGraph Graph; - //Graph g; - - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - - std::vector s_nodes; - std::vector t_nodes; - - int a; - std::cout << "number of nodes in the first color class="; - std::cin >> a; - int b; - std::cout << "number of nodes in the second color class="; - std::cin >> b; - int m; - std::cout << "number of edges="; - std::cin >> m; - int k; - std::cout << "A bipartite graph is a random group graph if the color classes \nA and B are partitiones to A_0, A_1, ..., A_{k-1} and B_0, B_1, ..., B_{k-1} \nas equally as possible \nand the edges from A_i goes to A_{i-1 mod k} and A_{i+1 mod k}.\n"; - std::cout << "number of groups in LEDA random group graph="; - std::cin >> k; - std::cout << std::endl; - - leda_list lS; - leda_list lT; - random_bigraph(lg, a, b, m, lS, lT, k); - - Graph::NodeMap ref_map(g, -1); - IterableBoolMap< Graph::NodeMap > bipartite_map(ref_map); - - //generating leda random group graph - leda_node ln; - forall(ln, lS) bipartite_map.insert(ln, false); - forall(ln, lT) bipartite_map.insert(ln, true); - - //making bipartite graph - typedef BipartiteGraphWrapper BGW; - BGW bgw(g, bipartite_map); - - - //st-wrapper - typedef stBipartiteGraphWrapper stGW; - stGW stgw(bgw); - ConstMap const1map(1); - stGW::EdgeMap flow(stgw); - - Timer ts; - - ts.reset(); - FOR_EACH_LOC(stGW::EdgeIt, e, stgw) flow.set(e, 0); - MaxFlow, stGW::EdgeMap > - max_flow_test(stgw, stgw.S_NODE, stgw.T_NODE, const1map, flow/*, true*/); - max_flow_test.run(); - std::cout << "LEMON max matching algorithm based on preflow." << std::endl - << "Size of matching: " - << max_flow_test.flowValue() << std::endl; - std::cout << "elapsed time: " << ts << std::endl << std::endl; - - ts.reset(); - leda_list ml=MAX_CARD_BIPARTITE_MATCHING(lg); - std::cout << "LEDA max matching algorithm." << std::endl - << "Size of matching: " - << ml.size() << std::endl; - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "\n"; - - ts.reset(); - FOR_EACH_LOC(stGW::EdgeIt, e, stgw) flow.set(e, 0); - typedef SageGraph MutableGraph; - AugmentingFlow, stGW::EdgeMap > - max_flow_test_1(stgw, stgw.S_NODE, stgw.T_NODE, const1map, flow/*, true*/); - while (max_flow_test_1.augmentOnBlockingFlow()) { } - std::cout << "LEMON max matching algorithm based on blocking flow augmentation." - << std::endl << "Matching size: " - << max_flow_test_1.flowValue() << std::endl; - std::cout << "elapsed time: " << ts << std::endl; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/leda/leda_graph_wrapper.h --- a/src/work/marci/leda/leda_graph_wrapper.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,384 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_LEDA_GRAPH_WRAPPER_H -#define LEMON_LEDA_GRAPH_WRAPPER_H - -#include -#include -#include -#include -#include -//#include -//#include - -//#if defined(LEDA_NAMESPACE) -//using namespace leda; -//#endif - -#include - -namespace lemon { - - /// \brief A graph wrapper structure for wrapping LEDA graphs in LEMON. - /// - /// This graph wrapper class wraps LEDA graphs and LEDA parametrized graphs - /// to satisfy LEMON graph concepts. - /// Then the generic LEMON algorithms and wrappers can be used - /// with LEDA graphs. - /// \ingroup gwrapper - template - class LedaGraphWrapper - { - protected: - Graph* l_graph; - LedaGraphWrapper() : l_graph(0) { } - void setGraph(Graph& _l_graph) { l_graph=&_l_graph; } - public: - - /// Constructor for wrapping LEDA graphs. - LedaGraphWrapper(Graph& _l_graph) : l_graph(&_l_graph) { } - /// Copy constructor - LedaGraphWrapper(const LedaGraphWrapper &g) : l_graph(g.l_graph) { } - - template class NodeMap; - template class EdgeMap; - template class NodeMapWrapper; - template class EdgeMapWrapper; - - class Node; - class NodeIt; - class Edge; - class EdgeIt; - class OutEdgeIt; - class InEdgeIt; - - /// Trivial node-iterator - class Node { - friend class LedaGraphWrapper; - //friend class Edge; - friend class EdgeIt; - friend class InEdgeIt; - friend class OutEdgeIt; - protected: - template friend class NodeMap; - leda_node l_n; - public: //FIXME - Node(leda_node _l_n) : l_n(_l_n) { } - public: - /// @warning The default constructor sets the iterator - /// to an undefined value. - Node() { } //FIXME - /// Initialize the iterator to be invalid - Node(Invalid) : l_n(0) { } - //Node(const Node &) {} - bool operator==(Node n) const { return l_n==n.l_n; } //FIXME - bool operator!=(Node n) const { return l_n!=n.l_n; } //FIXME - operator leda_node () { return l_n; } - }; - - /// This iterator goes through each node. - class NodeIt : public Node { - public: - /// @warning The default constructor sets the iterator - /// to an undefined value. - NodeIt() { } //FIXME - /// Initialize the iterator to be invalid - NodeIt(Invalid i) : Node(i) { } - /// Sets the iterator to the first node of \c G. - NodeIt(const LedaGraphWrapper &G) : Node(G.l_graph->first_node()) { } - //NodeIt(const NodeIt &) {} //FIXME - }; - - /// Trivial edge-iterator. - class Edge { - friend class LedaGraphWrapper; - protected: - template friend class EdgeMap; - leda_edge l_e; - public: //FIXME - Edge(leda_edge _l_e) : l_e(_l_e) { } - public: - /// @warning The default constructor sets the iterator - /// to an undefined value. - Edge() { } //FIXME - /// Initialize the iterator to be invalid - Edge(Invalid) : l_e(0) { } - //Edge(const Edge &) {} - bool operator==(Edge e) const { return l_e==e.l_e; } //FIXME - bool operator!=(Edge e) const { return l_e!=e.l_e; } //FIXME - operator leda_edge () { return l_e; } - }; - - /// This iterator goes trought the outgoing edges of a certain node. - class OutEdgeIt : public Edge { - public: - /// @warning The default constructor sets the iterator - /// to an undefined value. - OutEdgeIt() { } - /// Initialize the iterator to be invalid - OutEdgeIt(Invalid i) : Edge(i) { } - /// This constructor sets the iterator to first outgoing edge. - - /// This constructor set the iterator to the first outgoing edge of - /// node - ///@param n the node - ///@param G the graph - OutEdgeIt(const LedaGraphWrapper & G, Node n) : Edge(G.l_graph->first_adj_edge(n.l_n)) { } - }; - - /// This iterator goes trought the incoming edges of a certain node. - class InEdgeIt : public Edge { - public: - /// @warning The default constructor sets the iterator - /// to an undefined value. - InEdgeIt() { } - /// Initialize the iterator to be invalid - InEdgeIt(Invalid i) : Edge(i) { } - InEdgeIt(const LedaGraphWrapper & G, Node n) : Edge(G.l_graph->first_in_edge(n.l_n)) { } - }; - - // class SymEdgeIt : public Edge {}; - - /// This iterator goes trought the edges of the graph. - class EdgeIt : public Edge { - public: - /// @warning The default constructor sets the iterator - /// to an undefined value. - EdgeIt() { } - /// Initialize the iterator to be invalid - EdgeIt(Invalid i) : Edge(i) { } - EdgeIt(const LedaGraphWrapper & G) : Edge(G.l_graph->first_edge()) { } - }; - - /// First node of the graph. - /// - /// \post \c i and the return value will be the first node. - /// - NodeIt &first(NodeIt &i) const { i=NodeIt(*this); return i; } - - /// The first outgoing edge. - InEdgeIt &first(InEdgeIt &i, Node n) const { - i=InEdgeIt(*this, n); - return i; - } - /// The first incoming edge. - OutEdgeIt &first(OutEdgeIt &i, Node n) const { - i=OutEdgeIt(*this, n); - return i; - } - // SymEdgeIt &first(SymEdgeIt &, Node) const { return i;} - /// The first edge of the graph. - EdgeIt &first(EdgeIt &i) const { - i=EdgeIt(*this); - return i; } - -// Node getNext(Node) const {} -// InEdgeIt getNext(InEdgeIt) const {} -// OutEdgeIt getNext(OutEdgeIt) const {} -// //SymEdgeIt getNext(SymEdgeIt) const {} -// EdgeIt getNext(EdgeIt) const {} - - /// Go to the next node. - NodeIt &next(NodeIt &i) const { - i.l_n=l_graph->succ_node(i.l_n); - return i; - } - /// Go to the next incoming edge. - InEdgeIt &next(InEdgeIt &i) const { - i.l_e=l_graph->in_succ(i.l_e); - return i; - } - /// Go to the next outgoing edge. - OutEdgeIt &next(OutEdgeIt &i) const { - i.l_e=l_graph->adj_succ(i.l_e); - return i; - } - //SymEdgeIt &next(SymEdgeIt &) const {} - /// Go to the next edge. - EdgeIt &next(EdgeIt &i) const { - i.l_e=l_graph->succ_edge(i.l_e); - return i; - } - -// template< typename It > -// It first() const { -// It e; -// first(e); -// return e; -// } - -// template< typename It > -// It first(Node v) const { -// It e; -// first(e, v); -// return e; -// } - - ///Gives back the target node of an edge. - Node target(Edge e) const { - return Node(l_graph->target(e.l_e)); - } - ///Gives back the source node of an edge. - Node source(Edge e) const { - return Node(l_graph->source(e.l_e)); - } - - Node aNode(InEdgeIt e) const { return target(e); } - Node aNode(OutEdgeIt e) const { return source(e); } - // Node aNode(SymEdgeIt) const {} - - Node bNode(InEdgeIt e) const { return source(e); } - Node bNode(OutEdgeIt e) const { return target(e); } - // Node bNode(SymEdgeIt) const {} - - /// Checks if a node iterator is valid - bool valid(Node n) const { return n.l_n; } - /// Checks if an edge iterator is valid - bool valid(Edge e) const { return e.l_e; } - - ///Gives back the \e id of a node. - int id(Node n) const { return n.l_n->id(); } - ///Gives back the \e id of an edge. - int id(Edge e) const { return e.l_e->id(); } - - //void setInvalid(Node &) const {}; - //void setInvalid(Edge &) const {}; - - Node addNode() const { return Node(l_graph->new_node()); } - Edge addEdge(Node source, Node target) const { - return Edge(l_graph->new_edge(source.l_n, target.l_n)); - } - - void erase(Node n) const { l_graph->del_node(n.l_n); } - void erase(Edge e) const { l_graph->del_edge(e.l_e); } - - void clear() const { l_graph->clear(); } - - int nodeNum() const { return l_graph->number_of_nodes(); } - int edgeNum() const { return l_graph->number_of_edges(); } - - /// Read/write map from the nodes to type \c T. - template class NodeMap - { - leda_node_map leda_stuff; - public: - typedef T Value; - typedef Node Key; - - NodeMap(const LedaGraphWrapper &G) : leda_stuff(*(G.l_graph)) {} - NodeMap(const LedaGraphWrapper &G, T t) : leda_stuff(*(G.l_graph), t) {} - - void set(Node i, T t) { leda_stuff[i.l_n]=t; } - T get(Node i) const { return leda_stuff[i.l_n]; } //FIXME: Is it necessary - T &operator[](Node i) { return leda_stuff[i.l_n]; } - const T &operator[](Node i) const { return leda_stuff[i.l_n]; } - - void update() { /*leda_stuff.init(leda_stuff.get_graph());*/ } - //void update(T a) { leda_stuff.init(leda_stuff.get_graph()/**(G.l_graph)*/, a); } //FIXME: Is it necessary - }; - - /// Read/write map from the edges to type \c T. - template class EdgeMap - { - leda_edge_map leda_stuff; - public: - typedef T Value; - typedef Edge Key; - - EdgeMap(const LedaGraphWrapper &G) : leda_stuff(*(G.l_graph)) {} - EdgeMap(const LedaGraphWrapper &G, T t) : leda_stuff(*(G.l_graph), t) {} - - void set(Edge i, T t) { leda_stuff[i.l_e]=t; } - T get(Edge i) const { return leda_stuff[i.l_e]; } //FIXME: Is it necessary - T &operator[](Edge i) { return leda_stuff[i.l_e]; } - const T &operator[](Edge i) const { return leda_stuff[i.l_e]; } - - void update() { /*leda_stuff.init(leda_stuff.get_graph());*/ } - //void update(T a) { leda_stuff.init(leda_stuff.get_graph()/**(G.l_graph)*/, a); } //FIXME: Is it necessary - }; - - - /// This class is to wrap existing - /// LEDA node-maps to LEMON ones. - template class NodeMapWrapper - { - leda_node_array* leda_stuff; - public: - typedef T Value; - typedef Node Key; - - NodeMapWrapper(leda_node_array& _leda_stuff) : - leda_stuff(&_leda_stuff) { } - //NodeMap(leda_node_map& &G, T t) : leda_stuff(*(G.l_graph), t) {} - - void set(Node i, T t) { (*leda_stuff)[i.l_n]=t; } - //T get(Node i) const { return (*leda_stuff)[i.l_n]; } //FIXME: Is it necessary - T &operator[](Node i) { return (*leda_stuff)[i.l_n]; } - const T &operator[](Node i) const { return (*leda_stuff)[i.l_n]; } - - void update() { /*leda_stuff.init(leda_stuff.get_graph());*/ } - //void update(T a) { leda_stuff.init(leda_stuff.get_graph()/**(G.l_graph)*/, a); } //FIXME: Is it necessary - }; - - /// This class is to wrap existing - /// LEDA edge-maps to LEMON ones. - template class EdgeMapWrapper - { - leda_edge_array* leda_stuff; - public: - typedef T Value; - typedef Edge Key; - - EdgeMapWrapper(leda_edge_array& _leda_stuff) : - leda_stuff(_leda_stuff) { } - //EdgeMap(const LedaGraphWrapper &G, T t) : leda_stuff(*(G.l_graph), t) {} - - void set(Edge i, T t) { (*leda_stuff)[i.l_e]=t; } - //T get(Edge i) const { return (*leda_stuff)[i.l_e]; } //FIXME: Is it necessary - T &operator[](Edge i) { return (*leda_stuff)[i.l_e]; } - const T &operator[](Edge i) const { return (*leda_stuff)[i.l_e]; } - - void update() { /*leda_stuff.init(leda_stuff.get_graph());*/ } - //void update(T a) { leda_stuff.init(leda_stuff.get_graph()/**(G.l_graph)*/, a); } //FIXME: Is it necessary - }; - - /// This class is used for access node-data of - /// LEDA parametrized graphs. - template - class NodeDataMap : public NodeMapWrapper - { - public: - NodeDataMap(LedaGraphWrapper& LGW) : - NodeMapWrapper(*(LGW._g_graph).node_data()) { } - }; - - /// This class is used for access edge-data of - /// LEDA parametrized graphs. - template - class EdgeDataMap : public EdgeMapWrapper - { - public: - EdgeDataMap(LedaGraphWrapper& LGW) : - EdgeMapWrapper(*(LGW._g_graph).edge_data()) { } - }; - - }; - - - /// \brief LEDA graph template. - /// - /// This graph stucture uses LEDA graphs for physical storage. - /// \ingroup graphs - template - class LedaGraph : public LedaGraphWrapper { - typedef LedaGraphWrapper Parent; - protected: - Graph gr; - public: - LedaGraph() { - Parent::setGraph(gr); - } - }; - -} //namespace lemon - -#endif // LEMON_LEDA_GRAPH_WRAPPER_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/leda/makefile --- a/src/work/marci/leda/makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,52 +0,0 @@ -CXX2 = g++-2.95 -CXX3=$(CXX) -BOOSTROOT ?= /home/marci/boost -INCLUDEDIRS ?= -I. -I../.. -I../../{marci,jacint,alpar,klao,akos,athos} -I$(LEDAROOT)/incl -I../../.. -LDFLAGS = -L$(LEDAROOT) -lG -lL -lm - -BINARIES = bipartite_matching_leda bipartite_matching_leda_gen bipartite_matching_comparison - -include ../../makefile - -leda_graph_demo.o: - $(CXX3) -Wall -O -I.. -I../alpar -I$(LEDAROOT)/incl -I. -c leda_graph_demo.cc - -leda_graph_demo: leda_graph_demo.o - $(CXX3) -Wall -O -L$(LEDAROOT) -o leda_graph_demo leda_graph_demo.o -lG -lL -lm - -max_bipartite_matching_demo.o: - $(CXX3) $(CXXFLAGS) -I$(LEDAROOT)/incl -c max_bipartite_matching_demo.cc - -max_bipartite_matching_demo: max_bipartite_matching_demo.o - $(CXX3) $(CXXFLAGS) -L$(LEDAROOT) -o max_bipartite_matching_demo max_bipartite_matching_demo.o -lG -lL -lm - -leda_bfs_dfs.o: - $(CXX3) -Wall -O -I.. -I../alpar -I$(LEDAROOT)/incl -I. -c leda_bfs_dfs.cc - -leda_bfs_dfs: leda_bfs_dfs.o - $(CXX3) -Wall -O -L$(LEDAROOT) -o leda_bfs_dfs leda_bfs_dfs.o -lG -lL -lm - -gw_vs_not: - $(CXX3) $(CXXFLAGS) -o gw_vs_not gw_vs_not.cc - -edmonds_karp_demo_alpar: - $(CXX3) $(CXXFLAGS) -I. -I.. -I../alpar -o edmonds_karp_demo_alpar edmonds_karp_demo_alpar.cc - -preflow_demo_leda: - $(CXX2) -W -Wall -03 -DLEDA_PREFIX -I. -I$(LEDAROOT)/incl -L$(LEDAROOT) -o preflow_demo_leda preflow_demo_leda.cc -lP -lm -lL -lG - -preflow_demo_leda_uj: - $(CXX3) -Wall -O3 -I$(LEDAROOT)/incl -I. -L$(LEDAROOT) -o preflow_demo_leda_uj preflow_demo_leda_uj.cc -lG -lL -lm - -preflow_demo_boost: - $(CXX2) -ftemplate-depth-30 -O3 -I. -I/home/marci/boost -o preflow_demo_boost preflow_demo_boost.cc - -edmonds_karp_demo_boost: - $(CXX2) -ftemplate-depth-30 -O3 -I. -I/home/marci/boost -o edmonds_karp_demo_boost edmonds_karp_demo_boost.cc - -preflow_demo_jacint: - $(CXX3) $(CXXFLAGS) -I. -I.. -I../jacint -o preflow_demo_jacint preflow_demo_jacint.cc - -preflow_demo_athos: - $(CXX3) $(CXXFLAGS) -I. -I.. -I../athos -o preflow_demo_athos preflow_demo_athos.cc - diff -r ee5959aa4410 -r c280de819a73 src/work/marci/leda/max_bipartite_matching_demo.cc --- a/src/work/marci/leda/max_bipartite_matching_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,218 +0,0 @@ -// -*- c++ -*- -#include -#include -#include -#include - -#include -#include -#include - -#include -#include -#include -#include -#include - -/** - * Inicializalja a veletlenszamgeneratort. - * Figyelem, ez nem jo igazi random szamokhoz, - * erre ne bizzad a titkaidat! - */ -void random_init() -{ - unsigned int seed = getpid(); - seed |= seed << 15; - seed ^= time(0); - - srand(seed); -} - -/** - * Egy veletlen int-et ad vissza 0 es m-1 kozott. - */ -int random(int m) -{ - return int( double(m) * rand() / (RAND_MAX + 1.0) ); -} - -using namespace lemon; - -using std::cout; -using std::cin; -using std::endl; - -int main() { - leda::graph g; - typedef LedaGraphWrapper Graph; - Graph G(g); -// typedef ListGraph Graph; -// Graph G; - - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - typedef Graph::InEdgeIt InEdgeIt; - - //Node s, t; - //Graph::EdgeMap cap(G); - //readDimacsMaxFlow(std::cin, G, s, t, cap); - std::vector s_nodes; - std::vector t_nodes; - - int a; - cout << "number of nodes in the first color class="; - cin >> a; - int b; - cout << "number of nodes in the second color class="; - cin >> b; - int m; - cout << "number of edges="; - cin >> m; - - for(int i=0; i A; - leda_list B; - Graph::NodeMap s_map(G); //false - Graph::NodeMap t_map(G); //false - - for(int i=0; i(); G.valid(n); G.next(n)) { -// cout << G.id(n) << ": "; -// cout << "out edges: "; -// for(OutEdgeIt e=G.first(n); G.valid(e); G.next(e)) -// cout << G.id(G.source(e)) << "->" << G.id(G.target(e)) << " "; -// cout << "in edges: "; -// for(InEdgeIt e=G.first(n); G.valid(e); G.next(e)) -// cout << G.id(G.source(e)) << "->" << G.id(G.target(e)) << " "; -// cout << endl; -// } - - - { - std::cout << "on-the-fly max bipartite matching (Edmonds-Karp) demo on wrapped leda graph..." << std::endl; - Graph::EdgeMap flow(G); //0 flow - Graph::EdgeMap cap(G, 1); - - Timer ts; - ts.reset(); - - MaxMatching, Graph::EdgeMap > max_flow_test(G, s_map, t_map, flow, cap); - int i=0; - while (max_flow_test.augmentOnShortestPath()) { -// for(EdgeIt e=G.first(); G.valid(e); G.next(e)) -// std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; -// std::cout<(); G.valid(e); G.next(e)) -// if (flow.get(e)) -// std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; -// std::cout<(); G.valid(e); G.next(e)) -// if (!flow.get(e)) -// std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; -// std::cout< flow(G); //0 flow -// Graph::EdgeMap cap(G, 1); - -// Timer ts; -// ts.reset(); - -// MaxMatching, Graph::EdgeMap > max_flow_test(G, s_map, t_map, flow, cap); -// int i=0; -// while (max_flow_test.augmentOnBlockingFlow2()) { -// // for(EdgeIt e=G.first(); G.valid(e); G.next(e)) -// // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; -// // std::cout<(); G.valid(e); G.next(e)) -// // if (flow.get(e)) -// // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; -// // std::cout<(); G.valid(e); G.next(e)) -// // if (!flow.get(e)) -// // std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; -// // std::cout< flow(G); //0 flow - //Graph::EdgeMap cap(G, 1); - - leda_node_array NC(g); - - Timer ts; - ts.reset(); - - //MaxMatching, Graph::EdgeMap > max_flow_test(G, s_map, t_map, flow, cap); - //int i=0; - //while (max_flow_test.augmentOnShortestPath()) { ++i; } - - //leda_list l=MAX_CARD_BIPARTITE_MATCHING_HK(g, A, B, NC, false); - leda_list l=MAX_CARD_BIPARTITE_MATCHING(g); - - -// std::cout << "maximum matching: "<< std::endl; -// for(EdgeIt e=G.first(); G.valid(e); G.next(e)) -// if (flow.get(e)) -// std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; -// std::cout<(); G.valid(e); G.next(e)) -// if (!flow.get(e)) -// std::cout << G.id(G.source(e)) << "-" << flow.get(e) << "->" << G.id(G.target(e)) << " "; -// std::cout< -#include -#include - -#include - -#include -#include -#include -#include -#include - -using namespace lemon; -using std::cout; -using std::endl; -using std::string; - -template -class EdgeNameMap { - Graph& graph; - NodeNameMap& node_name_map; -public: - EdgeNameMap(Graph& _graph, NodeNameMap& _node_name_map) : - graph(_graph), node_name_map(_node_name_map) { } - string get(typename Graph::Edge e) const { - return - (node_name_map.get(graph.source(e))+"->"+node_name_map.get(graph.target(e))); - } -}; - -int main (int, char*[]) -{ - - - //typedef SmartGraph Graph; - //typedef ListGraph Graph; - typedef LedaGraphWrapper Graph; - - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - typedef Graph::InEdgeIt InEdgeIt; - - - leda::graph g; - Graph G(g); - - Node s=G.addNode(); - Node v1=G.addNode(); - Node v2=G.addNode(); - Node v3=G.addNode(); - Node v4=G.addNode(); - Node t=G.addNode(); - - Graph::NodeMap node_name(G); - node_name.set(s, "s"); - node_name.set(v1, "v1"); - node_name.set(v2, "v2"); - node_name.set(v3, "v3"); - node_name.set(v4, "v4"); - node_name.set(t, "t"); - - G.addEdge(s, v1); - G.addEdge(s, v2); - G.addEdge(v1, v2); - G.addEdge(v2, v1); - G.addEdge(v1, v3); - G.addEdge(v3, v2); - G.addEdge(v2, v4); - G.addEdge(v4, v3); - G.addEdge(v3, t); - G.addEdge(v4, t); - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - -// typedef TrivGraphWrapper CGW; -// CGW wG(G); - -// cout << "bfs and dfs demo on the directed graph" << endl; -// for(CGW::NodeIt n=wG.first(); n.valid(); ++n) { -// cout << n << ": "; -// cout << "out edges: "; -// for(CGW::OutEdgeIt e=wG.first(n); e.valid(); ++e) -// cout << e << " "; -// cout << "in edges: "; -// for(CGW::InEdgeIt e=wG.first(n); e.valid(); ++e) -// cout << e << " "; -// cout << endl; -// } - - { - typedef TrivGraphWrapper GW; - GW wG(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(wG, node_name); - - cout << "bfs and dfs iterator demo on the directed graph" << endl; - for(GW::NodeIt n=wG.first(); wG.valid(n); wG.next(n)) { - cout << node_name.get(n) << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e=wG.first(n); wG.valid(e); wG.next(e)) - cout << edge_name.get(e) << " "; - cout << "in edges: "; - for(GW::InEdgeIt e=wG.first(n); wG.valid(e); wG.next(e)) - cout << edge_name.get(e) << " "; - cout << endl; - } - - cout << "bfs from s ..." << endl; - BfsIterator5< GW, GW::NodeMap > bfs(wG); - bfs.pushAndSetReached(s); - while (!bfs.finished()) { - //cout << "edge: "; - if (wG.valid(bfs)) { - cout << edge_name.get(bfs) << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(wG.aNode(bfs)) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ node_name.get(wG.bNode(bfs)) << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(bfs.aNode()) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from s ..." << endl; - DfsIterator5< GW, GW::NodeMap > dfs(wG); - dfs.pushAndSetReached(s); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (wG.valid(dfs)) { - cout << edge_name.get(dfs) << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(wG.aNode(dfs)) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ node_name.get(wG.bNode(dfs)) << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(dfs.aNode()) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ - "invalid."; - } - cout << endl; - } - } - - - { - typedef RevGraphWrapper GW; - GW wG(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(wG, node_name); - - cout << "bfs and dfs iterator demo on the reversed directed graph" << endl; - for(GW::NodeIt n=wG.first(); wG.valid(n); wG.next(n)) { - cout << node_name.get(n) << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e=wG.first(n); wG.valid(e); wG.next(e)) - cout << edge_name.get(e) << " "; - cout << "in edges: "; - for(GW::InEdgeIt e=wG.first(n); wG.valid(e); wG.next(e)) - cout << edge_name.get(e) << " "; - cout << endl; - } - - cout << "bfs from t ..." << endl; - BfsIterator5< GW, GW::NodeMap > bfs(wG); - bfs.pushAndSetReached(t); - while (!bfs.finished()) { - //cout << "edge: "; - if (wG.valid(bfs)) { - cout << edge_name.get(bfs) << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(wG.aNode(bfs)) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ node_name.get(wG.bNode(bfs)) << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(bfs.aNode()) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from t ..." << endl; - DfsIterator5< GW, GW::NodeMap > dfs(wG); - dfs.pushAndSetReached(t); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (wG.valid(dfs)) { - cout << edge_name.get(dfs) << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(wG.aNode(dfs)) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ node_name.get(wG.bNode(dfs)) << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(dfs.aNode()) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ - "invalid."; - } - cout << endl; - } - } - - { - typedef UndirGraphWrapper GW; - GW wG(G); - - EdgeNameMap< GW, Graph::NodeMap > edge_name(wG, node_name); - - cout << "bfs and dfs iterator demo on the undirected graph" << endl; - for(GW::NodeIt n=wG.first(); wG.valid(n); wG.next(n)) { - cout << node_name.get(n) << ": "; - cout << "out edges: "; - for(GW::OutEdgeIt e=wG.first(n); wG.valid(e); wG.next(e)) - cout << edge_name.get(e) << " "; - cout << "in edges: "; - for(GW::InEdgeIt e=wG.first(n); wG.valid(e); wG.next(e)) - cout << edge_name.get(e) << " "; - cout << endl; - } - - cout << "bfs from t ..." << endl; - BfsIterator5< GW, GW::NodeMap > bfs(wG); - bfs.pushAndSetReached(t); - while (!bfs.finished()) { - //cout << "edge: "; - if (wG.valid(GW::OutEdgeIt(bfs))) { - cout << edge_name.get(GW::OutEdgeIt(bfs)) << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(wG.aNode(bfs)) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ node_name.get(wG.bNode(bfs)) << - (bfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(bfs.aNode()) << - (bfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ - "invalid."; - } - cout << endl; - ++bfs; - } - - cout << " /--> -------------> "<< endl; - cout << " / /-- v1 <-\\ /---- v3-\\ "<< endl; - cout << " / | | / /-> \\ "<< endl; - cout << " / | | / | ^ \\ "<< endl; - cout << "s | | / | | \\-> t "<< endl; - cout << " \\ | | / | | /-> "<< endl; - cout << " \\ | --/ / | | / "<< endl; - cout << " \\ \\-> v2 <--/ \\-- v4 -/ "<< endl; - cout << " \\--> -------------> "<< endl; - - cout << "dfs from t ..." << endl; - DfsIterator5< GW, GW::NodeMap > dfs(wG); - dfs.pushAndSetReached(t); - while (!dfs.finished()) { - ++dfs; - //cout << "edge: "; - if (wG.valid(GW::OutEdgeIt(dfs))) { - cout << edge_name.get(GW::OutEdgeIt(dfs)) << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(wG.aNode(dfs)) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ node_name.get(wG.bNode(dfs)) << - (dfs.isBNodeNewlyReached() ? ": is newly reached." : - ": is not newly reached."); - } else { - cout << "invalid" << /*endl*/", " << - /*" aNode: " <<*/ node_name.get(dfs.aNode()) << - (dfs.isANodeExamined() ? ": is examined, " : ": is not examined, ") << - /*" bNode: " <<*/ - "invalid."; - } - cout << endl; - } - } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/leda_graph_demo.cc --- a/src/work/marci/leda_graph_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,85 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -#include -#include -#include -#include - -using namespace lemon; - -using std::cout; -using std::endl; - -int main() { - leda::graph g; - typedef LedaGraphWrapper Graph; - Graph G(g); -// G.addNode(); -// G.addNode(); -// std::cout << G.nodeNum() << std::endl; - - typedef Graph::Node Node; - typedef Graph::NodeIt NodeIt; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - typedef Graph::OutEdgeIt OutEdgeIt; - typedef Graph::InEdgeIt InEdgeIt; - - Node s, t; - Graph::EdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - - -// cout << "bfs and dfs iterator demo on the directed graph" << endl; -// for(NodeIt n=G.first(); G.valid(n); G.next(n)) { -// cout << G.id(n) << ": "; -// cout << "out edges: "; -// for(OutEdgeIt e=G.first(n); G.valid(e); G.next(e)) -// cout << G.id(G.source(e)) << "-" << cap.get(e) << "->" << G.id(G.target(e)) << " "; -// cout << "in edges: "; -// for(InEdgeIt e=G.first(n); G.valid(e); G.next(e)) -// cout << G.id(G.source(e)) << "-" << cap.get(e) << "->" << G.id(G.target(e)) << " "; -// cout << endl; -// } - -// int i=0; -// for(EdgeIt e=G.first(); G.valid(e); G.next(e)) { cap.set(e, i); i+=3; } -// for(EdgeIt e=G.first(); G.valid(e); G.next(e)) { cout << cap.get(e) << " "; } -// cout << endl; - - { - //std::cout << "SmartGraph..." << std::endl; - std::cout << "on-the-fly edmonds karp demo on wrapped leda graph..." << std::endl; - Graph::EdgeMap flow(G); //0 flow - - - Timer ts; - ts.reset(); - - MaxFlow, Graph::EdgeMap > max_flow_test(G, s, t, flow, cap); - //max_flow_test.augmentWithBlockingFlow(); - int i=0; - while (max_flow_test.augmentOnShortestPath()) { -// for(EdgeIt e=G.template first(); e.valid(); ++e) { -// std::cout<<"("<"<(); e.valid(); ++e) { -// std::cout<<"("<"< -#include -#include - -#include -#include -#include -#include -#include -#include -#include -#include - -using namespace lemon; - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo dimacs_max_flow_file - -int main(int, char** argv) { - - std::string in=argv[1]; - typedef SageGraph MutableGraph; - - { - typedef SageGraph Graph; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph g; - Node s, t; - Graph::EdgeMap cap(g); - std::ifstream ins(in.c_str()); - //readDimacsMaxFlow(ins, g, s, t, cap); - readDimacs(ins, g, cap, s, t); - - Timer ts; - Graph::EdgeMap flow(g); //0 flow - MaxFlow, Graph::EdgeMap > - max_flow_test(g, s, t, cap, flow/*, true*/); - AugmentingFlow, Graph::EdgeMap > - augmenting_flow_test(g, s, t, cap, flow/*, true*/); - - std::cout << "SageGraph ..." << std::endl; - - { - std::cout << "preflow ..." << std::endl; - ts.reset(); - max_flow_test.run(); - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "physical blocking flow augmentation ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - } - -// { -// std::cout << "faster physical blocking flow augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (max_flow_test.augmentOnBlockingFlow1()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; -// } - - { - std::cout << "on-the-fly blocking flow augmentation ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow2()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - } - - { - std::cout << "on-the-fly shortest path augmentation ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnShortestPath()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - } - } - - { - typedef SmartGraph Graph; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph g; - Node s, t; - Graph::EdgeMap cap(g); - std::ifstream ins(in.c_str()); - //readDimacsMaxFlow(ins, g, s, t, cap); - readDimacs(ins, g, cap, s, t); - - Timer ts; - Graph::EdgeMap flow(g); //0 flow - MaxFlow, Graph::EdgeMap > - max_flow_test(g, s, t, cap, flow/*, true*/); - AugmentingFlow, Graph::EdgeMap > - augmenting_flow_test(g, s, t, cap, flow/*, true*/); - // MaxFlow, Graph::EdgeMap > - // max_flow_test(g, s, t, cap, flow); - - std::cout << "SmartGraph ..." << std::endl; - - { - std::cout << "preflow ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - max_flow_test.run(); - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "physical blocking flow augmentation ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - } - -// { -// std::cout << "faster physical blocking flow augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (max_flow_test.augmentOnBlockingFlow1()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; -// } - - { - std::cout << "on-the-fly blocking flow augmentation ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow2()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - } - - { - std::cout << "on-the-fly shortest path augmentation ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnShortestPath()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - } - } - - { - typedef ListGraph Graph; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph g; - Node s, t; - Graph::EdgeMap cap(g); - std::ifstream ins(in.c_str()); - //readDimacsMaxFlow(ins, g, s, t, cap); - readDimacs(ins, g, cap, s, t); - - Timer ts; - Graph::EdgeMap flow(g); //0 flow - MaxFlow, Graph::EdgeMap > - max_flow_test(g, s, t, cap, flow/*, true*/); - AugmentingFlow, Graph::EdgeMap > - augmenting_flow_test(g, s, t, cap, flow/*, true*/); - // MaxFlow, Graph::EdgeMap > - // max_flow_test(g, s, t, cap, flow); - - std::cout << "ListGraph ..." << std::endl; - - { - std::cout << "preflow ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - max_flow_test.run(); - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "physical blocking flow augmentation ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - } - -// { -// std::cout << "faster physical blocking flow augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (max_flow_test.augmentOnBlockingFlow1()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; -// } - - { - std::cout << "on-the-fly blocking flow augmentation ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow2()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - } - - { - std::cout << "on-the-fly shortest path augmentation ..." << std::endl; - for (Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnShortestPath()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - } - } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/lp/expression.h --- a/src/work/marci/lp/expression.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,197 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_EXPRESSION_H -#define LEMON_EXPRESSION_H - -#include -#include -#include - -namespace lemon { - - /*! \brief Linear expression - - \c Expr<_Col,_Value> implements a class of linear expressions with the - operations of addition and multiplication with scalar. - - \author Marton Makai - */ - template - class Expr; - - template - class Expr { -// protected: - public: - typedef - typename std::map<_Col, _Value> Data; - Data data; - public: - void simplify() { - for (typename Data::iterator i=data.begin(); - i!=data.end(); ++i) { - if ((*i).second==0) data.erase(i); - } - } - Expr() { } - Expr(_Col _col) { - data.insert(std::make_pair(_col, 1)); - } - Expr& operator*=(_Value _value) { - for (typename Data::iterator i=data.begin(); - i!=data.end(); ++i) { - (*i).second *= _value; - } - simplify(); - return *this; - } - Expr& operator+=(const Expr<_Col, _Value>& expr) { - for (typename Data::const_iterator j=expr.data.begin(); - j!=expr.data.end(); ++j) { - typename Data::iterator i=data.find((*j).first); - if (i==data.end()) { - data.insert(std::make_pair((*j).first, (*j).second)); - } else { - (*i).second+=(*j).second; - } - } - simplify(); - return *this; - } - Expr& operator-=(const Expr<_Col, _Value>& expr) { - for (typename Data::const_iterator j=expr.data.begin(); - j!=expr.data.end(); ++j) { - typename Data::iterator i=data.find((*j).first); - if (i==data.end()) { - data.insert(std::make_pair((*j).first, -(*j).second)); - } else { - (*i).second+=-(*j).second; - } - } - simplify(); - return *this; - } - template - friend std::ostream& operator<<(std::ostream& os, - const Expr<_C, _V>& expr); - }; - - template - Expr<_Col, _Value> operator*(_Value _value, _Col _col) { - Expr<_Col, _Value> tmp(_col); - tmp*=_value; - tmp.simplify(); - return tmp; - } - - template - Expr<_Col, _Value> operator*(_Value _value, - const Expr<_Col, _Value>& expr) { - Expr<_Col, _Value> tmp(expr); - tmp*=_value; - tmp.simplify(); - return tmp; - } - - template - Expr<_Col, _Value> operator+(const Expr<_Col, _Value>& expr1, - const Expr<_Col, _Value>& expr2) { - Expr<_Col, _Value> tmp(expr1); - tmp+=expr2; - tmp.simplify(); - return tmp; - } - - template - Expr<_Col, _Value> operator-(const Expr<_Col, _Value>& expr1, - const Expr<_Col, _Value>& expr2) { - Expr<_Col, _Value> tmp(expr1); - tmp-=expr2; - tmp.simplify(); - return tmp; - } - - template - std::ostream& operator<<(std::ostream& os, - const Expr<_Col, _Value>& expr) { - for (typename Expr<_Col, _Value>::Data::const_iterator i= - expr.data.begin(); - i!=expr.data.end(); ++i) { - os << (*i).second << "*" << (*i).first << " "; - } - return os; - } - - template - class LConstr { - // protected: - public: - Expr<_Col, _Value> expr; - _Value lo; - public: - LConstr(const Expr<_Col, _Value>& _expr, _Value _lo) : - expr(_expr), lo(_lo) { } - }; - - template - LConstr<_Col, _Value> - operator<=(_Value lo, const Expr<_Col, _Value>& expr) { - return LConstr<_Col, _Value>(expr, lo); - } - - template - class UConstr { - // protected: - public: - Expr<_Col, _Value> expr; - _Value up; - public: - UConstr(const Expr<_Col, _Value>& _expr, _Value _up) : - expr(_expr), up(_up) { } - }; - - template - UConstr<_Col, _Value> - operator<=(const Expr<_Col, _Value>& expr, _Value up) { - return UConstr<_Col, _Value>(expr, up); - } - - template - class Constr { - // protected: - public: - Expr<_Col, _Value> expr; - _Value lo, up; - public: - Constr(const Expr<_Col, _Value>& _expr, _Value _lo, _Value _up) : - expr(_expr), lo(_lo), up(_up) { } - Constr(const LConstr<_Col, _Value>& _lconstr) : - expr(_lconstr.expr), - lo(_lconstr.lo), - up(std::numeric_limits<_Value>::infinity()) { } - Constr(const UConstr<_Col, _Value>& _uconstr) : - expr(_uconstr.expr), - lo(-std::numeric_limits<_Value>::infinity()), - up(_uconstr.up) { } - }; - - template - Constr<_Col, _Value> - operator<=(const LConstr<_Col, _Value>& lconstr, _Value up) { - return Constr<_Col, _Value>(lconstr.expr, lconstr.lo, up); - } - - template - Constr<_Col, _Value> - operator<=(_Value lo, const UConstr<_Col, _Value>& uconstr) { - return Constr<_Col, _Value>(uconstr.expr, lo, uconstr.up); - } - - template - Constr<_Col, _Value> - operator==(const Expr<_Col, _Value>& expr, _Value value) { - return Constr<_Col, _Value>(expr, value, value); - } - -} //namespace lemon - -#endif //LEMON_EXPRESSION_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/lp/expression_test.cc --- a/src/work/marci/lp/expression_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -#include -#include -#include - -using std::cout; -using std::endl; -using std::string; -using namespace lemon; - -int main() { - Expr b; - cout << b << endl; - Expr c("f"); - cout << c << endl; - Expr d=8.0*string("g"); - cout << d << endl; - c*=5; - cout << c << endl; - Expr e=c; - e+=8.9*9.0*string("l"); - cout << e << endl; - cout << c+d << endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/lp/lp_solver_base.h --- a/src/work/marci/lp/lp_solver_base.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1118 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_LP_SOLVER_BASE_H -#define LEMON_LP_SOLVER_BASE_H - -///\ingroup misc -///\file - -// #include -#include -#include -#include -#include -// #include -//#include -extern "C" { -#include "glpk.h" -} - -#include -#include -#include -#include -#include -#include - -#include -#include -//#include -//#include -//#include -//#include - -using std::cout; -using std::cin; -using std::endl; - -namespace lemon { - - /// \addtogroup misc - /// @{ - - /// \brief A partitioned vector with iterable classes. - /// - /// This class implements a container in which the data is stored in an - /// stl vector, the range is partitioned into sets and each set is - /// doubly linked in a list. - /// That is, each class is iterable by lemon iterators, and any member of - /// the vector can bo moved to an other class. - template - class IterablePartition { - protected: - struct Node { - T data; - int prev; //invalid az -1 - int next; - }; - std::vector nodes; - struct Tip { - int first; - int last; - }; - std::vector tips; - public: - /// The classes are indexed by integers from \c 0 to \c classNum()-1. - int classNum() const { return tips.size(); } - /// This lemon style iterator iterates through a class. - class Class; - /// Constructor. The number of classes is to be given which is fixed - /// over the life of the container. - /// The partition classes are indexed from 0 to class_num-1. - IterablePartition(int class_num) { - for (int i=0; inext(*this); - return *this; - } - }; - - }; - - - /*! \e - \todo kellenene uj iterable structure bele, mert ez nem az igazi - \todo A[x,y]-t cserel. Jobboldal, baloldal csere. - \todo LEKERDEZESEK!!! - \todo DOKSI!!!! Doxygen group!!! - The aim of this class is to give a general surface to different - solvers, i.e. it makes possible to write algorithms using LP's, - in which the solver can be changed to an other one easily. - \nosubgrouping - */ - template - class LPSolverBase { - - /*! @name Uncategorized functions and types (public members) - */ - //@{ - public: - - //UNCATEGORIZED - - /// \e - typedef IterablePartition Rows; - /// \e - typedef IterablePartition Cols; - /// \e - typedef _Value Value; - /// \e - typedef Rows::Class Row; - /// \e - typedef Cols::Class Col; - public: - /// \e - IterablePartition row_iter_map; - /// \e - IterablePartition col_iter_map; - /// \e - std::vector int_row_map; - /// \e - std::vector int_col_map; - /// \e - const int VALID_CLASS; - /// \e - const int INVALID_CLASS; - /// \e - static const _Value INF; - public: - /// \e - LPSolverBase() : row_iter_map(2), - col_iter_map(2), - VALID_CLASS(0), INVALID_CLASS(1) { } - /// \e - virtual ~LPSolverBase() { } - //@} - - /*! @name Medium level interface (public members) - These functions appear in the low level and also in the high level - interfaces thus these each of these functions have to be implemented - only once in the different interfaces. - This means that these functions have to be reimplemented for all of the - different lp solvers. These are basic functions, and have the same - parameter lists in the low and high level interfaces. - */ - //@{ - public: - - //UNCATEGORIZED FUNCTIONS - - /// \e - virtual void setMinimize() = 0; - /// \e - virtual void setMaximize() = 0; - - //SOLVER FUNCTIONS - - /// \e - virtual void solveSimplex() = 0; - /// \e - virtual void solvePrimalSimplex() = 0; - /// \e - virtual void solveDualSimplex() = 0; - - //SOLUTION RETRIEVING - - /// \e - virtual _Value getObjVal() = 0; - - //OTHER FUNCTIONS - - /// \e - virtual int rowNum() const = 0; - /// \e - virtual int colNum() const = 0; - /// \e - virtual int warmUp() = 0; - /// \e - virtual void printWarmUpStatus(int i) = 0; - /// \e - virtual int getPrimalStatus() = 0; - /// \e - virtual void printPrimalStatus(int i) = 0; - /// \e - virtual int getDualStatus() = 0; - /// \e - virtual void printDualStatus(int i) = 0; - /// Returns the status of the slack variable assigned to row \c row. - virtual int getRowStat(const Row& row) = 0; - /// \e - virtual void printRowStatus(int i) = 0; - /// Returns the status of the variable assigned to column \c col. - virtual int getColStat(const Col& col) = 0; - /// \e - virtual void printColStatus(int i) = 0; - - //@} - - /*! @name Low level interface (protected members) - Problem manipulating functions in the low level interface - */ - //@{ - protected: - - //MATRIX MANIPULATING FUNCTIONS - - /// \e - virtual int _addCol() = 0; - /// \e - virtual int _addRow() = 0; - /// \e - virtual void _eraseCol(int i) = 0; - /// \e - virtual void _eraseRow(int i) = 0; - /// \e - virtual void _setRowCoeffs(int i, - const std::vector >& coeffs) = 0; - /// \e - /// This routine modifies \c coeffs only by the \c push_back method. - virtual void _getRowCoeffs(int i, - std::vector >& coeffs) = 0; - /// \e - virtual void _setColCoeffs(int i, - const std::vector >& coeffs) = 0; - /// \e - /// This routine modifies \c coeffs only by the \c push_back method. - virtual void _getColCoeffs(int i, - std::vector >& coeffs) = 0; - /// \e - virtual void _setCoeff(int col, int row, _Value value) = 0; - /// \e - virtual _Value _getCoeff(int col, int row) = 0; - // public: - // /// \e - // enum Bound { FREE, LOWER, UPPER, DOUBLE, FIXED }; - protected: - /// \e - /// The lower bound of a variable (column) have to be given by an - /// extended number of type _Value, i.e. a finite number of type - /// _Value or -INF. - virtual void _setColLowerBound(int i, _Value value) = 0; - /// \e - /// The lower bound of a variable (column) is an - /// extended number of type _Value, i.e. a finite number of type - /// _Value or -INF. - virtual _Value _getColLowerBound(int i) = 0; - /// \e - /// The upper bound of a variable (column) have to be given by an - /// extended number of type _Value, i.e. a finite number of type - /// _Value or INF. - virtual void _setColUpperBound(int i, _Value value) = 0; - /// \e - /// The upper bound of a variable (column) is an - /// extended number of type _Value, i.e. a finite number of type - /// _Value or INF. - virtual _Value _getColUpperBound(int i) = 0; - /// \e - /// The lower bound of a linear expression (row) have to be given by an - /// extended number of type _Value, i.e. a finite number of type - /// _Value or -INF. - virtual void _setRowLowerBound(int i, _Value value) = 0; - /// \e - /// The lower bound of a linear expression (row) is an - /// extended number of type _Value, i.e. a finite number of type - /// _Value or -INF. - virtual _Value _getRowLowerBound(int i) = 0; - /// \e - /// The upper bound of a linear expression (row) have to be given by an - /// extended number of type _Value, i.e. a finite number of type - /// _Value or INF. - virtual void _setRowUpperBound(int i, _Value value) = 0; - /// \e - /// The upper bound of a linear expression (row) is an - /// extended number of type _Value, i.e. a finite number of type - /// _Value or INF. - virtual _Value _getRowUpperBound(int i) = 0; - /// \e - virtual void _setObjCoeff(int i, _Value obj_coef) = 0; - /// \e - virtual _Value _getObjCoeff(int i) = 0; - - //SOLUTION RETRIEVING - - /// \e - virtual _Value _getPrimal(int i) = 0; - //@} - - /*! @name High level interface (public members) - Problem manipulating functions in the high level interface - */ - //@{ - public: - - //MATRIX MANIPULATING FUNCTIONS - - /// \e - Col addCol() { - int i=_addCol(); - Col col; - col_iter_map.first(col, INVALID_CLASS); - if (col_iter_map.valid(col)) { //van hasznalhato hely - col_iter_map.set(col, INVALID_CLASS, VALID_CLASS); - col_iter_map[col]=i; - } else { //a cucc vegere kell inzertalni mert nincs szabad hely - col=col_iter_map.push_back(i, VALID_CLASS); - } - int_col_map.push_back(col); - return col; - } - /// \e - Row addRow() { - int i=_addRow(); - Row row; - row_iter_map.first(row, INVALID_CLASS); - if (row_iter_map.valid(row)) { //van hasznalhato hely - row_iter_map.set(row, INVALID_CLASS, VALID_CLASS); - row_iter_map[row]=i; - } else { //a cucc vegere kell inzertalni mert nincs szabad hely - row=row_iter_map.push_back(i, VALID_CLASS); - } - int_row_map.push_back(row); - return row; - } - /// \e - void eraseCol(const Col& col) { - col_iter_map.set(col, VALID_CLASS, INVALID_CLASS); - int cols[2]; - cols[1]=col_iter_map[col]; - _eraseCol(cols[1]); - col_iter_map[col]=0; //glpk specifikus, de kell ez?? - Col it; - for (col_iter_map.first(it, VALID_CLASS); - col_iter_map.valid(it); col_iter_map.next(it)) { - if (col_iter_map[it]>cols[1]) --col_iter_map[it]; - } - int_col_map.erase(int_col_map.begin()+cols[1]); - } - /// \e - void eraseRow(const Row& row) { - row_iter_map.set(row, VALID_CLASS, INVALID_CLASS); - int rows[2]; - rows[1]=row_iter_map[row]; - _eraseRow(rows[1]); - row_iter_map[row]=0; //glpk specifikus, de kell ez?? - Row it; - for (row_iter_map.first(it, VALID_CLASS); - row_iter_map.valid(it); row_iter_map.next(it)) { - if (row_iter_map[it]>rows[1]) --row_iter_map[it]; - } - int_row_map.erase(int_row_map.begin()+rows[1]); - } - /// \e - void setCoeff(Col col, Row row, _Value value) { - _setCoeff(col_iter_map[col], row_iter_map[row], value); - } - /// \e - _Value getCoeff(Col col, Row row) { - return _getCoeff(col_iter_map[col], row_iter_map[row], value); - } - /// \e - void setColLowerBound(Col col, _Value lo) { - _setColLowerBound(col_iter_map[col], lo); - } - /// \e - _Value getColLowerBound(Col col) { - return _getColLowerBound(col_iter_map[col]); - } - /// \e - void setColUpperBound(Col col, _Value up) { - _setColUpperBound(col_iter_map[col], up); - } - /// \e - _Value getColUpperBound(Col col) { - return _getColUpperBound(col_iter_map[col]); - } - /// \e - void setRowLowerBound(Row row, _Value lo) { - _setRowLowerBound(row_iter_map[row], lo); - } - /// \e - _Value getRowLowerBound(Row row) { - return _getRowLowerBound(row_iter_map[row]); - } - /// \e - void setRowUpperBound(Row row, _Value up) { - _setRowUpperBound(row_iter_map[row], up); - } - /// \e - _Value getRowUpperBound(Row row) { - return _getRowUpperBound(row_iter_map[row]); - } - /// \e - void setObjCoeff(const Col& col, _Value obj_coef) { - _setObjCoeff(col_iter_map[col], obj_coef); - } - /// \e - _Value getObjCoeff(const Col& col) { - return _getObjCoeff(col_iter_map[col]); - } - - //SOLUTION RETRIEVING FUNCTIONS - - /// \e - _Value getPrimal(const Col& col) { - return _getPrimal(col_iter_map[col]); - } - - //@} - - /*! @name User friend interface - Problem manipulating functions in the user friend interface - */ - //@{ - - //EXPRESSION TYPES - - /// \e - typedef Expr Expression; - /// \e - typedef Expr DualExpression; - /// \e - typedef Constr Constraint; - - //MATRIX MANIPULATING FUNCTIONS - - /// \e - void setRowCoeffs(Row row, const Expression& expr) { - std::vector > row_coeffs; - for(typename Expression::Data::const_iterator i=expr.data.begin(); - i!=expr.data.end(); ++i) { - row_coeffs.push_back(std::make_pair - (col_iter_map[(*i).first], (*i).second)); - } - _setRowCoeffs(row_iter_map[row], row_coeffs); - } - /// \e - void setRow(Row row, const Constraint& constr) { - setRowCoeffs(row, constr.expr); - setRowLowerBound(row, constr.lo); - setRowUpperBound(row, constr.up); - } - /// \e - Row addRow(const Constraint& constr) { - Row row=addRow(); - setRowCoeffs(row, constr.expr); - setRowLowerBound(row, constr.lo); - setRowUpperBound(row, constr.up); - return row; - } - /// \e - /// This routine modifies \c expr by only adding to it. - void getRowCoeffs(Row row, Expression& expr) { - std::vector > row_coeffs; - _getRowCoeffs(row_iter_map[row], row_coeffs); - for(typename std::vector >::const_iterator - i=row_coeffs.begin(); i!=row_coeffs.end(); ++i) { - expr+= (*i).second*int_col_map[(*i).first]; - } - } - /// \e - void setColCoeffs(Col col, const DualExpression& expr) { - std::vector > col_coeffs; - for(typename DualExpression::Data::const_iterator i=expr.data.begin(); - i!=expr.data.end(); ++i) { - col_coeffs.push_back(std::make_pair - (row_iter_map[(*i).first], (*i).second)); - } - _setColCoeffs(col_iter_map[col], col_coeffs); - } - /// \e - /// This routine modifies \c expr by only adding to it. - void getColCoeffs(Col col, DualExpression& expr) { - std::vector > col_coeffs; - _getColCoeffs(col_iter_map[col], col_coeffs); - for(typename std::vector >::const_iterator - i=col_coeffs.begin(); i!=col_coeffs.end(); ++i) { - expr+= (*i).second*int_row_map[(*i).first]; - } - } - /// \e - void setObjCoeffs(const Expression& expr) { - // writing zero everywhere - for(Cols::ClassIt it(col_iter_map, VALID_CLASS); it!=INVALID; ++it) - setObjCoeff(it, 0.0); - // writing the data needed - for(typename Expression::Data::const_iterator i=expr.data.begin(); - i!=expr.data.end(); ++i) { - setObjCoeff((*i).first, (*i).second); - } - } - /// \e - /// This routine modifies \c expr by only adding to it. - void getObjCoeffs(Expression& expr) { - for(Cols::ClassIt it(col_iter_map, VALID_CLASS); it!=INVALID; ++it) - expr+=getObjCoeff(it)*it; - } - //@} - - - /*! @name MIP functions and types (public members) - */ - //@{ - public: - /// \e - virtual void solveBandB() = 0; - /// \e - virtual void setLP() = 0; - /// \e - virtual void setMIP() = 0; - protected: - /// \e - virtual void _setColCont(int i) = 0; - /// \e - virtual void _setColInt(int i) = 0; - /// \e - virtual _Value _getMIPPrimal(int i) = 0; - public: - /// \e - void setColCont(Col col) { - _setColCont(col_iter_map[col]); - } - /// \e - void setColInt(Col col) { - _setColInt(col_iter_map[col]); - } - /// \e - _Value getMIPPrimal(Col col) { - return _getMIPPrimal(col_iter_map[col]); - } - //@} - }; - - template - const _Value LPSolverBase<_Value>::INF=std::numeric_limits<_Value>::infinity(); - - - /// \brief Wrapper for GLPK solver - /// - /// This class implements a lemon wrapper for GLPK. - class LPGLPK : public LPSolverBase { - public: - typedef LPSolverBase Parent; - - public: - /// \e - LPX* lp; - - public: - /// \e - LPGLPK() : Parent(), - lp(lpx_create_prob()) { - int_row_map.push_back(Row()); - int_col_map.push_back(Col()); - lpx_set_int_parm(lp, LPX_K_DUAL, 1); - } - /// \e - ~LPGLPK() { - lpx_delete_prob(lp); - } - - //MATRIX INDEPEDENT MANIPULATING FUNCTIONS - - /// \e - void setMinimize() { - lpx_set_obj_dir(lp, LPX_MIN); - } - /// \e - void setMaximize() { - lpx_set_obj_dir(lp, LPX_MAX); - } - - //LOW LEVEL INTERFACE, MATRIX MANIPULATING FUNCTIONS - - protected: - /// \e - int _addCol() { - int i=lpx_add_cols(lp, 1); - _setColLowerBound(i, -INF); - _setColUpperBound(i, INF); - return i; - } - /// \e - int _addRow() { - int i=lpx_add_rows(lp, 1); - return i; - } - /// \e - virtual void _setRowCoeffs(int i, - const std::vector >& coeffs) { - int mem_length=1+colNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for (std::vector >:: - const_iterator it=coeffs.begin(); it!=coeffs.end(); ++it) { - ++length; - indices[length]=it->first; - doubles[length]=it->second; - } - lpx_set_mat_row(lp, i, length, indices, doubles); - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _getRowCoeffs(int i, - std::vector >& coeffs) { - int mem_length=1+colNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=lpx_get_mat_row(lp, i, indices, doubles); - for (int i=1; i<=length; ++i) { - coeffs.push_back(std::make_pair(indices[i], doubles[i])); - } - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _setColCoeffs(int i, - const std::vector >& coeffs) { - int mem_length=1+rowNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for (std::vector >:: - const_iterator it=coeffs.begin(); it!=coeffs.end(); ++it) { - ++length; - indices[length]=it->first; - doubles[length]=it->second; - } - lpx_set_mat_col(lp, i, length, indices, doubles); - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _getColCoeffs(int i, - std::vector >& coeffs) { - int mem_length=1+rowNum(); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=lpx_get_mat_col(lp, i, indices, doubles); - for (int i=1; i<=length; ++i) { - coeffs.push_back(std::make_pair(indices[i], doubles[i])); - } - delete [] indices; - delete [] doubles; - } - /// \e - virtual void _eraseCol(int i) { - int cols[2]; - cols[1]=i; - lpx_del_cols(lp, 1, cols); - } - virtual void _eraseRow(int i) { - int rows[2]; - rows[1]=i; - lpx_del_rows(lp, 1, rows); - } - void _setCoeff(int col, int row, double value) { - /// FIXME not yet implemented - } - double _getCoeff(int col, int row) { - /// FIXME not yet implemented - return 0.0; - } - virtual void _setColLowerBound(int i, double lo) { - if (lo==INF) { - //FIXME error - } - int b=lpx_get_col_type(lp, i); - double up=lpx_get_col_ub(lp, i); - if (lo==-INF) { - switch (b) { - case LPX_FR: - case LPX_LO: - lpx_set_col_bnds(lp, i, LPX_FR, lo, up); - break; - case LPX_UP: - break; - case LPX_DB: - case LPX_FX: - lpx_set_col_bnds(lp, i, LPX_UP, lo, up); - break; - default: ; - //FIXME error - } - } else { - switch (b) { - case LPX_FR: - case LPX_LO: - lpx_set_col_bnds(lp, i, LPX_LO, lo, up); - break; - case LPX_UP: - case LPX_DB: - case LPX_FX: - if (lo==up) - lpx_set_col_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_col_bnds(lp, i, LPX_DB, lo, up); - break; - default: ; - //FIXME error - } - } - } - virtual double _getColLowerBound(int i) { - int b=lpx_get_col_type(lp, i); - switch (b) { - case LPX_FR: - return -INF; - case LPX_LO: - return lpx_get_col_lb(lp, i); - case LPX_UP: - return -INF; - case LPX_DB: - case LPX_FX: - return lpx_get_col_lb(lp, i); - default: ; - //FIXME error - return 0.0; - } - } - virtual void _setColUpperBound(int i, double up) { - if (up==-INF) { - //FIXME error - } - int b=lpx_get_col_type(lp, i); - double lo=lpx_get_col_lb(lp, i); - if (up==INF) { - switch (b) { - case LPX_FR: - case LPX_LO: - break; - case LPX_UP: - lpx_set_col_bnds(lp, i, LPX_FR, lo, up); - break; - case LPX_DB: - case LPX_FX: - lpx_set_col_bnds(lp, i, LPX_LO, lo, up); - break; - default: ; - //FIXME error - } - } else { - switch (b) { - case LPX_FR: - lpx_set_col_bnds(lp, i, LPX_UP, lo, up); - break; - case LPX_LO: - if (lo==up) - lpx_set_col_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_col_bnds(lp, i, LPX_DB, lo, up); - break; - case LPX_UP: - lpx_set_col_bnds(lp, i, LPX_UP, lo, up); - break; - case LPX_DB: - case LPX_FX: - if (lo==up) - lpx_set_col_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_col_bnds(lp, i, LPX_DB, lo, up); - break; - default: ; - //FIXME error - } - } - } - virtual double _getColUpperBound(int i) { - int b=lpx_get_col_type(lp, i); - switch (b) { - case LPX_FR: - case LPX_LO: - return INF; - case LPX_UP: - case LPX_DB: - case LPX_FX: - return lpx_get_col_ub(lp, i); - default: ; - //FIXME error - return 0.0; - } - } - virtual void _setRowLowerBound(int i, double lo) { - if (lo==INF) { - //FIXME error - } - int b=lpx_get_row_type(lp, i); - double up=lpx_get_row_ub(lp, i); - if (lo==-INF) { - switch (b) { - case LPX_FR: - case LPX_LO: - lpx_set_row_bnds(lp, i, LPX_FR, lo, up); - break; - case LPX_UP: - break; - case LPX_DB: - case LPX_FX: - lpx_set_row_bnds(lp, i, LPX_UP, lo, up); - break; - default: ; - //FIXME error - } - } else { - switch (b) { - case LPX_FR: - case LPX_LO: - lpx_set_row_bnds(lp, i, LPX_LO, lo, up); - break; - case LPX_UP: - case LPX_DB: - case LPX_FX: - if (lo==up) - lpx_set_row_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_row_bnds(lp, i, LPX_DB, lo, up); - break; - default: ; - //FIXME error - } - } - } - virtual double _getRowLowerBound(int i) { - int b=lpx_get_row_type(lp, i); - switch (b) { - case LPX_FR: - return -INF; - case LPX_LO: - return lpx_get_row_lb(lp, i); - case LPX_UP: - return -INF; - case LPX_DB: - case LPX_FX: - return lpx_get_row_lb(lp, i); - default: ; - //FIXME error - return 0.0; - } - } - virtual void _setRowUpperBound(int i, double up) { - if (up==-INF) { - //FIXME error - } - int b=lpx_get_row_type(lp, i); - double lo=lpx_get_row_lb(lp, i); - if (up==INF) { - switch (b) { - case LPX_FR: - case LPX_LO: - break; - case LPX_UP: - lpx_set_row_bnds(lp, i, LPX_FR, lo, up); - break; - case LPX_DB: - case LPX_FX: - lpx_set_row_bnds(lp, i, LPX_LO, lo, up); - break; - default: ; - //FIXME error - } - } else { - switch (b) { - case LPX_FR: - lpx_set_row_bnds(lp, i, LPX_UP, lo, up); - break; - case LPX_LO: - if (lo==up) - lpx_set_row_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_row_bnds(lp, i, LPX_DB, lo, up); - break; - case LPX_UP: - lpx_set_row_bnds(lp, i, LPX_UP, lo, up); - break; - case LPX_DB: - case LPX_FX: - if (lo==up) - lpx_set_row_bnds(lp, i, LPX_FX, lo, up); - else - lpx_set_row_bnds(lp, i, LPX_DB, lo, up); - break; - default: ; - //FIXME error - } - } - } - virtual double _getRowUpperBound(int i) { - int b=lpx_get_row_type(lp, i); - switch (b) { - case LPX_FR: - case LPX_LO: - return INF; - case LPX_UP: - case LPX_DB: - case LPX_FX: - return lpx_get_row_ub(lp, i); - default: ; - //FIXME error - return 0.0; - } - } - /// \e - virtual double _getObjCoeff(int i) { - return lpx_get_obj_coef(lp, i); - } - /// \e - virtual void _setObjCoeff(int i, double obj_coef) { - lpx_set_obj_coef(lp, i, obj_coef); - } - public: - /// \e - void solveSimplex() { lpx_simplex(lp); } - /// \e - void solvePrimalSimplex() { lpx_simplex(lp); } - /// \e - void solveDualSimplex() { lpx_simplex(lp); } - protected: - virtual double _getPrimal(int i) { - return lpx_get_col_prim(lp, i); - } - public: - /// \e - double getObjVal() { return lpx_get_obj_val(lp); } - /// \e - int rowNum() const { return lpx_get_num_rows(lp); } - /// \e - int colNum() const { return lpx_get_num_cols(lp); } - /// \e - int warmUp() { return lpx_warm_up(lp); } - /// \e - void printWarmUpStatus(int i) { - switch (i) { - case LPX_E_OK: cout << "LPX_E_OK" << endl; break; - case LPX_E_EMPTY: cout << "LPX_E_EMPTY" << endl; break; - case LPX_E_BADB: cout << "LPX_E_BADB" << endl; break; - case LPX_E_SING: cout << "LPX_E_SING" << endl; break; - } - } - /// \e - int getPrimalStatus() { return lpx_get_prim_stat(lp); } - /// \e - void printPrimalStatus(int i) { - switch (i) { - case LPX_P_UNDEF: cout << "LPX_P_UNDEF" << endl; break; - case LPX_P_FEAS: cout << "LPX_P_FEAS" << endl; break; - case LPX_P_INFEAS: cout << "LPX_P_INFEAS" << endl; break; - case LPX_P_NOFEAS: cout << "LPX_P_NOFEAS" << endl; break; - } - } - /// \e - int getDualStatus() { return lpx_get_dual_stat(lp); } - /// \e - void printDualStatus(int i) { - switch (i) { - case LPX_D_UNDEF: cout << "LPX_D_UNDEF" << endl; break; - case LPX_D_FEAS: cout << "LPX_D_FEAS" << endl; break; - case LPX_D_INFEAS: cout << "LPX_D_INFEAS" << endl; break; - case LPX_D_NOFEAS: cout << "LPX_D_NOFEAS" << endl; break; - } - } - /// Returns the status of the slack variable assigned to row \c row. - int getRowStat(const Row& row) { - return lpx_get_row_stat(lp, row_iter_map[row]); - } - /// \e - void printRowStatus(int i) { - switch (i) { - case LPX_BS: cout << "LPX_BS" << endl; break; - case LPX_NL: cout << "LPX_NL" << endl; break; - case LPX_NU: cout << "LPX_NU" << endl; break; - case LPX_NF: cout << "LPX_NF" << endl; break; - case LPX_NS: cout << "LPX_NS" << endl; break; - } - } - /// Returns the status of the variable assigned to column \c col. - int getColStat(const Col& col) { - return lpx_get_col_stat(lp, col_iter_map[col]); - } - /// \e - void printColStatus(int i) { - switch (i) { - case LPX_BS: cout << "LPX_BS" << endl; break; - case LPX_NL: cout << "LPX_NL" << endl; break; - case LPX_NU: cout << "LPX_NU" << endl; break; - case LPX_NF: cout << "LPX_NF" << endl; break; - case LPX_NS: cout << "LPX_NS" << endl; break; - } - } - - // MIP - /// \e - void solveBandB() { lpx_integer(lp); } - /// \e - void setLP() { lpx_set_class(lp, LPX_LP); } - /// \e - void setMIP() { lpx_set_class(lp, LPX_MIP); } - protected: - /// \e - void _setColCont(int i) { lpx_set_col_kind(lp, i, LPX_CV); } - /// \e - void _setColInt(int i) { lpx_set_col_kind(lp, i, LPX_IV); } - /// \e - double _getMIPPrimal(int i) { return lpx_mip_col_val(lp, i); } - }; - - /// @} - -} //namespace lemon - -#endif //LEMON_LP_SOLVER_BASE_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/lp/lp_solver_wrapper.h --- a/src/work/marci/lp/lp_solver_wrapper.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,431 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_LP_SOLVER_WRAPPER_H -#define LEMON_LP_SOLVER_WRAPPER_H - -///\ingroup misc -///\file -///\brief Dijkstra algorithm. - -// #include -#include -// #include -//#include -extern "C" { -#include "glpk.h" -} - -#include -#include -#include -#include -#include -#include - -//#include -//#include -//#include -#include -//#include -//#include -//#include -//#include -//#include - -using std::cout; -using std::cin; -using std::endl; - -namespace lemon { - - - /// \addtogroup misc - /// @{ - - /// \brief A partitioned vector with iterable classes. - /// - /// This class implements a container in which the data is stored in an - /// stl vector, the range is partitioned into sets and each set is - /// doubly linked in a list. - /// That is, each class is iterable by lemon iterators, and any member of - /// the vector can bo moved to an other class. - template - class IterablePartition { - protected: - struct Node { - T data; - int prev; //invalid az -1 - int next; - }; - std::vector nodes; - struct Tip { - int first; - int last; - }; - std::vector tips; - public: - /// The classes are indexed by integers from \c 0 to \c classNum()-1. - int classNum() const { return tips.size(); } - /// This lemon style iterator iterates through a class. - class ClassIt; - /// Constructor. The number of classes is to be given which is fixed - /// over the life of the container. - /// The partition classes are indexed from 0 to class_num-1. - IterablePartition(int class_num) { - for (int i=0; i::ClassIt RowIt; - ///. - IterablePartition row_iter_map; - ///. - typedef IterablePartition::ClassIt ColIt; - ///. - IterablePartition col_iter_map; - //std::vector row_id_to_lp_row_id; - //std::vector col_id_to_lp_col_id; - ///. - const int VALID_ID; - ///. - const int INVALID_ID; - - public: - ///. - LPSolverWrapper() : lp(lpx_create_prob()), - row_iter_map(2), - col_iter_map(2), - //row_id_to_lp_row_id(), col_id_to_lp_col_id(), - VALID_ID(0), INVALID_ID(1) { - lpx_set_int_parm(lp, LPX_K_DUAL, 1); - } - ///. - ~LPSolverWrapper() { - lpx_delete_prob(lp); - } - ///. - void setMinimize() { - lpx_set_obj_dir(lp, LPX_MIN); - } - ///. - void setMaximize() { - lpx_set_obj_dir(lp, LPX_MAX); - } - ///. - ColIt addCol() { - int i=lpx_add_cols(lp, 1); - ColIt col_it; - col_iter_map.first(col_it, INVALID_ID); - if (col_iter_map.valid(col_it)) { //van hasznalhato hely - col_iter_map.set(col_it, INVALID_ID, VALID_ID); - col_iter_map[col_it]=i; - //col_id_to_lp_col_id[col_iter_map[col_it]]=i; - } else { //a cucc vegere kell inzertalni mert nincs szabad hely - //col_id_to_lp_col_id.push_back(i); - //int j=col_id_to_lp_col_id.size()-1; - col_it=col_iter_map.push_back(i, VALID_ID); - } -// edge_index_map.set(e, i); -// lpx_set_col_bnds(lp, i, LPX_DB, 0.0, 1.0); -// lpx_set_obj_coef(lp, i, cost[e]); - return col_it; - } - ///. - RowIt addRow() { - int i=lpx_add_rows(lp, 1); - RowIt row_it; - row_iter_map.first(row_it, INVALID_ID); - if (row_iter_map.valid(row_it)) { //van hasznalhato hely - row_iter_map.set(row_it, INVALID_ID, VALID_ID); - row_iter_map[row_it]=i; - } else { //a cucc vegere kell inzertalni mert nincs szabad hely - row_it=row_iter_map.push_back(i, VALID_ID); - } - return row_it; - } - //pair-bol kell megadni egy std range-et - ///. - template - void setColCoeffs(const ColIt& col_it, - Begin begin, End end) { - int mem_length=1+lpx_get_num_rows(lp); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for ( ; begin!=end; ++begin) { - ++length; - indices[length]=row_iter_map[begin->first]; - doubles[length]=begin->second; - } - lpx_set_mat_col(lp, col_iter_map[col_it], length, indices, doubles); - delete [] indices; - delete [] doubles; - } - //pair-bol kell megadni egy std range-et - ///. - template - void setRowCoeffs(const RowIt& row_it, - Begin begin, End end) { - int mem_length=1+lpx_get_num_cols(lp); - int* indices = new int[mem_length]; - double* doubles = new double[mem_length]; - int length=0; - for ( ; begin!=end; ++begin) { - ++length; - indices[length]=col_iter_map[begin->first]; - doubles[length]=begin->second; - } - lpx_set_mat_row(lp, row_iter_map[row_it], length, indices, doubles); - delete [] indices; - delete [] doubles; - } - ///. - void eraseCol(const ColIt& col_it) { - col_iter_map.set(col_it, VALID_ID, INVALID_ID); - int cols[2]; - cols[1]=col_iter_map[col_it]; - lpx_del_cols(lp, 1, cols); - col_iter_map[col_it]=0; //glpk specifikus - ColIt it; - for (col_iter_map.first(it, VALID_ID); - col_iter_map.valid(it); col_iter_map.next(it)) { - if (col_iter_map[it]>cols[1]) --col_iter_map[it]; - } - } - ///. - void eraseRow(const RowIt& row_it) { - row_iter_map.set(row_it, VALID_ID, INVALID_ID); - int rows[2]; - rows[1]=row_iter_map[row_it]; - lpx_del_rows(lp, 1, rows); - row_iter_map[row_it]=0; //glpk specifikus - RowIt it; - for (row_iter_map.first(it, VALID_ID); - row_iter_map.valid(it); row_iter_map.next(it)) { - if (row_iter_map[it]>rows[1]) --row_iter_map[it]; - } - } - ///. - void setColBounds(const ColIt& col_it, int bound_type, - double lo, double up) { - lpx_set_col_bnds(lp, col_iter_map[col_it], bound_type, lo, up); - } - ///. - double getObjCoef(const ColIt& col_it) { - return lpx_get_obj_coef(lp, col_iter_map[col_it]); - } - ///. - void setRowBounds(const RowIt& row_it, int bound_type, - double lo, double up) { - lpx_set_row_bnds(lp, row_iter_map[row_it], bound_type, lo, up); - } - ///. - void setObjCoef(const ColIt& col_it, double obj_coef) { - lpx_set_obj_coef(lp, col_iter_map[col_it], obj_coef); - } - ///. - void solveSimplex() { lpx_simplex(lp); } - ///. - void solvePrimalSimplex() { lpx_simplex(lp); } - ///. - void solveDualSimplex() { lpx_simplex(lp); } - ///. - double getPrimal(const ColIt& col_it) { - return lpx_get_col_prim(lp, col_iter_map[col_it]); - } - ///. - double getObjVal() { return lpx_get_obj_val(lp); } - ///. - int rowNum() const { return lpx_get_num_rows(lp); } - ///. - int colNum() const { return lpx_get_num_cols(lp); } - ///. - int warmUp() { return lpx_warm_up(lp); } - ///. - void printWarmUpStatus(int i) { - switch (i) { - case LPX_E_OK: cout << "LPX_E_OK" << endl; break; - case LPX_E_EMPTY: cout << "LPX_E_EMPTY" << endl; break; - case LPX_E_BADB: cout << "LPX_E_BADB" << endl; break; - case LPX_E_SING: cout << "LPX_E_SING" << endl; break; - } - } - ///. - int getPrimalStatus() { return lpx_get_prim_stat(lp); } - ///. - void printPrimalStatus(int i) { - switch (i) { - case LPX_P_UNDEF: cout << "LPX_P_UNDEF" << endl; break; - case LPX_P_FEAS: cout << "LPX_P_FEAS" << endl; break; - case LPX_P_INFEAS: cout << "LPX_P_INFEAS" << endl; break; - case LPX_P_NOFEAS: cout << "LPX_P_NOFEAS" << endl; break; - } - } - ///. - int getDualStatus() { return lpx_get_dual_stat(lp); } - ///. - void printDualStatus(int i) { - switch (i) { - case LPX_D_UNDEF: cout << "LPX_D_UNDEF" << endl; break; - case LPX_D_FEAS: cout << "LPX_D_FEAS" << endl; break; - case LPX_D_INFEAS: cout << "LPX_D_INFEAS" << endl; break; - case LPX_D_NOFEAS: cout << "LPX_D_NOFEAS" << endl; break; - } - } - /// Returns the status of the slack variable assigned to row \c row_it. - int getRowStat(const RowIt& row_it) { - return lpx_get_row_stat(lp, row_iter_map[row_it]); - } - ///. - void printRowStatus(int i) { - switch (i) { - case LPX_BS: cout << "LPX_BS" << endl; break; - case LPX_NL: cout << "LPX_NL" << endl; break; - case LPX_NU: cout << "LPX_NU" << endl; break; - case LPX_NF: cout << "LPX_NF" << endl; break; - case LPX_NS: cout << "LPX_NS" << endl; break; - } - } - /// Returns the status of the variable assigned to column \c col_it. - int getColStat(const ColIt& col_it) { - return lpx_get_col_stat(lp, col_iter_map[col_it]); - } - ///. - void printColStatus(int i) { - switch (i) { - case LPX_BS: cout << "LPX_BS" << endl; break; - case LPX_NL: cout << "LPX_NL" << endl; break; - case LPX_NU: cout << "LPX_NU" << endl; break; - case LPX_NF: cout << "LPX_NF" << endl; break; - case LPX_NS: cout << "LPX_NS" << endl; break; - } - } - }; - - /// @} - -} //namespace lemon - -#endif //LEMON_LP_SOLVER_WRAPPER_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/lp/magic_square.cc --- a/src/work/marci/lp/magic_square.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,90 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -#include - -using std::cout; -using std::endl; -using namespace lemon; - -/* - On an 1537Mhz PC, the run times with - glpk are the following. - for n=3,4, some secondes - for n=5, 25 hours - */ - -int main(int, char **) { - const int n=4; - const double row_sum=(1.0+n*n)*n/2; - Timer ts; - ts.reset(); - typedef LPGLPK LPSolver; - typedef LPSolver::Col Col; - LPSolver lp; - typedef std::map, Col> Coords; - Coords x; - // we create a new variable for each entry - // of the magic square - for (int i=1; i<=n; ++i) { - for (int j=1; j<=n; ++j) { - Col col=lp.addCol(); - x[std::make_pair(i,j)]=col; - lp.setColLowerBound(col, 1.0); - lp.setColUpperBound(col, double(n*n)); - } - } - LPSolver::Expression expr3, expr4; - for (int i=1; i<=n; ++i) { - LPSolver::Expression expr1, expr2; - for (int j=1; j<=n; ++j) { - expr1+=x[std::make_pair(i, j)]; - expr2+=x[std::make_pair(j, i)]; - } - // sum of rows and columns - lp.addRow(expr1==row_sum); - lp.addRow(expr2==row_sum); - expr3+=x[std::make_pair(i, i)]; - expr4+=x[std::make_pair(i, (n+1)-i)]; - } - // sum of the diagonal entries - lp.addRow(expr3==row_sum); - lp.addRow(expr4==row_sum); - lp.solveSimplex(); - cout << "elapsed time: " << ts << endl; - for (int i=1; i<=n; ++i) { - for (int j=1; j<=n; ++j) { - cout << "x("<0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - -// { -// std::cout << "preflow ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// max_flow_test.preflow(Preflow, Graph::EdgeMap >::GEN_FLOW); -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - -// { -// std::cout << "wrapped preflow ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// pre_flow_res.run(); -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "flow value: "<< pre_flow_test.flowValue() << std::endl; -// } - - { - std::cout << "physical blocking flow augmentation ..." << std::endl; - for (EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - - for (EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - -// { -// std::cout << "faster physical blocking flow augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (max_flow_test.augmentOnBlockingFlow1()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; -// } - - { - std::cout << "on-the-fly blocking flow augmentation ..." << std::endl; - for (EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow2()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - - for (EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - -// { -// std::cout << "on-the-fly shortest path augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (augmenting_flow_test.augmentOnShortestPath()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - -// { -// std::cout << "on-the-fly shortest path augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (augmenting_flow_test.augmentOnShortestPath2()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - - ts.reset(); - - Edge e=g.addEdge(t, s); - Graph::EdgeMap cost(g, 0); - cost.set(e, -1); - cap.set(e, 10000); - typedef ConstMap Excess; - Excess excess(0); - typedef ConstMap LCap; - LCap lcap(0); - - MinCostGenFlow - min_cost(g, excess, lcap, cap, flow, cost); - min_cost.feasible(); - min_cost.runByLP(); - - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< flow[e] << std::endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/lp/max_flow_expression.cc --- a/src/work/marci/lp/max_flow_expression.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,109 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -#include -#include -#include -#include -#include - -using std::cout; -using std::endl; -using namespace lemon; - -template -class PrimalMap { -protected: - LPGLPK* lp; - EdgeIndexMap* edge_index_map; -public: - PrimalMap(LPGLPK& _lp, EdgeIndexMap& _edge_index_map) : - lp(&_lp), edge_index_map(&_edge_index_map) { } - double operator[](Edge e) const { - return lp->getPrimal((*edge_index_map)[e]); - } -}; - -// Use a DIMACS max flow file as stdin. -// max_flow_expresion < dimacs_max_flow_file - -int main(int, char **) { - - typedef ListGraph Graph; - typedef Graph::Node Node; - typedef Graph::Edge Edge; - typedef Graph::EdgeIt EdgeIt; - - Graph g; - - Node s, t; - Graph::EdgeMap cap(g); - readDimacs(std::cin, g, cap, s, t); - Timer ts; - - typedef LPGLPK LPSolver; - LPSolver lp; - lp.setMaximize(); - typedef LPSolver::Col Col; - typedef LPSolver::Row Row; - typedef Graph::EdgeMap EdgeIndexMap; - typedef Graph::NodeMap NodeIndexMap; - EdgeIndexMap edge_index_map(g); - NodeIndexMap node_index_map(g); - PrimalMap flow(lp, edge_index_map); - - // nonnegativity of flow and capacity function - for (Graph::EdgeIt e(g); e!=INVALID; ++e) { - Col col=lp.addCol(); - edge_index_map.set(e, col); - // interesting property in GLPK: - // if you change the order of the following two lines, the - // two runs of GLPK are extremely different - lp.setColLowerBound(col, 0); - lp.setColUpperBound(col, cap[e]); - } - - for (Graph::NodeIt n(g); n!=INVALID; ++n) { - LPSolver::Expression expr; - for (Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) - expr+=edge_index_map[e]; - for (Graph::InEdgeIt e(g, n); e!=INVALID; ++e) - expr-=edge_index_map[e]; - // cost function - if (n==s) { - lp.setObjCoeffs(expr); - } - // flow conservation constraints - if ((n!=s) && (n!=t)) { - node_index_map.set(n, lp.addRow(expr == 0.0)); - } - } - lp.solveSimplex(); - cout << "elapsed time: " << ts << endl; -// cout << "rows:" << endl; -// for ( -// LPSolver::Rows::ClassIt i(lp.row_iter_map, 0); -// i!=INVALID; -// ++i) { -// cout << i << " "; -// } -// cout << endl; -// cout << "cols:" << endl; -// for ( -// LPSolver::Cols::ClassIt i(lp.col_iter_map, 0); -// i!=INVALID; -// ++i) { -// cout << i << " "; -// } -// cout << endl; - lp.setMIP(); - cout << "elapsed time: " << ts << endl; - for (LPSolver::Cols::ClassIt it(lp.col_iter_map ,1); it!=INVALID; ++it) { - lp.setColInt(it); - } - cout << "elapsed time: " << ts << endl; - lp.solveBandB(); - cout << "elapsed time: " << ts << endl; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/lp/min_cost_gen_flow.h --- a/src/work/marci/lp/min_cost_gen_flow.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,268 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_MIN_COST_GEN_FLOW_H -#define LEMON_MIN_COST_GEN_FLOW_H -#include -//#include - -#include -#include -//#include -//#include -//#include -#include -#include -//#include -//#include -#include -#include - -namespace lemon { - - template - class PrimalMap { - protected: - LPGLPK* lp; - EdgeIndexMap* edge_index_map; - public: - PrimalMap(LPGLPK& _lp, EdgeIndexMap& _edge_index_map) : - lp(&_lp), edge_index_map(&_edge_index_map) { } - double operator[](Edge e) const { - return lp->getPrimal((*edge_index_map)[e]); - } - }; - - // excess: rho-delta egyelore csak =0-ra. - template , - typename LCapMap=typename Graph::template EdgeMap, - typename CapMap=typename Graph::template EdgeMap, - typename FlowMap=typename Graph::template EdgeMap, - typename CostMap=typename Graph::template EdgeMap > - class MinCostGenFlow { - protected: - const Graph& g; - const Excess& excess; - const LCapMap& lcapacity; - const CapMap& capacity; - FlowMap& flow; - const CostMap& cost; - public: - MinCostGenFlow(const Graph& _g, const Excess& _excess, - const LCapMap& _lcapacity, const CapMap& _capacity, - FlowMap& _flow, - const CostMap& _cost) : - g(_g), excess(_excess), lcapacity(_lcapacity), - capacity(_capacity), flow(_flow), cost(_cost) { } - bool feasible() { - // std::cout << "making new vertices..." << std::endl; - typedef ListGraph Graph2; - Graph2 g2; - typedef MergeEdgeGraphWrapper GW; - // std::cout << "merging..." << std::endl; - GW gw(g, g2); - typename GW::Node s(INVALID, g2.addNode(), true); - typename GW::Node t(INVALID, g2.addNode(), true); - typedef SmartGraph Graph3; - // std::cout << "making extender graph..." << std::endl; - typedef NewEdgeSetGraphWrapper2 GWW; -// { -// checkConcept(); -// } - GWW gww(gw); - typedef AugmentingGraphWrapper GWWW; - GWWW gwww(gw, gww); - - // std::cout << "making new edges..." << std::endl; - typename GWWW::template EdgeMap translated_cap(gwww); - - for (typename GW::EdgeIt e(gw); e!=INVALID; ++e) { - translated_cap.set(typename GWWW::Edge(e,INVALID,false), - capacity[e]-lcapacity[e]); - // cout << "t_cap " << gw.id(e) << " " - // << translated_cap[typename GWWW::Edge(e,INVALID,false)] << endl; - } - - Num expected=0; - - // std::cout << "making new edges 2..." << std::endl; - for (typename Graph::NodeIt n(g); n!=INVALID; ++n) { - Num a=0; - for (typename Graph::InEdgeIt e(g, n); e!=INVALID; ++e) - a+=lcapacity[e]; - for (typename Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) - a-=lcapacity[e]; - if (excess[n]>a) { - typename GWW::Edge e= - gww.addEdge(typename GW::Node(n,INVALID,false), t); - translated_cap.set(typename GWWW::Edge(INVALID, e, true), - excess[n]-a); - // std::cout << g.id(n) << "->t " << excess[n]-a << std::endl; - } - if (excess[n]" << g.id(n) << " "<< a-excess[n] < translated_flow(gwww, 0); - Preflow preflow(gwww, s, t, - translated_cap, translated_flow); - preflow.run(); - // std::cout << "fv: " << preflow.flowValue() << std::endl; - // std::cout << "expected: " << expected << std::endl; - - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - typename GW::Edge ew(e, INVALID, false); - typename GWWW::Edge ewww(ew, INVALID, false); - flow.set(e, translated_flow[ewww]+lcapacity[e]); - } - return (preflow.flowValue()>=expected); - } - // for nonnegative costs - bool run() { - // std::cout << "making new vertices..." << std::endl; - typedef ListGraph Graph2; - Graph2 g2; - typedef MergeEdgeGraphWrapper GW; - // std::cout << "merging..." << std::endl; - GW gw(g, g2); - typename GW::Node s(INVALID, g2.addNode(), true); - typename GW::Node t(INVALID, g2.addNode(), true); - typedef SmartGraph Graph3; - // std::cout << "making extender graph..." << std::endl; - typedef NewEdgeSetGraphWrapper2 GWW; -// { -// checkConcept(); -// } - GWW gww(gw); - typedef AugmentingGraphWrapper GWWW; - GWWW gwww(gw, gww); - - // std::cout << "making new edges..." << std::endl; - typename GWWW::template EdgeMap translated_cap(gwww); - - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - typename GW::Edge ew(e, INVALID, false); - typename GWWW::Edge ewww(ew, INVALID, false); - translated_cap.set(ewww, capacity[e]-lcapacity[e]); - // cout << "t_cap " << g.id(e) << " " - // << translated_cap[ewww] << endl; - } - - Num expected=0; - - // std::cout << "making new edges 2..." << std::endl; - for (typename Graph::NodeIt n(g); n!=INVALID; ++n) { - // std::cout << "node: " << g.id(n) << std::endl; - Num a=0; - for (typename Graph::InEdgeIt e(g, n); e!=INVALID; ++e) { - a+=lcapacity[e]; - // std::cout << "bee: " << g.id(e) << " " << lcapacity[e] << std::endl; - } - for (typename Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) { - a-=lcapacity[e]; - // std::cout << "kie: " << g.id(e) << " " << lcapacity[e] << std::endl; - } - // std::cout << "excess " << g.id(n) << ": " << a << std::endl; - if (0>a) { - typename GWW::Edge e= - gww.addEdge(typename GW::Node(n,INVALID,false), t); - translated_cap.set(typename GWWW::Edge(INVALID, e, true), - -a); - // std::cout << g.id(n) << "->t " << -a << std::endl; - } - if (0" << g.id(n) << " "<< a < translated_cost(gwww, 0); - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - translated_cost.set(typename GWWW::Edge( - typename GW::Edge(e, INVALID, false), INVALID, false), cost[e]); - } - // typename GWWW::template EdgeMap translated_flow(gwww, 0); - MinCostFlow, - typename GWWW::template EdgeMap > - min_cost_flow(gwww, translated_cost, translated_cap, - s, t); - while (min_cost_flow.augment()) { } - std::cout << "fv: " << min_cost_flow.flowValue() << std::endl; - std::cout << "expected: " << expected << std::endl; - - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - typename GW::Edge ew(e, INVALID, false); - typename GWWW::Edge ewww(ew, INVALID, false); - // std::cout << g.id(e) << " " << flow[e] << std::endl; - flow.set(e, lcapacity[e]+ - min_cost_flow.getFlow()[ewww]); - } - return (min_cost_flow.flowValue()>=expected); - } - void runByLP() { - typedef LPGLPK LPSolver; - LPSolver lp; - lp.setMinimize(); - typedef LPSolver::ColIt ColIt; - typedef LPSolver::RowIt RowIt; - typedef typename Graph::template EdgeMap EdgeIndexMap; - EdgeIndexMap edge_index_map(g); - PrimalMap lp_flow(lp, edge_index_map); - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - ColIt col_it=lp.addCol(); - edge_index_map.set(e, col_it); - if (lcapacity[e]==capacity[e]) - lp.setColBounds(col_it, LPSolver::FIXED, lcapacity[e], capacity[e]); - else - lp.setColBounds(col_it, LPSolver::DOUBLE, lcapacity[e], capacity[e]); - lp.setObjCoef(col_it, cost[e]); - } - LPSolver::ColIt col_it; - for (lp.col_iter_map.first(col_it, lp.VALID_CLASS); - lp.col_iter_map.valid(col_it); - lp.col_iter_map.next(col_it)) { -// std::cout << "ize " << lp.col_iter_map[col_it] << std::endl; - } - for (typename Graph::NodeIt n(g); n!=INVALID; ++n) { - typename Graph::template EdgeMap coeffs(g, 0); - for (typename Graph::InEdgeIt e(g, n); e!=INVALID; ++e) - coeffs.set(e, coeffs[e]+1); - for (typename Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) - coeffs.set(e, coeffs[e]-1); - RowIt row_it=lp.addRow(); - typename std::vector< std::pair > row; - //std::cout << "node:" < -#include - -#include -#include - -using namespace lemon; - -int main() -{ - typedef SageGraph Graph; - Graph g; - Graph::Node n1=g.addNode(); - Graph::Node n2=g.addNode(); - Graph::NodeIt n; - FOR_EACH_GLOB(n, g) { - std::cout << g.id(n) << " "; - } - std::cout << std::endl; - FOR_EACH_LOC(Graph::NodeIt, m, g) { - std::cout << g.id(m) << " "; - } - std::cout << std::endl; - - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/makefile --- a/src/work/marci/makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,54 +0,0 @@ -CXX2 = g++-2.95 -CXX3=$(CXX) -BOOSTROOT ?= /home/marci/boost -INCLUDEDIRS ?= -ftemplate-depth-50 -I../{jacint,marci,alpar,klao,akos,athos} -I../.. -I.. -I$(BOOSTROOT) - -LEDABINARIES = leda_graph_demo leda_bfs_dfs max_bipartite_matching_demo -BINARIES = merge_node_graph_wrapper_test# bfsit_vs_byhand max_flow_demo bfs_mm_test# sub_graph_wrapper_demo.cc graph_wrapper_time iterator_bfs_demo macro_test lg_vs_sg_vs_sg bipartite_graph_wrapper_test bipartite_matching_demo top_sort_test max_flow_1 proba7 proba10 -#BINARIES = preflow_bug -#gw_vs_not preflow_demo_boost edmonds_karp_demo_boost preflow_demo_jacint preflow_demo_athos edmonds_karp_demo_alpar preflow_demo_leda - -include ../makefile - -leda_graph_demo.o: - $(CXX3) -Wall -O -I.. -I../alpar -I$(LEDAROOT)/incl -I. -c leda_graph_demo.cc - -leda_graph_demo: leda_graph_demo.o - $(CXX3) -Wall -O -L$(LEDAROOT) -o leda_graph_demo leda_graph_demo.o -lG -lL -lm - -max_bipartite_matching_demo.o: - $(CXX3) $(CXXFLAGS) -I$(LEDAROOT)/incl -c max_bipartite_matching_demo.cc - -max_bipartite_matching_demo: max_bipartite_matching_demo.o - $(CXX3) $(CXXFLAGS) -L$(LEDAROOT) -o max_bipartite_matching_demo max_bipartite_matching_demo.o -lG -lL -lm - -leda_bfs_dfs.o: - $(CXX3) -Wall -O -I.. -I../alpar -I$(LEDAROOT)/incl -I. -c leda_bfs_dfs.cc - -leda_bfs_dfs: leda_bfs_dfs.o - $(CXX3) -Wall -O -L$(LEDAROOT) -o leda_bfs_dfs leda_bfs_dfs.o -lG -lL -lm - -gw_vs_not: - $(CXX3) $(CXXFLAGS) -o gw_vs_not gw_vs_not.cc - -edmonds_karp_demo_alpar: - $(CXX3) $(CXXFLAGS) -I. -I.. -I../alpar -o edmonds_karp_demo_alpar edmonds_karp_demo_alpar.cc - -preflow_demo_leda: - $(CXX2) -W -Wall -03 -DLEDA_PREFIX -I. -I$(LEDAROOT)/incl -L$(LEDAROOT) -o preflow_demo_leda preflow_demo_leda.cc -lP -lm -lL -lG - -preflow_demo_leda_uj: - $(CXX3) -Wall -O3 -I$(LEDAROOT)/incl -I. -L$(LEDAROOT) -o preflow_demo_leda_uj preflow_demo_leda_uj.cc -lG -lL -lm - -preflow_demo_boost: - $(CXX2) -ftemplate-depth-30 -O3 -I. -I/home/marci/boost -o preflow_demo_boost preflow_demo_boost.cc - -edmonds_karp_demo_boost: - $(CXX2) -ftemplate-depth-30 -O3 -I. -I/home/marci/boost -o edmonds_karp_demo_boost edmonds_karp_demo_boost.cc - -preflow_demo_jacint: - $(CXX3) $(CXXFLAGS) -I. -I.. -I../jacint -o preflow_demo_jacint preflow_demo_jacint.cc - -preflow_demo_athos: - $(CXX3) $(CXXFLAGS) -I. -I.. -I../athos -o preflow_demo_athos preflow_demo_athos.cc - diff -r ee5959aa4410 -r c280de819a73 src/work/marci/max_bipartite_matching.h --- a/src/work/marci/max_bipartite_matching.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,140 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_MAX_BIPARTITE_MATCHING_H -#define LEMON_MAX_BIPARTITE_MATCHING_H - -/// \ingroup galgs -/// \file -/// \brief Maximum bipartite matchings, b-matchings and -/// capacitated b-matchings. -/// -/// This file contains a class for bipartite maximum matching, b-matchings -/// and capacitated b-matching computations. -/// -// /// \author Marton Makai - -//#include -#include -//#include -#include - -namespace lemon { - - // template - // class MaxMatching : public MaxFlow, - // stGraphWrapper:: EdgeMapWrapper, stGraphWrapper::EdgeMapWrapper > { - // typedef MaxFlow, - // stGraphWrapper::EdgeMapWrapper, - // stGraphWrapper::EdgeMapWrapper > - // Parent; - // protected: - // stGraphWrapper gw; - // stGraphWrapper::EdgeMapWrapper cap; - // stGraphWrapper::EdgeMapWrapper flow; - // //graph* g; - // //EdgeCap* edge_cap; - // //EdgeFlow* edge_flow; - // public: - // MaxMatching(Graph& _g, EdgeCap& _edge_cap, NodeCap& _node_cap, - // EdgeFlow& _edge_flow, NodeFlow& _node_flow) : - // MaxFlow(), gw(_g), - // cap(_edge_cap, _node_cap), flow(_edge_flow, _node_flow) { - // Parent::set(gw, cap, flow); - // } - // }; - - /// \brief A bipartite matching class. - /// - /// This class reduces the matching problem to a flow problem and - /// a preflow is used on a wrapper. Such a generic approach means that - /// matchings, b-matchings an capacitated b-matchings can be handled in - /// a similar way. Due to the efficiency of the preflow algorithm, an - /// efficient matching framework is obtained. - /// \ingroup galgs - template - class MaxBipartiteMatching { - protected: - // EdgeCap* edge_cap; - // NodeCap* node_cap; - // EdgeFlow* edge_flow; - // NodeFlow* node_flow; - typedef stBipartiteGraphWrapper stGW; - stGW stgw; - typedef typename stGW::template EdgeMapWrapper CapMap; - CapMap cap; - NodeFlow* node_flow; - typedef typename stGW::template EdgeMapWrapper FlowMap; - FlowMap flow; - typedef MaxFlow MaxFlow; - MaxFlow mf; - //graph* g; - //EdgeCap* edge_cap; - //EdgeFlow* edge_flow; - public: - enum MatchingEnum{ - ZERO_MATCHING, - GEN_MATCHING, - GEN_MATCHING_WITH_GOOD_NODE_FLOW, - NO_MATCHING - }; - /// For capacitated b-matchings, edge-caoacities and node-capacities - /// have to be given. After running \c run the matching is is given - /// back in the edge-map \c _edge_flow and \c _node_map can be used - /// to obtain saturation information about nodes. - ///\bug Note that the values in _edge_flow and _node_flow have - /// to form a flow. - MaxBipartiteMatching(Graph& _g, EdgeCap& _edge_cap, NodeCap& _node_cap, - EdgeFlow& _edge_flow, NodeFlow& _node_flow) : - stgw(_g), - cap(_edge_cap, _node_cap), - node_flow(0), - flow(_edge_flow, _node_flow), - mf(stgw, stgw.S_NODE, stgw.T_NODE, cap, flow) { } - /// If the saturation information of nodes is not needed that the use of - /// this constructor is more comfortable. - ///\bug Note that the values in _edge_flow and _node_flow have - /// to form a flow. - MaxBipartiteMatching(Graph& _g, EdgeCap& _edge_cap, NodeCap& _node_cap, - EdgeFlow& _edge_flow/*, NodeFlow& _node_flow*/) : - stgw(_g), - cap(_edge_cap, _node_cap), - node_flow(new NodeFlow(_g)), - flow(_edge_flow, *node_flow), - mf(stgw, stgw.S_NODE, stgw.T_NODE, cap, flow) { } - /// The class have a nontrivial destructor. - ~MaxBipartiteMatching() { if (node_flow) delete node_flow; } - /// run computes the max matching. - void run(MatchingEnum me=ZERO_MATCHING) { - switch (me) { - case ZERO_MATCHING: - mf.run(MaxFlow::ZERO_FLOW); - break; - case GEN_MATCHING: - { - typename stGW::OutEdgeIt e; - for (stgw.first(e, stgw.S_NODE); stgw.valid(e); stgw.next(e)) - flow.set(e, cap[e]); - } - { - typename stGW::InEdgeIt e; - for (stgw.first(e, stgw.T_NODE); stgw.valid(e); stgw.next(e)) - flow.set(e, 0); - } - mf.run(MaxFlow::PRE_FLOW); - break; - case GEN_MATCHING_WITH_GOOD_NODE_FLOW: - mf.run(MaxFlow::GEN_FLOW); - break; - case NO_MATCHING: - mf.run(MaxFlow::NO_FLOW); - break; - } - } - /// The matching value after running \c run. - int matchingValue() const { return mf.flowValue(); } - }; - -} //namespace lemon - -#endif //LEMON_MAX_BIPARTITE_MATCHING_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/max_flow2.dat --- a/src/work/marci/max_flow2.dat Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,4 +0,0 @@ -p max 2 1 -n 1 s -n 2 t -a 1 2 5 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/max_flow_1.cc --- a/src/work/marci/max_flow_1.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,60 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -#include -#include -#include -//#include -#include -//#include -#include - -using namespace lemon; - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo < dimacs_max_flow_file - - -int main(int, char **) { - - typedef SageGraph MutableGraph; - - typedef SmartGraph Graph; - // typedef ListGraph Graph; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - - Graph g; - Node s, t; - Graph::EdgeMap cap(g); - //readDimacsMaxFlow(std::cin, g, s, t, cap); - readDimacs(std::cin, g, cap, s, t); - Timer ts; - Graph::EdgeMap flow(g); //0 flow - MaxFlow, Graph::EdgeMap > - max_flow_test(g, s, t, cap, flow); - - { - std::cout << "preflow ..." << std::endl; - FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); - ts.reset(); - max_flow_test.preflowPhase1(MaxFlow, Graph::EdgeMap >::ZERO_FLOW); - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - { - std::cout << "preflow ..." << std::endl; - FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); - ts.reset(); - max_flow_test.preflowPhase1(MaxFlow, Graph::EdgeMap >::ZERO_FLOW); - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - } - - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/max_flow_demo.cc --- a/src/work/marci/max_flow_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,155 +0,0 @@ -// -*- c++ -*- - -// Use a DIMACS max flow file as stdin. -// max_flow_demo < dimacs_max_flow_file - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -using namespace lemon; - -int main(int, char **) { - - typedef ListGraph MutableGraph; - typedef SmartGraph Graph; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph g; - - Node s, t; - Graph::EdgeMap cap(g); - //readDimacsMaxFlow(std::cin, g, s, t, cap); - readDimacs(std::cin, g, cap, s, t); - Timer ts; - Graph::EdgeMap flow(g); //0 flow - Preflow, Graph::EdgeMap > - max_flow_test(g, s, t, cap, flow); - AugmentingFlow, Graph::EdgeMap > - augmenting_flow_test(g, s, t, cap, flow); - - Graph::NodeMap cut(g); - - { - std::cout << "preflow ..." << std::endl; - ts.reset(); - max_flow_test.run(); - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - max_flow_test.minCut(cut); - - for(Graph::EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - - { - std::cout << "preflow ..." << std::endl; - for(Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - max_flow_test.run(Preflow, Graph::EdgeMap >::GEN_FLOW); - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - - for(Graph::EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - -// { -// std::cout << "wrapped preflow ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// pre_flow_res.run(); -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "flow value: "<< pre_flow_test.flowValue() << std::endl; -// } - - { - std::cout << "physical blocking flow augmentation ..." << std::endl; - for(Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - - for(Graph::EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - - { - std::cout << "on-the-fly blocking flow augmentation ..." << std::endl; - for(Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnBlockingFlow2()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - - for(Graph::EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - - { - std::cout << "on-the-fly shortest path augmentation ..." << std::endl; - for(Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnShortestPath()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - - for(Graph::EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - - { - std::cout << "on-the-fly shortest path augmentation ..." << std::endl; - for(Graph::EdgeIt e(g); e!=INVALID; ++e) flow.set(e, 0); - ts.reset(); - int i=0; - while (augmenting_flow_test.augmentOnShortestPath2()) { ++i; } - std::cout << "elapsed time: " << ts << std::endl; - std::cout << "number of augmentation phases: " << i << std::endl; - std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - - for(Graph::EdgeIt e(g); e!=INVALID; ++e) { - if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/merge_node_graph_wrapper.h --- a/src/work/marci/merge_node_graph_wrapper.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1189 +0,0 @@ -/* -*- C++ -*- - * src/lemon/merge_node_graph_wrapper.h - Part of LEMON, a generic C++ optimization library - * - * Copyright (C) 2005 Egervary Jeno Kombinatorikus Optimalizalasi Kutatocsoport - * (Egervary Research Group on Combinatorial Optimization, EGRES). - * - * Permission to use, modify and distribute this software is granted - * provided that this copyright notice appears in all copies. For - * precise terms see the accompanying LICENSE file. - * - * This software is provided "AS IS" with no warranty of any kind, - * express or implied, and with no claim as to its suitability for any - * purpose. - * - */ - -#ifndef LEMON_MERGE_NODE_GRAPH_WRAPPER_H -#define LEMON_MERGE_NODE_GRAPH_WRAPPER_H - -#include -#include -#include -#include -#include - -using std::cout; -using std::endl; - -#include -#include - -namespace lemon { - - template - class P1 : public GraphWrapperBase<_Graph1> { - }; - - template - class P2 : public GraphWrapperBase<_Graph2> { - }; - - - template - class MergeNodeGraphWrapperBaseBase : - public P1<_Graph1>, public P2<_Graph2> { - public: - static void printNode() { std::cout << "node: generic" << std::endl; } - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef P1<_Graph1> Parent1; - typedef P2<_Graph2> Parent2; - typedef typename Parent1::Node Graph1Node; - typedef typename Parent2::Node Graph2Node; - protected: - MergeNodeGraphWrapperBaseBase() { } - public: - - class Node : public Graph1Node, public Graph2Node { - friend class MergeNodeGraphWrapperBaseBase<_Graph1, _Graph2>; - protected: - bool backward; //true, iff backward - public: - Node() { } - /// \todo =false is needed, or causes problems? - /// If \c _backward is false, then we get an edge corresponding to the - /// original one, otherwise its oppositely directed pair is obtained. - Node(const Graph1Node& n1, - const Graph2Node& n2, bool _backward) : - Graph1Node(n1), Graph2Node(n2), backward(_backward) { } - Node(Invalid i) : Graph1Node(i), Graph2Node(i), backward(true) { } - bool operator==(const Node& v) const { - if (backward) - return (v.backward && - static_cast(*this)==static_cast(v)); - else - return (!v.backward && - static_cast(*this)==static_cast(v)); - } - bool operator!=(const Node& v) const { - return !(*this==v); - } - }; - - static bool forward(const Node& n) { return !n.backward; } - static bool backward(const Node& n) { return n.backward; } - static void setForward(Node& n) { n.backward=false; } - static void setBackward(Node& n) { n.backward=true; } - }; - - - template - class MergeNodeGraphWrapperBaseBase< - _Graph1, _Graph2, typename boost::enable_if< - boost::is_same >::type> : - public P1<_Graph1>, public P2<_Graph2> { - public: - static void printNode() { std::cout << "node: same" << std::endl; } - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef P1<_Graph1> Parent1; - typedef P2<_Graph2> Parent2; - typedef typename Parent1::Node Graph1Node; - typedef typename Parent2::Node Graph2Node; - protected: - MergeNodeGraphWrapperBaseBase() { } - public: - - class Node : public Graph1Node { - friend class MergeNodeGraphWrapperBaseBase<_Graph1, _Graph2>; - protected: - bool backward; //true, iff backward - public: - Node() { } - /// \todo =false is needed, or causes problems? - /// If \c _backward is false, then we get an edge corresponding to the - /// original one, otherwise its oppositely directed pair is obtained. - Node(const Graph1Node& n1, - const Graph2Node& n2, bool _backward) : - Graph1Node(!_backward ? n1 : n2), backward(_backward) { } - Node(Invalid i) : Graph1Node(i), backward(true) { } - bool operator==(const Node& v) const { - return (backward==v.backward && - static_cast(*this)==static_cast(v)); - } - bool operator!=(const Node& v) const { - return !(*this==v); - } - }; - - static bool forward(const Node& n) { return !n.backward; } - static bool backward(const Node& n) { return n.backward; } - static void setForward(Node& n) { n.backward=false; } - static void setBackward(Node& n) { n.backward=true; } - }; - - - template - class MergeNodeGraphWrapperBaseBase< - _Graph1, _Graph2, typename boost::enable_if< - boost::is_base_and_derived >::type> : - public P1<_Graph1>, public P2<_Graph2> { - public : - static void printNode() { std::cout << "node: 2nd is derived" << std::endl; } - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef P1<_Graph1> Parent1; - typedef P2<_Graph2> Parent2; - typedef typename Parent1::Node Graph1Node; - typedef typename Parent2::Node Graph2Node; - protected: - MergeNodeGraphWrapperBaseBase() { } - public: - - class Node : public Graph2Node { - friend class MergeNodeGraphWrapperBaseBase<_Graph1, _Graph2>; - protected: - bool backward; //true, iff backward - public: - Node() { } - /// \todo =false is needed, or causes problems? - /// If \c _backward is false, then we get an edge corresponding to the - /// original one, otherwise its oppositely directed pair is obtained. - Node(const Graph1Node& n1, - const Graph2Node& n2, bool _backward) : - Graph2Node(n2), backward(_backward) { - if (!backward) *this=n1; - } - Node(Invalid i) : Graph2Node(i), backward(true) { } - bool operator==(const Node& v) const { - if (backward) - return (v.backward && - static_cast(*this)==static_cast(v)); - else - return (!v.backward && - static_cast(*this)==static_cast(v)); - } - bool operator!=(const Node& v) const { - return !(*this==v); - } - }; - - static bool forward(const Node& n) { return !n.backward; } - static bool backward(const Node& n) { return n.backward; } - static void setForward(Node& n) { n.backward=false; } - static void setBackward(Node& n) { n.backward=true; } - }; - - - template - class MergeNodeGraphWrapperBaseBase< - _Graph1, _Graph2, typename boost::enable_if< - boost::is_base_and_derived >::type> : - public P1<_Graph1>, public P2<_Graph2> { - public : - static void printNode() { std::cout << "node: 1st is derived" << std::endl; } - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef P1<_Graph1> Parent1; - typedef P2<_Graph2> Parent2; - typedef typename Parent1::Node Graph1Node; - typedef typename Parent2::Node Graph2Node; - protected: - MergeNodeGraphWrapperBaseBase() { } - public: - - class Node : public Graph1Node { - friend class MergeNodeGraphWrapperBaseBase<_Graph1, _Graph2>; - protected: - bool backward; //true, iff backward - public: - Node() { } - /// \todo =false is needed, or causes problems? - /// If \c _backward is false, then we get an edge corresponding to the - /// original one, otherwise its oppositely directed pair is obtained. - Node(const Graph1Node& n1, - const Graph2Node& n2, bool _backward) : - Graph1Node(n1), backward(_backward) { - if (backward) *this=n2; - } - Node(Invalid i) : Graph1Node(i), backward(true) { } - bool operator==(const Node& v) const { - if (backward) - return (v.backward && - static_cast(*this)==static_cast(v)); - else - return (!v.backward && - static_cast(*this)==static_cast(v)); - } - bool operator!=(const Node& v) const { - return !(*this==v); - } - }; - - static bool forward(const Node& n) { return !n.backward; } - static bool backward(const Node& n) { return n.backward; } - static void setForward(Node& n) { n.backward=false; } - static void setBackward(Node& n) { n.backward=true; } - }; - - - template - class MergeNodeGraphWrapperBase : - public MergeNodeGraphWrapperBaseBase<_Graph1, _Graph2> { - public: - typedef MergeNodeGraphWrapperBaseBase<_Graph1, _Graph2> Parent; - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef P1<_Graph1> Parent1; - typedef P2<_Graph2> Parent2; - typedef typename Parent1::Node Graph1Node; - typedef typename Parent2::Node Graph2Node; - - typedef typename Parent::Node Node; - class Edge { }; - - void first(Node& i) const { - Parent1::graph->first(*static_cast(&i)); - this->setForward(i); - if (*static_cast(&i)==INVALID) { - Parent2::graph->first(*static_cast(&i)); - this->setBackward(i); - } - } - void next(Node& i) const { - if (this->forward(i)) { - Parent1::graph->next(*static_cast(&i)); - if (*static_cast(&i)==INVALID) { - Parent2::graph->first(*static_cast(&i)); - this->setBackward(i); - } - } else { - Parent2::graph->next(*static_cast(&i)); - } - } - - int id(const Node& n) const { - if (this->forward(n)) - return this->Parent1::graph->id(n); - else - return this->Parent2::graph->id(n); - } - - template - class NodeMap { - protected: - typedef typename _Graph1::template NodeMap<_Value> ParentMap1; - typedef typename _Graph2::template NodeMap<_Value> ParentMap2; - ParentMap1 forward_map; - ParentMap2 backward_map; - public: - typedef _Value Value; - typedef Node Key; - NodeMap(const MergeNodeGraphWrapperBase<_Graph1, _Graph2>& gw) : - forward_map(*(gw.Parent1::graph)), - backward_map(*(gw.Parent2::graph)) { } - NodeMap(const MergeNodeGraphWrapperBase<_Graph1, _Graph2>& gw, - const _Value& value) : - forward_map(*(gw.Parent1::graph), value), - backward_map(*(gw.Parent2::graph), value) { } - _Value operator[](const Node& n) const { - if (Parent::forward(n)) - return forward_map[n]; - else - return backward_map[n]; - } - void set(const Node& n, const _Value& value) { - if (Parent::forward(n)) - forward_map.set(n, value); - else - backward_map.set(n, value); - } -// using ParentMap1::operator[]; -// using ParentMap2::operator[]; - }; - - }; - - - /*! A graph wrapper class - for merging the node-set of two node-disjoint graphs - into the node-set of one graph. - Different implementations are according to the relation of - _Graph1::Node and _Graph2::Node. - If _Graph1::Node and _Graph2::Node are unrelated, then - MergeNodeGraphWrapper<_Graph1, _Graph2>::Node - is derived from both. - If _Graph1::Node and _Graph2::Node are the same type, then - MergeNodeGraphWrapper<_Graph1, _Graph2>::Node - is derived from _Graph1::Node. - If one of _Graph1::Node and _Graph2::Node - is derived from the other one, then - MergeNodeGraphWrapper<_Graph1, _Graph2>::Node - is derived from the derived type. - It does not satisfy - StaticGraph concept as it has no edge-set which - works together with the node-set. - */ - template - class MergeNodeGraphWrapper : public - IterableGraphExtender > { - public: - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef IterableGraphExtender< - MergeNodeGraphWrapperBase<_Graph1, _Graph2> > Parent; - protected: - MergeNodeGraphWrapper() { } - public: - MergeNodeGraphWrapper(_Graph1& _graph1, _Graph2& _graph2) { - Parent::Parent1::setGraph(_graph1); - Parent::Parent2::setGraph(_graph2); - } - }; - - - /*! A grah wrapper base class - for merging the node-sets and edge-sets of - two node-disjoint graphs - into one graph. - Generic implementation for unrelated _Graph1::Edge and _Graph2::Edge. - */ - template - class MergeEdgeGraphWrapperBaseBase : - public MergeNodeGraphWrapperBase<_Graph1, _Graph2> { - public: - static void printEdge() { std::cout << "edge: generic" << std::endl; } - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef MergeNodeGraphWrapperBase<_Graph1, _Graph2> Parent; - typedef typename Parent::Parent1 Parent1; - typedef typename Parent::Parent2 Parent2; -// typedef P1<_Graph1> Parent1; -// typedef P2<_Graph2> Parent2; - typedef typename Parent1::Edge Graph1Edge; - typedef typename Parent2::Edge Graph2Edge; - protected: - MergeEdgeGraphWrapperBaseBase() { } - public: - - class Edge : public Graph1Edge, public Graph2Edge { - friend class MergeEdgeGraphWrapperBaseBase<_Graph1, _Graph2>; - protected: - bool backward; //true, iff backward - public: - Edge() { } - /// \todo =false is needed, or causes problems? - /// If \c _backward is false, then we get an edge corresponding to the - /// original one, otherwise its oppositely directed pair is obtained. - Edge(const Graph1Edge& n1, - const Graph2Edge& n2, bool _backward) : - Graph1Edge(n1), Graph2Edge(n2), backward(_backward) { } - Edge(Invalid i) : Graph1Edge(i), Graph2Edge(i), backward(true) { } - bool operator==(const Edge& v) const { - if (backward) - return (v.backward && - static_cast(*this)==static_cast(v)); - else - return (!v.backward && - static_cast(*this)==static_cast(v)); - } - bool operator!=(const Edge& v) const { - return !(*this==v); - } - }; - - using Parent::forward; - using Parent::backward; - using Parent::setForward; - using Parent::setBackward; - static bool forward(const Edge& e) { return !e.backward; } - static bool backward(const Edge& e) { return e.backward; } - static void setForward(Edge& e) { e.backward=false; } - static void setBackward(Edge& e) { e.backward=true; } - }; - - - - /*! A graph wrapper base class - for merging the node-sets and edge-sets of - two node-disjoint graphs - into one graph. - Specialization for the case when _Graph1::Edge and _Graph2::Edge - are the same. - */ - template - class MergeEdgeGraphWrapperBaseBase< - _Graph1, _Graph2, typename boost::enable_if< - boost::is_same >::type> : - public MergeNodeGraphWrapperBase<_Graph1, _Graph2> { - public: - static void printEdge() { std::cout << "edge: same" << std::endl; } - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef MergeNodeGraphWrapperBase<_Graph1, _Graph2> Parent; - typedef typename Parent::Parent1 Parent1; - typedef typename Parent::Parent2 Parent2; -// typedef P1<_Graph1> Parent1; -// typedef P2<_Graph2> Parent2; - typedef typename Parent1::Edge Graph1Edge; - typedef typename Parent2::Edge Graph2Edge; - protected: - MergeEdgeGraphWrapperBaseBase() { } - public: - - class Edge : public Graph1Edge { - friend class MergeEdgeGraphWrapperBaseBase<_Graph1, _Graph2>; - protected: - bool backward; //true, iff backward - public: - Edge() { } - /// \todo =false is needed, or causes problems? - /// If \c _backward is false, then we get an edge corresponding to the - /// original one, otherwise its oppositely directed pair is obtained. - Edge(const Graph1Edge& n1, - const Graph2Edge& n2, bool _backward) : - Graph1Edge(!_backward ? n1 : n2), backward(_backward) { } - Edge(Invalid i) : Graph1Edge(i), backward(true) { } - bool operator==(const Edge& v) const { - return (backward==v.backward && - static_cast(*this)==static_cast(v)); - } - bool operator!=(const Edge& v) const { - return !(*this==v); - } - }; - - using Parent::forward; - using Parent::backward; - using Parent::setForward; - using Parent::setBackward; - static bool forward(const Edge& e) { return !e.backward; } - static bool backward(const Edge& e) { return e.backward; } - static void setForward(Edge& e) { e.backward=false; } - static void setBackward(Edge& e) { e.backward=true; } - }; - - - /*! A grah wrapper base class - for merging the node-sets and edge-sets of - two node-disjoint graphs - into one graph. - Specialized implementation for the case - when _Graph1::Edge is a base class and _Graph2::Edge - is derived from it. - */ - template - class MergeEdgeGraphWrapperBaseBase< - _Graph1, _Graph2, typename boost::enable_if< - boost::is_base_and_derived >::type> : - public MergeNodeGraphWrapperBase<_Graph1, _Graph2> { - public: - static void printEdge() { std::cout << "edge: 2nd is derived" << std::endl; } - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef MergeNodeGraphWrapperBase<_Graph1, _Graph2> Parent; - typedef typename Parent::Parent1 Parent1; - typedef typename Parent::Parent2 Parent2; -// typedef P1<_Graph1> Parent1; -// typedef P2<_Graph2> Parent2; - typedef typename Parent1::Edge Graph1Edge; - typedef typename Parent2::Edge Graph2Edge; - protected: - MergeEdgeGraphWrapperBaseBase() { } - public: - - class Edge : public Graph2Edge { - friend class MergeEdgeGraphWrapperBaseBase<_Graph1, _Graph2>; - protected: - bool backward; //true, iff backward - public: - Edge() { } - /// \todo =false is needed, or causes problems? - /// If \c _backward is false, then we get an edge corresponding to the - /// original one, otherwise its oppositely directed pair is obtained. - Edge(const Graph1Edge& n1, - const Graph2Edge& n2, bool _backward) : - Graph2Edge(n2), backward(_backward) { - if (!backward) *this=n1; - } - Edge(Invalid i) : Graph2Edge(i), backward(true) { } - bool operator==(const Edge& v) const { - if (backward) - return (v.backward && - static_cast(*this)==static_cast(v)); - else - return (!v.backward && - static_cast(*this)==static_cast(v)); - } - bool operator!=(const Edge& v) const { - return !(*this==v); - } - }; - - using Parent::forward; - using Parent::backward; - using Parent::setForward; - using Parent::setBackward; - static bool forward(const Edge& e) { return !e.backward; } - static bool backward(const Edge& e) { return e.backward; } - static void setForward(Edge& e) { e.backward=false; } - static void setBackward(Edge& e) { e.backward=true; } - }; - - - /*! A grah wrapper base class - for merging the node-sets and edge-sets of - two node-disjoint graphs - into one graph. - Specialized implementation for the case - when _Graph1::Edge is derived from _Graph2::Edge. - */ - template - class MergeEdgeGraphWrapperBaseBase< - _Graph1, _Graph2, typename boost::enable_if< - boost::is_base_and_derived >::type> : - public MergeNodeGraphWrapperBase<_Graph1, _Graph2> { - public: - static void printEdge() { std::cout << "edge: 1st is derived" << std::endl; } - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef MergeNodeGraphWrapperBaseBase<_Graph1, _Graph2> Parent; - typedef typename Parent::Parent1 Parent1; - typedef typename Parent::Parent2 Parent2; -// typedef P1<_Graph1> Parent1; -// typedef P2<_Graph2> Parent2; - typedef typename Parent1::Edge Graph1Edge; - typedef typename Parent2::Edge Graph2Edge; - protected: - MergeEdgeGraphWrapperBaseBase() { } - public: - - class Edge : public Graph1Edge { - friend class MergeEdgeGraphWrapperBaseBase<_Graph1, _Graph2>; - protected: - bool backward; //true, iff backward - public: - Edge() { } - /// \todo =false is needed, or causes problems? - /// If \c _backward is false, then we get an edge corresponding to the - /// original one, otherwise its oppositely directed pair is obtained. - Edge(const Graph1Edge& n1, - const Graph2Edge& n2, bool _backward) : - Graph1Edge(n1), backward(_backward) { - if (backward) *this=n2; - } - Edge(Invalid i) : Graph1Edge(i), backward(true) { } - bool operator==(const Edge& v) const { - if (backward) - return (v.backward && - static_cast(*this)==static_cast(v)); - else - return (!v.backward && - static_cast(*this)==static_cast(v)); - } - bool operator!=(const Edge& v) const { - return !(*this==v); - } - }; - - using Parent::forward; - using Parent::backward; - using Parent::setForward; - using Parent::setBackward; - static bool forward(const Edge& e) { return !e.backward; } - static bool backward(const Edge& e) { return e.backward; } - static void setForward(Edge& e) { e.backward=false; } - static void setBackward(Edge& e) { e.backward=true; } - }; - - - template - class MergeEdgeGraphWrapperBase : - public MergeEdgeGraphWrapperBaseBase<_Graph1, _Graph2> { - public: - typedef MergeEdgeGraphWrapperBaseBase<_Graph1, _Graph2> Parent; - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef typename Parent::Parent1 Parent1; - typedef typename Parent::Parent2 Parent2; - typedef typename Parent1::Node Graph1Node; - typedef typename Parent2::Node Graph2Node; - typedef typename Parent1::Edge Graph1Edge; - typedef typename Parent2::Edge Graph2Edge; - - typedef typename Parent::Node Node; - typedef typename Parent::Edge Edge; - - using Parent::first; - void first(Edge& i) const { - Parent1::graph->first(*static_cast(&i)); - this->setForward(i); - if (*static_cast(&i)==INVALID) { - Parent2::graph->first(*static_cast(&i)); - this->setBackward(i); - } - } - void firstIn(Edge& i, const Node& n) const { - if (forward(n)) { - Parent1::graph->firstIn(*static_cast(&i), n); - if (*static_cast(&i)==INVALID) - i=INVALID; - else - this->setForward(i); - } else { - Parent2::graph->firstIn(*static_cast(&i), n); - this->setBackward(i); - } - } - void firstOut(Edge& i, const Node& n) const { - if (forward(n)) { - Parent1::graph->firstOut(*static_cast(&i), n); - if (*static_cast(&i)==INVALID) - i=INVALID; - else - this->setForward(i); - } else { - Parent2::graph->firstOut(*static_cast(&i), n); - this->setBackward(i); - } - } - - using Parent::next; - void next(Edge& i) const { - if (forward(i)) { - Parent1::graph->next(*static_cast(&i)); - if (*static_cast(&i)==INVALID) { - Parent2::graph->first(*static_cast(&i)); - this->setBackward(i); - } - } else { - Parent2::graph->next(*static_cast(&i)); - } - } - void nextIn(Edge& i) const { - if (forward(i)) { - Parent1::graph->nextIn(*static_cast(&i)); - if (*static_cast(&i)==INVALID) i=INVALID; - } else { - Parent2::graph->nextIn(*static_cast(&i)); - } - } - void nextOut(Edge& i) const { - if (Parent::forward(i)) { - Parent1::graph->nextOut(*static_cast(&i)); - if (*static_cast(&i)==INVALID) i=INVALID; - } else { - Parent2::graph->nextOut(*static_cast(&i)); - } - } - - Node source(const Edge& i) const { - if (forward(i)) { - return - Node(Parent1::graph->source(i), INVALID, false); - } else { - return - Node(INVALID, Parent2::graph->source(i), true); - } - } - - Node target(const Edge& i) const { - if (forward(i)) { - return - Node(Parent1::graph->target(i), INVALID, false); - } else { - return - Node(INVALID, Parent2::graph->target(i), true); - } - } - - using Parent::id; - int id(const Edge& n) const { - if (forward(n)) - return this->Parent1::graph->id(n); - else - return this->Parent2::graph->id(n); - } - - template - class EdgeMap { - protected: - typedef typename Parent::Graph1::template EdgeMap<_Value> ParentMap1; - typedef typename Parent::Graph2::template EdgeMap<_Value> ParentMap2; - ParentMap1 forward_map; - ParentMap2 backward_map; - public: - typedef _Value Value; - typedef Edge Key; - EdgeMap(const MergeEdgeGraphWrapperBase<_Graph1, _Graph2>& gw) : - forward_map(*(gw.Parent1::graph)), - backward_map(*(gw.Parent2::graph)) { } - EdgeMap(const MergeEdgeGraphWrapperBase<_Graph1, _Graph2>& gw, - const _Value& value) : - forward_map(*(gw.Parent1::graph), value), - backward_map(*(gw.Parent2::graph), value) { } - _Value operator[](const Edge& n) const { - if (Parent::forward(n)) - return forward_map[n]; - else - return backward_map[n]; - } - void set(const Edge& n, const _Value& value) { - if (Parent::forward(n)) - forward_map.set(n, value); - else - backward_map.set(n, value); - } -// using ParentMap1::operator[]; -// using ParentMap2::operator[]; - }; - - }; - - - - /*! A graph wrapper class - for merging two node-disjoint graphs - into one graph. - Different implementations are according to the relation of - _Graph1::Edge and _Graph2::Edge. - If _Graph1::Edge and _Graph2::Edge are unrelated, then - MergeEdgeGraphWrapper<_Graph1, _Graph2>::Edge - is derived from both. - If _Graph1::Edge and _Graph2::Edge are the same type, then - MergeEdgeGraphWrapper<_Graph1, _Graph2>::Edge - is derived from _Graph1::Edge. - If one of _Graph1::Edge and _Graph2::Edge - is derived from the other one, then - MergeEdgeGraphWrapper<_Graph1, _Graph2>::Edge - is derived from the derived type. - It does not satisfy - */ - template - class MergeEdgeGraphWrapper : public - IterableGraphExtender > { - public: - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef IterableGraphExtender< - MergeEdgeGraphWrapperBase<_Graph1, _Graph2> > Parent; - protected: - MergeEdgeGraphWrapper() { } - public: - MergeEdgeGraphWrapper(_Graph1& _graph1, _Graph2& _graph2) { - Parent::Parent1::setGraph(_graph1); - Parent::Parent2::setGraph(_graph2); - } - }; - - - /*! A graph wrapper base class for the following functionality. - If a bijection is given between the node-sets of two graphs, - then the second one can be considered as a new edge-set - over th first node-set. - */ - template - class NewEdgeSetGraphWrapperBase : public GraphWrapperBase<_Graph> { - public: - typedef GraphWrapperBase<_Graph> Parent; - typedef _Graph Graph; - typedef _EdgeSetGraph EdgeSetGraph; - typedef typename _Graph::Node Node; - typedef typename _EdgeSetGraph::Node ENode; - protected: - EdgeSetGraph* edge_set_graph; - typename Graph::NodeMap* e_node; - typename EdgeSetGraph::NodeMap* n_node; - void setEdgeSetGraph(EdgeSetGraph& _edge_set_graph) { - edge_set_graph=&_edge_set_graph; - } - /// For each node of \c Graph, this gives a node of \c EdgeSetGraph . - void setNodeMap(typename EdgeSetGraph::NodeMap& _n_node) { - n_node=&_n_node; - } - /// For each node of \c EdgeSetGraph, this gives a node of \c Graph . - void setENodeMap(typename Graph::NodeMap& _e_node) { - e_node=&_e_node; - } - public: - class Edge : public EdgeSetGraph::Edge { - typedef typename EdgeSetGraph::Edge Parent; - public: - Edge() { } - Edge(const Parent& e) : Parent(e) { } - Edge(Invalid i) : Parent(i) { } - }; - - using Parent::first; - void first(Edge &e) const { - edge_set_graph->first(e); - } - void firstOut(Edge& e, const Node& n) const { -// cout << e_node << endl; -// cout << n_node << endl; - edge_set_graph->firstOut(e, (*e_node)[n]); - } - void firstIn(Edge& e, const Node& n) const { - edge_set_graph->firstIn(e, (*e_node)[n]); - } - - using Parent::next; - void next(Edge &e) const { - edge_set_graph->next(e); - } - void nextOut(Edge& e) const { - edge_set_graph->nextOut(e); - } - void nextIn(Edge& e) const { - edge_set_graph->nextIn(e); - } - - Node source(const Edge& e) const { - return (*n_node)[edge_set_graph->source(e)]; - } - Node target(const Edge& e) const { - return (*n_node)[edge_set_graph->target(e)]; - } - - int edgeNum() const { return edge_set_graph->edgeNum(); } - -// NNode addOldNode() { -// return Parent::addNode(); -// } - -// ENode addNewNode() { -// return edge_set_graph->addNode(); -// } - - Edge addEdge(const Node& u, const Node& v) { - return edge_set_graph->addEdge((*e_node)[u], (*e_node)[v]); - } - - using Parent::erase; - void erase(const Edge& i) const { edge_set_graph->erase(i); } - - void clear() const { Parent::clear(); edge_set_graph->clear(); } - - bool forward(const Edge& e) const { return edge_set_graph->forward(e); } - bool backward(const Edge& e) const { return edge_set_graph->backward(e); } - - int id(const Node& e) const { return Parent::id(e); } - int id(const Edge& e) const { return edge_set_graph->id(e); } - - Edge opposite(const Edge& e) const { return edge_set_graph->opposite(e); } - - template - class EdgeMap : public EdgeSetGraph::EdgeMap<_Value> { - public: - typedef typename EdgeSetGraph::EdgeMap<_Value> Parent; - typedef _Value Value; - typedef Edge Key; - EdgeMap(const NewEdgeSetGraphWrapperBase& gw) : - Parent(*(gw.edge_set_graph)) { } - EdgeMap(const NewEdgeSetGraphWrapperBase& gw, const _Value& _value) : - Parent(*(gw.edge_set_graph), _value) { } - }; - - }; - - - /*! A graph wrapper class for the following functionality. - If a bijection is given between the node-sets of two graphs, - then the second one can be considered as a new edge-set - over th first node-set. - */ - template - class NewEdgeSetGraphWrapper : - public IterableGraphExtender< - NewEdgeSetGraphWrapperBase<_Graph, _EdgeSetGraph> > { - public: - typedef _Graph Graph; - typedef _EdgeSetGraph EdgeSetGraph; - typedef IterableGraphExtender< - NewEdgeSetGraphWrapperBase<_Graph, _EdgeSetGraph> > Parent; - protected: - NewEdgeSetGraphWrapper() { } - public: - NewEdgeSetGraphWrapper(_Graph& _graph, - _EdgeSetGraph& _edge_set_graph, - typename _Graph:: - NodeMap& _e_node, - typename _EdgeSetGraph:: - NodeMap& _n_node) { - setGraph(_graph); - setEdgeSetGraph(_edge_set_graph); - setNodeMap(_n_node); - setENodeMap(_e_node); - } - }; - - /*! A graph wrapper class for the following functionality. - The same as NewEdgeSetGrapWrapper, but the bijection and the graph of - new edges is andled inthe class. - */ - template - class NewEdgeSetGraphWrapper2 : - public IterableGraphExtender< - NewEdgeSetGraphWrapperBase<_Graph, _EdgeSetGraph> > { - public: - typedef _Graph Graph; - typedef _EdgeSetGraph EdgeSetGraph; - typedef IterableGraphExtender< - NewEdgeSetGraphWrapperBase<_Graph, _EdgeSetGraph> > Parent; - protected: - _EdgeSetGraph _edge_set_graph; - typename Graph::template NodeMap _e_node; - typename EdgeSetGraph::template NodeMap _n_node; - NewEdgeSetGraphWrapper2() { } - public: - typedef typename Graph::Node Node; - // typedef typename Parent::Edge Edge; - - NewEdgeSetGraphWrapper2(_Graph& _graph) : - _edge_set_graph(), - _e_node(_graph), _n_node(_edge_set_graph) { - setGraph(_graph); - setEdgeSetGraph(_edge_set_graph); - setNodeMap(_n_node); setENodeMap(_e_node); - Node n; - for (this->first(n); n!=INVALID; this->next(n)) { - typename EdgeSetGraph::Node e=_edge_set_graph.addNode(); - _e_node.set(n, e); - _n_node.set(e, n); - } - } - -// Node addNode() { -// Node n=(*this).Parent::addNode(); -// typename EdgeSetGraph::Node e=_edge_set_graph.addNode(); -// _e_node.set(n, e); -// _n_node.set(e, n); -// return n; -// } - - }; - - /*! A graph wrapper base class - for merging graphs of type _Graph1 and _Graph2 - which are given on the same node-set - (specially on the node-set of Graph1) - into one graph. - In an other point of view, _Graph1 is extended with - the edge-set of _Graph2. - \warning we need specialize dimplementations - \todo we need specialize dimplementations - \bug we need specialize dimplementations - */ - template - class AugmentingGraphWrapperBase : - public P1<_Graph1> { - public: - void printAugment() const { std::cout << "generic" << std::endl; } - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - typedef P1<_Graph1> Parent1; - typedef P2<_Graph2> Parent2; - typedef typename Parent1::Edge Graph1Edge; - typedef typename Parent2::Edge Graph2Edge; - protected: - AugmentingGraphWrapperBase() { } - _Graph2* graph2; - void setGraph2(_Graph2& _graph2) { graph2=&_graph2; } - public: - - template class EdgeMap; - - typedef typename Parent1::Node Node; - - class Edge : public Graph1Edge, public Graph2Edge { - friend class AugmentingGraphWrapperBase<_Graph1, _Graph2>; - template friend class EdgeMap; - protected: - bool backward; //true, iff backward - public: - Edge() { } - /// \todo =false is needed, or causes problems? - /// If \c _backward is false, then we get an edge corresponding to the - /// original one, otherwise its oppositely directed pair is obtained. - Edge(const Graph1Edge& n1, - const Graph2Edge& n2, bool _backward) : - Graph1Edge(n1), Graph2Edge(n2), backward(_backward) { } - Edge(Invalid i) : Graph1Edge(i), Graph2Edge(i), backward(true) { } - bool operator==(const Edge& v) const { - if (backward) - return (v.backward && - static_cast(*this)==static_cast(v)); - else - return (!v.backward && - static_cast(*this)==static_cast(v)); - } - bool operator!=(const Edge& v) const { - return !(*this==v); - } - }; - - using Parent1::first; - void first(Edge& i) const { - Parent1::graph->first(*static_cast(&i)); - i.backward=false; - if (*static_cast(&i)==INVALID) { - graph2->first(*static_cast(&i)); - i.backward=true; - } - } - void firstIn(Edge& i, const Node& n) const { - Parent1::graph->firstIn(*static_cast(&i), n); - i.backward=false; - if (*static_cast(&i)==INVALID) { - graph2->firstIn(*static_cast(&i), n); - i.backward=true; - } - } - void firstOut(Edge& i, const Node& n) const { - Parent1::graph->firstOut(*static_cast(&i), n); - i.backward=false; - if (*static_cast(&i)==INVALID) { - graph2->firstOut(*static_cast(&i), n); - i.backward=true; - } - } - - using Parent1::next; - void next(Edge& i) const { - if (!(i.backward)) { - Parent1::graph->next(*static_cast(&i)); - if (*static_cast(&i)==INVALID) { - graph2->first(*static_cast(&i)); - i.backward=true; - } - } else { - graph2->next(*static_cast(&i)); - } - } - void nextIn(Edge& i) const { - if (!(i.backward)) { - Node n=target(i); - Parent1::graph->nextIn(*static_cast(&i)); - if (*static_cast(&i)==INVALID) { - graph2->firstIn(*static_cast(&i), n); - i.backward=true; - } - } else { - graph2->nextIn(*static_cast(&i)); - } - } - void nextOut(Edge& i) const { - if (!(i.backward)) { - Node n=source(i); - Parent1::graph->nextOut(*static_cast(&i)); - if (*static_cast(&i)==INVALID) { - graph2->firstOut(*static_cast(&i), n); - i.backward=true; - } - } else { - graph2->nextOut(*static_cast(&i)); - } - } - - Node source(const Edge& i) const { - if (!(i.backward)) { - return Parent1::graph->source(i); - } else { - return graph2->source(i); - } - } - - Node target(const Edge& i) const { - if (!(i.backward)) { - return Parent1::graph->target(i); - } else { - return graph2->target(i); - } - } - - int id(const Node& n) const { - return Parent1::id(n); - }; - int id(const Edge& n) const { - if (!n.backward) - return this->Parent1::graph->id(n); - else - return this->graph2->id(n); - } - - template - class EdgeMap { - protected: - typedef typename _Graph1::template EdgeMap<_Value> ParentMap1; - typedef typename _Graph2::template EdgeMap<_Value> ParentMap2; - ParentMap1 forward_map; - ParentMap2 backward_map; - public: - typedef _Value Value; - typedef Edge Key; - EdgeMap(const AugmentingGraphWrapperBase<_Graph1, _Graph2>& gw) : - forward_map(*(gw.Parent1::graph)), - backward_map(*(gw.graph2)) { } - EdgeMap(const AugmentingGraphWrapperBase<_Graph1, _Graph2>& gw, - const _Value& value) : - forward_map(*(gw.Parent1::graph), value), - backward_map(*(gw.graph2), value) { } - _Value operator[](const Edge& n) const { - if (!n.backward) - return forward_map[n]; - else - return backward_map[n]; - } - void set(const Edge& n, const _Value& value) { - if (!n.backward) - forward_map.set(n, value); - else - backward_map.set(n, value); - } -// using ParentMap1::operator[]; -// using ParentMap2::operator[]; - }; - - }; - - - /*! A graph wrapper class - for merging two graphs (of type _Graph1 and _Graph2) - with the same node-set - (specially on the node-set of Graph1) - into one graph. - In an other point of view, _Graph1 is extended with - the edge-set of _Graph2. - */ - template - class AugmentingGraphWrapper : public - IterableGraphExtender > { - public: - typedef - IterableGraphExtender > - Parent; - typedef _Graph1 Graph1; - typedef _Graph2 Graph2; - protected: - AugmentingGraphWrapper() { } - public: - AugmentingGraphWrapper(_Graph1& _graph1, _Graph2& _graph2) { - setGraph(_graph1); - setGraph2(_graph2); - } - }; - -} //namespace lemon - -#endif //LEMON_MERGE_NODE_GRAPH_WRAPPER_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/merge_node_graph_wrapper_test.cc --- a/src/work/marci/merge_node_graph_wrapper_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,258 +0,0 @@ -#include -#include - -#include -#include -#include -#include -#include -#include - -#include -#include - -using std::cout; -using std::endl; - -using namespace lemon; -using namespace lemon::concept; - -class Graph3 : ListGraph { -public: - class Node : public ListGraph::Node { }; - class Edge { }; -}; - -template -void printGraph(const Graph& g) { - cout << " nodes:" << endl; - for (typename Graph::NodeIt n(g); n!=INVALID; ++n) { - cout << " " << g.id(n) << ": out edges:" << endl; - for (typename Graph::OutEdgeIt e(g, n); e!=INVALID; ++e) - cout << " " << g.id(g.source(e)) << "->" << g.id(g.target(e)) << endl; - } - cout << " edges:" << endl; - for (typename Graph::EdgeIt e(g); e!=INVALID; ++e) { - cout << " " << g.id(e) << ": " - << g.id(g.source(e)) << "->" << g.id(g.target(e)) << endl; - } -} - -int main() { - { - cout << "FIRST TEST" << endl; - //typedef SmartGraph Graph1; - typedef ListGraph Graph1; - typedef ListGraph Graph2; - typedef SmartGraph Graph3; - -// { -// checkConcept >(); -// MergeEdgeGraphWrapper::printNode(); -// MergeEdgeGraphWrapper::printEdge(); -// checkConcept >(); -// MergeEdgeGraphWrapper::printNode(); -// MergeEdgeGraphWrapper::printEdge(); -// typedef ResGraphWrapper, ConstMap > Graph4; -// checkConcept >(); -// MergeEdgeGraphWrapper::printNode(); -// MergeEdgeGraphWrapper::printEdge(); -// checkConcept >(); -// MergeEdgeGraphWrapper::printNode(); -// MergeEdgeGraphWrapper::printEdge(); -// } - - Graph1 g1; - Graph2 g2; - typedef MergeEdgeGraphWrapper GW; - GW gw(g1, g2); - Graph1::Node s1, t1; - Graph2::Node s2, t2; - Graph1::EdgeMap cap1(g1); - Graph2::EdgeMap cap2(g2); - - std::ifstream f1("graph1.dim"); - std::ifstream f2("graph2.dim"); - readDimacs(f1, g1); - readDimacs(f2, g2); - -// GW::NodeMap ize(gw, 8); -// for (GW::NodeIt n(gw); n!=INVALID; ++n) ize.set(n, 9); -// GW::EdgeMap mize(gw, 8); -// for (GW::EdgeIt n(gw); n!=INVALID; ++n) mize.set(n, 7); - -// std::ifstream f1("flow-1.dim"); -// std::ifstream f2("flow2.dim"); -// readDimacs(f1, g1, cap1, s1, t1); -// readDimacs(f2, g2, cap2, s2, t2); - -// GW::EdgeMap cap(gw); -// for (GW::EdgeIt e(gw); e!=INVALID; ++e) { -// if (gw.forward(e)) cap.set(e, cap1[e]); -// if (gw.backward(e)) cap.set(e, cap2[e]); -// } - -// { -// GW::EdgeMap flow(gw, 0); -// Preflow preflow(gw, GW::Node(s1, INVALID, false), -// GW::Node(t1, INVALID, false), cap, flow); -// preflow.run(); -// std::cout << "s1->t1: " << preflow.flowValue() << std::endl; -// } -// { -// GW::EdgeMap flow(gw, 0); -// Preflow preflow(gw, GW::Node(INVALID, s2, true), -// GW::Node(INVALID, t2, true), cap, flow); -// preflow.run(); -// std::cout << "s2->t2: " << preflow.flowValue() << std::endl; -// } -// { -// GW::EdgeMap flow(gw, 0); -// Preflow preflow(gw, GW::Node(s1, INVALID, false), -// GW::Node(INVALID, t2, true), cap, flow); -// preflow.run(); -// std::cout << "s1->t2: " << preflow.flowValue() << std::endl; -// } -// { -// GW::EdgeMap flow(gw, 0); -// Preflow preflow(gw, GW::Node(INVALID, s2, true), -// GW::Node(s1, INVALID, false), cap, flow); -// preflow.run(); -// std::cout << "s2->t1: " << preflow.flowValue() << std::endl; -// } - cout << "1st graph" << endl; - printGraph(g1); - - cout << "2nd graph" << endl; - printGraph(g2); - - cout << "merged graph" << endl; - printGraph(gw); - -// for (GW::NodeIt n(gw); n!=INVALID; ++n) -// std::cout << ize[n] << std::endl; -// for (GW::EdgeIt n(gw); n!=INVALID; ++n) -// std::cout << mize[n] << std::endl; - - typedef NewEdgeSetGraphWrapper2 GWW; -// { -// checkConcept(); -// } - - GWW gww(gw); - - cout << "new edges graph" << endl; - printGraph(gww); - - GWW::NodeIt n(gww); - GWW::Node n1=n; - ++n; - GWW::Node n2=n; - gww.addEdge(n1, n2); - // gww.addNode(); - // gww.addNode(); - - cout << "new edges graph" << endl; - printGraph(gww); - - typedef AugmentingGraphWrapper GWWW; - // { - // checkConcept(); - // } - GWWW gwww(gw, gww); - - cout << "fully merged graph" << endl; - printGraph(gwww); - } - - - { - cout << "SECOND TEST" << endl; - typedef SmartGraph Graph1; -// { -// checkConcept(); -// } - - Graph1 g1; - - FullGraph pre_g2(2); - ConstMap const_false_map(false); - typedef EdgeSubGraphWrapper > - Graph2; -// { -// checkConcept(); -// } - - Graph2 g2(pre_g2, const_false_map); - - typedef MergeEdgeGraphWrapper GW; -// { -// checkConcept(); -// } - GW gw(g1, g2); - GW::Node sw; - GW::Node tw; - { - Graph2::NodeIt k(g2); - sw=GW::Node(INVALID, k, true); - ++k; - tw=GW::Node(INVALID, k, true); - } - - std::ifstream f1("graph2.dim"); - readDimacs(f1, g1); - - cout << "1st graph" << endl; - printGraph(g1); - - cout << "2nd graph" << endl; - printGraph(g2); - - cout << "merged graph" << endl; - printGraph(gw); - - typedef ListGraph Graph3; - //typedef SmartGraph Graph3; - Graph3 g3; - GW::NodeMap gwn(gw); - Graph3::NodeMap g3n(g3); - for (GW::NodeIt n(gw); n!=INVALID; ++n) { - Graph3::Node m=g3.addNode(); - gwn.set(n, m); - g3n.set(m, n); - } - - typedef NewEdgeSetGraphWrapper GWW; -// { -// checkConcept(); -// } - - GWW gww(gw, g3, gwn, g3n); - - for (Graph1::NodeIt n(g1); n!=INVALID; ++n) { - g3.addEdge(gwn[sw], gwn[GW::Node(n,INVALID,false)]); - } - -// for (Graph1::NodeIt n(g1); n!=INVALID; ++n) { -// gww.addEdge(sw, GW::Node(n,INVALID,false)); -// } - - cout << "new edges" << endl; - printGraph(g3); - - cout << "new edges in the new graph" << endl; - printGraph(gww); - - typedef AugmentingGraphWrapper GWWW; -// { -// checkConcept(); -// } - GWWW gwww(gw, gww); - - cout << "new edges merged into the original graph" << endl; - printGraph(gwww); - - } - -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/bfs_iterator.hh --- a/src/work/marci/oldies/bfs_iterator.hh Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,836 +0,0 @@ -#ifndef BFS_ITERATOR_HH -#define BFS_ITERATOR_HH - -#include -#include -#include -#include - -namespace hugo { - - template - struct bfs { - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::EachNodeIt EachNodeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - Graph& G; - NodeIt s; - typename Graph::NodeMap reached; - typename Graph::NodeMap pred; - typename Graph::NodeMap dist; - std::queue bfs_queue; - bfs(Graph& _G, NodeIt _s) : G(_G), s(_s), reached(_G), pred(_G), dist(_G) { - bfs_queue.push(s); - for(EachNodeIt i=G.template first(); i.valid(); ++i) - reached.set(i, false); - reached.set(s, true); - dist.set(s, 0); - } - - void run() { - while (!bfs_queue.empty()) { - NodeIt v=bfs_queue.front(); - OutEdgeIt e=G.template first(v); - bfs_queue.pop(); - for( ; e.valid(); ++e) { - NodeIt w=G.bNode(e); - std::cout << "scan node " << G.id(w) << " from node " << G.id(v) << std::endl; - if (!reached.get(w)) { - std::cout << G.id(w) << " is newly reached :-)" << std::endl; - bfs_queue.push(w); - dist.set(w, dist.get(v)+1); - pred.set(w, e); - reached.set(w, true); - } else { - std::cout << G.id(w) << " is already reached" << std::endl; - } - } - } - } - }; - - template - struct bfs_visitor { - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - Graph& G; - bfs_visitor(Graph& _G) : G(_G) { } - void at_previously_reached(OutEdgeIt& e) { - //NodeIt v=G.aNode(e); - NodeIt w=G.bNode(e); - std::cout << G.id(w) << " is already reached" << std::endl; - } - void at_newly_reached(OutEdgeIt& e) { - //NodeIt v=G.aNode(e); - NodeIt w=G.bNode(e); - std::cout << G.id(w) << " is newly reached :-)" << std::endl; - } - }; - - template - struct bfs_iterator { - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - Graph& G; - std::queue& bfs_queue; - ReachedMap& reached; - visitor_type& visitor; - void process() { - while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - if (bfs_queue.empty()) return; - OutEdgeIt e=bfs_queue.front(); - //NodeIt v=G.aNode(e); - NodeIt w=G.bNode(e); - if (!reached.get(w)) { - visitor.at_newly_reached(e); - bfs_queue.push(G.template first(w)); - reached.set(w, true); - } else { - visitor.at_previously_reached(e); - } - } - bfs_iterator(Graph& _G, std::queue& _bfs_queue, ReachedMap& _reached, visitor_type& _visitor) : G(_G), bfs_queue(_bfs_queue), reached(_reached), visitor(_visitor) { - //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - valid(); - } - bfs_iterator& operator++() { - //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - //if (bfs_queue.empty()) return *this; - if (!valid()) return *this; - ++(bfs_queue.front()); - //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - valid(); - return *this; - } - //void next() { - // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - // if (bfs_queue.empty()) return; - // ++(bfs_queue.front()); - // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - //} - bool valid() { - while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - if (bfs_queue.empty()) return false; else return true; - } - //bool finished() { - // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - // if (bfs_queue.empty()) return true; else return false; - //} - operator EdgeIt () { return bfs_queue.front(); } - - }; - - template - struct bfs_iterator1 { - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - Graph& G; - std::queue& bfs_queue; - ReachedMap& reached; - bool _newly_reached; - bfs_iterator1(Graph& _G, std::queue& _bfs_queue, ReachedMap& _reached) : G(_G), bfs_queue(_bfs_queue), reached(_reached) { - valid(); - if (!bfs_queue.empty() && bfs_queue.front().valid()) { - OutEdgeIt e=bfs_queue.front(); - NodeIt w=G.bNode(e); - if (!reached.get(w)) { - bfs_queue.push(G.template first(w)); - reached.set(w, true); - _newly_reached=true; - } else { - _newly_reached=false; - } - } - } - bfs_iterator1& operator++() { - if (!valid()) return *this; - ++(bfs_queue.front()); - valid(); - if (!bfs_queue.empty() && bfs_queue.front().valid()) { - OutEdgeIt e=bfs_queue.front(); - NodeIt w=G.bNode(e); - if (!reached.get(w)) { - bfs_queue.push(G.template first(w)); - reached.set(w, true); - _newly_reached=true; - } else { - _newly_reached=false; - } - } - return *this; - } - bool valid() { - while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - if (bfs_queue.empty()) return false; else return true; - } - operator OutEdgeIt() { return bfs_queue.front(); } - //ize - bool newly_reached() { return _newly_reached; } - - }; - - template - struct BfsIterator { - typedef typename Graph::NodeIt NodeIt; - Graph& G; - std::queue& bfs_queue; - ReachedMap& reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - BfsIterator(Graph& _G, - std::queue& _bfs_queue, - ReachedMap& _reached) : - G(_G), bfs_queue(_bfs_queue), reached(_reached) { - actual_edge=bfs_queue.front(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(G.firstOutEdge(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - BfsIterator& - operator++() { - if (bfs_queue.front().valid()) { - ++(bfs_queue.front()); - actual_edge=bfs_queue.front(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(G.firstOutEdge(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - actual_edge=bfs_queue.front(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(G.firstOutEdge(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - return *this; - } - bool finished() { return bfs_queue.empty(); } - operator OutEdgeIt () { return actual_edge; } - bool bNodeIsNewlyReached() { return b_node_newly_reached; } - bool aNodeIsExamined() { return !(actual_edge.valid()); } - }; - - - template - struct DfsIterator { - typedef typename Graph::NodeIt NodeIt; - Graph& G; - std::stack& bfs_queue; - ReachedMap& reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - DfsIterator(Graph& _G, - std::stack& _bfs_queue, - ReachedMap& _reached) : - G(_G), bfs_queue(_bfs_queue), reached(_reached) { - actual_edge=bfs_queue.top(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(G.firstOutEdge(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - ++(bfs_queue.top()); - b_node_newly_reached=false; - } - } else { - bfs_queue.pop(); - } - } - DfsIterator& - operator++() { - actual_edge=bfs_queue.top(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(G.firstOutEdge(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - ++(bfs_queue.top()); - b_node_newly_reached=false; - } - } else { - bfs_queue.pop(); - } - return *this; - } - bool finished() { return bfs_queue.empty(); } - operator OutEdgeIt () { return actual_edge; } - bool bNodeIsNewlyReached() { return b_node_newly_reached; } - bool aNodeIsExamined() { return !(actual_edge.valid()); } - }; - - template - struct BfsIterator1 { - typedef typename Graph::NodeIt NodeIt; - Graph& G; - std::queue& bfs_queue; - ReachedMap& reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - BfsIterator1(Graph& _G, - std::queue& _bfs_queue, - ReachedMap& _reached) : - G(_G), bfs_queue(_bfs_queue), reached(_reached) { - actual_edge=bfs_queue.front(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(OutEdgeIt(G, w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - void next() { - if (bfs_queue.front().valid()) { - ++(bfs_queue.front()); - actual_edge=bfs_queue.front(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(OutEdgeIt(G, w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - actual_edge=bfs_queue.front(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(OutEdgeIt(G, w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - //return *this; - } - bool finished() { return bfs_queue.empty(); } - operator OutEdgeIt () { return actual_edge; } - bool bNodeIsNewlyReached() { return b_node_newly_reached; } - bool aNodeIsExamined() { return !(actual_edge.valid()); } - }; - - - template - struct DfsIterator1 { - typedef typename Graph::NodeIt NodeIt; - Graph& G; - std::stack& bfs_queue; - ReachedMap& reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - DfsIterator1(Graph& _G, - std::stack& _bfs_queue, - ReachedMap& _reached) : - G(_G), bfs_queue(_bfs_queue), reached(_reached) { - //actual_edge=bfs_queue.top(); - //if (actual_edge.valid()) { - // NodeIt w=G.bNode(actual_edge); - //if (!reached.get(w)) { - // bfs_queue.push(OutEdgeIt(G, w)); - // reached.set(w, true); - // b_node_newly_reached=true; - //} else { - // ++(bfs_queue.top()); - // b_node_newly_reached=false; - //} - //} else { - // bfs_queue.pop(); - //} - } - void next() { - actual_edge=bfs_queue.top(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(OutEdgeIt(G, w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - ++(bfs_queue.top()); - b_node_newly_reached=false; - } - } else { - bfs_queue.pop(); - } - //return *this; - } - bool finished() { return bfs_queue.empty(); } - operator OutEdgeIt () { return actual_edge; } - bool bNodeIsNewlyReached() { return b_node_newly_reached; } - bool aNodeIsLeaved() { return !(actual_edge.valid()); } - }; - - template - class BfsIterator2 { - typedef typename Graph::NodeIt NodeIt; - const Graph& G; - std::queue bfs_queue; - ReachedMap reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - public: - BfsIterator2(const Graph& _G) : G(_G), reached(G, false) { } - void pushAndSetReached(NodeIt s) { - reached.set(s, true); - if (bfs_queue.empty()) { - bfs_queue.push(G.template first(s)); - actual_edge=bfs_queue.front(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(G.template first(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } //else { - //} - } else { - bfs_queue.push(G.template first(s)); - } - } - BfsIterator2& - operator++() { - if (bfs_queue.front().valid()) { - ++(bfs_queue.front()); - actual_edge=bfs_queue.front(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(G.template first(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - if (!bfs_queue.empty()) { - actual_edge=bfs_queue.front(); - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(G.template first(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - } - return *this; - } - bool finished() const { return bfs_queue.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(actual_edge.valid()); } - const ReachedMap& getReachedMap() const { return reached; } - const std::queue& getBfsQueue() const { return bfs_queue; } - }; - - - template - class BfsIterator3 { - typedef typename Graph::NodeIt NodeIt; - const Graph& G; - std::queue< std::pair > bfs_queue; - ReachedMap reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - public: - BfsIterator3(const Graph& _G) : G(_G), reached(G, false) { } - void pushAndSetReached(NodeIt s) { - reached.set(s, true); - if (bfs_queue.empty()) { - bfs_queue.push(std::pair(s, G.template first(s))); - actual_edge=bfs_queue.front().second; - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(std::pair(w, G.template first(w))); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } //else { - //} - } else { - bfs_queue.push(std::pair(s, G.template first(s))); - } - } - BfsIterator3& - operator++() { - if (bfs_queue.front().second.valid()) { - ++(bfs_queue.front().second); - actual_edge=bfs_queue.front().second; - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(std::pair(w, G.template first(w))); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - if (!bfs_queue.empty()) { - actual_edge=bfs_queue.front().second; - if (actual_edge.valid()) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(std::pair(w, G.template first(w))); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - } - return *this; - } - bool finished() const { return bfs_queue.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(actual_edge.valid()); } - NodeIt aNode() const { return bfs_queue.front().first; } - NodeIt bNode() const { return G.bNode(actual_edge); } - const ReachedMap& getReachedMap() const { return reached; } - //const std::queue< std::pair >& getBfsQueue() const { return bfs_queue; } - }; - - - template */ > - class BfsIterator4 { - typedef typename Graph::NodeIt NodeIt; - const Graph& G; - std::queue bfs_queue; - ReachedMap& reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - bool own_reached_map; - public: - BfsIterator4(const Graph& _G, ReachedMap& _reached) : - G(_G), reached(_reached), - own_reached_map(false) { } - BfsIterator4(const Graph& _G) : - G(_G), reached(*(new ReachedMap(G /*, false*/))), - own_reached_map(true) { } - ~BfsIterator4() { if (own_reached_map) delete &reached; } - void pushAndSetReached(NodeIt s) { - //std::cout << "mimi" << &reached << std::endl; - reached.set(s, true); - //std::cout << "mumus" << std::endl; - if (bfs_queue.empty()) { - //std::cout << "bibi1" << std::endl; - bfs_queue.push(s); - //std::cout << "zizi" << std::endl; - G.getFirst(actual_edge, s); - //std::cout << "kiki" << std::endl; - if (G.valid(actual_edge)/*.valid()*/) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - //std::cout << "bibi2" << std::endl; - bfs_queue.push(s); - } - } - BfsIterator4& - operator++() { - if (G.valid(actual_edge)/*.valid()*/) { - /*++*/G.next(actual_edge); - if (G.valid(actual_edge)/*.valid()*/) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - if (!bfs_queue.empty()) { - G.getFirst(actual_edge, bfs_queue.front()); - if (G.valid(actual_edge)/*.valid()*/) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - } - return *this; - } - bool finished() const { return bfs_queue.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } - NodeIt aNode() const { return bfs_queue.front(); } - NodeIt bNode() const { return G.bNode(actual_edge); } - const ReachedMap& getReachedMap() const { return reached; } - const std::queue& getBfsQueue() const { return bfs_queue; } - }; - - - template */ > - class BfsIterator5 { - typedef typename GraphWrapper::NodeIt NodeIt; - typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; - GraphWrapper G; - std::queue bfs_queue; - ReachedMap& reached; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - bool own_reached_map; - public: - BfsIterator5(const GraphWrapper& _G, ReachedMap& _reached) : - G(_G), reached(_reached), - own_reached_map(false) { } - BfsIterator5(const GraphWrapper& _G) : - G(_G), reached(*(new ReachedMap(G /*, false*/))), - own_reached_map(true) { } -// BfsIterator5(const typename GraphWrapper::BaseGraph& _G, -// ReachedMap& _reached) : -// G(_G), reached(_reached), -// own_reached_map(false) { } -// BfsIterator5(const typename GraphWrapper::BaseGraph& _G) : -// G(_G), reached(*(new ReachedMap(G /*, false*/))), -// own_reached_map(true) { } - ~BfsIterator5() { if (own_reached_map) delete &reached; } - void pushAndSetReached(NodeIt s) { - reached.set(s, true); - if (bfs_queue.empty()) { - bfs_queue.push(s); - G.getFirst(actual_edge, s); - if (G.valid(actual_edge)/*.valid()*/) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.push(s); - } - } - BfsIterator5& - operator++() { - if (G.valid(actual_edge)/*.valid()*/) { - /*++*/G.next(actual_edge); - if (G.valid(actual_edge)/*.valid()*/) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } else { - bfs_queue.pop(); - if (!bfs_queue.empty()) { - G.getFirst(actual_edge, bfs_queue.front()); - if (G.valid(actual_edge)/*.valid()*/) { - NodeIt w=G.bNode(actual_edge); - if (!reached.get(w)) { - bfs_queue.push(w); - reached.set(w, true); - b_node_newly_reached=true; - } else { - b_node_newly_reached=false; - } - } - } - } - return *this; - } - bool finished() const { return bfs_queue.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } - NodeIt aNode() const { return bfs_queue.front(); } - NodeIt bNode() const { return G.bNode(actual_edge); } - const ReachedMap& getReachedMap() const { return reached; } - const std::queue& getBfsQueue() const { return bfs_queue; } - }; - - template */ > - class DfsIterator4 { - typedef typename Graph::NodeIt NodeIt; - const Graph& G; - std::stack dfs_stack; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - NodeIt actual_node; - ReachedMap& reached; - bool own_reached_map; - public: - DfsIterator4(const Graph& _G, ReachedMap& _reached) : - G(_G), reached(_reached), - own_reached_map(false) { } - DfsIterator4(const Graph& _G) : - G(_G), reached(*(new ReachedMap(G /*, false*/))), - own_reached_map(true) { } - ~DfsIterator4() { if (own_reached_map) delete &reached; } - void pushAndSetReached(NodeIt s) { - actual_node=s; - reached.set(s, true); - dfs_stack.push(G.template first(s)); - } - DfsIterator4& - operator++() { - actual_edge=dfs_stack.top(); - //actual_node=G.aNode(actual_edge); - if (G.valid(actual_edge)/*.valid()*/) { - NodeIt w=G.bNode(actual_edge); - actual_node=w; - if (!reached.get(w)) { - dfs_stack.push(G.template first(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - actual_node=G.aNode(actual_edge); - /*++*/G.next(dfs_stack.top()); - b_node_newly_reached=false; - } - } else { - //actual_node=G.aNode(dfs_stack.top()); - dfs_stack.pop(); - } - return *this; - } - bool finished() const { return dfs_stack.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } - NodeIt aNode() const { return actual_node; /*FIXME*/} - NodeIt bNode() const { return G.bNode(actual_edge); } - const ReachedMap& getReachedMap() const { return reached; } - const std::stack& getDfsStack() const { return dfs_stack; } - }; - - template */ > - class DfsIterator5 { - typedef typename GraphWrapper::NodeIt NodeIt; - typedef typename GraphWrapper::OutEdgeIt OutEdgeIt; - GraphWrapper G; - std::stack dfs_stack; - bool b_node_newly_reached; - OutEdgeIt actual_edge; - NodeIt actual_node; - ReachedMap& reached; - bool own_reached_map; - public: - DfsIterator5(const GraphWrapper& _G, ReachedMap& _reached) : - G(_G), reached(_reached), - own_reached_map(false) { } - DfsIterator5(const GraphWrapper& _G) : - G(_G), reached(*(new ReachedMap(G /*, false*/))), - own_reached_map(true) { } - ~DfsIterator5() { if (own_reached_map) delete &reached; } - void pushAndSetReached(NodeIt s) { - actual_node=s; - reached.set(s, true); - dfs_stack.push(G.template first(s)); - } - DfsIterator5& - operator++() { - actual_edge=dfs_stack.top(); - //actual_node=G.aNode(actual_edge); - if (G.valid(actual_edge)/*.valid()*/) { - NodeIt w=G.bNode(actual_edge); - actual_node=w; - if (!reached.get(w)) { - dfs_stack.push(G.template first(w)); - reached.set(w, true); - b_node_newly_reached=true; - } else { - actual_node=G.aNode(actual_edge); - /*++*/G.next(dfs_stack.top()); - b_node_newly_reached=false; - } - } else { - //actual_node=G.aNode(dfs_stack.top()); - dfs_stack.pop(); - } - return *this; - } - bool finished() const { return dfs_stack.empty(); } - operator OutEdgeIt () const { return actual_edge; } - bool isBNodeNewlyReached() const { return b_node_newly_reached; } - bool isANodeExamined() const { return !(G.valid(actual_edge)/*.valid()*/); } - NodeIt aNode() const { return actual_node; /*FIXME*/} - NodeIt bNode() const { return G.bNode(actual_edge); } - const ReachedMap& getReachedMap() const { return reached; } - const std::stack& getDfsStack() const { return dfs_stack; } - }; - - - -} // namespace hugo - -#endif //BFS_ITERATOR_HH diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/dimacs.hh --- a/src/work/marci/oldies/dimacs.hh Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,61 +0,0 @@ -#ifndef DIMACS_HH -#define DIMACS_HH - -#include -#include -#include - -namespace hugo { - - template - void readDimacsMaxFlow(std::istream& is, Graph &G, typename Graph::NodeIt &s, typename Graph::NodeIt &t, CapacityMap& capacity) { - G.clear(); - int cap; - char d; - std::string problem; - char c; - int i, j; - std::string str; - int n, m; - std::vector nodes; - while (is>>c) { - switch (c) { - case 'c': //comment - getline(is, str); - break; - case 't': //type - getline(is, str); - break; - case 'p': //problem definition - is >> problem >> n >> m; - getline(is, str); - nodes.resize(n+1); - for (int k=1; k<=n; ++k) nodes[k]=G.addNode(); - break; - case 'n': //node definition - if (problem=="sp") { //shortest path problem - is >> i; - getline(is, str); - s=nodes[i]; - } - if (problem=="max") { //max flow problem - is >> i >> d; - getline(is, str); - if (d=='s') s=nodes[i]; - if (d=='t') t=nodes[i]; - } - break; - case 'a': - is >> i >> j >> cap; - getline(is, str); - typename Graph::EdgeIt e=G.addEdge(nodes[i], nodes[j]); - capacity.update(); - capacity.set(e, cap); - break; - } - } - } - -} //namespace hugo - -#endif //DIMACS_HH diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/edmonds_karp.h --- a/src/work/marci/oldies/edmonds_karp.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,956 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_EDMONDS_KARP_H -#define LEMON_EDMONDS_KARP_H - -#include -#include -#include - -#include -#include -#include -#include -#include - -namespace lemon { - - template - class MaxFlow { - protected: - typedef typename Graph::Node Node; - typedef typename Graph::Edge Edge; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - const Graph* g; - Node s; - Node t; - const CapMap* capacity; - FlowMap* flow; - typedef ResGraphWrapper ResGW; - typedef typename ResGW::OutEdgeIt ResGWOutEdgeIt; - typedef typename ResGW::Edge ResGWEdge; - //typedef typename ResGW::template NodeMap ReachedMap; - typedef typename Graph::template NodeMap ReachedMap; - ReachedMap level; - //reached is called level because of compatibility with preflow - public: - - MaxFlow(const Graph& _g, Node _s, Node _t, const CapMap& _capacity, - FlowMap& _flow) : - g(&_g), s(_s), t(_t), capacity(&_capacity), flow(&_flow), level(_g) { } - - bool augmentOnShortestPath() { - ResGW res_graph(*g, *capacity, *flow); - bool _augment=false; - - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - bfs.pushAndSetReached(s); - - typename ResGW::template NodeMap pred(res_graph); - pred.set(s, INVALID); - - typename ResGW::template NodeMap free(res_graph); - - //searching for augmenting path - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - Node v=res_graph.source(e); - Node w=res_graph.target(e); - pred.set(w, e); - if (res_graph.valid(pred[v])) { - free.set(w, std::min(free[v], res_graph.resCap(e))); - } else { - free.set(w, res_graph.resCap(e)); - } - if (res_graph.target(e)==t) { _augment=true; break; } - } - - ++bfs; - } //end of searching augmenting path - - if (_augment) { - Node n=t; - Num augment_value=free[t]; - while (res_graph.valid(pred[n])) { - ResGWEdge e=pred[n]; - res_graph.augment(e, augment_value); - n=res_graph.source(e); - } - } - - return _augment; - } - - template - class DistanceMap { - protected: - const MapGraphWrapper* g; - typename MapGraphWrapper::template NodeMap dist; - public: - DistanceMap(MapGraphWrapper& _g) : g(&_g), dist(*g, g->nodeNum()) { } - void set(const typename MapGraphWrapper::Node& n, int a) { - dist.set(n, a); - } - int operator[](const typename MapGraphWrapper::Node& n) - { return dist[n]; } -// int get(const typename MapGraphWrapper::Node& n) const { -// return dist[n]; } -// bool get(const typename MapGraphWrapper::Edge& e) const { -// return (dist.get(g->source(e))target(e))); } - bool operator[](const typename MapGraphWrapper::Edge& e) const { - return (dist[g->source(e)]target(e)]); - } - }; - - template bool augmentOnBlockingFlow() { - typedef MutableGraph MG; - bool _augment=false; - - ResGW res_graph(*g, *capacity, *flow); - - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - - bfs.pushAndSetReached(s); - //typename ResGW::NodeMap dist(res_graph); //filled up with 0's - DistanceMap dist(res_graph); - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); - } - ++bfs; - } //computing distances from s in the residual graph - - MG F; - ConstMap true_map(true); - typedef SubGraphWrapper, - DistanceMap > FilterResGW; - FilterResGW filter_res_graph(res_graph, true_map, dist); - typename ResGW::template NodeMap - res_graph_to_F(res_graph); - { - typename ResGW::NodeIt n; - for(res_graph.first(n); res_graph.valid(n); res_graph.next(n)) { - res_graph_to_F.set(n, F.addNode()); - } - } - - typename MG::Node sF=res_graph_to_F[s]; - typename MG::Node tF=res_graph_to_F[t]; - typename MG::template EdgeMap original_edge(F); - typename MG::template EdgeMap residual_capacity(F); - - //Making F to the graph containing the edges of the residual graph - //which are in some shortest paths - { - typename FilterResGW::EdgeIt e; - for(filter_res_graph.first(e); filter_res_graph.valid(e); filter_res_graph.next(e)) { - //if (dist.get(res_graph.target(e))==dist.get(res_graph.source(e))+1) { - typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], res_graph_to_F[res_graph.target(e)]); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - //} - } - } - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - - DfsIterator< MG, typename MG::template NodeMap > dfs(F); - typename MG::template NodeMap pred(F); - pred.set(sF, INVALID); - //invalid iterators for sources - - typename MG::template NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) { - if (dfs.isBNodeNewlyReached()) { - typename MG::Node v=F.aNode(dfs); - typename MG::Node w=F.bNode(dfs); - pred.set(w, dfs); - if (F.valid(pred[v])) { - free.set(w, std::min(free[v], residual_capacity[dfs])); - } else { - free.set(w, residual_capacity[dfs]); - } - if (w==tF) { - __augment=true; - _augment=true; - break; - } - - } else { - F.erase(/*typename MG::OutEdgeIt*/(dfs)); - } - } - } - - if (__augment) { - typename MG::Node n=tF; - Num augment_value=free[tF]; - while (F.valid(pred[n])) { - typename MG::Edge e=pred[n]; - res_graph.augment(original_edge[e], augment_value); - n=F.source(e); - if (residual_capacity[e]==augment_value) - F.erase(e); - else - residual_capacity.set(e, residual_capacity[e]-augment_value); - } - } - - } - - return _augment; - } - - template bool augmentOnBlockingFlow1() { - typedef MutableGraph MG; - bool _augment=false; - - ResGW res_graph(*g, *capacity, *flow); - - //bfs for distances on the residual graph - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - bfs.pushAndSetReached(s); - typename ResGW::template NodeMap - dist(res_graph); //filled up with 0's - - //F will contain the physical copy of the residual graph - //with the set of edges which are on shortest paths - MG F; - typename ResGW::template NodeMap - res_graph_to_F(res_graph); - { - typename ResGW::NodeIt n; - for(res_graph.first(n); res_graph.valid(n); res_graph.next(n)) { - res_graph_to_F.set(n, F.addNode()); - } - } - - typename MG::Node sF=res_graph_to_F[s]; - typename MG::Node tF=res_graph_to_F[t]; - typename MG::template EdgeMap original_edge(F); - typename MG::template EdgeMap residual_capacity(F); - - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e)) { - if (bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); - typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], res_graph_to_F[res_graph.target(e)]); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } else { - if (dist[res_graph.target(e)]==(dist[res_graph.source(e)]+1)) { - typename MG::Edge f=F.addEdge(res_graph_to_F[res_graph.source(e)], res_graph_to_F[res_graph.target(e)]); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.resCap(e)); - } - } - } - ++bfs; - } //computing distances from s in the residual graph - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - DfsIterator< MG, typename MG::template NodeMap > dfs(F); - typename MG::template NodeMap pred(F); - pred.set(sF, INVALID); - //invalid iterators for sources - - typename MG::template NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (F.valid(/*typename MG::OutEdgeIt*/(dfs))) { - if (dfs.isBNodeNewlyReached()) { - typename MG::Node v=F.aNode(dfs); - typename MG::Node w=F.bNode(dfs); - pred.set(w, dfs); - if (F.valid(pred[v])) { - free.set(w, std::min(free[v], residual_capacity[dfs])); - } else { - free.set(w, residual_capacity[dfs]); - } - if (w==tF) { - __augment=true; - _augment=true; - break; - } - - } else { - F.erase(/*typename MG::OutEdgeIt*/(dfs)); - } - } - } - - if (__augment) { - typename MG::Node n=tF; - Num augment_value=free[tF]; - while (F.valid(pred[n])) { - typename MG::Edge e=pred[n]; - res_graph.augment(original_edge[e], augment_value); - n=F.source(e); - if (residual_capacity[e]==augment_value) - F.erase(e); - else - residual_capacity.set(e, residual_capacity[e]-augment_value); - } - } - - } - - return _augment; - } - - bool augmentOnBlockingFlow2() { - bool _augment=false; - - ResGW res_graph(*g, *capacity, *flow); - - //ReachedMap level(res_graph); - FOR_EACH_LOC(typename Graph::NodeIt, e, *g) level.set(e, 0); - BfsIterator bfs(res_graph, level); - - bfs.pushAndSetReached(s); - DistanceMap dist(res_graph); - while ( !bfs.finished() ) { - ResGWOutEdgeIt e=bfs; - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - dist.set(res_graph.target(e), dist[res_graph.source(e)]+1); - } - ++bfs; - } //computing distances from s in the residual graph - - //Subgraph containing the edges on some shortest paths - ConstMap true_map(true); - typedef SubGraphWrapper, - DistanceMap > FilterResGW; - FilterResGW filter_res_graph(res_graph, true_map, dist); - - //Subgraph, which is able to delete edges which are already - //met by the dfs - typename FilterResGW::template NodeMap - first_out_edges(filter_res_graph); - typename FilterResGW::NodeIt v; - for(filter_res_graph.first(v); filter_res_graph.valid(v); - filter_res_graph.next(v)) - { - typename FilterResGW::OutEdgeIt e; - filter_res_graph.first(e, v); - first_out_edges.set(v, e); - } - typedef ErasingFirstGraphWrapper > ErasingResGW; - ErasingResGW erasing_res_graph(filter_res_graph, first_out_edges); - - bool __augment=true; - - while (__augment) { - - __augment=false; - //computing blocking flow with dfs - DfsIterator< ErasingResGW, - typename ErasingResGW::template NodeMap > - dfs(erasing_res_graph); - typename ErasingResGW:: - template NodeMap - pred(erasing_res_graph); - pred.set(s, INVALID); - //invalid iterators for sources - - typename ErasingResGW::template NodeMap - free1(erasing_res_graph); - - dfs.pushAndSetReached( - typename ErasingResGW::Node( - typename FilterResGW::Node( - typename ResGW::Node(s) - ) - ) - ); - while (!dfs.finished()) { - ++dfs; - if (erasing_res_graph.valid( - typename ErasingResGW::OutEdgeIt(dfs))) - { - if (dfs.isBNodeNewlyReached()) { - - typename ErasingResGW::Node v=erasing_res_graph.aNode(dfs); - typename ErasingResGW::Node w=erasing_res_graph.bNode(dfs); - - pred.set(w, /*typename ErasingResGW::OutEdgeIt*/(dfs)); - if (erasing_res_graph.valid(pred[v])) { - free1.set(w, std::min(free1[v], res_graph.resCap( - typename ErasingResGW::OutEdgeIt(dfs)))); - } else { - free1.set(w, res_graph.resCap( - typename ErasingResGW::OutEdgeIt(dfs))); - } - - if (w==t) { - __augment=true; - _augment=true; - break; - } - } else { - erasing_res_graph.erase(dfs); - } - } - } - - if (__augment) { - typename ErasingResGW::Node n=typename FilterResGW::Node(typename ResGW::Node(t)); -// typename ResGW::NodeMap a(res_graph); -// typename ResGW::Node b; -// Num j=a[b]; -// typename FilterResGW::NodeMap a1(filter_res_graph); -// typename FilterResGW::Node b1; -// Num j1=a1[b1]; -// typename ErasingResGW::NodeMap a2(erasing_res_graph); -// typename ErasingResGW::Node b2; -// Num j2=a2[b2]; - Num augment_value=free1[n]; - while (erasing_res_graph.valid(pred[n])) { - typename ErasingResGW::OutEdgeIt e=pred[n]; - res_graph.augment(e, augment_value); - n=erasing_res_graph.source(e); - if (res_graph.resCap(e)==0) - erasing_res_graph.erase(e); - } - } - - } //while (__augment) - - return _augment; - } - - void run() { - //int num_of_augmentations=0; - while (augmentOnShortestPath()) { - //while (augmentOnBlockingFlow()) { - //std::cout << ++num_of_augmentations << " "; - //std::cout< void run() { - //int num_of_augmentations=0; - //while (augmentOnShortestPath()) { - while (augmentOnBlockingFlow()) { - //std::cout << ++num_of_augmentations << " "; - //std::cout<first(e, s); g->valid(e); g->next(e)) { - a+=(*flow)[e]; - } - return a; - } - - }; - - -// template -// class MaxMatching { -// public: -// typedef typename Graph::Node Node; -// typedef typename Graph::NodeIt NodeIt; -// typedef typename Graph::Edge Edge; -// typedef typename Graph::EdgeIt EdgeIt; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// typedef typename Graph::InEdgeIt InEdgeIt; - -// typedef typename Graph::NodeMap SMap; -// typedef typename Graph::NodeMap TMap; -// private: -// const Graph* G; -// SMap* S; -// TMap* T; -// //Node s; -// //Node t; -// FlowMap* flow; -// const CapMap* capacity; -// typedef ResGraphWrapper AugGraph; -// typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; -// typedef typename AugGraph::Edge AugEdge; -// typename Graph::NodeMap used; //0 - -// public: -// MaxMatching(const Graph& _G, SMap& _S, TMap& _T, FlowMap& _flow, const CapMap& _capacity) : -// G(&_G), S(&_S), T(&_T), flow(&_flow), capacity(&_capacity), used(_G) { } -// bool augmentOnShortestPath() { -// AugGraph res_graph(*G, *flow, *capacity); -// bool _augment=false; - -// typedef typename AugGraph::NodeMap ReachedMap; -// BfsIterator< AugGraph, /*AugOutEdgeIt,*/ ReachedMap > bfs(res_graph); -// typename AugGraph::NodeMap pred(res_graph); -// for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// if ((S->get(s)) && (used.get(s)<1) ) { -// //Num u=0; -// //for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// //u+=flow->get(e); -// //if (u<1) { -// bfs.pushAndSetReached(s); -// pred.set(s, AugEdge(INVALID)); -// //} -// } -// } - -// typename AugGraph::NodeMap free(res_graph); - -// Node n; -// //searching for augmenting path -// while ( !bfs.finished() ) { -// AugOutEdgeIt e=bfs; -// if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// Node v=res_graph.source(e); -// Node w=res_graph.target(e); -// pred.set(w, e); -// if (res_graph.valid(pred.get(v))) { -// free.set(w, std::min(free.get(v), res_graph.free(e))); -// } else { -// free.set(w, res_graph.free(e)); -// } -// n=res_graph.target(e); -// if (T->get(n) && (used.get(n)<1) ) { -// //Num u=0; -// //for(InEdgeIt f=G->template first(n); G->valid(f); G->next(f)) -// //u+=flow->get(f); -// //if (u<1) { -// _augment=true; -// break; -// //} -// } -// } - -// ++bfs; -// } //end of searching augmenting path - -// if (_augment) { -// //Node n=t; -// used.set(n, 1); //mind2 vegen jav -// Num augment_value=free.get(n); -// while (res_graph.valid(pred.get(n))) { -// AugEdge e=pred.get(n); -// res_graph.augment(e, augment_value); -// n=res_graph.source(e); -// } -// used.set(n, 1); //mind2 vegen jav -// } - -// return _augment; -// } - -// // template bool augmentOnBlockingFlow() { -// // bool _augment=false; - -// // AugGraph res_graph(*G, *flow, *capacity); - -// // typedef typename AugGraph::NodeMap ReachedMap; -// // BfsIterator4< AugGraph, AugOutEdgeIt, ReachedMap > bfs(res_graph); - - - - - -// // //typename AugGraph::NodeMap pred(res_graph); -// // for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// // if (S->get(s)) { -// // Num u=0; -// // for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// // u+=flow->get(e); -// // if (u<1) { -// // bfs.pushAndSetReached(s); -// // //pred.set(s, AugEdge(INVALID)); -// // } -// // } -// // } - - - - -// // //bfs.pushAndSetReached(s); -// // typename AugGraph::NodeMap dist(res_graph); //filled up with 0's -// // while ( !bfs.finished() ) { -// // AugOutEdgeIt e=bfs; -// // if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// // dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); -// // } - -// // ++bfs; -// // } //computing distances from s in the residual graph - -// // MutableGraph F; -// // typename AugGraph::NodeMap -// // res_graph_to_F(res_graph); -// // for(typename AugGraph::NodeIt n=res_graph.template first(); res_graph.valid(n); res_graph.next(n)) { -// // res_graph_to_F.set(n, F.addNode()); -// // } - -// // typename MutableGraph::Node sF=res_graph_to_F.get(s); -// // typename MutableGraph::Node tF=res_graph_to_F.get(t); - -// // typename MutableGraph::EdgeMap original_edge(F); -// // typename MutableGraph::EdgeMap residual_capacity(F); - -// // //Making F to the graph containing the edges of the residual graph -// // //which are in some shortest paths -// // for(typename AugGraph::EdgeIt e=res_graph.template first(); res_graph.valid(e); res_graph.next(e)) { -// // if (dist.get(res_graph.target(e))==dist.get(res_graph.source(e))+1) { -// // typename MutableGraph::Edge f=F.addEdge(res_graph_to_F.get(res_graph.source(e)), res_graph_to_F.get(res_graph.target(e))); -// // original_edge.update(); -// // original_edge.set(f, e); -// // residual_capacity.update(); -// // residual_capacity.set(f, res_graph.free(e)); -// // } -// // } - -// // bool __augment=true; - -// // while (__augment) { -// // __augment=false; -// // //computing blocking flow with dfs -// // typedef typename MutableGraph::NodeMap BlockingReachedMap; -// // DfsIterator4< MutableGraph, typename MutableGraph::OutEdgeIt, BlockingReachedMap > dfs(F); -// // typename MutableGraph::NodeMap pred(F); -// // pred.set(sF, typename MutableGraph::Edge(INVALID)); -// // //invalid iterators for sources - -// // typename MutableGraph::NodeMap free(F); - -// // dfs.pushAndSetReached(sF); -// // while (!dfs.finished()) { -// // ++dfs; -// // if (F.valid(typename MutableGraph::OutEdgeIt(dfs))) { -// // if (dfs.isBNodeNewlyReached()) { -// // typename MutableGraph::Node v=F.aNode(dfs); -// // typename MutableGraph::Node w=F.bNode(dfs); -// // pred.set(w, dfs); -// // if (F.valid(pred.get(v))) { -// // free.set(w, std::min(free.get(v), residual_capacity.get(dfs))); -// // } else { -// // free.set(w, residual_capacity.get(dfs)); -// // } -// // if (w==tF) { -// // __augment=true; -// // _augment=true; -// // break; -// // } - -// // } else { -// // F.erase(typename MutableGraph::OutEdgeIt(dfs)); -// // } -// // } -// // } - -// // if (__augment) { -// // typename MutableGraph::Node n=tF; -// // Num augment_value=free.get(tF); -// // while (F.valid(pred.get(n))) { -// // typename MutableGraph::Edge e=pred.get(n); -// // res_graph.augment(original_edge.get(e), augment_value); -// // n=F.source(e); -// // if (residual_capacity.get(e)==augment_value) -// // F.erase(e); -// // else -// // residual_capacity.set(e, residual_capacity.get(e)-augment_value); -// // } -// // } - -// // } - -// // return _augment; -// // } -// bool augmentOnBlockingFlow2() { -// bool _augment=false; - -// //typedef ErasingResGraphWrapper EAugGraph; -// typedef FilterGraphWrapper< ErasingResGraphWrapper > EAugGraph; -// typedef typename EAugGraph::OutEdgeIt EAugOutEdgeIt; -// typedef typename EAugGraph::Edge EAugEdge; - -// EAugGraph res_graph(*G, *flow, *capacity); - -// //typedef typename EAugGraph::NodeMap ReachedMap; -// BfsIterator< -// ErasingResGraphWrapper, -// /*typename ErasingResGraphWrapper::OutEdgeIt,*/ -// ErasingResGraphWrapper::NodeMap > bfs(res_graph); - - -// //typename AugGraph::NodeMap pred(res_graph); -// for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// if (S->get(s)) { -// Num u=0; -// for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// u+=flow->get(e); -// if (u<1) { -// bfs.pushAndSetReached(s); -// //pred.set(s, AugEdge(INVALID)); -// } -// } -// } - - -// //bfs.pushAndSetReached(s); - -// typename ErasingResGraphWrapper:: -// NodeMap& dist=res_graph.dist; - -// while ( !bfs.finished() ) { -// typename ErasingResGraphWrapper::OutEdgeIt e=bfs; -// if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { -// dist.set(res_graph.target(e), dist.get(res_graph.source(e))+1); -// } -// ++bfs; -// } //computing distances from s in the residual graph - -// bool __augment=true; - -// while (__augment) { - -// __augment=false; -// //computing blocking flow with dfs -// typedef typename EAugGraph::NodeMap BlockingReachedMap; -// DfsIterator< EAugGraph/*, EAugOutEdgeIt*/, BlockingReachedMap > -// dfs(res_graph); -// typename EAugGraph::NodeMap pred(res_graph, INVALID); -// //pred.set(s, EAugEdge(INVALID)); -// //invalid iterators for sources - -// typename EAugGraph::NodeMap free(res_graph); - - -// //typename AugGraph::NodeMap pred(res_graph); -// for(NodeIt s=G->template first(); G->valid(s); G->next(s)) { -// if (S->get(s)) { -// Num u=0; -// for(OutEdgeIt e=G->template first(s); G->valid(e); G->next(e)) -// u+=flow->get(e); -// if (u<1) { -// dfs.pushAndSetReached(s); -// //pred.set(s, AugEdge(INVALID)); -// } -// } -// } - - - -// //dfs.pushAndSetReached(s); -// typename EAugGraph::Node n; -// while (!dfs.finished()) { -// ++dfs; -// if (res_graph.valid(EAugOutEdgeIt(dfs))) { -// if (dfs.isBNodeNewlyReached()) { - -// typename EAugGraph::Node v=res_graph.aNode(dfs); -// typename EAugGraph::Node w=res_graph.bNode(dfs); - -// pred.set(w, EAugOutEdgeIt(dfs)); -// if (res_graph.valid(pred.get(v))) { -// free.set(w, std::min(free.get(v), res_graph.free(dfs))); -// } else { -// free.set(w, res_graph.free(dfs)); -// } - -// n=w; -// if (T->get(w)) { -// Num u=0; -// for(InEdgeIt f=G->template first(n); G->valid(f); G->next(f)) -// u+=flow->get(f); -// if (u<1) { -// __augment=true; -// _augment=true; -// break; -// } -// } -// } else { -// res_graph.erase(dfs); -// } -// } - -// } - -// if (__augment) { -// // typename EAugGraph::Node n=t; -// Num augment_value=free.get(n); -// while (res_graph.valid(pred.get(n))) { -// EAugEdge e=pred.get(n); -// res_graph.augment(e, augment_value); -// n=res_graph.source(e); -// if (res_graph.free(e)==0) -// res_graph.erase(e); -// } -// } - -// } - -// return _augment; -// } -// void run() { -// //int num_of_augmentations=0; -// while (augmentOnShortestPath()) { -// //while (augmentOnBlockingFlow()) { -// //std::cout << ++num_of_augmentations << " "; -// //std::cout< void run() { -// // //int num_of_augmentations=0; -// // //while (augmentOnShortestPath()) { -// // while (augmentOnBlockingFlow()) { -// // //std::cout << ++num_of_augmentations << " "; -// // //std::cout</*getF*/first(e); G->valid(e); G->next(e)) { -// a+=flow->get(e); -// } -// return a; -// } -// }; - - - - - - -// // template -// // class MaxFlow2 { -// // public: -// // typedef typename Graph::Node Node; -// // typedef typename Graph::Edge Edge; -// // typedef typename Graph::EdgeIt EdgeIt; -// // typedef typename Graph::OutEdgeIt OutEdgeIt; -// // typedef typename Graph::InEdgeIt InEdgeIt; -// // private: -// // const Graph& G; -// // std::list& S; -// // std::list& T; -// // FlowMap& flow; -// // const CapMap& capacity; -// // typedef ResGraphWrapper AugGraph; -// // typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; -// // typedef typename AugGraph::Edge AugEdge; -// // typename Graph::NodeMap SMap; -// // typename Graph::NodeMap TMap; -// // public: -// // MaxFlow2(const Graph& _G, std::list& _S, std::list& _T, FlowMap& _flow, const CapMap& _capacity) : G(_G), S(_S), T(_T), flow(_flow), capacity(_capacity), SMap(_G), TMap(_G) { -// // for(typename std::list::const_iterator i=S.begin(); -// // i!=S.end(); ++i) { -// // SMap.set(*i, true); -// // } -// // for (typename std::list::const_iterator i=T.begin(); -// // i!=T.end(); ++i) { -// // TMap.set(*i, true); -// // } -// // } -// // bool augment() { -// // AugGraph res_graph(G, flow, capacity); -// // bool _augment=false; -// // Node reached_t_node; - -// // typedef typename AugGraph::NodeMap ReachedMap; -// // BfsIterator4< AugGraph, AugOutEdgeIt, ReachedMap > bfs(res_graph); -// // for(typename std::list::const_iterator i=S.begin(); -// // i!=S.end(); ++i) { -// // bfs.pushAndSetReached(*i); -// // } -// // //bfs.pushAndSetReached(s); - -// // typename AugGraph::NodeMap pred(res_graph); -// // //filled up with invalid iterators - -// // typename AugGraph::NodeMap free(res_graph); - -// // //searching for augmenting path -// // while ( !bfs.finished() ) { -// // AugOutEdgeIt e=/*AugOutEdgeIt*/(bfs); -// // if (e.valid() && bfs.isBNodeNewlyReached()) { -// // Node v=res_graph.source(e); -// // Node w=res_graph.target(e); -// // pred.set(w, e); -// // if (pred.get(v).valid()) { -// // free.set(w, std::min(free.get(v), e.free())); -// // } else { -// // free.set(w, e.free()); -// // } -// // if (TMap.get(res_graph.target(e))) { -// // _augment=true; -// // reached_t_node=res_graph.target(e); -// // break; -// // } -// // } - -// // ++bfs; -// // } //end of searching augmenting path - -// // if (_augment) { -// // Node n=reached_t_node; -// // Num augment_value=free.get(reached_t_node); -// // while (pred.get(n).valid()) { -// // AugEdge e=pred.get(n); -// // e.augment(augment_value); -// // n=res_graph.source(e); -// // } -// // } - -// // return _augment; -// // } -// // void run() { -// // while (augment()) { } -// // } -// // Num flowValue() { -// // Num a=0; -// // for(typename std::list::const_iterator i=S.begin(); -// // i!=S.end(); ++i) { -// // for(OutEdgeIt e=G.template first(*i); e.valid(); ++e) { -// // a+=flow.get(e); -// // } -// // for(InEdgeIt e=G.template first(*i); e.valid(); ++e) { -// // a-=flow.get(e); -// // } -// // } -// // return a; -// // } -// // }; - - -} // namespace lemon - -#endif //LEMON_EDMONDS_KARP_H diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/edmonds_karp.hh --- a/src/work/marci/oldies/edmonds_karp.hh Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,677 +0,0 @@ -#ifndef EDMONDS_KARP_HH -#define EDMONDS_KARP_HH - -#include -#include -#include - -#include -//#include - -namespace hugo { - - template - class ResGraph { - public: - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EachNodeIt EachNodeIt; - private: - typedef typename Graph::SymEdgeIt OldSymEdgeIt; - const Graph& G; - FlowMap& flow; - const CapacityMap& capacity; - public: - ResGraph(const Graph& _G, FlowMap& _flow, - const CapacityMap& _capacity) : - G(_G), flow(_flow), capacity(_capacity) { } - - class EdgeIt; - class OutEdgeIt; - friend class EdgeIt; - friend class OutEdgeIt; - - class EdgeIt { - friend class ResGraph; - protected: - const ResGraph* resG; - OldSymEdgeIt sym; - public: - EdgeIt() { } - //EdgeIt(const EdgeIt& e) : resG(e.resG), sym(e.sym) { } - Number free() const { - if (resG->G.aNode(sym)==resG->G.tail(sym)) { - return (resG->capacity.get(sym)-resG->flow.get(sym)); - } else { - return (resG->flow.get(sym)); - } - } - bool valid() const { return sym.valid(); } - void augment(Number a) const { - if (resG->G.aNode(sym)==resG->G.tail(sym)) { - resG->flow.set(sym, resG->flow.get(sym)+a); - //resG->flow[sym]+=a; - } else { - resG->flow.set(sym, resG->flow.get(sym)-a); - //resG->flow[sym]-=a; - } - } - }; - - class OutEdgeIt : public EdgeIt { - friend class ResGraph; - public: - OutEdgeIt() { } - //OutEdgeIt(const OutEdgeIt& e) { resG=e.resG; sym=e.sym; } - private: - OutEdgeIt(const ResGraph& _resG, NodeIt v) { - resG=&_resG; - sym=resG->G.template first(v); - while( sym.valid() && !(free()>0) ) { ++sym; } - } - public: - OutEdgeIt& operator++() { - ++sym; - while( sym.valid() && !(free()>0) ) { ++sym; } - return *this; - } - }; - - void getFirst(OutEdgeIt& e, NodeIt v) const { - e=OutEdgeIt(*this, v); - } - void getFirst(EachNodeIt& v) const { G.getFirst(v); } - - template< typename It > - It first() const { - It e; - getFirst(e); - return e; - } - - template< typename It > - It first(NodeIt v) const { - It e; - getFirst(e, v); - return e; - } - - NodeIt tail(EdgeIt e) const { return G.aNode(e.sym); } - NodeIt head(EdgeIt e) const { return G.bNode(e.sym); } - - NodeIt aNode(OutEdgeIt e) const { return G.aNode(e.sym); } - NodeIt bNode(OutEdgeIt e) const { return G.bNode(e.sym); } - - int id(NodeIt v) const { return G.id(v); } - - template - class NodeMap { - typename Graph::NodeMap node_map; - public: - NodeMap(const ResGraph& _G) : node_map(_G.G) { } - NodeMap(const ResGraph& _G, S a) : node_map(_G.G, a) { } - void set(NodeIt nit, S a) { node_map.set(nit, a); } - S get(NodeIt nit) const { return node_map.get(nit); } - S& operator[](NodeIt nit) { return node_map[nit]; } - const S& operator[](NodeIt nit) const { return node_map[nit]; } - }; - - }; - - - template - class ResGraph2 { - public: - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EachNodeIt EachNodeIt; - private: - //typedef typename Graph::SymEdgeIt OldSymEdgeIt; - typedef typename Graph::OutEdgeIt OldOutEdgeIt; - typedef typename Graph::InEdgeIt OldInEdgeIt; - - const Graph& G; - FlowMap& flow; - const CapacityMap& capacity; - public: - ResGraph2(const Graph& _G, FlowMap& _flow, - const CapacityMap& _capacity) : - G(_G), flow(_flow), capacity(_capacity) { } - - class EdgeIt; - class OutEdgeIt; - friend class EdgeIt; - friend class OutEdgeIt; - - class EdgeIt { - friend class ResGraph2; - protected: - const ResGraph2* resG; - //OldSymEdgeIt sym; - OldOutEdgeIt out; - OldInEdgeIt in; - bool out_or_in; //true, iff out - public: - EdgeIt() : out_or_in(true) { } - Number free() const { - if (out_or_in) { - return (resG->capacity.get(out)-resG->flow.get(out)); - } else { - return (resG->flow.get(in)); - } - } - bool valid() const { - return out_or_in && out.valid() || in.valid(); } - void augment(Number a) const { - if (out_or_in) { - resG->flow.set(out, resG->flow.get(out)+a); - } else { - resG->flow.set(in, resG->flow.get(in)-a); - } - } - }; - - class OutEdgeIt : public EdgeIt { - friend class ResGraph2; - public: - OutEdgeIt() { } - private: - OutEdgeIt(const ResGraph2& _resG, NodeIt v) { - resG=&_resG; - out=resG->G.template first(v); - while( out.valid() && !(free()>0) ) { ++out; } - if (!out.valid()) { - out_or_in=0; - in=resG->G.template first(v); - while( in.valid() && !(free()>0) ) { ++in; } - } - } - public: - OutEdgeIt& operator++() { - if (out_or_in) { - NodeIt v=resG->G.aNode(out); - ++out; - while( out.valid() && !(free()>0) ) { ++out; } - if (!out.valid()) { - out_or_in=0; - in=resG->G.template first(v); - while( in.valid() && !(free()>0) ) { ++in; } - } - } else { - ++in; - while( in.valid() && !(free()>0) ) { ++in; } - } - return *this; - } - }; - - void getFirst(OutEdgeIt& e, NodeIt v) const { - e=OutEdgeIt(*this, v); - } - void getFirst(EachNodeIt& v) const { G.getFirst(v); } - - template< typename It > - It first() const { - It e; - getFirst(e); - return e; - } - - template< typename It > - It first(NodeIt v) const { - It e; - getFirst(e, v); - return e; - } - - NodeIt tail(EdgeIt e) const { - return ((e.out_or_in) ? G.aNode(e.out) : G.aNode(e.in)); } - NodeIt head(EdgeIt e) const { - return ((e.out_or_in) ? G.bNode(e.out) : G.bNode(e.in)); } - - NodeIt aNode(OutEdgeIt e) const { - return ((e.out_or_in) ? G.aNode(e.out) : G.aNode(e.in)); } - NodeIt bNode(OutEdgeIt e) const { - return ((e.out_or_in) ? G.bNode(e.out) : G.bNode(e.in)); } - - int id(NodeIt v) const { return G.id(v); } - - template - class NodeMap { - typename Graph::NodeMap node_map; - public: - NodeMap(const ResGraph2& _G) : node_map(_G.G) { } - NodeMap(const ResGraph2& _G, S a) : node_map(_G.G, a) { } - void set(NodeIt nit, S a) { node_map.set(nit, a); } - S get(NodeIt nit) const { return node_map.get(nit); } - }; - }; - - - template - class MaxFlow { - public: - typedef typename Graph::NodeIt NodeIt; - typedef typename Graph::EdgeIt EdgeIt; - typedef typename Graph::EachEdgeIt EachEdgeIt; - typedef typename Graph::OutEdgeIt OutEdgeIt; - typedef typename Graph::InEdgeIt InEdgeIt; - - private: - const Graph* G; - NodeIt s; - NodeIt t; - FlowMap* flow; - const CapacityMap* capacity; - typedef ResGraphWrapper AugGraph; - typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; - typedef typename AugGraph::EdgeIt AugEdgeIt; - - //AugGraph res_graph; - //typedef typename AugGraph::NodeMap ReachedMap; - //typename AugGraph::NodeMap pred; - //typename AugGraph::NodeMap free; - public: - MaxFlow(const Graph& _G, NodeIt _s, NodeIt _t, FlowMap& _flow, const CapacityMap& _capacity) : - G(&_G), s(_s), t(_t), flow(&_flow), capacity(&_capacity) //, - //res_graph(G, flow, capacity), pred(res_graph), free(res_graph) - { } - bool augmentOnShortestPath() { - AugGraph res_graph(*G, *flow, *capacity); - bool _augment=false; - - typedef typename AugGraph::NodeMap ReachedMap; - BfsIterator5< AugGraph, /*AugOutEdgeIt,*/ ReachedMap > res_bfs(res_graph); - res_bfs.pushAndSetReached(s); - - typename AugGraph::NodeMap pred(res_graph); - //filled up with invalid iterators - //pred.set(s, AugEdgeIt()); - - typename AugGraph::NodeMap free(res_graph); - - //searching for augmenting path - while ( !res_bfs.finished() ) { - AugOutEdgeIt e=/*AugOutEdgeIt*/(res_bfs); - if (res_graph.valid(e) && res_bfs.isBNodeNewlyReached()) { - NodeIt v=res_graph.tail(e); - NodeIt w=res_graph.head(e); - pred.set(w, e); - if (res_graph.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), res_graph.free(e))); - } else { - free.set(w, res_graph.free(e)); - } - if (res_graph.head(e)==t) { _augment=true; break; } - } - - ++res_bfs; - } //end of searching augmenting path - - if (_augment) { - NodeIt n=t; - Number augment_value=free.get(t); - while (res_graph.valid(pred.get(n))) { - AugEdgeIt e=pred.get(n); - res_graph.augment(e, augment_value); - //e.augment(augment_value); - n=res_graph.tail(e); - } - } - - return _augment; - } - - template bool augmentOnBlockingFlow() { - bool _augment=false; - - AugGraph res_graph(*G, *flow, *capacity); - - typedef typename AugGraph::NodeMap ReachedMap; - BfsIterator4< AugGraph, AugOutEdgeIt, ReachedMap > bfs(res_graph); - - bfs.pushAndSetReached(s); - typename AugGraph::NodeMap dist(res_graph); //filled up with 0's - while ( !bfs.finished() ) { - AugOutEdgeIt e=/*AugOutEdgeIt*/(bfs); - if (res_graph.valid(e) && bfs.isBNodeNewlyReached()) { - dist.set(res_graph.head(e), dist.get(res_graph.tail(e))+1); - } - - ++bfs; - } //computing distances from s in the residual graph - - MutableGraph F; - typename AugGraph::NodeMap res_graph_to_F(res_graph); - for(typename AugGraph::EachNodeIt n=res_graph.template first(); res_graph.valid(n); res_graph.next(n)) { - res_graph_to_F.set(n, F.addNode()); - } - - typename MutableGraph::NodeIt sF=res_graph_to_F.get(s); - typename MutableGraph::NodeIt tF=res_graph_to_F.get(t); - - typename MutableGraph::EdgeMap original_edge(F); - typename MutableGraph::EdgeMap residual_capacity(F); - - //Making F to the graph containing the edges of the residual graph - //which are in some shortest paths - for(typename AugGraph::EachEdgeIt e=res_graph.template first(); res_graph.valid(e); res_graph.next(e)) { - if (dist.get(res_graph.head(e))==dist.get(res_graph.tail(e))+1) { - typename MutableGraph::EdgeIt f=F.addEdge(res_graph_to_F.get(res_graph.tail(e)), res_graph_to_F.get(res_graph.head(e))); - original_edge.update(); - original_edge.set(f, e); - residual_capacity.update(); - residual_capacity.set(f, res_graph.free(e)); - } - } - - bool __augment=true; - - while (__augment) { - __augment=false; - //computing blocking flow with dfs - typedef typename MutableGraph::NodeMap BlockingReachedMap; - DfsIterator4< MutableGraph, typename MutableGraph::OutEdgeIt, BlockingReachedMap > dfs(F); - typename MutableGraph::NodeMap pred(F); //invalid iterators - typename MutableGraph::NodeMap free(F); - - dfs.pushAndSetReached(sF); - while (!dfs.finished()) { - ++dfs; - if (F.valid(typename MutableGraph::OutEdgeIt(dfs))) { - if (dfs.isBNodeNewlyReached()) { -// std::cout << "OutEdgeIt: " << dfs; -// std::cout << " aNode: " << F.aNode(dfs); -// std::cout << " bNode: " << F.bNode(dfs) << " "; - - typename MutableGraph::NodeIt v=F.aNode(dfs); - typename MutableGraph::NodeIt w=F.bNode(dfs); - pred.set(w, dfs); - if (F.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), residual_capacity.get(dfs))); - } else { - free.set(w, residual_capacity.get(dfs)); - } - if (w==tF) { - //std::cout << "AUGMENTATION"< EAugGraph; - typedef FilterGraphWrapper< ErasingResGraphWrapper > EAugGraph; - typedef typename EAugGraph::OutEdgeIt EAugOutEdgeIt; - typedef typename EAugGraph::EdgeIt EAugEdgeIt; - - EAugGraph res_graph(*G, *flow, *capacity); - - //std::cout << "meg jo1" << std::endl; - - //typedef typename EAugGraph::NodeMap ReachedMap; - BfsIterator4< - ErasingResGraphWrapper, - ErasingResGraphWrapper::OutEdgeIt, - ErasingResGraphWrapper::NodeMap > bfs(res_graph); - - //std::cout << "meg jo2" << std::endl; - - bfs.pushAndSetReached(s); - //std::cout << "meg jo2.5" << std::endl; - - //typename EAugGraph::NodeMap dist(res_graph); //filled up with 0's - typename ErasingResGraphWrapper:: - NodeMap& dist=res_graph.dist; - //std::cout << "meg jo2.6" << std::endl; - - while ( !bfs.finished() ) { - ErasingResGraphWrapper::OutEdgeIt e=bfs; -// EAugOutEdgeIt e=/*AugOutEdgeIt*/(bfs); - //if (res_graph.valid(e)) { - // std::cout<<"a:"<(); res_graph.valid(n); res_graph.next(n)) { -// std::cout << "dist: " << dist.get(n) << std::endl; -// } - - bool __augment=true; - - while (__augment) { -// std::cout << "new iteration"<< std::endl; - - __augment=false; - //computing blocking flow with dfs - typedef typename EAugGraph::NodeMap BlockingReachedMap; - DfsIterator4< EAugGraph, EAugOutEdgeIt, BlockingReachedMap > - dfs(res_graph); - typename EAugGraph::NodeMap pred(res_graph); //invalid iterators - typename EAugGraph::NodeMap free(res_graph); - - dfs.pushAndSetReached(s); - while (!dfs.finished()) { - ++dfs; - if (res_graph.valid(EAugOutEdgeIt(dfs))) { - if (dfs.isBNodeNewlyReached()) { -// std::cout << "OutEdgeIt: " << dfs; -// std::cout << " aNode: " << res_graph.aNode(dfs); -// std::cout << " res cap: " << EAugOutEdgeIt(dfs).free(); -// std::cout << " bNode: " << res_graph.bNode(dfs) << " "; - - typename EAugGraph::NodeIt v=res_graph.aNode(dfs); - typename EAugGraph::NodeIt w=res_graph.bNode(dfs); - - pred.set(w, EAugOutEdgeIt(dfs)); - - //std::cout << EAugOutEdgeIt(dfs).free() << std::endl; - if (res_graph.valid(pred.get(v))) { - free.set(w, std::min(free.get(v), res_graph.free(/*EAugOutEdgeIt*/(dfs)))); - } else { - free.set(w, res_graph.free(/*EAugOutEdgeIt*/(dfs))); - } - - if (w==t) { -// std::cout << "t is reached, AUGMENTATION"<> "; - - res_graph.erase(dfs); - } - } - - } - - if (__augment) { - typename EAugGraph::NodeIt n=t; - Number augment_value=free.get(t); -// std::cout << "av:" << augment_value << std::endl; - while (res_graph.valid(pred.get(n))) { - EAugEdgeIt e=pred.get(n); - res_graph.augment(e, augment_value); - //e.augment(augment_value); - n=res_graph.tail(e); - if (res_graph.free(e)==0) - res_graph.erase(e); - } - } - - } - - return _augment; - } - void run() { - //int num_of_augmentations=0; - while (augmentOnShortestPath()) { - //while (augmentOnBlockingFlow()) { - //std::cout << ++num_of_augmentations << " "; - //std::cout< void run() { - //int num_of_augmentations=0; - //while (augmentOnShortestPath()) { - while (augmentOnBlockingFlow()) { - //std::cout << ++num_of_augmentations << " "; - //std::cout<getFirst(e, s); G->valid(e); G->next(e)) { - a+=flow->get(e); - } - return a; - } - }; - - -// template -// class MaxFlow2 { -// public: -// typedef typename Graph::NodeIt NodeIt; -// typedef typename Graph::EdgeIt EdgeIt; -// typedef typename Graph::EachEdgeIt EachEdgeIt; -// typedef typename Graph::OutEdgeIt OutEdgeIt; -// typedef typename Graph::InEdgeIt InEdgeIt; -// private: -// const Graph& G; -// std::list& S; -// std::list& T; -// FlowMap& flow; -// const CapacityMap& capacity; -// typedef ResGraphWrapper AugGraph; -// typedef typename AugGraph::OutEdgeIt AugOutEdgeIt; -// typedef typename AugGraph::EdgeIt AugEdgeIt; -// typename Graph::NodeMap SMap; -// typename Graph::NodeMap TMap; -// public: -// MaxFlow2(const Graph& _G, std::list& _S, std::list& _T, FlowMap& _flow, const CapacityMap& _capacity) : G(_G), S(_S), T(_T), flow(_flow), capacity(_capacity), SMap(_G), TMap(_G) { -// for(typename std::list::const_iterator i=S.begin(); -// i!=S.end(); ++i) { -// SMap.set(*i, true); -// } -// for (typename std::list::const_iterator i=T.begin(); -// i!=T.end(); ++i) { -// TMap.set(*i, true); -// } -// } -// bool augment() { -// AugGraph res_graph(G, flow, capacity); -// bool _augment=false; -// NodeIt reached_t_node; - -// typedef typename AugGraph::NodeMap ReachedMap; -// BfsIterator4< AugGraph, AugOutEdgeIt, ReachedMap > res_bfs(res_graph); -// for(typename std::list::const_iterator i=S.begin(); -// i!=S.end(); ++i) { -// res_bfs.pushAndSetReached(*i); -// } -// //res_bfs.pushAndSetReached(s); - -// typename AugGraph::NodeMap pred(res_graph); -// //filled up with invalid iterators - -// typename AugGraph::NodeMap free(res_graph); - -// //searching for augmenting path -// while ( !res_bfs.finished() ) { -// AugOutEdgeIt e=/*AugOutEdgeIt*/(res_bfs); -// if (e.valid() && res_bfs.isBNodeNewlyReached()) { -// NodeIt v=res_graph.tail(e); -// NodeIt w=res_graph.head(e); -// pred.set(w, e); -// if (pred.get(v).valid()) { -// free.set(w, std::min(free.get(v), e.free())); -// } else { -// free.set(w, e.free()); -// } -// if (TMap.get(res_graph.head(e))) { -// _augment=true; -// reached_t_node=res_graph.head(e); -// break; -// } -// } - -// ++res_bfs; -// } //end of searching augmenting path - -// if (_augment) { -// NodeIt n=reached_t_node; -// Number augment_value=free.get(reached_t_node); -// while (pred.get(n).valid()) { -// AugEdgeIt e=pred.get(n); -// e.augment(augment_value); -// n=res_graph.tail(e); -// } -// } - -// return _augment; -// } -// void run() { -// while (augment()) { } -// } -// Number flowValue() { -// Number a=0; -// for(typename std::list::const_iterator i=S.begin(); -// i!=S.end(); ++i) { -// for(OutEdgeIt e=G.template first(*i); e.valid(); ++e) { -// a+=flow.get(e); -// } -// for(InEdgeIt e=G.template first(*i); e.valid(); ++e) { -// a-=flow.get(e); -// } -// } -// return a; -// } -// }; - - - -} // namespace hugo - -#endif //EDMONDS_KARP_HH diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/list_graph.hh --- a/src/work/marci/oldies/list_graph.hh Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,552 +0,0 @@ -#ifndef LIST_GRAPH_HH -#define LIST_GRAPH_HH - -#include -#include - -namespace hugo { - - template - int count(It it) { - int i=0; - for( ; it.valid(); ++it) { ++i; } - return i; - } - - class ListGraph { - - class node_item; - class edge_item; - - public: - - class NodeIt; - class EachNodeIt; - class EdgeIt; - class EachEdgeIt; - class OutEdgeIt; - class InEdgeIt; - class SymEdgeIt; - template class NodeMap; - template class EdgeMap; - - private: - - template friend class NodeMap; - template friend class EdgeMap; - - template - class NodeMap { - const ListGraph& G; - std::vector container; - public: - typedef T ValueType; - typedef NodeIt KeyType; - NodeMap(const ListGraph& _G) : G(_G), container(G.node_id) { } - NodeMap(const ListGraph& _G, T a) : - G(_G), container(G.node_id, a) { } - void set(NodeIt n, T a) { container[/*G.id(n)*/n.node->id]=a; } - T get(NodeIt n) const { return container[/*G.id(n)*/n.node->id]; } - T& operator[](NodeIt n) { return container[/*G.id(n)*/n.node->id]; } - const T& operator[](NodeIt n) const { return container[/*G.id(n)*/n.node->id]; } - void update() { container.resize(G.node_id); } - void update(T a) { container.resize(G.node_id, a); } - }; - - template - class EdgeMap { - const ListGraph& G; - std::vector container; - public: - typedef T ValueType; - typedef EdgeIt KeyType; - EdgeMap(const ListGraph& _G) : G(_G), container(G.edge_id) { } - EdgeMap(const ListGraph& _G, T a) : - G(_G), container(G.edge_id, a) { } - void set(EdgeIt e, T a) { container[/*G.id(e)*/e.edge->id]=a; } - T get(EdgeIt e) const { return container[/*G.id(e)*/e.edge->id]; } - T& operator[](EdgeIt e) { return container[/*G.id(e)*/e.edge->id]; } - const T& operator[](EdgeIt e) const { return container[/*G.id(e)*/e.edge->id]; } - void update() { container.resize(G.edge_id); } - void update(T a) { container.resize(G.edge_id, a); } - }; - - int node_id; - int edge_id; - int _node_num; - int _edge_num; - - node_item* _first_node; - node_item* _last_node; - - class node_item { - friend class ListGraph; - template friend class NodeMap; - - friend class NodeIt; - friend class EachNodeIt; - friend class EdgeIt; - friend class EachEdgeIt; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class SymEdgeIt; - friend std::ostream& operator<<(std::ostream& os, const NodeIt& i); - friend std::ostream& operator<<(std::ostream& os, const EdgeIt& i); - //ListGraph* G; - int id; - edge_item* _first_out_edge; - edge_item* _last_out_edge; - edge_item* _first_in_edge; - edge_item* _last_in_edge; - node_item* _next_node; - node_item* _prev_node; - public: - node_item() { } - }; - - class edge_item { - friend class ListGraph; - template friend class EdgeMap; - - friend class NodeIt; - friend class EachNodeIt; - friend class EdgeIt; - friend class EachEdgeIt; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class SymEdgeIt; - friend std::ostream& operator<<(std::ostream& os, const EdgeIt& i); - //ListGraph* G; - int id; - node_item* _tail; - node_item* _head; - edge_item* _next_out; - edge_item* _prev_out; - edge_item* _next_in; - edge_item* _prev_in; - public: - edge_item() { } - }; - - node_item* _add_node() { - node_item* p=new node_item; - p->id=node_id++; - p->_first_out_edge=0; - p->_last_out_edge=0; - p->_first_in_edge=0; - p->_last_in_edge=0; - p->_prev_node=_last_node; - p->_next_node=0; - if (_last_node) _last_node->_next_node=p; - _last_node=p; - if (!_first_node) _first_node=p; - - ++_node_num; - return p; - } - - edge_item* _add_edge(node_item* _tail, node_item* _head) { - edge_item* e=new edge_item; - e->id=edge_id++; - e->_tail=_tail; - e->_head=_head; - - e->_prev_out=_tail->_last_out_edge; - if (_tail->_last_out_edge) (_tail->_last_out_edge)->_next_out=e; - _tail->_last_out_edge=e; - if (!_tail->_first_out_edge) _tail->_first_out_edge=e; - e->_next_out=0; - - e->_prev_in=_head->_last_in_edge; - if (_head->_last_in_edge) (_head->_last_in_edge)->_next_in=e; - _head->_last_in_edge=e; - if (!_head->_first_in_edge) { _head->_first_in_edge=e; } - e->_next_in=0; - - ++_edge_num; - return e; - } - - //deletes a node which has no out edge and no in edge - void _delete_node(node_item* v) { - if (v->_next_node) (v->_next_node)->_prev_node=v->_prev_node; else - _last_node=v->_prev_node; - if (v->_prev_node) (v->_prev_node)->_next_node=v->_next_node; else - _first_node=v->_next_node; - - delete v; - --_node_num; - } - - void _delete_edge(edge_item* e) { - if (e->_next_out) (e->_next_out)->_prev_out=e->_prev_out; else - (e->_tail)->_last_out_edge=e->_prev_out; - if (e->_prev_out) (e->_prev_out)->_next_out=e->_next_out; else - (e->_tail)->_first_out_edge=e->_next_out; - if (e->_next_in) (e->_next_in)->_prev_in=e->_prev_in; else - (e->_head)->_last_in_edge=e->_prev_in; - if (e->_prev_in) (e->_prev_in)->_next_in=e->_next_in; else - (e->_head)->_first_in_edge=e->_next_in; - - delete e; - --_edge_num; - } - - void _set_tail(edge_item* e, node_item* _tail) { - if (e->_next_out) (e->_next_out)->_prev_out=e->_prev_out; else - (e->_tail)->_last_out_edge=e->_prev_out; - if (e->_prev_out) (e->_prev_out)->_next_out=e->_next_out; else - (e->_tail)->_first_out_edge=e->_next_out; - - e->_tail=_tail; - - e->_prev_out=_tail->_last_out_edge; - if (_tail->_last_out_edge) (_tail->_last_out_edge)->_next_out=e; - _tail->_last_out_edge=e; - if (!_tail->_first_out_edge) _tail->_first_out_edge=e; - e->_next_out=0; - } - - void _set_head(edge_item* e, node_item* _head) { - if (e->_next_in) (e->_next_in)->_prev_in=e->_prev_in; else - (e->_head)->_last_in_edge=e->_prev_in; - if (e->_prev_in) (e->_prev_in)->_next_in=e->_next_in; else - (e->_head)->_first_in_edge=e->_next_in; - - e->_head=_head; - - e->_prev_in=_head->_last_in_edge; - if (_head->_last_in_edge) (_head->_last_in_edge)->_next_in=e; - _head->_last_in_edge=e; - if (!_head->_first_in_edge) { _head->_first_in_edge=e; } - e->_next_in=0; - } - - public: - - /* default constructor */ - - ListGraph() : node_id(0), edge_id(0), _node_num(0), _edge_num(0), _first_node(0), _last_node(0) { } - - ~ListGraph() { - while (first().valid()) erase(first()); - } - - int nodeNum() const { return _node_num; } - int edgeNum() const { return _edge_num; } - - /* functions to construct iterators from the graph, or from each other */ - - //EachNodeIt firstNode() const { return EachNodeIt(*this); } - //EachEdgeIt firstEdge() const { return EachEdgeIt(*this); } - - //OutEdgeIt firstOutEdge(const NodeIt v) const { return OutEdgeIt(v); } - //InEdgeIt firstInEdge(const NodeIt v) const { return InEdgeIt(v); } - //SymEdgeIt firstSymEdge(const NodeIt v) const { return SymEdgeIt(v); } - NodeIt tail(EdgeIt e) const { return e.tailNode(); } - NodeIt head(EdgeIt e) const { return e.headNode(); } - - NodeIt aNode(const OutEdgeIt& e) const { return e.aNode(); } - NodeIt aNode(const InEdgeIt& e) const { return e.aNode(); } - NodeIt aNode(const SymEdgeIt& e) const { return e.aNode(); } - - NodeIt bNode(const OutEdgeIt& e) const { return e.bNode(); } - NodeIt bNode(const InEdgeIt& e) const { return e.bNode(); } - NodeIt bNode(const SymEdgeIt& e) const { return e.bNode(); } - - //NodeIt invalid_node() { return NodeIt(); } - //EdgeIt invalid_edge() { return EdgeIt(); } - //OutEdgeIt invalid_out_edge() { return OutEdgeIt(); } - //InEdgeIt invalid_in_edge() { return InEdgeIt(); } - //SymEdgeIt invalid_sym_edge() { return SymEdgeIt(); } - - /* same methods in other style */ - /* for experimental purpose */ - - EachNodeIt& getFirst(EachNodeIt& v) const { - v=EachNodeIt(*this); return v; } - EachEdgeIt& getFirst(EachEdgeIt& e) const { - e=EachEdgeIt(*this); return e; } - OutEdgeIt& getFirst(OutEdgeIt& e, NodeIt v) const { - e=OutEdgeIt(v); return e; } - InEdgeIt& getFirst(InEdgeIt& e, NodeIt v) const { - e=InEdgeIt(v); return e; } - SymEdgeIt& getFirst(SymEdgeIt& e, NodeIt v) const { - e=SymEdgeIt(v); return e; } - //void getTail(NodeIt& n, const EdgeIt& e) const { n=tail(e); } - //void getHead(NodeIt& n, const EdgeIt& e) const { n=head(e); } - - //void getANode(NodeIt& n, const OutEdgeIt& e) const { n=e.aNode(); } - //void getANode(NodeIt& n, const InEdgeIt& e) const { n=e.aNode(); } - //void getANode(NodeIt& n, const SymEdgeIt& e) const { n=e.aNode(); } - //void getBNode(NodeIt& n, const OutEdgeIt& e) const { n=e.bNode(); } - //void getBNode(NodeIt& n, const InEdgeIt& e) const { n=e.bNode(); } - //void getBNode(NodeIt& n, const SymEdgeIt& e) const { n=e.bNode(); } - //void get_invalid(NodeIt& n) { n=NodeIt(); } - //void get_invalid(EdgeIt& e) { e=EdgeIt(); } - //void get_invalid(OutEdgeIt& e) { e=OutEdgeIt(); } - //void get_invalid(InEdgeIt& e) { e=InEdgeIt(); } - //void get_invalid(SymEdgeIt& e) { e=SymEdgeIt(); } - - template< typename It > - It first() const { - It e; - getFirst(e); - return e; - } - - template< typename It > - It first(NodeIt v) const { - It e; - getFirst(e, v); - return e; - } - - bool valid(NodeIt n) const { return n.valid(); } - bool valid(EdgeIt e) const { return e.valid(); } - - template It getNext(It it) const { - It tmp(it); return next(tmp); } - template It& next(It& it) const { return ++it; } - - - /* for getting id's of graph objects */ - /* these are important for the implementation of property vectors */ - - int id(NodeIt v) const { return v.node->id; } - int id(EdgeIt e) const { return e.edge->id; } - - /* adding nodes and edges */ - - NodeIt addNode() { return NodeIt(_add_node()); } - EdgeIt addEdge(NodeIt u, NodeIt v) { - return EdgeIt(_add_edge(u.node, v.node)); - } - - void erase(NodeIt i) { - while (first(i).valid()) erase(first(i)); - while (first(i).valid()) erase(first(i)); - _delete_node(i.node); - } - - void erase(EdgeIt e) { _delete_edge(e.edge); } - - void clear() { - while (first().valid()) erase(first()); - } - - void setTail(EdgeIt e, NodeIt tail) { - _set_tail(e.edge, tail.node); - } - - void setHead(EdgeIt e, NodeIt head) { - _set_head(e.edge, head.node); - } - - /* stream operations, for testing purpose */ - - friend std::ostream& operator<<(std::ostream& os, const NodeIt& i) { - os << i.node->id; return os; - } - friend std::ostream& operator<<(std::ostream& os, const EdgeIt& i) { - os << "(" << i.edge->_tail->id << "--" << i.edge->id << "->" << i.edge->_head->id << ")"; - return os; - } - - class NodeIt { - friend class ListGraph; - template friend class NodeMap; - - friend class EdgeIt; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class SymEdgeIt; - //public: //FIXME: It is required by op= of EachNodeIt - protected: - node_item* node; - protected: - friend int ListGraph::id(NodeIt v) const; - public: - NodeIt() : node(0) { } - NodeIt(node_item* _node) : node(_node) { } - bool valid() const { return (node!=0); } - //void makeInvalid() { node=0; } - friend bool operator==(const NodeIt& u, const NodeIt& v) { - return v.node==u.node; - } - friend bool operator!=(const NodeIt& u, const NodeIt& v) { - return v.node!=u.node; - } - friend std::ostream& operator<<(std::ostream& os, const NodeIt& i); - }; - - class EachNodeIt : public NodeIt { - friend class ListGraph; - //protected: - public: //for everybody but marci - EachNodeIt(const ListGraph& G) : NodeIt(G._first_node) { } - public: - EachNodeIt() : NodeIt() { } - EachNodeIt(node_item* v) : NodeIt(v) { } - EachNodeIt& operator++() { node=node->_next_node; return *this; } - //FIXME:: - // EachNodeIt& operator=(const NodeIt& e) - // { node=e.node; return *this; } - }; - - class EdgeIt { - friend class ListGraph; - template friend class EdgeMap; - - friend class NodeIt; - friend class EachNodeIt; - protected: - edge_item* edge; - friend int ListGraph::id(EdgeIt e) const; - public: - EdgeIt() : edge(0) { } - //EdgeIt() { } - EdgeIt(edge_item* _edge) : edge(_edge) { } - bool valid() const { return (edge!=0); } - //void makeInvalid() { edge=0; } - friend bool operator==(const EdgeIt& u, const EdgeIt& v) { - return v.edge==u.edge; - } - friend bool operator!=(const EdgeIt& u, const EdgeIt& v) { - return v.edge!=u.edge; - } - protected: - NodeIt tailNode() const { return NodeIt(edge->_tail); } - NodeIt headNode() const { return NodeIt(edge->_head); } - public: - friend std::ostream& operator<<(std::ostream& os, const EdgeIt& i); - }; - - class EachEdgeIt : public EdgeIt { - friend class ListGraph; - //protected: - public: //for alpar - EachEdgeIt(const ListGraph& G) { - node_item* v=G._first_node; - if (v) edge=v->_first_out_edge; else edge=0; - while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; } - } - public: - EachEdgeIt() : EdgeIt() { } - EachEdgeIt(edge_item* _e) : EdgeIt(_e) { } - EachEdgeIt& operator++() { - node_item* v=edge->_tail; - edge=edge->_next_out; - while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; } - return *this; - } - }; - - class OutEdgeIt : public EdgeIt { - friend class ListGraph; - //node_item* v; - //protected: - public: //for alpar - OutEdgeIt(const NodeIt& _v) /*: v(_v.node)*/ { edge=_v.node->_first_out_edge; } - public: - OutEdgeIt() : EdgeIt()/*, v(0)*/ { } - OutEdgeIt(const ListGraph& G, NodeIt _v) /*: v(_v.node)*/ { edge=_v.node->_first_out_edge; } - OutEdgeIt& operator++() { edge=edge->_next_out; return *this; } - protected: - NodeIt aNode() const { return NodeIt(edge->_tail); } - NodeIt bNode() const { return NodeIt(edge->_head); } - }; - - class InEdgeIt : public EdgeIt { - friend class ListGraph; - //node_item* v; - //protected: - public: //for alpar - InEdgeIt(const NodeIt& _v) /*: v(_v.node)*/ { edge=_v.node->_first_in_edge; } - public: - InEdgeIt() : EdgeIt()/*, v(0)*/ { } - InEdgeIt(const ListGraph& G, NodeIt _v) /*: v(_v.node)*/ { edge=_v.node->_first_in_edge; } - InEdgeIt& operator++() { edge=edge->_next_in; return *this; } - protected: - NodeIt aNode() const { return NodeIt(edge->_head); } - NodeIt bNode() const { return NodeIt(edge->_tail); } - }; - - class SymEdgeIt : public EdgeIt { - friend class ListGraph; - bool out_or_in; //1 iff out, 0 iff in - //node_item* v; - //protected: - public: //for alpar - SymEdgeIt(const NodeIt& _v) /*: v(_v.node)*/ { - out_or_in=1; - edge=_v.node->_first_out_edge; - if (!edge) { edge=_v.node->_first_in_edge; out_or_in=0; } - } - public: - SymEdgeIt() : EdgeIt() /*, v(0)*/ { } - SymEdgeIt(const ListGraph& G, NodeIt _v) /*: v(_v.node)*/ { - out_or_in=1; - edge=_v.node->_first_out_edge; - if (!edge) { edge=_v.node->_first_in_edge; out_or_in=0; } - } - SymEdgeIt& operator++() { - if (out_or_in) { - node_item* v=edge->_tail; - edge=edge->_next_out; - if (!edge) { out_or_in=0; edge=v->_first_in_edge; } - } else { - edge=edge->_next_in; - } - return *this; - } - protected: - NodeIt aNode() const { - return (out_or_in) ? NodeIt(edge->_tail) : NodeIt(edge->_head); } - NodeIt bNode() const { - return (out_or_in) ? NodeIt(edge->_head) : NodeIt(edge->_tail); } - }; - - }; - -// template< typename T > -// T ListGraph::first() const { -// std::cerr << "Invalid use of template T ListGraph::first();" << std::endl; -// return T(); -// } - -// template<> -// ListGraph::EachNodeIt ListGraph::first() const { -// return firstNode(); -// } - -// template<> -// ListGraph::EachEdgeIt ListGraph::first() const { -// return firstEdge(); -// } - -// template< typename T > -// T ListGraph::first(ListGraph::NodeIt v) const { -// std::cerr << "Invalid use of template T ListGraph::first(ListGRaph::NodeIt);" << std::endl; -// return T(); -// } - -// template<> -// ListGraph::OutEdgeIt ListGraph::first(const ListGraph::NodeIt v) const { -// return firstOutEdge(v); -// } - -// template<> -// ListGraph::InEdgeIt ListGraph::first(const ListGraph::NodeIt v) const { -// return firstInEdge(v); -// } - -// template<> -// ListGraph::SymEdgeIt ListGraph::first(const ListGraph::NodeIt v) const { -// return firstSymEdge(v); -// } - - -} //namespace hugo - -#endif //LIST_GRAPH_HH diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/marci_bfs.hh --- a/src/work/marci/oldies/marci_bfs.hh Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,176 +0,0 @@ -#ifndef MARCI_BFS_HH -#define MARCI_BFS_HH - -#include - -#include - -namespace hugo { - - template - struct bfs { - typedef typename graph_type::node_iterator node_iterator; - typedef typename graph_type::edge_iterator edge_iterator; - typedef typename graph_type::each_node_iterator each_node_iterator; - typedef typename graph_type::out_edge_iterator out_edge_iterator; - graph_type& G; - node_iterator s; - node_property_vector reached; - node_property_vector pred; - node_property_vector dist; - std::queue bfs_queue; - bfs(graph_type& _G, node_iterator _s) : G(_G), s(_s), reached(_G), pred(_G), dist(_G) { - bfs_queue.push(s); - for(each_node_iterator i=G.first_node(); i.valid(); ++i) - reached.put(i, false); - reached.put(s, true); - dist.put(s, 0); - } - - void run() { - while (!bfs_queue.empty()) { - node_iterator v=bfs_queue.front(); - out_edge_iterator e=G.first_out_edge(v); - bfs_queue.pop(); - for( ; e.valid(); ++e) { - node_iterator w=G.head(e); - std::cout << "scan node " << G.id(w) << " from node " << G.id(v) << std::endl; - if (!reached.get(w)) { - std::cout << G.id(w) << " is newly reached :-)" << std::endl; - bfs_queue.push(w); - dist.put(w, dist.get(v)+1); - pred.put(w, e); - reached.put(w, true); - } else { - std::cout << G.id(w) << " is already reached" << std::endl; - } - } - } - } - }; - - template - struct bfs_visitor { - typedef typename graph_type::node_iterator node_iterator; - typedef typename graph_type::edge_iterator edge_iterator; - typedef typename graph_type::out_edge_iterator out_edge_iterator; - graph_type& G; - bfs_visitor(graph_type& _G) : G(_G) { } - void at_previously_reached(out_edge_iterator& e) { - //node_iterator v=G.tail(e); - node_iterator w=G.head(e); - std::cout << G.id(w) << " is already reached" << std::endl; - } - void at_newly_reached(out_edge_iterator& e) { - //node_iterator v=G.tail(e); - node_iterator w=G.head(e); - std::cout << G.id(w) << " is newly reached :-)" << std::endl; - } - }; - - template - struct bfs_iterator { - typedef typename graph_type::node_iterator node_iterator; - typedef typename graph_type::edge_iterator edge_iterator; - typedef typename graph_type::out_edge_iterator out_edge_iterator; - graph_type& G; - std::queue& bfs_queue; - reached_type& reached; - visitor_type& visitor; - void process() { - while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - if (bfs_queue.empty()) return; - out_edge_iterator e=bfs_queue.front(); - //node_iterator v=G.tail(e); - node_iterator w=G.head(e); - if (!reached.get(w)) { - visitor.at_newly_reached(e); - bfs_queue.push(G.first_out_edge(w)); - reached.put(w, true); - } else { - visitor.at_previously_reached(e); - } - } - bfs_iterator(graph_type& _G, std::queue& _bfs_queue, reached_type& _reached, visitor_type& _visitor) : G(_G), bfs_queue(_bfs_queue), reached(_reached), visitor(_visitor) { - //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - valid(); - } - bfs_iterator& operator++() { - //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - //if (bfs_queue.empty()) return *this; - if (!valid()) return *this; - ++(bfs_queue.front()); - //while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - valid(); - return *this; - } - //void next() { - // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - // if (bfs_queue.empty()) return; - // ++(bfs_queue.front()); - // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - //} - bool valid() { - while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - if (bfs_queue.empty()) return false; else return true; - } - //bool finished() { - // while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - // if (bfs_queue.empty()) return true; else return false; - //} - operator edge_iterator () { return bfs_queue.front(); } - - }; - - template - struct bfs_iterator1 { - typedef typename graph_type::node_iterator node_iterator; - typedef typename graph_type::edge_iterator edge_iterator; - typedef typename graph_type::out_edge_iterator out_edge_iterator; - graph_type& G; - std::queue& bfs_queue; - reached_type& reached; - bool _newly_reached; - bfs_iterator1(graph_type& _G, std::queue& _bfs_queue, reached_type& _reached) : G(_G), bfs_queue(_bfs_queue), reached(_reached) { - valid(); - if (!bfs_queue.empty() && bfs_queue.front().valid()) { - out_edge_iterator e=bfs_queue.front(); - node_iterator w=G.head(e); - if (!reached.get(w)) { - bfs_queue.push(G.first_out_edge(w)); - reached.put(w, true); - _newly_reached=true; - } else { - _newly_reached=false; - } - } - } - bfs_iterator1& operator++() { - if (!valid()) return *this; - ++(bfs_queue.front()); - valid(); - if (!bfs_queue.empty() && bfs_queue.front().valid()) { - out_edge_iterator e=bfs_queue.front(); - node_iterator w=G.head(e); - if (!reached.get(w)) { - bfs_queue.push(G.first_out_edge(w)); - reached.put(w, true); - _newly_reached=true; - } else { - _newly_reached=false; - } - } - return *this; - } - bool valid() { - while ( !bfs_queue.empty() && !bfs_queue.front().valid() ) { bfs_queue.pop(); } - if (bfs_queue.empty()) return false; else return true; - } - operator edge_iterator () { return bfs_queue.front(); } - bool newly_reached() { return _newly_reached; } - - }; - -} // namespace hugo - -#endif //MARCI_BFS_HH diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/marci_graph_concept.txt --- a/src/work/marci/oldies/marci_graph_concept.txt Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,217 +0,0 @@ -ETIK-OL-NOLIB-NEGRES graph concept-ek. - - Ebben a dokumentacioban graph concept tervek es azok megvalositasarol irok. -A felsorolt rutinok, osztalyok egyaltalan nem kikristalyosodottak, 1-1 elemi -operacio elvegzesere gyakran tobb mod is rendelkezesre all. A tervezesi fazisban pont annak kell kiderulnie, hogy milyen metodusok tavolithatok el, s milyen -ujakra van szukseg. - - Megvalositottunk egy graph osztalyt mely listaban tarolja a pontokat, -az 1 pontbol kiindulo eleket, s az 1 pontba bemeno eleket. Konstrualni lehet -ures grafot, hozzaadni pontokat, eleket. Az incidenciat node_iteratorok-kal -ill. edge_iteratorokkal lehet megfigyelni. Adott tovabba 1 template osztaly, -a graf pontjaihoz vagy eleihez tetszoleges tipusu property hozzarendelesere, -a jelen megvalositas ezeket vektorben tarolja. Fontos azonban, hogy ezen -property_vector csak azokra a graf-objektumokra ervenyes, melyek -letrehozasanak pillanataban a grafhoz tartoznak. - -marci_bfs.hh //bfs, tejesen kiserleti -marci_graph_demo.cc //peldaprogi a lisas graf hasznalatahoz -marci_list_graph.hh //list_graph megvalositas -marci_max_flow.hh //folyam, kiserleti -marci_property_vector.hh //property vector megvalosites indexelt grafokhoz -graf es iterator tipusok: - -class list_graph; - -class node_iterator; -trivialis node iterator, csak cimezni lehet vele, pl property vectort - -class each_node_iterator; -node iterator a graf pontjainak bejarasara, node_iterator-ra konvertalhato - -class edge_iterator; -trivialis edge iterator, csak cimezni lehet vele, pl property vectort - -class each_edge_iterator; -edge iterator a graf osszes elenek bejarasara - -class out_edge_iterator; -edge iterator 1 pont ki eleinek bejarasara, edge_iterator-ra konvertalhato - -class in_edge_iterator; -edge iterator 1 pont be eleinek bejarasara, edge_iterator-ra konvertalhato - -class sym_edge_iterator; -edge iterator 1 pont be es ki eleinek bejarasara, edge_iterator-ra -konvertalhato - -default constructor: - -list_graph(); - -A graf osztaly fobb publikus metodusai, az alapveto hasznalathoz: -Hasonlo funkciok megvalosithatok 1 kesobb leirt modon, illetve -ezek kozul nehany az iteratorok metodusaival, megis azt javasolnam, hogy az -iteratorok metodusait ne hasznaljuk. Miert? Azt szeretnenk, ha 1 ponthalmazon -van 2 graf, es csak az elhalmazhoz keszitunk uj iteratorokat, akkor pl 1 pont -out-edge-iteratora megkaphato legyen a grafbol es a node_iteratorbol. Ezert -out_edge_iterator(const node_iterator&) hasznalata nem javasolt, -esetleg majd szamuzzuk a concept-bol, s akkor nem nesz baj. - -each_node_iterator first_node(); -each_edge_iterator first_edge(); -out_edge_iterator first_out_edge(const node_iterator&); -in_edge_iterator first_in_edge(const node_iterator&); -sym_edge_iterator first_sym_edge(const node_iterator&); - -node_iterator tail(const edge_iterator&); -node_iterator head(const edge_iterator&); - -node_iterator a_node(const out_edge_iterator&); -node_iterator a_node(const in_edge_iterator&); -node_iterator a_node(const sym_edge_iterator&); -//az out, in or sym edge iterator rogzitett pontjara ad 1 node_iterator-t - -node_iterator b_node(const out_edge_iterator&); -node_iterator b_node(const in_edge_iterator&); -node_iterator b_node(const sym_edge_iterator&); -//az out, in or sym edge iterator nem rogzitett pontjara ad 1 node_iterator-t - -//node_iterator invalid_node(); -//edge_iterator invalid_edge(); -//out_edge_iterator invalid_out_edge(); -//in_edge_iterator invalid_in_edge(); -//sym_edge_iterator invalid_sym_edge(); - -//az iteratorok ures konstruktorai meghatarozatlan -tartalmu konstruktort adnak vissza, ezekkel a matodusokkal -lehet ervenytelent csinalni. -Lehet hogy ezt az ures konstruktorral kellene, tessek vitatkozni. - -Kiserleti cellal ugyanezen fv-ek mas stilusu megvalositasai: - -void get_first(each_node_iterator&); -void get_first(each_edge_iterator&); -void get_first(out_edge_iterator&, const node_iterator&); -void get_first(in_edge_iterator&, const node_iterator&); -void get_first(sym_edge_iterator&, const node_iterator&); - -void get_tail(node_iterator&, const edge_iterator&); -void get_head(node_iterator&, const edge_iterator&); - -void get_a_node(node_iterator&, const out_edge_iterator&); -void get_a_node(node_iterator&, const in_edge_iterator&); -void get_a_node(node_iterator&, const sym_edge_iterator&); - -void get_b_node(node_iterator&, const out_edge_iterator&); -void get_b_node(node_iterator&, const in_edge_iterator&); -void get_b_node(node_iterator&, const sym_edge_iterator&); - -//void get_invalid(node_iterator&); -//void get_invalid(edge_iterator&); -//void get_invalid(out_edge_iterator&); -//void get_invalid(in_edge_iterator&); -//void get_invalid(sym_edge_iterator&); - -Pontok azonositasara de meginkabb property vectorokhoz: - -int id(const node_iterator&); -int id(const edge_iterator&); - -Pontok es elek hozzaadasanak metodusai: - -node_iterator add_node(); -edge_iterator add_edge(const node_iterator&, const node_iterator&); - -Hogy konnyebb legyen a progikat tesztelni, nehany stream utasitas: -ezek nem a list_graph metodusai - -friend std::ostream& operator<<(std::ostream&, const node_iterator&); -friend std::ostream& operator<<(std::ostream&, const edge_iterator&); - -node_iterator metodusai: -node_iterator(); -bool valid(); -void make_invalid(); -ezek nem tagfuggvenyek: -friend bool operator==(const node_iterator&, const node_iterator&); -friend bool operator!=(const node_iterator& u, const node_iterator& v); - -each_node_iterator metodusai: -ez publikusan szarmazik a node_iterator-bol, tehat a fentiek is. -each_node_iterator(); -each_node_iterator& operator++(); - -edge_iterator metodusai: -edge_iterator(); -bool valid(); -void make_invalid(); -ezek nem tagfvek: -friend bool operator==(const edge_iterator&, const edge_iterator&); -friend bool operator!=(const edge_iterator&, const edge_iterator&); -ujra tagfv-ek. -//node_iterator tail_node() const; nem javasolt -//node_iterator head_node() const; nem javasolt - -each_edge_iterator metodusai: -edge_iterator-bol szarmazik -each_edge_iterator(); -each_edge_iterator& operator++(); - -out_edge_iterator metodusai: -edge_iterator-bol szarmazik -out_edge_iterator(); -//out_edge_iterator(const node_iterator&); nem javasolt -out_edge_iterator& operator++(); -//node_iterator a_node() const; nem javasolt -//node_iterator b_node() const; - - -in_edge_iterator metodusai: -edge_iterator-bol szarmazik -in_edge_iterator(); -//in_edge_iterator(const node_iterator&); nem javasolt -in_edge_iterator& operator++(); -//node_iterator a_node() const; nem javasolt -//node_iterator b_node() const; - - -sym_edge_iterator metodusai: -edge_iterator-bol szarmazik -sym_edge_iterator(); -//sym_edge_iterator(const node_iterator&); nem javasolt -sym_edge_iterator& operator++(); -//node_iterator a_node() const; nem javasolt -//node_iterator b_node() const; - -Node propery array-okrol: - -template -class node_property_vector; - -metodusok: - -node_property_vector(graph_type&); -void put(graph_type::node_iterator, const T&); -T get(graph_type::node_iterator); - -Ugyanez edge_property_array-okkal - -template -class edge_property_vector; - -edge_property_vector(graph_type&); -void put(graph_type::edge_iterator, const T&); -get(graph_type::edge_iterator); - - Ennyi nem javasolas utan, meg nehany szo. - Alparral ugy gondoltuk, hogy az iterator 1 olyan egyszeru objetum legyen -csak, mellyel, ha ervenyes, akkor lehet tovabblepni 1 pont vagy ellistaban. -Az hogy valamilyen pont-iteratorbeol el-iteratort csinalunk, igenis legyen a -graf objektum feladata, hiszen igy lehet csinelni ugyanazon a ponthalmazon -tobb grafot ugyanazon pont-iteratorokkal. - Sokkal komolyabb kerdesek merultek fel azzal kapcsolatban, hogy hogyan adjuk -at a propertyket az algoritmusoknak, algoritmus-objektumoknak. -Errol majd kesobb. - -marci@cs.elte.hu diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/marci_graph_demo.cc --- a/src/work/marci/oldies/marci_graph_demo.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,270 +0,0 @@ -#include -#include -#include - -#include -#include -#include - -using namespace lemon; - -int main (int, char*[]) -{ - typedef ListGraph::Node Node; - typedef ListGraph::Edge Edge; - typedef ListGraph::NodeIt NodeIt; - typedef ListGraph::EdgeIt EdgeIt; - typedef ListGraph::OutEdgeIt OutEdgeIt; - typedef ListGraph::InEdgeIt InEdgeIt; - typedef ListGraph::SymEdgeIt SymEdgeIt; - ListGraph G; - std::vector vector_of_Nodes; - for(int i=0; i!=8; ++i) vector_of_Nodes.push_back(G.addNode()); - for(int i=0; i!=8; ++i) - for(int j=0; j!=8; ++j) - if ((ij is arc iff i()) << std::endl; - - for(NodeIt i=G.first(); G.valid(i); G.next(i)) { - std::cout << "node " << G.id(i) << std::endl; - std::cout << " outdegree (OutEdgeIt): " << count(G.first(i)) << " "; - for(OutEdgeIt j=G.first(i); G.valid(j); G.next(j)) { - std::cout << "(" << G.id(G.source(j)) << "--" << G.id(j) << "->" << G.id(G.target(j)) << ") "; - } - std::cout << std::endl; - - std::cout<< " "; - for(OutEdgeIt j=G.first(i); G.valid(j); G.next(j)) { - std::cout << G.aNode(j) << "->" << G.bNode(j) << " "; } - std::cout<(i)) << " "; - for(InEdgeIt j=G.first(i); G.valid(j); G.next(j)) { - std::cout << j << " "; } - std::cout << std::endl; - - std::cout<< " "; - for(InEdgeIt j=G.first(i); G.valid(j); G.next(j)) { - std::cout << G.aNode(j) << "->" << G.bNode(j) << " "; } - std::cout<(i)) << " "; - for(SymEdgeIt j=G.first(i); G.valid(j); G.next(j)) { - std::cout << j << " "; } - std::cout<(i); G.valid(j); G.next(j)) { - std::cout << G.aNode(j) << "->" << G.bNode(j) << " "; } - std::cout<(); G.valid(i); G.next(i)) { - std::cout << i << " "; - } - std::cout << std::endl; - - std::cout << "node property array test" << std::endl; - ListGraph::NodeMap my_property_vector(G); - NodeIt v; - G.first(v); - my_property_vector.set(v, 42); - my_property_vector.set(G.next(G.first()), 314); - my_property_vector.set(G.next(G.next(G.first())), 1956); - my_property_vector.set(vector_of_Nodes[3], 1989); - my_property_vector.set(vector_of_Nodes[4], 2003); - my_property_vector.set(vector_of_Nodes[7], 1978); - std::cout << "some node property values..." << std::endl; - for(NodeIt i=G.first(); G.valid(i); G.next(i)) { - std::cout << my_property_vector.get(i) << std::endl; - } - int _i=1; - int _ii=1; - ListGraph::EdgeMap my_edge_property(G); - for(EdgeIt i=G.first(); G.valid(i); G.next(i)) { - my_edge_property.set(i, _i); - _i*=_ii; ++_ii; - } - - std::cout << "node and edge property values on the sources and targets of edges..." << std::endl; - for(EdgeIt j=G.first(); G.valid(j); G.next(j)) { - std::cout << my_property_vector.get(G.source(j)) << "--" << my_edge_property.get(j) << "-->" << my_property_vector.get(G.target(j)) << " "; - } - std::cout << std::endl; -/* - std::cout << "bfs from the first node" << std::endl; - bfs bfs_test(G, G.first()); - bfs_test.run(); - std::cout << "reached: "; - for(NodeIt i=G.first(); G.valid(i); G.next(i)) { - std::cout << bfs_test.reached.get(i) << " "; - } - std::cout<(); G.valid(i); G.next(i)) { - std::cout << bfs_test.dist.get(i) << " "; - } - std::cout< node_name(flowG); - node_name.set(s, "s"); - node_name.set(v1, "v1"); - node_name.set(v2, "v2"); - node_name.set(v3, "v3"); - node_name.set(v4, "v4"); - node_name.set(t, "t"); - - Edge s_v1=flowG.addEdge(s, v1); - Edge s_v2=flowG.addEdge(s, v2); - Edge v1_v2=flowG.addEdge(v1, v2); - Edge v2_v1=flowG.addEdge(v2, v1); - Edge v1_v3=flowG.addEdge(v1, v3); - Edge v3_v2=flowG.addEdge(v3, v2); - Edge v2_v4=flowG.addEdge(v2, v4); - Edge v4_v3=flowG.addEdge(v4, v3); - Edge v3_t=flowG.addEdge(v3, t); - Edge v4_t=flowG.addEdge(v4, t); - - ListGraph::EdgeMap cap(flowG); - - cap.set(s_v1, 16); - cap.set(s_v2, 13); - cap.set(v1_v2, 10); - cap.set(v2_v1, 4); - cap.set(v1_v3, 12); - cap.set(v3_v2, 9); - cap.set(v2_v4, 14); - cap.set(v4_v3, 7); - cap.set(v3_t, 20); - cap.set(v4_t, 4); - - std::cout << "on directed graph graph" << std::endl; //<< flowG; - std::cout << "names and capacity values" << std::endl; - for(NodeIt i=flowG.first(); flowG.valid(i); flowG.next(i)) { - std::cout << node_name.get(i) << ": "; - std::cout << "out edges: "; - for(OutEdgeIt j=flowG.first(i); flowG.valid(j); flowG.next(j)) - std::cout << node_name.get(flowG.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flowG.target(j)) << " "; - std::cout << "in edges: "; - for(InEdgeIt j=flowG.first(i); flowG.valid(j); flowG.next(j)) - std::cout << node_name.get(flowG.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flowG.target(j)) << " "; - std::cout << std::endl; - } - - //flowG.deleteEdge(s_v1); - //flowG.deleteEdge(s_v2); - //flowG.deleteEdge(v1_v2); - //flowG.deleteEdge(v1_v3); - - - //flowG.setSource(v3_t, v2); - //flowG.setTarget(v3_t, s); -/* - for(NodeIt i=flowG.first(); flowG.valid(i); flowG.next(i)) { - std::cout << node_name.get(i) << ": "; - std::cout << "out edges: "; - for(OutEdgeIt j=flowG.first(i); flowG.valid(j); flowG.next(j)) - std::cout << node_name.get(flowG.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flowG.target(j)) << " "; - std::cout << "in edges: "; - for(InEdgeIt j=flowG.first(i); flowG.valid(j); flowG.next(j)) - std::cout << node_name.get(flowG.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flowG.target(j)) << " "; - std::cout << std::endl; - } - - for(EdgeIt e=flowG.first(); flowG.valid(e); flowG.next(e)) { - std::cout << node_name.get(flowG.source(e)) << "-"<< cap.get(e) << "->" << node_name.get(flowG.target(e)) << " "; - } -*/ - /* - while (flowG.valid(flowG.first())) { - flowG.deleteEdge(flowG.first()); - for(NodeIt i=flowG.first(); flowG.valid(i); flowG.next(i)) { - std::cout << node_name.get(i) << ": "; - std::cout << "out edges: "; - for(OutEdgeIt j=flowG.first(i); flowG.valid(j); flowG.next(j)) - std::cout << node_name.get(flowG.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flowG.target(j)) << " "; - std::cout << "in edges: "; - for(InEdgeIt j=flowG.first(i); flowG.valid(j); flowG.next(j)) - std::cout << node_name.get(flowG.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flowG.target(j)) << " "; - std::cout << std::endl; - } - } - - while (flowG.valid(flowG.first())) { - flowG.deleteNode(flowG.first()); - for(NodeIt i=flowG.first(); flowG.valid(i); flowG.next(i)) { - std::cout << node_name.get(i) << ": "; - std::cout << "out edges: "; - for(OutEdgeIt j=flowG.first(i); flowG.valid(j); flowG.next(j)) - std::cout << node_name.get(flowG.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flowG.target(j)) << " "; - std::cout << "in edges: "; - for(InEdgeIt j=flowG.first(i); flowG.valid(j); flowG.next(j)) - std::cout << node_name.get(flowG.source(j)) << "-"<< cap.get(j) << "->" << node_name.get(flowG.target(j)) << " "; - std::cout << std::endl; - } - } - */ - - //std::cout << std::endl; - - - { - ListGraph::EdgeMap flow(flowG, 0); - MaxFlow, ListGraph::EdgeMap > max_flow_test(flowG, s, t, flow, cap); - /* - max_flow_test.augmentOnBlockingFlow(); - for(EdgeIt e=flowG.template first(); flowG.valid(e); flowG.next(e)) { - std::cout<<"("<"<(); - for(EdgeIt e=flowG.template first(); flowG.valid(e); flowG.next(e)) { - std::cout<<"("<"<(); flowG.valid(e); flowG.next(e)) { - std::cout<<"("<"< S; - S.push_back(s); S.push_back(v3); - std::list T; - T.push_back(t); - - ListGraph::EdgeMap flow(flowG, 0); - MaxFlow2, ListGraph::EdgeMap > max_flow_test(flowG, S, T, flow, cap); - max_flow_test.run(); - - std::cout << "maximum flow: "<< std::endl; - for(EdgeIt e=flowG.template first(); flowG.valid(e); flowG.next(e)) { - std::cout<<"("<"< - struct graph_traits { - typedef typename graph_type::node_iterator node_iterator; - typedef typename graph_type::edge_iterator edge_iterator; - typedef typename graph_type::each_node_iterator each_node_iterator; - typedef typename graph_type::each_edge_iterator each_edge_iterator; - typedef typename graph_type::out_edge_iterator out_edge_iterator; - typedef typename graph_type::in_edge_iterator in_edge_iterator; - typedef typename graph_type::sym_edge_iterator sym_edge_iterator; - }; - -} // namespace hugo - -#endif //MARCI_GRAPH_TRAITS_HH diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/marci_list_graph.hh --- a/src/work/marci/oldies/marci_list_graph.hh Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,343 +0,0 @@ -#ifndef MARCI_LIST_GRAPH_HH -#define MARCI_LIST_GRAPH_HH - -#include - -namespace hugo { - - class list_graph { - class node_item; - class edge_item; - public: - class node_iterator; - class each_node_iterator; - class edge_iterator; - class each_edge_iterator; - class out_edge_iterator; - class in_edge_iterator; - class sym_edge_iterator; - private: - int node_id; - int edge_id; - int _node_num; - int _edge_num; - - node_item* _first_node; - node_item* _last_node; - - class node_item { - friend class list_graph; - friend class node_iterator; - friend class each_node_iterator; - friend class edge_iterator; - friend class each_edge_iterator; - friend class out_edge_iterator; - friend class in_edge_iterator; - friend class sym_edge_iterator; - friend std::ostream& operator<<(std::ostream& os, const node_iterator& i); - friend std::ostream& operator<<(std::ostream& os, const edge_iterator& i); - list_graph* G; - int id; - edge_item* _first_out_edge; - edge_item* _last_out_edge; - edge_item* _first_in_edge; - edge_item* _last_in_edge; - node_item* _next_node; - node_item* _prev_node; - public: - node_item() { } - }; - - class edge_item { - friend class list_graph; - friend class node_iterator; - friend class each_node_iterator; - friend class edge_iterator; - friend class each_edge_iterator; - friend class out_edge_iterator; - friend class in_edge_iterator; - friend class sym_edge_iterator; - friend std::ostream& operator<<(std::ostream& os, const edge_iterator& i); - list_graph* G; - int id; - node_item* _tail; - node_item* _head; - edge_item* _next_out; - edge_item* _prev_out; - edge_item* _next_in; - edge_item* _prev_in; - public: - edge_item() { } - }; - - node_item* _add_node() { - node_item* p=new node_item; - p->id=node_id++; - p->_first_out_edge=0; - p->_last_out_edge=0; - p->_first_in_edge=0; - p->_last_in_edge=0; - p->_prev_node=_last_node; - p->_next_node=0; - if (_last_node) _last_node->_next_node=p; - _last_node=p; - if (!_first_node) _first_node=p; - ++_node_num; - return p; - } - - edge_item* _add_edge(node_item* _tail, node_item* _head) { - edge_item* e=new edge_item; - e->id=edge_id++; - e->_tail=_tail; - e->_head=_head; - - e->_prev_out=_tail->_last_out_edge; - if (_tail->_last_out_edge) (_tail->_last_out_edge)->_next_out=e; - _tail->_last_out_edge=e; - if (!_tail->_first_out_edge) _tail->_first_out_edge=e; - - e->_prev_in=_head->_last_in_edge; - if (_head->_last_in_edge) (_head->_last_in_edge)->_next_in=e; - _head->_last_in_edge=e; - if (!_head->_first_in_edge) { _head->_first_in_edge=e; } - ++_edge_num; - return e; - } - - public: - - /* default constructor */ - - list_graph() : node_id(0), edge_id(0), _node_num(0), _edge_num(0), _first_node(0), _last_node(0) { } - - int node_num() { return _node_num; } - int edge_num() { return _edge_num; } - - /* functions to construct iterators from the graph, or from each other */ - - each_node_iterator first_node() { return each_node_iterator(_first_node); } - each_edge_iterator first_edge() { - node_item* v=_first_node; - edge_item* edge=v->_first_out_edge; - while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; } - return each_edge_iterator(v, edge); - } - - out_edge_iterator first_out_edge(const node_iterator& v) { - return out_edge_iterator(v); - } - in_edge_iterator first_in_edge(const node_iterator& v) { - return in_edge_iterator(v); - } - sym_edge_iterator first_sym_edge(const node_iterator& v) { - return sym_edge_iterator(v); - } - node_iterator tail(const edge_iterator& e) { return e.tail_node(); } - node_iterator head(const edge_iterator& e) { return e.head_node(); } - - node_iterator a_node(const out_edge_iterator& e) { return e.a_node(); } - node_iterator a_node(const in_edge_iterator& e) { return e.a_node(); } - node_iterator a_node(const sym_edge_iterator& e) { return e.a_node(); } - - node_iterator b_node(const out_edge_iterator& e) { return e.b_node(); } - node_iterator b_node(const in_edge_iterator& e) { return e.b_node(); } - node_iterator b_node(const sym_edge_iterator& e) { return e.b_node(); } - - //node_iterator invalid_node() { return node_iterator(); } - //edge_iterator invalid_edge() { return edge_iterator(); } - //out_edge_iterator invalid_out_edge() { return out_edge_iterator(); } - //in_edge_iterator invalid_in_edge() { return in_edge_iterator(); } - //sym_edge_iterator invalid_sym_edge() { return sym_edge_iterator(); } - - /* same methods in other style */ - /* for experimental purpose */ - - void get_first(each_node_iterator& v) { v=each_node_iterator(_first_node); } - void get_first(each_edge_iterator& e) { e=first_edge(); } - void get_first(out_edge_iterator& e, const node_iterator& v) { - e=out_edge_iterator(v); - } - void get_first(in_edge_iterator& e, const node_iterator& v) { - e=in_edge_iterator(v); - } - void get_first(sym_edge_iterator& e, const node_iterator& v) { - e=sym_edge_iterator(v); - } - void get_tail(node_iterator& n, const edge_iterator& e) { n=tail(e); } - void get_head(node_iterator& n, const edge_iterator& e) { n=head(e); } - - void get_a_node(node_iterator& n, const out_edge_iterator& e) { n=e.a_node(); } - void get_a_node(node_iterator& n, const in_edge_iterator& e) { n=e.a_node(); } - void get_a_node(node_iterator& n, const sym_edge_iterator& e) { n=e.a_node(); } - void get_b_node(node_iterator& n, const out_edge_iterator& e) { n=e.b_node(); } - void get_b_node(node_iterator& n, const in_edge_iterator& e) { n=e.b_node(); } - void get_b_node(node_iterator& n, const sym_edge_iterator& e) { n=e.b_node(); } - //void get_invalid(node_iterator& n) { n=node_iterator(); } - //void get_invalid(edge_iterator& e) { e=edge_iterator(); } - //void get_invalid(out_edge_iterator& e) { e=out_edge_iterator(); } - //void get_invalid(in_edge_iterator& e) { e=in_edge_iterator(); } - //void get_invalid(sym_edge_iterator& e) { e=sym_edge_iterator(); } - - - /* for getting id's of graph objects */ - /* these are important for the implementation of property vectors */ - - int id(const node_iterator& v) { return v.node->id; } - int id(const edge_iterator& e) { return e.edge->id; } - - /* adding nodes and edges */ - - node_iterator add_node() { return node_iterator(_add_node()); } - edge_iterator add_edge(const node_iterator& u, const node_iterator& v) { - return edge_iterator(_add_edge(u.node, v.node)); - } - - /* stream operations, for testing purpose */ - - friend std::ostream& operator<<(std::ostream& os, const node_iterator& i) { - os << i.node->id; return os; - } - friend std::ostream& operator<<(std::ostream& os, const edge_iterator& i) { - os << "(" << i.edge->_tail->id << "--" << i.edge->id << "->" << i.edge->_head->id << ")"; - return os; - } - - class node_iterator { - friend class list_graph; - - friend class edge_iterator; - friend class out_edge_iterator; - friend class in_edge_iterator; - friend class sym_edge_iterator; - protected: - node_item* node; - friend int list_graph::id(const node_iterator& v); - public: - node_iterator() : node(0) { } - node_iterator(node_item* _node) : node(_node) { } - bool valid() { return (node!=0); } - void make_invalid() { node=0; } - friend bool operator==(const node_iterator& u, const node_iterator& v) { - return v.node==u.node; - } - friend bool operator!=(const node_iterator& u, const node_iterator& v) { - return v.node!=u.node; - } - friend std::ostream& operator<<(std::ostream& os, const node_iterator& i); - }; - - class each_node_iterator : public node_iterator { - friend class list_graph; - public: - each_node_iterator() : node_iterator() { } - each_node_iterator(node_item* v) : node_iterator(v) { } - each_node_iterator& operator++() { node=node->_next_node; return *this; } - }; - - class edge_iterator { - friend class list_graph; - - friend class node_iterator; - friend class each_node_iterator; - protected: - edge_item* edge; - friend int list_graph::id(const edge_iterator& e); - public: - edge_iterator() : edge(0) { } - edge_iterator(edge_item* _edge) : edge(_edge) { } - bool valid() { return (edge!=0); } - void make_invalid() { edge=0; } - friend bool operator==(const edge_iterator& u, const edge_iterator& v) { - return v.edge==u.edge; - } - friend bool operator!=(const edge_iterator& u, const edge_iterator& v) { - return v.edge!=u.edge; - } - protected: - node_iterator tail_node() const { return node_iterator(edge->_tail); } - node_iterator head_node() const { return node_iterator(edge->_head); } - public: - friend std::ostream& operator<<(std::ostream& os, const edge_iterator& i); - }; - - class each_edge_iterator : public edge_iterator { - friend class list_graph; - node_item* v; - public: - each_edge_iterator() : edge_iterator(), v(0) { } - each_edge_iterator(node_item* _v, edge_item* _e) : edge_iterator(_e), v(_v) { } - each_edge_iterator& operator++() { - edge=edge->_next_out; - while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; } - return *this; - } - }; - - class out_edge_iterator : public edge_iterator { - friend class list_graph; - node_item* v; - public: - out_edge_iterator() : edge_iterator(), v(0) { } - protected: - out_edge_iterator(const node_iterator& _v) : v(_v.node) { edge=v->_first_out_edge; } - public: - out_edge_iterator& operator++() { edge=edge->_next_out; return *this; } - protected: - node_iterator a_node() const { return node_iterator(v); } - node_iterator b_node() const { - return (edge->_tail==v) ? node_iterator(edge->_head) : node_iterator(edge->_tail); } - }; - - class in_edge_iterator : public edge_iterator { - friend class list_graph; - node_item* v; - public: - in_edge_iterator() : edge_iterator(), v(0) { } - protected: - in_edge_iterator(const node_iterator& _v) : v(_v.node) { - edge=v->_first_in_edge; - } - public: - in_edge_iterator& operator++() { edge=edge->_next_in; return *this; } - protected: - node_iterator a_node() const { return node_iterator(v); } - node_iterator b_node() const { - return (edge->_tail==v) ? node_iterator(edge->_head) : node_iterator(edge->_tail); } - }; - - class sym_edge_iterator : public edge_iterator { - friend class list_graph; - bool out_or_in; //1 iff out, 0 iff in - node_item* v; - public: - sym_edge_iterator() : edge_iterator(), v(0) { } - protected: - sym_edge_iterator(const node_iterator& _v) : v(_v.node) { - out_or_in=1; - edge=v->_first_out_edge; - if (!edge) { edge=v->_first_in_edge; out_or_in=0; } - } - public: - sym_edge_iterator& operator++() { - if (out_or_in) { - edge=edge->_next_out; - if (!edge) { out_or_in=0; edge=v->_first_in_edge; } - } else { - edge=edge->_next_in; - } - return *this; - } - protected: - node_iterator a_node() const { return node_iterator(v); } - node_iterator b_node() const { - return (edge->_tail==v) ? node_iterator(edge->_head) : node_iterator(edge->_tail); } - }; - - }; - - - -} //namespace hugo - -#endif //MARCI_LIST_GRAPH_HH diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/marci_makefile --- a/src/work/marci/oldies/marci_makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -CXXFLAGS = -Wall -ansi -I. -CXX = g++-3.0 - -marci_graph_demo: marci_graph_demo.cc marci_list_graph.hh marci_property_vector.hh marci_bfs.hh marci_max_flow.hh - $(CXX) $(CXXFLAGS) marci_graph_demo.cc -o marci_graph_demo \ No newline at end of file diff -r ee5959aa4410 -r c280de819a73 src/work/marci/oldies/marci_max_flow.hh --- a/src/work/marci/oldies/marci_max_flow.hh Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,183 +0,0 @@ -#ifndef MARCI_MAX_FLOW_HH -#define MARCI_MAX_FLOW_HH - -#include - -#include -#include - -namespace hugo { - - template - class res_graph_type { - typedef typename graph_type::node_iterator node_iterator; - typedef typename graph_type::each_node_iterator each_node_iterator; - typedef typename graph_type::sym_edge_iterator old_sym_edge_iterator; - graph_type& G; - edge_property_vector& flow; - edge_property_vector& capacity; - public: - res_graph_type(graph_type& _G, edge_property_vector& _flow, edge_property_vector& _capacity) : G(_G), flow(_flow), capacity(_capacity) { } - - class edge_iterator { - friend class res_graph_type; - protected: - res_graph_type* resG; - old_sym_edge_iterator sym; - public: - edge_iterator() { } - //bool is_free() { - //if (resG->G.a_node(sym)==resG->G.tail(sym)) { - // return (resG->flow.get(sym)capacity.get(sym)); - //} else { - // return (resG->flow.get(sym)>0); - //} - //} - T free() { - if (resG->G.a_node(sym)==resG->G.tail(sym)) { - return (resG->capacity.get(sym)-resG->flow.get(sym)); - } else { - return (resG->flow.get(sym)); - } - } - bool valid() { return sym.valid(); } - void make_invalid() { sym.make_invalid(); } - void augment(T a) { - if (resG->G.a_node(sym)==resG->G.tail(sym)) { - resG->flow.put(sym, resG->flow.get(sym)+a); - } else { - resG->flow.put(sym, resG->flow.get(sym)-a); - } - } - }; - - class out_edge_iterator : public edge_iterator { - public: - out_edge_iterator() { } - out_edge_iterator(res_graph_type& _resG, const node_iterator& v) { - resG=&_resG; - sym=resG->G.first_sym_edge(v); - while( sym.valid() && !(free()>0) ) { ++sym; } - } - out_edge_iterator& operator++() { - ++sym; - while( sym.valid() && !(free()>0) ) { ++sym; } - return *this; - } - }; - - out_edge_iterator first_out_edge(const node_iterator& v) { - return out_edge_iterator(*this, v); - } - - each_node_iterator first_node() { - return G.first_node(); - } - - node_iterator tail(const edge_iterator& e) { return G.a_node(e.sym); } - node_iterator head(const edge_iterator& e) { return G.b_node(e.sym); } - - int id(const node_iterator& v) { return G.id(v); } - - //node_iterator invalid_node() { return G.invalid_node(); } - //res_edge_it invalid_edge() { res_edge_it n; n.sym=G.invalid_sym_edge(); return n; } - }; - - template - struct max_flow_type { - typedef typename graph_type::node_iterator node_iterator; - typedef typename graph_type::edge_iterator edge_iterator; - typedef typename graph_type::each_node_iterator each_node_iterator; - typedef typename graph_type::out_edge_iterator out_edge_iterator; - typedef typename graph_type::in_edge_iterator in_edge_iterator; - graph_type& G; - node_iterator s; - node_iterator t; - edge_property_vector flow; - edge_property_vector& capacity; - - max_flow_type(graph_type& _G, node_iterator _s, node_iterator _t, edge_property_vector& _capacity) : G(_G), s(_s), t(_t), flow(_G), capacity(_capacity) { - for(each_node_iterator i=G.first_node(); i.valid(); ++i) - for(out_edge_iterator j=G.first_out_edge(i); j.valid(); ++j) - flow.put(j, 0); - } - void run() { - typedef res_graph_type aug_graph_type; - aug_graph_type res_graph(G, flow, capacity); - - bool augment; - do { - augment=false; - - typedef std::queue bfs_queue_type; - bfs_queue_type bfs_queue; - bfs_queue.push(res_graph.first_out_edge(s)); - - typedef node_property_vector reached_type; - reached_type reached(res_graph, false); - reached.put(s, true); - - bfs_iterator1< aug_graph_type, reached_type > - res_bfs(res_graph, bfs_queue, reached); - - typedef node_property_vector pred_type; - pred_type pred(res_graph); - aug_graph_type::edge_iterator a; - a.make_invalid(); - pred.put(s, a); - - typedef node_property_vector free_type; - free_type free(res_graph); - - //searching for augmenting path - while ( res_bfs.valid() ) { - //std::cout<<"KULSO ciklus itt jar: "<"<"<"<"< - -namespace hugo { - - template - int number_of(iterator _it) { - int i=0; - for( ; _it.valid(); ++_it) { ++i; } - return i; - } - - template - class node_property_vector { - typedef typename graph_type::node_iterator node_iterator; - typedef typename graph_type::each_node_iterator each_node_iterator; - graph_type& G; - std::vector container; - public: - node_property_vector(graph_type& _G) : G(_G) { - int i=0; - for(each_node_iterator it=G.first_node(); it.valid(); ++it) ++i; - container.resize(i); - } - node_property_vector(graph_type& _G, T a) : G(_G) { - for(each_node_iterator it=G.first_node(); it.valid(); ++it) { container.push_back(a); } - } - void put(node_iterator nit, const T& a) { container[G.id(nit)]=a; } - T get(node_iterator nit) { return container[G.id(nit)]; } - }; - - template - class edge_property_vector { - typedef typename graph_type::edge_iterator edge_iterator; - typedef typename graph_type::each_edge_iterator each_edge_iterator; - graph_type& G; - std::vector container; - public: - edge_property_vector(graph_type& _G) : G(_G) { - int i=0; - for(each_edge_iterator it=G.first_edge(); it.valid(); ++it) ++i; - container.resize(i); - } - edge_property_vector(graph_type& _G, T a) : G(_G) { - for(each_edge_iterator it=G.first_edge(); it.valid(); ++it) { - container.push_back(a); - } - } - void put(edge_iterator eit, const T& a) { container[G.id(eit)]=a; } - T get(edge_iterator eit) { return container[G.id(eit)]; } - }; - -} // namespace hugo - -#endif //MARCI_PROPERTY_VECTOR_HH diff -r ee5959aa4410 -r c280de819a73 src/work/marci/preflow_bug.cc --- a/src/work/marci/preflow_bug.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,224 +0,0 @@ -// -*- c++ -*- -#include -#include - -#include -#include -#include -//#include -//#include -#include -//#include -#include -#include - -using std::cout; -using std::endl; - -using namespace lemon; - -// Use a DIMACS min cost flow file as stdin. -// read_dimacs_demo < dimacs_max_flow_file - -int main(int, char **) { - - //typedef SageGraph MutableGraph; - //typedef FullFeatureGraphConcept Graph; - //typedef SmartGraph Graph; - typedef SageGraph Graph; - typedef Graph::Node Node; - typedef Graph::EdgeIt EdgeIt; - - Graph g; - - Node s, t; - Graph::EdgeMap cap(g); - Graph::EdgeMap flow(g); //0 flow - //readDimacs(std::cin, g, cap, s, t); - readDimacs(std::cin, g, cap, s, t, flow); -// Timer ts; - MaxFlow, Graph::EdgeMap > - max_flow_test(g, s, t, cap, flow); - - Graph::NodeMap cut(g); - - { - Graph::EdgeIt e; - for (g.first(e); g.valid(e); g.next(e)) - cout << 1+g.id(g.source(e)) << "->" << 1+g.id(g.target(e)) << " cap: " << cap[e] << " preflow: " << flow[e] << endl; - } - { - Graph::NodeIt n; - for (g.first(n); g.valid(n); g.next(n)) { - int a=0; - { - Graph::InEdgeIt e; - for (g.first(e, n); g.valid(e); g.next(e)) a+=flow[e]; - } - { - Graph::OutEdgeIt e; - for (g.first(e, n); g.valid(e); g.next(e)) a-=flow[e]; - } - cout << 1+g.id(n) << " excess: " << a << endl; - } - } - - - { -// std::cout << "preflow ..." << std::endl; -// ts.reset(); - max_flow_test.preflowPhase1(MaxFlow, Graph::EdgeMap >::PRE_FLOW); -// std::cout << "elapsed time: " << ts << std::endl; - std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - std::cout << "flow value 2: "<< max_flow_test.flowValue2() << std::endl; - max_flow_test.actMinCut(cut); - - Graph::EdgeIt e; - for (g.first(e); g.valid(e); g.next(e)) { - if (cut[g.source(e)] && !cut[g.target(e)]) { - cout << 1+g.id(g.source(e)) << "->" << 1+g.id(g.target(e)) - << "(forward edge) flow: " << flow[e] - << " cap: " << cap[e]<< endl; - if (flow[e]!=cap[e]) - std::cout << "Slackness does not hold!" << std::endl; - } - if (!cut[g.source(e)] && cut[g.target(e)]) { - cout << 1+g.id(g.source(e)) << "->" << 1+g.id(g.target(e)) - << "(backward edge) flow: " << flow[e] << endl; - if (flow[e]!=0) - std::cout << "Slackness does not hold!" << std::endl; - } - } - Graph::NodeIt n; - for (g.first(n); g.valid(n); g.next(n)) { - if (cut[n]) - cout << "in cut: " << 1+g.id(n) << endl; - } - } - -// { -// std::cout << "preflow ..." << std::endl; -// ts.reset(); -// max_flow_test.run(); -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; -// max_flow_test.actMinCut(cut); - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - -// { -// std::cout << "preflow ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// max_flow_test.preflow(MaxFlow, Graph::EdgeMap >::GEN_FLOW); -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - -// // { -// // std::cout << "wrapped preflow ..." << std::endl; -// // FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// // ts.reset(); -// // pre_flow_res.run(); -// // std::cout << "elapsed time: " << ts << std::endl; -// // std::cout << "flow value: "<< pre_flow_test.flowValue() << std::endl; -// // } - -// { -// std::cout << "physical blocking flow augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (augmenting_flow_test.augmentOnBlockingFlow()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - -// // { -// // std::cout << "faster physical blocking flow augmentation ..." << std::endl; -// // FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// // ts.reset(); -// // int i=0; -// // while (max_flow_test.augmentOnBlockingFlow1()) { ++i; } -// // std::cout << "elapsed time: " << ts << std::endl; -// // std::cout << "number of augmentation phases: " << i << std::endl; -// // std::cout << "flow value: "<< max_flow_test.flowValue() << std::endl; -// // } - -// { -// std::cout << "on-the-fly blocking flow augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (augmenting_flow_test.augmentOnBlockingFlow2()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - -// { -// std::cout << "on-the-fly shortest path augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (augmenting_flow_test.augmentOnShortestPath()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - -// { -// std::cout << "on-the-fly shortest path augmentation ..." << std::endl; -// FOR_EACH_LOC(Graph::EdgeIt, e, g) flow.set(e, 0); -// ts.reset(); -// int i=0; -// while (augmenting_flow_test.augmentOnShortestPath2()) { ++i; } -// std::cout << "elapsed time: " << ts << std::endl; -// std::cout << "number of augmentation phases: " << i << std::endl; -// std::cout << "flow value: "<< augmenting_flow_test.flowValue() << std::endl; - -// FOR_EACH_LOC(Graph::EdgeIt, e, g) { -// if (cut[g.source(e)] && !cut[g.target(e)] && !flow[e]==cap[e]) -// std::cout << "Slackness does not hold!" << std::endl; -// if (!cut[g.source(e)] && cut[g.target(e)] && flow[e]>0) -// std::cout << "Slackness does not hold!" << std::endl; -// } -// } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/preflow_bug_8 --- a/src/work/marci/preflow_bug_8 Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -p min 3 3 -n 3 s -n 2 t -a 3 1 20 20 -a 1 2 20 10 -a 1 2 20 0 diff -r ee5959aa4410 -r c280de819a73 src/work/marci/preflow_demo_athos.cc --- a/src/work/marci/preflow_demo_athos.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,44 +0,0 @@ -#include -#include - -#include -#include -#include -#include - -using namespace lemon; - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo < dimacs_max_flow_file -int main(int, char **) { - typedef ListGraph::Node Node; - //typedef ListGraph::EachEdgeIt EachEdgeIt; - - ListGraph G; - Node s, t; - ListGraph::EdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - - std::cout << "preflow demo (ATHOS)..." << std::endl; - //ListGraph::EdgeMap flow(G); //0 flow - - double pre_time=currTime(); - preflow_push max_flow_test(G, s, t, cap); - int flow_value=max_flow_test.run(); - //ListGraph::NodeMap cut=max_flow_test.mincut(); - //int cut_value=0; - //for(EachEdgeIt e=G.first(); e.valid(); ++e) { - // if (cut.get(G.source(e)) && !cut.get(G.target(e))) cut_value+=cap.get(e); - //} - double post_time=currTime(); - //std::cout << "maximum flow: "<< std::endl; - //for(EachEdgeIt e=G.first(); e.valid(); ++e) { - // std::cout<<"("<"< -#include - -#include -#include -#include -#include -#include - -#include - -// Use a DIMACS network flow file as stdin. -// max_flow < max_flow.dat -int main() -{ - using namespace boost; - - typedef adjacency_list_traits Traits; - typedef adjacency_list, - property > > - > Graph; - - Graph g; - - property_map::type - capacity = get(edge_capacity, g); - property_map::type - rev = get(edge_reverse, g); - property_map::type - residual_capacity = get(edge_residual_capacity, g); - - Traits::vertex_descriptor s, t; - read_dimacs_max_flow(g, capacity, rev, s, t); - - std::cout << "preflow demo (BOOST)..." << endl; - double pre_time=currTime(); - long flow = push_relabel_max_flow(g, s, t); - double post_time=currTime(); - - //std::cout << "maximum flow: " << std::endl; - //graph_traits::vertex_iterator u_iter, u_end; - //graph_traits::out_edge_iterator ei, e_end; - //for (tie(u_iter, u_end) = vertices(g); u_iter != u_end; ++u_iter) - // for (tie(ei, e_end) = out_edges(*u_iter, g); ei != e_end; ++ei) - // if (capacity[*ei] > 0) - // std::cout << "f " << *u_iter << " " << target(*ei, g) << " " - // << (capacity[*ei] - residual_capacity[*ei]) << std::endl; - // - //std::cout << std::endl; - std::cout << "elapsed time: " << post_time-pre_time << " sec"<< std::endl; - std::cout << "flow value: " << flow << std::endl; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/marci/preflow_demo_jacint.cc --- a/src/work/marci/preflow_demo_jacint.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,73 +0,0 @@ -#include -#include - -#include -#include -#include -#include -#include - -using namespace lemon; - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo < dimacs_max_flow_file -int main(int, char **) { - typedef ListGraph::NodeIt NodeIt; - typedef ListGraph::EachEdgeIt EachEdgeIt; - - ListGraph G; - NodeIt s, t; - ListGraph::EdgeMap cap(G); - readDimacsMaxFlow(std::cin, G, s, t, cap); - - { - std::cout << "preflow demo (preflow_push_max_flow by JACINT)..." << std::endl; - //ListGraph::EdgeMap flow(G); //0 flow - - double pre_time=currTime(); - preflow_push_max_flow max_flow_test(G, s, t, cap); - max_flow_test.run(); - ListGraph::NodeMap cut(G); - max_flow_test.mincut(cut); - int cut_value=0; - for(EachEdgeIt e=G.first(); e.valid(); ++e) { - if (cut.get(G.source(e)) && !cut.get(G.target(e))) cut_value+=cap.get(e); - } - double post_time=currTime(); - //std::cout << "maximum flow: "<< std::endl; - //for(EachEdgeIt e=G.first(); e.valid(); ++e) { - // std::cout<<"("<"< flow(G); //0 flow - - double pre_time=currTime(); - preflow_push_hl max_flow_test(G, s, t, cap); - max_flow_test.run(); - ListGraph::NodeMap cut(G); - max_flow_test.mincut(cut); - int cut_value=0; - for(EachEdgeIt e=G.first(); e.valid(); ++e) { - if (cut.get(G.source(e)) && !cut.get(G.target(e))) cut_value+=cap.get(e); - } - double post_time=currTime(); - //std::cout << "maximum flow: "<< std::endl; - //for(EachEdgeIt e=G.first(); e.valid(); ++e) { - // std::cout<<"("<"< -#include - -#include -#include -#include - -#include - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo_leda < dimacs_max_flow_file -int main() -{ - GRAPH G; - leda_node s,t; - leda_edge_array cap; - Read_Dimacs_Maxflow(cin,G,cap,s,t); - - leda_edge_array flow(G); - - std::cout << "preflow demo (LEDA)..." << std::endl; - double pre_time=currTime(); - int flow_value = MAX_FLOW(G,s,t,cap,flow); - double post_time=currTime(); - //std::cout << "maximum flow: "<< std::endl; - //std::cout< -#include - -#include -#include -#include - -#if defined(LEDA_NAMESPACE) -using namespace leda; -#endif - -using namespace std; - -#include - -// Use a DIMACS max flow file as stdin. -// read_dimacs_demo_leda < dimacs_max_flow_file -int main() -{ - GRAPH G; - leda_node s,t; - leda_edge_array cap; - Read_Dimacs_MF(cin,G,s,t,cap); - - leda_edge_array flow(G); - - std::cout << "preflow demo (LEDA)..." << std::endl; - double pre_time=currTime(); - int flow_value = MAX_FLOW(G,s,t,cap,flow); - double post_time=currTime(); - //std::cout << "maximum flow: "<< std::endl; - //std::cout< -#include -#include - -#include -#include -#include -#include -#include -#include - -using namespace lemon; - -using std::cout; -using std::endl; - -int main() { - typedef SageGraph Graph; - Graph g; - readDimacs(std::cin, g); - - { - std::list l; - //NullMap pred; - Graph::NodeMap pred(g, INVALID); - topSort(g, l, pred); - cout << "Leaving order of dfs which is pretopological..." << endl; - for(std::list::const_iterator i=l.begin(); i!=l.end(); ++i) { - cout << *i << " "; - } - cout << endl; - - FOR_EACH_LOC(Graph::NodeIt, n, g) { - cout << "pred of node " << n << " is " << pred[n] << endl; - } - } - - { - typedef RevGraphWrapper GW; - GW gw(g); - std::list l; - //NullMap pred; - GW::NodeMap pred(gw, INVALID); - topSort(gw, l, pred); - cout << "Same in the reversed oriented graph..." << endl; - for(std::list::const_iterator i=l.begin(); i!=l.end(); ++i) { - cout << *i << " "; - } - cout << endl; - - FOR_EACH_LOC(GW::NodeIt, n, gw) { - cout << "pred of node " << n << " is " << pred[n] << endl; - } - } - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/peter/Makefile --- a/src/work/peter/Makefile Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,10 +0,0 @@ -gd: graph-displayer.cc - g++ -ggdb --no-inline graph-displayer.cc -W -Wall -ansi -pedantic -o gd `pkg-config libgnomecanvasmm-2.6 --cflags --libs` -I../.. - -xyr: xy-reader.cc - g++ xy-reader.cc -W -Wall -ansi -pedantic -o xyr -I../.. - -run: gd - ./gd graphocska.lgf - -.PHONY: run diff -r ee5959aa4410 -r c280de819a73 src/work/peter/edgepathgraph.h --- a/src/work/peter/edgepathgraph.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,407 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_NET_GRAPH_H -#define LEMON_NET_GRAPH_H - -///\file -///\brief Declaration of EdgePathGraph. - -#include -#include - -/// The namespace of LEMON -namespace lemon { - - // @defgroup empty_graph The EdgePathGraph class - // @{ - - /// A graph class in that a simple edge can represent a path. - - /// This class provides all the common features of a graph structure - /// that represents a network. You can handle with it layers. This - /// means that an edge in one layer can be a complete path in a nother - /// layer. - - template - class EdgePathGraph - { - - public: - - /// The actual layer - Gact actuallayer; - - - /// The layer on which the edges in this layer can represent paths. - Gsub * sublayer; - - - /// Map of nodes that represent the nodes of this layer in the sublayer - typename Gact::template NodeMap projection; - - - /// Map of routes that are represented by some edges in this layer - typename Gact::template EdgeMap

edgepath; - - - /// Defalult constructor. - /// We don't need any extra lines, because the actuallayer - /// variable has run its constructor, when we have created this class - /// So only the two maps has to be initialised here. - EdgePathGraph() : projection(actuallayer), edgepath(actuallayer) - { - } - - - ///Copy consructor. - EdgePathGraph(const EdgePathGraph & EPG ) : actuallayer(EPG.actuallayer) , edgepath(actuallayer), projection(actuallayer) - { - } - - - /// Map adder - - /// This function gets two edgemaps. One belongs to the actual layer and the - /// other belongs to the sublayer. - /// The function iterates through all of the edges in the edgemap belonging to the actual layer. - /// It gets the value that belongs to the actual edge, and adds it to the value of each edge in the - /// path represented by itself in the edgemap that belongs to the sublayer. - - template void addMap (typename Gact::EdgeMap & actmap, typename Gsub::EdgeMap & submap) - { - for(EdgeIt e(actuallayer);actuallayer.valid(e);actuallayer.next(e)) - { - typedef typename P::EdgeIt PEdgeIt; - PEdgeIt f; - - //dep//cout << "Edge " << id(source(e)) << " - " << id(target(e)) << " in actual layer is"; - T1 incr=actmap[e]; - //cout << incr << endl; - - if(edgepath[e]) - { - //dep//cout << endl << "Path"; - for(edgepath[e]->first(f); edgepath[e]->valid(f); edgepath[e]->next(f)) - { - //dep//cout << " " << sublayer->id(sublayer->source(f)) << "-" << sublayer->id(sublayer->target(f)); - submap[f]+=incr; - } - //dep////cout << EPGr2.id(EPGr2.target(f)) << endl; - //dep//cout << endl; - } - else - { - //dep//cout << " itself." <first(f); edgepath[e]->valid(f); edgepath[e]->next(f)) - { - cout << " " << sublayer->id(sublayer->source(f)) << "-" << sublayer->id(sublayer->target(f)); - } - //cout << EPGr2.id(EPGr2.target(f)) << endl; - cout << endl; - } - else - { - cout << " itself." <) - /// needs extra attention! - - template class NodeMap - { - public: - typedef T Value; - typedef Node Key; - - NodeMap(const EdgePathGraph &) {} - NodeMap(const EdgePathGraph &, T) {} - - template NodeMap(const NodeMap &) {} - - /// Sets the value of a node. - - /// Sets the value associated with node \c i to the value \c t. - /// - void set(Node, T) {} - // Gets the value of a node. - //T get(Node i) const {return *(T*)0;} //FIXME: Is it necessary? - T &operator[](Node) {return *(T*)0;} - const T &operator[](Node) const {return *(T*)0;} - - /// Updates the map if the graph has been changed - - /// \todo Do we need this? - /// - void update() {} - void update(T a) {} //FIXME: Is it necessary - }; - - ///Read/write/reference map of the edges to type \c T. - - ///Read/write/reference map of the edges to type \c T. - ///It behaves exactly in the same way as \ref NodeMap. - /// \sa NodeMap - /// \sa MemoryMap - /// \todo We may need copy constructor - /// \todo We may need conversion from other edgetype - /// \todo We may need operator= - template class EdgeMap - { - public: - typedef T Value; - typedef Edge Key; - - EdgeMap(const EdgePathGraph &) {} - EdgeMap(const EdgePathGraph &, T ) {} - - ///\todo It can copy between different types. - /// - template EdgeMap(const EdgeMap &) {} - - void set(Edge, T) {} - //T get(Edge) const {return *(T*)0;} - T &operator[](Edge) {return *(T*)0;} - const T &operator[](Edge) const {return *(T*)0;} - - void update() {} - void update(T a) {} //FIXME: Is it necessary - }; - }; - - /// An empty erasable graph class. - - /// This class provides all the common features of an \e erasable graph - /// structure, - /// however completely without implementations and real data structures - /// behind the interface. - /// All graph algorithms should compile with this class, but it will not - /// run properly, of course. - /// - /// \todo This blabla could be replaced by a sepatate description about - /// s. - /// - /// It can be used for checking the interface compatibility, - /// or it can serve as a skeleton of a new graph structure. - /// - /// Also, you will find here the full documentation of a certain graph - /// feature, the documentation of a real graph imlementation - /// like @ref ListGraph or - /// @ref SmartGraph will just refer to this structure. - template - class ErasableEdgePathGraph : public EdgePathGraph - { - public: - /// Deletes a node. - void erase(typename Gact::Node n) {actuallayer.erase(n);} - /// Deletes an edge. - void erase(typename Gact::Edge e) {actuallayer.erase(e);} - - /// Defalult constructor. - ErasableEdgePathGraph() {} - ///Copy consructor. - ErasableEdgePathGraph(const EdgePathGraph &EPG) {} - }; - - - // @} - -} //namespace lemon - - -#endif // LEMON_SKELETON_GRAPH_H diff -r ee5959aa4410 -r c280de819a73 src/work/peter/edgepathgraph_test.cc --- a/src/work/peter/edgepathgraph_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,206 +0,0 @@ -#include -#include -#include - -#include "edgepathgraph.h" -#include -#include -#include - -using namespace lemon; -using namespace std; - -bool passed = true; - -void check(bool rc) { - passed = passed && rc; - if(!rc) { - cout << "Test failed!" << endl; - } -} - -int main() -{ - { - EdgePathGraph, SmartGraph, ListGraph> EPGr; - EPGr.addNode(); - EPGr.addNode(); - EPGr.addNode(); - EPGr.addNode(); - printf("%d node is in EPGr, after addition of 4 nodes.\n", EPGr.nodeNum()); - - EdgePathGraph, SmartGraph, ListGraph> EPGr2(EPGr); - printf("%d node is in EPGr2 created by copy constructor from EPGr.\n", EPGr2.nodeNum()); - - EPGr2.addNode(); - EPGr2.addNode(); - printf("%d node is in EPGr2 after addition of 2 more nodes.\n", EPGr2.nodeNum()); - - printf("%d nodes are in EPGr, before clear.\n", EPGr.nodeNum()); - EPGr.clear(); - printf("%d nodes are in EPGr, after clear.\n", EPGr.nodeNum()); - printf("%d nodes are in EPGr2, after clear of EPGr.\n", EPGr2.nodeNum()); - EPGr2.clear(); - } - { - EdgePathGraph, SmartGraph, ListGraph> EPGr; - //EdgePathGraph, SmartGraph, EdgePathGraph, ListGraph, SmartGraph> > EPGr; - EdgePathGraph, ListGraph, SmartGraph> EPGr2; - - typedef EdgePathGraph, SmartGraph, ListGraph>::Node Node; - typedef EdgePathGraph, SmartGraph, ListGraph>::Edge Edge; - typedef EdgePathGraph, SmartGraph, ListGraph>::EdgeIt EdgeIt; - - Node n0, n1, n2; - Edge e0, e1, e2, e3, e4, e5; - - ListGraph::Node m0, m1, m2, m3; - ListGraph::Edge f0, f1, f2, f3, f4, f5; - - - n0=EPGr.addNode(); - n1=EPGr.addNode(); - n2=EPGr.addNode(); - - e0=EPGr.addEdge(n0,n1); - e1=EPGr.addEdge(n1,n0); - e2=EPGr.addEdge(n0,n2); - e3=EPGr.addEdge(n2,n0); - e4=EPGr.addEdge(n1,n2); - e5=EPGr.addEdge(n2,n1); - - - m0=EPGr2.addNode(); - m1=EPGr2.addNode(); - m2=EPGr2.addNode(); - m3=EPGr2.addNode(); - - f0=EPGr2.addEdge(m0,m3); - f1=EPGr2.addEdge(m3,m0); - f2=EPGr2.addEdge(m2,m3); - f3=EPGr2.addEdge(m3,m2); - f4=EPGr2.addEdge(m1,m2); - f5=EPGr2.addEdge(m2,m1); - - EPGr.sublayer=&(EPGr2.actuallayer); - //EPGr.sublayer=&(EPGr2); - - EPGr.projection[n0]=&m0; - EPGr.projection[n1]=&m1; - EPGr.projection[n2]=&m2; - - - typedef DirPath DPath; - - //DPath P(EPGr2); - - DPath P1(EPGr2.actuallayer);//0-2 - DPath::Builder B1(P1); - B1.pushBack(f0); - B1.pushBack(f3); - B1.commit(); - cout << P1.length() << " hosszu utvonal letrehozva" << endl; - - DPath P2(EPGr2.actuallayer);//2-0 - DPath::Builder B2(P2); - B2.pushBack(f2); - B2.pushBack(f1); - B2.commit(); - cout << P2.length() << " hosszu utvonal letrehozva" << endl; - - DPath P3(EPGr2.actuallayer);//0-1 - DPath::Builder B3(P3); - B3.pushBack(f0); - B3.pushBack(f3); - B3.pushBack(f5); - B3.commit(); - cout << P3.length() << " hosszu utvonal letrehozva" << endl; - - DPath P4(EPGr2.actuallayer);//1-0 - DPath::Builder B4(P4); - B4.pushBack(f4); - B4.pushBack(f2); - B4.pushBack(f1); - B4.commit(); - cout << P4.length() << " hosszu utvonal letrehozva" << endl; - - - EPGr.edgepath[e0]=&P3; - EPGr.edgepath[e1]=&P4; - EPGr.edgepath[e2]=&P1; - EPGr.edgepath[e3]=&P2; - - for(EdgeIt e(EPGr.actuallayer);EPGr.actuallayer.valid(e);EPGr.actuallayer.next(e)) - { - typedef DPath::EdgeIt PEdgeIt; - PEdgeIt f; - - cout << "Edge " << EPGr.id(EPGr.source(e)) << " - " << EPGr.id(EPGr.target(e)) << " in actual layer is"; - if(EPGr.edgepath[e]) - { - cout << endl << "Path"; - for(EPGr.edgepath[e]->first(f); EPGr.edgepath[e]->valid(f); EPGr.edgepath[e]->next(f)) - { - cout << " " << EPGr2.id(EPGr2.source(f)) << "-" << EPGr2.id(EPGr2.target(f)); - } - //cout << EPGr2.id(EPGr2.target(f)) << endl; - cout << endl; - } - else - { - cout << " itself." < actlaymap(EPGr.actuallayer); - //EdgePathGraph, SmartGraph, EdgePathGraph, ListGraph, SmartGraph> > EPGr; - ListGraph::EdgeMap sublaymap(EPGr2.actuallayer); - - - actlaymap[e1]=5; - - //EdgeMap-ok kiirasa - - cout << "EdgeMaps before addMap:" << endl; - - cout << "actlaymap: "; - for(EdgeIt e(EPGr.actuallayer);EPGr.actuallayer.valid(e);EPGr.actuallayer.next(e)) - { - cout << EPGr.id(EPGr.source(e)) << "-" << EPGr.id(EPGr.target(e)) << ":" << actlaymap[e] << " "; - } - cout << endl; - cout << "sublaymap: "; - for(ListGraph::EdgeIt e(EPGr2.actuallayer);EPGr2.actuallayer.valid(e);EPGr2.actuallayer.next(e)) - { - cout << EPGr2.id(EPGr2.source(e)) << "-" << EPGr2.id(EPGr2.target(e)) << ":" << sublaymap[e] << " "; - } - cout << endl; - //EdgeMap-ok kiirasa#vege - - - EPGr.addMap(actlaymap, sublaymap); - - //EdgeMap-ok kiirasa - - cout << "EdgeMaps after addMap:" << endl; - - cout << "actlaymap: "; - for(EdgeIt e(EPGr.actuallayer);EPGr.actuallayer.valid(e);EPGr.actuallayer.next(e)) - { - cout << EPGr.id(EPGr.source(e)) << "-" << EPGr.id(EPGr.target(e)) << ":" << actlaymap[e] << " "; - } - cout << endl; - cout << "sublaymap: "; - for(ListGraph::EdgeIt e(EPGr2.actuallayer);EPGr2.actuallayer.valid(e);EPGr2.actuallayer.next(e)) - { - cout << EPGr2.id(EPGr2.source(e)) << "-" << EPGr2.id(EPGr2.target(e)) << ":" << sublaymap[e] << " "; - } - cout << endl; - //EdgeMap-ok kiirasa#vege - - - } -} diff -r ee5959aa4410 -r c280de819a73 src/work/peter/graph-displayer.cc --- a/src/work/peter/graph-displayer.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,285 +0,0 @@ -// This example was started by Guillaume Laurent. -// It has become a place to dump code that tests parts of the -// gnomemm canvas code. Little thought has been given to the -// actual on-screen output. - -#include -#include - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -using namespace lemon; - -typedef xy Coordinates; -typedef ListGraph Graph; -typedef Graph::NodeMap CoordinatesMap; -typedef Graph::Node Node; -typedef Graph::EdgeIt EdgeIt; -typedef Graph::NodeIt NodeIt; - -class GraphDisplayerCanvas : public Gnome::Canvas::CanvasAA -{ - typedef Gnome::Canvas::CanvasAA Parent; - -public: - GraphDisplayerCanvas(Graph &, CoordinatesMap &); - virtual ~GraphDisplayerCanvas(); - -private: - - ///Event handler function that handles dragging nodes of displayed_graph - bool event_handler(GdkEvent* e, Node n); - - ///The graph, on which we work - Graph g; - ///Map of nodes of planefigure - Graph::NodeMap nodesmap; - ///Map of edges of planefigure - Graph::EdgeMap edgesmap; - ///Group of graphical elements of displayed_graph - Gnome::Canvas::Group displayed_graph; - - ///Indicates whether the button of mouse is pressed or not - bool isbutton; - - ///At this location was the mousebutton pressed. - ///It helps to calculate the distance of dragging. - double clicked_x, clicked_y; - - ///Remembers which Gnome::Canvas::Item was pressed. - ///this variable is needed, because - ///1. we cannot query the item at he cursor as fast as it could not cause a Segmentation Fault - ///2. we would like to handle only ony item per movement, therefore quering it is not a working solution - Gnome::Canvas::Item * active_item; - - -}; - - -///This function moves only one node of displayed_graph, -///but recalculate the location of weight point, -///and also redraw the sides of the planefigure. -bool GraphDisplayerCanvas::event_handler(GdkEvent* e, Node n) -{ - switch(e->type) - { - case GDK_BUTTON_PRESS: - clicked_x=e->button.x; - clicked_y=e->button.y; - active_item=(get_item_at(e->button.x, e->button.y)); - isbutton=true; - break; - case GDK_BUTTON_RELEASE: - isbutton=false; - active_item=NULL; - break; - case GDK_MOTION_NOTIFY: - if(isbutton) - { - double dx=e->motion.x-clicked_x; - double dy=e->motion.y-clicked_y; - active_item->move(dx, dy); - clicked_x=e->motion.x; - clicked_y=e->motion.y; - - EdgeIt e; - - g.firstOut(e,n); - for(;e!=INVALID;g.nextOut(e)) - { - Gnome::Canvas::Points coos; - double x1, x2, y1, y2; - - nodesmap[g.source(e)]->get_bounds(x1, y1, x2, y2); - coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); - - nodesmap[g.target(e)]->get_bounds(x1, y1, x2, y2); - coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); - - edgesmap[e]->property_points().set_value(coos); - } - - g.firstIn(e,n); - for(;e!=INVALID;g.nextIn(e)) - { - Gnome::Canvas::Points coos; - double x1, x2, y1, y2; - - nodesmap[g.source(e)]->get_bounds(x1, y1, x2, y2); - coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); - - nodesmap[g.target(e)]->get_bounds(x1, y1, x2, y2); - coos.push_back(Gnome::Art::Point((x1+x2)/2,(y1+y2)/2)); - - edgesmap[e]->property_points().set_value(coos); - } - } - default: break; - } - return true; -} - -GraphDisplayerCanvas::GraphDisplayerCanvas(Graph & gr, CoordinatesMap & cm):g(gr),nodesmap(g),edgesmap(g),displayed_graph(*(root()), 0, 0),isbutton(false),active_item(NULL) -{ - for (EdgeIt i(g); i!=INVALID; ++i) - { - Gnome::Canvas::Points coos; - coos.push_back(Gnome::Art::Point(cm[g.source(i)].x,cm[g.source(i)].y)); - coos.push_back(Gnome::Art::Point(cm[g.target(i)].x,cm[g.target(i)].y)); - edgesmap[i]=new Gnome::Canvas::Line(displayed_graph, coos); - *(edgesmap[i]) << Gnome::Canvas::Properties::fill_color("green"); - edgesmap[i]->property_width_pixels().set_value(10); - } - for (NodeIt i(g); i!=INVALID; ++i) - { - nodesmap[i]=new Gnome::Canvas::Ellipse(displayed_graph, cm[i].x-20, cm[i].y-20, cm[i].x+20, cm[i].y+20); - *(nodesmap[i]) << Gnome::Canvas::Properties::fill_color("blue"); - *(nodesmap[i]) << Gnome::Canvas::Properties::outline_color("black"); - (nodesmap[i])->signal_event().connect(sigc::bind(sigc::mem_fun(*this, &GraphDisplayerCanvas::event_handler),i)); - } - -} - -GraphDisplayerCanvas::~GraphDisplayerCanvas() -{ - Graph::NodeMap id(g); - Graph::NodeMap xc(g); - Graph::NodeMap yc(g); - - int j=1; - - for (NodeIt i(g); i!=INVALID; ++i) - { - double x1,y1,x2,y2; - nodesmap[i]->get_bounds(x1, y1, x2, y2); - - id[i]=j++; - xc[i]=(x1+x2)/2; - yc[i]=(y1+y2)/2; - } - - GraphWriter writer(std::cout,g); - - writer.addNodeMap("id", id); - writer.addNodeMap("coordinates_x", xc); - writer.addNodeMap("coordinates_y", yc); - writer.run(); -} - - -//MainWin: -class MainWin : public Gtk::Window -{ -public: - MainWin(const std::string& title, Graph &, CoordinatesMap &); - -protected: - //Member widgets: - GraphDisplayerCanvas gd_canvas; -}; - -MainWin::MainWin(const std::string& title, Graph & graph, CoordinatesMap & cm):gd_canvas(graph, cm) -{ - set_title (title); - add(gd_canvas); - set_default_size(900,600); - - show_all(); -} - - -///This class is responsible for being able -///to read xy datastructure from file. It is -///based on BaseMap. The set method sets the -///appropriate value in the final xy NodeMap -///that was given to the constructor. -class CoordReaderMap: public MapBase -{ - CoordinatesMap & cm; - char xoy; - -public: - CoordReaderMap(char xory, CoordinatesMap & coordmap); - void set(Node node, double coord); -}; - -///The constructor expects for an xy NodeMap, -///and we have to tell it, for which value -///of the xy vector is responsible the actual -///copy. -CoordReaderMap::CoordReaderMap(char xory, CoordinatesMap & coordmap): cm(coordmap) -{ - switch(xory) - { - case 'x': - case 'y': - xoy=xory; - break; - default: - throw UninitializedParameter() ; - } -} - -///set method sets the appropriate value in the -///xy type NodeMap that is under construction -void CoordReaderMap::set(Node node, double coord) -{ - switch(xoy) - { - case 'x': - cm[node].x=coord; - break; - case 'y': - cm[node].y=coord; - break; - default: - throw UninitializedParameter() ; - } -} - -//main(): - -int main(int argc, char *argv[]) -{ - if(argc<2) - { - std::cerr << "USAGE: gd " << endl; - return 0; - } - - Coordinates coosvector; - - Graph g; - - CoordinatesMap cm(g); - Graph::EdgeMap cap(g); - - //we create one object to read x coordinates - //and one to read y coordinate of nodes and write them to cm NodeMap. - CoordReaderMap xreader('x',cm); - CoordReaderMap yreader('y',cm); - - std::ifstream is(argv[1]); - - GraphReader reader(is, g); - reader.addNodeMap("coordinates_x", xreader); - reader.addNodeMap("coordinates_y", yreader); - reader.run(); - - Gnome::Canvas::init(); - Gtk::Main app(argc, argv); - - MainWin mainwin("Displayed Graph", g, cm); - app.run(mainwin); - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/peter/graphocska.lgf --- a/src/work/peter/graphocska.lgf Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,39 +0,0 @@ -@nodeset -id coordinates_x coordinates_y -1 230 -80 -2 230 100 -3 120 -80 -4 120 100 -5 20 100 -6 20 -80 -7 -40 10 -8 -100 100 -9 -100 10 -10 -100 -80 -11 -200 -80 -12 -200 10 -13 -200 100 -14 -300 100 -15 -300 -80 - -@edgeset - cap -15 14 1 -14 13 2 -13 12 3 -13 8 4 -12 11 5 -12 9 6 -11 10 7 -10 9 8 -10 7 9 -9 8 10 -7 6 11 -6 5 12 -6 3 13 -5 4 14 -4 3 15 -3 2 16 -2 1 17 - -@end \ No newline at end of file diff -r ee5959aa4410 -r c280de819a73 src/work/peter/hierarchygraph.h --- a/src/work/peter/hierarchygraph.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,581 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_NET_GRAPH_H -#define LEMON_NET_GRAPH_H - -///\file -///\brief Declaration of HierarchyGraph. - -#include -#include - -/// The namespace of LEMON -namespace lemon -{ - - // @defgroup empty_graph The HierarchyGraph class - // @{ - - /// A graph class in that a simple edge can represent a path. - - /// This class provides common features of a graph structure - /// that represents a network. You can handle with it layers. This - /// means that a node in one layer can be a complete network in a nother - /// layer. - - template < class Gact, class Gsub > class HierarchyGraph - { - - public: - - /// The actual layer - Gact actuallayer; - - - /// Map of the subnetworks in the sublayer - /// The appropriate edge nodes are also stored here - - class SubNetwork - { - - struct actedgesubnodestruct - { - typename Gact::Edge actedge; - typename Gsub::Node subnode; - }; - - int edgenumber; - bool connectable; - Gact *actuallayer; - typename Gact::Node * actuallayernode; - Gsub *subnetwork; - actedgesubnodestruct *assignments; - - public: - - int addAssignment (typename Gact::Edge actedge, - typename Gsub::Node subnode) - { - if (!(actuallayer->valid (actedge))) - { - cerr << "The given edge is not in the given network!" << endl; - return -1; - } - else if ((actuallayer->id (actuallayer->source (actedge)) != - actuallayer->id (*actuallayernode)) - && (actuallayer->id (actuallayer->target (actedge)) != - actuallayer->id (*actuallayernode))) - { - cerr << "The given edge does not connect to the given node!" << - endl; - return -1; - } - - if (!(subnetwork->valid (subnode))) - { - cerr << "The given node is not in the given network!" << endl; - return -1; - } - - int i = 0; - //while in the array there is valid note that is not equvivalent with the one that would be noted increase i - while ((i < edgenumber) - && (actuallayer->valid (assignments[i].actedge)) - && (assignments[i].actedge != actedge)) - i++; - if (assignments[i].actedge == actedge) - { - cout << "Warning: Redefinement of assigment!!!" << endl; - } - if (i == edgenumber) - { - cout << - "This case can't be!!! (because there should be the guven edge in the array already and the cycle had to stop)" - << endl; - } - //if(!(actuallayer->valid(assignments[i].actedge))) //this condition is necessary if we do not obey redefinition - { - assignments[i].actedge = actedge; - assignments[i].subnode = subnode; - } - - /// If to all of the edges a subnode is assigned then the subnetwork is connectable (attachable?) - /// We do not need to check for further attributes, because to notice an assignment we need - /// all of them to be correctly initialised before. - if (i == edgenumber - 1) - connectable = 1; - - return 0; - } - - int setSubNetwork (Gsub * sn) - { - subnetwork = sn; - return 0; - } - - int setActualLayer (Gact * al) - { - actuallayer = al; - return 0; - } - - int setActualLayerNode (typename Gact::Node * aln) - { - typename Gact::InEdgeIt iei; - typename Gact::OutEdgeIt oei; - - actuallayernode = aln; - - edgenumber = 0; - - if (actuallayer) - { - for (iei = actuallayer->first (iei, (*actuallayernode)); - ((actuallayer->valid (iei)) - && (actuallayer->target (iei) == (*actuallayernode))); - actuallayer->next (iei)) - { - cout << actuallayer->id (actuallayer-> - source (iei)) << " " << actuallayer-> - id (actuallayer->target (iei)) << endl; - edgenumber++; - } - //cout << "Number of in-edges: " << edgenumber << endl; - for (oei = actuallayer->first (oei, (*actuallayernode)); - ((actuallayer->valid (oei)) - && (actuallayer->source (oei) == (*actuallayernode))); - actuallayer->next (oei)) - { - cout << actuallayer->id (actuallayer-> - source (oei)) << " " << actuallayer-> - id (actuallayer->target (oei)) << endl; - edgenumber++; - } - //cout << "Number of in+out-edges: " << edgenumber << endl; - assignments = new actedgesubnodestruct[edgenumber]; - for (int i = 0; i < edgenumber; i++) - { - assignments[i].actedge = INVALID; - assignments[i].subnode = INVALID; - } - } - else - { - cerr << "There is no actual layer defined yet!" << endl; - return -1; - } - - return 0; - } - - SubNetwork ():edgenumber (0), connectable (false), actuallayer (NULL), - actuallayernode (NULL), subnetwork (NULL), - assignments (NULL) - { - } - - }; - - typename Gact::template NodeMap < SubNetwork > subnetworks; - - - /// Defalult constructor. - /// We don't need any extra lines, because the actuallayer - /// variable has run its constructor, when we have created this class - /// So only the two maps has to be initialised here. - HierarchyGraph ():subnetworks (actuallayer) - { - } - - - ///Copy consructor. - HierarchyGraph (const HierarchyGraph < Gact, Gsub > &HG):actuallayer (HG.actuallayer), - subnetworks - (actuallayer) - { - } - - - /// The base type of the node iterators. - - /// This is the base type of each node iterators, - /// thus each kind of node iterator will convert to this. - /// The Node type of the HierarchyGraph is the Node type of the actual layer. - typedef typename Gact::Node Node; - - - /// This iterator goes through each node. - - /// Its usage is quite simple, for example you can count the number - /// of nodes in graph \c G of type \c Graph like this: - /// \code - ///int count=0; - ///for(Graph::NodeIt n(G);G.valid(n);G.next(n)) count++; - /// \endcode - /// The NodeIt type of the HierarchyGraph is the NodeIt type of the actual layer. - typedef typename Gact::NodeIt NodeIt; - - - /// The base type of the edge iterators. - /// The Edge type of the HierarchyGraph is the Edge type of the actual layer. - typedef typename Gact::Edge Edge; - - - /// This iterator goes trough the outgoing edges of a node. - - /// This iterator goes trough the \e outgoing edges of a certain node - /// of a graph. - /// Its usage is quite simple, for example you can count the number - /// of outgoing edges of a node \c n - /// in graph \c G of type \c Graph as follows. - /// \code - ///int count=0; - ///for(Graph::OutEdgeIt e(G,n);G.valid(e);G.next(e)) count++; - /// \endcode - /// The OutEdgeIt type of the HierarchyGraph is the OutEdgeIt type of the actual layer. - typedef typename Gact::OutEdgeIt OutEdgeIt; - - - /// This iterator goes trough the incoming edges of a node. - - /// This iterator goes trough the \e incoming edges of a certain node - /// of a graph. - /// Its usage is quite simple, for example you can count the number - /// of outgoing edges of a node \c n - /// in graph \c G of type \c Graph as follows. - /// \code - ///int count=0; - ///for(Graph::InEdgeIt e(G,n);G.valid(e);G.next(e)) count++; - /// \endcode - /// The InEdgeIt type of the HierarchyGraph is the InEdgeIt type of the actual layer. - typedef typename Gact::InEdgeIt InEdgeIt; - - - /// This iterator goes through each edge. - - /// This iterator goes through each edge of a graph. - /// Its usage is quite simple, for example you can count the number - /// of edges in a graph \c G of type \c Graph as follows: - /// \code - ///int count=0; - ///for(Graph::EdgeIt e(G);G.valid(e);G.next(e)) count++; - /// \endcode - /// The EdgeIt type of the HierarchyGraph is the EdgeIt type of the actual layer. - typedef typename Gact::EdgeIt EdgeIt; - - - /// First node of the graph. - - /// \retval i the first node. - /// \return the first node. - typename Gact::NodeIt & first (typename Gact::NodeIt & i) const - { - return actuallayer.first (i); - } - - - /// The first incoming edge. - typename Gact::InEdgeIt & first (typename Gact::InEdgeIt & i, - typename Gact::Node) const - { - return actuallayer.first (i); - } - - - /// The first outgoing edge. - typename Gact::OutEdgeIt & first (typename Gact::OutEdgeIt & i, - typename Gact::Node) const - { - return actuallayer.first (i); - } - - - // SymEdgeIt &first(SymEdgeIt &, Node) const { return i;} - /// The first edge of the Graph. - typename Gact::EdgeIt & first (typename Gact::EdgeIt & i) const - { - return actuallayer.first (i); - } - - -// Node getNext(Node) const {} -// InEdgeIt getNext(InEdgeIt) const {} -// OutEdgeIt getNext(OutEdgeIt) const {} -// //SymEdgeIt getNext(SymEdgeIt) const {} -// EdgeIt getNext(EdgeIt) const {} - - - /// Go to the next node. - typename Gact::NodeIt & next (typename Gact::NodeIt & i) const - { - return actuallayer.next (i); - } - /// Go to the next incoming edge. - typename Gact::InEdgeIt & next (typename Gact::InEdgeIt & i) const - { - return actuallayer.next (i); - } - /// Go to the next outgoing edge. - typename Gact::OutEdgeIt & next (typename Gact::OutEdgeIt & i) const - { - return actuallayer.next (i); - } - //SymEdgeIt &next(SymEdgeIt &) const {} - /// Go to the next edge. - typename Gact::EdgeIt & next (typename Gact::EdgeIt & i) const - { - return actuallayer.next (i); - } - - ///Gives back the target node of an edge. - typename Gact::Node target (typename Gact::Edge edge) const - { - return actuallayer.target (edge); - } - ///Gives back the source node of an edge. - typename Gact::Node source (typename Gact::Edge edge) const - { - return actuallayer.source (edge); - } - - // Node aNode(InEdgeIt) const {} - // Node aNode(OutEdgeIt) const {} - // Node aNode(SymEdgeIt) const {} - - // Node bNode(InEdgeIt) const {} - // Node bNode(OutEdgeIt) const {} - // Node bNode(SymEdgeIt) const {} - - /// Checks if a node iterator is valid - - ///\todo Maybe, it would be better if iterator converted to - ///bool directly, as Jacint prefers. - bool valid (const typename Gact::Node & node) const - { - return actuallayer.valid (node); - } - /// Checks if an edge iterator is valid - - ///\todo Maybe, it would be better if iterator converted to - ///bool directly, as Jacint prefers. - bool valid (const typename Gact::Edge & edge) const - { - return actuallayer.valid (edge); - } - - ///Gives back the \e id of a node. - - ///\warning Not all graph structures provide this feature. - /// - int id (const typename Gact::Node & node) const - { - return actuallayer.id (node); - } - ///Gives back the \e id of an edge. - - ///\warning Not all graph structures provide this feature. - /// - int id (const typename Gact::Edge & edge) const - { - return actuallayer.id (edge); - } - - //void setInvalid(Node &) const {}; - //void setInvalid(Edge &) const {}; - - ///Add a new node to the graph. - - /// \return the new node. - /// - typename Gact::Node addNode () - { - return actuallayer.addNode (); - } - ///Add a new edge to the graph. - - ///Add a new edge to the graph with source node \c source - ///and target node \c target. - ///\return the new edge. - typename Gact::Edge addEdge (typename Gact::Node node1, - typename Gact::Node node2) - { - return actuallayer.addEdge (node1, node2); - } - - /// Resets the graph. - - /// This function deletes all edges and nodes of the graph. - /// It also frees the memory allocated to store them. - void clear () - { - actuallayer.clear (); - } - - int nodeNum () const - { - return actuallayer.nodeNum (); - } - int edgeNum () const - { - return actuallayer.edgeNum (); - } - - ///Read/write/reference map of the nodes to type \c T. - - ///Read/write/reference map of the nodes to type \c T. - /// \sa MemoryMap - /// \todo We may need copy constructor - /// \todo We may need conversion from other nodetype - /// \todo We may need operator= - /// \warning Making maps that can handle bool type (NodeMap) - /// needs extra attention! - - template < class T > class NodeMap - { - public: - typedef T Value; - typedef Node Key; - - NodeMap (const HierarchyGraph &) - { - } - NodeMap (const HierarchyGraph &, T) - { - } - - template < typename TT > NodeMap (const NodeMap < TT > &) - { - } - - /// Sets the value of a node. - - /// Sets the value associated with node \c i to the value \c t. - /// - void set (Node, T) - { - } - // Gets the value of a node. - //T get(Node i) const {return *(T*)0;} //FIXME: Is it necessary? - T & operator[](Node) - { - return *(T *) 0; - } - const T & operator[] (Node) const - { - return *(T *) 0; - } - - /// Updates the map if the graph has been changed - - /// \todo Do we need this? - /// - void update () - { - } - void update (T a) - { - } //FIXME: Is it necessary - }; - - ///Read/write/reference map of the edges to type \c T. - - ///Read/write/reference map of the edges to type \c T. - ///It behaves exactly in the same way as \ref NodeMap. - /// \sa NodeMap - /// \sa MemoryMap - /// \todo We may need copy constructor - /// \todo We may need conversion from other edgetype - /// \todo We may need operator= - template < class T > class EdgeMap - { - public: - typedef T Value; - typedef Edge Key; - - EdgeMap (const HierarchyGraph &) - { - } - EdgeMap (const HierarchyGraph &, T) - { - } - - ///\todo It can copy between different types. - /// - template < typename TT > EdgeMap (const EdgeMap < TT > &) - { - } - - void set (Edge, T) - { - } - //T get(Edge) const {return *(T*)0;} - T & operator[](Edge) - { - return *(T *) 0; - } - const T & operator[] (Edge) const - { - return *(T *) 0; - } - - void update () - { - } - void update (T a) - { - } //FIXME: Is it necessary - }; - }; - - /// An empty erasable graph class. - - /// This class provides all the common features of an \e erasable graph - /// structure, - /// however completely without implementations and real data structures - /// behind the interface. - /// All graph algorithms should compile with this class, but it will not - /// run properly, of course. - /// - /// \todo This blabla could be replaced by a sepatate description about - /// s. - /// - /// It can be used for checking the interface compatibility, - /// or it can serve as a skeleton of a new graph structure. - /// - /// Also, you will find here the full documentation of a certain graph - /// feature, the documentation of a real graph imlementation - /// like @ref ListGraph or - /// @ref SmartGraph will just refer to this structure. -template < typename Gact, typename Gsub > class ErasableHierarchyGraph:public HierarchyGraph < Gact, - Gsub - > - { - public: - /// Deletes a node. - void erase (typename Gact::Node n) - { - actuallayer.erase (n); - } - /// Deletes an edge. - void erase (typename Gact::Edge e) - { - actuallayer.erase (e); - } - - /// Defalult constructor. - ErasableHierarchyGraph () - { - } - ///Copy consructor. - ErasableHierarchyGraph (const HierarchyGraph < Gact, Gsub > &EPG) - { - } - }; - - - // @} - -} //namespace lemon - - -#endif // LEMON_SKELETON_GRAPH_H diff -r ee5959aa4410 -r c280de819a73 src/work/peter/hierarchygraph_test.cc --- a/src/work/peter/hierarchygraph_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,89 +0,0 @@ -#include -#include -#include - -#include "hierarchygraph.h" -#include -#include -#include - -using namespace lemon; -using namespace std; - -bool passed = true; - -void check(bool rc) { - passed = passed && rc; - if(!rc) { - cout << "Test failed!" << endl; - } -} - -int main() -{ - HierarchyGraph HGr; - ListGraph subnetwork, othernetwork; - typedef HierarchyGraph::Node Node; - typedef HierarchyGraph::Edge Edge; - typedef HierarchyGraph::SubNetwork Sntype; - - Node n0, n1, n2; - Edge e0, e1, e2, e3, e4, e5; - - ListGraph::Node sn0, sn1, on0; - ListGraph::Edge se0; - - n0=HGr.addNode(); - - cout << "Az n0 id-je: " << HGr.actuallayer.id(n0) << endl; - - n1=HGr.addNode(); - n2=HGr.addNode(); - - e0=HGr.addEdge(n0,n1); - e1=HGr.addEdge(n1,n0); - e2=HGr.addEdge(n0,n2); - e3=HGr.addEdge(n2,n0); - e4=HGr.addEdge(n1,n2); - e5=HGr.addEdge(n2,n1); - - sn0=subnetwork.addNode(); - sn1=subnetwork.addNode(); - se0=subnetwork.addEdge(sn0,sn1); - - Sntype sn; - sn.setActualLayer(&(HGr.actuallayer)); - sn.setActualLayerNode(&(n0)); - sn.addAssignment(e0, sn0); - sn.addAssignment(e1, sn1); - sn.addAssignment(e2, sn1); - sn.addAssignment(e3, sn0); - sn.addAssignment(e1, sn0); - sn.addAssignment(e5, sn0); - - - - on0=othernetwork.addNode(); - - cout << "ID of a node from a different graph: " << subnetwork.id(on0) << endl; - cout << "ID of a node in its graph: " << othernetwork.id(on0) << endl; - cout << "ID of a node from a graph: " << subnetwork.id(sn0) << endl; - - ListGraph::NodeIt snni; - //ListGraph::Node snn; - - for(subnetwork.first(snni);subnetwork.valid(snni);subnetwork.next(snni)) - { - if(snni==on0) - { - cout << "Nem jo, megtalalta az idegen node-ot sajat haloban, pedig azt nem szabad!!!" - << subnetwork.id(snni) << subnetwork.id(on0) << othernetwork.id(snni) << othernetwork.id(on0) << endl; - } - else cout << "ID:" << subnetwork.id(snni) << endl; - - } - - - HGr.subnetworks[n0]=sn; - -} diff -r ee5959aa4410 -r c280de819a73 src/work/peter/magic_plane_figure.cc --- a/src/work/peter/magic_plane_figure.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,269 +0,0 @@ -// This example was started by Guillaume Laurent. -// It has become a place to dump code that tests parts of the -// gnomemm canvas code. Little thought has been given to the -// actual on-screen output. - -#include -#include -#include -#include - -class CanvasExample : public Gnome::Canvas::CanvasAA -{ - typedef Gnome::Canvas::CanvasAA Parent; - -public: - CanvasExample(double *, int); - virtual ~CanvasExample(); - -private: - - ///Event handler function that handles dragging nodes of triangle - bool event_handler(GdkEvent* e, int b); - - ///Event handler function that handles dragging triangle - bool tri_mover(GdkEvent* e); - - ///Coordinates of Weight Point of tirangle - Gnome::Art::Point * wp; - ///Array of nodes of planefigure - Gnome::Canvas::Ellipse ** nodes; - ///Sides of planefigure - Gnome::Canvas::Polygon * sides; - ///Group of graphical elements of triangle - Gnome::Canvas::Group triangle; - - ///Indicates whether the button of mouse is pressed or not - bool isbutton; - - ///Number Of Elements - the number of nodes - int noe; - - ///Array of coordinates - double * coordinates; - - ///At this location was the mousebutton pressed. - ///It helps to calculate the distance of dragging. - double clicked_x, clicked_y; - - ///Remembers which Gnome::Canvas::Item was pressed. - ///this variable is needed, because - ///1. we cannot query the item at he cursor as fast as it could not cause a Segmentation Fault - ///2. we would like to handle only ony item per movement, therefore quering it is not a working solution - Gnome::Canvas::Item * active_item; - - -}; - -///When we click on the weight point we can drag the whole triangle. This function resolves it. -bool CanvasExample::tri_mover(GdkEvent* e) -{ - switch(e->type) - { - case GDK_BUTTON_PRESS: - clicked_x=e->button.x; - clicked_y=e->button.y; - isbutton=true; - break; - case GDK_BUTTON_RELEASE: - isbutton=false; - active_item=NULL; - break; - case GDK_MOTION_NOTIFY: - if(isbutton) - { - double dx=e->motion.x-clicked_x; - double dy=e->motion.y-clicked_y; - - Gnome::Canvas::Points coos; - - for(int i=0;i<=noe;i++) - { - nodes[i]->move(dx,dy); - - double x=(coordinates[2*i]+=dx); - double y=(coordinates[2*i+1]+=dy); - - if(i!=noe)coos.push_back(Gnome::Art::Point(x,y)); - - } - - clicked_x=e->motion.x; - clicked_y=e->motion.y; - - sides->property_points().set_value(coos); - } - default: break; - } - return true; -} - -///This function moves only one node of triangle, -///but recalculate the location of wight point, -///and also redraw the sides of the planefigure. -bool CanvasExample::event_handler(GdkEvent* e, int b) -{ - switch(e->type) - { - case GDK_BUTTON_PRESS: - clicked_x=e->button.x; - clicked_y=e->button.y; - active_item=(get_item_at(e->button.x, e->button.y)); - isbutton=true; - break; - case GDK_BUTTON_RELEASE: - isbutton=false; - active_item=NULL; - break; - case GDK_MOTION_NOTIFY: - if(isbutton) - { - //double x1, y1, x2, y2; - //(get_item_at(e->motion.x, e->motion.y))->get_bounds(x1, y1, x2, y2); - //printf("Item coos: %d %d %d %d\n", (int)x1, (int)y1, (int)x2, (int)y2); - //printf("Mouse is moved! %d %d\n",(int)e->motion.x,(int)e->motion.y); - double dx=e->motion.x-clicked_x; - double dy=e->motion.y-clicked_y; - active_item->move(dx, dy); - - coordinates[2*b]+=dx; - coordinates[2*b+1]+=dy; - - Gnome::Canvas::Points coos; - - double x_wp=0; - double y_wp=0; - - for(int i=0;iproperty_points().set_value(coos); - - x_wp/=noe; - y_wp/=noe; - - dx=x_wp-coordinates[noe*2]; - dy=y_wp-coordinates[noe*2+1]; - nodes[noe]->move(dx, dy); - - coordinates[noe*2]+=dx; - coordinates[noe*2+1]+=dy; - - clicked_x=e->motion.x; - clicked_y=e->motion.y; - } - default: break; - } - return true; -} - -CanvasExample::CanvasExample(double * coosarray, int numofcoos):triangle(*(root()), 0, 0),isbutton(false),active_item(NULL) -{ - noe=numofcoos/2; - - coordinates=new double [numofcoos+2]; - - double x_wp=0; - double y_wp=0; - - Gnome::Canvas::Points coos; - for(int i=0;iproperty_width_pixels().set_value(10); - - nodes=new Gnome::Canvas::Ellipse* [noe+1]; - - for(int i=0; isignal_event().connect(sigc::bind(sigc::mem_fun(*this, &CanvasExample::event_handler),i)); - } - - coordinates[numofcoos]=x_wp/noe; - coordinates[numofcoos+1]=y_wp/noe; - - wp=new Gnome::Art::Point(coordinates[numofcoos],coordinates[numofcoos+1]); - - nodes[noe]= new Gnome::Canvas::Ellipse - ( - triangle, - coordinates[numofcoos]-20, - coordinates[numofcoos+1]-20, - coordinates[numofcoos]+20, - coordinates[numofcoos+1]+20 - ); - *(nodes[noe]) << Gnome::Canvas::Properties::fill_color("blue"); - *(nodes[noe]) << Gnome::Canvas::Properties::outline_color("black"); - (nodes[noe])->signal_event().connect(sigc::mem_fun(*this, &CanvasExample::tri_mover)); - - - -} - -CanvasExample::~CanvasExample() -{ -} - -//MainWin: - -class MainWin : public Gtk::Window -{ -public: - MainWin(const std::string& title, double *, int); - -protected: - //Member widgets: - CanvasExample m_canvas; -}; - -MainWin::MainWin(const std::string& title, double * coosarray, int noc):m_canvas(coosarray, noc) -{ - set_title (title); - add(m_canvas); - set_default_size(900,600); - - show_all(); -} - -//main(): - -int main(int argc, char *argv[]) -{ - if((argc>=7)&& (argc%2) ) - { - double * coosarray=new double[argc]; - - for(int i=1;i -#include -#include - -#include -#include -#include - -namespace lemon { - - /// \addtogroup paths - /// @{ - - - //! \brief A structure for representing directed paths in a graph. - //! - //! A structure for representing directed path in a graph. - //! \param Graph The graph type in which the path is. - //! \param DM DebugMode, defaults to DefaultDebugMode. - //! - //! In a sense, the path can be treated as a graph, for is has \c NodeIt - //! and \c EdgeIt with the same usage. These types converts to the \c Node - //! and \c Edge of the original graph. - //! - //! \todo Thoroughfully check all the range and consistency tests. - template - class DirPath { - public: - /// Edge type of the underlying graph. - typedef typename Graph::Edge GraphEdge; - /// Node type of the underlying graph. - typedef typename Graph::Node GraphNode; - class NodeIt; - class EdgeIt; - - protected: - const Graph *gr; - typedef std::vector Container; - Container edges; - - public: - - /// \param _G The graph in which the path is. - /// - DirPath(const Graph &_G) : gr(&_G) {} - - /// \brief Subpath constructor. - /// - /// Subpath defined by two nodes. - /// \warning It is an error if the two edges are not in order! - DirPath(const DirPath &P, const NodeIt &a, const NodeIt &b) { - if( DM::range_check && (!a.valid() || !b.valid) ) { - // FIXME: this check should be more elaborate... - fault("DirPath, subpath ctor: invalid bounding nodes"); - } - gr = P.gr; - edges.insert(edges.end(), P.edges.begin()+a.idx, P.edges.begin()+b.idx); - } - - /// \brief Subpath constructor. - /// - /// Subpath defined by two edges. Contains edges in [a,b) - /// \warning It is an error if the two edges are not in order! - DirPath(const DirPath &P, const EdgeIt &a, const EdgeIt &b) { - if( DM::range_check && (!a.valid() || !b.valid) ) { - // FIXME: this check should be more elaborate... - fault("DirPath, subpath ctor: invalid bounding nodes"); - } - gr = P.gr; - edges.insert(edges.end(), P.edges.begin()+a.idx, P.edges.begin()+b.idx); - } - - /// Length of the path. - size_t length() const { return edges.size(); } - /// Returns whether the path is empty. - bool empty() const { return edges.empty(); } - - /// Resets the path to an empty path. - void clear() { edges.clear(); } - - /// \brief Starting point of the path. - /// - /// Starting point of the path. - /// Returns INVALID if the path is empty. - GraphNode from() const { - return empty() ? INVALID : gr->source(edges[0]); - } - /// \brief End point of the path. - /// - /// End point of the path. - /// Returns INVALID if the path is empty. - GraphNode to() const { - return empty() ? INVALID : gr->target(edges[length()-1]); - } - - /// \brief Initializes node or edge iterator to point to the first - /// node or edge. - /// - /// \sa nth - template - It& first(It &i) const { return i=It(*this); } - - /// \brief Initializes node iterator to point to the node of a given index. - NodeIt& nth(NodeIt &i, int n) const { - if( DM::range_check && (n<0 || n>int(length())) ) - fault("DirPath::nth: index out of range"); - return i=NodeIt(*this, n); - } - - /// \brief Initializes edge iterator to point to the edge of a given index. - EdgeIt& nth(EdgeIt &i, int n) const { - if( DM::range_check && (n<0 || n>=int(length())) ) - fault("DirPath::nth: index out of range"); - return i=EdgeIt(*this, n); - } - - /// Checks validity of a node or edge iterator. - template - static - bool valid(const It &i) { return i.valid(); } - - /// Steps the given node or edge iterator. - template - static - It& next(It &e) { - if( DM::range_check && !e.valid() ) - fault("DirPath::next() on invalid iterator"); - return ++e; - } - - /// \brief Returns node iterator pointing to the target node of the - /// given edge iterator. - NodeIt target(const EdgeIt& e) const { - if( DM::range_check && !e.valid() ) - fault("DirPath::target() on invalid iterator"); - return NodeIt(*this, e.idx+1); - } - - /// \brief Returns node iterator pointing to the source node of the - /// given edge iterator. - NodeIt source(const EdgeIt& e) const { - if( DM::range_check && !e.valid() ) - fault("DirPath::source() on invalid iterator"); - return NodeIt(*this, e.idx); - } - - - /* Iterator classes */ - - /** - * \brief Iterator class to iterate on the edges of the paths - * - * \ingroup paths - * This class is used to iterate on the edges of the paths - * - * Of course it converts to Graph::Edge - * - * \todo Its interface differs from the standard edge iterator. - * Yes, it shouldn't. - */ - class EdgeIt { - friend class DirPath; - - int idx; - const DirPath *p; - public: - /// Default constructor - EdgeIt() {} - /// Invalid constructor - EdgeIt(Invalid) : idx(-1), p(0) {} - /// Constructor with starting point - EdgeIt(const DirPath &_p, int _idx = 0) : - idx(_idx), p(&_p) { validate(); } - - ///Validity check - bool valid() const { return idx!=-1; } - - ///Conversion to Graph::Edge - operator GraphEdge () const { - return valid() ? p->edges[idx] : INVALID; - } - - /// Next edge - EdgeIt& operator++() { ++idx; validate(); return *this; } - - /// Comparison operator - bool operator==(const EdgeIt& e) const { return idx==e.idx; } - /// Comparison operator - bool operator!=(const EdgeIt& e) const { return idx!=e.idx; } - /// Comparison operator - bool operator<(const EdgeIt& e) const { return idx= p->length() ) idx=-1; } - }; - - /** - * \brief Iterator class to iterate on the nodes of the paths - * - * \ingroup paths - * This class is used to iterate on the nodes of the paths - * - * Of course it converts to Graph::Node - * - * \todo Its interface differs from the standard node iterator. - * Yes, it shouldn't. - */ - class NodeIt { - friend class DirPath; - - int idx; - const DirPath *p; - public: - /// Default constructor - NodeIt() {} - /// Invalid constructor - NodeIt(Invalid) : idx(-1), p(0) {} - /// Constructor with starting point - NodeIt(const DirPath &_p, int _idx = 0) : - idx(_idx), p(&_p) { validate(); } - - ///Validity check - bool valid() const { return idx!=-1; } - - ///Conversion to Graph::Node - operator const GraphNode& () const { - if(idx >= p->length()) - return p->to(); - else if(idx >= 0) - return p->gr->source(p->edges[idx]); - else - return INVALID; - } - /// Next node - NodeIt& operator++() { ++idx; validate(); return *this; } - - /// Comparison operator - bool operator==(const NodeIt& e) const { return idx==e.idx; } - /// Comparison operator - bool operator!=(const NodeIt& e) const { return idx!=e.idx; } - /// Comparison operator - bool operator<(const NodeIt& e) const { return idx p->length() ) idx=-1; } - }; - - friend class Builder; - - /** - * \brief Class to build paths - * - * \ingroup paths - * This class is used to fill a path with edges. - * - * You can push new edges to the front and to the back of the path in - * arbitrary order then you should commit these changes to the graph. - * - * Fundamentally, for most "Paths" (classes fulfilling the - * PathConcept) while the builder is active (after the first modifying - * operation and until the commit()) the original Path is in a - * "transitional" state (operations on it have undefined result). But - * in the case of DirPath the original path remains unchanged until the - * commit. However we don't recomend that you use this feature. - */ - class Builder { - DirPath &P; - Container front, back; - - public: - ///\param _P the path you want to fill in. - /// - Builder(DirPath &_P) : P(_P) {} - - /// Sets the starting node of the path. - - /// Sets the starting node of the path. Edge added to the path - /// afterwards have to be incident to this node. - /// It should be called iff the path is empty and before any call to - /// \ref pushFront() or \ref pushBack() - void setStartNode(const GraphNode &) {} - - ///Push a new edge to the front of the path - - ///Push a new edge to the front of the path. - ///\sa setStartNode - void pushFront(const GraphEdge& e) { - if( DM::consistensy_check && !empty() && P.gr->target(e)!=from() ) { - fault("DirPath::Builder::pushFront: nonincident edge"); - } - front.push_back(e); - } - - ///Push a new edge to the back of the path - - ///Push a new edge to the back of the path. - ///\sa setStartNode - void pushBack(const GraphEdge& e) { - if( DM::consistensy_check && !empty() && P.gr->source(e)!=to() ) { - fault("DirPath::Builder::pushBack: nonincident edge"); - } - back.push_back(e); - } - - ///Commit the changes to the path. - void commit() { - if( !(front.empty() && back.empty()) ) { - Container tmp; - tmp.reserve(front.size()+back.size()+P.length()); - tmp.insert(tmp.end(), front.rbegin(), front.rend()); - tmp.insert(tmp.end(), P.edges.begin(), P.edges.end()); - tmp.insert(tmp.end(), back.begin(), back.end()); - P.edges.swap(tmp); - front.clear(); - back.clear(); - } - } - - // FIXME: Hmm, pontosan hogy is kene ezt csinalni? - // Hogy kenyelmes egy ilyet hasznalni? - - ///Reserve storage for the builder in advance. - - ///If you know an reasonable upper bound of the number of the edges - ///to add, using this function you can speed up the building. - void reserve(size_t r) { - front.reserve(r); - back.reserve(r); - } - - private: - bool empty() { - return front.empty() && back.empty() && P.empty(); - } - - GraphNode from() const { - if( ! front.empty() ) - return P.gr->source(front[front.size()-1]); - else if( ! P.empty() ) - return P.gr->source(P.edges[0]); - else if( ! back.empty() ) - return P.gr->source(back[0]); - else - return INVALID; - } - GraphNode to() const { - if( ! back.empty() ) - return P.gr->target(back[back.size()-1]); - else if( ! P.empty() ) - return P.gr->target(P.edges[P.length()-1]); - else if( ! front.empty() ) - return P.gr->target(front[0]); - else - return INVALID; - } - - }; - - }; - - - - - - - - - - - /**********************************************************************/ - - - //! \brief A structure for representing undirected path in a graph. - //! - //! A structure for representing undirected path in a graph. Ie. this is - //! a path in a \e directed graph but the edges should not be directed - //! forward. - //! - //! \param Graph The graph type in which the path is. - //! \param DM DebugMode, defaults to DefaultDebugMode. - //! - //! In a sense, the path can be treated as a graph, for is has \c NodeIt - //! and \c EdgeIt with the same usage. These types converts to the \c Node - //! and \c Edge of the original graph. - //! - //! \todo Thoroughfully check all the range and consistency tests. - template - class UndirPath { - public: - /// Edge type of the underlying graph. - typedef typename Graph::Edge GraphEdge; - /// Node type of the underlying graph. - typedef typename Graph::Node GraphNode; - class NodeIt; - class EdgeIt; - - protected: - const Graph *gr; - typedef std::vector Container; - Container edges; - - public: - - /// \param _G The graph in which the path is. - /// - UndirPath(const Graph &_G) : gr(&_G) {} - - /// \brief Subpath constructor. - /// - /// Subpath defined by two nodes. - /// \warning It is an error if the two edges are not in order! - UndirPath(const UndirPath &P, const NodeIt &a, const NodeIt &b) { - if( DM::range_check && (!a.valid() || !b.valid) ) { - // FIXME: this check should be more elaborate... - fault("UndirPath, subpath ctor: invalid bounding nodes"); - } - gr = P.gr; - edges.insert(edges.end(), P.edges.begin()+a.idx, P.edges.begin()+b.idx); - } - - /// \brief Subpath constructor. - /// - /// Subpath defined by two edges. Contains edges in [a,b) - /// \warning It is an error if the two edges are not in order! - UndirPath(const UndirPath &P, const EdgeIt &a, const EdgeIt &b) { - if( DM::range_check && (!a.valid() || !b.valid) ) { - // FIXME: this check should be more elaborate... - fault("UndirPath, subpath ctor: invalid bounding nodes"); - } - gr = P.gr; - edges.insert(edges.end(), P.edges.begin()+a.idx, P.edges.begin()+b.idx); - } - - /// Length of the path. - size_t length() const { return edges.size(); } - /// Returns whether the path is empty. - bool empty() const { return edges.empty(); } - - /// Resets the path to an empty path. - void clear() { edges.clear(); } - - /// \brief Starting point of the path. - /// - /// Starting point of the path. - /// Returns INVALID if the path is empty. - GraphNode from() const { - return empty() ? INVALID : gr->source(edges[0]); - } - /// \brief End point of the path. - /// - /// End point of the path. - /// Returns INVALID if the path is empty. - GraphNode to() const { - return empty() ? INVALID : gr->target(edges[length()-1]); - } - - /// \brief Initializes node or edge iterator to point to the first - /// node or edge. - /// - /// \sa nth - template - It& first(It &i) const { return i=It(*this); } - - /// \brief Initializes node iterator to point to the node of a given index. - NodeIt& nth(NodeIt &i, int n) const { - if( DM::range_check && (n<0 || n>int(length())) ) - fault("UndirPath::nth: index out of range"); - return i=NodeIt(*this, n); - } - - /// \brief Initializes edge iterator to point to the edge of a given index. - EdgeIt& nth(EdgeIt &i, int n) const { - if( DM::range_check && (n<0 || n>=int(length())) ) - fault("UndirPath::nth: index out of range"); - return i=EdgeIt(*this, n); - } - - /// Checks validity of a node or edge iterator. - template - static - bool valid(const It &i) { return i.valid(); } - - /// Steps the given node or edge iterator. - template - static - It& next(It &e) { - if( DM::range_check && !e.valid() ) - fault("UndirPath::next() on invalid iterator"); - return ++e; - } - - /// \brief Returns node iterator pointing to the target node of the - /// given edge iterator. - NodeIt target(const EdgeIt& e) const { - if( DM::range_check && !e.valid() ) - fault("UndirPath::target() on invalid iterator"); - return NodeIt(*this, e.idx+1); - } - - /// \brief Returns node iterator pointing to the source node of the - /// given edge iterator. - NodeIt source(const EdgeIt& e) const { - if( DM::range_check && !e.valid() ) - fault("UndirPath::source() on invalid iterator"); - return NodeIt(*this, e.idx); - } - - - - /** - * \brief Iterator class to iterate on the edges of the paths - * - * \ingroup paths - * This class is used to iterate on the edges of the paths - * - * Of course it converts to Graph::Edge - * - * \todo Its interface differs from the standard edge iterator. - * Yes, it shouldn't. - */ - class EdgeIt { - friend class UndirPath; - - int idx; - const UndirPath *p; - public: - /// Default constructor - EdgeIt() {} - /// Invalid constructor - EdgeIt(Invalid) : idx(-1), p(0) {} - /// Constructor with starting point - EdgeIt(const UndirPath &_p, int _idx = 0) : - idx(_idx), p(&_p) { validate(); } - - ///Validity check - bool valid() const { return idx!=-1; } - - ///Conversion to Graph::Edge - operator GraphEdge () const { - return valid() ? p->edges[idx] : INVALID; - } - /// Next edge - EdgeIt& operator++() { ++idx; validate(); return *this; } - - /// Comparison operator - bool operator==(const EdgeIt& e) const { return idx==e.idx; } - /// Comparison operator - bool operator!=(const EdgeIt& e) const { return idx!=e.idx; } - /// Comparison operator - bool operator<(const EdgeIt& e) const { return idx= p->length() ) idx=-1; } - }; - - /** - * \brief Iterator class to iterate on the nodes of the paths - * - * \ingroup paths - * This class is used to iterate on the nodes of the paths - * - * Of course it converts to Graph::Node - * - * \todo Its interface differs from the standard node iterator. - * Yes, it shouldn't. - */ - class NodeIt { - friend class UndirPath; - - int idx; - const UndirPath *p; - public: - /// Default constructor - NodeIt() {} - /// Invalid constructor - NodeIt(Invalid) : idx(-1), p(0) {} - /// Constructor with starting point - NodeIt(const UndirPath &_p, int _idx = 0) : - idx(_idx), p(&_p) { validate(); } - - ///Validity check - bool valid() const { return idx!=-1; } - - ///Conversion to Graph::Node - operator const GraphNode& () const { - if(idx >= p->length()) - return p->to(); - else if(idx >= 0) - return p->gr->source(p->edges[idx]); - else - return INVALID; - } - /// Next node - NodeIt& operator++() { ++idx; validate(); return *this; } - - /// Comparison operator - bool operator==(const NodeIt& e) const { return idx==e.idx; } - /// Comparison operator - bool operator!=(const NodeIt& e) const { return idx!=e.idx; } - /// Comparison operator - bool operator<(const NodeIt& e) const { return idx p->length() ) idx=-1; } - }; - - friend class Builder; - - /** - * \brief Class to build paths - * - * \ingroup paths - * This class is used to fill a path with edges. - * - * You can push new edges to the front and to the back of the path in - * arbitrary order then you should commit these changes to the graph. - * - * Fundamentally, for most "Paths" (classes fulfilling the - * PathConcept) while the builder is active (after the first modifying - * operation and until the commit()) the original Path is in a - * "transitional" state (operations ot it have undefined result). But - * in the case of UndirPath the original path is unchanged until the - * commit. However we don't recomend that you use this feature. - */ - class Builder { - UndirPath &P; - Container front, back; - - public: - ///\param _P the path you want to fill in. - /// - Builder(UndirPath &_P) : P(_P) {} - - /// Sets the starting node of the path. - - /// Sets the starting node of the path. Edge added to the path - /// afterwards have to be incident to this node. - /// It should be called iff the path is empty and before any call to - /// \ref pushFront() or \ref pushBack() - void setStartNode(const GraphNode &) {} - - ///Push a new edge to the front of the path - - ///Push a new edge to the front of the path. - ///\sa setStartNode - void pushFront(const GraphEdge& e) { - if( DM::consistensy_check && !empty() && P.gr->target(e)!=from() ) { - fault("UndirPath::Builder::pushFront: nonincident edge"); - } - front.push_back(e); - } - - ///Push a new edge to the back of the path - - ///Push a new edge to the back of the path. - ///\sa setStartNode - void pushBack(const GraphEdge& e) { - if( DM::consistensy_check && !empty() && P.gr->source(e)!=to() ) { - fault("UndirPath::Builder::pushBack: nonincident edge"); - } - back.push_back(e); - } - - ///Commit the changes to the path. - void commit() { - if( !(front.empty() && back.empty()) ) { - Container tmp; - tmp.reserve(front.size()+back.size()+P.length()); - tmp.insert(tmp.end(), front.rbegin(), front.rend()); - tmp.insert(tmp.end(), P.edges.begin(), P.edges.end()); - tmp.insert(tmp.end(), back.begin(), back.end()); - P.edges.swap(tmp); - front.clear(); - back.clear(); - } - } - - // FIXME: Hmm, pontosan hogy is kene ezt csinalni? - // Hogy kenyelmes egy ilyet hasznalni? - - ///Reserve storage for the builder in advance. - - ///If you know an reasonable upper bound of the number of the edges - ///to add, using this function you can speed up the building. - void reserve(size_t r) { - front.reserve(r); - back.reserve(r); - } - - private: - bool empty() { - return front.empty() && back.empty() && P.empty(); - } - - GraphNode from() const { - if( ! front.empty() ) - return P.gr->source(front[front.size()-1]); - else if( ! P.empty() ) - return P.gr->source(P.edges[0]); - else if( ! back.empty() ) - return P.gr->source(back[0]); - else - return INVALID; - } - GraphNode to() const { - if( ! back.empty() ) - return P.gr->target(back[back.size()-1]); - else if( ! P.empty() ) - return P.gr->target(P.edges[P.length()-1]); - else if( ! front.empty() ) - return P.gr->target(front[0]); - else - return INVALID; - } - - }; - - }; - - - - - - - - - - - /**********************************************************************/ - - - /* Ennek az allocatorosdinak sokkal jobban utana kene nezni a hasznalata - elott. Eleg bonyinak nez ki, ahogyan azokat az STL-ben hasznaljak. */ - - template - class DynamicPath { - - public: - typedef typename Graph::Edge GraphEdge; - typedef typename Graph::Node GraphNode; - class NodeIt; - class EdgeIt; - - protected: - Graph& G; - // FIXME: ehelyett eleg lenne tarolni ket boolt: a ket szelso el - // iranyitasat: - GraphNode _first, _last; - typedef std::deque Container; - Container edges; - - public: - - DynamicPath(Graph &_G) : G(_G), _first(INVALID), _last(INVALID) {} - - /// Subpath defined by two nodes. - /// Nodes may be in reversed order, then - /// we contstruct the reversed path. - DynamicPath(const DynamicPath &P, const NodeIt &a, const NodeIt &b); - /// Subpath defined by two edges. Contains edges in [a,b) - /// It is an error if the two edges are not in order! - DynamicPath(const DynamicPath &P, const EdgeIt &a, const EdgeIt &b); - - size_t length() const { return edges.size(); } - GraphNode from() const { return _first; } - GraphNode to() const { return _last; } - - NodeIt& first(NodeIt &n) const { return nth(n, 0); } - EdgeIt& first(EdgeIt &e) const { return nth(e, 0); } - template - It first() const { - It e; - first(e); - return e; - } - - NodeIt& nth(NodeIt &, size_t) const; - EdgeIt& nth(EdgeIt &, size_t) const; - template - It nth(size_t n) const { - It e; - nth(e, n); - return e; - } - - bool valid(const NodeIt &n) const { return n.idx <= length(); } - bool valid(const EdgeIt &e) const { return e.it < edges.end(); } - - bool isForward(const EdgeIt &e) const { return e.forw; } - - /// index of a node on the path. Returns length+2 for the invalid NodeIt - int index(const NodeIt &n) const { return n.idx; } - /// index of an edge on the path. Returns length+1 for the invalid EdgeIt - int index(const EdgeIt &e) const { return e.it - edges.begin(); } - - EdgeIt& next(EdgeIt &e) const; - NodeIt& next(NodeIt &n) const; - template - It getNext(It it) const { - It tmp(it); return next(tmp); - } - - // A path is constructed using the following four functions. - // They return false if the requested operation is inconsistent - // with the path constructed so far. - // If your path has only one edge you MUST set either "from" or "to"! - // So you probably SHOULD call it in any case to be safe (and check the - // returned value to check if your path is consistent with your idea). - bool pushFront(const GraphEdge &e); - bool pushBack(const GraphEdge &e); - bool setFrom(const GraphNode &n); - bool setTo(const GraphNode &n); - - // WARNING: these two functions return the target/source of an edge with - // respect to the direction of the path! - // So G.target(P.graphEdge(e)) == P.graphNode(P.target(e)) holds only if - // P.forward(e) is true (or the edge is a loop)! - NodeIt target(const EdgeIt& e) const; - NodeIt source(const EdgeIt& e) const; - - // FIXME: ezeknek valami jobb nev kellene!!! - GraphEdge graphEdge(const EdgeIt& e) const; - GraphNode graphNode(const NodeIt& n) const; - - - /*** Iterator classes ***/ - class EdgeIt { - friend class DynamicPath; - - typename Container::const_iterator it; - bool forw; - public: - // FIXME: jarna neki ilyen is... - // EdgeIt(Invalid); - - bool forward() const { return forw; } - - bool operator==(const EdgeIt& e) const { return it==e.it; } - bool operator!=(const EdgeIt& e) const { return it!=e.it; } - bool operator<(const EdgeIt& e) const { return it - typename DynamicPath::EdgeIt& - DynamicPath::next(DynamicPath::EdgeIt &e) const { - if( e.it == edges.end() ) - return e; - - GraphNode common_node = ( e.forw ? G.target(*e.it) : G.source(*e.it) ); - ++e.it; - - // Invalid edgeit is always forward :) - if( e.it == edges.end() ) { - e.forw = true; - return e; - } - - e.forw = ( G.source(*e.it) == common_node ); - return e; - } - - template - typename DynamicPath::NodeIt& DynamicPath::next(NodeIt &n) const { - if( n.idx >= length() ) { - // FIXME: invalid - n.idx = length()+1; - return n; - } - - - GraphNode next_node = ( n.source ? G.target(edges[n.idx]) : - G.source(edges[n.idx]) ); - ++n.idx; - if( n.idx < length() ) { - n.source = ( next_node == G.source(edges[n.idx]) ); - } - else { - n.source = true; - } - - return n; - } - - template - bool DynamicPath::edgeIncident(const GraphEdge &e, const GraphNode &a, - GraphNode &b) { - if( G.source(e) == a ) { - b=G.target(e); - return true; - } - if( G.target(e) == a ) { - b=G.source(e); - return true; - } - return false; - } - - template - bool DynamicPath::connectTwoEdges(const GraphEdge &e, - const GraphEdge &f) { - if( edgeIncident(f, G.source(e), _last) ) { - _first = G.target(e); - return true; - } - if( edgeIncident(f, G.target(e), _last) ) { - _first = G.source(e); - return true; - } - return false; - } - - template - bool DynamicPath::pushFront(const GraphEdge &e) { - if( G.valid(_first) ) { - if( edgeIncident(e, _first, _first) ) { - edges.push_front(e); - return true; - } - else - return false; - } - else if( length() < 1 || connectTwoEdges(e, edges[0]) ) { - edges.push_front(e); - return true; - } - else - return false; - } - - template - bool DynamicPath::pushBack(const GraphEdge &e) { - if( G.valid(_last) ) { - if( edgeIncident(e, _last, _last) ) { - edges.push_back(e); - return true; - } - else - return false; - } - else if( length() < 1 || connectTwoEdges(edges[0], e) ) { - edges.push_back(e); - return true; - } - else - return false; - } - - - template - bool DynamicPath::setFrom(const GraphNode &n) { - if( G.valid(_first) ) { - return _first == n; - } - else { - if( length() > 0) { - if( edgeIncident(edges[0], n, _last) ) { - _first = n; - return true; - } - else return false; - } - else { - _first = _last = n; - return true; - } - } - } - - template - bool DynamicPath::setTo(const GraphNode &n) { - if( G.valid(_last) ) { - return _last == n; - } - else { - if( length() > 0) { - if( edgeIncident(edges[0], n, _first) ) { - _last = n; - return true; - } - else return false; - } - else { - _first = _last = n; - return true; - } - } - } - - - template - typename DynamicPath::NodeIt - DynamicPath::source(const EdgeIt& e) const { - NodeIt n; - - if( e.it == edges.end() ) { - // FIXME: invalid-> invalid - n.idx = length() + 1; - n.source = true; - return n; - } - - n.idx = e.it-edges.begin(); - n.source = e.forw; - return n; - } - - template - typename DynamicPath::NodeIt - DynamicPath::target(const EdgeIt& e) const { - if( e.it == edges.end()-1 ) { - return _last; - } - - EdgeIt next_edge = e; - next(next_edge); - return source(next_edge); - } - - template - typename DynamicPath::GraphEdge - DynamicPath::graphEdge(const EdgeIt& e) const { - if( e.it != edges.end() ) { - return *e.it; - } - else { - return INVALID; - } - } - - template - typename DynamicPath::GraphNode - DynamicPath::graphNode(const NodeIt& n) const { - if( n.idx < length() ) { - return n.source ? G.source(edges[n.idx]) : G.target(edges[n.idx]); - } - else if( n.idx == length() ) { - return _last; - } - else { - return INVALID; - } - } - - template - typename DynamicPath::EdgeIt& - DynamicPath::nth(EdgeIt &e, size_t k) const { - if( k>=length() ) { - // FIXME: invalid EdgeIt - e.it = edges.end(); - e.forw = true; - return e; - } - - e.it = edges.begin()+k; - if(k==0) { - e.forw = ( G.source(*e.it) == _first ); - } - else { - e.forw = ( G.source(*e.it) == G.source(edges[k-1]) || - G.source(*e.it) == G.target(edges[k-1]) ); - } - return e; - } - - template - typename DynamicPath::NodeIt& - DynamicPath::nth(NodeIt &n, size_t k) const { - if( k>length() ) { - // FIXME: invalid NodeIt - n.idx = length()+1; - n.source = true; - return n; - } - if( k==length() ) { - n.idx = length(); - n.source = true; - return n; - } - n = source(nth(k)); - return n; - } - - // Reszut konstruktorok: - - - template - DynamicPath::DynamicPath(const DynamicPath &P, const EdgeIt &a, - const EdgeIt &b) : - G(P.G), edges(a.it, b.it) // WARNING: if b.it < a.it this will blow up! - { - if( G.valid(P._first) && a.it < P.edges.end() ) { - _first = ( a.forw ? G.source(*a.it) : G.target(*a.it) ); - if( b.it < P.edges.end() ) { - _last = ( b.forw ? G.source(*b.it) : G.target(*b.it) ); - } - else { - _last = P._last; - } - } - } - - template - DynamicPath::DynamicPath(const DynamicPath &P, const NodeIt &a, - const NodeIt &b) : G(P.G) - { - if( !P.valid(a) || !P.valid(b) ) - return; - - int ai = a.idx, bi = b.idx; - if( bi - -namespace lemon { - namespace concept { - /// \addtogroup concept - /// @{ - - - //! \brief A skeleton structure for representing directed paths in a graph. - //! - //! A skeleton structure for representing directed paths in a graph. - //! \param GR The graph type in which the path is. - //! - //! In a sense, the path can be treated as a graph, for is has \c NodeIt - //! and \c EdgeIt with the same usage. These types converts to the \c Node - //! and \c Edge of the original graph. - template - class Path { - public: - - /// Type of the underlying graph. - typedef /*typename*/ GR Graph; - /// Edge type of the underlying graph. - typedef typename Graph::Edge GraphEdge; - /// Node type of the underlying graph. - typedef typename Graph::Node GraphNode; - class NodeIt; - class EdgeIt; - - /// \param _G The graph in which the path is. - /// - Path(const Graph &_G) {} - - /// Length of the path. - size_t length() const {} - /// Returns whether the path is empty. - bool empty() const {} - - /// Resets the path to an empty path. - void clear() {} - - /// \brief Starting point of the path. - /// - /// Starting point of the path. - /// Returns INVALID if the path is empty. - GraphNode target() const {} - /// \brief End point of the path. - /// - /// End point of the path. - /// Returns INVALID if the path is empty. - GraphNode source() const {} - - /// \brief First NodeIt/EdgeIt. - /// - /// Initializes node or edge iterator to point to the first - /// node or edge. - template - It& first(It &i) const { return i=It(*this); } - - /// \brief The target of an edge. - /// - /// Returns node iterator pointing to the target node of the - /// given edge iterator. - NodeIt target(const EdgeIt& e) const {} - - /// \brief The source of an edge. - /// - /// Returns node iterator pointing to the source node of the - /// given edge iterator. - NodeIt source(const EdgeIt& e) const {} - - - /* Iterator classes */ - - /** - * \brief Iterator class to iterate on the edges of the paths - * - * \ingroup concept - * This class is used to iterate on the edges of the paths - * - * Of course it converts to Graph::Edge - * - */ - class EdgeIt { - public: - /// Default constructor - EdgeIt() {} - /// Invalid constructor - EdgeIt(Invalid) {} - /// Constructor with starting point - EdgeIt(const Path &_p) {} - - operator GraphEdge () const {} - - /// Next edge - EdgeIt& operator++() {} - - /// Comparison operator - bool operator==(const EdgeIt& e) const {} - /// Comparison operator - bool operator!=(const EdgeIt& e) const {} -// /// Comparison operator -// /// \todo It is not clear what is the "natural" ordering. -// bool operator<(const EdgeIt& e) const {} - - }; - - /** - * \brief Iterator class to iterate on the nodes of the paths - * - * \ingroup concept - * This class is used to iterate on the nodes of the paths - * - * Of course it converts to Graph::Node. - * - */ - class NodeIt { - public: - /// Default constructor - NodeIt() {} - /// Invalid constructor - NodeIt(Invalid) {} - /// Constructor with starting point - NodeIt(const Path &_p) {} - - ///Conversion to Graph::Node - operator const GraphNode& () const {} - /// Next node - NodeIt& operator++() {} - - /// Comparison operator - bool operator==(const NodeIt& e) const {} - /// Comparison operator - bool operator!=(const NodeIt& e) const {} -// /// Comparison operator -// /// \todo It is not clear what is the "natural" ordering. -// bool operator<(const NodeIt& e) const {} - - }; - - friend class Builder; - - /** - * \brief Class to build paths - * - * \ingroup concept - * This class is used to fill a path with edges. - * - * You can push new edges to the front and to the back of the path in - * arbitrary order then you should commit these changes to the graph. - * - * While the builder is active (after the first modifying - * operation and until the call of \ref commit()) - * the underlining Path is in a - * "transitional" state (operations on it have undefined result). - */ - class Builder { - public: - - Path &P; - - ///\param _P the path you want to fill in. - /// - Builder(Path &_P) : P(_P) {} - - /// Sets the starting node of the path. - - /// Sets the starting node of the path. Edge added to the path - /// afterwards have to be incident to this node. - /// You \em must start building an empry path with this functions. - /// (And you \em must \em not use it later). - /// \sa pushFront() - /// \sa pushBack() - void setStartNode(const GraphNode &) {} - - ///Push a new edge to the front of the path - - ///Push a new edge to the front of the path. - ///If the path is empty, you \em must call \ref setStartNode() before - ///the first use of \ref pushFront(). - void pushFront(const GraphEdge& e) {} - - ///Push a new edge to the back of the path - - ///Push a new edge to the back of the path. - ///If the path is empty, you \em must call \ref setStartNode() before - ///the first use of \ref pushBack(). - void pushBack(const GraphEdge& e) {} - - ///Commit the changes to the path. - void commit() {} - - ///Reserve (front) storage for the builder in advance. - - ///If you know an reasonable upper bound of the number of the edges - ///to add to the front of the path, - ///using this function you may speed up the building. - void reserveFront(size_t r) {} - ///Reserve (back) storage for the builder in advance. - - ///If you know an reasonable upper bound of the number of the edges - ///to add to the back of the path, - ///using this function you may speed up the building. - void reserveBack(size_t r) {} - }; - }; - - ///@} - } - -} // namespace lemon - -#endif // LEMON_PATH_H diff -r ee5959aa4410 -r c280de819a73 src/work/peter/path/path_test.cc --- a/src/work/peter/path/path_test.cc Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,182 +0,0 @@ -#include -#include -//#include -#include -#include - -using namespace std; -using namespace lemon; -using namespace concept; - -bool passed = true; - -void check(bool rc) { - passed = passed && rc; - if(!rc) { - cout << "Test failed!" << endl; - } -} - -#ifdef DEBUG -const bool debug = true; -#else -const bool debug = false; -#endif - - -int main() { - - try { - - typedef ListGraph::Node Node; - typedef ListGraph::Edge Edge; - - ListGraph G; - - Node s=G.addNode(); - Node v1=G.addNode(); - Node v2=G.addNode(); - Node v3=G.addNode(); - Node v4=G.addNode(); - Node t=G.addNode(); - - Edge e1 = G.addEdge(s, v1); - Edge e2 = G.addEdge(s, v2); - Edge e3 = G.addEdge(v1, v2); - Edge e4 = G.addEdge(v2, v1); - Edge e5 = G.addEdge(v1, v3); - Edge e6 = G.addEdge(v3, v2); - Edge e7 = G.addEdge(v2, v4); - Edge e8 = G.addEdge(v4, v3); - Edge e9 = G.addEdge(v3, t); - Edge e10 = G.addEdge(v4, t); - - bool rc; - - { - cout << "\n\n\nDirPath tesztelese...\n"; - - - cout << "Ures path letrehozasa" << endl; - //typedef DirPath DPath; - typedef Path DPath; - DPath P(G); - - cout << "P.length() == " << P.length() << endl; - check(P.length() == 0); - -#ifdef SKELETON - cout << "P.source() valid? " << (P.source()!=INVALID) << endl; - check(! (P.source()!=INVALID)); -#else - cout << "P.source() valid? " << (P.from()!=INVALID) << endl; - check(! (P.to()!=INVALID)); -#endif - { - cout << "Builder objektum letrehozasa" << endl; - DPath::Builder B(P); - - cout << "Hozzaadunk az elejehez ket elet..." << endl; - B.pushFront(e6); - B.pushFront(e5); - cout << "P.length() == " << P.length() << endl; - check(P.length() == 0); - - cout << "Commitolunk..." << endl; - B.commit(); - - cout << "P.length() == " << P.length() << endl; - check(P.length() == 2); - -#ifdef SKELETON - cout << "P.source() valid? " << (P.source()!=INVALID) << endl; - check(P.source()!=INVALID); - cout << "P.source()==v1 ? " << (P.source()==v1) << endl; - check(P.source() == v1); -#else - cout << "P.source() valid? " << (P.from()!=INVALID) << endl; - check(P.from()!=INVALID); - cout << "P.source()==v1 ? " << (P.from()==v1) << endl; - check(P.from() == v1); -#endif - - // Na ja, ez igy nem igazi, mindket esetet le kene tesztelni, - // de legalabb valami: -#ifdef DEBUG - cout << "Hozzaadunk az elejehez egy nem illeszkedo elet..." << endl; - rc = false; - try { - B.pushFront(e3); - } - catch(const Exception &e) { - cout << "E: " << e.what() << endl; - rc = true; - } - check(rc); -#endif - - cout << "Hozzaadunk a vegehez ket elet..." << endl; - B.pushBack(e7); - B.pushBack(e8); - cout << "P.length() == " << P.length() << endl; - check(P.length() == 2); - - cout << "Es commitolunk...\n"; - B.commit(); - } - cout << "P.length() == " << P.length() << endl; - check(P.length() == 4); - -#ifdef SKELETON - cout << "P.target()==v3 ? " << (P.target()==v3) << endl; - check(P.target() == v3); -#else - cout << "P.target()==v3 ? " << (P.to()==v3) << endl; - check(P.to() == v3); -#endif - - cout << "Vegigiteralunk az eleken." << endl; - typedef DPath::NodeIt NodeIt; - typedef DPath::EdgeIt EdgeIt; - EdgeIt e; - int i=1; - for(P.first(e); e!=INVALID; ++e, ++i) { - cout << i << ". el: " < -#include - -#include -#include -#include -#include -#include -#include - -using namespace lemon; - -typedef ListGraph Graph; -typedef xy Coordinates; -typedef Graph::NodeMap CoordinatesMap; -typedef Graph::Node Node; -typedef Graph::EdgeIt EdgeIt; -typedef Graph::NodeIt NodeIt; - -class CoordReaderMap: public MapBase -{ - CoordinatesMap & cm; - char xoy; - -public: - CoordReaderMap(char xory, CoordinatesMap & coordmap): cm(coordmap) - { - switch(xory) - { - case 'x': - case 'y': - xoy=xory; - break; - default: - throw UninitializedParameter() ; - } - } - - void set(Node node, double coord) - { - switch(xoy) - { - case 'x': - cm[node].x=coord; - break; - case 'y': - cm[node].y=coord; - break; - default: - throw UninitializedParameter() ; - } - } -}; - -int main(void) -{ - Graph g; - CoordinatesMap cm(g); - - CoordReaderMap xreader('x',cm); - CoordReaderMap yreader('y',cm); - - std::ifstream is("graphocska.lemon"); - - GraphReader reader(is, g); - reader.addNodeMap("coordinates_x", xreader); - reader.addNodeMap("coordinates_y", yreader); - reader.run(); - std::cout << "Megvagyok" << std::endl; - - for (NodeIt i(g); i!=INVALID; ++i) - std::cout << " " << g.id(i) << " " << cm[i]; - std::cout << std::endl; - - return 0; -} diff -r ee5959aa4410 -r c280de819a73 src/work/sage_graph.h --- a/src/work/sage_graph.h Sun Apr 17 18:57:22 2005 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,541 +0,0 @@ -// -*- c++ -*- -#ifndef LEMON_SAGE_GRAPH_H -#define LEMON_SAGE_GRAPH_H - -#include -#include - -#include - -namespace lemon { - -// template -// int count(It it) { -// int i=0; -// for( ; it.valid(); ++it) { ++i; } -// return i; -// } - - class SageGraph { - struct node_item; - struct edge_item; - public: - class Node; - class NodeIt; - class Edge; - class EdgeIt; - class OutEdgeIt; - class InEdgeIt; - class SymEdgeIt; - template class NodeMap; - template class EdgeMap; -// private: - template friend class NodeMap; - template friend class EdgeMap; - - template - class NodeMap { - const SageGraph& G; - std::vector container; - public: - typedef T Value; - typedef Node Key; - NodeMap(const SageGraph& _G) : G(_G), container(G.node_id) { } - NodeMap(const SageGraph& _G, T a) : - G(_G), container(G.node_id, a) { } - void set(Node n, T a) { container[/*G.id(n)*/n.node->id]=a; } -// T get(Node n) const { return container[/*G.id(n)*/n.node->id]; } - typename std::vector::reference operator[](Node n) { - return container[/*G.id(n)*/n.node->id]; } - typename std::vector::const_reference operator[](Node n) const { - return container[/*G.id(n)*/n.node->id]; - } - void update() { container.resize(G.node_id); } - void update(T a) { container.resize(G.node_id, a); } - }; - - template - class EdgeMap { - const SageGraph& G; - std::vector container; - public: - typedef T Value; - typedef Edge Key; - EdgeMap(const SageGraph& _G) : G(_G), container(G.edge_id) { } - EdgeMap(const SageGraph& _G, T a) : - G(_G), container(G.edge_id, a) { } - void set(Edge e, T a) { container[/*G.id(e)*/e.edge->id]=a; } -// T get(Edge e) const { return container[/*G.id(e)*/e.edge->id]; } - typename std::vector::reference operator[](Edge e) { - return container[/*G.id(e)*/e.edge->id]; } - typename std::vector::const_reference operator[](Edge e) const { - return container[/*G.id(e)*/e.edge->id]; - } - void update() { container.resize(G.edge_id); } - void update(T a) { container.resize(G.edge_id, a); } - }; - - private: - int node_id; - int edge_id; - int _node_num; - int _edge_num; - - node_item* _first_node; - node_item* _last_node; - - struct node_item { - int id; - edge_item* _first_out_edge; - edge_item* _last_out_edge; - edge_item* _first_in_edge; - edge_item* _last_in_edge; - node_item* _next_node; - node_item* _prev_node; - }; - - struct edge_item { - int id; - node_item* _source; - node_item* _target; - edge_item* _next_out; - edge_item* _prev_out; - edge_item* _next_in; - edge_item* _prev_in; - }; - - node_item* _add_node() { - node_item* p=new node_item; - p->id=node_id++; - p->_first_out_edge=0; - p->_last_out_edge=0; - p->_first_in_edge=0; - p->_last_in_edge=0; - p->_prev_node=_last_node; - p->_next_node=0; - if (_last_node) _last_node->_next_node=p; - _last_node=p; - if (!_first_node) _first_node=p; - - ++_node_num; - return p; - } - - edge_item* _add_edge(node_item* _source, node_item* _target) { - edge_item* e=new edge_item; - e->id=edge_id++; - e->_source=_source; - e->_target=_target; - - e->_prev_out=_source->_last_out_edge; - if (_source->_last_out_edge) (_source->_last_out_edge)->_next_out=e; - _source->_last_out_edge=e; - if (!_source->_first_out_edge) _source->_first_out_edge=e; - e->_next_out=0; - - e->_prev_in=_target->_last_in_edge; - if (_target->_last_in_edge) (_target->_last_in_edge)->_next_in=e; - _target->_last_in_edge=e; - if (!_target->_first_in_edge) { _target->_first_in_edge=e; } - e->_next_in=0; - - ++_edge_num; - return e; - } - - //deletes a node which has no out edge and no in edge - void _delete_node(node_item* v) { - if (v->_next_node) (v->_next_node)->_prev_node=v->_prev_node; else - _last_node=v->_prev_node; - if (v->_prev_node) (v->_prev_node)->_next_node=v->_next_node; else - _first_node=v->_next_node; - - delete v; - --_node_num; - } - - void _delete_edge(edge_item* e) { - if (e->_next_out) (e->_next_out)->_prev_out=e->_prev_out; else - (e->_source)->_last_out_edge=e->_prev_out; - if (e->_prev_out) (e->_prev_out)->_next_out=e->_next_out; else - (e->_source)->_first_out_edge=e->_next_out; - if (e->_next_in) (e->_next_in)->_prev_in=e->_prev_in; else - (e->_target)->_last_in_edge=e->_prev_in; - if (e->_prev_in) (e->_prev_in)->_next_in=e->_next_in; else - (e->_target)->_first_in_edge=e->_next_in; - - delete e; - --_edge_num; - } - - void _set_source(edge_item* e, node_item* _source) { - if (e->_next_out) (e->_next_out)->_prev_out=e->_prev_out; else - (e->_source)->_last_out_edge=e->_prev_out; - if (e->_prev_out) (e->_prev_out)->_next_out=e->_next_out; else - (e->_source)->_first_out_edge=e->_next_out; - - e->_source=_source; - - e->_prev_out=_source->_last_out_edge; - if (_source->_last_out_edge) (_source->_last_out_edge)->_next_out=e; - _source->_last_out_edge=e; - if (!_source->_first_out_edge) _source->_first_out_edge=e; - e->_next_out=0; - } - - void _set_target(edge_item* e, node_item* _target) { - if (e->_next_in) (e->_next_in)->_prev_in=e->_prev_in; else - (e->_target)->_last_in_edge=e->_prev_in; - if (e->_prev_in) (e->_prev_in)->_next_in=e->_next_in; else - (e->_target)->_first_in_edge=e->_next_in; - - e->_target=_target; - - e->_prev_in=_target->_last_in_edge; - if (_target->_last_in_edge) (_target->_last_in_edge)->_next_in=e; - _target->_last_in_edge=e; - if (!_target->_first_in_edge) { _target->_first_in_edge=e; } - e->_next_in=0; - } - - public: - - /* default constructor */ - - SageGraph() : node_id(0), edge_id(0), _node_num(0), _edge_num(0), _first_node(0), _last_node(0) { } - - ~SageGraph() { - NodeIt n; - while (this->valid(first(n))) erase(n); - //while (first().valid()) erase(first()); - } - - int nodeNum() const { return _node_num; } - int edgeNum() const { return _edge_num; } - - /* functions to construct iterators from the graph, or from each other */ - - //NodeIt firstNode() const { return NodeIt(*this); } - //EdgeIt firstEdge() const { return EdgeIt(*this); } - - //OutEdgeIt firstOutEdge(const Node v) const { return OutEdgeIt(v); } - //InEdgeIt firstInEdge(const Node v) const { return InEdgeIt(v); } - //SymEdgeIt firstSymEdge(const Node v) const { return SymEdgeIt(v); } - Node source(Edge e) const { return e.sourceNode(); } - Node target(Edge e) const { return e.targetNode(); } - - Node aNode(const OutEdgeIt& e) const { return e.aNode(); } - Node aNode(const InEdgeIt& e) const { return e.aNode(); } - Node aNode(const SymEdgeIt& e) const { return e.aNode(); } - - Node bNode(const OutEdgeIt& e) const { return e.bNode(); } - Node bNode(const InEdgeIt& e) const { return e.bNode(); } - Node bNode(const SymEdgeIt& e) const { return e.bNode(); } - - //Node invalid_node() { return Node(); } - //Edge invalid_edge() { return Edge(); } - //OutEdgeIt invalid_out_edge() { return OutEdgeIt(); } - //InEdgeIt invalid_in_edge() { return InEdgeIt(); } - //SymEdgeIt invalid_sym_edge() { return SymEdgeIt(); } - - /* same methods in other style */ - /* for experimental purpose */ - - NodeIt& first(NodeIt& v) const { - v=NodeIt(*this); return v; } - EdgeIt& first(EdgeIt& e) const { - e=EdgeIt(*this); return e; } - OutEdgeIt& first(OutEdgeIt& e, Node v) const { - e=OutEdgeIt(*this, v); return e; } - InEdgeIt& first(InEdgeIt& e, Node v) const { - e=InEdgeIt(*this, v); return e; } - SymEdgeIt& first(SymEdgeIt& e, Node v) const { - e=SymEdgeIt(*this, v); return e; } - //void getSource(Node& n, const Edge& e) const { n=source(e); } - //void getTarget(Node& n, const Edge& e) const { n=target(e); } - - //void getANode(Node& n, const OutEdgeIt& e) const { n=e.aNode(); } - //void getANode(Node& n, const InEdgeIt& e) const { n=e.aNode(); } - //void getANode(Node& n, const SymEdgeIt& e) const { n=e.aNode(); } - //void getBNode(Node& n, const OutEdgeIt& e) const { n=e.bNode(); } - //void getBNode(Node& n, const InEdgeIt& e) const { n=e.bNode(); } - //void getBNode(Node& n, const SymEdgeIt& e) const { n=e.bNode(); } - //void get_invalid(Node& n) { n=Node(); } - //void get_invalid(Edge& e) { e=Edge(); } - //void get_invalid(OutEdgeIt& e) { e=OutEdgeIt(); } - //void get_invalid(InEdgeIt& e) { e=InEdgeIt(); } - //void get_invalid(SymEdgeIt& e) { e=SymEdgeIt(); } - -// template< typename It > -// It first() const { -// It e; -// first(e); -// return e; -// } - -// template< typename It > -// It first(Node v) const { -// It e; -// first(e, v); -// return e; -// } - - bool valid(Node n) const { return n.valid(); } - bool valid(Edge e) const { return e.valid(); } - -// template It getNext(It it) const { -// It tmp(it); next(tmp); return tmp; } -// NodeIt& next(NodeIt& it) const { return ++it; } -// EdgeIt& next(EdgeIt& it) const { return ++it; } -// OutEdgeIt& next(OutEdgeIt& it) const { return ++it; } -// InEdgeIt& next(InEdgeIt& it) const { return ++it; } -// SymEdgeIt& next(SymEdgeIt& it) const { return ++it; } -// template It& next(It& it) const { return ++it; } - template It& next(It& it) const { ++it; return it; } - - - /* for getting id's of graph objects */ - /* these are important for the implementation of property vectors */ - - int id(Node v) const { return v.node->id; } - int id(Edge e) const { return e.edge->id; } - - /* adding nodes and edges */ - - Node addNode() { return Node(_add_node()); } - Edge addEdge(Node u, Node v) { - return Edge(_add_edge(u.node, v.node)); - } - - void erase(Node i) { - { - OutEdgeIt e; - while (this->valid(first(e, i))) erase(e); - } - { - InEdgeIt e; - while (this->valid(first(e, i))) erase(e); - } - //while (first(i).valid()) erase(first(i)); - //while (first(i).valid()) erase(first(i)); - _delete_node(i.node); - } - - void erase(Edge e) { _delete_edge(e.edge); } - - void clear() { - NodeIt e; - while (this->valid(first(e))) erase(e); - //while (first().valid()) erase(first()); - } - - void setSource(Edge e, Node source) { - _set_source(e.edge, source.node); - } - - void setTarget(Edge e, Node target) { - _set_target(e.edge, target.node); - } - - /* stream operations, for testing purpose */ - -// friend std::ostream& operator<<(std::ostream& os, const Node& i) { -// if (i.valid()) -// os << i.node->id; -// else -// os << "invalid"; -// return os; -// } -// friend std::ostream& operator<<(std::ostream& os, const Edge& i) { -// if (i.valid()) -// os << "(" << i.edge->_source->id << "--" << i.edge->id << "->" << i.edge->_target->id << ")"; -// else -// os << "invalid"; -// return os; -// } - - class Node { - friend class SageGraph; - template friend class NodeMap; - - friend class Edge; - friend class OutEdgeIt; - friend class InEdgeIt; - friend class SymEdgeIt; - //public: //FIXME: It is required by op= of NodeIt - protected: - node_item* node; - protected: - friend int SageGraph::id(Node v) const; - public: - Node() /*: node(0)*/ { } - Node(const Invalid&) : node(0) { } - protected: - Node(node_item* _node) : node(_node) { } - bool valid() const { return (node); } - public: - //void makeInvalid() { node=0; } - friend bool operator==(Node u, Node v) { return v.node==u.node; } - friend bool operator!=(Node u, Node v) { return v.node!=u.node; } - friend std::ostream& operator<<(std::ostream& os, const Node& i); - }; - - class NodeIt : public Node { - friend class SageGraph; - //protected: - public: //for everybody but marci - NodeIt(const SageGraph& G) : Node(G._first_node) { } - NodeIt(const SageGraph& G, const Node& n) : Node(n) { } - public: - NodeIt() : Node() { } - NodeIt(const Invalid& i) : Node(i) { } - protected: - NodeIt(node_item* v) : Node(v) { } - public: - NodeIt& operator++() { node=node->_next_node; return *this; } - //FIXME:: - // NodeIt& operator=(const Node& e) - // { node=e.node; return *this; } - }; - - class Edge { - friend class SageGraph; - template friend class EdgeMap; - - friend class Node; - friend class NodeIt; - protected: - edge_item* edge; - friend int SageGraph::id(Edge e) const; - public: - Edge() /*: edge(0)*/ { } - Edge(const Invalid&) : edge(0) { } - //Edge() { } - protected: - Edge(edge_item* _edge) : edge(_edge) { } - bool valid() const { return (edge); } - public: - //void makeInvalid() { edge=0; } - friend bool operator==(Edge u, Edge v) { return v.edge==u.edge; } - friend bool operator!=(Edge u, Edge v) { return v.edge!=u.edge; } - protected: - Node sourceNode() const { return Node(edge->_source); } - Node targetNode() const { return Node(edge->_target); } - public: - friend std::ostream& operator<<(std::ostream& os, const Edge& i); - }; - - class EdgeIt : public Edge { - friend class SageGraph; - public: - EdgeIt() : Edge() { } - EdgeIt(const Invalid& i) : Edge(i) { } - EdgeIt(const SageGraph& G) { - node_item* v=G._first_node; - if (v) edge=v->_first_out_edge; else edge=0; - while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; } - } - EdgeIt(const SageGraph& G, const Edge& e) : Edge(e) { } -// protected: -// EdgeIt(edge_item* _e) : Edge(_e) { } - public: - EdgeIt& operator++() { - node_item* v=edge->_source; - edge=edge->_next_out; - while (v && !edge) { v=v->_next_node; if (v) edge=v->_first_out_edge; } - return *this; - } - }; - - class OutEdgeIt : public Edge { - friend class SageGraph; - public: - OutEdgeIt() : Edge() { } - OutEdgeIt(const Invalid& i) : Edge(i) { } - OutEdgeIt(const SageGraph&, Node _v) : Edge(_v.node->_first_out_edge) { } - OutEdgeIt(const SageGraph&, const Edge& e) : Edge(e) { } - OutEdgeIt& operator++() { edge=edge->_next_out; return *this; } - protected: - Node aNode() const { return Node(edge->_source); } - Node bNode() const { return Node(edge->_target); } - }; - - class InEdgeIt : public Edge { - friend class SageGraph; - public: - InEdgeIt() : Edge() { } - InEdgeIt(Invalid i) : Edge(i) { } - InEdgeIt(const SageGraph&, Node _v) : Edge(_v.node->_first_in_edge) { } - InEdgeIt(const SageGraph&, const Edge& e) : Edge(e) { } - InEdgeIt& operator++() { edge=edge->_next_in; return *this; } - protected: - Node aNode() const { return Node(edge->_target); } - Node bNode() const { return Node(edge->_source); } - }; - - class SymEdgeIt : public Edge { - friend class SageGraph; - bool out_or_in; //1 iff out, 0 iff in - //node_item* v; - //protected: - protected: //for alpar - SymEdgeIt(const Node& _v) /*: v(_v.node)*/ { - out_or_in=1; - edge=_v.node->_first_out_edge; - if (!edge) { edge=_v.node->_first_in_edge; out_or_in=0; } - } - public: - SymEdgeIt() : Edge() /*, v(0)*/ { } - SymEdgeIt(const Invalid& i) : Edge(i) { } - SymEdgeIt(const SageGraph&, Node _v) /*: v(_v.node)*/ { - out_or_in=1; - edge=_v.node->_first_out_edge; - if (!edge) { edge=_v.node->_first_in_edge; out_or_in=0; } - } - protected: - SymEdgeIt& operator++() { - if (out_or_in) { - node_item* v=edge->_source; - edge=edge->_next_out; - if (!edge) { out_or_in=0; edge=v->_first_in_edge; } - } else { - edge=edge->_next_in; - } - return *this; - } - protected: - Node aNode() const { - return (out_or_in) ? Node(edge->_source) : Node(edge->_target); } - Node bNode() const { - return (out_or_in) ? Node(edge->_target) : Node(edge->_source); } - }; - }; - - inline - std::ostream& operator<<(std::ostream& os, const SageGraph::Node& i) { - if (i.valid()) - os << i.node->id; - else - os << "invalid"; - return os; - } - - inline - std::ostream& operator<<(std::ostream& os, const SageGraph::Edge& i) { - if (i.valid()) - os << "(" << i.sourceNode() << "--" << i.edge->id << "->" - << i.targetNode() << ")"; - else - os << "invalid"; - return os; - } - - class UndirSageGraph : public SageGraph { - public: - typedef SymEdgeIt OutEdgeIt; - typedef SymEdgeIt InEdgeIt; - }; - -} //namespace lemon - -#endif //LEMON_SAGE_GRAPH_H