diff --git a/pdm.lock b/pdm.lock index 8053296..cd59a8f 100644 --- a/pdm.lock +++ b/pdm.lock @@ -5,7 +5,7 @@ groups = ["default", "notebooks", "trials"] strategy = ["cross_platform", "inherit_metadata"] lock_version = "4.4.1" -content_hash = "sha256:8781981bde2786c60273cd73599f4ab6a388d0b435484d5ba0afa0656723dd98" +content_hash = "sha256:e00f157f833ee7615d96375c352e2caa6b4f6b50e5615ccbefa79446189594c7" [[package]] name = "annotated-types" @@ -2938,13 +2938,13 @@ files = [ [[package]] name = "typing-extensions" -version = "4.11.0" +version = "4.12.2" requires_python = ">=3.8" summary = "Backported and Experimental Type Hints for Python 3.8+" groups = ["default", "notebooks", "trials"] files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, ] [[package]] diff --git a/pyproject.toml b/pyproject.toml index c59bde7..05b6632 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -12,6 +12,7 @@ dependencies = [ "sentence-transformers>=2.7.0", "numpy>=1.26.4", "pip>=24.0", + "typing-extensions>=4.12.2", ] requires-python = ">=3.11" readme = "README.md" @@ -47,4 +48,7 @@ quote-style = "single" skip-magic-trailing-comma = false [tool.ruff.lint] -select = ["E", "F", "I"] \ No newline at end of file +select = ["E", "F", "I"] + +[tool.ruff.lint.isort] +extra-standard-library = ["typing_extensions"] \ No newline at end of file diff --git a/scripts/analyse_dataset.py b/scripts/analyse_dataset.py index 17dfaf6..677172c 100644 --- a/scripts/analyse_dataset.py +++ b/scripts/analyse_dataset.py @@ -1,42 +1,44 @@ import typing -import warnings -from pathlib import Path from typing import cast +from pandas import DataFrame, Series + from lang_main.analysis.graphs import TokenGraph from lang_main.constants import ( - DO_GRAPH_POSTPROCESSING, - DO_PREPROCESSING, - DO_TIME_ANALYSIS, - DO_TOKEN_ANALYSIS, - INPUT_PATH_FOLDER, PATH_TO_DATASET, SAVE_PATH_FOLDER, SKIP_GRAPH_POSTPROCESSING, SKIP_PREPROCESSING, SKIP_TIME_ANALYSIS, SKIP_TOKEN_ANALYSIS, - THRESHOLD_AMOUNT_CHARACTERS, - THRESHOLD_EDGE_WEIGHT, ) -from lang_main.io import create_saving_folder, load_pickle +from lang_main.io import create_saving_folder, get_entry_point, load_pickle +from lang_main.pipelines.base import PipelineContainer from lang_main.pipelines.predefined import ( - pipe_merge, - pipe_target_feat, - pipe_timeline, - pipe_token_analysis, + build_base_target_feature_pipe, + build_merge_duplicates_pipe, + build_timeline_pipe, + build_tk_graph_pipe, + build_tk_graph_post_pipe, ) from lang_main.types import ( + EntryPoints, ObjectID, PandasIndex, SpacyDoc, TimelineCandidates, ) -from pandas import DataFrame, Series + +# ** build pipelines +pipe_merge = build_merge_duplicates_pipe() +pipe_target_feat = build_base_target_feature_pipe() +pipe_timeline = build_timeline_pipe() +pipe_token_analysis = build_tk_graph_pipe() +pipe_graph_postprocessing = build_tk_graph_post_pipe() -# ** processing pipeline -def run_preprocessing() -> DataFrame: +# ** preprocessing pipeline +def run_preprocessing() -> None: create_saving_folder( saving_path_folder=SAVE_PATH_FOLDER, overwrite_existing=False, @@ -46,134 +48,69 @@ def run_preprocessing() -> DataFrame: tuple[DataFrame], pipe_target_feat.run(starting_values=(PATH_TO_DATASET,)) ) target_feat_data = ret[0] - # only entries with more than threshold amount of characters - data_filter = typing.cast(Series, (target_feat_data['len'] > THRESHOLD_AMOUNT_CHARACTERS)) - subset_data = target_feat_data.loc[data_filter].copy() - # merge duplicates, results saved separately - ret = typing.cast(tuple[DataFrame], pipe_merge.run(starting_values=(subset_data,))) - preprocessed_data = ret[0] - - return preprocessed_data + _ = typing.cast(tuple[DataFrame], pipe_merge.run(starting_values=(target_feat_data,))) -def run_token_analysis( - preprocessed_data: DataFrame, -) -> tuple[TokenGraph, dict[PandasIndex, SpacyDoc]]: +# ** token analysis +def run_token_analysis() -> None: + # load entry point + entry_point_path = get_entry_point(SAVE_PATH_FOLDER, EntryPoints.TOKEN_ANALYSIS) + loaded_results = cast(tuple[DataFrame], load_pickle(entry_point_path)) + preprocessed_data = loaded_results[0] # build token graph (tk_graph, docs_mapping) = typing.cast( - tuple[TokenGraph, dict[PandasIndex, SpacyDoc]], + tuple[TokenGraph, dict[PandasIndex, SpacyDoc] | None], pipe_token_analysis.run(starting_values=(preprocessed_data,)), ) - tk_graph.save_graph(SAVE_PATH_FOLDER, directed=False) - tk_graph.to_pickle(SAVE_PATH_FOLDER, filename=f'{pipe_token_analysis.name}-TokenGraph') - - return tk_graph, docs_mapping + tk_graph.to_GraphML(SAVE_PATH_FOLDER, filename='TokenGraph', directed=False) -def run_graph_postprocessing( - tk_graph: TokenGraph, -) -> TokenGraph: +def run_graph_postprocessing() -> None: + # load entry point + entry_point_path = get_entry_point(SAVE_PATH_FOLDER, EntryPoints.TK_GRAPH_POST) + loaded_results = cast( + tuple[TokenGraph, dict[PandasIndex, SpacyDoc] | None], + load_pickle(entry_point_path), + ) + tk_graph = loaded_results[0] # filter graph by edge weight and remove single nodes (no connection) - tk_graph_filtered = tk_graph.filter_by_edge_weight(THRESHOLD_EDGE_WEIGHT) - tk_graph_filtered = tk_graph_filtered.filter_by_node_degree(1) - tk_graph_filtered.save_graph( + ret = cast(tuple[TokenGraph], pipe_graph_postprocessing.run(starting_values=(tk_graph,))) + tk_graph_filtered = ret[0] + # tk_graph_filtered = tk_graph.filter_by_edge_weight(THRESHOLD_EDGE_WEIGHT, None) + # tk_graph_filtered = tk_graph_filtered.filter_by_node_degree(1, None) + tk_graph_filtered.to_GraphML( SAVE_PATH_FOLDER, filename='TokenGraph-filtered', directed=False ) - tk_graph_filtered.to_pickle( - SAVE_PATH_FOLDER, filename=f'{pipe_token_analysis.name}-TokenGraph-filtered' - ) - - return tk_graph_filtered -def run_time_analysis() -> tuple[TimelineCandidates, dict[ObjectID, str]]: - filename = 'without_nan' - loading_path = INPUT_PATH_FOLDER.joinpath(filename).with_suffix('.pkl') - verify_path(loading_path) - ret = load_pickle(loading_path) - preprocessed_data = ret[0] +# ** time analysis +def run_time_analysis() -> None: + # load entry point + entry_point_path = get_entry_point(SAVE_PATH_FOLDER, EntryPoints.TIMELINE) + loaded_results = cast(tuple[DataFrame], load_pickle(entry_point_path)) + preprocessed_data = loaded_results[0] - ret = cast( + _ = cast( tuple[TimelineCandidates, dict[ObjectID, str]], pipe_timeline.run(starting_values=(preprocessed_data,)), ) - return ret -def verify_path( - loading_path: Path, -) -> None: - if not loading_path.exists(): - raise FileNotFoundError(f'Could not load results. File not found: {loading_path}') +def build_pipeline_container() -> PipelineContainer: + container = PipelineContainer( + name='Pipeline-Container-Base', working_dir=SAVE_PATH_FOLDER + ) + container.add(run_preprocessing, skip=SKIP_PREPROCESSING) + container.add(run_token_analysis, skip=SKIP_TOKEN_ANALYSIS) + container.add(run_graph_postprocessing, skip=SKIP_GRAPH_POSTPROCESSING) + container.add(run_time_analysis, skip=SKIP_TIME_ANALYSIS) + + return container def main() -> None: - pre_step_skipped: bool = False - # ** preprocess - if DO_PREPROCESSING and not SKIP_PREPROCESSING: - preprocessed_data = run_preprocessing() - elif not SKIP_PREPROCESSING: - # !! hardcoded result filenames - target_pattern: str = r'*Pipe-Merge_Duplicates_Step-1*' - loading_path = list(SAVE_PATH_FOLDER.glob(target_pattern))[0] - verify_path(loading_path) - ret = typing.cast(tuple[DataFrame], load_pickle(loading_path)) - preprocessed_data = ret[0] - else: - pre_step_skipped = True - warnings.warn('No preprocessing action selected. Skipped.') - # sys.exit(0) - # ** token analysis - if DO_TOKEN_ANALYSIS and not SKIP_TOKEN_ANALYSIS: - if pre_step_skipped: - raise RuntimeError( - 'Preprocessing step skipped. Token analysis cannot be performed.' - ) - preprocessed_data_trunc = typing.cast( - DataFrame, preprocessed_data[['batched_idxs', 'entry', 'num_occur']].copy() - ) # type: ignore - tk_graph, docs_mapping = run_token_analysis(preprocessed_data_trunc) - elif not SKIP_TOKEN_ANALYSIS: - # !! hardcoded result filenames - # whole graph - filename: str = f'{pipe_token_analysis.name}-TokenGraph' - loading_path = SAVE_PATH_FOLDER.joinpath(filename).with_suffix('.pkl') - verify_path(loading_path) - # tk_graph = typing.cast(TokenGraph, load_pickle(loading_path)) - tk_graph = TokenGraph.from_pickle(loading_path) - pre_step_skipped = False - else: - pre_step_skipped = True - warnings.warn('No token analysis action selected. Skipped.') - # ** graph postprocessing - if DO_GRAPH_POSTPROCESSING and not SKIP_GRAPH_POSTPROCESSING: - if pre_step_skipped: - raise RuntimeError( - ( - 'Preprocessing or token analysis step skipped. ' - 'Graph postprocessing cannot be performed.' - ) - ) - tk_graph_filtered = run_graph_postprocessing(tk_graph) - elif not SKIP_GRAPH_POSTPROCESSING: - # !! hardcoded result filenames - # filtered graph - filename: str = f'{pipe_token_analysis.name}-TokenGraph-filtered' - loading_path = SAVE_PATH_FOLDER.joinpath(filename).with_suffix('.pkl') - verify_path(loading_path) - # tk_graph_filtered = typing.cast(TokenGraph, load_pickle(loading_path)) - tk_graph_filtered = TokenGraph.from_pickle(loading_path) - pre_step_skipped = False - else: - warnings.warn('No graph postprocessing action selected. Skipped.') - # ** time analysis - if DO_TIME_ANALYSIS and not SKIP_TIME_ANALYSIS: - # no check for fails, runs separately - ret = run_time_analysis() - elif not SKIP_TIME_ANALYSIS: - ... - else: - warnings.warn('No time analysis action selected. Skipped.') + procedure = build_pipeline_container() + procedure.run() if __name__ == '__main__': diff --git a/scripts/dashboard/Pipe-TargetFeature_Step-3_remove_NA.pkl b/scripts/dashboard/Pipe-TargetFeature_Step-3_remove_NA.pkl deleted file mode 100644 index bba1d89..0000000 Binary files a/scripts/dashboard/Pipe-TargetFeature_Step-3_remove_NA.pkl and /dev/null differ diff --git a/scripts/dashboard/Pipe-Timeline_Analysis_Step-4_get_timeline_candidates.pkl b/scripts/dashboard/Pipe-Timeline_Analysis_Step-4_get_timeline_candidates.pkl deleted file mode 100644 index 5565194..0000000 Binary files a/scripts/dashboard/Pipe-Timeline_Analysis_Step-4_get_timeline_candidates.pkl and /dev/null differ diff --git a/scripts/dashboard/app.py b/scripts/dashboard/app.py deleted file mode 100644 index 4a977b6..0000000 --- a/scripts/dashboard/app.py +++ /dev/null @@ -1,190 +0,0 @@ -import time -import webbrowser -from pathlib import Path -from threading import Thread -from typing import cast - -import pandas as pd -import plotly.express as px -from dash import ( - Dash, - Input, - Output, - State, - callback, - dash_table, - dcc, - html, -) -from lang_main.io import load_pickle -from lang_main.types import ObjectID, TimelineCandidates -from pandas import DataFrame - -# df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_unfiltered.csv') - -# ** data -p_df = Path(r'./Pipe-TargetFeature_Step-3_remove_NA.pkl').resolve() -p_tl = Path(r'/Pipe-Timeline_Analysis_Step-4_get_timeline_candidates.pkl').resolve() -ret = cast(DataFrame, load_pickle(p_df)) -data = ret[0] -ret = cast(tuple[TimelineCandidates, dict[ObjectID, str]], load_pickle(p_tl)) -cands = ret[0] -texts = ret[1] - -# p_df = Path(r'.\test-notebooks\dashboard\data.pkl') -# p_cands = Path(r'.\test-notebooks\dashboard\map_candidates.pkl') -# p_map = Path(r'.\test-notebooks\dashboard\map_texts.pkl') -# data = cast(DataFrame, load_pickle(p_df)) -# cands = cast(TimelineCandidates, load_pickle(p_cands)) -# texts = cast(dict[ObjectID, str], load_pickle(p_map)) - -table_feats = [ - 'ErstellungsDatum', - 'ErledigungsDatum', - 'VorgangsTypName', - 'VorgangsBeschreibung', -] -table_feats_dates = [ - 'ErstellungsDatum', - 'ErledigungsDatum', -] - -# ** graph config -markers = { - 'size': 12, - 'color': 'yellow', - 'line': { - 'width': 2, - 'color': 'red', - }, -} -hover_data = { - 'ErstellungsDatum': '|%d.%m.%Y', - 'VorgangsBeschreibung': True, -} - - -app = Dash(prevent_initial_callbacks=True) - -app.layout = [ - html.H1(children='Demo Zeitreihenanalyse', style={'textAlign': 'center'}), - html.Div( - children=[ - html.H2('Wählen Sie ein Objekt aus (ObjektID):'), - dcc.Dropdown( - list(cands.keys()), - id='dropdown-selection', - placeholder='ObjektID auswählen...', - ), - ] - ), - html.Div( - children=[ - html.H3(id='object_text'), - dcc.Dropdown(id='choice-candidates'), - dcc.Graph(id='graph-output'), - ] - ), - html.Div(children=[dash_table.DataTable(id='table-candidates')]), -] - - -@callback( - Output('object_text', 'children'), - Input('dropdown-selection', 'value'), - prevent_initial_call=True, -) -def update_obj_text(obj_id): - obj_id = int(obj_id) - obj_text = texts[obj_id] - headline = f'HObjektText: {obj_text}' - return headline - - -@callback( - Output('choice-candidates', 'options'), - Input('dropdown-selection', 'value'), - prevent_initial_call=True, -) -def update_choice_candidates(obj_id): - obj_id = int(obj_id) - cands_obj_id = cands[obj_id] - choices = list(range(1, len(cands_obj_id) + 1)) - return choices - - -@callback( - Output('graph-output', 'figure'), - Input('choice-candidates', 'value'), - State('dropdown-selection', 'value'), - prevent_initial_call=True, -) -def update_timeline(index, obj_id): - obj_id = int(obj_id) - # title - obj_text = texts[obj_id] - title = f'HObjektText: {obj_text}' - # cands - cands_obj_id = cands[obj_id] - cands_choice = cands_obj_id[int(index) - 1] - # data - df = data.loc[list(cands_choice)].sort_index() # type: ignore - # figure - fig = px.line( - data_frame=df, - x='ErstellungsDatum', - y='ObjektID', - title=title, - hover_data=hover_data, - ) - fig.update_traces(mode='markers+lines', marker=markers, marker_symbol='diamond') - fig.update_xaxes( - tickformat='%B\n%Y', - rangeslider_visible=True, - ) - fig.update_yaxes(type='category') - fig.update_layout(hovermode='x unified') - return fig - - -@callback( - [Output('table-candidates', 'data'), Output('table-candidates', 'columns')], - Input('choice-candidates', 'value'), - State('dropdown-selection', 'value'), - prevent_initial_call=True, -) -def update_table_candidates(index, obj_id): - obj_id = int(obj_id) - # cands - cands_obj_id = cands[obj_id] - cands_choice = cands_obj_id[int(index) - 1] - # data - df = data.loc[list(cands_choice)].sort_index() # type: ignore - df = df.filter(items=table_feats, axis=1).sort_values( - by='ErstellungsDatum', ascending=True - ) - cols = [{'name': i, 'id': i} for i in df.columns] - # convert dates to strings - for col in table_feats_dates: - df[col] = df[col].dt.strftime(r'%Y-%m-%d') - - table_data = df.to_dict('records') - return table_data, cols - - -def _start_webbrowser(): - host = '127.0.0.1' - port = '8050' - adress = f'http://{host}:{port}/' - time.sleep(2) - webbrowser.open_new(adress) - - -def main(): - webbrowser_thread = Thread(target=_start_webbrowser, daemon=True) - webbrowser_thread.start() - app.run(debug=True) - - -if __name__ == '__main__': - main() diff --git a/scripts/dashboard/cyto.py b/scripts/dashboard/cyto.py index b70270e..349980d 100644 --- a/scripts/dashboard/cyto.py +++ b/scripts/dashboard/cyto.py @@ -1,9 +1,9 @@ +import copy import time import webbrowser from pathlib import Path from threading import Thread from typing import cast -import copy import dash_cytoscape as cyto from dash import Dash, Input, Output, State, dcc, html @@ -30,20 +30,20 @@ app = Dash(__name__, external_stylesheets=external_stylesheets) cose_layout = { 'name': 'cose', - 'nodeOverlap': 20, + 'nodeOverlap': 500, 'refresh': 20, 'fit': True, - 'padding': 30, - 'randomize': True, - 'componentSpacing': 40, - 'nodeRepulsion': 2000, + 'padding': 20, + 'randomize': False, + 'componentSpacing': 1.2, + 'nodeRepulsion': 1000, 'edgeElasticity': 1000, 'idealEdgeLength': 100, 'nestingFactor': 1.2, 'gravity': 50, - 'numIter': 2000, - 'initialTemp': 1000, - 'coolingFactor': 0.95, + 'numIter': 3000, + 'initialTemp': 2000, + 'coolingFactor': 0.7, 'minTemp': 1.0, 'nodeDimensionsIncludeLabels': True, } @@ -108,9 +108,8 @@ my_stylesheet = [ # {'selector': '.triangle', 'style': {'shape': 'triangle'}}, ] -app.layout = html.Div( +layout = html.Div( [ - html.Button('Trigger JS Layout', id='test_js'), html.Button('Trigger JS Weight', id='test_js_weight'), html.Div(id='output'), html.Div( @@ -166,11 +165,13 @@ app.layout = html.Div( style={'width': '40%'}, ), html.H3('Graph'), + html.Button('Re-Layout', id='trigger_relayout'), html.Div( [ cyto.Cytoscape( id='cytoscape-graph', style={'width': '100%', 'height': '600px'}, + layout=cose_layout, stylesheet=my_stylesheet, elements=cyto_data_base, zoom=1, @@ -192,6 +193,9 @@ app.layout = html.Div( ) +app.layout = layout + + @app.callback( Output('cytoscape-graph', 'layout', allow_duplicate=True), Input('layout_choice', 'value'), @@ -266,17 +270,17 @@ app.clientside_callback( """ function(n_clicks, layout) { layout.edgeElasticity = function(edge) { - return edge.data().weight * 4; + return edge.data().weight * 0.05; }; layout.idealEdgeLength = function(edge) { - return edge.data().weight * 0.8; + return edge.data().weight * 0.4; }; cy.layout(layout).run(); return layout; } """, Output('cytoscape-graph', 'layout', allow_duplicate=True), - Input('test_js', 'n_clicks'), + Input('trigger_relayout', 'n_clicks'), State('cytoscape-graph', 'layout'), prevent_initial_call=True, ) diff --git a/scripts/dashboard/cyto_2.py b/scripts/dashboard/cyto_2.py deleted file mode 100644 index 7276328..0000000 --- a/scripts/dashboard/cyto_2.py +++ /dev/null @@ -1,368 +0,0 @@ -import json -import os - -import dash -import dash_cytoscape as cyto -from dash import Input, Output, State, callback, dcc, html - -# Load extra layouts -cyto.load_extra_layouts() - - -# Display utility functions -def _merge(a, b): - return dict(a, **b) - - -def _omit(omitted_keys, d): - return {k: v for k, v in d.items() if k not in omitted_keys} - - -# Custom Display Components -def Card(children, **kwargs): - return html.Section( - children, - style=_merge( - { - 'padding': 20, - 'margin': 5, - 'borderRadius': 5, - 'border': 'thin lightgrey solid', - 'background-color': 'white', - # Remove possibility to select the text for better UX - 'user-select': 'none', - '-moz-user-select': 'none', - '-webkit-user-select': 'none', - '-ms-user-select': 'none', - }, - kwargs.get('style', {}), - ), - **_omit(['style'], kwargs), - ) - - -def SectionTitle(title, size, align='center', color='#222'): - return html.Div( - style={'text-align': align, 'color': color}, - children=dcc.Markdown('#' * size + ' ' + title), - ) - - -def NamedCard(title, size, children, **kwargs): - size = min(size, 6) - size = max(size, 1) - - return html.Div([Card([SectionTitle(title, size, align='left')] + children, **kwargs)]) - - -def NamedSlider(name, **kwargs): - return html.Div( - style={'padding': '20px 10px 25px 4px'}, - children=[ - html.P(f'{name}:'), - html.Div(style={'margin-left': '6px'}, children=dcc.Slider(**kwargs)), - ], - ) - - -def NamedDropdown(name, **kwargs): - return html.Div( - style={'margin': '10px 0px'}, - children=[ - html.P(children=f'{name}:', style={'margin-left': '3px'}), - dcc.Dropdown(**kwargs), - ], - ) - - -def NamedRadioItems(name, **kwargs): - return html.Div( - style={'padding': '20px 10px 25px 4px'}, - children=[html.P(children=f'{name}:'), dcc.RadioItems(**kwargs)], - ) - - -def NamedInput(name, **kwargs): - return html.Div(children=[html.P(children=f'{name}:'), dcc.Input(**kwargs)]) - - -# Utils -def DropdownOptionsList(*args): - return [{'label': val.capitalize(), 'value': val} for val in args] - - -asset_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), '..', 'assets') - -app = dash.Dash(__name__, assets_folder=asset_path) -server = app.server - - -# ###################### DATA PREPROCESSING ###################### -# Load data -with open('sample_network.txt', 'r', encoding='utf-8') as f: - network_data = f.read().split('\n') - -# We select the first 750 edges and associated nodes for an easier visualization -edges = network_data[:750] -nodes = set() - -following_node_di = {} # user id -> list of users they are following -following_edges_di = {} # user id -> list of cy edges starting from user id - -followers_node_di = {} # user id -> list of followers (cy_node format) -followers_edges_di = {} # user id -> list of cy edges ending at user id - -cy_edges = [] -cy_nodes = [] - -for edge in edges: - if ' ' not in edge: - continue - - source, target = edge.split(' ') - - cy_edge = {'data': {'id': source + target, 'source': source, 'target': target}} - cy_target = {'data': {'id': target, 'label': 'User #' + str(target[-5:])}} - cy_source = {'data': {'id': source, 'label': 'User #' + str(source[-5:])}} - - if source not in nodes: - nodes.add(source) - cy_nodes.append(cy_source) - if target not in nodes: - nodes.add(target) - cy_nodes.append(cy_target) - - # Process dictionary of following - if not following_node_di.get(source): - following_node_di[source] = [] - if not following_edges_di.get(source): - following_edges_di[source] = [] - - following_node_di[source].append(cy_target) - following_edges_di[source].append(cy_edge) - - # Process dictionary of followers - if not followers_node_di.get(target): - followers_node_di[target] = [] - if not followers_edges_di.get(target): - followers_edges_di[target] = [] - - followers_node_di[target].append(cy_source) - followers_edges_di[target].append(cy_edge) - -genesis_node = cy_nodes[0] -genesis_node['classes'] = 'genesis' -default_elements = [genesis_node] - -default_stylesheet = [ - {'selector': 'node', 'style': {'opacity': 0.65, 'z-index': 9999}}, - { - 'selector': 'edge', - 'style': {'curve-style': 'bezier', 'opacity': 0.45, 'z-index': 5000}, - }, - {'selector': '.followerNode', 'style': {'background-color': '#0074D9'}}, - { - 'selector': '.followerEdge', - 'style': { - 'mid-target-arrow-color': 'blue', - 'mid-target-arrow-shape': 'vee', - 'line-color': '#0074D9', - }, - }, - {'selector': '.followingNode', 'style': {'background-color': '#FF4136'}}, - { - 'selector': '.followingEdge', - 'style': { - 'mid-target-arrow-color': 'red', - 'mid-target-arrow-shape': 'vee', - 'line-color': '#FF4136', - }, - }, - { - 'selector': '.genesis', - 'style': { - 'background-color': '#B10DC9', - 'border-width': 2, - 'border-color': 'purple', - 'border-opacity': 1, - 'opacity': 1, - 'label': 'data(label)', - 'color': '#B10DC9', - 'text-opacity': 1, - 'font-size': 12, - 'z-index': 9999, - }, - }, - { - 'selector': ':selected', - 'style': { - 'border-width': 2, - 'border-color': 'black', - 'border-opacity': 1, - 'opacity': 1, - 'label': 'data(label)', - 'color': 'black', - 'font-size': 12, - 'z-index': 9999, - }, - }, -] - -# ################################# APP LAYOUT ################################ -styles = { - 'json-output': { - 'overflow-y': 'scroll', - 'height': 'calc(50% - 25px)', - 'border': 'thin lightgrey solid', - }, - 'tab': {'height': 'calc(98vh - 80px)'}, -} - -app.layout = html.Div( - [ - html.Div( - className='eight columns', - children=[ - cyto.Cytoscape( - id='cytoscape', - elements=default_elements, - stylesheet=default_stylesheet, - style={'height': '95vh', 'width': '100%'}, - ) - ], - ), - html.Div( - className='four columns', - children=[ - dcc.Tabs( - id='tabs', - children=[ - dcc.Tab( - label='Control Panel', - children=[ - NamedDropdown( - name='Layout', - id='dropdown-layout', - options=DropdownOptionsList( - 'random', - 'grid', - 'circle', - 'concentric', - 'breadthfirst', - 'cose', - 'cose-bilkent', - 'dagre', - 'cola', - 'klay', - 'spread', - 'euler', - ), - value='grid', - clearable=False, - ), - NamedRadioItems( - name='Expand', - id='radio-expand', - options=DropdownOptionsList('followers', 'following'), - value='followers', - ), - ], - ), - dcc.Tab( - label='JSON', - children=[ - html.Div( - style=styles['tab'], - children=[ - html.P('Node Object JSON:'), - html.Pre( - id='tap-node-json-output', - style=styles['json-output'], - ), - html.P('Edge Object JSON:'), - html.Pre( - id='tap-edge-json-output', - style=styles['json-output'], - ), - ], - ) - ], - ), - ], - ), - ], - ), - ] -) - - -# ############################## CALLBACKS #################################### -@callback(Output('tap-node-json-output', 'children'), Input('cytoscape', 'tapNode')) -def display_tap_node(data): - return json.dumps(data, indent=2) - - -@callback(Output('tap-edge-json-output', 'children'), Input('cytoscape', 'tapEdge')) -def display_tap_edge(data): - return json.dumps(data, indent=2) - - -@callback(Output('cytoscape', 'layout'), Input('dropdown-layout', 'value')) -def update_cytoscape_layout(layout): - return {'name': layout} - - -@callback( - Output('cytoscape', 'elements'), - Input('cytoscape', 'tapNodeData'), - State('cytoscape', 'elements'), - State('radio-expand', 'value'), -) -def generate_elements(nodeData, elements, expansion_mode): - if not nodeData: - return default_elements - - # If the node has already been expanded, we don't expand it again - if nodeData.get('expanded'): - return elements - - # This retrieves the currently selected element, and tag it as expanded - for element in elements: - if nodeData['id'] == element.get('data').get('id'): - element['data']['expanded'] = True - break - - if expansion_mode == 'followers': - followers_nodes = followers_node_di.get(nodeData['id']) - followers_edges = followers_edges_di.get(nodeData['id']) - - if followers_nodes: - for node in followers_nodes: - node['classes'] = 'followerNode' - elements.extend(followers_nodes) - - if followers_edges: - for follower_edge in followers_edges: - follower_edge['classes'] = 'followerEdge' - elements.extend(followers_edges) - - elif expansion_mode == 'following': - following_nodes = following_node_di.get(nodeData['id']) - following_edges = following_edges_di.get(nodeData['id']) - - if following_nodes: - for node in following_nodes: - if node['data']['id'] != genesis_node['data']['id']: - node['classes'] = 'followingNode' - elements.append(node) - - if following_edges: - for follower_edge in following_edges: - follower_edge['classes'] = 'followingEdge' - elements.extend(following_edges) - - return elements - - -if __name__ == '__main__': - app.run_server(debug=True) diff --git a/scripts/dashboard/sample_network.txt b/scripts/dashboard/sample_network.txt deleted file mode 100644 index 7af6dcd..0000000 --- a/scripts/dashboard/sample_network.txt +++ /dev/null @@ -1,10297 +0,0 @@ -108082478497335384404 113210431006401244170 -101261243957067319422 101832196121408756348 -100257676670422660178 109335713877994755095 -111654284395316165338 107753428759636856492 -101261243957067319422 117693415411676715849 -117691391504351341685 109581870574956225297 -115739378269261680935 115109077044202722504 -105901259206530390933 109170680659355634945 -109581870574956225297 102178700954286324866 -115478779964227301239 116388668762198604003 -105207943512906810696 111538009015644508967 -115109077044202722504 111538009015644508967 -114244914082871792125 108082478497335384404 -113166718268343560861 104191514233385365427 -102034052532213921839 110318982509514011806 -100084737546039360199 101213524574984631953 -112944532473909341307 101094440579835956866 -101261243957067319422 113475277239647026452 -104612091113514802664 117421021456205115327 -106665185918564754695 112276589013569458330 -109504122343901736603 104560124403688998123 -112016425853417877466 108000051912603578599 -115739378269261680935 109170680659355634945 -115739378269261680935 112364132652438722780 -115920538018564742940 109388259228280605303 -107896527414017792767 113247423264358423892 -112339769006469685593 118207880179234484610 -107519026002586025827 113475277239647026452 -115341960624782381062 114152150496380806218 -111310990991240556038 110318982509514011806 -111538009015644508967 115017401467423642930 -105901259206530390933 112844561713780016118 -115565811010545226083 113920721823301219308 -111091089527727420853 102512310412972518336 -107896527414017792767 107519026002586025827 -106312895983244085949 116388668762198604003 -101261243957067319422 107896527414017792767 -111538009015644508967 115706830138905259568 -117377434815709898403 118357356982727825178 -105400903062771750089 113164038788726940319 -101261243957067319422 107699711897781234810 -107129852879758941909 115341960624782381062 -108832773152747423283 112844561713780016118 -109170680659355634945 109009089551467495747 -106312895983244085949 105076678694475690385 -109182513536739786206 106189723444098348646 -103100496883422151101 102034052532213921839 -107033731246200681024 117377434815709898403 -111538009015644508967 115478779964227301239 -100397511207083609950 107117483540235115863 -115064258994656104138 108255750659110762991 -105705665708025552983 109581870574956225297 -105376842241046675559 114079920283986872783 -107006059340452534782 118207880179234484610 -101213524574984631953 105076678694475690385 -114918561167106576639 116374117927631468606 -113612142759476883204 109778238062128383421 -113166718268343560861 113116318008017777871 -106026445270708973611 114821161730370452301 -108434394145774737013 104191514233385365427 -104987932455782713675 109809835379677001002 -104612091113514802664 107133948555394893679 -118418436905562612953 108771911258181286059 -109581870574956225297 110286587261352351537 -112944532473909341307 106345802537137414958 -111666959095947698908 115360979797396777969 -106224435901697064976 115478779964227301239 -101261243957067319422 103100496883422151101 -108894779805940659869 113247423264358423892 -118418436905562612953 110318982509514011806 -103100496883422151101 104450760987525660219 -112944532473909341307 108434394145774737013 -116621986644249676039 107234826207633309420 -106224435901697064976 108082478497335384404 -114918561167106576639 115963821022986200770 -109174551750397653742 106665185918564754695 -103153499873703329897 100397143564111754723 -115403621788538540544 101704103161442695877 -113047102292798770205 112063946124358686266 -115963821022986200770 108082478497335384404 -113612142759476883204 103207773865797007066 -115109077044202722504 106096957694385885466 -114152150496380806218 107626068753267217775 -104277680236688325392 115302451851587317396 -118418436905562612953 108255750659110762991 -109174551750397653742 114461903539732780109 -109780617142585395916 118156281382429939997 -115622466243011136115 109809835379677001002 -109170680659355634945 103582267051807991527 -111091089527727420853 115047896996200277508 -103207773865797007066 103012564142649561853 -113166718268343560861 104364058018116761460 -100397511207083609950 116773104421165750126 -108243648069327964538 108000051912603578599 -114991987213662121376 102425976203575211068 -115392876317176762477 116926943858449614201 -117691391504351341685 117693415411676715849 -107303107611470093265 107117483540235115863 -104618664838382110366 112878918236054024365 -111538009015644508967 109895887909967698705 -116107530889292552664 104191514233385365427 -105076678694475690385 106096957694385885466 -111975545018506506119 107234826207633309420 -114918561167106576639 114549564725160709822 -104364058018116761460 108434394145774737013 -109182513536739786206 113612142759476883204 -117921656724816772352 112290361600843238282 -118418436905562612953 103325969492772452485 -103016521073558596116 111091089527727420853 -110448924610029803960 111285782175840598932 -106345802537137414958 112944532473909341307 -116207701819773193333 115565811010545226083 -111091089527727420853 107006059340452534782 -100397511207083609950 110367546804237452889 -109809835379677001002 104364058018116761460 -104364058018116761460 114244914082871792125 -100001826804813287036 112364132652438722780 -113164038788726940319 114244914082871792125 -102512310412972518336 113612142759476883204 -105705665708025552983 109809835379677001002 -106312895983244085949 115360979797396777969 -103100496883422151101 113068441549452664746 -115360979797396777969 100262595546646927505 -102512310412972518336 116388668762198604003 -108082478497335384404 112844561713780016118 -103207773865797007066 118156281382429939997 -106345802537137414958 109182513536739786206 -108817085747440374986 110727249496967897430 -107006059340452534782 100173452066172931939 -114790574178411061829 101094440579835956866 -115920538018564742940 116927391465690022495 -113116318008017777871 115963821022986200770 -113164038788726940319 102178700954286324866 -106925005603331131101 114991987213662121376 -112852253337028739987 116374117927631468606 -115739148151601573808 109519167630731639094 -107519026002586025827 109412257237874861202 -113612142759476883204 115360979797396777969 -103016521073558596116 113247423264358423892 -107781761552417614958 104450760987525660219 -112016425853417877466 115064258994656104138 -102034052532213921839 104450760987525660219 -100871232248276491534 106822154985570317672 -115360979797396777969 107968787521028284191 -110318982509514011806 101213524574984631953 -112944532473909341307 105030465637303791249 -114244914082871792125 106224435901697064976 -100397511207083609950 105400903062771750089 -117554116577922048636 111601729473858041964 -109504122343901736603 101261243957067319422 -113166718268343560861 113612142759476883204 -106122462724662012890 112276589013569458330 -117377434815709898403 113166718268343560861 -101092351652012588236 116762461061414014956 -100871232248276491534 107626068753267217775 -116768967108862685383 100537991844787325512 -111422286077941361166 105822688186016123722 -109504122343901736603 114991987213662121376 -117550971892000156946 106695181236161584825 -115017401467423642930 104191514233385365427 -112339769006469685593 114632854492678778509 -111538009015644508967 109813896768294978296 -100397511207083609950 106312895983244085949 -102034052532213921839 115622466243011136115 -109504122343901736603 115565811010545226083 -112016425853417877466 113801236315350503728 -100001826804813287036 103207773865797007066 -106695181236161584825 104618664838382110366 -112016425853417877466 115706830138905259568 -106224435901697064976 118264184129842070900 -115739148151601573808 101629211371073711149 -108817085747440374986 116762461061414014956 -101126226710566561379 107308976571078250231 -115739378269261680935 109780617142585395916 -111091089527727420853 103100496883422151101 -114918561167106576639 103660543175586203250 -111310990991240556038 102034052532213921839 -113164038788726940319 108082478497335384404 -113164038788726940319 103716847685048716973 -103493459351957813291 108832773152747423283 -104412682128547752131 111091089527727420853 -104450760987525660219 102034052532213921839 -101213524574984631953 103325969492772452485 -118086737936443306746 108817085747440374986 -104364058018116761460 114758749740576519343 -116762461061414014956 109813896768294978296 -110774757382682582490 107968787521028284191 -103493459351957813291 118245559326500322262 -105076678694475690385 111666959095947698908 -113116318008017777871 116491285067171323298 -115064258994656104138 100084737546039360199 -109304903996729396661 112276589013569458330 -114991987213662121376 109247306373593947755 -111538009015644508967 118264184129842070900 -114832793541825307503 111171416539633276676 -101481313915867030905 104364058018116761460 -107587075873786034394 113920721823301219308 -102654570556058167176 106100296973968329853 -118357356982727825178 109182513536739786206 -108899222163640713555 109388259228280605303 -108594511384403031361 114632854492678778509 -111422286077941361166 110649214929620497857 -106312895983244085949 100269980559891536109 -111171416539633276676 106623900962110772648 -111538009015644508967 103325969492772452485 -109170680659355634945 118156281382429939997 -111422286077941361166 103475991020114516832 -101246601531247561585 103975368181760158212 -115565811010545226083 105076678694475690385 -118245559326500322262 102048265612444661933 -115478779964227301239 101261243957067319422 -102048265612444661933 105400903062771750089 -100397511207083609950 104364058018116761460 -116374117927631468606 118264184129842070900 -108314259245584185142 116374117927631468606 -109174551750397653742 106189723444098348646 -116762461061414014956 107793717361981126032 -116491285067171323298 107753428759636856492 -110731951130561423918 103207773865797007066 -105822688186016123722 115565811010545226083 -100084737546039360199 107753428759636856492 -103207773865797007066 115403621788538540544 -117377434815709898403 104987932455782713675 -117477042502591652021 115739148151601573808 -107896527414017792767 112063946124358686266 -105705665708025552983 102545157386069758709 -103493459351957813291 105822688186016123722 -101261243957067319422 115360979797396777969 -104450760987525660219 112339769006469685593 -109304903996729396661 104560124403688998123 -103207773865797007066 104964811874969620954 -116374117927631468606 100269980559891536109 -100535338638690515335 103716847685048716973 -115341960624782381062 101057616370673656059 -114244914082871792125 107033731246200681024 -104364058018116761460 100019606796298306813 -111310990991240556038 108817085747440374986 -118245559326500322262 103716847685048716973 -104191514233385365427 117477042502591652021 -116374117927631468606 102484577222269062816 -114244914082871792125 108594511384403031361 -109247306373593947755 115017401467423642930 -112364132652438722780 113247423264358423892 -115064258994656104138 116762461061414014956 -100894876340926769800 114832793541825307503 -108817085747440374986 109519167630731639094 -104618664838382110366 115739148151601573808 -112276589013569458330 108434394145774737013 -107755092517418534815 105703999093618427814 -103016521073558596116 116374117927631468606 -115622466243011136115 114632854492678778509 -111666959095947698908 107117483540235115863 -105076678694475690385 102512310412972518336 -111654284395316165338 102178700954286324866 -100535338638690515335 118264184129842070900 -115963821022986200770 103100496883422151101 -112820512550939559523 111091089527727420853 -114244914082871792125 110286587261352351537 -102034052532213921839 113247423264358423892 -107133948555394893679 103716847685048716973 -109304903996729396661 117377434815709898403 -117421021456205115327 104560124403688998123 -111310990991240556038 114632854492678778509 -111091089527727420853 115341960624782381062 -115109077044202722504 101704103161442695877 -113116318008017777871 100523784851251213675 -102512310412972518336 115478779964227301239 -104450760987525660219 101849747879612982297 -102034052532213921839 103012564142649561853 -114244914082871792125 104612091113514802664 -105006381068870463173 109813896768294978296 -103016521073558596116 112944532473909341307 -106812355611465528242 104792450024518550569 -112364132652438722780 116927391465690022495 -112364132652438722780 105822688186016123722 -100093902492789669774 104450760987525660219 -106695181236161584825 110318982509514011806 -110318982509514011806 106345802537137414958 -108434394145774737013 106345802537137414958 -113612142759476883204 109813896768294978296 -114832793541825307503 103153499873703329897 -104612091113514802664 108082478497335384404 -103325969492772452485 113475277239647026452 -107753428759636856492 110727249496967897430 -114918561167106576639 114244914082871792125 -118086737936443306746 111285782175840598932 -115963821022986200770 104450760987525660219 -101261243957067319422 110286587261352351537 -108574688020691152748 103112588675637065591 -103207773865797007066 114152150496380806218 -109247306373593947755 109170680659355634945 -106026445270708973611 118357356982727825178 -102654570556058167176 109170680659355634945 -108082478497335384404 118264184129842070900 -107519026002586025827 113612142759476883204 -101246601531247561585 107117483540235115863 -117693415411676715849 103171849011748425097 -105006381068870463173 105076678694475690385 -103016521073558596116 103171849011748425097 -116773104421165750126 109813896768294978296 -109009089551467495747 105863188856924083857 -114244914082871792125 116621986644249676039 -117550971892000156946 113164038788726940319 -112852253337028739987 117550971892000156946 -118245559326500322262 109813896768294978296 -104412682128547752131 102654570556058167176 -104364058018116761460 115064258994656104138 -105705665708025552983 103325969492772452485 -116207701819773193333 100535338638690515335 -101126226710566561379 117921656724816772352 -117377434815709898403 109074857816744029470 -101720949843787442951 101263833299534001868 -112016425853417877466 113210431006401244170 -101261243957067319422 110727249496967897430 -115622466243011136115 113210431006401244170 -107006059340452534782 101261243957067319422 -102512310412972518336 109304903996729396661 -113116318008017777871 105376842241046675559 -109170680659355634945 110318982509514011806 -104870518715355770532 108082478497335384404 -104450760987525660219 113166718268343560861 -117157132370347986579 102034052532213921839 -114751436351490918894 110014891370822989957 -107519026002586025827 105400903062771750089 -117377434815709898403 115360979797396777969 -112276589013569458330 110286587261352351537 -103207773865797007066 104870518715355770532 -103207773865797007066 103100496883422151101 -115963821022986200770 104560124403688998123 -108894779805940659869 116768967108862685383 -113068441549452664746 114461903539732780109 -100397511207083609950 110727249496967897430 -111538009015644508967 112844561713780016118 -115739378269261680935 103100496883422151101 -109174551750397653742 105076678694475690385 -103016521073558596116 112852253337028739987 -109174551750397653742 113612142759476883204 -103100496883422151101 109182513536739786206 -112276589013569458330 101569655404865588155 -112944532473909341307 111538009015644508967 -111091089527727420853 117377434815709898403 -108832773152747423283 103493459351957813291 -115565811010545226083 105634350975670602787 -109182513536739786206 104450760987525660219 -106096957694385885466 116926943858449614201 -109304903996729396661 107992936493665613654 -109581870574956225297 103112588675637065591 -115739378269261680935 101832771958125915909 -117477042502591652021 115706830138905259568 -109247306373593947755 102545157386069758709 -105076678694475690385 107896527414017792767 -106665185918564754695 118264184129842070900 -103016521073558596116 113117251731252114390 -118357356982727825178 104364058018116761460 -106665185918564754695 116762461061414014956 -114991987213662121376 105376842241046675559 -112820512550939559523 101213524574984631953 -109182513536739786206 106345802537137414958 -105400903062771750089 109174551750397653742 -112016425853417877466 104560124403688998123 -108817085747440374986 107033731246200681024 -112944532473909341307 104450760987525660219 -115302451851587317396 111654284395316165338 -114791921155677330282 100537991844787325512 -101600577333348274552 115047896996200277508 -103207773865797007066 110318982509514011806 -108434394145774737013 114991987213662121376 -115047896996200277508 109074857816744029470 -113351703941294630458 107968787521028284191 -118357356982727825178 107753428759636856492 -104450760987525660219 112852253337028739987 -100269980559891536109 103325969492772452485 -108143819792337559199 106345802537137414958 -106695181236161584825 118320665823821681206 -112944532473909341307 105705665708025552983 -107753428759636856492 114790574178411061829 -105901259206530390933 100397511207083609950 -108082478497335384404 111654284395316165338 -112944532473909341307 112276589013569458330 -110318982509514011806 118357356982727825178 -114832793541825307503 100894876340926769800 -111975545018506506119 100535338638690515335 -103171849011748425097 100084737546039360199 -108952536790629690817 108787861479092510435 -105076678694475690385 101849747879612982297 -117691391504351341685 115863474911002159675 -111538009015644508967 109778238062128383421 -100173452066172931939 111091089527727420853 -106026445270708973611 106224435901697064976 -112878918236054024365 108817085747440374986 -105207943512906810696 112063946124358686266 -108082478497335384404 117421021456205115327 -113612142759476883204 115478779964227301239 -118245559326500322262 105822688186016123722 -114244914082871792125 102216887206636463918 -107519026002586025827 109813896768294978296 -118156281382429939997 110728349411116483031 -107587075873786034394 108574688020691152748 -117691391504351341685 113116318008017777871 -106224435901697064976 108574688020691152748 -112944532473909341307 107117483540235115863 -115565811010545226083 108082478497335384404 -107753428759636856492 105822688186016123722 -107006059340452534782 110727249496967897430 -106026445270708973611 113166718268343560861 -109304903996729396661 101225750534150134109 -118357356982727825178 102034052532213921839 -104412682128547752131 109780617142585395916 -105662484616118909569 101246601531247561585 -101481313915867030905 100019606796298306813 -115739378269261680935 113612142759476883204 -102088173699409175139 106837636108890930395 -103325969492772452485 114790574178411061829 -100093902492789669774 111091089527727420853 -100084737546039360199 103100496883422151101 -115622466243011136115 112878918236054024365 -114918561167106576639 103112588675637065591 -112364132652438722780 109304903996729396661 -112016425853417877466 106665185918564754695 -109182513536739786206 115478779964227301239 -106312895983244085949 107968787521028284191 -100353346783543697435 109813896768294978296 -101261243957067319422 107968787521028284191 -107006059340452534782 117691391504351341685 -113801236315350503728 110318982509514011806 -113164038788726940319 100084737546039360199 -118418436905562612953 103475991020114516832 -113920721823301219308 103012564142649561853 -116374117927631468606 106312895983244085949 -112944532473909341307 118086737936443306746 -114244914082871792125 117550971892000156946 -109182513536739786206 113166718268343560861 -107133948555394893679 103475991020114516832 -111975545018506506119 116621986644249676039 -114758749740576519343 115622466243011136115 -100856165335040300712 104792450024518550569 -107896527414017792767 116388668762198604003 -105207943512906810696 111310990991240556038 -107753428759636856492 104450760987525660219 -112364132652438722780 116388668762198604003 -105705665708025552983 104364058018116761460 -117377434815709898403 112276589013569458330 -116374117927631468606 101704103161442695877 -108894779805940659869 107753428759636856492 -110731951130561423918 112063946124358686266 -112820512550939559523 103171849011748425097 -115739378269261680935 101126226710566561379 -109196389259504239326 117693415411676715849 -116207701819773193333 106189723444098348646 -108314259245584185142 102484577222269062816 -102512310412972518336 109388259228280605303 -108082478497335384404 104612091113514802664 -107090629815001792243 107626068753267217775 -115706830138905259568 113475277239647026452 -111538009015644508967 111285782175840598932 -111422286077941361166 101629211371073711149 -105901259206530390933 103475991020114516832 -105901259206530390933 115739148151601573808 -115739378269261680935 106100296973968329853 -101261243957067319422 101094440579835956866 -113475277239647026452 109809835379677001002 -105207943512906810696 105076678694475690385 -101261243957067319422 103012564142649561853 -101213524574984631953 100535338638690515335 -106812355611465528242 116927391465690022495 -117921656724816772352 106100296973968329853 -117921656724816772352 104066486855641683676 -117691391504351341685 106695181236161584825 -112820512550939559523 116388668762198604003 -105705665708025552983 114991987213662121376 -115478779964227301239 110318982509514011806 -113116318008017777871 109170680659355634945 -113166718268343560861 116762461061414014956 -115963821022986200770 101185406398932804414 -104450760987525660219 101720949843787442951 -100173452066172931939 103691312271671214670 -100269980559891536109 114791921155677330282 -113166718268343560861 110318982509514011806 -111538009015644508967 111310990991240556038 -113612142759476883204 103716847685048716973 -107090629815001792243 106812355611465528242 -102545157386069758709 115017401467423642930 -108000051912603578599 114461903539732780109 -106224435901697064976 104364058018116761460 -101057616370673656059 103100496883422151101 -110728349411116483031 103691312271671214670 -115109077044202722504 116107530889292552664 -111538009015644508967 111337216646096594888 -114758749740576519343 113210431006401244170 -111707854651652464890 108314259245584185142 -114244914082871792125 100269980559891536109 -115047896996200277508 103716847685048716973 -109182513536739786206 115565811010545226083 -113351703941294630458 113920721823301219308 -111975545018506506119 117691391504351341685 -113612142759476883204 110286587261352351537 -111654284395316165338 108082478497335384404 -101720949843787442951 109931095616224405271 -101126226710566561379 104870518715355770532 -103660543175586203250 104450760987525660219 -103016521073558596116 114791921155677330282 -109247306373593947755 103020619410065980303 -113166718268343560861 101704103161442695877 -108817085747440374986 114918561167106576639 -116388668762198604003 108082478497335384404 -115478779964227301239 108574688020691152748 -115739378269261680935 115565811010545226083 -104450760987525660219 104612091113514802664 -113116318008017777871 116388668762198604003 -111538009015644508967 114991987213662121376 -103207773865797007066 118245559326500322262 -110014891370822989957 114751436351490918894 -101213524574984631953 108817085747440374986 -100397511207083609950 107106500560002041088 -108952536790629690817 103537420161725387429 -103153499873703329897 110318982509514011806 -115527632958457358109 115478779964227301239 -117421021456205115327 109182513536739786206 -102403331307606219198 115963821022986200770 -100871232248276491534 113801236315350503728 -108899222163640713555 104066486855641683676 -115360979797396777969 100535338638690515335 -115739378269261680935 111601729473858041964 -104383523254857614001 109388259228280605303 -115963821022986200770 113116318008017777871 -113166718268343560861 101261243957067319422 -109247306373593947755 115739378269261680935 -104618664838382110366 104450760987525660219 -111091089527727420853 113612142759476883204 -109504122343901736603 106925005603331131101 -112276589013569458330 115863474911002159675 -111538009015644508967 100262595546646927505 -117550971892000156946 115478779964227301239 -107519026002586025827 115963821022986200770 -104412682128547752131 111806715084467662398 -114790574178411061829 108082478497335384404 -109809835379677001002 101225750534150134109 -110774757382682582490 115047896996200277508 -104412682128547752131 103975368181760158212 -112820512550939559523 108574688020691152748 -116107530889292552664 112944532473909341307 -105703999093618427814 115109077044202722504 -117477042502591652021 109247306373593947755 -104870518715355770532 106096957694385885466 -112878918236054024365 114244914082871792125 -109304903996729396661 112063946124358686266 -100871232248276491534 106189723444098348646 -117377434815709898403 108176814619778619437 -102545157386069758709 105705665708025552983 -101600577333348274552 109182513536739786206 -114244914082871792125 115565811010545226083 -103207773865797007066 101185406398932804414 -101225750534150134109 105376842241046675559 -115302451851587317396 117693415411676715849 -100093902492789669774 115017401467423642930 -105076678694475690385 103112588675637065591 -102512310412972518336 107090629815001792243 -105076678694475690385 100084737546039360199 -101849747879612982297 110318982509514011806 -107519026002586025827 115064258994656104138 -118207880179234484610 106665185918564754695 -107196172964000631645 102178700954286324866 -118086737936443306746 115622466243011136115 -113116318008017777871 110774757382682582490 -115565811010545226083 107753428759636856492 -113166718268343560861 117421021456205115327 -100353346783543697435 105376842241046675559 -116723923766489326849 105006381068870463173 -118017787526225833770 115392876317176762477 -113475277239647026452 106189723444098348646 -117550971892000156946 104560124403688998123 -108000051912603578599 110727249496967897430 -116491285067171323298 109174551750397653742 -111975545018506506119 114791921155677330282 -100093902492789669774 113801236315350503728 -104364058018116761460 108817085747440374986 -106026445270708973611 116927391465690022495 -107896527414017792767 115478779964227301239 -112878918236054024365 114918561167106576639 -111310990991240556038 104364058018116761460 -112290361600843238282 106096957694385885466 -108574688020691152748 115478779964227301239 -107033731246200681024 115622466243011136115 -111806715084467662398 109247306373593947755 -107896527414017792767 118357356982727825178 -115478779964227301239 109174551750397653742 -111975545018506506119 112844561713780016118 -100397511207083609950 107090629815001792243 -103567864289861449366 115527632958457358109 -100353346783543697435 103171849011748425097 -104450760987525660219 107781761552417614958 -111261496925076985134 118320665823821681206 -106925005603331131101 101246601531247561585 -100084737546039360199 115863474911002159675 -108894779805940659869 118156281382429939997 -111538009015644508967 108434394145774737013 -112364132652438722780 105076678694475690385 -109174551750397653742 113475277239647026452 -115565811010545226083 102034052532213921839 -101057616370673656059 108832773152747423283 -104612091113514802664 109504122343901736603 -113612142759476883204 100537991844787325512 -109809835379677001002 102178700954286324866 -109247306373593947755 109009089551467495747 -115739378269261680935 100173452066172931939 -114244914082871792125 105662484616118909569 -100397511207083609950 103171849011748425097 -105705665708025552983 109778238062128383421 -115963821022986200770 106695181236161584825 -117693415411676715849 116768967108862685383 -113047102292798770205 105076678694475690385 -102088173699409175139 105400369085832308485 -105901259206530390933 102403331307606219198 -103016521073558596116 103112588675637065591 -116207701819773193333 115047896996200277508 -116374117927631468606 108817085747440374986 -101094440579835956866 101213524574984631953 -103016521073558596116 115109077044202722504 -111975545018506506119 101849747879612982297 -114790574178411061829 108255750659110762991 -100093902492789669774 101261243957067319422 -114918561167106576639 105376842241046675559 -113166718268343560861 115527632958457358109 -117550971892000156946 113612142759476883204 -100397511207083609950 115047896996200277508 -107133948555394893679 110318982509514011806 -114244914082871792125 115478779964227301239 -102216887206636463918 106026445270708973611 -116374117927631468606 110318982509514011806 -116762461061414014956 103475991020114516832 -118357356982727825178 109581870574956225297 -108894779805940659869 110318982509514011806 -109809835379677001002 102034052532213921839 -104612091113514802664 105400903062771750089 -115109077044202722504 103493459351957813291 -115565811010545226083 102178700954286324866 -111975545018506506119 116926943858449614201 -114244914082871792125 116768967108862685383 -100269980559891536109 109778238062128383421 -100084737546039360199 100262595546646927505 -110731951130561423918 108899222163640713555 -100269980559891536109 111310990991240556038 -117691391504351341685 116388668762198604003 -103016521073558596116 108314259245584185142 -112878918236054024365 103475991020114516832 -110448924610029803960 106122462724662012890 -115360979797396777969 101094440579835956866 -101261243957067319422 101849747879612982297 -100093902492789669774 115739378269261680935 -111091089527727420853 114152150496380806218 -101832196121408756348 102654570556058167176 -102216887206636463918 111538009015644508967 -106026445270708973611 115047896996200277508 -106026445270708973611 103475991020114516832 -102216887206636463918 111285782175840598932 -104612091113514802664 111538009015644508967 -101057616370673656059 101849747879612982297 -111538009015644508967 113247423264358423892 -100353346783543697435 107117483540235115863 -115963821022986200770 118264184129842070900 -117550971892000156946 114918561167106576639 -100173452066172931939 107090629815001792243 -105006381068870463173 113801236315350503728 -100397511207083609950 105822688186016123722 -111538009015644508967 109388259228280605303 -117377434815709898403 101261243957067319422 -101261243957067319422 105400903062771750089 -101094440579835956866 116388668762198604003 -108129202557078877094 114948739867290323960 -111975545018506506119 115047896996200277508 -108894779805940659869 100871232248276491534 -111091089527727420853 109581870574956225297 -115739378269261680935 115047896996200277508 -107753428759636856492 101185406398932804414 -114918561167106576639 115739378269261680935 -117477042502591652021 118245559326500322262 -106388983874370865380 108176814619778619437 -116374117927631468606 103660543175586203250 -106096957694385885466 107699711897781234810 -107753428759636856492 113475277239647026452 -112364132652438722780 107626068753267217775 -105076678694475690385 109780617142585395916 -100397511207083609950 103493459351957813291 -100535338638690515335 117550971892000156946 -109174551750397653742 114632854492678778509 -105076678694475690385 109813896768294978296 -111310990991240556038 106189723444098348646 -111975545018506506119 101261243957067319422 -107896527414017792767 118320665823821681206 -114918561167106576639 100537991844787325512 -104450760987525660219 107992936493665613654 -118207880179234484610 106189723444098348646 -115622466243011136115 107033731246200681024 -112364132652438722780 100537991844787325512 -100353346783543697435 100939735623367202041 -107753428759636856492 102034052532213921839 -109170680659355634945 114790574178411061829 -103207773865797007066 117012574629989558450 -100397511207083609950 106812355611465528242 -115963821022986200770 103325969492772452485 -109581870574956225297 105006381068870463173 -100397511207083609950 101704103161442695877 -111091089527727420853 115739148151601573808 -116207701819773193333 103493459351957813291 -100173452066172931939 117421021456205115327 -103100496883422151101 104364058018116761460 -110318982509514011806 107033731246200681024 -118418436905562612953 102048265612444661933 -104987932455782713675 113210431006401244170 -106026445270708973611 101261243957067319422 -117421021456205115327 113247423264358423892 -103016521073558596116 117921656724816772352 -115739378269261680935 101246601531247561585 -107006059340452534782 114791921155677330282 -109009089551467495747 109170680659355634945 -112878918236054024365 106695181236161584825 -112944532473909341307 103012564142649561853 -100397511207083609950 103475991020114516832 -111538009015644508967 106345802537137414958 -109304903996729396661 117421021456205115327 -108000051912603578599 118086737936443306746 -109170680659355634945 115883560681104199404 -112364132652438722780 104560124403688998123 -108082478497335384404 109813896768294978296 -114152150496380806218 113722523501415106689 -107753428759636856492 107992936493665613654 -112276589013569458330 113247423264358423892 -100173452066172931939 112844561713780016118 -103016521073558596116 106312895983244085949 -116374117927631468606 103016521073558596116 -108434394145774737013 116762461061414014956 -101246601531247561585 109603191376504998413 -107519026002586025827 107896527414017792767 -115565811010545226083 103537420161725387429 -108817085747440374986 109895887909967698705 -105076678694475690385 107117483540235115863 -117921656724816772352 113624688426259176181 -115622466243011136115 114790574178411061829 -112016425853417877466 107234826207633309420 -116374117927631468606 111091089527727420853 -111975545018506506119 115109077044202722504 -109182513536739786206 112364132652438722780 -112016425853417877466 100262595546646927505 -114918561167106576639 115360979797396777969 -109182513536739786206 109778238062128383421 -115360979797396777969 107006059340452534782 -113612142759476883204 118245559326500322262 -109780617142585395916 105006381068870463173 -106312895983244085949 115478779964227301239 -104618664838382110366 104612091113514802664 -106122462724662012890 106189723444098348646 -102545157386069758709 108255750659110762991 -112016425853417877466 105400903062771750089 -104383523254857614001 117921656724816772352 -103100496883422151101 104191514233385365427 -108082478497335384404 115565811010545226083 -109809835379677001002 115047896996200277508 -100093902492789669774 109895887909967698705 -101057616370673656059 113920721823301219308 -100397511207083609950 104987932455782713675 -116192724891839469024 103691312271671214670 -109304903996729396661 109809835379677001002 -102545157386069758709 104450760987525660219 -106026445270708973611 114244914082871792125 -100397511207083609950 115478779964227301239 -117377434815709898403 116762461061414014956 -101246601531247561585 110318982509514011806 -111091089527727420853 111285782175840598932 -107519026002586025827 100084737546039360199 -109170680659355634945 117477042502591652021 -108000051912603578599 116388668762198604003 -115622466243011136115 103660543175586203250 -110774757382682582490 114632854492678778509 -106224435901697064976 109809835379677001002 -111091089527727420853 100523784851251213675 -103016521073558596116 101849747879612982297 -117421021456205115327 100397511207083609950 -110731951130561423918 115920538018564742940 -112364132652438722780 112063946124358686266 -115739378269261680935 104964811874969620954 -111707854651652464890 101261243957067319422 -102512310412972518336 103153499873703329897 -106925005603331131101 104364058018116761460 -115739148151601573808 117477042502591652021 -109304903996729396661 109412257237874861202 -107753428759636856492 109581870574956225297 -100397511207083609950 111091089527727420853 -111310990991240556038 100019606796298306813 -118245559326500322262 114918561167106576639 -105076678694475690385 103660543175586203250 -100871232248276491534 108176814619778619437 -102512310412972518336 115565811010545226083 -102512310412972518336 100173452066172931939 -112944532473909341307 115478779964227301239 -108574688020691152748 114632854492678778509 -108894779805940659869 102714736581619876511 -101094440579835956866 118207880179234484610 -111538009015644508967 113166718268343560861 -115739378269261680935 100537991844787325512 -102034052532213921839 106345802537137414958 -109247306373593947755 102178700954286324866 -106695181236161584825 100019606796298306813 -109581870574956225297 118320665823821681206 -105901259206530390933 103716847685048716973 -115739378269261680935 104066486855641683676 -117477042502591652021 107992936493665613654 -107090629815001792243 115341960624782381062 -113166718268343560861 103171849011748425097 -102034052532213921839 109895887909967698705 -116548025566090395827 100353346783543697435 -110650241045258158224 110728349411116483031 -108869261693909788407 104066486855641683676 -109009089551467495747 115706830138905259568 -104364058018116761460 112844561713780016118 -102512310412972518336 103112588675637065591 -113047102292798770205 106695181236161584825 -100269980559891536109 107519026002586025827 -103100496883422151101 113164038788726940319 -109504122343901736603 117550971892000156946 -109304903996729396661 100397511207083609950 -104870518715355770532 110286587261352351537 -105127770807562691674 118245559326500322262 -105822688186016123722 108817085747440374986 -112276589013569458330 101213524574984631953 -113801236315350503728 116723923766489326849 -101261243957067319422 114790574178411061829 -102216887206636463918 116621986644249676039 -115064258994656104138 107117483540235115863 -113920721823301219308 111654284395316165338 -107781761552417614958 103660543175586203250 -100397511207083609950 116768967108862685383 -108574688020691152748 102048265612444661933 -101057616370673656059 109412257237874861202 -113116318008017777871 109182513536739786206 -106224435901697064976 112844561713780016118 -102403331307606219198 116107530889292552664 -118418436905562612953 110286587261352351537 -115527632958457358109 117421021456205115327 -108899222163640713555 105006381068870463173 -105705665708025552983 106189723444098348646 -115064258994656104138 106224435901697064976 -114244914082871792125 111091089527727420853 -100353346783543697435 102010610384685218706 -103016521073558596116 100173452066172931939 -117377434815709898403 113920721823301219308 -115478779964227301239 117691391504351341685 -108129202557078877094 115064258994656104138 -115963821022986200770 107133948555394893679 -102216887206636463918 100535338638690515335 -108894779805940659869 104383523254857614001 -114244914082871792125 114632854492678778509 -100535338638690515335 112063946124358686266 -101057616370673656059 104612091113514802664 -115403621788538540544 118156281382429939997 -115963821022986200770 109412257237874861202 -115109077044202722504 116621986644249676039 -112016425853417877466 107753428759636856492 -109931095616224405271 104618664838382110366 -106312895983244085949 114079920283986872783 -100894876340926769800 103153499873703329897 -114918561167106576639 100269980559891536109 -106312895983244085949 105822688186016123722 -107006059340452534782 113920721823301219308 -117421021456205115327 105705665708025552983 -113612142759476883204 100523784851251213675 -109504122343901736603 114918561167106576639 -109504122343901736603 109778238062128383421 -105705665708025552983 115565811010545226083 -118245559326500322262 105127770807562691674 -108082478497335384404 108574688020691152748 -109504122343901736603 103660543175586203250 -102088173699409175139 102216887206636463918 -109504122343901736603 109813896768294978296 -101720949843787442951 115565811010545226083 -103207773865797007066 109780617142585395916 -103207773865797007066 116192724891839469024 -111666959095947698908 103567864289861449366 -111666959095947698908 106189723444098348646 -100173452066172931939 107781761552417614958 -100084737546039360199 115047896996200277508 -117691391504351341685 112820512550939559523 -105076678694475690385 109412257237874861202 -107519026002586025827 100262595546646927505 -107896527414017792767 103112588675637065591 -102034052532213921839 115565811010545226083 -102216887206636463918 118264184129842070900 -116773104421165750126 103207773865797007066 -109182513536739786206 114991987213662121376 -116207701819773193333 109813896768294978296 -113612142759476883204 110318982509514011806 -107896527414017792767 103100496883422151101 -105076678694475690385 101057616370673656059 -100397511207083609950 113475277239647026452 -100397511207083609950 113351703941294630458 -115047896996200277508 107303107611470093265 -109170680659355634945 103975368181760158212 -107793717361981126032 105703999093618427814 -105901259206530390933 107781761552417614958 -104987932455782713675 102178700954286324866 -112820512550939559523 106312895983244085949 -117550971892000156946 112063946124358686266 -118245559326500322262 104560124403688998123 -102216887206636463918 107033731246200681024 -101246601531247561585 104450760987525660219 -102654570556058167176 115047896996200277508 -102088173699409175139 113612142759476883204 -117421021456205115327 117693415411676715849 -103100496883422151101 103660543175586203250 -111975545018506506119 111337216646096594888 -115109077044202722504 102654570556058167176 -100397511207083609950 105634350975670602787 -107781761552417614958 109778238062128383421 -103207773865797007066 114244914082871792125 -109304903996729396661 112364132652438722780 -118245559326500322262 108082478497335384404 -112364132652438722780 109074857816744029470 -106312895983244085949 103112588675637065591 -100535338638690515335 109895887909967698705 -100535338638690515335 102034052532213921839 -108832773152747423283 115963821022986200770 -101213524574984631953 108082478497335384404 -110731951130561423918 107968787521028284191 -114758749740576519343 106925005603331131101 -113612142759476883204 115565811010545226083 -113116318008017777871 104987932455782713675 -107519026002586025827 100415723513846680553 -106224435901697064976 100084737546039360199 -112878918236054024365 101600577333348274552 -112364132652438722780 100001826804813287036 -106026445270708973611 103716847685048716973 -108817085747440374986 104226321884965863264 -102512310412972518336 102484577222269062816 -103020619410065980303 109170680659355634945 -113166718268343560861 112339769006469685593 -100397511207083609950 108771911258181286059 -113612142759476883204 109074857816744029470 -112364132652438722780 100084737546039360199 -110728349411116483031 108894779805940659869 -114991987213662121376 108434394145774737013 -112276589013569458330 114790574178411061829 -115739378269261680935 107033731246200681024 -118245559326500322262 113351703941294630458 -112820512550939559523 117691391504351341685 -113047102292798770205 115739148151601573808 -100269980559891536109 118207880179234484610 -116374117927631468606 109809835379677001002 -115739378269261680935 117421021456205115327 -104450760987525660219 104560124403688998123 -115064258994656104138 107753428759636856492 -112364132652438722780 110727249496967897430 -103660543175586203250 114632854492678778509 -114918561167106576639 106312895983244085949 -106812355611465528242 106822154985570317672 -104364058018116761460 103325969492772452485 -102216887206636463918 107753428759636856492 -107753428759636856492 112944532473909341307 -105207943512906810696 109412257237874861202 -104612091113514802664 107753428759636856492 -114918561167106576639 115739148151601573808 -115109077044202722504 101185406398932804414 -102545157386069758709 104964811874969620954 -103975368181760158212 118156281382429939997 -107587075873786034394 105705665708025552983 -101246601531247561585 115403621788538540544 -115963821022986200770 108255750659110762991 -118418436905562612953 114790574178411061829 -104987932455782713675 104612091113514802664 -113801236315350503728 113164038788726940319 -116207701819773193333 115017401467423642930 -103975368181760158212 109170680659355634945 -114918561167106576639 116388668762198604003 -118086737936443306746 101213524574984631953 -101094440579835956866 107753428759636856492 -117683744929337064105 113116318008017777871 -115109077044202722504 112364132652438722780 -117691391504351341685 116374117927631468606 -112944532473909341307 109174551750397653742 -104191514233385365427 105822688186016123722 -102403331307606219198 111422286077941361166 -110318982509514011806 115706830138905259568 -106695181236161584825 101261243957067319422 -113351703941294630458 110318982509514011806 -102654570556058167176 100397143564111754723 -109581870574956225297 116388668762198604003 -109304903996729396661 113612142759476883204 -106122462724662012890 103012564142649561853 -101246601531247561585 111806715084467662398 -106096957694385885466 108869261693909788407 -110014891370822989957 115302451851587317396 -111091089527727420853 101832196121408756348 -109170680659355634945 101704103161442695877 -115109077044202722504 102088173699409175139 -115064258994656104138 101094440579835956866 -115360979797396777969 101057616370673656059 -112276589013569458330 113612142759476883204 -106388983874370865380 101263833299534001868 -105076678694475690385 106100296973968329853 -115622466243011136115 115478779964227301239 -100084737546039360199 114244914082871792125 -114244914082871792125 114790574178411061829 -116621986644249676039 110286587261352351537 -101261243957067319422 104383523254857614001 -109170680659355634945 108434394145774737013 -106312895983244085949 105376842241046675559 -116374117927631468606 100535338638690515335 -112276589013569458330 109895887909967698705 -106096957694385885466 111538009015644508967 -108082478497335384404 104560124403688998123 -101094440579835956866 113116318008017777871 -111422286077941361166 107968787521028284191 -113166718268343560861 111091089527727420853 -104364058018116761460 113247423264358423892 -109581870574956225297 112063946124358686266 -110728349411116483031 111538009015644508967 -115883560681104199404 104191514233385365427 -113351703941294630458 113166718268343560861 -112364132652438722780 103207773865797007066 -102034052532213921839 101213524574984631953 -100397511207083609950 103016521073558596116 -104364058018116761460 115706830138905259568 -113920721823301219308 102034052532213921839 -109174551750397653742 118418436905562612953 -106665185918564754695 115622466243011136115 -103207773865797007066 104987932455782713675 -110774757382682582490 110318982509514011806 -107755092517418534815 116762461061414014956 -112364132652438722780 105376842241046675559 -117691391504351341685 113475277239647026452 -110774757382682582490 118264184129842070900 -108594511384403031361 115963821022986200770 -113116318008017777871 102512310412972518336 -103207773865797007066 107033731246200681024 -108243648069327964538 115706830138905259568 -107519026002586025827 115478779964227301239 -105207943512906810696 118320665823821681206 -112364132652438722780 112016425853417877466 -112364132652438722780 107519026002586025827 -115047896996200277508 111285782175840598932 -107117418142368704725 115047896996200277508 -111666959095947698908 117421021456205115327 -101720949843787442951 104450760987525660219 -109778238062128383421 112276589013569458330 -104612091113514802664 108771911258181286059 -112276589013569458330 114758749740576519343 -110774757382682582490 107117418142368704725 -108082478497335384404 115622466243011136115 -108314259245584185142 107968787521028284191 -107896527414017792767 108082478497335384404 -108082478497335384404 117550971892000156946 -118357356982727825178 103012564142649561853 -107133948555394893679 115963821022986200770 -105901259206530390933 117421021456205115327 -116762461061414014956 112820512550939559523 -104987932455782713675 101261243957067319422 -111538009015644508967 114079920283986872783 -105076678694475690385 118156281382429939997 -103207773865797007066 115302451851587317396 -101600577333348274552 114758749740576519343 -101720949843787442951 115622466243011136115 -101261243957067319422 112339769006469685593 -107753428759636856492 117421021456205115327 -113164038788726940319 114790574178411061829 -105076678694475690385 113247423264358423892 -103016521073558596116 115739148151601573808 -100535338638690515335 100262595546646927505 -108082478497335384404 100523784851251213675 -111091089527727420853 109174551750397653742 -104364058018116761460 107992936493665613654 -104364058018116761460 117477042502591652021 -118357356982727825178 116762461061414014956 -113612142759476883204 101261243957067319422 -115302451851587317396 102178700954286324866 -113920721823301219308 118320665823821681206 -107896527414017792767 114758749740576519343 -115403621788538540544 109247306373593947755 -107753428759636856492 109778238062128383421 -100269980559891536109 112276589013569458330 -115341960624782381062 105703999093618427814 -106695181236161584825 103660543175586203250 -102545157386069758709 102178700954286324866 -106224435901697064976 110318982509514011806 -100093902492789669774 106096957694385885466 -115622466243011136115 107097980510051172895 -101261243957067319422 116773104421165750126 -110318982509514011806 101261243957067319422 -105901259206530390933 111091089527727420853 -115706830138905259568 108000051912603578599 -105901259206530390933 103171849011748425097 -118418436905562612953 108082478497335384404 -114244914082871792125 110727249496967897430 -109247306373593947755 111806715084467662398 -113722523501415106689 116927391465690022495 -115739148151601573808 109247306373593947755 -108894779805940659869 100093902492789669774 -108082478497335384404 107896527414017792767 -111975545018506506119 118320665823821681206 -113166718268343560861 100173452066172931939 -108817085747440374986 116927391465690022495 -102216887206636463918 109813896768294978296 -109778238062128383421 107753428759636856492 -118357356982727825178 107117483540235115863 -112944532473909341307 117421021456205115327 -106026445270708973611 109174551750397653742 -116374117927631468606 107781761552417614958 -111654284395316165338 114244914082871792125 -107519026002586025827 114991987213662121376 -112364132652438722780 109388259228280605303 -105901259206530390933 111310990991240556038 -113612142759476883204 109519167630731639094 -109388259228280605303 116621986644249676039 -106026445270708973611 100856165335040300712 -105901259206530390933 113116318008017777871 -105006381068870463173 106100296973968329853 -101185406398932804414 106312895983244085949 -112820512550939559523 113612142759476883204 -104450760987525660219 113920721823301219308 -107133948555394893679 107753428759636856492 -107519026002586025827 107097980510051172895 -112276589013569458330 100269980559891536109 -115739378269261680935 107968787521028284191 -102545157386069758709 100397143564111754723 -104612091113514802664 107992936493665613654 -105006381068870463173 107699711897781234810 -110774757382682582490 102178700954286324866 -113116318008017777871 107896527414017792767 -101185406398932804414 109174551750397653742 -112878918236054024365 107519026002586025827 -105076678694475690385 113920721823301219308 -107033731246200681024 118207880179234484610 -112364132652438722780 109813896768294978296 -113047102292798770205 108817085747440374986 -116762461061414014956 112944532473909341307 -108817085747440374986 107896527414017792767 -114244914082871792125 110318982509514011806 -104450760987525660219 105705665708025552983 -109581870574956225297 105705665708025552983 -107587075873786034394 117550971892000156946 -102034052532213921839 118418436905562612953 -104450760987525660219 115706830138905259568 -104364058018116761460 109813896768294978296 -107753428759636856492 107968787521028284191 -107006059340452534782 103100496883422151101 -108894779805940659869 109813896768294978296 -108894779805940659869 108952536790629690817 -111422286077941361166 104450760987525660219 -105400903062771750089 113116318008017777871 -104612091113514802664 111285782175840598932 -107133948555394893679 103325969492772452485 -116768967108862685383 109813896768294978296 -105705665708025552983 108434394145774737013 -115302451851587317396 110286587261352351537 -106665185918564754695 100262595546646927505 -101057616370673656059 100856165335040300712 -116773104421165750126 107793717361981126032 -105901259206530390933 102048265612444661933 -117691391504351341685 103171849011748425097 -113920721823301219308 110318982509514011806 -108894779805940659869 107234826207633309420 -109778238062128383421 108255750659110762991 -113166718268343560861 102088173699409175139 -113068441549452664746 114632854492678778509 -107753428759636856492 105076678694475690385 -104364058018116761460 109247306373593947755 -117691391504351341685 114632854492678778509 -113475277239647026452 104560124403688998123 -106224435901697064976 104450760987525660219 -112016425853417877466 108574688020691152748 -115064258994656104138 101261243957067319422 -109504122343901736603 105076678694475690385 -117550971892000156946 117421021456205115327 -105901259206530390933 111707854651652464890 -115478779964227301239 109519167630731639094 -111666959095947698908 107753428759636856492 -104450760987525660219 104618664838382110366 -107753428759636856492 100537991844787325512 -109196389259504239326 103537420161725387429 -114244914082871792125 109809835379677001002 -100173452066172931939 111601729473858041964 -110318982509514011806 102048265612444661933 -105822688186016123722 113612142759476883204 -101057616370673656059 104987932455782713675 -118207880179234484610 109074857816744029470 -111091089527727420853 100173452066172931939 -116374117927631468606 100397511207083609950 -107196172964000631645 101261243957067319422 -114790574178411061829 115047896996200277508 -109504122343901736603 111091089527727420853 -117377434815709898403 111285782175840598932 -113164038788726940319 105400903062771750089 -116773104421165750126 104560124403688998123 -103207773865797007066 104412682128547752131 -101849747879612982297 102216887206636463918 -106096957694385885466 103207773865797007066 -106312895983244085949 118357356982727825178 -100871232248276491534 108952536790629690817 -111091089527727420853 107129852879758941909 -100871232248276491534 109813896768294978296 -112364132652438722780 106312895983244085949 -112820512550939559523 115478779964227301239 -116374117927631468606 115478779964227301239 -104618664838382110366 114632854492678778509 -109504122343901736603 115478779964227301239 -100397511207083609950 102178700954286324866 -118245559326500322262 111091089527727420853 -114918561167106576639 112820512550939559523 -111091089527727420853 115739378269261680935 -114991987213662121376 108000051912603578599 -102484577222269062816 108787861479092510435 -109182513536739786206 103012564142649561853 -105076678694475690385 112063946124358686266 -113612142759476883204 118264184129842070900 -110731951130561423918 104066486855641683676 -100173452066172931939 107753428759636856492 -103100496883422151101 114790574178411061829 -114758749740576519343 109778238062128383421 -108574688020691152748 109809835379677001002 -117550971892000156946 109813896768294978296 -103691312271671214670 101261243957067319422 -100397511207083609950 115527632958457358109 -118245559326500322262 110649214929620497857 -102654570556058167176 101832771958125915909 -107755092517418534815 107896527414017792767 -111337216646096594888 101185406398932804414 -111538009015644508967 105705665708025552983 -112276589013569458330 103716847685048716973 -107753428759636856492 104412682128547752131 -112364132652438722780 113475277239647026452 -112364132652438722780 113210431006401244170 -107519026002586025827 116762461061414014956 -115565811010545226083 103012564142649561853 -115403621788538540544 111337216646096594888 -104987932455782713675 115863474911002159675 -107896527414017792767 100523784851251213675 -109335713877994755095 103567864289861449366 -111654284395316165338 110286587261352351537 -100093902492789669774 116768967108862685383 -109304903996729396661 100269980559891536109 -116207701819773193333 107090629815001792243 -104870518715355770532 103207773865797007066 -106312895983244085949 101569655404865588155 -104612091113514802664 108817085747440374986 -101057616370673656059 100173452066172931939 -106695181236161584825 102048265612444661933 -110318982509514011806 114790574178411061829 -102034052532213921839 112339769006469685593 -111091089527727420853 108832773152747423283 -112820512550939559523 118264184129842070900 -114918561167106576639 109778238062128383421 -114152150496380806218 114359738470992181937 -117477042502591652021 103475991020114516832 -112820512550939559523 110318982509514011806 -105076678694475690385 113116318008017777871 -108894779805940659869 113801236315350503728 -113116318008017777871 118207880179234484610 -108082478497335384404 117691391504351341685 -101261243957067319422 106096957694385885466 -104987932455782713675 114790574178411061829 -104450760987525660219 109809835379677001002 -104450760987525660219 117693415411676715849 -112016425853417877466 103171849011748425097 -102484577222269062816 109931095616224405271 -117691391504351341685 107006059340452534782 -114549564725160709822 111091089527727420853 -110774757382682582490 111285782175840598932 -116621986644249676039 114632854492678778509 -109388259228280605303 118156281382429939997 -111538009015644508967 113612142759476883204 -101263833299534001868 108314259245584185142 -113166718268343560861 113351703941294630458 -100269980559891536109 114948739867290323960 -106096957694385885466 114856222286197208502 -104612091113514802664 116374117927631468606 -103100496883422151101 115863474911002159675 -115047896996200277508 118086737936443306746 -103207773865797007066 101126226710566561379 -105705665708025552983 108082478497335384404 -101246601531247561585 115739378269261680935 -113612142759476883204 109412257237874861202 -100397511207083609950 114790574178411061829 -103016521073558596116 105376842241046675559 -103171849011748425097 108082478497335384404 -111975545018506506119 104987932455782713675 -100173452066172931939 101185406398932804414 -112878918236054024365 107968787521028284191 -111261496925076985134 103207773865797007066 -108000051912603578599 109519167630731639094 -115565811010545226083 107117483540235115863 -106122462724662012890 103325969492772452485 -101569655404865588155 107753428759636856492 -107699711897781234810 101832196121408756348 -109174551750397653742 105376842241046675559 -105901259206530390933 106100296973968329853 -106312895983244085949 108817085747440374986 -110318982509514011806 113116318008017777871 -100397511207083609950 118418436905562612953 -106224435901697064976 109813896768294978296 -103171849011748425097 109813896768294978296 -102512310412972518336 113116318008017777871 -113116318008017777871 103171849011748425097 -100397511207083609950 114244914082871792125 -108952536790629690817 114979733565079457374 -109809835379677001002 107896527414017792767 -117377434815709898403 106925005603331131101 -107133948555394893679 111654284395316165338 -103171849011748425097 104560124403688998123 -113116318008017777871 107117483540235115863 -108817085747440374986 104987932455782713675 -100871232248276491534 114549564725160709822 -107196172964000631645 101849747879612982297 -109182513536739786206 107097980510051172895 -111261496925076985134 101261243957067319422 -113116318008017777871 102048265612444661933 -105076678694475690385 109074857816744029470 -100535338638690515335 104364058018116761460 -108817085747440374986 104612091113514802664 -113116318008017777871 114758749740576519343 -104450760987525660219 109247306373593947755 -103100496883422151101 112944532473909341307 -102034052532213921839 117377434815709898403 -117691391504351341685 109813896768294978296 -103171849011748425097 115565811010545226083 -104412682128547752131 110318982509514011806 -111806715084467662398 118156281382429939997 -104618664838382110366 105901259206530390933 -100084737546039360199 113116318008017777871 -101225750534150134109 113475277239647026452 -107587075873786034394 114758749740576519343 -104383523254857614001 110731951130561423918 -101720949843787442951 113166718268343560861 -106665185918564754695 107992936493665613654 -104450760987525660219 109581870574956225297 -114918561167106576639 111707854651652464890 -107519026002586025827 114791921155677330282 -100535338638690515335 113117251731252114390 -107303107611470093265 111285782175840598932 -109304903996729396661 108574688020691152748 -116926943858449614201 111975545018506506119 -109778238062128383421 108434394145774737013 -117421021456205115327 113117251731252114390 -112016425853417877466 103100496883422151101 -101261243957067319422 109519167630731639094 -108817085747440374986 114979733565079457374 -109170680659355634945 111806715084467662398 -109504122343901736603 111422286077941361166 -111538009015644508967 103020619410065980303 -111538009015644508967 109009089551467495747 -107781761552417614958 108952536790629690817 -101261243957067319422 106837636108890930395 -115527632958457358109 117693415411676715849 -105662484616118909569 106096957694385885466 -108817085747440374986 118357356982727825178 -114918561167106576639 114790574178411061829 -106812355611465528242 115739378269261680935 -100269980559891536109 112339769006469685593 -113116318008017777871 104450760987525660219 -116762461061414014956 106665185918564754695 -115478779964227301239 113210431006401244170 -113047102292798770205 115565811010545226083 -112016425853417877466 112276589013569458330 -106925005603331131101 109778238062128383421 -113116318008017777871 109174551750397653742 -108082478497335384404 109182513536739786206 -100084737546039360199 103171849011748425097 -108832773152747423283 101057616370673656059 -102403331307606219198 103716847685048716973 -104987932455782713675 112364132652438722780 -113166718268343560861 103691312271671214670 -106122462724662012890 115478779964227301239 -109170680659355634945 113166718268343560861 -101261243957067319422 109388259228280605303 -107699711897781234810 115109077044202722504 -102512310412972518336 115064258994656104138 -100093902492789669774 104560124403688998123 -108817085747440374986 100523784851251213675 -109504122343901736603 103171849011748425097 -105076678694475690385 116927391465690022495 -100084737546039360199 112063946124358686266 -113475277239647026452 105076678694475690385 -112944532473909341307 115883560681104199404 -115565811010545226083 109182513536739786206 -106096957694385885466 103582267051807991527 -113164038788726940319 103100496883422151101 -111538009015644508967 116388668762198604003 -116768967108862685383 118418436905562612953 -105400903062771750089 111285782175840598932 -115963821022986200770 102048265612444661933 -101057616370673656059 102512310412972518336 -106026445270708973611 110727249496967897430 -116773104421165750126 106100296973968329853 -104364058018116761460 100397511207083609950 -118418436905562612953 118207880179234484610 -108817085747440374986 109809835379677001002 -101261243957067319422 108000051912603578599 -100173452066172931939 102088173699409175139 -116374117927631468606 109519167630731639094 -102034052532213921839 117691391504351341685 -104987932455782713675 111975545018506506119 -106122462724662012890 115064258994656104138 -100353346783543697435 107753428759636856492 -102216887206636463918 101057616370673656059 -106224435901697064976 116388668762198604003 -115047896996200277508 110448924610029803960 -110728349411116483031 114244914082871792125 -100535338638690515335 100269980559891536109 -101261243957067319422 115527632958457358109 -101261243957067319422 118357356982727825178 -112820512550939559523 107896527414017792767 -106695181236161584825 103716847685048716973 -118156281382429939997 103207773865797007066 -116374117927631468606 109247306373593947755 -115360979797396777969 104364058018116761460 -106224435901697064976 106189723444098348646 -106026445270708973611 105376842241046675559 -109009089551467495747 106925005603331131101 -107519026002586025827 118357356982727825178 -105076678694475690385 107006059340452534782 -114918561167106576639 118245559326500322262 -104450760987525660219 105822688186016123722 -108000051912603578599 114790574178411061829 -109304903996729396661 112339769006469685593 -109778238062128383421 102048265612444661933 -105076678694475690385 115064258994656104138 -110318982509514011806 109182513536739786206 -101261243957067319422 116723923766489326849 -106312895983244085949 112063946124358686266 -107196172964000631645 104560124403688998123 -116374117927631468606 108082478497335384404 -104450760987525660219 101225750534150134109 -112852253337028739987 103475991020114516832 -105901259206530390933 118207880179234484610 -101261243957067319422 102048265612444661933 -117921656724816772352 111032944513257134357 -105901259206530390933 103207773865797007066 -107896527414017792767 100084737546039360199 -108894779805940659869 115047896996200277508 -100856165335040300712 113722523501415106689 -117421021456205115327 100523784851251213675 -102403331307606219198 116621986644249676039 -116762461061414014956 106695181236161584825 -108082478497335384404 116388668762198604003 -112820512550939559523 114790574178411061829 -116773104421165750126 102216887206636463918 -115360979797396777969 106224435901697064976 -106026445270708973611 107626068753267217775 -114244914082871792125 117691391504351341685 -113351703941294630458 116768967108862685383 -108314259245584185142 110286587261352351537 -107133948555394893679 101261243957067319422 -109581870574956225297 115064258994656104138 -107587075873786034394 100019606796298306813 -117377434815709898403 106189723444098348646 -104870518715355770532 106822154985570317672 -107519026002586025827 102178700954286324866 -116723923766489326849 116927391465690022495 -116762461061414014956 104612091113514802664 -107896527414017792767 101057616370673656059 -115565811010545226083 114758749740576519343 -107753428759636856492 113164038788726940319 -100397511207083609950 107699711897781234810 -113612142759476883204 107968787521028284191 -113166718268343560861 108434394145774737013 -113164038788726940319 101261243957067319422 -103207773865797007066 117421021456205115327 -105076678694475690385 109388259228280605303 -108082478497335384404 113117251731252114390 -104618664838382110366 118320665823821681206 -109809835379677001002 118264184129842070900 -108817085747440374986 113166718268343560861 -110014891370822989957 102714736581619876511 -102484577222269062816 101263833299534001868 -102034052532213921839 113920721823301219308 -114152150496380806218 106822154985570317672 -109182513536739786206 105076678694475690385 -102034052532213921839 107234826207633309420 -104450760987525660219 106695181236161584825 -101057616370673656059 111538009015644508967 -109778238062128383421 113116318008017777871 -105632941129656401917 115739378269261680935 -111337216646096594888 105662484616118909569 -103016521073558596116 117477042502591652021 -107090629815001792243 103207773865797007066 -103100496883422151101 109813896768294978296 -107755092517418534815 109170680659355634945 -102545157386069758709 108000051912603578599 -115360979797396777969 109895887909967698705 -106224435901697064976 112276589013569458330 -103016521073558596116 111654284395316165338 -108817085747440374986 116621986644249676039 -102034052532213921839 112844561713780016118 -100415723513846680553 103660543175586203250 -113920721823301219308 108255750659110762991 -117693415411676715849 114821161730370452301 -109780617142585395916 102654570556058167176 -115706830138905259568 108255750659110762991 -108000051912603578599 118207880179234484610 -113612142759476883204 108082478497335384404 -118207880179234484610 109813896768294978296 -105076678694475690385 115863474911002159675 -116491285067171323298 113116318008017777871 -109504122343901736603 109182513536739786206 -106122462724662012890 107519026002586025827 -113475277239647026452 103112588675637065591 -103207773865797007066 111285782175840598932 -112339769006469685593 106665185918564754695 -101126226710566561379 110728349411116483031 -114832793541825307503 104560124403688998123 -108594511384403031361 110649214929620497857 -111975545018506506119 104191514233385365427 -116207701819773193333 114790574178411061829 -102034052532213921839 111091089527727420853 -113116318008017777871 103100496883422151101 -107992936493665613654 107781761552417614958 -101261243957067319422 113801236315350503728 -103100496883422151101 115565811010545226083 -107896527414017792767 113475277239647026452 -105076678694475690385 101261243957067319422 -107753428759636856492 109074857816744029470 -103325969492772452485 111091089527727420853 -116762461061414014956 113116318008017777871 -109304903996729396661 102034052532213921839 -109809835379677001002 103716847685048716973 -117377434815709898403 102425976203575211068 -102512310412972518336 109581870574956225297 -100173452066172931939 104792450024518550569 -100173452066172931939 106026445270708973611 -117477042502591652021 114244914082871792125 -108143819792337559199 108000051912603578599 -117550971892000156946 107587075873786034394 -101261243957067319422 115739378269261680935 -105076678694475690385 111538009015644508967 -111666959095947698908 104560124403688998123 -113920721823301219308 103112588675637065591 -117012574629989558450 106096957694385885466 -105901259206530390933 101849747879612982297 -106312895983244085949 112844561713780016118 -108817085747440374986 109780617142585395916 -106096957694385885466 106100296973968329853 -111337216646096594888 101246601531247561585 -116621986644249676039 100262595546646927505 -112276589013569458330 116762461061414014956 -112339769006469685593 111091089527727420853 -104364058018116761460 114079920283986872783 -111538009015644508967 116773104421165750126 -104612091113514802664 105076678694475690385 -104612091113514802664 105705665708025552983 -109196389259504239326 101213524574984631953 -103020619410065980303 104191514233385365427 -118245559326500322262 115047896996200277508 -108434394145774737013 104412682128547752131 -103493459351957813291 108894779805940659869 -115565811010545226083 108817085747440374986 -101225750534150134109 117683744929337064105 -109182513536739786206 115622466243011136115 -104450760987525660219 105376842241046675559 -113351703941294630458 115565811010545226083 -117377434815709898403 100397511207083609950 -108817085747440374986 108255750659110762991 -111091089527727420853 115622466243011136115 -107129852879758941909 104191514233385365427 -105705665708025552983 109182513536739786206 -103016521073558596116 105901259206530390933 -106312895983244085949 113612142759476883204 -111538009015644508967 108817085747440374986 -104450760987525660219 111285782175840598932 -100397511207083609950 104412682128547752131 -115565811010545226083 113351703941294630458 -115883560681104199404 109182513536739786206 -100535338638690515335 106312895983244085949 -112364132652438722780 115863474911002159675 -104364058018116761460 101094440579835956866 -106224435901697064976 103012564142649561853 -115109077044202722504 104792450024518550569 -109196389259504239326 115064258994656104138 -101832196121408756348 102088173699409175139 -109174551750397653742 109519167630731639094 -100084737546039360199 114791921155677330282 -117421021456205115327 118207880179234484610 -115739148151601573808 107753428759636856492 -115017401467423642930 109388259228280605303 -115047896996200277508 107753428759636856492 -109504122343901736603 118245559326500322262 -104191514233385365427 115739378269261680935 -104870518715355770532 107968787521028284191 -109304903996729396661 118264184129842070900 -105901259206530390933 107896527414017792767 -111538009015644508967 110318982509514011806 -116374117927631468606 114244914082871792125 -109809835379677001002 112276589013569458330 -113801236315350503728 111091089527727420853 -109174551750397653742 109074857816744029470 -103207773865797007066 107308976571078250231 -105634350975670602787 101213524574984631953 -117691391504351341685 113612142759476883204 -100173452066172931939 112276589013569458330 -115739148151601573808 101849747879612982297 -112364132652438722780 116107530889292552664 -111422286077941361166 100262595546646927505 -102034052532213921839 113801236315350503728 -103100496883422151101 106665185918564754695 -106026445270708973611 112063946124358686266 -107006059340452534782 101057616370673656059 -101261243957067319422 117477042502591652021 -100397511207083609950 113247423264358423892 -109174551750397653742 104450760987525660219 -103493459351957813291 115017401467423642930 -101569655404865588155 103112588675637065591 -102512310412972518336 117693415411676715849 -113166718268343560861 117377434815709898403 -113164038788726940319 110286587261352351537 -103207773865797007066 103325969492772452485 -107006059340452534782 106312895983244085949 -113047102292798770205 117477042502591652021 -104412682128547752131 101261243957067319422 -111422286077941361166 110286587261352351537 -108832773152747423283 104450760987525660219 -103207773865797007066 106096957694385885466 -104870518715355770532 115302451851587317396 -117377434815709898403 113247423264358423892 -104612091113514802664 104987932455782713675 -114734885658057433270 105400903062771750089 -111538009015644508967 114632854492678778509 -103016521073558596116 118207880179234484610 -107753428759636856492 101481313915867030905 -115478779964227301239 118207880179234484610 -107117418142368704725 111285782175840598932 -103100496883422151101 111091089527727420853 -106096957694385885466 113624688426259176181 -109603191376504998413 114832793541825307503 -106096957694385885466 110286587261352351537 -102512310412972518336 106100296973968329853 -100894876340926769800 115302451851587317396 -107519026002586025827 114790574178411061829 -118245559326500322262 106100296973968329853 -116192724891839469024 104870518715355770532 -111975545018506506119 118207880179234484610 -115302451851587317396 107753428759636856492 -111091089527727420853 106822154985570317672 -113166718268343560861 117693415411676715849 -112016425853417877466 102088173699409175139 -102512310412972518336 101849747879612982297 -115739378269261680935 103691312271671214670 -102034052532213921839 107587075873786034394 -114152150496380806218 112364132652438722780 -100173452066172931939 106312895983244085949 -110318982509514011806 116762461061414014956 -106925005603331131101 104450760987525660219 -112276589013569458330 107753428759636856492 -104987932455782713675 107234826207633309420 -118017787526225833770 104870518715355770532 -116762461061414014956 102545157386069758709 -116621986644249676039 101704103161442695877 -107196172964000631645 107896527414017792767 -109247306373593947755 116621986644249676039 -104612091113514802664 116762461061414014956 -107753428759636856492 117377434815709898403 -115739378269261680935 115017401467423642930 -109182513536739786206 114790574178411061829 -105901259206530390933 102088173699409175139 -109196389259504239326 115047896996200277508 -116762461061414014956 113801236315350503728 -100397511207083609950 101057616370673656059 -113166718268343560861 112364132652438722780 -102654570556058167176 103582267051807991527 -111538009015644508967 118357356982727825178 -109581870574956225297 114991987213662121376 -114549564725160709822 111285782175840598932 -108952536790629690817 102484577222269062816 -100084737546039360199 105076678694475690385 -115739378269261680935 116927391465690022495 -115739378269261680935 102088173699409175139 -104618664838382110366 101261243957067319422 -117377434815709898403 100084737546039360199 -103016521073558596116 106100296973968329853 -103691312271671214670 113801236315350503728 -106925005603331131101 114758749740576519343 -103325969492772452485 118357356982727825178 -102034052532213921839 107519026002586025827 -107006059340452534782 117693415411676715849 -108832773152747423283 104987932455782713675 -107896527414017792767 105076678694475690385 -116723923766489326849 107699711897781234810 -117691391504351341685 117550971892000156946 -110731951130561423918 106263529626268281828 -114991987213662121376 100019606796298306813 -105076678694475690385 107033731246200681024 -103100496883422151101 108434394145774737013 -109581870574956225297 115622466243011136115 -112016425853417877466 118264184129842070900 -108434394145774737013 107896527414017792767 -116374117927631468606 109074857816744029470 -117377434815709898403 102545157386069758709 -109504122343901736603 108817085747440374986 -116374117927631468606 109931095616224405271 -102512310412972518336 118357356982727825178 -113116318008017777871 111654284395316165338 -115527632958457358109 107968787521028284191 -115109077044202722504 105076678694475690385 -109809835379677001002 101094440579835956866 -102403331307606219198 110286587261352351537 -115478779964227301239 113920721823301219308 -102403331307606219198 114244914082871792125 -115622466243011136115 109504122343901736603 -109247306373593947755 102484577222269062816 -106312895983244085949 118264184129842070900 -100173452066172931939 103207773865797007066 -112016425853417877466 118357356982727825178 -109174551750397653742 113247423264358423892 -116621986644249676039 102512310412972518336 -116762461061414014956 107097980510051172895 -100397511207083609950 106189723444098348646 -104612091113514802664 100084737546039360199 -105076678694475690385 104450760987525660219 -117921656724816772352 103691312271671214670 -100084737546039360199 101094440579835956866 -104364058018116761460 106122462724662012890 -100397511207083609950 114979733565079457374 -106695181236161584825 102034052532213921839 -109247306373593947755 103207773865797007066 -105822688186016123722 109581870574956225297 -106925005603331131101 115478779964227301239 -110731951130561423918 115739378269261680935 -118086737936443306746 114991987213662121376 -114758749740576519343 113117251731252114390 -107896527414017792767 103325969492772452485 -103016521073558596116 107992936493665613654 -104364058018116761460 107117483540235115863 -107587075873786034394 103660543175586203250 -115017401467423642930 103207773865797007066 -108817085747440374986 109074857816744029470 -101261243957067319422 114549564725160709822 -117377434815709898403 101094440579835956866 -109581870574956225297 110318982509514011806 -107133948555394893679 108082478497335384404 -114991987213662121376 115883560681104199404 -108000051912603578599 114979733565079457374 -101849747879612982297 107896527414017792767 -101261243957067319422 114821161730370452301 -112944532473909341307 106925005603331131101 -104870518715355770532 107753428759636856492 -113047102292798770205 118207880179234484610 -116762461061414014956 108255750659110762991 -109809835379677001002 108255750659110762991 -118017787526225833770 104066486855641683676 -117477042502591652021 108817085747440374986 -106665185918564754695 103012564142649561853 -112364132652438722780 115017401467423642930 -116762461061414014956 109504122343901736603 -100397511207083609950 106100296973968329853 -109170680659355634945 116107530889292552664 -117691391504351341685 110286587261352351537 -117377434815709898403 117691391504351341685 -110728349411116483031 115920538018564742940 -107587075873786034394 109809835379677001002 -104612091113514802664 113801236315350503728 -107129852879758941909 107308976571078250231 -104450760987525660219 115739148151601573808 -103171849011748425097 118207880179234484610 -102034052532213921839 105376842241046675559 -115963821022986200770 101261243957067319422 -103691312271671214670 103207773865797007066 -111091089527727420853 105030465637303791249 -108817085747440374986 112276589013569458330 -108817085747440374986 113047102292798770205 -104450760987525660219 100019606796298306813 -104412682128547752131 114948739867290323960 -109931095616224405271 104612091113514802664 -102034052532213921839 106925005603331131101 -117691391504351341685 105705665708025552983 -115360979797396777969 118207880179234484610 -111310990991240556038 104612091113514802664 -117691391504351341685 109895887909967698705 -118418436905562612953 104987932455782713675 -102512310412972518336 101261243957067319422 -103207773865797007066 109247306373593947755 -101261243957067319422 111091089527727420853 -111975545018506506119 108894779805940659869 -107519026002586025827 116388668762198604003 -115739378269261680935 106026445270708973611 -112339769006469685593 112063946124358686266 -115565811010545226083 109174551750397653742 -101057616370673656059 100257676670422660178 -105006381068870463173 105901259206530390933 -115739148151601573808 105076678694475690385 -116762461061414014956 115706830138905259568 -104450760987525660219 111310990991240556038 -112364132652438722780 113612142759476883204 -101849747879612982297 115360979797396777969 -105076678694475690385 115047896996200277508 -100173452066172931939 113920721823301219308 -115360979797396777969 116388668762198604003 -108082478497335384404 102178700954286324866 -105662484616118909569 104412682128547752131 -117921656724816772352 108176814619778619437 -117377434815709898403 100535338638690515335 -109504122343901736603 102403331307606219198 -117377434815709898403 106312895983244085949 -111806715084467662398 115739378269261680935 -115739378269261680935 112063946124358686266 -111422286077941361166 115739148151601573808 -116374117927631468606 109174551750397653742 -105076678694475690385 109809835379677001002 -100871232248276491534 106096957694385885466 -117377434815709898403 111538009015644508967 -107781761552417614958 109581870574956225297 -117691391504351341685 112276589013569458330 -108574688020691152748 103171849011748425097 -115963821022986200770 118418436905562612953 -116762461061414014956 107753428759636856492 -109504122343901736603 113210431006401244170 -107117418142368704725 112339769006469685593 -110318982509514011806 104191514233385365427 -109809835379677001002 107753428759636856492 -102403331307606219198 115047896996200277508 -107196172964000631645 108314259245584185142 -115739378269261680935 109581870574956225297 -105076678694475690385 100173452066172931939 -107196172964000631645 107133948555394893679 -113164038788726940319 113247423264358423892 -115047896996200277508 117693415411676715849 -103691312271671214670 112364132652438722780 -108817085747440374986 111285782175840598932 -100084737546039360199 106312895983244085949 -103493459351957813291 116773104421165750126 -113612142759476883204 118418436905562612953 -115360979797396777969 112063946124358686266 -109304903996729396661 110727249496967897430 -106224435901697064976 105076678694475690385 -109809835379677001002 106312895983244085949 -113166718268343560861 110286587261352351537 -103207773865797007066 105632941129656401917 -102545157386069758709 114079920283986872783 -108082478497335384404 103325969492772452485 -109174551750397653742 106312895983244085949 -107755092517418534815 115109077044202722504 -104612091113514802664 108255750659110762991 -118207880179234484610 109174551750397653742 -115302451851587317396 109335713877994755095 -111538009015644508967 105076678694475690385 -100084737546039360199 115706830138905259568 -105705665708025552983 103716847685048716973 -108314259245584185142 108787861479092510435 -111538009015644508967 108000051912603578599 -111538009015644508967 103493459351957813291 -115739378269261680935 113116318008017777871 -107196172964000631645 112063946124358686266 -115109077044202722504 118207880179234484610 -100173452066172931939 118320665823821681206 -102034052532213921839 114790574178411061829 -113920721823301219308 101261243957067319422 -110774757382682582490 116773104421165750126 -107519026002586025827 109581870574956225297 -115064258994656104138 103012564142649561853 -109170680659355634945 109247306373593947755 -104612091113514802664 104450760987525660219 -103325969492772452485 108255750659110762991 -101481313915867030905 115047896996200277508 -116207701819773193333 108574688020691152748 -116374117927631468606 111707854651652464890 -101261243957067319422 104987932455782713675 -107196172964000631645 103171849011748425097 -107033731246200681024 103012564142649561853 -107519026002586025827 108817085747440374986 -115302451851587317396 109412257237874861202 -104618664838382110366 114918561167106576639 -104987932455782713675 112339769006469685593 -115478779964227301239 101629211371073711149 -108832773152747423283 108082478497335384404 -116207701819773193333 107033731246200681024 -104618664838382110366 115963821022986200770 -117691391504351341685 107992936493665613654 -116374117927631468606 105076678694475690385 -106925005603331131101 106695181236161584825 -101481313915867030905 109504122343901736603 -114918561167106576639 107097980510051172895 -115109077044202722504 106189723444098348646 -116762461061414014956 102048265612444661933 -107519026002586025827 110649214929620497857 -115478779964227301239 114758749740576519343 -102034052532213921839 103493459351957813291 -115360979797396777969 112276589013569458330 -113116318008017777871 102545157386069758709 -101213524574984631953 114790574178411061829 -106122462724662012890 104987932455782713675 -115047896996200277508 105006381068870463173 -102545157386069758709 103112588675637065591 -114991987213662121376 104412682128547752131 -115739378269261680935 117693415411676715849 -117377434815709898403 114790574178411061829 -107753428759636856492 106695181236161584825 -112944532473909341307 114991987213662121376 -111707854651652464890 116374117927631468606 -106695181236161584825 114758749740576519343 -117691391504351341685 101261243957067319422 -103207773865797007066 100001826804813287036 -109196389259504239326 114791921155677330282 -105632941129656401917 104226321884965863264 -107587075873786034394 107781761552417614958 -113166718268343560861 109813896768294978296 -101720949843787442951 102403331307606219198 -103112588675637065591 106224435901697064976 -108314259245584185142 108176814619778619437 -111806715084467662398 109170680659355634945 -114244914082871792125 114549564725160709822 -111538009015644508967 108255750659110762991 -115478779964227301239 102034052532213921839 -111310990991240556038 113116318008017777871 -108817085747440374986 109388259228280605303 -100173452066172931939 116762461061414014956 -101057616370673656059 110774757382682582490 -106026445270708973611 101094440579835956866 -116762461061414014956 106189723444098348646 -116773104421165750126 101261243957067319422 -104612091113514802664 114632854492678778509 -103691312271671214670 115109077044202722504 -101261243957067319422 116374117927631468606 -115017401467423642930 109335713877994755095 -106224435901697064976 109174551750397653742 -111310990991240556038 102048265612444661933 -109182513536739786206 108817085747440374986 -115963821022986200770 102403331307606219198 -116621986644249676039 112844561713780016118 -108000051912603578599 107097980510051172895 -114790574178411061829 109074857816744029470 -109170680659355634945 102654570556058167176 -113166718268343560861 115565811010545226083 -101261243957067319422 110367546804237452889 -113068441549452664746 103012564142649561853 -105400369085832308485 112364132652438722780 -105703999093618427814 106822154985570317672 -115527632958457358109 118418436905562612953 -115565811010545226083 103716847685048716973 -106026445270708973611 105400903062771750089 -101225750534150134109 102178700954286324866 -101057616370673656059 109074857816744029470 -101600577333348274552 116374117927631468606 -103016521073558596116 109412257237874861202 -109182513536739786206 110318982509514011806 -112364132652438722780 116621986644249676039 -117377434815709898403 105006381068870463173 -112016425853417877466 107033731246200681024 -100093902492789669774 105006381068870463173 -115739148151601573808 118245559326500322262 -116762461061414014956 104870518715355770532 -115706830138905259568 109412257237874861202 -100093902492789669774 106189723444098348646 -112820512550939559523 115047896996200277508 -109388259228280605303 116927391465690022495 -100856165335040300712 101057616370673656059 -113612142759476883204 113210431006401244170 -103207773865797007066 118017787526225833770 -109182513536739786206 114979733565079457374 -117691391504351341685 105634350975670602787 -113801236315350503728 118245559326500322262 -116762461061414014956 104987932455782713675 -109809835379677001002 107587075873786034394 -102512310412972518336 109074857816744029470 -108574688020691152748 118264184129842070900 -103691312271671214670 111261496925076985134 -116388668762198604003 103716847685048716973 -103207773865797007066 108314259245584185142 -112276589013569458330 102178700954286324866 -107196172964000631645 106695181236161584825 -103660543175586203250 109519167630731639094 -102216887206636463918 116773104421165750126 -113475277239647026452 103171849011748425097 -100535338638690515335 111285782175840598932 -112820512550939559523 112844561713780016118 -118086737936443306746 108000051912603578599 -102034052532213921839 116768967108862685383 -110318982509514011806 112878918236054024365 -115739148151601573808 103171849011748425097 -101832196121408756348 115017401467423642930 -109304903996729396661 113475277239647026452 -102654570556058167176 104560124403688998123 -100856165335040300712 103100496883422151101 -100535338638690515335 104987932455782713675 -102034052532213921839 106189723444098348646 -106096957694385885466 105006381068870463173 -115302451851587317396 111666959095947698908 -115963821022986200770 110727249496967897430 -103100496883422151101 100535338638690515335 -115739148151601573808 102403331307606219198 -102654570556058167176 103207773865797007066 -109809835379677001002 106189723444098348646 -102403331307606219198 105076678694475690385 -112339769006469685593 107117418142368704725 -103016521073558596116 108176814619778619437 -108817085747440374986 112944532473909341307 -112364132652438722780 101057616370673656059 -109247306373593947755 117477042502591652021 -100397143564111754723 118245559326500322262 -102034052532213921839 115478779964227301239 -104450760987525660219 100415723513846680553 -102512310412972518336 103012564142649561853 -111032944513257134357 104870518715355770532 -101832196121408756348 113166718268343560861 -102403331307606219198 103207773865797007066 -111091089527727420853 100397511207083609950 -102545157386069758709 109813896768294978296 -102034052532213921839 106665185918564754695 -111337216646096594888 109247306373593947755 -105076678694475690385 116621986644249676039 -108894779805940659869 100537991844787325512 -114079920283986872783 103171849011748425097 -101832196121408756348 107699711897781234810 -104987932455782713675 103171849011748425097 -102088173699409175139 111538009015644508967 -111310990991240556038 102545157386069758709 -106345802537137414958 104191514233385365427 -104612091113514802664 112276589013569458330 -102484577222269062816 110286587261352351537 -109504122343901736603 113116318008017777871 -104618664838382110366 106695181236161584825 -105207943512906810696 103112588675637065591 -104618664838382110366 103475991020114516832 -100856165335040300712 115109077044202722504 -113116318008017777871 115360979797396777969 -112878918236054024365 100019606796298306813 -113047102292798770205 103012564142649561853 -104412682128547752131 114790574178411061829 -109196389259504239326 118357356982727825178 -106312895983244085949 111666959095947698908 -111538009015644508967 114790574178411061829 -104870518715355770532 116773104421165750126 -101261243957067319422 115017401467423642930 -107090629815001792243 101261243957067319422 -109304903996729396661 114790574178411061829 -109182513536739786206 118357356982727825178 -103207773865797007066 105400369085832308485 -113612142759476883204 105376842241046675559 -107753428759636856492 117691391504351341685 -115622466243011136115 109581870574956225297 -111091089527727420853 104618664838382110366 -115360979797396777969 107117418142368704725 -108000051912603578599 102034052532213921839 -105207943512906810696 100537991844787325512 -106312895983244085949 107006059340452534782 -115739148151601573808 112852253337028739987 -111310990991240556038 112844561713780016118 -106096957694385885466 103475991020114516832 -117377434815709898403 102048265612444661933 -111538009015644508967 117477042502591652021 -104612091113514802664 102403331307606219198 -115963821022986200770 103171849011748425097 -113920721823301219308 113210431006401244170 -100415723513846680553 114758749740576519343 -111422286077941361166 114632854492678778509 -112820512550939559523 107133948555394893679 -103493459351957813291 115739378269261680935 -112364132652438722780 103493459351957813291 -101569655404865588155 100084737546039360199 -101057616370673656059 116768967108862685383 -104450760987525660219 103112588675637065591 -115739148151601573808 118320665823821681206 -101246601531247561585 102654570556058167176 -116388668762198604003 104560124403688998123 -112364132652438722780 102178700954286324866 -100084737546039360199 102048265612444661933 -101720949843787442951 114632854492678778509 -111422286077941361166 109504122343901736603 -109504122343901736603 116388668762198604003 -115622466243011136115 107117483540235115863 -117421021456205115327 114790574178411061829 -116762461061414014956 108434394145774737013 -115109077044202722504 116723923766489326849 -108817085747440374986 104191514233385365427 -115047896996200277508 103112588675637065591 -105207943512906810696 108832773152747423283 -114832793541825307503 111285782175840598932 -101246601531247561585 109519167630731639094 -111666959095947698908 113351703941294630458 -100397511207083609950 114758749740576519343 -116207701819773193333 118357356982727825178 -115527632958457358109 103325969492772452485 -109182513536739786206 109581870574956225297 -105901259206530390933 111975545018506506119 -107519026002586025827 107033731246200681024 -103207773865797007066 105822688186016123722 -113047102292798770205 109813896768294978296 -106224435901697064976 115565811010545226083 -110731951130561423918 105822688186016123722 -105705665708025552983 107033731246200681024 -112276589013569458330 115963821022986200770 -113116318008017777871 101225750534150134109 -113166718268343560861 109412257237874861202 -102512310412972518336 112063946124358686266 -100084737546039360199 104450760987525660219 -118357356982727825178 109813896768294978296 -110728349411116483031 103207773865797007066 -116207701819773193333 103537420161725387429 -116374117927631468606 104612091113514802664 -115302451851587317396 112157588278319557323 -102425976203575211068 108817085747440374986 -107303107611470093265 109196389259504239326 -113164038788726940319 101057616370673656059 -113722523501415106689 107090629815001792243 -113116318008017777871 115064258994656104138 -108817085747440374986 102545157386069758709 -113164038788726940319 109519167630731639094 -108082478497335384404 105634350975670602787 -115963821022986200770 116388668762198604003 -115739378269261680935 101261243957067319422 -103153499873703329897 100856165335040300712 -114918561167106576639 107196172964000631645 -105076678694475690385 103493459351957813291 -115360979797396777969 114244914082871792125 -105076678694475690385 115706830138905259568 -102034052532213921839 109813896768294978296 -116374117927631468606 112063946124358686266 -108894779805940659869 110286587261352351537 -110318982509514011806 115478779964227301239 -112276589013569458330 118357356982727825178 -114918561167106576639 107781761552417614958 -105076678694475690385 115017401467423642930 -101600577333348274552 103660543175586203250 -111091089527727420853 101629211371073711149 -112016425853417877466 114549564725160709822 -117691391504351341685 114790574178411061829 -107896527414017792767 115963821022986200770 -111975545018506506119 115017401467423642930 -107753428759636856492 106122462724662012890 -107006059340452534782 107968787521028284191 -102403331307606219198 112878918236054024365 -115739378269261680935 104560124403688998123 -116762461061414014956 109182513536739786206 -100269980559891536109 107896527414017792767 -111091089527727420853 116927391465690022495 -107896527414017792767 114979733565079457374 -101057616370673656059 113116318008017777871 -106695181236161584825 113047102292798770205 -104412682128547752131 108434394145774737013 -113351703941294630458 101720949843787442951 -115622466243011136115 113247423264358423892 -101057616370673656059 111310990991240556038 -112016425853417877466 107968787521028284191 -101057616370673656059 101261243957067319422 -107753428759636856492 103112588675637065591 -112944532473909341307 109895887909967698705 -115109077044202722504 110209787594312878744 -109304903996729396661 112844561713780016118 -106695181236161584825 115963821022986200770 -103016521073558596116 103012564142649561853 -106665185918564754695 111091089527727420853 -115739148151601573808 113247423264358423892 -109196389259504239326 105400903062771750089 -107781761552417614958 102425976203575211068 -109581870574956225297 103171849011748425097 -114244914082871792125 101261243957067319422 -117691391504351341685 105376842241046675559 -107090629815001792243 114152150496380806218 -103016521073558596116 115622466243011136115 -111091089527727420853 100084737546039360199 -107090629815001792243 116107530889292552664 -108000051912603578599 115622466243011136115 -100084737546039360199 105400903062771750089 -117691391504351341685 101225750534150134109 -110448924610029803960 100353346783543697435 -117550971892000156946 115963821022986200770 -103325969492772452485 106312895983244085949 -117377434815709898403 115863474911002159675 -100856165335040300712 103716847685048716973 -107753428759636856492 114991987213662121376 -112339769006469685593 106122462724662012890 -103691312271671214670 110318982509514011806 -109778238062128383421 102034052532213921839 -109247306373593947755 107587075873786034394 -100415723513846680553 114632854492678778509 -106122462724662012890 102048265612444661933 -109778238062128383421 114758749740576519343 -114758749740576519343 113116318008017777871 -100871232248276491534 106100296973968329853 -101246601531247561585 109170680659355634945 -114918561167106576639 106925005603331131101 -112276589013569458330 112820512550939559523 -109304903996729396661 115863474911002159675 -103016521073558596116 100537991844787325512 -112016425853417877466 107992936493665613654 -108000051912603578599 113116318008017777871 -109009089551467495747 109388259228280605303 -104612091113514802664 109519167630731639094 -104612091113514802664 115739148151601573808 -108000051912603578599 110318982509514011806 -101261243957067319422 107519026002586025827 -111261496925076985134 106096957694385885466 -100093902492789669774 101849747879612982297 -102545157386069758709 106189723444098348646 -107519026002586025827 117550971892000156946 -105901259206530390933 108771911258181286059 -103016521073558596116 113351703941294630458 -113116318008017777871 107097980510051172895 -108000051912603578599 103012564142649561853 -111707854651652464890 115392876317176762477 -116762461061414014956 104191514233385365427 -100173452066172931939 112364132652438722780 -107753428759636856492 109247306373593947755 -102512310412972518336 118264184129842070900 -109247306373593947755 106189723444098348646 -113166718268343560861 118207880179234484610 -101261243957067319422 107781761552417614958 -118357356982727825178 103325969492772452485 -114244914082871792125 113210431006401244170 -115622466243011136115 103475991020114516832 -100093902492789669774 100537991844787325512 -103016521073558596116 103716847685048716973 -116207701819773193333 113284787225540728296 -107519026002586025827 100537991844787325512 -104612091113514802664 101261243957067319422 -107133948555394893679 109931095616224405271 -115047896996200277508 102048265612444661933 -112944532473909341307 113047102292798770205 -106026445270708973611 108082478497335384404 -111091089527727420853 116762461061414014956 -100871232248276491534 100001826804813287036 -110318982509514011806 105822688186016123722 -103207773865797007066 113210431006401244170 -113166718268343560861 100871232248276491534 -113166718268343560861 102048265612444661933 -104450760987525660219 101263833299534001868 -113166718268343560861 112276589013569458330 -117691391504351341685 115360979797396777969 -118086737936443306746 100269980559891536109 -103016521073558596116 103207773865797007066 -104612091113514802664 115565811010545226083 -117377434815709898403 107781761552417614958 -109182513536739786206 108000051912603578599 -115920538018564742940 110728349411116483031 -107519026002586025827 109174551750397653742 -104612091113514802664 107896527414017792767 -112016425853417877466 106100296973968329853 -101720949843787442951 114918561167106576639 -115047896996200277508 109809835379677001002 -109304903996729396661 113164038788726940319 -116762461061414014956 106026445270708973611 -117691391504351341685 103325969492772452485 -115963821022986200770 111091089527727420853 -102403331307606219198 106695181236161584825 -108255750659110762991 110318982509514011806 -102654570556058167176 118156281382429939997 -113116318008017777871 102425976203575211068 -109335713877994755095 106837636108890930395 -115739148151601573808 106026445270708973611 -111091089527727420853 110318982509514011806 -104450760987525660219 115863474911002159675 -105705665708025552983 104560124403688998123 -115565811010545226083 117421021456205115327 -104450760987525660219 116927391465690022495 -105822688186016123722 107896527414017792767 -117421021456205115327 102034052532213921839 -108894779805940659869 105006381068870463173 -109809835379677001002 112063946124358686266 -115360979797396777969 104560124403688998123 -104612091113514802664 108434394145774737013 -107303107611470093265 116548025566090395827 -105822688186016123722 101600577333348274552 -107699711897781234810 102088173699409175139 -109247306373593947755 104364058018116761460 -114918561167106576639 103012564142649561853 -107033731246200681024 105076678694475690385 -103016521073558596116 117421021456205115327 -106665185918564754695 102048265612444661933 -113612142759476883204 104450760987525660219 -112944532473909341307 106665185918564754695 -104612091113514802664 109813896768294978296 -106026445270708973611 108832773152747423283 -109170680659355634945 115017401467423642930 -115360979797396777969 108082478497335384404 -112016425853417877466 103493459351957813291 -100871232248276491534 101261243957067319422 -118086737936443306746 114791921155677330282 -101261243957067319422 100084737546039360199 -104987932455782713675 104226321884965863264 -117691391504351341685 113164038788726940319 -104364058018116761460 111654284395316165338 -115109077044202722504 117550971892000156946 -105632941129656401917 113166718268343560861 -114918561167106576639 115047896996200277508 -114991987213662121376 106345802537137414958 -115360979797396777969 103012564142649561853 -100084737546039360199 107117483540235115863 -100173452066172931939 107117483540235115863 -100856165335040300712 111601729473858041964 -113612142759476883204 108176814619778619437 -100173452066172931939 110318982509514011806 -117157132370347986579 103012564142649561853 -113116318008017777871 113351703941294630458 -118245559326500322262 111310990991240556038 -104364058018116761460 114790574178411061829 -104612091113514802664 117550971892000156946 -115478779964227301239 115622466243011136115 -106623900962110772648 103716847685048716973 -111996414642516891950 114832793541825307503 -103691312271671214670 117921656724816772352 -114918561167106576639 106224435901697064976 -105006381068870463173 103691312271671214670 -114918561167106576639 111422286077941361166 -102034052532213921839 111654284395316165338 -100397511207083609950 100606519862794948506 -109778238062128383421 117421021456205115327 -115527632958457358109 100262595546646927505 -105901259206530390933 109074857816744029470 -108832773152747423283 112276589013569458330 -109174551750397653742 103171849011748425097 -101261243957067319422 103112588675637065591 -117377434815709898403 109182513536739786206 -103100496883422151101 115064258994656104138 -108817085747440374986 101092351652012588236 -112016425853417877466 111601729473858041964 -103493459351957813291 113612142759476883204 -107587075873786034394 101213524574984631953 -105006381068870463173 109388259228280605303 -107896527414017792767 107234826207633309420 -100397511207083609950 109412257237874861202 -103207773865797007066 113475277239647026452 -110731951130561423918 118017787526225833770 -102512310412972518336 102216887206636463918 -115739378269261680935 109074857816744029470 -102034052532213921839 105400903062771750089 -117550971892000156946 100523784851251213675 -107992936493665613654 108000051912603578599 -115883560681104199404 100019606796298306813 -117377434815709898403 113164038788726940319 -116548025566090395827 105376842241046675559 -114758749740576519343 105076678694475690385 -109504122343901736603 118207880179234484610 -107129852879758941909 110367546804237452889 -113116318008017777871 107519026002586025827 -108817085747440374986 115109077044202722504 -108894779805940659869 107308976571078250231 -102425976203575211068 108000051912603578599 -116207701819773193333 113920721823301219308 -115527632958457358109 110286587261352351537 -115064258994656104138 102178700954286324866 -115109077044202722504 107117483540235115863 -110318982509514011806 102545157386069758709 -103171849011748425097 109581870574956225297 -107519026002586025827 118086737936443306746 -101225750534150134109 112276589013569458330 -105076678694475690385 107519026002586025827 -108952536790629690817 100535338638690515335 -114991987213662121376 107753428759636856492 -114832793541825307503 100856165335040300712 -115360979797396777969 111091089527727420853 -103975368181760158212 116621986644249676039 -100397511207083609950 112276589013569458330 -118086737936443306746 100353346783543697435 -105901259206530390933 100523784851251213675 -111091089527727420853 111975545018506506119 -103100496883422151101 116773104421165750126 -116621986644249676039 103716847685048716973 -116388668762198604003 102048265612444661933 -104191514233385365427 116107530889292552664 -112364132652438722780 106812355611465528242 -104412682128547752131 111337216646096594888 -102216887206636463918 115047896996200277508 -116374117927631468606 101720949843787442951 -115527632958457358109 111601729473858041964 -104450760987525660219 108817085747440374986 -104364058018116761460 107033731246200681024 -110728349411116483031 118156281382429939997 -100535338638690515335 102048265612444661933 -112944532473909341307 115706830138905259568 -109170680659355634945 107753428759636856492 -112364132652438722780 103171849011748425097 -117691391504351341685 115963821022986200770 -115109077044202722504 116927391465690022495 -103207773865797007066 108082478497335384404 -110728349411116483031 104560124403688998123 -107090629815001792243 106026445270708973611 -111975545018506506119 109412257237874861202 -101832196121408756348 111285782175840598932 -100535338638690515335 110318982509514011806 -109388259228280605303 115047896996200277508 -113164038788726940319 104560124403688998123 -113612142759476883204 113801236315350503728 -107090629815001792243 118207880179234484610 -106122462724662012890 110286587261352351537 -115963821022986200770 103012564142649561853 -115047896996200277508 114079920283986872783 -109388259228280605303 115403621788538540544 -107699711897781234810 116621986644249676039 -117693415411676715849 105822688186016123722 -101261243957067319422 100262595546646927505 -111975545018506506119 115920538018564742940 -104870518715355770532 106263529626268281828 -104412682128547752131 108894779805940659869 -109170680659355634945 116621986644249676039 -115109077044202722504 107755092517418534815 -113920721823301219308 100523784851251213675 -114244914082871792125 103325969492772452485 -116773104421165750126 106812355611465528242 -113047102292798770205 101720949843787442951 -114758749740576519343 113612142759476883204 -110731951130561423918 103665895112864974869 -110728349411116483031 116192724891839469024 -112016425853417877466 100173452066172931939 -114549564725160709822 106026445270708973611 -104450760987525660219 115360979797396777969 -102545157386069758709 118207880179234484610 -115478779964227301239 113612142759476883204 -112276589013569458330 113116318008017777871 -102034052532213921839 109581870574956225297 -103207773865797007066 100871232248276491534 -104364058018116761460 103716847685048716973 -114918561167106576639 111285782175840598932 -109581870574956225297 115863474911002159675 -102688620589277847136 116762461061414014956 -109780617142585395916 109170680659355634945 -103016521073558596116 117691391504351341685 -112820512550939559523 106695181236161584825 -112016425853417877466 109895887909967698705 -105207943512906810696 116374117927631468606 -111538009015644508967 116723923766489326849 -113166718268343560861 113475277239647026452 -116207701819773193333 103716847685048716973 -115064258994656104138 106122462724662012890 -113116318008017777871 105076678694475690385 -105076678694475690385 106224435901697064976 -111261496925076985134 107234826207633309420 -108082478497335384404 106189723444098348646 -113612142759476883204 116768967108862685383 -106665185918564754695 107033731246200681024 -115706830138905259568 107753428759636856492 -113047102292798770205 102178700954286324866 -108817085747440374986 114758749740576519343 -109581870574956225297 108434394145774737013 -112944532473909341307 102048265612444661933 -105076678694475690385 107090629815001792243 -103207773865797007066 105076678694475690385 -106312895983244085949 104560124403688998123 -115963821022986200770 115622466243011136115 -115109077044202722504 109813896768294978296 -113166718268343560861 107033731246200681024 -116762461061414014956 107896527414017792767 -102088173699409175139 107699711897781234810 -111975545018506506119 106189723444098348646 -104612091113514802664 100415723513846680553 -101261243957067319422 113116318008017777871 -103171849011748425097 111285782175840598932 -115360979797396777969 103171849011748425097 -117477042502591652021 103660543175586203250 -104450760987525660219 114948739867290323960 -102034052532213921839 117550971892000156946 -104364058018116761460 106189723444098348646 -104364058018116761460 115360979797396777969 -115109077044202722504 116773104421165750126 -117477042502591652021 108000051912603578599 -113612142759476883204 115622466243011136115 -100084737546039360199 108082478497335384404 -104987932455782713675 105822688186016123722 -105006381068870463173 106189723444098348646 -113047102292798770205 117421021456205115327 -113475277239647026452 106312895983244085949 -101261243957067319422 100537991844787325512 -105822688186016123722 115963821022986200770 -112276589013569458330 110318982509514011806 -112820512550939559523 105634350975670602787 -102216887206636463918 117421021456205115327 -115302451851587317396 100894876340926769800 -106695181236161584825 109778238062128383421 -112944532473909341307 107097980510051172895 -113801236315350503728 113612142759476883204 -100939735623367202041 101213524574984631953 -102034052532213921839 103100496883422151101 -107753428759636856492 114461903539732780109 -113116318008017777871 101094440579835956866 -109335713877994755095 109388259228280605303 -117921656724816772352 111261496925076985134 -103493459351957813291 109388259228280605303 -100535338638690515335 109174551750397653742 -108255750659110762991 116762461061414014956 -100084737546039360199 101261243957067319422 -105632941129656401917 116107530889292552664 -104364058018116761460 106925005603331131101 -117691391504351341685 113920721823301219308 -111091089527727420853 103691312271671214670 -102512310412972518336 113284787225540728296 -105076678694475690385 114821161730370452301 -111538009015644508967 109581870574956225297 -108574688020691152748 108082478497335384404 -113612142759476883204 105006381068870463173 -108817085747440374986 107753428759636856492 -108817085747440374986 100019606796298306813 -105076678694475690385 107133948555394893679 -101849747879612982297 112844561713780016118 -108894779805940659869 111091089527727420853 -109504122343901736603 103325969492772452485 -101261243957067319422 107117483540235115863 -104450760987525660219 102403331307606219198 -116374117927631468606 116768967108862685383 -104612091113514802664 118264184129842070900 -105207943512906810696 115360979797396777969 -102216887206636463918 112844561713780016118 -106122462724662012890 107033731246200681024 -112364132652438722780 107117418142368704725 -100397511207083609950 101246601531247561585 -102216887206636463918 115360979797396777969 -111666959095947698908 103012564142649561853 -116374117927631468606 113068441549452664746 -110318982509514011806 111310990991240556038 -107753428759636856492 114791921155677330282 -115047896996200277508 108255750659110762991 -103016521073558596116 111666959095947698908 -106925005603331131101 103325969492772452485 -105076678694475690385 106189723444098348646 -107196172964000631645 107968787521028284191 -107992936493665613654 113116318008017777871 -114918561167106576639 108817085747440374986 -113116318008017777871 110286587261352351537 -108952536790629690817 113166718268343560861 -104612091113514802664 109778238062128383421 -106122462724662012890 106665185918564754695 -118086737936443306746 103100496883422151101 -115739378269261680935 109388259228280605303 -102545157386069758709 116762461061414014956 -100269980559891536109 108255750659110762991 -103207773865797007066 104066486855641683676 -117691391504351341685 114948739867290323960 -109182513536739786206 108143819792337559199 -114790574178411061829 115478779964227301239 -114244914082871792125 104450760987525660219 -110318982509514011806 100084737546039360199 -113116318008017777871 115109077044202722504 -109504122343901736603 115739148151601573808 -112820512550939559523 115739148151601573808 -108082478497335384404 104364058018116761460 -116773104421165750126 116768967108862685383 -103207773865797007066 107968787521028284191 -113116318008017777871 101261243957067319422 -100173452066172931939 100397511207083609950 -111654284395316165338 109412257237874861202 -108817085747440374986 114991987213662121376 -112339769006469685593 107033731246200681024 -101185406398932804414 113210431006401244170 -111422286077941361166 109182513536739786206 -107755092517418534815 107626068753267217775 -103207773865797007066 111975545018506506119 -103207773865797007066 117921656724816772352 -115963821022986200770 115047896996200277508 -107519026002586025827 109182513536739786206 -113920721823301219308 118207880179234484610 -102034052532213921839 111538009015644508967 -113116318008017777871 113117251731252114390 -115478779964227301239 109809835379677001002 -118418436905562612953 106665185918564754695 -100894876340926769800 101832771958125915909 -104412682128547752131 103207773865797007066 -108952536790629690817 108314259245584185142 -111310990991240556038 109174551750397653742 -116374117927631468606 104450760987525660219 -108832773152747423283 113612142759476883204 -107090629815001792243 107793717361981126032 -100397511207083609950 117691391504351341685 -112339769006469685593 110286587261352351537 -115341960624782381062 106026445270708973611 -118245559326500322262 100262595546646927505 -117012574629989558450 104066486855641683676 -101720949843787442951 117421021456205115327 -108817085747440374986 106695181236161584825 -114152150496380806218 100856165335040300712 -113920721823301219308 116388668762198604003 -111091089527727420853 112276589013569458330 -102512310412972518336 116773104421165750126 -106096957694385885466 114979733565079457374 -113920721823301219308 109412257237874861202 -106665185918564754695 103112588675637065591 -115302451851587317396 101057616370673656059 -116762461061414014956 103325969492772452485 -105822688186016123722 111654284395316165338 -112016425853417877466 113351703941294630458 -111091089527727420853 105006381068870463173 -117421021456205115327 112276589013569458330 -112016425853417877466 108314259245584185142 -103691312271671214670 105006381068870463173 -109182513536739786206 108771911258181286059 -115739378269261680935 118418436905562612953 -102654570556058167176 100262595546646927505 -107519026002586025827 106695181236161584825 -100173452066172931939 100535338638690515335 -115064258994656104138 104364058018116761460 -115047896996200277508 104560124403688998123 -115963821022986200770 117550971892000156946 -115739378269261680935 109247306373593947755 -112016425853417877466 100537991844787325512 -101213524574984631953 110318982509514011806 -108314259245584185142 111707854651652464890 -115302451851587317396 113475277239647026452 -111538009015644508967 115109077044202722504 -112276589013569458330 102034052532213921839 -102034052532213921839 100019606796298306813 -117691391504351341685 107196172964000631645 -118245559326500322262 102403331307606219198 -100871232248276491534 101263833299534001868 -110318982509514011806 109813896768294978296 -102403331307606219198 116374117927631468606 -100397511207083609950 100173452066172931939 -106096957694385885466 106388983874370865380 -116374117927631468606 105030465637303791249 -117377434815709898403 115622466243011136115 -100001826804813287036 115109077044202722504 -100535338638690515335 116762461061414014956 -116374117927631468606 109813896768294978296 -113047102292798770205 113247423264358423892 -100084737546039360199 106665185918564754695 -100397511207083609950 105901259206530390933 -114832793541825307503 106623900962110772648 -103171849011748425097 116388668762198604003 -102654570556058167176 104191514233385365427 -112339769006469685593 102178700954286324866 -104450760987525660219 100397143564111754723 -107753428759636856492 108255750659110762991 -105901259206530390933 100269980559891536109 -101720949843787442951 108817085747440374986 -103016521073558596116 114979733565079457374 -112276589013569458330 117691391504351341685 -115360979797396777969 112844561713780016118 -107896527414017792767 103171849011748425097 -104612091113514802664 108832773152747423283 -116723923766489326849 102088173699409175139 -118086737936443306746 106122462724662012890 -105006381068870463173 109895887909967698705 -107699711897781234810 101261243957067319422 -111091089527727420853 118207880179234484610 -117377434815709898403 106665185918564754695 -104870518715355770532 105822688186016123722 -115739378269261680935 118320665823821681206 -100397511207083609950 100262595546646927505 -101261243957067319422 111538009015644508967 -115963821022986200770 104364058018116761460 -108082478497335384404 110727249496967897430 -113166718268343560861 101185406398932804414 -105207943512906810696 117693415411676715849 -115963821022986200770 114632854492678778509 -115302451851587317396 102048265612444661933 -115739148151601573808 109339805471557551388 -100397511207083609950 112820512550939559523 -107896527414017792767 107033731246200681024 -111538009015644508967 103691312271671214670 -103153499873703329897 116107530889292552664 -100535338638690515335 103100496883422151101 -115302451851587317396 102714736581619876511 -112364132652438722780 118357356982727825178 -109182513536739786206 111091089527727420853 -106026445270708973611 111666959095947698908 -116374117927631468606 115739378269261680935 -109170680659355634945 101261243957067319422 -107753428759636856492 100523784851251213675 -109809835379677001002 107033731246200681024 -116762461061414014956 101225750534150134109 -116374117927631468606 103325969492772452485 -107196172964000631645 111310990991240556038 -106623900962110772648 102714736581619876511 -105632941129656401917 117550971892000156946 -101261243957067319422 104191514233385365427 -106312895983244085949 101225750534150134109 -100001826804813287036 101704103161442695877 -104612091113514802664 101213524574984631953 -106263529626268281828 104066486855641683676 -100001826804813287036 106812355611465528242 -105822688186016123722 104450760987525660219 -116374117927631468606 110727249496967897430 -104450760987525660219 103660543175586203250 -102512310412972518336 101094440579835956866 -103207773865797007066 110367546804237452889 -112944532473909341307 107781761552417614958 -111654284395316165338 103100496883422151101 -108894779805940659869 103171849011748425097 -105076678694475690385 113612142759476883204 -113047102292798770205 113068441549452664746 -115565811010545226083 113210431006401244170 -105822688186016123722 113166718268343560861 -117377434815709898403 111654284395316165338 -112364132652438722780 103012564142649561853 -107519026002586025827 109504122343901736603 -105703999093618427814 106812355611465528242 -105822688186016123722 108255750659110762991 -112016425853417877466 101094440579835956866 -104612091113514802664 115863474911002159675 -116762461061414014956 107033731246200681024 -104612091113514802664 105822688186016123722 -105076678694475690385 109174551750397653742 -111091089527727420853 112063946124358686266 -102034052532213921839 117421021456205115327 -100353346783543697435 101261243957067319422 -102403331307606219198 104560124403688998123 -108082478497335384404 115478779964227301239 -115047896996200277508 109196389259504239326 -110650241045258158224 109388259228280605303 -106096957694385885466 115047896996200277508 -118418436905562612953 115739378269261680935 -100397511207083609950 111601729473858041964 -114244914082871792125 115622466243011136115 -110318982509514011806 103112588675637065591 -107519026002586025827 112276589013569458330 -101057616370673656059 102048265612444661933 -105376842241046675559 109412257237874861202 -103016521073558596116 112364132652438722780 -111091089527727420853 109304903996729396661 -101057616370673656059 115109077044202722504 -116762461061414014956 109170680659355634945 -115341960624782381062 113722523501415106689 -102545157386069758709 117691391504351341685 -111310990991240556038 114790574178411061829 -113722523501415106689 112016425853417877466 -115360979797396777969 113612142759476883204 -103325969492772452485 101185406398932804414 -103660543175586203250 109174551750397653742 -106925005603331131101 109895887909967698705 -105207943512906810696 107117483540235115863 -115017401467423642930 101832771958125915909 -100084737546039360199 103475991020114516832 -103207773865797007066 104612091113514802664 -100871232248276491534 107793717361981126032 -118418436905562612953 113116318008017777871 -108894779805940659869 104412682128547752131 -111091089527727420853 115478779964227301239 -102425976203575211068 109895887909967698705 -116207701819773193333 115863474911002159675 -116388668762198604003 111654284395316165338 -109174551750397653742 102178700954286324866 -107133948555394893679 102178700954286324866 -101246601531247561585 101704103161442695877 -113166718268343560861 107234826207633309420 -107753428759636856492 114079920283986872783 -115017401467423642930 102512310412972518336 -113047102292798770205 104450760987525660219 -115341960624782381062 104792450024518550569 -112276589013569458330 109174551750397653742 -104450760987525660219 113801236315350503728 -104450760987525660219 107519026002586025827 -112364132652438722780 107117483540235115863 -106096957694385885466 108314259245584185142 -112944532473909341307 107519026002586025827 -100269980559891536109 109182513536739786206 -103016521073558596116 108832773152747423283 -105863188856924083857 115403621788538540544 -112820512550939559523 103112588675637065591 -116374117927631468606 116621986644249676039 -104450760987525660219 104226321884965863264 -102654570556058167176 101246601531247561585 -100871232248276491534 111538009015644508967 -114244914082871792125 103112588675637065591 -109931095616224405271 116374117927631468606 -107699711897781234810 116723923766489326849 -109170680659355634945 115403621788538540544 -117550971892000156946 112878918236054024365 -103100496883422151101 109519167630731639094 -111538009015644508967 102088173699409175139 -105207943512906810696 111654284395316165338 -103020619410065980303 115706830138905259568 -109581870574956225297 106312895983244085949 -117691391504351341685 103100496883422151101 -104618664838382110366 114948739867290323960 -103100496883422151101 118207880179234484610 -115739148151601573808 109504122343901736603 -106096957694385885466 115739378269261680935 -100093902492789669774 100871232248276491534 -105901259206530390933 107117483540235115863 -109247306373593947755 103493459351957813291 -101261243957067319422 115739148151601573808 -104870518715355770532 104066486855641683676 -105901259206530390933 116723923766489326849 -112364132652438722780 101185406398932804414 -106122462724662012890 114244914082871792125 -107006059340452534782 103171849011748425097 -102512310412972518336 114821161730370452301 -112944532473909341307 109412257237874861202 -113164038788726940319 108176814619778619437 -100353346783543697435 104560124403688998123 -109780617142585395916 104191514233385365427 -116621986644249676039 105076678694475690385 -104987932455782713675 112063946124358686266 -116768967108862685383 113351703941294630458 -111975545018506506119 109813896768294978296 -113722523501415106689 115341960624782381062 -109388259228280605303 111091089527727420853 -109247306373593947755 101261243957067319422 -117477042502591652021 114549564725160709822 -116762461061414014956 116107530889292552664 -115360979797396777969 117421021456205115327 -101094440579835956866 102048265612444661933 -100084737546039360199 117377434815709898403 -104450760987525660219 109182513536739786206 -100084737546039360199 115622466243011136115 -109182513536739786206 111538009015644508967 -111091089527727420853 114549564725160709822 -113166718268343560861 113210431006401244170 -101832196121408756348 102216887206636463918 -111422286077941361166 114979733565079457374 -115064258994656104138 113164038788726940319 -113166718268343560861 103475991020114516832 -104450760987525660219 117421021456205115327 -104226321884965863264 108817085747440374986 -116762461061414014956 107133948555394893679 -107303107611470093265 117157132370347986579 -109778238062128383421 109809835379677001002 -109196389259504239326 116207701819773193333 -117421021456205115327 111310990991240556038 -118156281382429939997 117477042502591652021 -105076678694475690385 107753428759636856492 -107753428759636856492 113116318008017777871 -101246601531247561585 114918561167106576639 -110774757382682582490 103112588675637065591 -111091089527727420853 101704103161442695877 -117477042502591652021 116621986644249676039 -115360979797396777969 110727249496967897430 -112852253337028739987 107097980510051172895 -105901259206530390933 114979733565079457374 -109388259228280605303 110286587261352351537 -109174551750397653742 101185406398932804414 -115963821022986200770 109813896768294978296 -118418436905562612953 113612142759476883204 -112878918236054024365 110318982509514011806 -105662484616118909569 111538009015644508967 -109504122343901736603 114790574178411061829 -107896527414017792767 111091089527727420853 -105901259206530390933 109895887909967698705 -116773104421165750126 114152150496380806218 -115360979797396777969 100084737546039360199 -104412682128547752131 109247306373593947755 -103493459351957813291 101261243957067319422 -108832773152747423283 111538009015644508967 -116762461061414014956 107755092517418534815 -101261243957067319422 113210431006401244170 -111666959095947698908 105076678694475690385 -117550971892000156946 101629211371073711149 -115963821022986200770 103475991020114516832 -101720949843787442951 112339769006469685593 -115109077044202722504 101832196121408756348 -118245559326500322262 115739148151601573808 -101600577333348274552 107097980510051172895 -101832196121408756348 106096957694385885466 -106925005603331131101 114790574178411061829 -109304903996729396661 100084737546039360199 -100535338638690515335 108082478497335384404 -101261243957067319422 103691312271671214670 -108894779805940659869 111806715084467662398 -107587075873786034394 106925005603331131101 -109182513536739786206 103171849011748425097 -103016521073558596116 104450760987525660219 -108594511384403031361 114244914082871792125 -106695181236161584825 101629211371073711149 -106837636108890930395 102088173699409175139 -107753428759636856492 112063946124358686266 -113166718268343560861 115622466243011136115 -101832196121408756348 109388259228280605303 -109304903996729396661 109182513536739786206 -100269980559891536109 109174551750397653742 -103016521073558596116 118245559326500322262 -102484577222269062816 103660543175586203250 -108082478497335384404 109581870574956225297 -100871232248276491534 114821161730370452301 -115706830138905259568 103012564142649561853 -103171849011748425097 103012564142649561853 -103016521073558596116 100269980559891536109 -102088173699409175139 103691312271671214670 -105901259206530390933 115739378269261680935 -113164038788726940319 113920721823301219308 -111091089527727420853 103112588675637065591 -111422286077941361166 114244914082871792125 -115109077044202722504 106822154985570317672 -114758749740576519343 109895887909967698705 -111538009015644508967 101832196121408756348 -115739378269261680935 113166718268343560861 -110318982509514011806 109304903996729396661 -108255750659110762991 118264184129842070900 -112364132652438722780 117691391504351341685 -100535338638690515335 112339769006469685593 -113116318008017777871 118418436905562612953 -113920721823301219308 110774757382682582490 -106224435901697064976 101094440579835956866 -109581870574956225297 113920721823301219308 -116374117927631468606 102216887206636463918 -106096957694385885466 117921656724816772352 -102545157386069758709 108082478497335384404 -114790574178411061829 109412257237874861202 -117477042502591652021 101629211371073711149 -103325969492772452485 112063946124358686266 -109170680659355634945 100019606796298306813 -111707854651652464890 116926943858449614201 -104618664838382110366 118245559326500322262 -109388259228280605303 115706830138905259568 -117421021456205115327 100269980559891536109 -109182513536739786206 109504122343901736603 -103207773865797007066 114791921155677330282 -116762461061414014956 112339769006469685593 -114918561167106576639 109581870574956225297 -109174551750397653742 103112588675637065591 -115064258994656104138 111310990991240556038 -105901259206530390933 107519026002586025827 -104412682128547752131 118156281382429939997 -102403331307606219198 107968787521028284191 -101261243957067319422 112820512550939559523 -109388259228280605303 102654570556058167176 -100173452066172931939 106822154985570317672 -108894779805940659869 115109077044202722504 -103016521073558596116 105076678694475690385 -101849747879612982297 118207880179234484610 -116374117927631468606 101849747879612982297 -107519026002586025827 114461903539732780109 -114918561167106576639 116621986644249676039 -116491285067171323298 100262595546646927505 -102512310412972518336 116621986644249676039 -116107530889292552664 116762461061414014956 -102403331307606219198 101629211371073711149 -115478779964227301239 103012564142649561853 -102088173699409175139 105076678694475690385 -114918561167106576639 110649214929620497857 -104450760987525660219 116621986644249676039 -103691312271671214670 104066486855641683676 -104450760987525660219 116388668762198604003 -115565811010545226083 106695181236161584825 -102403331307606219198 104450760987525660219 -103207773865797007066 108869261693909788407 -114758749740576519343 109581870574956225297 -111666959095947698908 115565811010545226083 -110468193592032465149 105376842241046675559 -108817085747440374986 109182513536739786206 -106665185918564754695 109813896768294978296 -109196389259504239326 107303107611470093265 -103016521073558596116 117550971892000156946 -113612142759476883204 113068441549452664746 -108817085747440374986 108314259245584185142 -115963821022986200770 113801236315350503728 -115739378269261680935 109009089551467495747 -115302451851587317396 109074857816744029470 -108817085747440374986 113920721823301219308 -107753428759636856492 115963821022986200770 -118418436905562612953 111091089527727420853 -102216887206636463918 117691391504351341685 -109170680659355634945 109388259228280605303 -112339769006469685593 107519026002586025827 -112290361600843238282 103691312271671214670 -107896527414017792767 113612142759476883204 -114832793541825307503 109074857816744029470 -117691391504351341685 102048265612444661933 -117693415411676715849 115527632958457358109 -117691391504351341685 105400903062771750089 -102403331307606219198 118264184129842070900 -103207773865797007066 114979733565079457374 -101261243957067319422 112844561713780016118 -106312895983244085949 101261243957067319422 -103016521073558596116 100523784851251213675 -111091089527727420853 108082478497335384404 -111091089527727420853 111654284395316165338 -101094440579835956866 113475277239647026452 -102034052532213921839 106312895983244085949 -104870518715355770532 104383523254857614001 -105076678694475690385 115963821022986200770 -112944532473909341307 105822688186016123722 -112944532473909341307 111310990991240556038 -115064258994656104138 109813896768294978296 -118086737936443306746 109778238062128383421 -114790574178411061829 103012564142649561853 -112944532473909341307 113116318008017777871 -115360979797396777969 113210431006401244170 -109388259228280605303 101832771958125915909 -116374117927631468606 107117483540235115863 -113116318008017777871 102178700954286324866 -118245559326500322262 111538009015644508967 -115360979797396777969 113475277239647026452 -109778238062128383421 115064258994656104138 -100084737546039360199 109813896768294978296 -108894779805940659869 110367546804237452889 -118245559326500322262 111285782175840598932 -102216887206636463918 106312895983244085949 -104618664838382110366 112852253337028739987 -114790574178411061829 110318982509514011806 -114918561167106576639 111654284395316165338 -104618664838382110366 112063946124358686266 -113116318008017777871 113801236315350503728 -101246601531247561585 106925005603331131101 -106026445270708973611 110318982509514011806 -102216887206636463918 107234826207633309420 -115109077044202722504 103207773865797007066 -109304903996729396661 113210431006401244170 -103016521073558596116 103325969492772452485 -117421021456205115327 113164038788726940319 -115527632958457358109 108771911258181286059 -102512310412972518336 118207880179234484610 -100093902492789669774 108082478497335384404 -112276589013569458330 112844561713780016118 -112276589013569458330 102048265612444661933 -109196389259504239326 115302451851587317396 -115360979797396777969 116621986644249676039 -117157132370347986579 114790574178411061829 -117377434815709898403 101225750534150134109 -106122462724662012890 107117483540235115863 -110318982509514011806 103325969492772452485 -111422286077941361166 114918561167106576639 -110468193592032465149 113116318008017777871 -117421021456205115327 107117483540235115863 -102512310412972518336 100856165335040300712 -111666959095947698908 105376842241046675559 -112878918236054024365 102705549361550492663 -113166718268343560861 108817085747440374986 -115739378269261680935 116107530889292552664 -114758749740576519343 107753428759636856492 -118086737936443306746 117550971892000156946 -115109077044202722504 109388259228280605303 -115565811010545226083 106925005603331131101 -112944532473909341307 102034052532213921839 -115622466243011136115 113351703941294630458 -111975545018506506119 115739378269261680935 -100535338638690515335 107992936493665613654 -110728349411116483031 113624688426259176181 -116374117927631468606 105822688186016123722 -103171849011748425097 113210431006401244170 -111091089527727420853 109339805471557551388 -115017401467423642930 115739378269261680935 -105076678694475690385 109170680659355634945 -105901259206530390933 113612142759476883204 -116374117927631468606 107968787521028284191 -103171849011748425097 114079920283986872783 -111538009015644508967 111091089527727420853 -113475277239647026452 105400903062771750089 -117377434815709898403 109809835379677001002 -115047896996200277508 103171849011748425097 -103691312271671214670 102088173699409175139 -112364132652438722780 116768967108862685383 -113166718268343560861 115047896996200277508 -102545157386069758709 104412682128547752131 -117921656724816772352 108952536790629690817 -111091089527727420853 116374117927631468606 -105400903062771750089 102178700954286324866 -108894779805940659869 116192724891839469024 -117012574629989558450 110728349411116483031 -117550971892000156946 117691391504351341685 -104450760987525660219 108176814619778619437 -116762461061414014956 105705665708025552983 -111538009015644508967 102034052532213921839 -101225750534150134109 105400903062771750089 -115739148151601573808 104618664838382110366 -114152150496380806218 105703999093618427814 -109009089551467495747 115017401467423642930 -115341960624782381062 115390494223651393388 -104364058018116761460 115622466243011136115 -106224435901697064976 111091089527727420853 -110318982509514011806 105705665708025552983 -113612142759476883204 102048265612444661933 -115739378269261680935 104383523254857614001 -101057616370673656059 107234826207633309420 -114244914082871792125 113475277239647026452 -115017401467423642930 103582267051807991527 -109247306373593947755 118357356982727825178 -103100496883422151101 104560124403688998123 -105400903062771750089 113475277239647026452 -103207773865797007066 103493459351957813291 -106312895983244085949 114791921155677330282 -113166718268343560861 106695181236161584825 -107781761552417614958 111285782175840598932 -108817085747440374986 106345802537137414958 -115064258994656104138 112276589013569458330 -101261243957067319422 101704103161442695877 -114758749740576519343 104450760987525660219 -116207701819773193333 107117483540235115863 -117691391504351341685 104450760987525660219 -115565811010545226083 107781761552417614958 -111171416539633276676 116768967108862685383 -116374117927631468606 101213524574984631953 -101261243957067319422 118207880179234484610 -100269980559891536109 104560124403688998123 -101057616370673656059 112339769006469685593 -108255750659110762991 101225750534150134109 -114758749740576519343 108255750659110762991 -106263529626268281828 117921656724816772352 -111996414642516891950 102512310412972518336 -105705665708025552983 102425976203575211068 -112364132652438722780 105703999093618427814 -108817085747440374986 101057616370673656059 -117377434815709898403 107753428759636856492 -108000051912603578599 106189723444098348646 -103016521073558596116 115963821022986200770 -108869261693909788407 110728349411116483031 -108817085747440374986 104364058018116761460 -109581870574956225297 109074857816744029470 -114758749740576519343 106695181236161584825 -108314259245584185142 108952536790629690817 -105901259206530390933 102654570556058167176 -105705665708025552983 109247306373593947755 -115739378269261680935 102216887206636463918 -116207701819773193333 105400903062771750089 -108894779805940659869 109170680659355634945 -100535338638690515335 100397511207083609950 -115302451851587317396 111285782175840598932 -100535338638690515335 107234826207633309420 -100173452066172931939 109174551750397653742 -110318982509514011806 104450760987525660219 -116207701819773193333 107234826207633309420 -109581870574956225297 102425976203575211068 -111422286077941361166 102484577222269062816 -114918561167106576639 108255750659110762991 -111975545018506506119 113801236315350503728 -105822688186016123722 117550971892000156946 -114244914082871792125 116374117927631468606 -115622466243011136115 109519167630731639094 -118177473010760322916 109388259228280605303 -116374117927631468606 104987932455782713675 -115478779964227301239 107519026002586025827 -102705549361550492663 109504122343901736603 -101261243957067319422 106345802537137414958 -105006381068870463173 115047896996200277508 -100269980559891536109 107033731246200681024 -110318982509514011806 107781761552417614958 -111171416539633276676 106189723444098348646 -108787861479092510435 100537991844787325512 -109335713877994755095 115017401467423642930 -113166718268343560861 116374117927631468606 -101261243957067319422 108255750659110762991 -112878918236054024365 115017401467423642930 -103100496883422151101 112364132652438722780 -105076678694475690385 112339769006469685593 -115064258994656104138 118207880179234484610 -105400903062771750089 101225750534150134109 -112016425853417877466 113475277239647026452 -108082478497335384404 118320665823821681206 -101600577333348274552 103171849011748425097 -118086737936443306746 101094440579835956866 -112944532473909341307 102425976203575211068 -108000051912603578599 102425976203575211068 -100173452066172931939 118207880179234484610 -104450760987525660219 109339805471557551388 -102403331307606219198 114918561167106576639 -115963821022986200770 115360979797396777969 -105207943512906810696 109813896768294978296 -107129852879758941909 109388259228280605303 -112016425853417877466 110727249496967897430 -115360979797396777969 114791921155677330282 -106312895983244085949 109074857816744029470 -115565811010545226083 115622466243011136115 -100397511207083609950 103325969492772452485 -115622466243011136115 107587075873786034394 -112276589013569458330 111310990991240556038 -103207773865797007066 107133948555394893679 -104618664838382110366 117421021456205115327 -112944532473909341307 109074857816744029470 -111261496925076985134 104870518715355770532 -111654284395316165338 104450760987525660219 -112364132652438722780 115109077044202722504 -102088173699409175139 100173452066172931939 -103207773865797007066 109412257237874861202 -117691391504351341685 107896527414017792767 -101261243957067319422 103716847685048716973 -114791921155677330282 117693415411676715849 -108894779805940659869 106096957694385885466 -106122462724662012890 109813896768294978296 -117550971892000156946 113475277239647026452 -113166718268343560861 100093902492789669774 -109778238062128383421 107896527414017792767 -118017787526225833770 117921656724816772352 -100535338638690515335 109809835379677001002 -108817085747440374986 106925005603331131101 -100397511207083609950 110286587261352351537 -103207773865797007066 111091089527727420853 -101261243957067319422 105662484616118909569 -108574688020691152748 105634350975670602787 -101261243957067319422 111285782175840598932 -115739378269261680935 112276589013569458330 -102545157386069758709 111337216646096594888 -111091089527727420853 110727249496967897430 -109174551750397653742 102545157386069758709 -117377434815709898403 101629211371073711149 -113164038788726940319 100269980559891536109 -100397511207083609950 100523784851251213675 -118245559326500322262 111171416539633276676 -103691312271671214670 112063946124358686266 -115739148151601573808 101600577333348274552 -100535338638690515335 103112588675637065591 -105901259206530390933 113117251731252114390 -108016228299742896694 114832793541825307503 -117550971892000156946 104964811874969620954 -112276589013569458330 113920721823301219308 -103691312271671214670 115739378269261680935 -117550971892000156946 109519167630731639094 -107896527414017792767 109182513536739786206 -108817085747440374986 108176814619778619437 -114918561167106576639 103325969492772452485 -114991987213662121376 109504122343901736603 -116491285067171323298 110318982509514011806 -100535338638690515335 109581870574956225297 -113920721823301219308 107117483540235115863 -112276589013569458330 107117483540235115863 -117477042502591652021 101704103161442695877 -103207773865797007066 106100296973968329853 -102216887206636463918 107117483540235115863 -111422286077941361166 104618664838382110366 -107006059340452534782 113612142759476883204 -109778238062128383421 101569655404865588155 -109304903996729396661 105705665708025552983 -107519026002586025827 103716847685048716973 -101261243957067319422 111654284395316165338 -114991987213662121376 114079920283986872783 -106026445270708973611 116107530889292552664 -100856165335040300712 107626068753267217775 -118357356982727825178 113116318008017777871 -109174551750397653742 102048265612444661933 -109504122343901736603 107519026002586025827 -109182513536739786206 106695181236161584825 -104450760987525660219 107753428759636856492 -100353346783543697435 111285782175840598932 -113351703941294630458 106189723444098348646 -118357356982727825178 108082478497335384404 -117691391504351341685 101057616370673656059 -114991987213662121376 109009089551467495747 -113164038788726940319 106189723444098348646 -111310990991240556038 117691391504351341685 -115739378269261680935 111285782175840598932 -116207701819773193333 115527632958457358109 -113612142759476883204 109581870574956225297 -115739378269261680935 112844561713780016118 -100397511207083609950 103207773865797007066 -105901259206530390933 107133948555394893679 -104450760987525660219 107755092517418534815 -113047102292798770205 111285782175840598932 -111538009015644508967 103171849011748425097 -118017787526225833770 114244914082871792125 -103691312271671214670 108894779805940659869 -111091089527727420853 109182513536739786206 -111091089527727420853 102088173699409175139 -115883560681104199404 105705665708025552983 -113116318008017777871 104364058018116761460 -100093902492789669774 110286587261352351537 -108832773152747423283 107234826207633309420 -100084737546039360199 107133948555394893679 -114549564725160709822 100173452066172931939 -115739378269261680935 114791921155677330282 -113920721823301219308 113116318008017777871 -114244914082871792125 118418436905562612953 -112364132652438722780 109581870574956225297 -115706830138905259568 114790574178411061829 -115302451851587317396 105376842241046675559 -113920721823301219308 109809835379677001002 -113116318008017777871 117421021456205115327 -114549564725160709822 107793717361981126032 -104450760987525660219 102048265612444661933 -100871232248276491534 114152150496380806218 -106026445270708973611 107033731246200681024 -114918561167106576639 107133948555394893679 -111091089527727420853 112364132652438722780 -118418436905562612953 112844561713780016118 -108129202557078877094 104412682128547752131 -112339769006469685593 103716847685048716973 -106623900962110772648 114856222286197208502 -101246601531247561585 110649214929620497857 -113475277239647026452 109174551750397653742 -107133948555394893679 112820512550939559523 -113166718268343560861 108314259245584185142 -113068441549452664746 118264184129842070900 -117550971892000156946 103325969492772452485 -116762461061414014956 100019606796298306813 -112016425853417877466 103716847685048716973 -104618664838382110366 105076678694475690385 -111091089527727420853 108817085747440374986 -112276589013569458330 117421021456205115327 -116621986644249676039 109412257237874861202 -111091089527727420853 101261243957067319422 -102010610384685218706 107303107611470093265 -114790574178411061829 102048265612444661933 -111091089527727420853 118357356982727825178 -117421021456205115327 103207773865797007066 -103493459351957813291 112844561713780016118 -117691391504351341685 102178700954286324866 -111261496925076985134 104612091113514802664 -102484577222269062816 104450760987525660219 -109504122343901736603 115622466243011136115 -107753428759636856492 103100496883422151101 -101261243957067319422 102216887206636463918 -108314259245584185142 111654284395316165338 -109170680659355634945 103475991020114516832 -109778238062128383421 109895887909967698705 -109581870574956225297 101261243957067319422 -118264184129842070900 109174551750397653742 -116773104421165750126 108894779805940659869 -106925005603331131101 109174551750397653742 -102654570556058167176 103493459351957813291 -115109077044202722504 115739378269261680935 -100093902492789669774 113210431006401244170 -108082478497335384404 101094440579835956866 -111091089527727420853 107781761552417614958 -108314259245584185142 113166718268343560861 -108082478497335384404 103012564142649561853 -107090629815001792243 107755092517418534815 -100397511207083609950 103012564142649561853 -107896527414017792767 108434394145774737013 -102088173699409175139 106100296973968329853 -109170680659355634945 106822154985570317672 -113612142759476883204 117693415411676715849 -113116318008017777871 105400903062771750089 -109174551750397653742 109778238062128383421 -115360979797396777969 106312895983244085949 -101246601531247561585 107968787521028284191 -109778238062128383421 105705665708025552983 -115360979797396777969 109074857816744029470 -106312895983244085949 104450760987525660219 -112339769006469685593 114790574178411061829 -104612091113514802664 112063946124358686266 -112016425853417877466 115360979797396777969 -107781761552417614958 108000051912603578599 -116773104421165750126 112364132652438722780 -104450760987525660219 114918561167106576639 -106026445270708973611 113068441549452664746 -103016521073558596116 101185406398932804414 -100415723513846680553 106695181236161584825 -112339769006469685593 103012564142649561853 -111091089527727420853 102010610384685218706 -111310990991240556038 113247423264358423892 -113920721823301219308 113612142759476883204 -107781761552417614958 115622466243011136115 -115109077044202722504 100173452066172931939 -109304903996729396661 117691391504351341685 -115064258994656104138 112844561713780016118 -103171849011748425097 104450760987525660219 -106122462724662012890 114790574178411061829 -112364132652438722780 112844561713780016118 -111091089527727420853 100262595546646927505 -109581870574956225297 116374117927631468606 -109809835379677001002 101213524574984631953 -111091089527727420853 110649214929620497857 -116762461061414014956 107519026002586025827 -107519026002586025827 118207880179234484610 -115963821022986200770 107033731246200681024 -103493459351957813291 116621986644249676039 -106695181236161584825 105822688186016123722 -109809835379677001002 118207880179234484610 -112364132652438722780 114791921155677330282 -100173452066172931939 115739378269261680935 -103207773865797007066 104560124403688998123 -115963821022986200770 109895887909967698705 -107519026002586025827 107587075873786034394 -100397511207083609950 100535338638690515335 -106026445270708973611 116773104421165750126 -115047896996200277508 113612142759476883204 -101225750534150134109 103325969492772452485 -105822688186016123722 106312895983244085949 -109174551750397653742 103716847685048716973 -115739148151601573808 115963821022986200770 -113116318008017777871 109809835379677001002 -117377434815709898403 115478779964227301239 -109778238062128383421 104364058018116761460 -115739378269261680935 103325969492772452485 -108314259245584185142 107033731246200681024 -116768967108862685383 103493459351957813291 -105076678694475690385 100397511207083609950 -106122462724662012890 103100496883422151101 -101185406398932804414 103325969492772452485 -100173452066172931939 117693415411676715849 -113047102292798770205 110649214929620497857 -114549564725160709822 115047896996200277508 -110728349411116483031 117921656724816772352 -105705665708025552983 107896527414017792767 -115302451851587317396 104277680236688325392 -112364132652438722780 106189723444098348646 -111337216646096594888 108000051912603578599 -113166718268343560861 104964811874969620954 -100415723513846680553 100019606796298306813 -107699711897781234810 113166718268343560861 -111091089527727420853 111601729473858041964 -101057616370673656059 100535338638690515335 -108255750659110762991 107587075873786034394 -117691391504351341685 115109077044202722504 -112339769006469685593 100535338638690515335 -112944532473909341307 102545157386069758709 -100173452066172931939 114791921155677330282 -116762461061414014956 114244914082871792125 -112944532473909341307 107033731246200681024 -106026445270708973611 115739378269261680935 -115478779964227301239 106189723444098348646 -103207773865797007066 104191514233385365427 -100535338638690515335 115527632958457358109 -115739378269261680935 116621986644249676039 -111975545018506506119 113117251731252114390 -111538009015644508967 116927391465690022495 -109504122343901736603 107968787521028284191 -104612091113514802664 107781761552417614958 -105705665708025552983 107133948555394893679 -100093902492789669774 103716847685048716973 -113166718268343560861 114549564725160709822 -109247306373593947755 114991987213662121376 -109581870574956225297 103660543175586203250 -115527632958457358109 105901259206530390933 -107196172964000631645 105076678694475690385 -110318982509514011806 109388259228280605303 -109304903996729396661 107033731246200681024 -102034052532213921839 115047896996200277508 -104618664838382110366 111538009015644508967 -112016425853417877466 116207701819773193333 -115341960624782381062 107090629815001792243 -112820512550939559523 100535338638690515335 -106026445270708973611 110209787594312878744 -109388259228280605303 111538009015644508967 -112276589013569458330 109519167630731639094 -112339769006469685593 115622466243011136115 -115963821022986200770 111654284395316165338 -103325969492772452485 102178700954286324866 -105705665708025552983 108574688020691152748 -101094440579835956866 107117483540235115863 -112820512550939559523 101261243957067319422 -109780617142585395916 103475991020114516832 -108000051912603578599 111538009015644508967 -105076678694475690385 104412682128547752131 -107896527414017792767 102178700954286324866 -107303107611470093265 110774757382682582490 -108817085747440374986 107117483540235115863 -109174551750397653742 117683744929337064105 -109304903996729396661 108255750659110762991 -107781761552417614958 106695181236161584825 -116768967108862685383 100262595546646927505 -116374117927631468606 107896527414017792767 -115565811010545226083 100269980559891536109 -115739148151601573808 114632854492678778509 -109182513536739786206 102034052532213921839 -115527632958457358109 107519026002586025827 -117157132370347986579 117377434815709898403 -101057616370673656059 100269980559891536109 -100269980559891536109 107753428759636856492 -107793717361981126032 115109077044202722504 -115622466243011136115 109813896768294978296 -113612142759476883204 111666959095947698908 -102403331307606219198 103660543175586203250 -109182513536739786206 107992936493665613654 -116762461061414014956 118418436905562612953 -115302451851587317396 113612142759476883204 -114549564725160709822 103207773865797007066 -105376842241046675559 103171849011748425097 -107896527414017792767 102048265612444661933 -100397511207083609950 104870518715355770532 -107781761552417614958 112944532473909341307 -102034052532213921839 114791921155677330282 -114244914082871792125 110649214929620497857 -116374117927631468606 100523784851251213675 -114244914082871792125 103475991020114516832 -103020619410065980303 106925005603331131101 -114244914082871792125 118264184129842070900 -100939735623367202041 107303107611470093265 -109304903996729396661 115622466243011136115 -112339769006469685593 103112588675637065591 -112364132652438722780 103325969492772452485 -104450760987525660219 106345802537137414958 -113116318008017777871 112339769006469685593 -118418436905562612953 103207773865797007066 -104870518715355770532 115920538018564742940 -107196172964000631645 107753428759636856492 -100535338638690515335 107519026002586025827 -100535338638690515335 118418436905562612953 -105901259206530390933 109519167630731639094 -109388259228280605303 106096957694385885466 -108000051912603578599 115706830138905259568 -114991987213662121376 101246601531247561585 -100397511207083609950 111654284395316165338 -111091089527727420853 106224435901697064976 -103153499873703329897 115017401467423642930 -109581870574956225297 100269980559891536109 -107896527414017792767 113116318008017777871 -118207880179234484610 102048265612444661933 -113164038788726940319 110727249496967897430 -105400903062771750089 107117483540235115863 -114079920283986872783 104364058018116761460 -112364132652438722780 111654284395316165338 -111422286077941361166 111091089527727420853 -104870518715355770532 109895887909967698705 -104364058018116761460 102178700954286324866 -111091089527727420853 112339769006469685593 -111310990991240556038 103171849011748425097 -115302451851587317396 115478779964227301239 -116192724891839469024 109388259228280605303 -111654284395316165338 111091089527727420853 -109170680659355634945 115739148151601573808 -109182513536739786206 115863474911002159675 -111091089527727420853 102216887206636463918 -106312895983244085949 115863474911002159675 -108817085747440374986 113247423264358423892 -100535338638690515335 112276589013569458330 -116762461061414014956 102688620589277847136 -111091089527727420853 107117483540235115863 -105822688186016123722 103475991020114516832 -107519026002586025827 100535338638690515335 -101832196121408756348 118156281382429939997 -109809835379677001002 104987932455782713675 -100856165335040300712 116927391465690022495 -115739148151601573808 104450760987525660219 -105076678694475690385 102545157386069758709 -116621986644249676039 104560124403688998123 -114244914082871792125 103100496883422151101 -115360979797396777969 101261243957067319422 -105822688186016123722 106695181236161584825 -116388668762198604003 109074857816744029470 -104450760987525660219 102545157386069758709 -107896527414017792767 109412257237874861202 -112276589013569458330 107587075873786034394 -105901259206530390933 115017401467423642930 -109778238062128383421 100269980559891536109 -114918561167106576639 113920721823301219308 -113166718268343560861 107992936493665613654 -112820512550939559523 111285782175840598932 -107519026002586025827 109895887909967698705 -116207701819773193333 113210431006401244170 -115478779964227301239 102048265612444661933 -115963821022986200770 107196172964000631645 -105705665708025552983 105400903062771750089 -115403621788538540544 109780617142585395916 -104870518715355770532 108176814619778619437 -102545157386069758709 117477042502591652021 -115360979797396777969 100537991844787325512 -114549564725160709822 103100496883422151101 -107896527414017792767 114244914082871792125 -107753428759636856492 101569655404865588155 -108952536790629690817 107968787521028284191 -101246601531247561585 118156281382429939997 -110318982509514011806 106665185918564754695 -112016425853417877466 111538009015644508967 -113475277239647026452 116388668762198604003 -108817085747440374986 108082478497335384404 -103112588675637065591 118264184129842070900 -109778238062128383421 103660543175586203250 -112339769006469685593 115360979797396777969 -104364058018116761460 113210431006401244170 -116207701819773193333 109074857816744029470 -106224435901697064976 110727249496967897430 -111538009015644508967 113801236315350503728 -104364058018116761460 113801236315350503728 -118245559326500322262 106189723444098348646 -102654570556058167176 115403621788538540544 -115302451851587317396 110014891370822989957 -115392876317176762477 111707854651652464890 -112276589013569458330 101261243957067319422 -104612091113514802664 105376842241046675559 -101261243957067319422 104450760987525660219 -114244914082871792125 112852253337028739987 -115739378269261680935 100001826804813287036 -101569655404865588155 101225750534150134109 -107133948555394893679 113475277239647026452 -109304903996729396661 118357356982727825178 -108082478497335384404 112364132652438722780 -115963821022986200770 118320665823821681206 -110318982509514011806 109895887909967698705 -103016521073558596116 106189723444098348646 -115739148151601573808 104560124403688998123 -112276589013569458330 112339769006469685593 -117691391504351341685 115622466243011136115 -102545157386069758709 101057616370673656059 -115302451851587317396 107033731246200681024 -101569655404865588155 117377434815709898403 -116768967108862685383 105822688186016123722 -100856165335040300712 115341960624782381062 -114918561167106576639 104618664838382110366 -108787861479092510435 103207773865797007066 -113920721823301219308 102048265612444661933 -115706830138905259568 108082478497335384404 -113116318008017777871 106189723444098348646 -115527632958457358109 103493459351957813291 -107519026002586025827 104450760987525660219 -104987932455782713675 113116318008017777871 -116621986644249676039 111091089527727420853 -100871232248276491534 103100496883422151101 -101720949843787442951 115739148151601573808 -104870518715355770532 115047896996200277508 -115739378269261680935 100397511207083609950 -115706830138905259568 103325969492772452485 -107519026002586025827 104612091113514802664 -104383523254857614001 100871232248276491534 -103016521073558596116 104987932455782713675 -106026445270708973611 106312895983244085949 -109335713877994755095 109780617142585395916 -113116318008017777871 109304903996729396661 -112364132652438722780 118418436905562612953 -115478779964227301239 109581870574956225297 -118086737936443306746 113475277239647026452 -115527632958457358109 112276589013569458330 -103016521073558596116 101126226710566561379 -111538009015644508967 106695181236161584825 -101094440579835956866 104560124403688998123 -103171849011748425097 106189723444098348646 -105207943512906810696 105030465637303791249 -110731951130561423918 117921656724816772352 -106122462724662012890 112820512550939559523 -108082478497335384404 113475277239647026452 -109182513536739786206 103100496883422151101 -100001826804813287036 100871232248276491534 -102034052532213921839 108082478497335384404 -109009089551467495747 115739378269261680935 -100093902492789669774 118418436905562612953 -113116318008017777871 107587075873786034394 -101261243957067319422 115565811010545226083 -104987932455782713675 113117251731252114390 -103171849011748425097 111091089527727420853 -100535338638690515335 115064258994656104138 -116762461061414014956 110318982509514011806 -108832773152747423283 110286587261352351537 -100535338638690515335 112844561713780016118 -108082478497335384404 106312895983244085949 -106312895983244085949 101185406398932804414 -112364132652438722780 101094440579835956866 -112276589013569458330 109813896768294978296 -103171849011748425097 114632854492678778509 -104618664838382110366 109519167630731639094 -110728349411116483031 107308976571078250231 -100084737546039360199 107992936493665613654 -113116318008017777871 106925005603331131101 -116388668762198604003 117691391504351341685 -104412682128547752131 106925005603331131101 -116207701819773193333 115064258994656104138 -106812355611465528242 100856165335040300712 -117377434815709898403 109412257237874861202 -112276589013569458330 107097980510051172895 -115739148151601573808 103660543175586203250 -105376842241046675559 115047896996200277508 -113166718268343560861 102178700954286324866 -117377434815709898403 116768967108862685383 -108143819792337559199 114758749740576519343 -109304903996729396661 107234826207633309420 -102545157386069758709 103325969492772452485 -104612091113514802664 101720949843787442951 -114549564725160709822 113801236315350503728 -114918561167106576639 113351703941294630458 -105006381068870463173 108894779805940659869 -111091089527727420853 105705665708025552983 -117421021456205115327 106189723444098348646 -109388259228280605303 104412682128547752131 -104870518715355770532 114856222286197208502 -115706830138905259568 105705665708025552983 -109388259228280605303 101246601531247561585 -117691391504351341685 112063946124358686266 -108817085747440374986 103171849011748425097 -115739378269261680935 108082478497335384404 -103660543175586203250 116388668762198604003 -116374117927631468606 116388668762198604003 -115360979797396777969 102178700954286324866 -108817085747440374986 115739148151601573808 -106224435901697064976 114632854492678778509 -116207701819773193333 101094440579835956866 -111806715084467662398 101704103161442695877 -103016521073558596116 107303107611470093265 -101213524574984631953 115478779964227301239 -101057616370673656059 110209787594312878744 -112339769006469685593 112878918236054024365 -102512310412972518336 100523784851251213675 -106812355611465528242 114152150496380806218 -108894779805940659869 101832771958125915909 -108243648069327964538 103537420161725387429 -116762461061414014956 115478779964227301239 -115109077044202722504 115017401467423642930 -101225750534150134109 115478779964227301239 -103153499873703329897 106623900962110772648 -112016425853417877466 101057616370673656059 -105076678694475690385 102654570556058167176 -111091089527727420853 110209787594312878744 -102048265612444661933 103171849011748425097 -112016425853417877466 107090629815001792243 -106122462724662012890 103716847685048716973 -110728349411116483031 100871232248276491534 -104383523254857614001 106096957694385885466 -112820512550939559523 109412257237874861202 -113166718268343560861 105901259206530390933 -105632941129656401917 116762461061414014956 -100535338638690515335 107896527414017792767 -102484577222269062816 108952536790629690817 -100269980559891536109 113475277239647026452 -114918561167106576639 115622466243011136115 -111538009015644508967 114979733565079457374 -103207773865797007066 103582267051807991527 -112339769006469685593 107234826207633309420 -111975545018506506119 105901259206530390933 -107133948555394893679 106189723444098348646 -101263833299534001868 118245559326500322262 -115109077044202722504 110367546804237452889 -110318982509514011806 111538009015644508967 -111337216646096594888 108817085747440374986 -111654284395316165338 116388668762198604003 -118245559326500322262 108176814619778619437 -111538009015644508967 102178700954286324866 -108869261693909788407 115739378269261680935 -103325969492772452485 113116318008017777871 -113166718268343560861 108952536790629690817 -105400903062771750089 103112588675637065591 -109504122343901736603 101629211371073711149 -114244914082871792125 106100296973968329853 -118086737936443306746 118264184129842070900 -116762461061414014956 114979733565079457374 -100535338638690515335 118320665823821681206 -106665185918564754695 105705665708025552983 -115565811010545226083 117683744929337064105 -107033731246200681024 117421021456205115327 -107519026002586025827 112844561713780016118 -115739378269261680935 101092351652012588236 -107090629815001792243 105703999093618427814 -111975545018506506119 115360979797396777969 -108082478497335384404 101213524574984631953 -105076678694475690385 101832196121408756348 -115963821022986200770 100269980559891536109 -113116318008017777871 112276589013569458330 -116762461061414014956 107090629815001792243 -100001826804813287036 115341960624782381062 -103207773865797007066 107006059340452534782 -104364058018116761460 103100496883422151101 -109170680659355634945 103207773865797007066 -116762461061414014956 110727249496967897430 -112820512550939559523 112063946124358686266 -102512310412972518336 112157588278319557323 -111666959095947698908 109813896768294978296 -106224435901697064976 105400903062771750089 -100257676670422660178 102512310412972518336 -101832196121408756348 116621986644249676039 -112364132652438722780 102654570556058167176 -118017787526225833770 107699711897781234810 -109009089551467495747 100019606796298306813 -113116318008017777871 103493459351957813291 -103207773865797007066 115565811010545226083 -100084737546039360199 107234826207633309420 -108434394145774737013 116927391465690022495 -112276589013569458330 109074857816744029470 -100084737546039360199 111310990991240556038 -104450760987525660219 112063946124358686266 -109170680659355634945 115739378269261680935 -115739148151601573808 104612091113514802664 -116762461061414014956 100724441783060587617 -103325969492772452485 107117483540235115863 -113116318008017777871 111538009015644508967 -116762461061414014956 104450760987525660219 -108243648069327964538 107090629815001792243 -110731951130561423918 117012574629989558450 -117477042502591652021 109778238062128383421 -105006381068870463173 109581870574956225297 -100269980559891536109 113164038788726940319 -104612091113514802664 104560124403688998123 -112944532473909341307 114790574178411061829 -100093902492789669774 116773104421165750126 -107753428759636856492 105400903062771750089 -112016425853417877466 106189723444098348646 -112016425853417877466 115302451851587317396 -113801236315350503728 101261243957067319422 -108314259245584185142 101263833299534001868 -118156281382429939997 104412682128547752131 -112878918236054024365 104191514233385365427 -109174551750397653742 117421021456205115327 -117691391504351341685 107968787521028284191 -109182513536739786206 117421021456205115327 -116374117927631468606 118320665823821681206 -112016425853417877466 109304903996729396661 -108314259245584185142 100093902492789669774 -116762461061414014956 102034052532213921839 -111091089527727420853 117477042502591652021 -115302451851587317396 109813896768294978296 -100397511207083609950 100871232248276491534 -109182513536739786206 116927391465690022495 -106096957694385885466 105662484616118909569 -114152150496380806218 106100296973968329853 -107033731246200681024 113351703941294630458 -114790574178411061829 103171849011748425097 -107753428759636856492 107117483540235115863 -103691312271671214670 114821161730370452301 -104612091113514802664 115478779964227301239 -105705665708025552983 103100496883422151101 -109304903996729396661 113117251731252114390 -117377434815709898403 101849747879612982297 -114152150496380806218 104792450024518550569 -102403331307606219198 118245559326500322262 -102034052532213921839 118357356982727825178 -101092351652012588236 116773104421165750126 -108817085747440374986 115706830138905259568 -107006059340452534782 105376842241046675559 -106812355611465528242 103207773865797007066 -115302451851587317396 109388259228280605303 -103016521073558596116 110727249496967897430 -115963821022986200770 117421021456205115327 -111975545018506506119 107033731246200681024 -104618664838382110366 108894779805940659869 -109388259228280605303 109170680659355634945 -113920721823301219308 109813896768294978296 -110731951130561423918 111032944513257134357 -112276589013569458330 104450760987525660219 -110774757382682582490 101261243957067319422 -101832196121408756348 115047896996200277508 -103112588675637065591 111091089527727420853 -115739148151601573808 104412682128547752131 -109388259228280605303 113801236315350503728 -113351703941294630458 103716847685048716973 -117377434815709898403 102034052532213921839 -109304903996729396661 113116318008017777871 -100397511207083609950 110318982509514011806 -101849747879612982297 118418436905562612953 -104450760987525660219 109174551750397653742 -109809835379677001002 111310990991240556038 -113801236315350503728 115360979797396777969 -114244914082871792125 115739148151601573808 -106096957694385885466 108894779805940659869 -116762461061414014956 111310990991240556038 -109174551750397653742 105400903062771750089 -100084737546039360199 107896527414017792767 -109196389259504239326 115706830138905259568 -113116318008017777871 106695181236161584825 -111538009015644508967 107992936493665613654 -102034052532213921839 107097980510051172895 -115739378269261680935 111337216646096594888 -102048265612444661933 102545157386069758709 -104450760987525660219 118245559326500322262 -109504122343901736603 114461903539732780109 -118086737936443306746 116762461061414014956 -111707854651652464890 113166718268343560861 -109174551750397653742 109412257237874861202 -114734885658057433270 101246601531247561585 -115565811010545226083 113116318008017777871 -105076678694475690385 103716847685048716973 -109504122343901736603 114632854492678778509 -104987932455782713675 110286587261352351537 -116374117927631468606 103475991020114516832 -111091089527727420853 100535338638690515335 -100084737546039360199 113210431006401244170 -117691391504351341685 105076678694475690385 -109388259228280605303 115017401467423642930 -116374117927631468606 107133948555394893679 -109581870574956225297 109519167630731639094 -104450760987525660219 118207880179234484610 -105662484616118909569 103153499873703329897 -108000051912603578599 103171849011748425097 -112944532473909341307 114758749740576519343 -109809835379677001002 109074857816744029470 -115064258994656104138 113210431006401244170 -114244914082871792125 101704103161442695877 -102048265612444661933 109813896768294978296 -101057616370673656059 107519026002586025827 -115341960624782381062 112016425853417877466 -117377434815709898403 109581870574956225297 -102403331307606219198 107781761552417614958 -107699711897781234810 103207773865797007066 -107519026002586025827 111310990991240556038 -107006059340452534782 115360979797396777969 -103171849011748425097 110727249496967897430 -106312895983244085949 100535338638690515335 -100397511207083609950 109895887909967698705 -117377434815709898403 107968787521028284191 -103100496883422151101 103012564142649561853 -103100496883422151101 102048265612444661933 -111538009015644508967 108894779805940659869 -109581870574956225297 107033731246200681024 -105901259206530390933 105006381068870463173 -104364058018116761460 109778238062128383421 -109182513536739786206 107519026002586025827 -101261243957067319422 116621986644249676039 -102034052532213921839 111310990991240556038 -103660543175586203250 115739148151601573808 -112276589013569458330 103112588675637065591 -115017401467423642930 116621986644249676039 -111538009015644508967 106096957694385885466 -113116318008017777871 110727249496967897430 -106026445270708973611 114790574178411061829 -103016521073558596116 111310990991240556038 -100084737546039360199 107968787521028284191 -117377434815709898403 103207773865797007066 -102034052532213921839 104364058018116761460 -110468193592032465149 116388668762198604003 -103171849011748425097 100523784851251213675 -109304903996729396661 109813896768294978296 -101261243957067319422 115622466243011136115 -115739378269261680935 103582267051807991527 -108000051912603578599 114791921155677330282 -115527632958457358109 100397511207083609950 -116207701819773193333 101213524574984631953 -100397511207083609950 103112588675637065591 -109388259228280605303 103582267051807991527 -107896527414017792767 117550971892000156946 -106096957694385885466 106263529626268281828 -113166718268343560861 118418436905562612953 -115706830138905259568 109778238062128383421 -102034052532213921839 118264184129842070900 -112364132652438722780 113116318008017777871 -101720949843787442951 111091089527727420853 -107196172964000631645 103207773865797007066 -117550971892000156946 116388668762198604003 -103171849011748425097 108574688020691152748 -100173452066172931939 103325969492772452485 -109778238062128383421 111091089527727420853 -117377434815709898403 109895887909967698705 -116207701819773193333 115302451851587317396 -103207773865797007066 113351703941294630458 -111091089527727420853 104987932455782713675 -118086737936443306746 107303107611470093265 -109504122343901736603 114979733565079457374 -112276589013569458330 115360979797396777969 -107753428759636856492 111666959095947698908 -113166718268343560861 105822688186016123722 -113116318008017777871 115863474911002159675 -105901259206530390933 111654284395316165338 -116388668762198604003 114790574178411061829 -113047102292798770205 109339805471557551388 -101261243957067319422 113351703941294630458 -107699711897781234810 106096957694385885466 -115527632958457358109 109895887909967698705 -104412682128547752131 108129202557078877094 -118418436905562612953 101261243957067319422 -109247306373593947755 106345802537137414958 -100084737546039360199 103716847685048716973 -106623900962110772648 106026445270708973611 -107196172964000631645 108082478497335384404 -114152150496380806218 107090629815001792243 -107090629815001792243 114359738470992181937 -113351703941294630458 115622466243011136115 -114991987213662121376 104450760987525660219 -101057616370673656059 102216887206636463918 -113166718268343560861 116927391465690022495 -100871232248276491534 103493459351957813291 -100173452066172931939 102178700954286324866 -113612142759476883204 117421021456205115327 -100084737546039360199 117421021456205115327 -107896527414017792767 100397511207083609950 -110318982509514011806 108000051912603578599 -100269980559891536109 113612142759476883204 -110318982509514011806 116621986644249676039 -108817085747440374986 107519026002586025827 -115739378269261680935 104412682128547752131 -109809835379677001002 112364132652438722780 -101261243957067319422 105822688186016123722 -108952536790629690817 102216887206636463918 -117377434815709898403 110318982509514011806 -115360979797396777969 113801236315350503728 -106122462724662012890 115565811010545226083 -109170680659355634945 112063946124358686266 -105901259206530390933 102178700954286324866 -101094440579835956866 108082478497335384404 -115064258994656104138 113116318008017777871 -116388668762198604003 107117483540235115863 -102403331307606219198 103475991020114516832 -111091089527727420853 107519026002586025827 -115047896996200277508 109813896768294978296 -117691391504351341685 103112588675637065591 -115360979797396777969 105634350975670602787 -108832773152747423283 107896527414017792767 -117421021456205115327 106312895983244085949 -115739378269261680935 108817085747440374986 -110318982509514011806 107753428759636856492 -100084737546039360199 115360979797396777969 -112339769006469685593 109581870574956225297 -107519026002586025827 117421021456205115327 -113920721823301219308 115622466243011136115 -105076678694475690385 115109077044202722504 -102484577222269062816 115047896996200277508 -102545157386069758709 116107530889292552664 -113351703941294630458 100537991844787325512 -102403331307606219198 114632854492678778509 -111538009015644508967 103100496883422151101 -104612091113514802664 118357356982727825178 -101261243957067319422 117421021456205115327 -110318982509514011806 116388668762198604003 -108314259245584185142 109074857816744029470 -116374117927631468606 100173452066172931939 -113164038788726940319 111091089527727420853 -106026445270708973611 101057616370673656059 -105901259206530390933 102216887206636463918 -117691391504351341685 108082478497335384404 -115341960624782381062 115109077044202722504 -100269980559891536109 103112588675637065591 -117691391504351341685 101849747879612982297 -113722523501415106689 111601729473858041964 -104364058018116761460 107781761552417614958 -107753428759636856492 114948739867290323960 -103493459351957813291 102178700954286324866 -109809835379677001002 111285782175840598932 -101261243957067319422 108832773152747423283 -100871232248276491534 102088173699409175139 -117921656724816772352 115739378269261680935 -109170680659355634945 102545157386069758709 -105705665708025552983 110286587261352351537 -109009089551467495747 101246601531247561585 -116207701819773193333 117693415411676715849 -107753428759636856492 114758749740576519343 -109304903996729396661 118207880179234484610 -112016425853417877466 115863474911002159675 -115706830138905259568 104191514233385365427 -109247306373593947755 107753428759636856492 -108314259245584185142 101849747879612982297 -116388668762198604003 109809835379677001002 -109174551750397653742 104560124403688998123 -111091089527727420853 111666959095947698908 -110014891370822989957 111996414642516891950 -100084737546039360199 113920721823301219308 -108899222163640713555 100871232248276491534 -109174551750397653742 113164038788726940319 -107753428759636856492 104987932455782713675 -101213524574984631953 106189723444098348646 -103207773865797007066 103716847685048716973 -106026445270708973611 116388668762198604003 -101246601531247561585 113351703941294630458 -108894779805940659869 106026445270708973611 -115478779964227301239 109182513536739786206 -117421021456205115327 109074857816744029470 -111310990991240556038 108255750659110762991 -115109077044202722504 103475991020114516832 -105006381068870463173 106837636108890930395 -113166718268343560861 109388259228280605303 -115403621788538540544 109170680659355634945 -112364132652438722780 101261243957067319422 -108314259245584185142 102178700954286324866 -101057616370673656059 115360979797396777969 -118086737936443306746 108771911258181286059 -104612091113514802664 113247423264358423892 -113116318008017777871 114948739867290323960 -112364132652438722780 113117251731252114390 -115706830138905259568 115863474911002159675 -100173452066172931939 118418436905562612953 -106695181236161584825 109182513536739786206 -100397511207083609950 117377434815709898403 -105705665708025552983 115064258994656104138 -114549564725160709822 111538009015644508967 -103016521073558596116 105400903062771750089 -102654570556058167176 101704103161442695877 -104618664838382110366 110286587261352351537 -102654570556058167176 106812355611465528242 -102512310412972518336 114832793541825307503 -113722523501415106689 114152150496380806218 -106026445270708973611 103493459351957813291 -110318982509514011806 108255750659110762991 -105207943512906810696 106189723444098348646 -104383523254857614001 103691312271671214670 -100397511207083609950 105006381068870463173 -118357356982727825178 116388668762198604003 -116388668762198604003 103660543175586203250 -115565811010545226083 113247423264358423892 -110318982509514011806 109809835379677001002 -101094440579835956866 111091089527727420853 -106026445270708973611 111538009015644508967 -109304903996729396661 109074857816744029470 -100093902492789669774 107117483540235115863 -110731951130561423918 101629211371073711149 -114991987213662121376 101481313915867030905 -110318982509514011806 115017401467423642930 -103207773865797007066 115360979797396777969 -107896527414017792767 110727249496967897430 -105006381068870463173 109412257237874861202 -106695181236161584825 112852253337028739987 -102403331307606219198 115739148151601573808 -105822688186016123722 116388668762198604003 -115064258994656104138 113475277239647026452 -109304903996729396661 115360979797396777969 -101094440579835956866 102178700954286324866 -100173452066172931939 114152150496380806218 -101057616370673656059 103716847685048716973 -114359738470992181937 110209787594312878744 -115622466243011136115 105634350975670602787 -107196172964000631645 118418436905562612953 -117377434815709898403 110727249496967897430 -115739148151601573808 117421021456205115327 -111666959095947698908 104450760987525660219 -112944532473909341307 107587075873786034394 -108817085747440374986 110318982509514011806 -105705665708025552983 116762461061414014956 -109504122343901736603 101600577333348274552 -111310990991240556038 107519026002586025827 -107896527414017792767 102034052532213921839 -100084737546039360199 103325969492772452485 -104450760987525660219 116374117927631468606 -114832793541825307503 114522811866073303399 -108894779805940659869 111538009015644508967 -104450760987525660219 108771911258181286059 -101600577333348274552 101629211371073711149 -108817085747440374986 107781761552417614958 -115047896996200277508 117157132370347986579 -102034052532213921839 114758749740576519343 -108817085747440374986 116388668762198604003 -108000051912603578599 111337216646096594888 -109809835379677001002 103325969492772452485 -115341960624782381062 112364132652438722780 -115360979797396777969 112364132652438722780 -100397511207083609950 109581870574956225297 -116374117927631468606 114632854492678778509 -100173452066172931939 115047896996200277508 -105076678694475690385 110286587261352351537 -101185406398932804414 117691391504351341685 -113116318008017777871 118264184129842070900 -112364132652438722780 114152150496380806218 -104450760987525660219 114991987213662121376 -101261243957067319422 117691391504351341685 -106695181236161584825 104612091113514802664 -103100496883422151101 110318982509514011806 -109581870574956225297 103012564142649561853 -111091089527727420853 103016521073558596116 -116207701819773193333 115706830138905259568 -112016425853417877466 109074857816744029470 -100397511207083609950 107992936493665613654 -109304903996729396661 114791921155677330282 -109009089551467495747 104191514233385365427 -102512310412972518336 108574688020691152748 -112820512550939559523 118320665823821681206 -110774757382682582490 115622466243011136115 -107753428759636856492 115863474911002159675 -115963821022986200770 101849747879612982297 -116762461061414014956 105632941129656401917 -113116318008017777871 118357356982727825178 -102654570556058167176 115739378269261680935 -105076678694475690385 114549564725160709822 -111975545018506506119 103016521073558596116 -109247306373593947755 104412682128547752131 -104981620794721816747 110318982509514011806 -102034052532213921839 110286587261352351537 -108255750659110762991 107992936493665613654 -111422286077941361166 104612091113514802664 -109304903996729396661 111285782175840598932 -101261243957067319422 111310990991240556038 -117691391504351341685 114244914082871792125 -106190212616572073606 106925005603331131101 -109581870574956225297 111538009015644508967 -105076678694475690385 107968787521028284191 -105076678694475690385 116773104421165750126 -103100496883422151101 101261243957067319422 -103207773865797007066 103016521073558596116 -100269980559891536109 116762461061414014956 -106695181236161584825 113116318008017777871 -102034052532213921839 107968787521028284191 -106312895983244085949 112339769006469685593 -101057616370673656059 117693415411676715849 -105822688186016123722 107992936493665613654 -107793717361981126032 107090629815001792243 -111975545018506506119 103207773865797007066 -102034052532213921839 101261243957067319422 -100093902492789669774 104383523254857614001 -117921656724816772352 117995161934475952507 -115017401467423642930 105006381068870463173 -118357356982727825178 109778238062128383421 -101057616370673656059 109174551750397653742 -115403621788538540544 109388259228280605303 -115302451851587317396 104560124403688998123 -105705665708025552983 106345802537137414958 -117550971892000156946 113116318008017777871 -116762461061414014956 109339805471557551388 -115109077044202722504 107090629815001792243 -108000051912603578599 104364058018116761460 -115047896996200277508 117683744929337064105 -101057616370673656059 107753428759636856492 -102512310412972518336 111171416539633276676 -112339769006469685593 118264184129842070900 -107196172964000631645 117421021456205115327 -114244914082871792125 109174551750397653742 -104364058018116761460 109809835379677001002 -109581870574956225297 107968787521028284191 -111091089527727420853 107097980510051172895 -111171416539633276676 100894876340926769800 -117377434815709898403 112339769006469685593 -117691391504351341685 100084737546039360199 -113166718268343560861 113284787225540728296 -116491285067171323298 101261243957067319422 -115565811010545226083 101569655404865588155 -118086737936443306746 104612091113514802664 -112364132652438722780 107793717361981126032 -108314259245584185142 101261243957067319422 -113164038788726940319 103171849011748425097 -109304903996729396661 101094440579835956866 -114244914082871792125 109247306373593947755 -103171849011748425097 107234826207633309420 -111806715084467662398 102654570556058167176 -107033731246200681024 109412257237874861202 -115739378269261680935 101185406398932804414 -114549564725160709822 109074857816744029470 -106345802537137414958 110318982509514011806 -115920538018564742940 100871232248276491534 -107519026002586025827 107234826207633309420 -111707854651652464890 100537991844787325512 -105076678694475690385 117693415411676715849 -113612142759476883204 113247423264358423892 -103016521073558596116 107117483540235115863 -105076678694475690385 101832771958125915909 -117377434815709898403 104364058018116761460 -109182513536739786206 102403331307606219198 -113116318008017777871 111310990991240556038 -103207773865797007066 101849747879612982297 -118086737936443306746 107992936493665613654 -100871232248276491534 115109077044202722504 -106312895983244085949 117421021456205115327 -100093902492789669774 110318982509514011806 -115739148151601573808 103207773865797007066 -117012574629989558450 103691312271671214670 -116621986644249676039 115047896996200277508 -101261243957067319422 106312895983244085949 -100269980559891536109 102048265612444661933 -112364132652438722780 108082478497335384404 -118207880179234484610 102178700954286324866 -113164038788726940319 115863474911002159675 -104987932455782713675 109813896768294978296 -115360979797396777969 111654284395316165338 -106026445270708973611 104792450024518550569 -102654570556058167176 109247306373593947755 -100084737546039360199 100535338638690515335 -102425976203575211068 117683744929337064105 -109182513536739786206 107234826207633309420 -104870518715355770532 110649214929620497857 -114244914082871792125 108832773152747423283 -108894779805940659869 107968787521028284191 -104450760987525660219 117477042502591652021 -109581870574956225297 102034052532213921839 -105376842241046675559 102178700954286324866 -110774757382682582490 112844561713780016118 -111310990991240556038 116762461061414014956 -116374117927631468606 113210431006401244170 -111091089527727420853 106925005603331131101 -103016521073558596116 116768967108862685383 -106026445270708973611 113920721823301219308 -109304903996729396661 111654284395316165338 -115739148151601573808 103112588675637065591 -114152150496380806218 116927391465690022495 -104618664838382110366 102403331307606219198 -110728349411116483031 110731951130561423918 -111337216646096594888 104412682128547752131 -111975545018506506119 102088173699409175139 -115739378269261680935 108894779805940659869 -103207773865797007066 116107530889292552664 -116762461061414014956 104364058018116761460 -117691391504351341685 100535338638690515335 -111538009015644508967 105376842241046675559 -113164038788726940319 105030465637303791249 -104364058018116761460 109581870574956225297 -103325969492772452485 110727249496967897430 -101246601531247561585 117477042502591652021 -112016425853417877466 115622466243011136115 -115920538018564742940 111975545018506506119 -114918561167106576639 112878918236054024365 -109304903996729396661 101261243957067319422 -113116318008017777871 104560124403688998123 -115739148151601573808 100537991844787325512 -116374117927631468606 113351703941294630458 -101261243957067319422 101832771958125915909 -115565811010545226083 116388668762198604003 -100871232248276491534 101704103161442695877 -106122462724662012890 101094440579835956866 -103171849011748425097 114790574178411061829 -115047896996200277508 101481313915867030905 -100269980559891536109 103171849011748425097 -118357356982727825178 115064258994656104138 -107755092517418534815 112364132652438722780 -112290361600843238282 110728349411116483031 -108082478497335384404 115527632958457358109 -116621986644249676039 109780617142585395916 -106312895983244085949 104612091113514802664 -106837636108890930395 109335713877994755095 -116621986644249676039 111310990991240556038 -113047102292798770205 111310990991240556038 -115064258994656104138 107033731246200681024 -115047896996200277508 110774757382682582490 -101600577333348274552 115739148151601573808 -103100496883422151101 116107530889292552664 -109778238062128383421 111310990991240556038 -109581870574956225297 105822688186016123722 -113116318008017777871 105634350975670602787 -112844561713780016118 101849747879612982297 -103016521073558596116 118320665823821681206 -117421021456205115327 117377434815709898403 -108255750659110762991 104364058018116761460 -107699711897781234810 111538009015644508967 -107755092517418534815 111601729473858041964 -109581870574956225297 117691391504351341685 -112820512550939559523 101094440579835956866 -106665185918564754695 109581870574956225297 -112339769006469685593 108255750659110762991 -108817085747440374986 114461903539732780109 -116374117927631468606 115622466243011136115 -104450760987525660219 107097980510051172895 -104870518715355770532 116762461061414014956 -112364132652438722780 113166718268343560861 -107992936493665613654 102425976203575211068 -103171849011748425097 102034052532213921839 -111337216646096594888 102654570556058167176 -102034052532213921839 117683744929337064105 -107129852879758941909 101704103161442695877 -102654570556058167176 111538009015644508967 -109247306373593947755 111538009015644508967 -115478779964227301239 104450760987525660219 -109388259228280605303 115739378269261680935 -109931095616224405271 115739148151601573808 -111091089527727420853 115527632958457358109 -104612091113514802664 106695181236161584825 -101261243957067319422 116388668762198604003 -107793717361981126032 100871232248276491534 -113164038788726940319 112844561713780016118 -111975545018506506119 112063946124358686266 -105076678694475690385 111310990991240556038 -116374117927631468606 110286587261352351537 -117377434815709898403 112844561713780016118 -101261243957067319422 107992936493665613654 -112276589013569458330 111091089527727420853 -103975368181760158212 104412682128547752131 -106122462724662012890 106312895983244085949 -111091089527727420853 107234826207633309420 -107793717361981126032 112364132652438722780 -104618664838382110366 111422286077941361166 -105901259206530390933 118418436905562612953 -106122462724662012890 114791921155677330282 -115963821022986200770 104987932455782713675 -109504122343901736603 100537991844787325512 -100871232248276491534 105703999093618427814 -100173452066172931939 114790574178411061829 -116491285067171323298 106312895983244085949 -113612142759476883204 103660543175586203250 -104987932455782713675 103325969492772452485 -113116318008017777871 103325969492772452485 -111654284395316165338 100535338638690515335 -100397511207083609950 107133948555394893679 -100397511207083609950 105705665708025552983 -113351703941294630458 108176814619778619437 -102512310412972518336 115017401467423642930 -107755092517418534815 114152150496380806218 -115047896996200277508 103012564142649561853 -111975545018506506119 109895887909967698705 -114244914082871792125 113164038788726940319 -102034052532213921839 109412257237874861202 -101261243957067319422 109813896768294978296 -109504122343901736603 112063946124358686266 -102216887206636463918 108082478497335384404 -107090629815001792243 106822154985570317672 -109304903996729396661 105376842241046675559 -106026445270708973611 100173452066172931939 -108832773152747423283 107033731246200681024 -101185406398932804414 115739378269261680935 -110318982509514011806 107117483540235115863 -102034052532213921839 115863474911002159675 -116374117927631468606 115527632958457358109 -101261243957067319422 101569655404865588155 -108594511384403031361 103660543175586203250 -104364058018116761460 104191514233385365427 -109170680659355634945 100397143564111754723 -104364058018116761460 103171849011748425097 -102545157386069758709 118320665823821681206 -102088173699409175139 115109077044202722504 -100084737546039360199 114948739867290323960 -106096957694385885466 103691312271671214670 -108243648069327964538 114821161730370452301 -118418436905562612953 103493459351957813291 -103153499873703329897 105662484616118909569 -108000051912603578599 105400903062771750089 -112944532473909341307 113920721823301219308 -102512310412972518336 100535338638690515335 -107753428759636856492 113612142759476883204 -101094440579835956866 114790574178411061829 -113116318008017777871 107992936493665613654 -113612142759476883204 112339769006469685593 -106695181236161584825 111091089527727420853 -112364132652438722780 111538009015644508967 -117691391504351341685 109778238062128383421 -104450760987525660219 110286587261352351537 -105705665708025552983 118418436905562612953 -111171416539633276676 110318982509514011806 -112276589013569458330 117377434815709898403 -107753428759636856492 115478779964227301239 -114758749740576519343 109182513536739786206 -115109077044202722504 103691312271671214670 -112820512550939559523 113920721823301219308 -116762461061414014956 116491285067171323298 -103016521073558596116 104191514233385365427 -102403331307606219198 111091089527727420853 -113475277239647026452 107117483540235115863 -100173452066172931939 108255750659110762991 -109196389259504239326 113351703941294630458 -106665185918564754695 110318982509514011806 -106665185918564754695 104450760987525660219 -111091089527727420853 113117251731252114390 -108894779805940659869 101704103161442695877 -116374117927631468606 102512310412972518336 -100397511207083609950 100269980559891536109 -107699711897781234810 108894779805940659869 -114244914082871792125 105076678694475690385 -108817085747440374986 113116318008017777871 -115064258994656104138 103716847685048716973 -115017401467423642930 101261243957067319422 -118086737936443306746 107519026002586025827 -102545157386069758709 112944532473909341307 -102545157386069758709 109247306373593947755 -106665185918564754695 108255750659110762991 -103020619410065980303 109895887909967698705 -113116318008017777871 105006381068870463173 -112820512550939559523 112276589013569458330 -107196172964000631645 105207943512906810696 -100397511207083609950 102484577222269062816 -100173452066172931939 103100496883422151101 -115622466243011136115 102034052532213921839 -110731951130561423918 104383523254857614001 -116374117927631468606 114790574178411061829 -107006059340452534782 101185406398932804414 -111091089527727420853 112852253337028739987 -113047102292798770205 114632854492678778509 -115963821022986200770 105822688186016123722 -105901259206530390933 116768967108862685383 -113612142759476883204 109174551750397653742 -109174551750397653742 103100496883422151101 -108832773152747423283 111654284395316165338 -100093902492789669774 107968787521028284191 -117421021456205115327 104612091113514802664 -100093902492789669774 109412257237874861202 -101246601531247561585 109780617142585395916 -109809835379677001002 103691312271671214670 -102034052532213921839 108000051912603578599 -103016521073558596116 104364058018116761460 -100397511207083609950 118320665823821681206 -109335713877994755095 113210431006401244170 -112364132652438722780 115478779964227301239 -106122462724662012890 118207880179234484610 -102403331307606219198 108817085747440374986 -117377434815709898403 111666959095947698908 -106026445270708973611 108574688020691152748 -101126226710566561379 115109077044202722504 -100084737546039360199 105376842241046675559 -107753428759636856492 103716847685048716973 -105634350975670602787 108574688020691152748 -116762461061414014956 103171849011748425097 -103100496883422151101 107753428759636856492 -106096957694385885466 107308976571078250231 -109170680659355634945 108176814619778619437 -117377434815709898403 114791921155677330282 -103171849011748425097 118357356982727825178 -107196172964000631645 110286587261352351537 -115739378269261680935 103475991020114516832 -116374117927631468606 102034052532213921839 -104987932455782713675 103493459351957813291 -118086737936443306746 109581870574956225297 -110318982509514011806 103020619410065980303 -106312895983244085949 100084737546039360199 -111310990991240556038 103660543175586203250 -100093902492789669774 114244914082871792125 -115478779964227301239 109074857816744029470 -115963821022986200770 109809835379677001002 -112820512550939559523 103716847685048716973 -116207701819773193333 114821161730370452301 -106122462724662012890 116621986644249676039 -101094440579835956866 103716847685048716973 -105076678694475690385 112844561713780016118 -115963821022986200770 108832773152747423283 -105901259206530390933 108255750659110762991 -110318982509514011806 109247306373593947755 -107117418142368704725 104450760987525660219 -104450760987525660219 107133948555394893679 -109504122343901736603 108082478497335384404 -100269980559891536109 117377434815709898403 -110728349411116483031 109388259228280605303 -106925005603331131101 116762461061414014956 -113166718268343560861 110727249496967897430 -113116318008017777871 116773104421165750126 -103207773865797007066 115920538018564742940 -103016521073558596116 100856165335040300712 -107133948555394893679 111310990991240556038 -114244914082871792125 116491285067171323298 -105400903062771750089 112276589013569458330 -102034052532213921839 105634350975670602787 -107755092517418534815 100856165335040300712 -109931095616224405271 102484577222269062816 -107133948555394893679 104612091113514802664 -102654570556058167176 115109077044202722504 -115706830138905259568 104364058018116761460 -106925005603331131101 107587075873786034394 -103100496883422151101 103325969492772452485 -115360979797396777969 103112588675637065591 -117377434815709898403 109174551750397653742 -109581870574956225297 100537991844787325512 -106925005603331131101 118086737936443306746 -115565811010545226083 110318982509514011806 -111975545018506506119 102216887206636463918 -117691391504351341685 113210431006401244170 -113612142759476883204 112063946124358686266 -109174551750397653742 111538009015644508967 -110318982509514011806 114991987213662121376 -108832773152747423283 103171849011748425097 -116762461061414014956 111538009015644508967 -104364058018116761460 114948739867290323960 -109809835379677001002 111538009015644508967 -112878918236054024365 100415723513846680553 -107519026002586025827 114632854492678778509 -117921656724816772352 115109077044202722504 -102654570556058167176 103691312271671214670 -109581870574956225297 107519026002586025827 -109581870574956225297 100535338638690515335 -109182513536739786206 107033731246200681024 -115622466243011136115 100084737546039360199 -104450760987525660219 115622466243011136115 -108817085747440374986 106312895983244085949 -103100496883422151101 108255750659110762991 -113920721823301219308 109581870574956225297 -118357356982727825178 117691391504351341685 -107753428759636856492 111285782175840598932 -107753428759636856492 113920721823301219308 -113612142759476883204 113116318008017777871 -105822688186016123722 114979733565079457374 -113920721823301219308 115565811010545226083 -106312895983244085949 115064258994656104138 -106122462724662012890 101213524574984631953 -103100496883422151101 109174551750397653742 -113722523501415106689 112364132652438722780 -112364132652438722780 106096957694385885466 -107519026002586025827 112944532473909341307 -105076678694475690385 115739378269261680935 -112016425853417877466 105703999093618427814 -101720949843787442951 112364132652438722780 -100269980559891536109 109581870574956225297 -102403331307606219198 108176814619778619437 -105076678694475690385 107699711897781234810 -112364132652438722780 104792450024518550569 -101849747879612982297 110286587261352351537 -115341960624782381062 101849747879612982297 -118156281382429939997 109388259228280605303 -105901259206530390933 107753428759636856492 -103016521073558596116 114632854492678778509 -104450760987525660219 113116318008017777871 -114751436351490918894 115302451851587317396 -100269980559891536109 103716847685048716973 -100397511207083609950 109247306373593947755 -100397511207083609950 113920721823301219308 -114244914082871792125 100173452066172931939 -115109077044202722504 116192724891839469024 -117421021456205115327 113116318008017777871 -106925005603331131101 103012564142649561853 -109388259228280605303 113612142759476883204 -108314259245584185142 108894779805940659869 -110318982509514011806 104364058018116761460 -108243648069327964538 113284787225540728296 -109304903996729396661 109581870574956225297 -111654284395316165338 109813896768294978296 -103171849011748425097 106345802537137414958 -101261243957067319422 110209787594312878744 -107896527414017792767 112844561713780016118 -104618664838382110366 116621986644249676039 -116548025566090395827 107303107611470093265 -115064258994656104138 116388668762198604003 -116621986644249676039 117477042502591652021 -115963821022986200770 100262595546646927505 -110728349411116483031 106263529626268281828 -100353346783543697435 107303107611470093265 -109778238062128383421 100415723513846680553 -115739378269261680935 100535338638690515335 -111091089527727420853 107753428759636856492 -115963821022986200770 107234826207633309420 -117691391504351341685 115565811010545226083 -116621986644249676039 106100296973968329853 -102484577222269062816 100537991844787325512 -104987932455782713675 117421021456205115327 -102512310412972518336 109780617142585395916 -115739378269261680935 111538009015644508967 -115109077044202722504 117477042502591652021 -112339769006469685593 109813896768294978296 -115478779964227301239 107117483540235115863 -109182513536739786206 104364058018116761460 -114758749740576519343 102034052532213921839 -106224435901697064976 100535338638690515335 -115064258994656104138 108434394145774737013 -111310990991240556038 113475277239647026452 -103493459351957813291 107753428759636856492 -113612142759476883204 113117251731252114390 -107090629815001792243 112016425853417877466 -111422286077941361166 117421021456205115327 -106312895983244085949 118320665823821681206 -102034052532213921839 108255750659110762991 -104364058018116761460 104987932455782713675 -108894779805940659869 101246601531247561585 -107519026002586025827 115863474911002159675 -105076678694475690385 108082478497335384404 -104191514233385365427 102654570556058167176 -100535338638690515335 103325969492772452485 -109778238062128383421 114461903539732780109 -108255750659110762991 114079920283986872783 -118357356982727825178 117377434815709898403 -107519026002586025827 101629211371073711149 -107753428759636856492 100262595546646927505 -103100496883422151101 115963821022986200770 -100856165335040300712 103153499873703329897 -101261243957067319422 104560124403688998123 -115739148151601573808 116374117927631468606 -114152150496380806218 107755092517418534815 -106263529626268281828 104870518715355770532 -115565811010545226083 114790574178411061829 -115478779964227301239 109412257237874861202 -115739148151601573808 110318982509514011806 -104612091113514802664 111310990991240556038 -111538009015644508967 110286587261352351537 -117421021456205115327 117550971892000156946 -108817085747440374986 112844561713780016118 -108000051912603578599 114758749740576519343 -115706830138905259568 103020619410065980303 -101832196121408756348 103691312271671214670 -108000051912603578599 102048265612444661933 -114549564725160709822 116773104421165750126 -109581870574956225297 113116318008017777871 -105076678694475690385 100523784851251213675 -115739378269261680935 106096957694385885466 -118264184129842070900 108574688020691152748 -104987932455782713675 109412257237874861202 -112016425853417877466 100397511207083609950 -115047896996200277508 102178700954286324866 -107896527414017792767 113210431006401244170 -103207773865797007066 100262595546646927505 -106122462724662012890 113116318008017777871 -113166718268343560861 116723923766489326849 -100093902492789669774 108952536790629690817 -101094440579835956866 107033731246200681024 -111091089527727420853 108255750659110762991 -116762461061414014956 111091089527727420853 -106096957694385885466 111032944513257134357 -116107530889292552664 105006381068870463173 -103016521073558596116 107006059340452534782 -108243648069327964538 109304903996729396661 -100397511207083609950 107234826207633309420 -106695181236161584825 114948739867290323960 -109247306373593947755 115706830138905259568 -113612142759476883204 105076678694475690385 -114244914082871792125 106312895983244085949 -103016521073558596116 100019606796298306813 -115109077044202722504 104412682128547752131 -108894779805940659869 106100296973968329853 -116773104421165750126 113722523501415106689 -102403331307606219198 108000051912603578599 -100535338638690515335 110209787594312878744 -108243648069327964538 105400903062771750089 -100093902492789669774 105703999093618427814 -100397511207083609950 113801236315350503728 -116374117927631468606 108176814619778619437 -101094440579835956866 103112588675637065591 -107753428759636856492 108817085747440374986 -115565811010545226083 107033731246200681024 -111975545018506506119 111666959095947698908 -104618664838382110366 118418436905562612953 -107519026002586025827 108000051912603578599 -101261243957067319422 102178700954286324866 -112016425853417877466 113612142759476883204 -104612091113514802664 100262595546646927505 -109504122343901736603 104612091113514802664 -109304903996729396661 107896527414017792767 -101261243957067319422 100523784851251213675 -107896527414017792767 113920721823301219308 -117421021456205115327 103112588675637065591 -115963821022986200770 111538009015644508967 -116388668762198604003 115360979797396777969 -100084737546039360199 115478779964227301239 -104364058018116761460 110727249496967897430 -100535338638690515335 106189723444098348646 -104364058018116761460 107587075873786034394 -116374117927631468606 106189723444098348646 -102216887206636463918 103171849011748425097 -103016521073558596116 116927391465690022495 -118086737936443306746 115064258994656104138 -115739378269261680935 104870518715355770532 -100001826804813287036 111601729473858041964 -101832196121408756348 116927391465690022495 -117691391504351341685 105822688186016123722 -109780617142585395916 109247306373593947755 -113116318008017777871 109778238062128383421 -113047102292798770205 115622466243011136115 -115739378269261680935 114821161730370452301 -115565811010545226083 109581870574956225297 -106067770652209688980 115302451851587317396 -111538009015644508967 115047896996200277508 -102512310412972518336 110286587261352351537 -113116318008017777871 117683744929337064105 -109170680659355634945 116762461061414014956 -109581870574956225297 108000051912603578599 -108000051912603578599 102178700954286324866 -104364058018116761460 116388668762198604003 -100535338638690515335 109813896768294978296 -102654570556058167176 113801236315350503728 -108000051912603578599 104412682128547752131 -115392876317176762477 101261243957067319422 -113116318008017777871 101213524574984631953 -111538009015644508967 104191514233385365427 -101261243957067319422 103325969492772452485 -104618664838382110366 100415723513846680553 -112364132652438722780 118207880179234484610 -108314259245584185142 118207880179234484610 -105901259206530390933 112944532473909341307 -102654570556058167176 104964811874969620954 -101849747879612982297 117691391504351341685 -101094440579835956866 115706830138905259568 -100397511207083609950 101185406398932804414 -115064258994656104138 109809835379677001002 -101246601531247561585 109388259228280605303 -111091089527727420853 115963821022986200770 -111996414642516891950 110014891370822989957 -115739378269261680935 105006381068870463173 -105705665708025552983 100019606796298306813 -111091089527727420853 113801236315350503728 -111975545018506506119 111091089527727420853 -116762461061414014956 109519167630731639094 -103207773865797007066 116491285067171323298 -117691391504351341685 113247423264358423892 -102512310412972518336 100257676670422660178 -113166718268343560861 115863474911002159675 -109504122343901736603 101481313915867030905 -107753428759636856492 111091089527727420853 -108817085747440374986 100269980559891536109 -106096957694385885466 109388259228280605303 -105076678694475690385 118418436905562612953 -116762461061414014956 111601729473858041964 -103153499873703329897 110286587261352351537 -116773104421165750126 101849747879612982297 -111666959095947698908 107033731246200681024 -115064258994656104138 114790574178411061829 -109809835379677001002 110318982509514011806 -105076678694475690385 114244914082871792125 -105901259206530390933 111285782175840598932 -104870518715355770532 106100296973968329853 -116207701819773193333 112063946124358686266 -103016521073558596116 101832196121408756348 -104450760987525660219 108243648069327964538 -100535338638690515335 109304903996729396661 -113920721823301219308 104987932455782713675 -101057616370673656059 107117483540235115863 -106312895983244085949 101094440579835956866 -100173452066172931939 113247423264358423892 -103975368181760158212 101832771958125915909 -103016521073558596116 113475277239647026452 -100084737546039360199 110318982509514011806 -101481313915867030905 114791921155677330282 -109581870574956225297 109182513536739786206 -102512310412972518336 115302451851587317396 -105901259206530390933 107033731246200681024 -109196389259504239326 116374117927631468606 -115706830138905259568 116762461061414014956 -115565811010545226083 100084737546039360199 -104412682128547752131 108000051912603578599 -108817085747440374986 103325969492772452485 -105076678694475690385 101569655404865588155 -116926943858449614201 115392876317176762477 -106312895983244085949 110318982509514011806 -107753428759636856492 118357356982727825178 -111091089527727420853 113351703941294630458 -110731951130561423918 104450760987525660219 -106812355611465528242 102654570556058167176 -109247306373593947755 109780617142585395916 -101057616370673656059 112276589013569458330 -100871232248276491534 110318982509514011806 -116374117927631468606 107006059340452534782 -117377434815709898403 118264184129842070900 -102034052532213921839 112944532473909341307 -118357356982727825178 106189723444098348646 -109247306373593947755 111337216646096594888 -102512310412972518336 113920721823301219308 -106026445270708973611 109388259228280605303 -118017787526225833770 100871232248276491534 -101720949843787442951 116374117927631468606 -112276589013569458330 111654284395316165338 -110014891370822989957 104277680236688325392 -104277680236688325392 110014891370822989957 -113166718268343560861 106026445270708973611 -116762461061414014956 100262595546646927505 -106312895983244085949 114244914082871792125 -116773104421165750126 113801236315350503728 -100173452066172931939 102034052532213921839 -106122462724662012890 111285782175840598932 -114079920283986872783 118357356982727825178 -108243648069327964538 115064258994656104138 -113047102292798770205 113612142759476883204 -109388259228280605303 103691312271671214670 -100871232248276491534 106812355611465528242 -108817085747440374986 101569655404865588155 -105705665708025552983 100535338638690515335 -107303107611470093265 118264184129842070900 -116388668762198604003 118357356982727825178 -102403331307606219198 109182513536739786206 -115739378269261680935 106189723444098348646 -113116318008017777871 105822688186016123722 -112276589013569458330 100535338638690515335 -103020619410065980303 108000051912603578599 -109581870574956225297 110209787594312878744 -105705665708025552983 107753428759636856492 -107133948555394893679 118320665823821681206 -107196172964000631645 112844561713780016118 -106122462724662012890 107234826207633309420 -112878918236054024365 100537991844787325512 -115403621788538540544 109009089551467495747 -102705549361550492663 114821161730370452301 -106026445270708973611 103660543175586203250 -111091089527727420853 107133948555394893679 -113612142759476883204 118207880179234484610 -109778238062128383421 116927391465690022495 -118357356982727825178 114790574178411061829 -104450760987525660219 115047896996200277508 -113801236315350503728 103207773865797007066 -111975545018506506119 103493459351957813291 -103171849011748425097 113612142759476883204 -101057616370673656059 111285782175840598932 -115739148151601573808 103475991020114516832 -113116318008017777871 116762461061414014956 -107129852879758941909 101185406398932804414 -108817085747440374986 112878918236054024365 -109504122343901736603 109581870574956225297 -103207773865797007066 106263529626268281828 -108000051912603578599 102403331307606219198 -105901259206530390933 117691391504351341685 -107090629815001792243 116927391465690022495 -104987932455782713675 103100496883422151101 -103100496883422151101 109895887909967698705 -112820512550939559523 114948739867290323960 -107196172964000631645 107033731246200681024 -109388259228280605303 115109077044202722504 -104450760987525660219 115963821022986200770 -106665185918564754695 113116318008017777871 -115109077044202722504 104191514233385365427 -101261243957067319422 100535338638690515335 -104612091113514802664 113047102292798770205 -109247306373593947755 110318982509514011806 -100093902492789669774 109813896768294978296 -100173452066172931939 117691391504351341685 -113116318008017777871 103012564142649561853 -116374117927631468606 112276589013569458330 -112944532473909341307 107992936493665613654 -105822688186016123722 113164038788726940319 -106312895983244085949 114821161730370452301 -115706830138905259568 104412682128547752131 -113166718268343560861 103493459351957813291 -104450760987525660219 109074857816744029470 -115360979797396777969 112820512550939559523 -105076678694475690385 102034052532213921839 -115064258994656104138 115622466243011136115 -116374117927631468606 115863474911002159675 -109809835379677001002 108082478497335384404 -116762461061414014956 117477042502591652021 -102034052532213921839 113612142759476883204 -102545157386069758709 104560124403688998123 -113612142759476883204 103171849011748425097 -118357356982727825178 107033731246200681024 -106312895983244085949 112276589013569458330 -103207773865797007066 115047896996200277508 -116374117927631468606 116491285067171323298 -113116318008017777871 107234826207633309420 -106224435901697064976 107117483540235115863 -113166718268343560861 114918561167106576639 -104987932455782713675 113920721823301219308 -110728349411116483031 106822154985570317672 -108314259245584185142 105076678694475690385 -107896527414017792767 109778238062128383421 -102545157386069758709 101261243957067319422 -109504122343901736603 108000051912603578599 -100535338638690515335 108255750659110762991 -101246601531247561585 109895887909967698705 -117550971892000156946 103475991020114516832 -113351703941294630458 113116318008017777871 -117921656724816772352 113166718268343560861 -101057616370673656059 116762461061414014956 -101126226710566561379 115739378269261680935 -113116318008017777871 100084737546039360199 -115565811010545226083 101629211371073711149 -114991987213662121376 107781761552417614958 -106026445270708973611 115706830138905259568 -109931095616224405271 111091089527727420853 -103020619410065980303 116762461061414014956 -112016425853417877466 102178700954286324866 -106665185918564754695 111538009015644508967 -100173452066172931939 113612142759476883204 -106312895983244085949 100523784851251213675 -112276589013569458330 115047896996200277508 -103016521073558596116 115360979797396777969 -112016425853417877466 109335713877994755095 -106026445270708973611 115478779964227301239 -117691391504351341685 107033731246200681024 -111538009015644508967 107033731246200681024 -106837636108890930395 102512310412972518336 -111310990991240556038 103112588675637065591 -115527632958457358109 113801236315350503728 -113116318008017777871 109504122343901736603 -109170680659355634945 111337216646096594888 -116207701819773193333 101849747879612982297 -108952536790629690817 117995161934475952507 -104383523254857614001 104066486855641683676 -113920721823301219308 106189723444098348646 -103691312271671214670 100173452066172931939 -103016521073558596116 101720949843787442951 -106312895983244085949 102034052532213921839 -113116318008017777871 108574688020691152748 -115706830138905259568 113210431006401244170 -114758749740576519343 102178700954286324866 -102512310412972518336 104560124403688998123 -100397511207083609950 105076678694475690385 -106312895983244085949 107896527414017792767 -113116318008017777871 101629211371073711149 -102034052532213921839 116388668762198604003 -111091089527727420853 115403621788538540544 -115360979797396777969 110318982509514011806 -118418436905562612953 116768967108862685383 -102545157386069758709 110318982509514011806 -107753428759636856492 103171849011748425097 -117691391504351341685 114758749740576519343 -113920721823301219308 100535338638690515335 -106925005603331131101 104412682128547752131 -115478779964227301239 113116318008017777871 -115403621788538540544 101246601531247561585 -106312895983244085949 108082478497335384404 -102545157386069758709 111091089527727420853 -104987932455782713675 110209787594312878744 -104987932455782713675 104618664838382110366 -104364058018116761460 118264184129842070900 -108082478497335384404 115863474911002159675 -114918561167106576639 108000051912603578599 -100269980559891536109 101094440579835956866 -107129852879758941909 100871232248276491534 -110731951130561423918 108314259245584185142 -112364132652438722780 116762461061414014956 -104612091113514802664 115622466243011136115 -108894779805940659869 103475991020114516832 -110774757382682582490 108574688020691152748 -115565811010545226083 107097980510051172895 -111310990991240556038 107753428759636856492 -116773104421165750126 115739378269261680935 -113166718268343560861 108894779805940659869 -101057616370673656059 100084737546039360199 -108817085747440374986 103207773865797007066 -104383523254857614001 115109077044202722504 -116207701819773193333 101569655404865588155 -107753428759636856492 105376842241046675559 -100535338638690515335 107753428759636856492 -104450760987525660219 102705549361550492663 -104987932455782713675 104364058018116761460 -103207773865797007066 109388259228280605303 -111091089527727420853 109895887909967698705 -100084737546039360199 104560124403688998123 -100173452066172931939 106812355611465528242 -115739378269261680935 101832196121408756348 -115920538018564742940 103691312271671214670 -111538009015644508967 104364058018116761460 -107753428759636856492 101225750534150134109 -115478779964227301239 108255750659110762991 -115739378269261680935 100093902492789669774 -112364132652438722780 114549564725160709822 -109304903996729396661 104364058018116761460 -109182513536739786206 103475991020114516832 -114244914082871792125 102178700954286324866 -100269980559891536109 117421021456205115327 -100397511207083609950 111538009015644508967 -109247306373593947755 101704103161442695877 -112276589013569458330 106312895983244085949 -117377434815709898403 105030465637303791249 -101094440579835956866 115565811010545226083 -115360979797396777969 118320665823821681206 -112364132652438722780 107968787521028284191 -115392876317176762477 108314259245584185142 -111996414642516891950 103153499873703329897 -111975545018506506119 103171849011748425097 -118357356982727825178 110727249496967897430 -109581870574956225297 106665185918564754695 -113166718268343560861 114979733565079457374 -101261243957067319422 110318982509514011806 -116207701819773193333 115622466243011136115 -116548025566090395827 114821161730370452301 -101261243957067319422 105634350975670602787 -110318982509514011806 103012564142649561853 -102545157386069758709 115047896996200277508 -102512310412972518336 108000051912603578599 -109809835379677001002 101569655404865588155 -116374117927631468606 116927391465690022495 -100173452066172931939 116107530889292552664 -109388259228280605303 111337216646096594888 -101261243957067319422 109182513536739786206 -106096957694385885466 116723923766489326849 -101126226710566561379 104066486855641683676 -100856165335040300712 106623900962110772648 -112016425853417877466 103112588675637065591 -100871232248276491534 106026445270708973611 -100397511207083609950 101720949843787442951 -114918561167106576639 101094440579835956866 -111171416539633276676 111091089527727420853 -108082478497335384404 115963821022986200770 -118245559326500322262 113801236315350503728 -105076678694475690385 110318982509514011806 -102034052532213921839 100084737546039360199 -102512310412972518336 111654284395316165338 -100535338638690515335 115863474911002159675 -115527632958457358109 114791921155677330282 -101246601531247561585 111538009015644508967 -115739378269261680935 107699711897781234810 -101246601531247561585 109009089551467495747 -103691312271671214670 108082478497335384404 -109504122343901736603 103475991020114516832 -110774757382682582490 105376842241046675559 -104191514233385365427 108434394145774737013 -100397511207083609950 108000051912603578599 -101849747879612982297 104560124403688998123 -111091089527727420853 101213524574984631953 -110318982509514011806 113475277239647026452 -101720949843787442951 104618664838382110366 -113166718268343560861 106100296973968329853 -102545157386069758709 109809835379677001002 -104612091113514802664 103475991020114516832 -116926943858449614201 110728349411116483031 -105207943512906810696 116388668762198604003 -113166718268343560861 109182513536739786206 -100093902492789669774 107033731246200681024 -108894779805940659869 112063946124358686266 -100173452066172931939 115109077044202722504 -113047102292798770205 107968787521028284191 -109809835379677001002 117157132370347986579 -113475277239647026452 102178700954286324866 -108082478497335384404 118357356982727825178 -109335713877994755095 115302451851587317396 -109504122343901736603 106189723444098348646 -115302451851587317396 102512310412972518336 -103016521073558596116 103537420161725387429 -103207773865797007066 102088173699409175139 -102512310412972518336 111538009015644508967 -118245559326500322262 115963821022986200770 -106925005603331131101 114461903539732780109 -115360979797396777969 100397511207083609950 -100397511207083609950 101094440579835956866 -105901259206530390933 107234826207633309420 -104450760987525660219 101261243957067319422 -117421021456205115327 103012564142649561853 -111091089527727420853 108894779805940659869 -117691391504351341685 108771911258181286059 -115622466243011136115 104560124403688998123 -105901259206530390933 109813896768294978296 -118418436905562612953 106100296973968329853 -101261243957067319422 115478779964227301239 -115109077044202722504 107753428759636856492 -100093902492789669774 108176814619778619437 -100173452066172931939 109412257237874861202 -106665185918564754695 107117483540235115863 -100535338638690515335 109074857816744029470 -104987932455782713675 117377434815709898403 -102688620589277847136 100606519862794948506 -114244914082871792125 118320665823821681206 -111091089527727420853 109247306373593947755 -111337216646096594888 101832771958125915909 -108255750659110762991 101094440579835956866 -116768967108862685383 108176814619778619437 -108082478497335384404 107519026002586025827 -105703999093618427814 106100296973968329853 -104450760987525660219 115565811010545226083 -113166718268343560861 106189723444098348646 -109504122343901736603 103012564142649561853 -104450760987525660219 107896527414017792767 -113116318008017777871 101849747879612982297 -107753428759636856492 111310990991240556038 -114758749740576519343 107519026002586025827 -100397511207083609950 111171416539633276676 -113116318008017777871 117550971892000156946 -114991987213662121376 114758749740576519343 -115360979797396777969 102034052532213921839 -109388259228280605303 109780617142585395916 -100353346783543697435 111538009015644508967 -106665185918564754695 107519026002586025827 -116374117927631468606 113475277239647026452 -115622466243011136115 100523784851251213675 -117377434815709898403 111601729473858041964 -106122462724662012890 118357356982727825178 -112364132652438722780 115565811010545226083 -106695181236161584825 104450760987525660219 -113166718268343560861 102216887206636463918 -106026445270708973611 109809835379677001002 -113612142759476883204 107992936493665613654 -109304903996729396661 107106500560002041088 -116762461061414014956 117421021456205115327 -115739378269261680935 108899222163640713555 -115565811010545226083 106189723444098348646 -113920721823301219308 111091089527727420853 -101057616370673656059 108255750659110762991 -105705665708025552983 111538009015644508967 -100084737546039360199 111654284395316165338 -108894779805940659869 103691312271671214670 -112276589013569458330 115478779964227301239 -107090629815001792243 104792450024518550569 -104450760987525660219 100262595546646927505 -104450760987525660219 109813896768294978296 -111538009015644508967 100871232248276491534 -116374117927631468606 115109077044202722504 -104987932455782713675 107992936493665613654 -113164038788726940319 109174551750397653742 -115109077044202722504 109412257237874861202 -118086737936443306746 116388668762198604003 -107753428759636856492 100084737546039360199 -115047896996200277508 108082478497335384404 -112016425853417877466 115527632958457358109 -115739378269261680935 103112588675637065591 -115064258994656104138 114948739867290323960 -112276589013569458330 106665185918564754695 -115706830138905259568 111538009015644508967 -104450760987525660219 101569655404865588155 -104364058018116761460 104612091113514802664 -100093902492789669774 108314259245584185142 -118357356982727825178 117421021456205115327 -114244914082871792125 103171849011748425097 -104226321884965863264 108771911258181286059 -117693415411676715849 113164038788726940319 -102425976203575211068 100019606796298306813 -112339769006469685593 105076678694475690385 -107129852879758941909 105006381068870463173 -104450760987525660219 117550971892000156946 -115963821022986200770 101094440579835956866 -111261496925076985134 111091089527727420853 -115360979797396777969 106189723444098348646 -106224435901697064976 107753428759636856492 -106122462724662012890 117691391504351341685 -100871232248276491534 110286587261352351537 -111091089527727420853 107196172964000631645 -111337216646096594888 114790574178411061829 -104450760987525660219 113210431006401244170 -100856165335040300712 106100296973968329853 -101261243957067319422 102034052532213921839 -115622466243011136115 100397511207083609950 -116762461061414014956 100084737546039360199 -108255750659110762991 101213524574984631953 -100871232248276491534 100537991844787325512 -115341960624782381062 107755092517418534815 -101057616370673656059 101094440579835956866 -108000051912603578599 109182513536739786206 -103567864289861449366 117693415411676715849 -102034052532213921839 114979733565079457374 -114918561167106576639 107519026002586025827 -113801236315350503728 112844561713780016118 -107753428759636856492 106925005603331131101 -105705665708025552983 108000051912603578599 -111666959095947698908 113116318008017777871 -109504122343901736603 118086737936443306746 -110774757382682582490 113068441549452664746 -100093902492789669774 105076678694475690385 -102654570556058167176 109780617142585395916 -111975545018506506119 107968787521028284191 -115478779964227301239 111091089527727420853 -109009089551467495747 111285782175840598932 -105076678694475690385 105822688186016123722 -106224435901697064976 115622466243011136115 -103207773865797007066 116768967108862685383 -103016521073558596116 107968787521028284191 -116491285067171323298 109813896768294978296 -108817085747440374986 111538009015644508967 -113047102292798770205 103660543175586203250 -116388668762198604003 102178700954286324866 -116621986644249676039 102654570556058167176 -103100496883422151101 116762461061414014956 -110318982509514011806 103171849011748425097 -113920721823301219308 103716847685048716973 -100535338638690515335 113116318008017777871 -118357356982727825178 114079920283986872783 -115920538018564742940 104066486855641683676 -107755092517418534815 112276589013569458330 -111538009015644508967 100019606796298306813 -108817085747440374986 114790574178411061829 -111707854651652464890 118320665823821681206 -111091089527727420853 107699711897781234810 -114991987213662121376 103020619410065980303 -105400903062771750089 101720949843787442951 -112276589013569458330 115565811010545226083 -115109077044202722504 117921656724816772352 -108894779805940659869 106837636108890930395 -108243648069327964538 108574688020691152748 -112852253337028739987 112878918236054024365 -107519026002586025827 100269980559891536109 -117691391504351341685 110727249496967897430 -102545157386069758709 112063946124358686266 -118156281382429939997 115739378269261680935 -116107530889292552664 114991987213662121376 -117691391504351341685 107106500560002041088 -109247306373593947755 115739148151601573808 -112276589013569458330 108255750659110762991 -109504122343901736603 101849747879612982297 -107793717361981126032 106026445270708973611 -116374117927631468606 114549564725160709822 -111422286077941361166 100397143564111754723 -112016425853417877466 101569655404865588155 -115527632958457358109 114244914082871792125 -104450760987525660219 107968787521028284191 -104612091113514802664 103716847685048716973 -107519026002586025827 103660543175586203250 -117421021456205115327 105822688186016123722 -112364132652438722780 101849747879612982297 -100871232248276491534 113166718268343560861 -102216887206636463918 109074857816744029470 -111310990991240556038 107896527414017792767 -105076678694475690385 103475991020114516832 -116621986644249676039 103207773865797007066 -111310990991240556038 112063946124358686266 -106665185918564754695 101094440579835956866 -112016425853417877466 109813896768294978296 -113351703941294630458 109074857816744029470 -111654284395316165338 101720949843787442951 -107519026002586025827 111538009015644508967 -117477042502591652021 117550971892000156946 -117477042502591652021 110649214929620497857 -111310990991240556038 108082478497335384404 -105901259206530390933 100397143564111754723 -102034052532213921839 103325969492772452485 -109581870574956225297 103325969492772452485 -115109077044202722504 100856165335040300712 -102034052532213921839 109074857816744029470 -102688620589277847136 104450760987525660219 -112878918236054024365 109778238062128383421 -104191514233385365427 109170680659355634945 -111310990991240556038 111538009015644508967 -109335713877994755095 102512310412972518336 -115109077044202722504 107626068753267217775 -106312895983244085949 107753428759636856492 -116374117927631468606 100537991844787325512 -116762461061414014956 103100496883422151101 -107699711897781234810 105006381068870463173 -100535338638690515335 111538009015644508967 -109247306373593947755 112944532473909341307 -106695181236161584825 115565811010545226083 -106026445270708973611 115109077044202722504 -103100496883422151101 111310990991240556038 -103016521073558596116 114244914082871792125 -115739148151601573808 111422286077941361166 -112878918236054024365 114979733565079457374 -106026445270708973611 112276589013569458330 -106096957694385885466 117012574629989558450 -109174551750397653742 118357356982727825178 -115963821022986200770 100397511207083609950 -101261243957067319422 114791921155677330282 -102216887206636463918 110318982509514011806 -106096957694385885466 101704103161442695877 -105901259206530390933 103660543175586203250 -115047896996200277508 111538009015644508967 -104618664838382110366 109931095616224405271 -112878918236054024365 109931095616224405271 -103691312271671214670 110286587261352351537 -100397511207083609950 116491285067171323298 -116374117927631468606 117693415411676715849 -100093902492789669774 106100296973968329853 -115622466243011136115 110468193592032465149 -115706830138905259568 101094440579835956866 -111091089527727420853 105901259206530390933 -115047896996200277508 102010610384685218706 -118245559326500322262 103475991020114516832 -112364132652438722780 117421021456205115327 -100084737546039360199 118357356982727825178 -114244914082871792125 113801236315350503728 -106122462724662012890 113068441549452664746 -101261243957067319422 116491285067171323298 -105822688186016123722 104618664838382110366 -101246601531247561585 105863188856924083857 -110731951130561423918 115047896996200277508 -100397511207083609950 115064258994656104138 -101246601531247561585 116621986644249676039 -113166718268343560861 107699711897781234810 -116374117927631468606 109412257237874861202 -106224435901697064976 100262595546646927505 -115064258994656104138 115863474911002159675 -109196389259504239326 115527632958457358109 -106122462724662012890 111091089527727420853 -116374117927631468606 103171849011748425097 -101213524574984631953 108255750659110762991 -115739378269261680935 118156281382429939997 -112364132652438722780 116773104421165750126 -109581870574956225297 115478779964227301239 -112276589013569458330 115739148151601573808 -107753428759636856492 118207880179234484610 -103493459351957813291 109247306373593947755 -109304903996729396661 108832773152747423283 -116491285067171323298 111091089527727420853 -114244914082871792125 105400903062771750089 -108952536790629690817 111091089527727420853 -100084737546039360199 109809835379677001002 -108082478497335384404 113116318008017777871 -117550971892000156946 101569655404865588155 -113351703941294630458 110468193592032465149 -104412682128547752131 101246601531247561585 -105006381068870463173 102654570556058167176 -115341960624782381062 100871232248276491534 -110318982509514011806 104987932455782713675 -108832773152747423283 105076678694475690385 -106026445270708973611 104612091113514802664 -106312895983244085949 108255750659110762991 -117377434815709898403 103112588675637065591 -102088173699409175139 100871232248276491534 -106665185918564754695 104560124403688998123 -113116318008017777871 107033731246200681024 -100084737546039360199 100523784851251213675 -108894779805940659869 104191514233385365427 -110318982509514011806 111285782175840598932 -117421021456205115327 109813896768294978296 -111538009015644508967 104412682128547752131 -100093902492789669774 118207880179234484610 -117377434815709898403 118207880179234484610 -102034052532213921839 102048265612444661933 -104870518715355770532 116374117927631468606 -115565811010545226083 118207880179234484610 -102088173699409175139 101261243957067319422 -103100496883422151101 103171849011748425097 -107896527414017792767 101213524574984631953 -103207773865797007066 102512310412972518336 -117421021456205115327 103171849011748425097 -104450760987525660219 109778238062128383421 -109170680659355634945 101092351652012588236 -109009089551467495747 104412682128547752131 -112016425853417877466 115478779964227301239 -109809835379677001002 107117483540235115863 -109581870574956225297 115963821022986200770 -114918561167106576639 114991987213662121376 -103493459351957813291 118320665823821681206 -106026445270708973611 102178700954286324866 -100269980559891536109 112844561713780016118 -107587075873786034394 114632854492678778509 -117921656724816772352 103207773865797007066 -108952536790629690817 101261243957067319422 -115739148151601573808 114979733565079457374 -111538009015644508967 103475991020114516832 -113351703941294630458 109412257237874861202 -101720949843787442951 104612091113514802664 -118357356982727825178 115565811010545226083 -109304903996729396661 115478779964227301239 -105901259206530390933 111666959095947698908 -112016425853417877466 116768967108862685383 -103100496883422151101 103716847685048716973 -107006059340452534782 117421021456205115327 -116762461061414014956 101213524574984631953 -117421021456205115327 112063946124358686266 -116762461061414014956 108817085747440374986 -115527632958457358109 101261243957067319422 -113116318008017777871 114791921155677330282 -107896527414017792767 103716847685048716973 -109304903996729396661 114632854492678778509 -100397511207083609950 106224435901697064976 -107753428759636856492 104612091113514802664 -100173452066172931939 110209787594312878744 -113116318008017777871 103660543175586203250 -110318982509514011806 108434394145774737013 -111091089527727420853 106695181236161584825 -111261496925076985134 116374117927631468606 -109304903996729396661 103171849011748425097 -104987932455782713675 118207880179234484610 -113047102292798770205 114244914082871792125 -100084737546039360199 106224435901697064976 -115963821022986200770 114918561167106576639 -108082478497335384404 107234826207633309420 -101832196121408756348 110367546804237452889 -100173452066172931939 113166718268343560861 -115360979797396777969 109813896768294978296 -112339769006469685593 111666959095947698908 -103016521073558596116 110286587261352351537 -115109077044202722504 104870518715355770532 -109170680659355634945 115706830138905259568 -102425976203575211068 109182513536739786206 -108255750659110762991 114758749740576519343 -104612091113514802664 115064258994656104138 -117377434815709898403 107090629815001792243 -105006381068870463173 113116318008017777871 -107753428759636856492 106312895983244085949 -115622466243011136115 102178700954286324866 -107033731246200681024 103112588675637065591 -105901259206530390933 104560124403688998123 -109304903996729396661 100262595546646927505 -104450760987525660219 107033731246200681024 -109581870574956225297 107117483540235115863 -106026445270708973611 103100496883422151101 -103016521073558596116 108082478497335384404 -108832773152747423283 100535338638690515335 -104412682128547752131 103716847685048716973 -102034052532213921839 109504122343901736603 -111538009015644508967 105822688186016123722 -111310990991240556038 106665185918564754695 -103660543175586203250 104612091113514802664 -107133948555394893679 116388668762198604003 -108314259245584185142 103537420161725387429 -117693415411676715849 100537991844787325512 -108082478497335384404 113612142759476883204 -101720949843787442951 103016521073558596116 -100535338638690515335 106665185918564754695 -109182513536739786206 100269980559891536109 -115565811010545226083 115863474911002159675 -107896527414017792767 101261243957067319422 -115739378269261680935 106822154985570317672 -104612091113514802664 113475277239647026452 -105076678694475690385 115622466243011136115 -115109077044202722504 113166718268343560861 -115109077044202722504 105006381068870463173 -116768967108862685383 107033731246200681024 -112944532473909341307 109247306373593947755 -106122462724662012890 104450760987525660219 -109304903996729396661 104450760987525660219 -115963821022986200770 118357356982727825178 -105076678694475690385 110209787594312878744 -103207773865797007066 107896527414017792767 -103325969492772452485 118207880179234484610 -111091089527727420853 107033731246200681024 -113351703941294630458 103660543175586203250 -113164038788726940319 100262595546646927505 -118357356982727825178 115478779964227301239 -118086737936443306746 114948739867290323960 -105703999093618427814 115341960624782381062 -112016425853417877466 113284787225540728296 -117691391504351341685 111091089527727420853 -112878918236054024365 102403331307606219198 -103100496883422151101 118357356982727825178 -117691391504351341685 109182513536739786206 -109778238062128383421 101225750534150134109 -102034052532213921839 108771911258181286059 -104412682128547752131 109170680659355634945 -112364132652438722780 109412257237874861202 -114790574178411061829 102178700954286324866 -107133948555394893679 100262595546646927505 -112944532473909341307 118207880179234484610 -117691391504351341685 102034052532213921839 -113116318008017777871 110318982509514011806 -115478779964227301239 115565811010545226083 -104987932455782713675 118418436905562612953 -104450760987525660219 110649214929620497857 -104450760987525660219 114461903539732780109 -106312895983244085949 117377434815709898403 -100397511207083609950 101213524574984631953 -111538009015644508967 104612091113514802664 -112276589013569458330 117550971892000156946 -104450760987525660219 115064258994656104138 -116762461061414014956 109412257237874861202 -115064258994656104138 106189723444098348646 -109504122343901736603 113047102292798770205 -102545157386069758709 103020619410065980303 -107519026002586025827 103325969492772452485 -109581870574956225297 108082478497335384404 -107753428759636856492 109412257237874861202 -113116318008017777871 108255750659110762991 -107006059340452534782 105076678694475690385 -108894779805940659869 102654570556058167176 -108899222163640713555 117921656724816772352 -111261496925076985134 103475991020114516832 -111091089527727420853 103716847685048716973 -113166718268343560861 105076678694475690385 -115706830138905259568 100019606796298306813 -109809835379677001002 108574688020691152748 -100535338638690515335 101569655404865588155 -100397511207083609950 116927391465690022495 -116548025566090395827 101629211371073711149 -103171849011748425097 109174551750397653742 -106122462724662012890 103171849011748425097 -109182513536739786206 107753428759636856492 -106312895983244085949 115047896996200277508 -106695181236161584825 117421021456205115327 -105400369085832308485 106026445270708973611 -103171849011748425097 115622466243011136115 -118245559326500322262 104450760987525660219 -115478779964227301239 109813896768294978296 -115622466243011136115 115863474911002159675 -111091089527727420853 109813896768294978296 -116762461061414014956 118207880179234484610 -116491285067171323298 103171849011748425097 -108817085747440374986 100537991844787325512 -115109077044202722504 114979733565079457374 -104612091113514802664 103660543175586203250 -104618664838382110366 109895887909967698705 -103153499873703329897 108016228299742896694 -117377434815709898403 107033731246200681024 -115478779964227301239 101569655404865588155 -100397511207083609950 102048265612444661933 -107033731246200681024 102034052532213921839 -101094440579835956866 103012564142649561853 -118418436905562612953 107234826207633309420 -103171849011748425097 100535338638690515335 -113116318008017777871 115622466243011136115 -111310990991240556038 109182513536739786206 -101261243957067319422 116207701819773193333 -105076678694475690385 116723923766489326849 -106096957694385885466 102088173699409175139 -107519026002586025827 107753428759636856492 -115064258994656104138 105705665708025552983 -106026445270708973611 100871232248276491534 -108817085747440374986 107097980510051172895 -102034052532213921839 116374117927631468606 -115622466243011136115 102048265612444661933 -115739378269261680935 108000051912603578599 -107753428759636856492 111538009015644508967 -104450760987525660219 114244914082871792125 -116491285067171323298 105376842241046675559 -112944532473909341307 110318982509514011806 -111654284395316165338 107117483540235115863 -117477042502591652021 109170680659355634945 -109174551750397653742 108894779805940659869 -100535338638690515335 105400903062771750089 -116621986644249676039 106189723444098348646 -112364132652438722780 106822154985570317672 -114079920283986872783 106122462724662012890 -118357356982727825178 113475277239647026452 -101720949843787442951 110286587261352351537 -111654284395316165338 113920721823301219308 -117421021456205115327 108176814619778619437 -116491285067171323298 115302451851587317396 -116207701819773193333 118207880179234484610 -103493459351957813291 118418436905562612953 -109304903996729396661 113247423264358423892 -100535338638690515335 118357356982727825178 -104987932455782713675 105076678694475690385 -104412682128547752131 115706830138905259568 -115047896996200277508 108574688020691152748 -103100496883422151101 110209787594312878744 -115739378269261680935 103207773865797007066 -109809835379677001002 116388668762198604003 -113116318008017777871 107753428759636856492 -106224435901697064976 103716847685048716973 -109196389259504239326 109335713877994755095 -115302451851587317396 110318982509514011806 -106312895983244085949 112364132652438722780 -108787861479092510435 108952536790629690817 -109931095616224405271 114632854492678778509 -102403331307606219198 105822688186016123722 -115739378269261680935 107308976571078250231 -113166718268343560861 103660543175586203250 -113801236315350503728 109388259228280605303 -112878918236054024365 104618664838382110366 -108894779805940659869 102088173699409175139 -106067770652209688980 114832793541825307503 -102654570556058167176 111806715084467662398 -100173452066172931939 115341960624782381062 -112276589013569458330 110727249496967897430 -109504122343901736603 109931095616224405271 -111538009015644508967 106665185918564754695 -109809835379677001002 103112588675637065591 -115360979797396777969 117550971892000156946 -109182513536739786206 100019606796298306813 -100084737546039360199 102178700954286324866 -109304903996729396661 111091089527727420853 -100397511207083609950 108817085747440374986 -104870518715355770532 115109077044202722504 -108817085747440374986 113801236315350503728 -112276589013569458330 106925005603331131101 -100856165335040300712 114832793541825307503 -102034052532213921839 113475277239647026452 -101092351652012588236 107781761552417614958 -117691391504351341685 100262595546646927505 -116762461061414014956 117691391504351341685 -103493459351957813291 105901259206530390933 -105822688186016123722 111285782175840598932 -102545157386069758709 106665185918564754695 -105662484616118909569 108894779805940659869 -100939735623367202041 105400903062771750089 -116773104421165750126 102088173699409175139 -105076678694475690385 104560124403688998123 -100397511207083609950 101832196121408756348 -110318982509514011806 117477042502591652021 -115527632958457358109 117550971892000156946 -103207773865797007066 114549564725160709822 -103016521073558596116 111601729473858041964 -118017787526225833770 109388259228280605303 -107519026002586025827 108255750659110762991 -108832773152747423283 100262595546646927505 -106224435901697064976 107033731246200681024 -106026445270708973611 118207880179234484610 -114790574178411061829 115565811010545226083 -111666959095947698908 118207880179234484610 -114991987213662121376 109182513536739786206 -109809835379677001002 117421021456205115327 -118264184129842070900 103100496883422151101 -106026445270708973611 102088173699409175139 -113164038788726940319 104450760987525660219 -107753428759636856492 105634350975670602787 -113351703941294630458 105376842241046675559 -109581870574956225297 109813896768294978296 -110650241045258158224 111707854651652464890 -114244914082871792125 103716847685048716973 -105076678694475690385 100269980559891536109 -115109077044202722504 115341960624782381062 -101261243957067319422 100173452066172931939 -110318982509514011806 113612142759476883204 -105400903062771750089 115064258994656104138 -105076678694475690385 118245559326500322262 -117691391504351341685 110318982509514011806 -102216887206636463918 113612142759476883204 -115739378269261680935 109412257237874861202 -113920721823301219308 107896527414017792767 -104226321884965863264 115302451851587317396 -115527632958457358109 103100496883422151101 -104612091113514802664 113612142759476883204 -112339769006469685593 109412257237874861202 -107006059340452534782 104560124403688998123 -115565811010545226083 118264184129842070900 -104412682128547752131 107753428759636856492 -113166718268343560861 101720949843787442951 -109182513536739786206 107587075873786034394 -109388259228280605303 104191514233385365427 -106096957694385885466 112290361600843238282 -108314259245584185142 107196172964000631645 -116762461061414014956 106925005603331131101 -110318982509514011806 115883560681104199404 -107896527414017792767 100269980559891536109 -106312895983244085949 105705665708025552983 -102512310412972518336 115527632958457358109 -115739378269261680935 105076678694475690385 -108832773152747423283 111601729473858041964 -107133948555394893679 111091089527727420853 -102034052532213921839 104612091113514802664 -109247306373593947755 104560124403688998123 -107753428759636856492 102048265612444661933 -117377434815709898403 110286587261352351537 -110318982509514011806 112844561713780016118 -108894779805940659869 109388259228280605303 -102088173699409175139 116192724891839469024 -107133948555394893679 114632854492678778509 -100535338638690515335 103493459351957813291 -103660543175586203250 101629211371073711149 -108082478497335384404 103691312271671214670 -113351703941294630458 118245559326500322262 -117691391504351341685 115478779964227301239 -112276589013569458330 109809835379677001002 -116768967108862685383 114549564725160709822 -101185406398932804414 113164038788726940319 -107519026002586025827 113116318008017777871 -106312895983244085949 102178700954286324866 -107896527414017792767 107753428759636856492 -108000051912603578599 103325969492772452485 -100084737546039360199 111091089527727420853 -117377434815709898403 104612091113514802664 -113164038788726940319 115706830138905259568 -114244914082871792125 103012564142649561853 -101261243957067319422 103493459351957813291 -100397143564111754723 104191514233385365427 -111666959095947698908 110318982509514011806 -110318982509514011806 118264184129842070900 -108817085747440374986 104450760987525660219 -107753428759636856492 104364058018116761460 -101213524574984631953 101094440579835956866 -108129202557078877094 116621986644249676039 -113116318008017777871 110468193592032465149 -100397511207083609950 114791921155677330282 -116388668762198604003 108255750659110762991 -115302451851587317396 118207880179234484610 -100871232248276491534 100093902492789669774 -103171849011748425097 103325969492772452485 -107753428759636856492 110318982509514011806 -108574688020691152748 111285782175840598932 -113116318008017777871 106665185918564754695 -103016521073558596116 105822688186016123722 -103975368181760158212 109247306373593947755 -101057616370673656059 113612142759476883204 -104987932455782713675 111654284395316165338 -115341960624782381062 111601729473858041964 -108832773152747423283 102034052532213921839 -104612091113514802664 103100496883422151101 -106312895983244085949 103325969492772452485 -103016521073558596116 109074857816744029470 -100269980559891536109 113247423264358423892 -107896527414017792767 115622466243011136115 -105006381068870463173 101704103161442695877 -112364132652438722780 111601729473858041964 -116207701819773193333 108000051912603578599 -116762461061414014956 103716847685048716973 -107781761552417614958 102034052532213921839 -112820512550939559523 107753428759636856492 -101720949843787442951 113047102292798770205 -107033731246200681024 115478779964227301239 -108817085747440374986 117691391504351341685 -111666959095947698908 102048265612444661933 -110774757382682582490 101629211371073711149 -114244914082871792125 112276589013569458330 -117550971892000156946 105822688186016123722 -103207773865797007066 112276589013569458330 -102034052532213921839 102178700954286324866 -105076678694475690385 118320665823821681206 -116768967108862685383 101261243957067319422 -111538009015644508967 114821161730370452301 -107006059340452534782 114821161730370452301 -111310990991240556038 118245559326500322262 -114790574178411061829 104364058018116761460 -102216887206636463918 114549564725160709822 -109174551750397653742 108255750659110762991 -118017787526225833770 100093902492789669774 -115739378269261680935 115920538018564742940 -102512310412972518336 115706830138905259568 -105705665708025552983 102178700954286324866 -117691391504351341685 100397511207083609950 -108082478497335384404 107033731246200681024 -104450760987525660219 103716847685048716973 -106925005603331131101 102034052532213921839 -116621986644249676039 115302451851587317396 -113920721823301219308 114790574178411061829 -104364058018116761460 118207880179234484610 -105400903062771750089 115478779964227301239 -101126226710566561379 106096957694385885466 -109182513536739786206 112276589013569458330 -113164038788726940319 102048265612444661933 -115064258994656104138 107896527414017792767 -107519026002586025827 113920721823301219308 -102512310412972518336 113351703941294630458 -107519026002586025827 109519167630731639094 -114244914082871792125 111285782175840598932 -109581870574956225297 116768967108862685383 -102048265612444661933 110318982509514011806 -107519026002586025827 117377434815709898403 -104870518715355770532 111032944513257134357 -109581870574956225297 107234826207633309420 -103100496883422151101 111538009015644508967 -113722523501415106689 105703999093618427814 -113612142759476883204 104560124403688998123 -110014891370822989957 105376842241046675559 -116762461061414014956 100535338638690515335 -100269980559891536109 115565811010545226083 -109504122343901736603 102034052532213921839 -111422286077941361166 105901259206530390933 -106026445270708973611 114549564725160709822 -109304903996729396661 110318982509514011806 -104450760987525660219 105634350975670602787 -114549564725160709822 114791921155677330282 -116388668762198604003 107753428759636856492 -113920721823301219308 107968787521028284191 -109174551750397653742 115622466243011136115 -111975545018506506119 102048265612444661933 -113920721823301219308 111310990991240556038 -102512310412972518336 103537420161725387429 -117377434815709898403 101720949843787442951 -104870518715355770532 115622466243011136115 -102484577222269062816 108176814619778619437 -101261243957067319422 108894779805940659869 -100353346783543697435 115047896996200277508 -109581870574956225297 112339769006469685593 -101261243957067319422 100397511207083609950 -100397511207083609950 115739148151601573808 -103016521073558596116 111285782175840598932 -109780617142585395916 101246601531247561585 -103691312271671214670 107753428759636856492 -103016521073558596116 111975545018506506119 -109504122343901736603 104450760987525660219 -104450760987525660219 109412257237874861202 -109778238062128383421 113612142759476883204 -116374117927631468606 109581870574956225297 -112364132652438722780 100535338638690515335 -111310990991240556038 105076678694475690385 -106812355611465528242 100173452066172931939 -113164038788726940319 111310990991240556038 -117377434815709898403 114522811866073303399 -118245559326500322262 107968787521028284191 -112820512550939559523 108255750659110762991 -115622466243011136115 107968787521028284191 -115392876317176762477 103207773865797007066 -100093902492789669774 103493459351957813291 -112339769006469685593 118320665823821681206 -115963821022986200770 112276589013569458330 -111975545018506506119 117421021456205115327 -109581870574956225297 106189723444098348646 -110448924610029803960 108771911258181286059 -112276589013569458330 103325969492772452485 -103016521073558596116 109174551750397653742 -114790574178411061829 105400903062771750089 -110448924610029803960 115047896996200277508 -109182513536739786206 105822688186016123722 -109174551750397653742 107753428759636856492 -113475277239647026452 109813896768294978296 -108817085747440374986 113164038788726940319 -101832196121408756348 104191514233385365427 -108314259245584185142 103493459351957813291 -111032944513257134357 117921656724816772352 -103016521073558596116 117693415411676715849 -108574688020691152748 115047896996200277508 -103207773865797007066 115109077044202722504 -102654570556058167176 108894779805940659869 -101261243957067319422 109895887909967698705 -101246601531247561585 109247306373593947755 -105705665708025552983 106695181236161584825 -110728349411116483031 112290361600843238282 -117477042502591652021 115109077044202722504 -108434394145774737013 108255750659110762991 -114918561167106576639 108574688020691152748 -118418436905562612953 104191514233385365427 -100084737546039360199 118207880179234484610 -112276589013569458330 109182513536739786206 -117550971892000156946 112276589013569458330 -115963821022986200770 100535338638690515335 -112364132652438722780 110209787594312878744 -118245559326500322262 109519167630731639094 -103153499873703329897 109603191376504998413 -114918561167106576639 109504122343901736603 -108000051912603578599 106345802537137414958 -102425976203575211068 109581870574956225297 -108817085747440374986 107968787521028284191 -115109077044202722504 111091089527727420853 -111422286077941361166 118320665823821681206 -110731951130561423918 115017401467423642930 -114991987213662121376 106925005603331131101 -105662484616118909569 104191514233385365427 -104870518715355770532 113801236315350503728 -101246601531247561585 114991987213662121376 -117921656724816772352 106096957694385885466 -103207773865797007066 106812355611465528242 -107133948555394893679 107896527414017792767 -100871232248276491534 107308976571078250231 -112364132652438722780 106100296973968329853 -117691391504351341685 104364058018116761460 -110728349411116483031 117995161934475952507 -115403621788538540544 105863188856924083857 -116768967108862685383 113210431006401244170 -117421021456205115327 107033731246200681024 -118207880179234484610 110318982509514011806 -111654284395316165338 108817085747440374986 -110774757382682582490 118245559326500322262 -103016521073558596116 116773104421165750126 -105901259206530390933 102034052532213921839 -101261243957067319422 102088173699409175139 -105376842241046675559 109174551750397653742 -105705665708025552983 118357356982727825178 -111261496925076985134 103691312271671214670 -104450760987525660219 113475277239647026452 -108255750659110762991 105705665708025552983 -101261243957067319422 109581870574956225297 -115047896996200277508 109247306373593947755 -115739378269261680935 102034052532213921839 -100856165335040300712 112364132652438722780 -108894779805940659869 108176814619778619437 -117921656724816772352 108899222163640713555 -116762461061414014956 115863474911002159675 -111091089527727420853 111538009015644508967 -109504122343901736603 107033731246200681024 -112820512550939559523 106189723444098348646 -100001826804813287036 102088173699409175139 -118086737936443306746 113247423264358423892 -116207701819773193333 111654284395316165338 -111975545018506506119 101832196121408756348 -115392876317176762477 118017787526225833770 -103325969492772452485 108082478497335384404 -109581870574956225297 100262595546646927505 -113166718268343560861 114632854492678778509 -106026445270708973611 103325969492772452485 -102216887206636463918 104560124403688998123 -107519026002586025827 103012564142649561853 -104450760987525660219 108082478497335384404 -115739378269261680935 104450760987525660219 -103153499873703329897 114522811866073303399 -100856165335040300712 106812355611465528242 -109174551750397653742 114790574178411061829 -112276589013569458330 118207880179234484610 -107793717361981126032 106812355611465528242 -115739378269261680935 104987932455782713675 -116374117927631468606 107033731246200681024 -118245559326500322262 101629211371073711149 -113801236315350503728 103171849011748425097 -103207773865797007066 108894779805940659869 -116773104421165750126 100871232248276491534 -106026445270708973611 116768967108862685383 -105705665708025552983 113116318008017777871 -114244914082871792125 101185406398932804414 -115706830138905259568 109813896768294978296 -100894876340926769800 111171416539633276676 -107033731246200681024 113247423264358423892 -107753428759636856492 100019606796298306813 -111091089527727420853 106026445270708973611 -104364058018116761460 105076678694475690385 -102034052532213921839 103112588675637065591 -115360979797396777969 113116318008017777871 -106122462724662012890 104364058018116761460 -112364132652438722780 102216887206636463918 -118245559326500322262 114632854492678778509 -115109077044202722504 104560124403688998123 -113166718268343560861 103975368181760158212 -106665185918564754695 109182513536739786206 -104870518715355770532 111707854651652464890 -115706830138905259568 103171849011748425097 -100856165335040300712 103207773865797007066 -105207943512906810696 118207880179234484610 -114918561167106576639 104191514233385365427 -108952536790629690817 103207773865797007066 -111422286077941361166 102403331307606219198 -112290361600843238282 104870518715355770532 -103691312271671214670 108899222163640713555 -113612142759476883204 103012564142649561853 -102545157386069758709 106312895983244085949 -117377434815709898403 113475277239647026452 -113612142759476883204 102216887206636463918 -117477042502591652021 112364132652438722780 -108082478497335384404 100084737546039360199 -109581870574956225297 112276589013569458330 -105705665708025552983 105076678694475690385 -101261243957067319422 113247423264358423892 -116773104421165750126 111538009015644508967 -101057616370673656059 104364058018116761460 -117157132370347986579 115047896996200277508 -107587075873786034394 106312895983244085949 -100397511207083609950 106345802537137414958 -100871232248276491534 103691312271671214670 -111654284395316165338 118320665823821681206 -117377434815709898403 118418436905562612953 -116374117927631468606 114918561167106576639 -115360979797396777969 105076678694475690385 -102088173699409175139 114821161730370452301 -106224435901697064976 113247423264358423892 -105705665708025552983 110318982509514011806 -106695181236161584825 102403331307606219198 -111091089527727420853 113624688426259176181 -105662484616118909569 103207773865797007066 -112276589013569458330 111538009015644508967 -102088173699409175139 113166718268343560861 -116762461061414014956 115109077044202722504 -112820512550939559523 104560124403688998123 -105901259206530390933 103493459351957813291 -109182513536739786206 114461903539732780109 -112944532473909341307 103112588675637065591 -107753428759636856492 107519026002586025827 -107133948555394893679 112844561713780016118 -109504122343901736603 114244914082871792125 -104450760987525660219 106665185918564754695 -118418436905562612953 117691391504351341685 -112016425853417877466 115017401467423642930 -104364058018116761460 109182513536739786206 -104364058018116761460 118357356982727825178 -103171849011748425097 105634350975670602787 -112944532473909341307 112063946124358686266 -102403331307606219198 109519167630731639094 -103100496883422151101 118264184129842070900 -118245559326500322262 112878918236054024365 -104987932455782713675 114979733565079457374 -118245559326500322262 100397143564111754723 -111171416539633276676 113117251731252114390 -113166718268343560861 101629211371073711149 -103493459351957813291 102048265612444661933 -101261243957067319422 103660543175586203250 -105705665708025552983 114079920283986872783 -100269980559891536109 118320665823821681206 -106312895983244085949 105634350975670602787 -106026445270708973611 113612142759476883204 -100084737546039360199 118320665823821681206 -103207773865797007066 116926943858449614201 -100535338638690515335 117421021456205115327 -104383523254857614001 107699711897781234810 -103207773865797007066 102654570556058167176 -107793717361981126032 115341960624782381062 -113166718268343560861 111707854651652464890 -115706830138905259568 102178700954286324866 -112364132652438722780 100173452066172931939 -115341960624782381062 107793717361981126032 -108255750659110762991 112844561713780016118 -100173452066172931939 106189723444098348646 -108434394145774737013 104364058018116761460 -116762461061414014956 108082478497335384404 -118418436905562612953 107117483540235115863 -115739378269261680935 118264184129842070900 -106312895983244085949 105400903062771750089 -112944532473909341307 109182513536739786206 -107303107611470093265 100939735623367202041 -118418436905562612953 114791921155677330282 -118418436905562612953 102216887206636463918 -101263833299534001868 108952536790629690817 -106925005603331131101 103171849011748425097 -113920721823301219308 104450760987525660219 -117693415411676715849 109581870574956225297 -109304903996729396661 107753428759636856492 -104364058018116761460 106695181236161584825 -112276589013569458330 108817085747440374986 -118245559326500322262 110286587261352351537 -112944532473909341307 115622466243011136115 -103100496883422151101 106026445270708973611 -107033731246200681024 113612142759476883204 -117377434815709898403 114979733565079457374 -110731951130561423918 101246601531247561585 -106026445270708973611 109813896768294978296 -106695181236161584825 114632854492678778509 -108082478497335384404 100262595546646927505 -104870518715355770532 103691312271671214670 -108894779805940659869 107129852879758941909 -115622466243011136115 101629211371073711149 -113612142759476883204 100269980559891536109 -100093902492789669774 107308976571078250231 -115565811010545226083 111091089527727420853 -116207701819773193333 104560124403688998123 -109581870574956225297 106695181236161584825 -104612091113514802664 114979733565079457374 -101057616370673656059 105376842241046675559 -115739148151601573808 113166718268343560861 -115302451851587317396 114790574178411061829 -103016521073558596116 101481313915867030905 -108817085747440374986 101261243957067319422 -115706830138905259568 110318982509514011806 -116374117927631468606 118207880179234484610 -108817085747440374986 105822688186016123722 -112276589013569458330 103171849011748425097 -108894779805940659869 108129202557078877094 -115064258994656104138 115478779964227301239 -111538009015644508967 115739378269261680935 -105705665708025552983 117421021456205115327 -112339769006469685593 113612142759476883204 -103207773865797007066 116374117927631468606 -109196389259504239326 102088173699409175139 -109504122343901736603 113612142759476883204 -116374117927631468606 105901259206530390933 -112364132652438722780 100269980559891536109 -115064258994656104138 114632854492678778509 -111261496925076985134 104066486855641683676 -112944532473909341307 106695181236161584825 -108817085747440374986 113475277239647026452 -109504122343901736603 109895887909967698705 -117377434815709898403 103716847685048716973 -107519026002586025827 116374117927631468606 -101261243957067319422 105076678694475690385 -115360979797396777969 100523784851251213675 -106224435901697064976 108255750659110762991 -101092351652012588236 109247306373593947755 -105006381068870463173 105822688186016123722 -107755092517418534815 106812355611465528242 -114079920283986872783 111285782175840598932 -101213524574984631953 114079920283986872783 -104870518715355770532 112844561713780016118 -112878918236054024365 115622466243011136115 -103691312271671214670 111538009015644508967 -109778238062128383421 100019606796298306813 -111538009015644508967 117691391504351341685 -109504122343901736603 102178700954286324866 -100397511207083609950 108434394145774737013 -101261243957067319422 105376842241046675559 -114790574178411061829 106189723444098348646 -100093902492789669774 101704103161442695877 -109304903996729396661 109895887909967698705 -117921656724816772352 117012574629989558450 -108082478497335384404 111310990991240556038 -109170680659355634945 104191514233385365427 -108314259245584185142 117995161934475952507 -115302451851587317396 109174551750397653742 -103207773865797007066 118207880179234484610 -102048265612444661933 100523784851251213675 -111261496925076985134 104560124403688998123 -113920721823301219308 115478779964227301239 -104226321884965863264 105632941129656401917 -115302451851587317396 114522811866073303399 -115739148151601573808 115478779964227301239 -105705665708025552983 102034052532213921839 -102034052532213921839 106695181236161584825 -112852253337028739987 116762461061414014956 -109304903996729396661 110286587261352351537 -111654284395316165338 113116318008017777871 -116207701819773193333 109581870574956225297 -101261243957067319422 103171849011748425097 -107753428759636856492 107781761552417614958 -102512310412972518336 107117483540235115863 -105076678694475690385 100262595546646927505 -113116318008017777871 109581870574956225297 -115109077044202722504 100001826804813287036 -109247306373593947755 115403621788538540544 -114790574178411061829 107587075873786034394 -112016425853417877466 116388668762198604003 -116621986644249676039 108082478497335384404 -102216887206636463918 103207773865797007066 -106122462724662012890 118086737936443306746 -112944532473909341307 100415723513846680553 -102048265612444661933 115622466243011136115 -115302451851587317396 103567864289861449366 -104612091113514802664 115360979797396777969 -112016425853417877466 114359738470992181937 -112016425853417877466 115341960624782381062 -112944532473909341307 114948739867290323960 -104364058018116761460 113475277239647026452 -106695181236161584825 107097980510051172895 -115064258994656104138 104450760987525660219 -118357356982727825178 113612142759476883204 -103171849011748425097 102048265612444661933 -103016521073558596116 118418436905562612953 -107117418142368704725 115360979797396777969 -111538009015644508967 112276589013569458330 -115047896996200277508 103325969492772452485 -100093902492789669774 115109077044202722504 -113116318008017777871 114790574178411061829 -104450760987525660219 103100496883422151101 -108817085747440374986 108771911258181286059 -108082478497335384404 107117483540235115863 -107033731246200681024 113116318008017777871 -103100496883422151101 110727249496967897430 -112364132652438722780 107033731246200681024 -102484577222269062816 100397143564111754723 -117421021456205115327 110286587261352351537 -106665185918564754695 103325969492772452485 -111091089527727420853 108000051912603578599 -116388668762198604003 110318982509514011806 -104987932455782713675 103012564142649561853 -112016425853417877466 109581870574956225297 -102034052532213921839 112063946124358686266 -113047102292798770205 104987932455782713675 -112364132652438722780 114821161730370452301 -111091089527727420853 103582267051807991527 -105076678694475690385 111337216646096594888 -107006059340452534782 113210431006401244170 -114790574178411061829 118207880179234484610 -117691391504351341685 115064258994656104138 -110650241045258158224 115109077044202722504 -117421021456205115327 101225750534150134109 -111975545018506506119 107117483540235115863 -107519026002586025827 104560124403688998123 -115478779964227301239 105634350975670602787 -102512310412972518336 100894876340926769800 -115739378269261680935 100269980559891536109 -114918561167106576639 114758749740576519343 -117421021456205115327 105400903062771750089 -108243648069327964538 101213524574984631953 -114918561167106576639 104612091113514802664 -116374117927631468606 117550971892000156946 -115622466243011136115 103012564142649561853 -104450760987525660219 110727249496967897430 -107753428759636856492 109182513536739786206 -103325969492772452485 109412257237874861202 -101720949843787442951 107308976571078250231 -106812355611465528242 115109077044202722504 -109780617142585395916 102512310412972518336 -112339769006469685593 100397511207083609950 -107753428759636856492 117477042502591652021 -101720949843787442951 113351703941294630458 -101261243957067319422 104364058018116761460 -113920721823301219308 109074857816744029470 -118418436905562612953 100537991844787325512 -111666959095947698908 102216887206636463918 -106096957694385885466 104066486855641683676 -102034052532213921839 114948739867290323960 -115739378269261680935 118017787526225833770 -114918561167106576639 115017401467423642930 -104612091113514802664 106312895983244085949 -100173452066172931939 103112588675637065591 -108000051912603578599 107781761552417614958 -105901259206530390933 111422286077941361166 -111654284395316165338 105822688186016123722 -104987932455782713675 107117483540235115863 -109247306373593947755 103325969492772452485 -103207773865797007066 100537991844787325512 -102216887206636463918 103100496883422151101 -115706830138905259568 107033731246200681024 -115883560681104199404 112944532473909341307 -102034052532213921839 112276589013569458330 -103016521073558596116 115527632958457358109 -100397511207083609950 107519026002586025827 -115360979797396777969 115963821022986200770 -116374117927631468606 113116318008017777871 -104612091113514802664 116388668762198604003 -103016521073558596116 118357356982727825178 -106026445270708973611 105703999093618427814 -116107530889292552664 107090629815001792243 -116374117927631468606 104870518715355770532 -100871232248276491534 110209787594312878744 -113116318008017777871 111285782175840598932 -111091089527727420853 107106500560002041088 -114991987213662121376 114979733565079457374 -114152150496380806218 115341960624782381062 -108899222163640713555 107308976571078250231 -104870518715355770532 116768967108862685383 -100093902492789669774 104066486855641683676 -107781761552417614958 103537420161725387429 -108000051912603578599 115478779964227301239 -108832773152747423283 118320665823821681206 -112016425853417877466 117693415411676715849 -115565811010545226083 103171849011748425097 -111310990991240556038 103325969492772452485 -109581870574956225297 103716847685048716973 -100939735623367202041 107117418142368704725 -116762461061414014956 109895887909967698705 -101849747879612982297 106189723444098348646 -114991987213662121376 108817085747440374986 -108817085747440374986 102178700954286324866 -107303107611470093265 100353346783543697435 -118357356982727825178 111091089527727420853 -117421021456205115327 101057616370673656059 -117421021456205115327 109581870574956225297 -115109077044202722504 110318982509514011806 -111975545018506506119 108082478497335384404 -110731951130561423918 111091089527727420853 -116374117927631468606 112852253337028739987 -107196172964000631645 100535338638690515335 -107753428759636856492 109809835379677001002 -104412682128547752131 115403621788538540544 -105006381068870463173 115017401467423642930 -109182513536739786206 109895887909967698705 -108314259245584185142 100262595546646927505 -100084737546039360199 102034052532213921839 -110728349411116483031 116723923766489326849 -108314259245584185142 117550971892000156946 -115739148151601573808 109182513536739786206 -108894779805940659869 115739378269261680935 -100535338638690515335 115360979797396777969 -113116318008017777871 108082478497335384404 -109809835379677001002 115565811010545226083 -105006381068870463173 101832196121408756348 -105076678694475690385 109778238062128383421 -114918561167106576639 112944532473909341307 -103153499873703329897 102512310412972518336 -117550971892000156946 101261243957067319422 -117477042502591652021 101246601531247561585 -115565811010545226083 101225750534150134109 -114244914082871792125 103660543175586203250 -103567864289861449366 115302451851587317396 -103325969492772452485 110318982509514011806 -101261243957067319422 101185406398932804414 -109778238062128383421 109519167630731639094 -111666959095947698908 103537420161725387429 -116621986644249676039 105006381068870463173 -107196172964000631645 113920721823301219308 -115047896996200277508 109174551750397653742 -100397511207083609950 107753428759636856492 -115478779964227301239 108000051912603578599 -103493459351957813291 103207773865797007066 -103153499873703329897 101832771958125915909 -117691391504351341685 100269980559891536109 -104412682128547752131 106345802537137414958 -116388668762198604003 109813896768294978296 -109304903996729396661 101057616370673656059 -106122462724662012890 106224435901697064976 -112820512550939559523 113210431006401244170 -105901259206530390933 110286587261352351537 -104870518715355770532 110728349411116483031 -117477042502591652021 116762461061414014956 -109196389259504239326 101094440579835956866 -116388668762198604003 105400903062771750089 -100397511207083609950 100397143564111754723 -100535338638690515335 115565811010545226083 -109196389259504239326 108574688020691152748 -109174551750397653742 118264184129842070900 -112944532473909341307 113612142759476883204 -101261243957067319422 109074857816744029470 -106312895983244085949 106189723444098348646 -100397511207083609950 112944532473909341307 -104450760987525660219 113612142759476883204 -107033731246200681024 102048265612444661933 -103691312271671214670 104870518715355770532 -103171849011748425097 102178700954286324866 -113047102292798770205 103171849011748425097 -115478779964227301239 115360979797396777969 -107587075873786034394 109778238062128383421 -116926943858449614201 114244914082871792125 -100535338638690515335 108771911258181286059 -111310990991240556038 105400903062771750089 -109581870574956225297 101094440579835956866 -104870518715355770532 101261243957067319422 -103016521073558596116 110209787594312878744 -113475277239647026452 111091089527727420853 -100084737546039360199 112820512550939559523 -109504122343901736603 111310990991240556038 -117377434815709898403 108143819792337559199 -101832196121408756348 101704103161442695877 -115739148151601573808 111091089527727420853 -109809835379677001002 115478779964227301239 -115739148151601573808 115047896996200277508 -104618664838382110366 103493459351957813291 -113612142759476883204 103537420161725387429 -112944532473909341307 116388668762198604003 -114918561167106576639 103475991020114516832 -112339769006469685593 109074857816744029470 -106122462724662012890 112844561713780016118 -115739378269261680935 115403621788538540544 -105076678694475690385 114632854492678778509 -104870518715355770532 115565811010545226083 -109196389259504239326 109304903996729396661 -115047896996200277508 114632854492678778509 -106695181236161584825 104364058018116761460 -117421021456205115327 102048265612444661933 -104612091113514802664 107234826207633309420 -101057616370673656059 105400903062771750089 -103016521073558596116 115739378269261680935 -113612142759476883204 115109077044202722504 -106026445270708973611 113164038788726940319 -111538009015644508967 109247306373593947755 -100397511207083609950 102034052532213921839 -113166718268343560861 106096957694385885466 -115565811010545226083 109778238062128383421 -115527632958457358109 115302451851587317396 -108082478497335384404 112276589013569458330 -116621986644249676039 107133948555394893679 -105901259206530390933 114549564725160709822 -109809835379677001002 113116318008017777871 -108952536790629690817 112063946124358686266 -106026445270708973611 111285782175840598932 -106695181236161584825 107896527414017792767 -102216887206636463918 102512310412972518336 -115963821022986200770 114979733565079457374 -113801236315350503728 114549564725160709822 -101261243957067319422 109778238062128383421 -112364132652438722780 101213524574984631953 -114244914082871792125 111654284395316165338 -100397511207083609950 117683744929337064105 -102512310412972518336 103567864289861449366 -101261243957067319422 105901259206530390933 -115706830138905259568 107992936493665613654 -104412682128547752131 103020619410065980303 -116762461061414014956 114991987213662121376 -115302451851587317396 114791921155677330282 -114918561167106576639 107992936493665613654 -111337216646096594888 118156281382429939997 -115047896996200277508 110286587261352351537 -117921656724816772352 104383523254857614001 -106122462724662012890 110318982509514011806 -110318982509514011806 104412682128547752131 -112820512550939559523 109813896768294978296 -116207701819773193333 114549564725160709822 -102088173699409175139 112364132652438722780 -102512310412972518336 108952536790629690817 -105705665708025552983 107992936493665613654 -106925005603331131101 108000051912603578599 -115302451851587317396 115565811010545226083 -117921656724816772352 118017787526225833770 -112364132652438722780 100856165335040300712 -105901259206530390933 104618664838382110366 -111091089527727420853 103325969492772452485 -111310990991240556038 115706830138905259568 -112364132652438722780 108255750659110762991 -116926943858449614201 111707854651652464890 -108817085747440374986 101629211371073711149 -117477042502591652021 104412682128547752131 -113920721823301219308 112844561713780016118 -116762461061414014956 107117483540235115863 -110318982509514011806 101832771958125915909 -115109077044202722504 113116318008017777871 -112276589013569458330 109778238062128383421 -101057616370673656059 103325969492772452485 -101225750534150134109 101569655404865588155 -104987932455782713675 102425976203575211068 -106312895983244085949 104364058018116761460 -107896527414017792767 118264184129842070900 -114991987213662121376 116762461061414014956 -116374117927631468606 111422286077941361166 -112364132652438722780 113722523501415106689 -115963821022986200770 105901259206530390933 -104450760987525660219 107117483540235115863 -107117418142368704725 110774757382682582490 -114549564725160709822 101057616370673656059 -101600577333348274552 114632854492678778509 -100535338638690515335 100523784851251213675 -114244914082871792125 100523784851251213675 -106026445270708973611 106623900962110772648 -113047102292798770205 109519167630731639094 -104450760987525660219 111091089527727420853 -111538009015644508967 101261243957067319422 -100397511207083609950 115739378269261680935 -109504122343901736603 103716847685048716973 -114244914082871792125 106189723444098348646 -105901259206530390933 115478779964227301239 -102034052532213921839 111601729473858041964 -107117418142368704725 112944532473909341307 -109174551750397653742 115064258994656104138 -113068441549452664746 111285782175840598932 -102088173699409175139 103207773865797007066 -102034052532213921839 110727249496967897430 -104612091113514802664 102034052532213921839 -115478779964227301239 114079920283986872783 -105207943512906810696 107196172964000631645 -109388259228280605303 111806715084467662398 -109335713877994755095 100257676670422660178 -110728349411116483031 101261243957067319422 -115302451851587317396 107968787521028284191 -107519026002586025827 117691391504351341685 -107753428759636856492 104191514233385365427 -109504122343901736603 107097980510051172895 -108832773152747423283 115064258994656104138 -102512310412972518336 102178700954286324866 -107033731246200681024 109813896768294978296 -115739148151601573808 101720949843787442951 -118357356982727825178 103171849011748425097 -107519026002586025827 103112588675637065591 -104987932455782713675 105901259206530390933 -115478779964227301239 114790574178411061829 -104412682128547752131 115739148151601573808 -112276589013569458330 118264184129842070900 -117691391504351341685 107133948555394893679 -101261243957067319422 101629211371073711149 -116768967108862685383 109074857816744029470 -109809835379677001002 113612142759476883204 -104450760987525660219 107308976571078250231 -106925005603331131101 114079920283986872783 -108000051912603578599 112944532473909341307 -103325969492772452485 104364058018116761460 -111310990991240556038 113210431006401244170 -107753428759636856492 108082478497335384404 -116207701819773193333 102088173699409175139 -114244914082871792125 102048265612444661933 -115963821022986200770 113920721823301219308 -101261243957067319422 105006381068870463173 -101057616370673656059 109335713877994755095 -107753428759636856492 104560124403688998123 -115739378269261680935 110367546804237452889 -115706830138905259568 118357356982727825178 -112364132652438722780 107896527414017792767 -109780617142585395916 104412682128547752131 -104412682128547752131 105662484616118909569 -103207773865797007066 105006381068870463173 -118357356982727825178 101225750534150134109 -109581870574956225297 104560124403688998123 -108817085747440374986 105400903062771750089 -115565811010545226083 103112588675637065591 -101720949843787442951 114790574178411061829 -106122462724662012890 113475277239647026452 -103660543175586203250 114979733565079457374 -114244914082871792125 109074857816744029470 -106312895983244085949 118207880179234484610 -113612142759476883204 107753428759636856492 -108000051912603578599 103020619410065980303 -112016425853417877466 105901259206530390933 -105632941129656401917 111091089527727420853 -118017787526225833770 110728349411116483031 -107755092517418534815 101057616370673656059 -113116318008017777871 105705665708025552983 -112944532473909341307 109809835379677001002 -101261243957067319422 115047896996200277508 -107519026002586025827 115622466243011136115 -105376842241046675559 107753428759636856492 -113116318008017777871 107968787521028284191 -115109077044202722504 100871232248276491534 -101185406398932804414 107006059340452534782 -102425976203575211068 107992936493665613654 -100397511207083609950 114821161730370452301 -109304903996729396661 101569655404865588155 -115392876317176762477 100093902492789669774 -101094440579835956866 108255750659110762991 -111091089527727420853 113164038788726940319 -114918561167106576639 114791921155677330282 -101213524574984631953 108574688020691152748 -101261243957067319422 113920721823301219308 -111337216646096594888 116621986644249676039 -117377434815709898403 105076678694475690385 -108574688020691152748 111091089527727420853 -113612142759476883204 108000051912603578599 -115064258994656104138 110727249496967897430 -104191514233385365427 114790574178411061829 -111091089527727420853 105822688186016123722 -107753428759636856492 115706830138905259568 -107519026002586025827 100523784851251213675 -118086737936443306746 112944532473909341307 -101057616370673656059 114549564725160709822 -116491285067171323298 104560124403688998123 -112820512550939559523 109809835379677001002 -104364058018116761460 107896527414017792767 -111806715084467662398 109388259228280605303 -103016521073558596116 103475991020114516832 -107781761552417614958 107587075873786034394 -115360979797396777969 115706830138905259568 -104364058018116761460 104450760987525660219 -103207773865797007066 117995161934475952507 -105076678694475690385 101094440579835956866 -102545157386069758709 111310990991240556038 -100535338638690515335 111654284395316165338 -104450760987525660219 113068441549452664746 -105901259206530390933 116926943858449614201 -108817085747440374986 101213524574984631953 -105705665708025552983 115706830138905259568 -107753428759636856492 112820512550939559523 -116374117927631468606 115017401467423642930 -102034052532213921839 108434394145774737013 -101094440579835956866 115478779964227301239 -106224435901697064976 115064258994656104138 -115341960624782381062 106822154985570317672 -117377434815709898403 111310990991240556038 -113920721823301219308 102178700954286324866 -108894779805940659869 116621986644249676039 -102088173699409175139 106822154985570317672 -114918561167106576639 103207773865797007066 -108000051912603578599 104560124403688998123 -106026445270708973611 106096957694385885466 -109778238062128383421 107033731246200681024 -106312895983244085949 111538009015644508967 -115360979797396777969 116374117927631468606 -109780617142585395916 105662484616118909569 -109009089551467495747 101832771958125915909 -109780617142585395916 109388259228280605303 -111654284395316165338 102034052532213921839 -108817085747440374986 109581870574956225297 -114758749740576519343 117421021456205115327 -103325969492772452485 109074857816744029470 -113116318008017777871 100173452066172931939 -109304903996729396661 106312895983244085949 -115883560681104199404 111538009015644508967 -105901259206530390933 115963821022986200770 -106224435901697064976 111285782175840598932 -113920721823301219308 112276589013569458330 -109780617142585395916 115706830138905259568 -102403331307606219198 118320665823821681206 -118418436905562612953 107896527414017792767 -112852253337028739987 114632854492678778509 -102034052532213921839 105901259206530390933 -102216887206636463918 100523784851251213675 -109504122343901736603 108176814619778619437 -109174551750397653742 101261243957067319422 -111091089527727420853 101832771958125915909 -102512310412972518336 116207701819773193333 -104450760987525660219 117691391504351341685 -115739148151601573808 115739378269261680935 -109504122343901736603 102048265612444661933 -109388259228280605303 101704103161442695877 -104412682128547752131 104450760987525660219 -103016521073558596116 113284787225540728296 -108832773152747423283 101261243957067319422 -112820512550939559523 113475277239647026452 -117421021456205115327 101094440579835956866 -100173452066172931939 109074857816744029470 -100856165335040300712 107090629815001792243 -104870518715355770532 108894779805940659869 -113116318008017777871 113210431006401244170 -101057616370673656059 110727249496967897430 -105901259206530390933 107992936493665613654 -106096957694385885466 114522811866073303399 -100084737546039360199 113247423264358423892 -106312895983244085949 111654284395316165338 -105901259206530390933 105076678694475690385 -115565811010545226083 117550971892000156946 -104612091113514802664 112852253337028739987 -103660543175586203250 110649214929620497857 -109174551750397653742 110318982509514011806 -103207773865797007066 106026445270708973611 -115739378269261680935 107117483540235115863 -107896527414017792767 115863474911002159675 -107896527414017792767 108255750659110762991 -105076678694475690385 103325969492772452485 -117377434815709898403 117421021456205115327 -113116318008017777871 117691391504351341685 -108574688020691152748 108255750659110762991 -101261243957067319422 101213524574984631953 -106026445270708973611 115739148151601573808 -115109077044202722504 100537991844787325512 -115360979797396777969 108176814619778619437 -109247306373593947755 100019606796298306813 -112276589013569458330 104612091113514802664 -100084737546039360199 104364058018116761460 -107006059340452534782 109074857816744029470 -111538009015644508967 109074857816744029470 -102088173699409175139 108894779805940659869 -107896527414017792767 104450760987525660219 -109335713877994755095 101832771958125915909 -109009089551467495747 115047896996200277508 -107896527414017792767 110318982509514011806 -113351703941294630458 113612142759476883204 -106026445270708973611 107755092517418534815 -112944532473909341307 114461903539732780109 -104612091113514802664 114790574178411061829 -104987932455782713675 100397511207083609950 -115478779964227301239 118264184129842070900 -106122462724662012890 101261243957067319422 -109170680659355634945 101832771958125915909 -105705665708025552983 102048265612444661933 -107753428759636856492 107033731246200681024 -113047102292798770205 110286587261352351537 -104450760987525660219 104987932455782713675 -112276589013569458330 109412257237874861202 -103171849011748425097 105400903062771750089 -105076678694475690385 116768967108862685383 -113116318008017777871 113920721823301219308 -113166718268343560861 115739378269261680935 -104450760987525660219 115478779964227301239 -100084737546039360199 108255750659110762991 -116207701819773193333 110727249496967897430 -116374117927631468606 110209787594312878744 -110318982509514011806 102034052532213921839 -109182513536739786206 118207880179234484610 -117691391504351341685 101094440579835956866 -109504122343901736603 116762461061414014956 -116374117927631468606 115302451851587317396 -106096957694385885466 116107530889292552664 -101092351652012588236 104191514233385365427 -109170680659355634945 104412682128547752131 -116374117927631468606 111261496925076985134 -110728349411116483031 113612142759476883204 -100093902492789669774 113117251731252114390 -100535338638690515335 105006381068870463173 -113047102292798770205 103475991020114516832 -104612091113514802664 103171849011748425097 -113116318008017777871 100262595546646927505 -100269980559891536109 110318982509514011806 -112364132652438722780 115963821022986200770 -101094440579835956866 118264184129842070900 -118418436905562612953 113247423264358423892 -105662484616118909569 104981620794721816747 -114244914082871792125 108255750659110762991 -115963821022986200770 101213524574984631953 -106345802537137414958 108434394145774737013 -103691312271671214670 113166718268343560861 -108817085747440374986 108894779805940659869 -107519026002586025827 103100496883422151101 -115047896996200277508 101261243957067319422 -113166718268343560861 105632941129656401917 -104612091113514802664 109174551750397653742 -115109077044202722504 114359738470992181937 -113612142759476883204 106189723444098348646 -105901259206530390933 116773104421165750126 -117691391504351341685 106189723444098348646 -116388668762198604003 104364058018116761460 -117691391504351341685 105006381068870463173 -106224435901697064976 117421021456205115327 -100173452066172931939 111285782175840598932 -103016521073558596116 109809835379677001002 -101849747879612982297 113612142759476883204 -111538009015644508967 118418436905562612953 -115963821022986200770 116762461061414014956 -104987932455782713675 100535338638690515335 -106623900962110772648 109603191376504998413 -105076678694475690385 101213524574984631953 -104364058018116761460 115565811010545226083 -106026445270708973611 100523784851251213675 -113801236315350503728 111538009015644508967 -104870518715355770532 108899222163640713555 -109809835379677001002 106665185918564754695 -108894779805940659869 107117483540235115863 -108000051912603578599 108817085747440374986 -106623900962110772648 111171416539633276676 -100269980559891536109 112063946124358686266 -115739148151601573808 109170680659355634945 -104450760987525660219 112878918236054024365 -110731951130561423918 109895887909967698705 -102034052532213921839 114991987213662121376 -104612091113514802664 118207880179234484610 -113801236315350503728 115047896996200277508 -105822688186016123722 112944532473909341307 -104364058018116761460 111310990991240556038 -109388259228280605303 118177473010760322916 -113116318008017777871 114522811866073303399 -100535338638690515335 115047896996200277508 -100093902492789669774 103171849011748425097 -105901259206530390933 104612091113514802664 -108314259245584185142 110318982509514011806 -116762461061414014956 110209787594312878744 -108082478497335384404 107753428759636856492 -109809835379677001002 113475277239647026452 -115739378269261680935 116192724891839469024 -105006381068870463173 109780617142585395916 -102545157386069758709 109412257237874861202 -102705549361550492663 105376842241046675559 -101832196121408756348 104412682128547752131 -100537991844787325512 116768967108862685383 -107090629815001792243 111601729473858041964 -103016521073558596116 110318982509514011806 -100084737546039360199 113475277239647026452 -114244914082871792125 107753428759636856492 -113612142759476883204 107519026002586025827 -102654570556058167176 110286587261352351537 -115360979797396777969 107234826207633309420 -106695181236161584825 109895887909967698705 -107755092517418534815 106026445270708973611 -105705665708025552983 112844561713780016118 -100535338638690515335 113612142759476883204 -111310990991240556038 118264184129842070900 -114991987213662121376 117477042502591652021 -108000051912603578599 105705665708025552983 -109581870574956225297 115739378269261680935 -106312895983244085949 113210431006401244170 -104450760987525660219 105400903062771750089 -107519026002586025827 109778238062128383421 -113166718268343560861 115109077044202722504 -111996414642516891950 109335713877994755095 -102654570556058167176 110318982509514011806 -104618664838382110366 100262595546646927505 -108817085747440374986 114632854492678778509 -106312895983244085949 106122462724662012890 -117477042502591652021 104364058018116761460 -109247306373593947755 102048265612444661933 -104450760987525660219 107234826207633309420 -111091089527727420853 101094440579835956866 -107753428759636856492 115739378269261680935 -115360979797396777969 112339769006469685593 -114790574178411061829 111538009015644508967 -107519026002586025827 115565811010545226083 -111666959095947698908 102034052532213921839 -101246601531247561585 111337216646096594888 -101057616370673656059 109813896768294978296 -112364132652438722780 113920721823301219308 -114549564725160709822 107753428759636856492 -103171849011748425097 113116318008017777871 -108817085747440374986 105376842241046675559 -104612091113514802664 114948739867290323960 -112878918236054024365 118245559326500322262 -106224435901697064976 103112588675637065591 -102512310412972518336 105400903062771750089 -106096957694385885466 101261243957067319422 -100856165335040300712 114549564725160709822 -100535338638690515335 107033731246200681024 -117550971892000156946 107097980510051172895 -116374117927631468606 115360979797396777969 -100173452066172931939 101261243957067319422 -107196172964000631645 110318982509514011806 -102512310412972518336 103716847685048716973 -107519026002586025827 114948739867290323960 -113116318008017777871 117377434815709898403 -104450760987525660219 101629211371073711149 -117921656724816772352 102583861614002135208 -103325969492772452485 102545157386069758709 -110448924610029803960 107303107611470093265 -109182513536739786206 104560124403688998123 -114790574178411061829 105634350975670602787 -118245559326500322262 103493459351957813291 -108082478497335384404 108255750659110762991 -103100496883422151101 106312895983244085949 -103100496883422151101 109412257237874861202 -104870518715355770532 111261496925076985134 -111975545018506506119 105076678694475690385 -104191514233385365427 109895887909967698705 -107587075873786034394 107097980510051172895 -103207773865797007066 115739378269261680935 -115109077044202722504 106837636108890930395 -116207701819773193333 113475277239647026452 -106096957694385885466 110728349411116483031 -112276589013569458330 113164038788726940319 -111666959095947698908 115302451851587317396 -115706830138905259568 105076678694475690385 -115109077044202722504 114152150496380806218 -106122462724662012890 115360979797396777969 -104618664838382110366 108817085747440374986 -108129202557078877094 105662484616118909569 -111091089527727420853 105076678694475690385 -112016425853417877466 115565811010545226083 -111538009015644508967 107781761552417614958 -116762461061414014956 118357356982727825178 -101261243957067319422 108176814619778619437 -100397511207083609950 118357356982727825178 -104450760987525660219 116548025566090395827 -113164038788726940319 105076678694475690385 -113116318008017777871 100537991844787325512 -101057616370673656059 103012564142649561853 -109174551750397653742 108574688020691152748 -116723923766489326849 107006059340452534782 -115064258994656104138 108574688020691152748 -116207701819773193333 116768967108862685383 -102512310412972518336 115360979797396777969 -108000051912603578599 100269980559891536109 -111091089527727420853 103012564142649561853 -117683744929337064105 115047896996200277508 -110318982509514011806 107133948555394893679 -113801236315350503728 104560124403688998123 -109247306373593947755 108434394145774737013 -103100496883422151101 117691391504351341685 -109504122343901736603 111285782175840598932 -113351703941294630458 111091089527727420853 -100535338638690515335 115478779964227301239 -107753428759636856492 112276589013569458330 -115109077044202722504 115047896996200277508 -113116318008017777871 100535338638690515335 -100856165335040300712 102216887206636463918 -103691312271671214670 115403621788538540544 -102216887206636463918 111091089527727420853 -109809835379677001002 110727249496967897430 -113166718268343560861 104987932455782713675 -103691312271671214670 101126226710566561379 -101057616370673656059 118357356982727825178 -109778238062128383421 108817085747440374986 -104612091113514802664 111091089527727420853 -109196389259504239326 118264184129842070900 -106925005603331131101 107753428759636856492 -116374117927631468606 112844561713780016118 -113116318008017777871 109074857816744029470 -100871232248276491534 115739378269261680935 -116374117927631468606 102178700954286324866 -108000051912603578599 116762461061414014956 -113166718268343560861 108176814619778619437 -106312895983244085949 107234826207633309420 -107519026002586025827 112339769006469685593 -108082478497335384404 115360979797396777969 -113166718268343560861 100262595546646927505 -109247306373593947755 103475991020114516832 -100856165335040300712 110209787594312878744 -103016521073558596116 113166718268343560861 -107117418142368704725 103171849011748425097 -113920721823301219308 112339769006469685593 -101057616370673656059 107755092517418534815 -107519026002586025827 105822688186016123722 -102425976203575211068 103012564142649561853 -109581870574956225297 100019606796298306813 -113166718268343560861 100269980559891536109 -115360979797396777969 113920721823301219308 -107303107611470093265 118086737936443306746 -104987932455782713675 103716847685048716973 -103493459351957813291 101832771958125915909 -103016521073558596116 113210431006401244170 -107196172964000631645 111091089527727420853 -115360979797396777969 109182513536739786206 -101057616370673656059 107968787521028284191 -102512310412972518336 103493459351957813291 -100397511207083609950 101849747879612982297 -100397511207083609950 114948739867290323960 -100001826804813287036 116927391465690022495 -106695181236161584825 113247423264358423892 -115739378269261680935 110286587261352351537 -100269980559891536109 108817085747440374986 -118245559326500322262 109504122343901736603 -105705665708025552983 118264184129842070900 -117691391504351341685 117477042502591652021 -103016521073558596116 112339769006469685593 -100269980559891536109 109519167630731639094 -101057616370673656059 111666959095947698908 -116762461061414014956 113612142759476883204 -114791921155677330282 116768967108862685383 -104191514233385365427 111538009015644508967 -104450760987525660219 113247423264358423892 -115360979797396777969 118264184129842070900 -106096957694385885466 110367546804237452889 -106695181236161584825 109581870574956225297 -115017401467423642930 110318982509514011806 -117377434815709898403 103012564142649561853 -107033731246200681024 105030465637303791249 -105076678694475690385 106312895983244085949 -100084737546039360199 105634350975670602787 -100353346783543697435 111091089527727420853 -102216887206636463918 102048265612444661933 -100084737546039360199 107519026002586025827 -109304903996729396661 111310990991240556038 -106122462724662012890 118264184129842070900 -112339769006469685593 102034052532213921839 -106837636108890930395 114821161730370452301 -115302451851587317396 106067770652209688980 -111654284395316165338 117691391504351341685 -113612142759476883204 109895887909967698705 -111538009015644508967 107117483540235115863 -109174551750397653742 106224435901697064976 -113164038788726940319 103325969492772452485 -106665185918564754695 100084737546039360199 -100397511207083609950 110209787594312878744 -109247306373593947755 109388259228280605303 -105901259206530390933 104987932455782713675 -105822688186016123722 117421021456205115327 -103016521073558596116 104560124403688998123 -109304903996729396661 115565811010545226083 -113116318008017777871 108000051912603578599 -108894779805940659869 116723923766489326849 -118245559326500322262 103207773865797007066 -104277680236688325392 105376842241046675559 -116762461061414014956 113166718268343560861 -110318982509514011806 118418436905562612953 -111538009015644508967 103012564142649561853 -108082478497335384404 111285782175840598932 -100173452066172931939 103171849011748425097 -116762461061414014956 103207773865797007066 -105076678694475690385 105901259206530390933 -107587075873786034394 108817085747440374986 -100397511207083609950 103100496883422151101 -109174551750397653742 115047896996200277508 -106096957694385885466 115920538018564742940 -112878918236054024365 115739148151601573808 -105076678694475690385 115527632958457358109 -106665185918564754695 112844561713780016118 -104987932455782713675 112878918236054024365 -106026445270708973611 107968787521028284191 -115963821022986200770 107117483540235115863 -115565811010545226083 109519167630731639094 -100269980559891536109 114632854492678778509 -100269980559891536109 106189723444098348646 -113164038788726940319 109412257237874861202 -101246601531247561585 113612142759476883204 -108000051912603578599 109247306373593947755 -113166718268343560861 102034052532213921839 -106122462724662012890 102034052532213921839 -113475277239647026452 105634350975670602787 -116192724891839469024 117921656724816772352 -115963821022986200770 109182513536739786206 -108082478497335384404 117693415411676715849 -105006381068870463173 113612142759476883204 -116621986644249676039 101261243957067319422 -115706830138905259568 118207880179234484610 -101832196121408756348 100537991844787325512 -113351703941294630458 109504122343901736603 -107519026002586025827 113210431006401244170 -109581870574956225297 107992936493665613654 -111091089527727420853 100269980559891536109 -103660543175586203250 101600577333348274552 -117477042502591652021 100019606796298306813 -109778238062128383421 114632854492678778509 -115739148151601573808 109931095616224405271 -101569655404865588155 115622466243011136115 -107303107611470093265 106189723444098348646 -114790574178411061829 113116318008017777871 -101057616370673656059 117691391504351341685 -105076678694475690385 113475277239647026452 -115739148151601573808 110649214929620497857 -108314259245584185142 113351703941294630458 -107196172964000631645 106189723444098348646 -101246601531247561585 100537991844787325512 -104450760987525660219 107117418142368704725 -100397511207083609950 116762461061414014956 -101261243957067319422 112364132652438722780 -113801236315350503728 107968787521028284191 -100535338638690515335 113475277239647026452 -107587075873786034394 104364058018116761460 -111310990991240556038 101261243957067319422 -101261243957067319422 114244914082871792125 -108817085747440374986 101600577333348274552 -106026445270708973611 104412682128547752131 -112878918236054024365 111422286077941361166 -100257676670422660178 115302451851587317396 -109778238062128383421 109182513536739786206 -104612091113514802664 101057616370673656059 -101057616370673656059 113117251731252114390 -108314259245584185142 107308976571078250231 -103207773865797007066 100093902492789669774 -118245559326500322262 107133948555394893679 -117691391504351341685 109809835379677001002 -117691391504351341685 117421021456205115327 -103691312271671214670 106096957694385885466 -111538009015644508967 101246601531247561585 -104612091113514802664 101600577333348274552 -116773104421165750126 103100496883422151101 -100269980559891536109 101261243957067319422 -107090629815001792243 103100496883422151101 -118357356982727825178 104612091113514802664 -115706830138905259568 115883560681104199404 -115478779964227301239 114632854492678778509 -102512310412972518336 110318982509514011806 -109581870574956225297 112844561713780016118 -115706830138905259568 109170680659355634945 -111310990991240556038 108000051912603578599 -103171849011748425097 104364058018116761460 -111538009015644508967 118207880179234484610 -113612142759476883204 117691391504351341685 -116374117927631468606 115047896996200277508 -114549564725160709822 102216887206636463918 -114244914082871792125 111538009015644508967 -115622466243011136115 108255750659110762991 -102512310412972518336 101213524574984631953 -115622466243011136115 105076678694475690385 -103016521073558596116 116491285067171323298 -105705665708025552983 112944532473909341307 -106026445270708973611 109074857816744029470 -109174551750397653742 113068441549452664746 -112820512550939559523 100262595546646927505 -100856165335040300712 111091089527727420853 -111091089527727420853 112944532473909341307 -104364058018116761460 107519026002586025827 -108894779805940659869 101261243957067319422 -113166718268343560861 105006381068870463173 -113164038788726940319 117691391504351341685 -115622466243011136115 104450760987525660219 -103207773865797007066 111538009015644508967 -102216887206636463918 100856165335040300712 -107753428759636856492 101213524574984631953 -113351703941294630458 103012564142649561853 -114918561167106576639 116762461061414014956 -115565811010545226083 102048265612444661933 -101261243957067319422 103207773865797007066 -113920721823301219308 104364058018116761460 -111422286077941361166 112878918236054024365 -104412682128547752131 100019606796298306813 -101057616370673656059 115478779964227301239 -102034052532213921839 100523784851251213675 -117691391504351341685 110209787594312878744 -118418436905562612953 116374117927631468606 -102545157386069758709 109170680659355634945 -107133948555394893679 117691391504351341685 -112364132652438722780 103100496883422151101 -118418436905562612953 111538009015644508967 -102088173699409175139 116927391465690022495 -115920538018564742940 104870518715355770532 -100397511207083609950 100084737546039360199 -112276589013569458330 116621986644249676039 -103207773865797007066 103475991020114516832 -108832773152747423283 111091089527727420853 -108000051912603578599 108255750659110762991 -114758749740576519343 112944532473909341307 -101092351652012588236 104412682128547752131 -106122462724662012890 112339769006469685593 -104612091113514802664 111654284395316165338 -106026445270708973611 105400369085832308485 -110731951130561423918 116192724891839469024 -108817085747440374986 103660543175586203250 -109780617142585395916 108817085747440374986 -100397511207083609950 108176814619778619437 -107519026002586025827 110318982509514011806 -118418436905562612953 115047896996200277508 -106695181236161584825 112878918236054024365 -115527632958457358109 107992936493665613654 -111422286077941361166 118245559326500322262 -110731951130561423918 107308976571078250231 -105901259206530390933 115109077044202722504 -117691391504351341685 114079920283986872783 -105822688186016123722 104987932455782713675 -103100496883422151101 114461903539732780109 -112364132652438722780 115390494223651393388 -107896527414017792767 100262595546646927505 -102034052532213921839 108817085747440374986 -105076678694475690385 110727249496967897430 -110728349411116483031 100093902492789669774 -111538009015644508967 110367546804237452889 -104450760987525660219 102178700954286324866 -114991987213662121376 109778238062128383421 -107755092517418534815 110209787594312878744 -100084737546039360199 117691391504351341685 -112276589013569458330 104191514233385365427 -115360979797396777969 107753428759636856492 -100397511207083609950 117477042502591652021 -114244914082871792125 101849747879612982297 -100084737546039360199 116388668762198604003 -101720949843787442951 100262595546646927505 -102654570556058167176 116621986644249676039 -112878918236054024365 103660543175586203250 -116374117927631468606 103493459351957813291 -106224435901697064976 111310990991240556038 -105006381068870463173 116723923766489326849 -106224435901697064976 113475277239647026452 -107303107611470093265 110448924610029803960 -116773104421165750126 113612142759476883204 -116762461061414014956 113475277239647026452 -106695181236161584825 118245559326500322262 -107006059340452534782 111091089527727420853 -104618664838382110366 114244914082871792125 -108000051912603578599 103112588675637065591 -101261243957067319422 109335713877994755095 -114244914082871792125 104560124403688998123 -113920721823301219308 118264184129842070900 -110318982509514011806 108817085747440374986 -115047896996200277508 115478779964227301239 -102512310412972518336 107033731246200681024 -101849747879612982297 112063946124358686266 -108817085747440374986 113612142759476883204 -108082478497335384404 114790574178411061829 -105076678694475690385 103207773865797007066 -108869261693909788407 103691312271671214670 -116762461061414014956 115341960624782381062 -115047896996200277508 118357356982727825178 -100173452066172931939 107133948555394893679 -102216887206636463918 114821161730370452301 -110774757382682582490 118207880179234484610 -111091089527727420853 114244914082871792125 -104450760987525660219 109895887909967698705 -112016425853417877466 107117483540235115863 -113116318008017777871 103112588675637065591 -118086737936443306746 107097980510051172895 -114790574178411061829 114079920283986872783 -106026445270708973611 102048265612444661933 -100084737546039360199 111538009015644508967 -101057616370673656059 104450760987525660219 -110014891370822989957 100257676670422660178 -117377434815709898403 114758749740576519343 -102048265612444661933 115565811010545226083 -117550971892000156946 112844561713780016118 -107753428759636856492 101261243957067319422 -111996414642516891950 115302451851587317396 -115109077044202722504 116768967108862685383 -100084737546039360199 113117251731252114390 -106925005603331131101 116548025566090395827 -100269980559891536109 115622466243011136115 -109809835379677001002 103171849011748425097 -100397511207083609950 105376842241046675559 -111091089527727420853 113116318008017777871 -104412682128547752131 114991987213662121376 -107753428759636856492 106189723444098348646 -100353346783543697435 103716847685048716973 -104364058018116761460 101481313915867030905 -107519026002586025827 108082478497335384404 -115622466243011136115 106695181236161584825 -108952536790629690817 107117483540235115863 -109778238062128383421 105076678694475690385 -111091089527727420853 116621986644249676039 -101261243957067319422 108082478497335384404 -104612091113514802664 107097980510051172895 -109009089551467495747 114948739867290323960 -110014891370822989957 103567864289861449366 -104618664838382110366 110649214929620497857 -115963821022986200770 112844561713780016118 -112016425853417877466 101849747879612982297 -117157132370347986579 109809835379677001002 -115565811010545226083 112063946124358686266 -108952536790629690817 108894779805940659869 -114244914082871792125 102403331307606219198 -112820512550939559523 101185406398932804414 -118086737936443306746 109504122343901736603 -110731951130561423918 102403331307606219198 -111975545018506506119 101185406398932804414 -109778238062128383421 112944532473909341307 -111538009015644508967 104560124403688998123 -107896527414017792767 109809835379677001002 -107033731246200681024 118357356982727825178 -117421021456205115327 103716847685048716973 -109174551750397653742 101225750534150134109 -107033731246200681024 115565811010545226083 -117691391504351341685 108434394145774737013 -108817085747440374986 107587075873786034394 -115360979797396777969 109174551750397653742 -111310990991240556038 114948739867290323960 -111975545018506506119 104450760987525660219 -113047102292798770205 114918561167106576639 -113920721823301219308 113475277239647026452 -104450760987525660219 118418436905562612953 -111310990991240556038 113612142759476883204 -116107530889292552664 106026445270708973611 -114991987213662121376 111538009015644508967 -109778238062128383421 107781761552417614958 -115047896996200277508 109412257237874861202 -108952536790629690817 107308976571078250231 -106026445270708973611 114791921155677330282 -100871232248276491534 108894779805940659869 -101213524574984631953 102545157386069758709 -105076678694475690385 103012564142649561853 -113475277239647026452 101225750534150134109 -102034052532213921839 103475991020114516832 -113164038788726940319 107753428759636856492 -109247306373593947755 101092351652012588236 -106312895983244085949 103012564142649561853 -117550971892000156946 101849747879612982297 -106096957694385885466 110731951130561423918 -100093902492789669774 112063946124358686266 -103016521073558596116 100262595546646927505 -108894779805940659869 105662484616118909569 -113166718268343560861 108082478497335384404 -116926943858449614201 108314259245584185142 -100084737546039360199 110727249496967897430 -110774757382682582490 103100496883422151101 -104191514233385365427 102545157386069758709 -101057616370673656059 100537991844787325512 -109182513536739786206 107781761552417614958 -115963821022986200770 110318982509514011806 -106665185918564754695 114790574178411061829 -112364132652438722780 109809835379677001002 -115622466243011136115 109074857816744029470 -103207773865797007066 104792450024518550569 -115739148151601573808 105822688186016123722 -112339769006469685593 104987932455782713675 -107755092517418534815 102512310412972518336 -108255750659110762991 105400903062771750089 -109778238062128383421 115478779964227301239 -109304903996729396661 103716847685048716973 -104612091113514802664 101629211371073711149 -107896527414017792767 113117251731252114390 -112276589013569458330 115622466243011136115 -116773104421165750126 106189723444098348646 -104870518715355770532 101126226710566561379 -112820512550939559523 106122462724662012890 -103016521073558596116 115706830138905259568 -109581870574956225297 111654284395316165338 -105376842241046675559 115302451851587317396 -101213524574984631953 102048265612444661933 -106312895983244085949 109412257237874861202 -117477042502591652021 115017401467423642930 -103153499873703329897 100894876340926769800 -107753428759636856492 115064258994656104138 -105400903062771750089 103660543175586203250 -111091089527727420853 100397143564111754723 -107896527414017792767 104364058018116761460 -103207773865797007066 112844561713780016118 -114244914082871792125 108574688020691152748 -114244914082871792125 112844561713780016118 -106096957694385885466 113801236315350503728 -117421021456205115327 103325969492772452485 -106837636108890930395 107699711897781234810 -110318982509514011806 118207880179234484610 -111975545018506506119 107753428759636856492 -107133948555394893679 107234826207633309420 -107753428759636856492 106345802537137414958 -103493459351957813291 118207880179234484610 -101225750534150134109 111285782175840598932 -109778238062128383421 106925005603331131101 -102654570556058167176 104412682128547752131 -109504122343901736603 110318982509514011806 -118086737936443306746 115863474911002159675 -100084737546039360199 105705665708025552983 -103016521073558596116 113116318008017777871 -117691391504351341685 111538009015644508967 -107133948555394893679 113247423264358423892 -115341960624782381062 100856165335040300712 -107006059340452534782 111285782175840598932 -112276589013569458330 105076678694475690385 -111337216646096594888 104191514233385365427 -107090629815001792243 115109077044202722504 -115478779964227301239 107753428759636856492 -111091089527727420853 107896527414017792767 -115883560681104199404 114991987213662121376 -111654284395316165338 106189723444098348646 -113475277239647026452 110727249496967897430 -118418436905562612953 103171849011748425097 -115478779964227301239 112276589013569458330 -117691391504351341685 109412257237874861202 -105901259206530390933 111538009015644508967 -104612091113514802664 103493459351957813291 -100871232248276491534 113247423264358423892 -105006381068870463173 115109077044202722504 -104450760987525660219 113164038788726940319 -104364058018116761460 117550971892000156946 -114918561167106576639 109809835379677001002 -107033731246200681024 115863474911002159675 -106925005603331131101 112944532473909341307 -109388259228280605303 104383523254857614001 -115302451851587317396 106189723444098348646 -111538009015644508967 109780617142585395916 -116388668762198604003 109778238062128383421 -105207943512906810696 110286587261352351537 -105705665708025552983 106665185918564754695 -118357356982727825178 111538009015644508967 -117693415411676715849 114791921155677330282 -109778238062128383421 104450760987525660219 -103567864289861449366 105376842241046675559 -112820512550939559523 102048265612444661933 -110731951130561423918 111538009015644508967 -101246601531247561585 111666959095947698908 -116207701819773193333 102178700954286324866 -112944532473909341307 115565811010545226083 -111091089527727420853 102403331307606219198 -105901259206530390933 108832773152747423283 -105207943512906810696 103171849011748425097 -113116318008017777871 113247423264358423892 -109182513536739786206 107117483540235115863 -100269980559891536109 109813896768294978296 -107781761552417614958 107992936493665613654 -106665185918564754695 112339769006469685593 -115739378269261680935 111666959095947698908 -113166718268343560861 117477042502591652021 -102403331307606219198 104612091113514802664 -100535338638690515335 110727249496967897430 -104450760987525660219 116768967108862685383 -103171849011748425097 105705665708025552983 -112944532473909341307 106189723444098348646 -114244914082871792125 115047896996200277508 -109809835379677001002 115963821022986200770 -100939735623367202041 105376842241046675559 -103493459351957813291 111538009015644508967 -111422286077941361166 115963821022986200770 -115109077044202722504 106100296973968329853 -105705665708025552983 100269980559891536109 -113801236315350503728 102178700954286324866 -100084737546039360199 112844561713780016118 -103153499873703329897 111171416539633276676 -108434394145774737013 114790574178411061829 -112364132652438722780 107753428759636856492 -103016521073558596116 107234826207633309420 -105705665708025552983 114948739867290323960 -107519026002586025827 107117483540235115863 -113116318008017777871 109895887909967698705 -107896527414017792767 111310990991240556038 -113166718268343560861 115739148151601573808 -109504122343901736603 112844561713780016118 -117691391504351341685 105901259206530390933 -108314259245584185142 105822688186016123722 -103020619410065980303 114991987213662121376 -101720949843787442951 105901259206530390933 -114918561167106576639 114632854492678778509 -109809835379677001002 111091089527727420853 -118418436905562612953 114979733565079457374 -113351703941294630458 112878918236054024365 -115064258994656104138 109778238062128383421 -106096957694385885466 103153499873703329897 -112016425853417877466 113116318008017777871 -100397511207083609950 111666959095947698908 -106312895983244085949 111091089527727420853 -101481313915867030905 118264184129842070900 -117421021456205115327 109412257237874861202 -116207701819773193333 100537991844787325512 -110728349411116483031 117012574629989558450 -100173452066172931939 108082478497335384404 -106096957694385885466 115302451851587317396 -102512310412972518336 110727249496967897430 -105901259206530390933 110318982509514011806 -108243648069327964538 113351703941294630458 -107519026002586025827 111654284395316165338 -118418436905562612953 100262595546646927505 -103016521073558596116 113612142759476883204 -107006059340452534782 113117251731252114390 -106122462724662012890 100537991844787325512 -115739148151601573808 100262595546646927505 -104612091113514802664 114791921155677330282 -106096957694385885466 102583861614002135208 -109170680659355634945 108894779805940659869 -100173452066172931939 106100296973968329853 -102034052532213921839 101629211371073711149 -118418436905562612953 102545157386069758709 -115565811010545226083 107519026002586025827 -101094440579835956866 113210431006401244170 -118245559326500322262 112276589013569458330 -103207773865797007066 101263833299534001868 -105076678694475690385 103171849011748425097 -113116318008017777871 100397511207083609950 -117691391504351341685 114821161730370452301 -104450760987525660219 114979733565079457374 -115109077044202722504 102216887206636463918 -102216887206636463918 103716847685048716973 -103016521073558596116 113801236315350503728 -109196389259504239326 111285782175840598932 -104618664838382110366 101720949843787442951 -117691391504351341685 109519167630731639094 -111091089527727420853 115302451851587317396 -115064258994656104138 109174551750397653742 -104612091113514802664 110286587261352351537 -116768967108862685383 114791921155677330282 -102034052532213921839 102425976203575211068 -106312895983244085949 110727249496967897430 -117421021456205115327 107968787521028284191 -113166718268343560861 116768967108862685383 -105076678694475690385 113210431006401244170 -115478779964227301239 109778238062128383421 -106224435901697064976 103171849011748425097 -116762461061414014956 100537991844787325512 -112016425853417877466 103207773865797007066 -106026445270708973611 104191514233385365427 -100535338638690515335 107133948555394893679 -102425976203575211068 112944532473909341307 -106122462724662012890 107753428759636856492 -115622466243011136115 106189723444098348646 -103207773865797007066 116927391465690022495 -102512310412972518336 101569655404865588155 -115739148151601573808 116621986644249676039 -115360979797396777969 114758749740576519343 -118086737936443306746 109182513536739786206 -111806715084467662398 115017401467423642930 -105705665708025552983 114790574178411061829 -104987932455782713675 106312895983244085949 -115739378269261680935 111091089527727420853 -105705665708025552983 114758749740576519343 -101569655404865588155 102034052532213921839 -115706830138905259568 113116318008017777871 -115622466243011136115 101261243957067319422 -112364132652438722780 114359738470992181937 -102512310412972518336 109813896768294978296 -112944532473909341307 115863474911002159675 -104612091113514802664 113116318008017777871 -115963821022986200770 107753428759636856492 -104191514233385365427 104412682128547752131 -104612091113514802664 110318982509514011806 -104412682128547752131 102545157386069758709 -117691391504351341685 111654284395316165338 -102403331307606219198 114979733565079457374 -118207880179234484610 113116318008017777871 -113351703941294630458 109813896768294978296 -115392876317176762477 108176814619778619437 -104364058018116761460 112276589013569458330 -107006059340452534782 103012564142649561853 -111337216646096594888 109388259228280605303 -111654284395316165338 107896527414017792767 -115622466243011136115 113920721823301219308 -111091089527727420853 113475277239647026452 -112339769006469685593 107117483540235115863 -116374117927631468606 112364132652438722780 -103153499873703329897 109388259228280605303 -106122462724662012890 115622466243011136115 -105400369085832308485 106096957694385885466 -101261243957067319422 104612091113514802664 -113116318008017777871 115478779964227301239 -113351703941294630458 113210431006401244170 -101057616370673656059 100523784851251213675 -108574688020691152748 106224435901697064976 -101057616370673656059 102178700954286324866 -104612091113514802664 114758749740576519343 -116207701819773193333 118264184129842070900 -101261243957067319422 114979733565079457374 -101261243957067319422 109412257237874861202 -108000051912603578599 112844561713780016118 -105901259206530390933 108594511384403031361 -108255750659110762991 110727249496967897430 -114918561167106576639 102403331307606219198 -111666959095947698908 110286587261352351537 -104412682128547752131 100537991844787325512 -109388259228280605303 108894779805940659869 -109778238062128383421 114244914082871792125 -101261243957067319422 104412682128547752131 -107781761552417614958 107033731246200681024 -109196389259504239326 100353346783543697435 -117421021456205115327 113612142759476883204 -114244914082871792125 107781761552417614958 -106122462724662012890 108255750659110762991 -103207773865797007066 103171849011748425097 -111538009015644508967 112944532473909341307 -102545157386069758709 103171849011748425097 -114079920283986872783 108255750659110762991 -107133948555394893679 100535338638690515335 -116762461061414014956 107626068753267217775 -105705665708025552983 103171849011748425097 -116374117927631468606 103207773865797007066 -115109077044202722504 114821161730370452301 -112364132652438722780 107755092517418534815 -111538009015644508967 116762461061414014956 -114359738470992181937 112364132652438722780 -106695181236161584825 109519167630731639094 -107519026002586025827 100397511207083609950 -108817085747440374986 103537420161725387429 -103567864289861449366 110014891370822989957 -116762461061414014956 102178700954286324866 -114991987213662121376 110318982509514011806 -111091089527727420853 110286587261352351537 -107781761552417614958 114758749740576519343 -112944532473909341307 109813896768294978296 -105207943512906810696 111091089527727420853 -101600577333348274552 113247423264358423892 -104450760987525660219 111654284395316165338 -115403621788538540544 104191514233385365427 -111091089527727420853 103207773865797007066 -118245559326500322262 102484577222269062816 -104364058018116761460 107968787521028284191 -115565811010545226083 104560124403688998123 -106312895983244085949 100262595546646927505 -117691391504351341685 103207773865797007066 -111538009015644508967 103207773865797007066 -108952536790629690817 113210431006401244170 -115739378269261680935 103493459351957813291 -115064258994656104138 109074857816744029470 -101057616370673656059 107106500560002041088 -101057616370673656059 115565811010545226083 -112944532473909341307 113475277239647026452 -113612142759476883204 114549564725160709822 -108817085747440374986 113351703941294630458 -105705665708025552983 115863474911002159675 -103016521073558596116 107755092517418534815 -115883560681104199404 108000051912603578599 -104612091113514802664 102178700954286324866 -102216887206636463918 109388259228280605303 -104412682128547752131 114632854492678778509 -109170680659355634945 111091089527727420853 -101832196121408756348 100871232248276491534 -110731951130561423918 101126226710566561379 -114244914082871792125 107106500560002041088 -114918561167106576639 107896527414017792767 -105822688186016123722 115739148151601573808 -105076678694475690385 111285782175840598932 -106925005603331131101 109182513536739786206 -116762461061414014956 114832793541825307503 -100173452066172931939 109813896768294978296 -115963821022986200770 118207880179234484610 -107519026002586025827 101261243957067319422 -110731951130561423918 110728349411116483031 -113116318008017777871 113612142759476883204 -106122462724662012890 113612142759476883204 -108817085747440374986 103012564142649561853 -104870518715355770532 117921656724816772352 -115064258994656104138 111091089527727420853 -102010610384685218706 100353346783543697435 -111975545018506506119 111538009015644508967 -113116318008017777871 113475277239647026452 -103100496883422151101 112276589013569458330 -113612142759476883204 118357356982727825178 -112844561713780016118 117691391504351341685 -106312895983244085949 103171849011748425097 -104191514233385365427 103020619410065980303 -113351703941294630458 109174551750397653742 -111806715084467662398 104191514233385365427 -102512310412972518336 116768967108862685383 -100084737546039360199 101569655404865588155 -105822688186016123722 111310990991240556038 -117691391504351341685 107753428759636856492 -108817085747440374986 117421021456205115327 -118245559326500322262 103171849011748425097 -113164038788726940319 109813896768294978296 -115739378269261680935 105901259206530390933 -117691391504351341685 112852253337028739987 -110318982509514011806 104560124403688998123 -102048265612444661933 106189723444098348646 -106312895983244085949 111310990991240556038 -114549564725160709822 117377434815709898403 -102654570556058167176 117477042502591652021 -113166718268343560861 111666959095947698908 -107753428759636856492 102545157386069758709 -106026445270708973611 102216887206636463918 -117477042502591652021 118156281382429939997 -109174551750397653742 108082478497335384404 -110318982509514011806 108082478497335384404 -111091089527727420853 109780617142585395916 -104450760987525660219 114632854492678778509 -105076678694475690385 111091089527727420853 -115302451851587317396 111996414642516891950 -107090629815001792243 113722523501415106689 -114918561167106576639 117550971892000156946 -107896527414017792767 106695181236161584825 -108082478497335384404 104450760987525660219 -118264184129842070900 111285782175840598932 -116374117927631468606 113801236315350503728 -112016425853417877466 114791921155677330282 -100397511207083609950 113284787225540728296 -117691391504351341685 101213524574984631953 -100084737546039360199 116762461061414014956 -107033731246200681024 109174551750397653742 -107753428759636856492 115360979797396777969 -108314259245584185142 115360979797396777969 -100353346783543697435 106189723444098348646 -100084737546039360199 112944532473909341307 -106623900962110772648 114832793541825307503 -109174551750397653742 115565811010545226083 -102512310412972518336 114791921155677330282 -117377434815709898403 108000051912603578599 -107006059340452534782 115739378269261680935 -107133948555394893679 118245559326500322262 -115739378269261680935 103171849011748425097 -103016521073558596116 114821161730370452301 -102048265612444661933 114790574178411061829 -102654570556058167176 101261243957067319422 -111707854651652464890 114791921155677330282 -108000051912603578599 115883560681104199404 -111654284395316165338 117421021456205115327 -110318982509514011806 100523784851251213675 -100397511207083609950 108574688020691152748 -115527632958457358109 115047896996200277508 -107519026002586025827 106189723444098348646 -113920721823301219308 104560124403688998123 -106695181236161584825 111538009015644508967 -117921656724816772352 107308976571078250231 -103691312271671214670 106100296973968329853 -100856165335040300712 114152150496380806218 -100397511207083609950 117550971892000156946 -104364058018116761460 100269980559891536109 -109388259228280605303 103537420161725387429 -103207773865797007066 116762461061414014956 -111538009015644508967 113475277239647026452 -103493459351957813291 107234826207633309420 -118418436905562612953 115017401467423642930 -100397511207083609950 114549564725160709822 -103493459351957813291 100262595546646927505 -107303107611470093265 115047896996200277508 -110318982509514011806 115622466243011136115 -114244914082871792125 102034052532213921839 -114758749740576519343 112276589013569458330 -115109077044202722504 106026445270708973611 -100871232248276491534 115047896996200277508 -115047896996200277508 118264184129842070900 -115706830138905259568 104450760987525660219 -106312895983244085949 108574688020691152748 -115360979797396777969 101849747879612982297 -117477042502591652021 113166718268343560861 -109335713877994755095 114522811866073303399 -111666959095947698908 107234826207633309420 -105901259206530390933 113801236315350503728 -114918561167106576639 115565811010545226083 -101057616370673656059 108082478497335384404 -109170680659355634945 109780617142585395916 -110318982509514011806 113801236315350503728 -118418436905562612953 105901259206530390933 -106096957694385885466 117995161934475952507 -113116318008017777871 111091089527727420853 -115302451851587317396 117691391504351341685 -109778238062128383421 101261243957067319422 -102425976203575211068 107781761552417614958 -104612091113514802664 109809835379677001002 -109304903996729396661 101849747879612982297 -115064258994656104138 110318982509514011806 -103691312271671214670 109388259228280605303 -102512310412972518336 113475277239647026452 -101263833299534001868 103207773865797007066 -115739148151601573808 115565811010545226083 -109581870574956225297 117377434815709898403 -115883560681104199404 114979733565079457374 -118086737936443306746 114790574178411061829 -108243648069327964538 109335713877994755095 -104412682128547752131 117477042502591652021 -117550971892000156946 112852253337028739987 -115706830138905259568 112276589013569458330 -113164038788726940319 108952536790629690817 -103016521073558596116 107033731246200681024 -104412682128547752131 117691391504351341685 -115360979797396777969 109809835379677001002 -107519026002586025827 110286587261352351537 -104618664838382110366 103716847685048716973 -104612091113514802664 103012564142649561853 -115739148151601573808 101261243957067319422 -102512310412972518336 101057616370673656059 -109778238062128383421 118086737936443306746 -109174551750397653742 113116318008017777871 -109174551750397653742 115478779964227301239 -105901259206530390933 112063946124358686266 -107519026002586025827 101569655404865588155 -106122462724662012890 107968787521028284191 -107699711897781234810 107129852879758941909 -105901259206530390933 113166718268343560861 -100397511207083609950 117693415411676715849 -103016521073558596116 107753428759636856492 -115963821022986200770 112852253337028739987 -101261243957067319422 100269980559891536109 -106122462724662012890 105705665708025552983 -100084737546039360199 104612091113514802664 -104612091113514802664 115047896996200277508 -114244914082871792125 110209787594312878744 -100173452066172931939 113116318008017777871 -118086737936443306746 107896527414017792767 -109931095616224405271 118245559326500322262 -109009089551467495747 102654570556058167176 -108817085747440374986 114244914082871792125 -102034052532213921839 107992936493665613654 -112364132652438722780 109174551750397653742 -112276589013569458330 113210431006401244170 -106224435901697064976 104560124403688998123 -107753428759636856492 103325969492772452485 -110731951130561423918 109504122343901736603 -110318982509514011806 105662484616118909569 -103207773865797007066 110209787594312878744 -102484577222269062816 118245559326500322262 -117377434815709898403 105634350975670602787 -100397511207083609950 112364132652438722780 -100397511207083609950 113166718268343560861 -102048265612444661933 101213524574984631953 -113612142759476883204 117377434815709898403 -113047102292798770205 101261243957067319422 -106096957694385885466 105400369085832308485 -104450760987525660219 113047102292798770205 -113164038788726940319 115478779964227301239 -101246601531247561585 104412682128547752131 -113612142759476883204 107781761552417614958 -101600577333348274552 104364058018116761460 -109174551750397653742 113210431006401244170 -109170680659355634945 110286587261352351537 -102545157386069758709 109895887909967698705 -103493459351957813291 113801236315350503728 -117477042502591652021 101832771958125915909 -116491285067171323298 105076678694475690385 -106837636108890930395 109388259228280605303 -106122462724662012890 109412257237874861202 -101481313915867030905 103325969492772452485 -105076678694475690385 108894779805940659869 -105901259206530390933 108082478497335384404 -109388259228280605303 105006381068870463173 -107781761552417614958 105822688186016123722 -115478779964227301239 109895887909967698705 -100173452066172931939 113210431006401244170 -108314259245584185142 115739148151601573808 -100353346783543697435 114791921155677330282 -115360979797396777969 104612091113514802664 -102216887206636463918 107968787521028284191 -103016521073558596116 103660543175586203250 -108000051912603578599 108434394145774737013 -112276589013569458330 107968787521028284191 -115302451851587317396 113210431006401244170 -101720949843787442951 110649214929620497857 -100269980559891536109 100537991844787325512 -108817085747440374986 112063946124358686266 -105076678694475690385 102178700954286324866 -105901259206530390933 106695181236161584825 -106096957694385885466 116192724891839469024 -105901259206530390933 106837636108890930395 -110774757382682582490 113920721823301219308 -102512310412972518336 100537991844787325512 -108817085747440374986 111654284395316165338 -118245559326500322262 111422286077941361166 -101057616370673656059 103207773865797007066 -102545157386069758709 114790574178411061829 -104364058018116761460 116762461061414014956 -115403621788538540544 117477042502591652021 -109504122343901736603 112878918236054024365 -100871232248276491534 113612142759476883204 -111538009015644508967 118156281382429939997 -107129852879758941909 107699711897781234810 -106312895983244085949 102048265612444661933 -108082478497335384404 100535338638690515335 -104364058018116761460 112852253337028739987 -109247306373593947755 104191514233385365427 -114918561167106576639 118264184129842070900 -102512310412972518336 101832771958125915909 -100856165335040300712 107755092517418534815 -115302451851587317396 116621986644249676039 -105400903062771750089 114790574178411061829 -107753428759636856492 105705665708025552983 -100093902492789669774 105822688186016123722 -118086737936443306746 108255750659110762991 -115109077044202722504 113801236315350503728 -101600577333348274552 117550971892000156946 -112820512550939559523 117421021456205115327 -102545157386069758709 111538009015644508967 -115064258994656104138 108082478497335384404 -109182513536739786206 114758749740576519343 -100353346783543697435 103207773865797007066 -104450760987525660219 106925005603331131101 -113164038788726940319 118264184129842070900 -118156281382429939997 109170680659355634945 -106026445270708973611 114152150496380806218 -108000051912603578599 107519026002586025827 -102545157386069758709 100535338638690515335 -102545157386069758709 106925005603331131101 -104450760987525660219 113351703941294630458 -100397511207083609950 113164038788726940319 -105006381068870463173 103207773865797007066 -111261496925076985134 117921656724816772352 -112276589013569458330 101094440579835956866 -109182513536739786206 108082478497335384404 -106925005603331131101 108255750659110762991 -112276589013569458330 103012564142649561853 -116773104421165750126 103171849011748425097 -114244914082871792125 118357356982727825178 -116388668762198604003 103112588675637065591 -112016425853417877466 108771911258181286059 -100084737546039360199 115565811010545226083 -113164038788726940319 117421021456205115327 -100856165335040300712 107793717361981126032 -111091089527727420853 101185406398932804414 -109196389259504239326 113920721823301219308 -108817085747440374986 101094440579835956866 -115565811010545226083 107992936493665613654 -104364058018116761460 112944532473909341307 -101057616370673656059 112364132652438722780 -100173452066172931939 115565811010545226083 -109581870574956225297 105076678694475690385 -106695181236161584825 108817085747440374986 -115109077044202722504 107793717361981126032 -104618664838382110366 115047896996200277508 -116374117927631468606 115963821022986200770 -115739148151601573808 108817085747440374986 -109174551750397653742 106925005603331131101 -100269980559891536109 115963821022986200770 -107519026002586025827 103171849011748425097 -104870518715355770532 117012574629989558450 -117693415411676715849 105376842241046675559 -111310990991240556038 111091089527727420853 -103325969492772452485 113612142759476883204 -100397511207083609950 117421021456205115327 -104612091113514802664 103207773865797007066 -105901259206530390933 101720949843787442951 -106096957694385885466 101832196121408756348 -114991987213662121376 118086737936443306746 -114152150496380806218 106812355611465528242 -103660543175586203250 107968787521028284191 -109809835379677001002 105400903062771750089 -111654284395316165338 115360979797396777969 -115739148151601573808 107968787521028284191 -103100496883422151101 103112588675637065591 -103016521073558596116 101261243957067319422 -116374117927631468606 115565811010545226083 -104450760987525660219 110318982509514011806 -113612142759476883204 103112588675637065591 -117421021456205115327 114632854492678778509 -100397511207083609950 118264184129842070900 -104870518715355770532 114979733565079457374 -106695181236161584825 117550971892000156946 -100397511207083609950 112339769006469685593 -116762461061414014956 102425976203575211068 -118245559326500322262 114979733565079457374 -115565811010545226083 103475991020114516832 -109247306373593947755 108894779805940659869 -101213524574984631953 109412257237874861202 -102034052532213921839 100537991844787325512 -109581870574956225297 112364132652438722780 -105901259206530390933 100535338638690515335 -109182513536739786206 112944532473909341307 -118418436905562612953 108176814619778619437 -118207880179234484610 107033731246200681024 -100269980559891536109 101720949843787442951 -112944532473909341307 103325969492772452485 -102545157386069758709 108434394145774737013 -104450760987525660219 103493459351957813291 -110728349411116483031 108869261693909788407 -111091089527727420853 106100296973968329853 -111171416539633276676 103153499873703329897 -116762461061414014956 113247423264358423892 -109182513536739786206 116762461061414014956 -101261243957067319422 118418436905562612953 -116374117927631468606 102403331307606219198 -114790574178411061829 112944532473909341307 -115109077044202722504 103171849011748425097 -102545157386069758709 106345802537137414958 -115047896996200277508 107117418142368704725 -108817085747440374986 105076678694475690385 -104364058018116761460 105634350975670602787 -115963821022986200770 108594511384403031361 -100871232248276491534 103207773865797007066 -106925005603331131101 107519026002586025827 -109581870574956225297 107753428759636856492 -113475277239647026452 118207880179234484610 -106096957694385885466 115109077044202722504 -103207773865797007066 107117483540235115863 -100093902492789669774 102088173699409175139 -115963821022986200770 113475277239647026452 -102088173699409175139 116723923766489326849 -116548025566090395827 106925005603331131101 -106345802537137414958 114632854492678778509 -118418436905562612953 105076678694475690385 -116491285067171323298 118207880179234484610 -108255750659110762991 100523784851251213675 -109304903996729396661 107117483540235115863 -113612142759476883204 109182513536739786206 -118086737936443306746 115963821022986200770 -113475277239647026452 107753428759636856492 -102216887206636463918 109895887909967698705 -115064258994656104138 113247423264358423892 -111091089527727420853 103493459351957813291 -103016521073558596116 115017401467423642930 -104987932455782713675 102034052532213921839 -114549564725160709822 105076678694475690385 -114549564725160709822 116926943858449614201 -100269980559891536109 105705665708025552983 -109809835379677001002 109581870574956225297 -117421021456205115327 107006059340452534782 -109581870574956225297 112944532473909341307 -115883560681104199404 109895887909967698705 -108255750659110762991 115706830138905259568 -101057616370673656059 111654284395316165338 -112944532473909341307 108082478497335384404 -107793717361981126032 103100496883422151101 -112364132652438722780 111666959095947698908 -101261243957067319422 115963821022986200770 -106026445270708973611 103207773865797007066 -108255750659110762991 115478779964227301239 -107896527414017792767 111654284395316165338 -116207701819773193333 109304903996729396661 -106312895983244085949 111285782175840598932 -103691312271671214670 111032944513257134357 -112364132652438722780 116491285067171323298 -116621986644249676039 104191514233385365427 -111538009015644508967 109412257237874861202 -115302451851587317396 107117483540235115863 -112944532473909341307 105400903062771750089 -117421021456205115327 112339769006469685593 -104450760987525660219 100084737546039360199 -109581870574956225297 107896527414017792767 -118207880179234484610 111091089527727420853 -107753428759636856492 112339769006469685593 -112016425853417877466 113920721823301219308 -114244914082871792125 104987932455782713675 -107753428759636856492 115047896996200277508 -101832196121408756348 115109077044202722504 -103016521073558596116 100939735623367202041 -109304903996729396661 109174551750397653742 -107196172964000631645 111707854651652464890 -109304903996729396661 108176814619778619437 -100269980559891536109 107234826207633309420 -100397511207083609950 107626068753267217775 -106312895983244085949 113920721823301219308 -112944532473909341307 108817085747440374986 -103016521073558596116 106345802537137414958 -106026445270708973611 103112588675637065591 -100269980559891536109 106312895983244085949 -104364058018116761460 108255750659110762991 -103660543175586203250 108817085747440374986 -108817085747440374986 107992936493665613654 -106190212616572073606 100019606796298306813 -100535338638690515335 104612091113514802664 -100871232248276491534 105400369085832308485 -105076678694475690385 105703999093618427814 -100397511207083609950 107006059340452534782 -106096957694385885466 100871232248276491534 -117377434815709898403 117157132370347986579 -114918561167106576639 115863474911002159675 -118418436905562612953 109895887909967698705 -107519026002586025827 101849747879612982297 -113920721823301219308 107753428759636856492 -100173452066172931939 100856165335040300712 -116374117927631468606 111310990991240556038 -113164038788726940319 101185406398932804414 -102216887206636463918 101849747879612982297 -107033731246200681024 108082478497335384404 -109304903996729396661 115963821022986200770 -117421021456205115327 109174551750397653742 -100871232248276491534 116927391465690022495 -106122462724662012890 112063946124358686266 -118245559326500322262 106695181236161584825 -103100496883422151101 114632854492678778509 -112016425853417877466 114790574178411061829 -106925005603331131101 102425976203575211068 -116773104421165750126 111091089527727420853 -102088173699409175139 115739378269261680935 -116374117927631468606 111538009015644508967 -118245559326500322262 113612142759476883204 -108016228299742896694 116107530889292552664 -115920538018564742940 117921656724816772352 -106224435901697064976 103660543175586203250 -108082478497335384404 107587075873786034394 -101213524574984631953 109809835379677001002 -108817085747440374986 111091089527727420853 -117477042502591652021 111285782175840598932 -115109077044202722504 105400369085832308485 -115706830138905259568 101261243957067319422 -103660543175586203250 116374117927631468606 -109778238062128383421 116388668762198604003 -100535338638690515335 113210431006401244170 -105006381068870463173 101832771958125915909 -104987932455782713675 109895887909967698705 -112944532473909341307 109581870574956225297 -108899222163640713555 110731951130561423918 -118086737936443306746 103325969492772452485 -107781761552417614958 109182513536739786206 -101094440579835956866 110318982509514011806 -109581870574956225297 118207880179234484610 -118017787526225833770 110731951130561423918 -106263529626268281828 110728349411116483031 -107896527414017792767 104987932455782713675 -112820512550939559523 111310990991240556038 -102034052532213921839 100262595546646927505 -109174551750397653742 111285782175840598932 -115109077044202722504 118418436905562612953 -100871232248276491534 117995161934475952507 -102034052532213921839 109809835379677001002 -100537991844787325512 114791921155677330282 -108832773152747423283 104560124403688998123 -108082478497335384404 110286587261352351537 -117377434815709898403 102178700954286324866 -111422286077941361166 109339805471557551388 -105705665708025552983 108255750659110762991 -106312895983244085949 103716847685048716973 -111310990991240556038 100262595546646927505 -102654570556058167176 102088173699409175139 -106695181236161584825 114244914082871792125 -108082478497335384404 101569655404865588155 -113116318008017777871 114079920283986872783 -116768967108862685383 117693415411676715849 -106122462724662012890 109182513536739786206 -116374117927631468606 101261243957067319422 -106312895983244085949 107097980510051172895 -107896527414017792767 116762461061414014956 -100173452066172931939 114821161730370452301 -113047102292798770205 112852253337028739987 -100397511207083609950 115863474911002159675 -112364132652438722780 112276589013569458330 -110731951130561423918 108176814619778619437 -116374117927631468606 107234826207633309420 -106312895983244085949 117691391504351341685 -107519026002586025827 115360979797396777969 -104450760987525660219 103325969492772452485 -103207773865797007066 113801236315350503728 -104987932455782713675 110318982509514011806 -113920721823301219308 105076678694475690385 -107133948555394893679 107196172964000631645 -118086737936443306746 103660543175586203250 -112364132652438722780 117550971892000156946 -114918561167106576639 112339769006469685593 -103493459351957813291 101849747879612982297 -114790574178411061829 107753428759636856492 -118418436905562612953 117550971892000156946 -101261243957067319422 115863474911002159675 -115064258994656104138 112063946124358686266 -111091089527727420853 114758749740576519343 -118418436905562612953 109809835379677001002 -115527632958457358109 115565811010545226083 -110731951130561423918 103691312271671214670 -107753428759636856492 116388668762198604003 -108817085747440374986 104560124403688998123 -114918561167106576639 101213524574984631953 -115047896996200277508 105400903062771750089 -113475277239647026452 107033731246200681024 -108894779805940659869 115017401467423642930 -103691312271671214670 109809835379677001002 -117421021456205115327 105076678694475690385 -112016425853417877466 109174551750397653742 -115963821022986200770 109581870574956225297 -103493459351957813291 110318982509514011806 -113801236315350503728 111310990991240556038 -112820512550939559523 116762461061414014956 -113164038788726940319 116388668762198604003 -105901259206530390933 106189723444098348646 -105006381068870463173 116621986644249676039 -112339769006469685593 112276589013569458330 -109182513536739786206 107896527414017792767 -100353346783543697435 110448924610029803960 -112276589013569458330 113475277239647026452 -115739378269261680935 114979733565079457374 -111261496925076985134 114979733565079457374 -118086737936443306746 105376842241046675559 -113164038788726940319 108255750659110762991 -100871232248276491534 115392876317176762477 -102403331307606219198 111310990991240556038 -118357356982727825178 105634350975670602787 -113722523501415106689 100856165335040300712 -105901259206530390933 103016521073558596116 -111337216646096594888 115017401467423642930 -117477042502591652021 109388259228280605303 -105207943512906810696 108176814619778619437 -100535338638690515335 107968787521028284191 -111091089527727420853 114632854492678778509 -110318982509514011806 111337216646096594888 -109778238062128383421 118264184129842070900 -100871232248276491534 107699711897781234810 -102088173699409175139 106026445270708973611 -116207701819773193333 109335713877994755095 -116762461061414014956 112063946124358686266 -101261243957067319422 115109077044202722504 -106623900962110772648 114821161730370452301 -110731951130561423918 111261496925076985134 -104612091113514802664 100535338638690515335 -111310990991240556038 108574688020691152748 -108000051912603578599 113612142759476883204 -116374117927631468606 114979733565079457374 -115392876317176762477 108952536790629690817 -115622466243011136115 116388668762198604003 -107699711897781234810 114979733565079457374 -100397511207083609950 109074857816744029470 -100084737546039360199 113164038788726940319 -115478779964227301239 105076678694475690385 -115739378269261680935 101704103161442695877 -115360979797396777969 103100496883422151101 -107587075873786034394 106695181236161584825 -100269980559891536109 110727249496967897430 -102545157386069758709 100262595546646927505 -103207773865797007066 112364132652438722780 -116621986644249676039 109813896768294978296 -115622466243011136115 105376842241046675559 -109247306373593947755 108000051912603578599 -115920538018564742940 112364132652438722780 -115739148151601573808 113801236315350503728 -100173452066172931939 107033731246200681024 -105901259206530390933 108894779805940659869 -117377434815709898403 112364132652438722780 -108000051912603578599 101213524574984631953 -115109077044202722504 105703999093618427814 -115047896996200277508 114790574178411061829 -112016425853417877466 106026445270708973611 -100084737546039360199 111285782175840598932 -107519026002586025827 110727249496967897430 -102034052532213921839 100535338638690515335 -109388259228280605303 105662484616118909569 -112944532473909341307 105634350975670602787 -104450760987525660219 106189723444098348646 -112016425853417877466 118207880179234484610 -112364132652438722780 108176814619778619437 -114549564725160709822 114821161730370452301 -118245559326500322262 101263833299534001868 -106925005603331131101 111538009015644508967 -113047102292798770205 112276589013569458330 -102484577222269062816 107968787521028284191 -111261496925076985134 113801236315350503728 -107196172964000631645 115963821022986200770 -113166718268343560861 103207773865797007066 -106665185918564754695 116388668762198604003 -115622466243011136115 103171849011748425097 -117691391504351341685 112944532473909341307 -112016425853417877466 112063946124358686266 -118156281382429939997 108894779805940659869 -114244914082871792125 115017401467423642930 -107133948555394893679 104560124403688998123 -109182513536739786206 106312895983244085949 -100093902492789669774 110728349411116483031 -115341960624782381062 107626068753267217775 -112364132652438722780 104987932455782713675 -111538009015644508967 104987932455782713675 -107133948555394893679 109813896768294978296 -117921656724816772352 101126226710566561379 -115706830138905259568 109809835379677001002 -111538009015644508967 108082478497335384404 -109581870574956225297 113247423264358423892 -115739378269261680935 116723923766489326849 -105705665708025552983 100084737546039360199 -114152150496380806218 115109077044202722504 -117683744929337064105 115565811010545226083 -107755092517418534815 103100496883422151101 -101057616370673656059 112844561713780016118 -101094440579835956866 109809835379677001002 -115047896996200277508 106189723444098348646 -108594511384403031361 103475991020114516832 -111091089527727420853 112820512550939559523 -113475277239647026452 113116318008017777871 -116491285067171323298 108082478497335384404 -100269980559891536109 104450760987525660219 -108243648069327964538 116207701819773193333 -114758749740576519343 111091089527727420853 -113166718268343560861 103012564142649561853 -107753428759636856492 113247423264358423892 -111310990991240556038 104450760987525660219 -106312895983244085949 101057616370673656059 -114856222286197208502 106623900962110772648 -109780617142585395916 109335713877994755095 -105076678694475690385 113117251731252114390 -103207773865797007066 107699711897781234810 -103207773865797007066 109170680659355634945 -113166718268343560861 109581870574956225297 -101057616370673656059 113351703941294630458 -118418436905562612953 113801236315350503728 -103207773865797007066 115527632958457358109 -104870518715355770532 111310990991240556038 -112290361600843238282 117921656724816772352 -112944532473909341307 107117418142368704725 -115622466243011136115 118207880179234484610 -116374117927631468606 118418436905562612953 -111654284395316165338 100262595546646927505 -109009089551467495747 114991987213662121376 -109247306373593947755 109778238062128383421 -117377434815709898403 107519026002586025827 -108000051912603578599 107587075873786034394 -114918561167106576639 101246601531247561585 -112852253337028739987 115963821022986200770 -107753428759636856492 103207773865797007066 -100353346783543697435 109196389259504239326 -115963821022986200770 103716847685048716973 -105006381068870463173 113166718268343560861 -108894779805940659869 105076678694475690385 -116762461061414014956 112844561713780016118 -103207773865797007066 113247423264358423892 -117377434815709898403 100269980559891536109 -102048265612444661933 115478779964227301239 -113351703941294630458 101057616370673656059 -105705665708025552983 111310990991240556038 -115064258994656104138 100535338638690515335 -115739148151601573808 112844561713780016118 -109504122343901736603 102705549361550492663 -109009089551467495747 105006381068870463173 -111091089527727420853 111310990991240556038 -106623900962110772648 103153499873703329897 -117157132370347986579 111285782175840598932 -113801236315350503728 115739378269261680935 -110731951130561423918 106096957694385885466 -115047896996200277508 100939735623367202041 -103016521073558596116 115047896996200277508 -111171416539633276676 102512310412972518336 -103660543175586203250 109895887909967698705 -116621986644249676039 113210431006401244170 -100871232248276491534 116773104421165750126 -109809835379677001002 115622466243011136115 -108000051912603578599 113475277239647026452 -104364058018116761460 115478779964227301239 -111310990991240556038 104560124403688998123 -108574688020691152748 109174551750397653742 -109581870574956225297 114758749740576519343 -115739378269261680935 107006059340452534782 -107753428759636856492 100535338638690515335 -103016521073558596116 113920721823301219308 -113612142759476883204 113351703941294630458 -112364132652438722780 114758749740576519343 -117477042502591652021 104191514233385365427 -108000051912603578599 102545157386069758709 -116548025566090395827 109182513536739786206 -113920721823301219308 111285782175840598932 -115360979797396777969 104987932455782713675 -117377434815709898403 113612142759476883204 -103691312271671214670 105076678694475690385 -116762461061414014956 106224435901697064976 -117550971892000156946 102048265612444661933 -117691391504351341685 109074857816744029470 -104612091113514802664 105901259206530390933 -111666959095947698908 101261243957067319422 -108894779805940659869 106189723444098348646 -117477042502591652021 113351703941294630458 -116762461061414014956 100269980559891536109 -115739148151601573808 112820512550939559523 -110728349411116483031 104066486855641683676 -110448924610029803960 107519026002586025827 -103016521073558596116 112276589013569458330 -101057616370673656059 117157132370347986579 -108255750659110762991 109778238062128383421 -100397511207083609950 105662484616118909569 -117477042502591652021 105863188856924083857 -101832196121408756348 105006381068870463173 -117921656724816772352 115920538018564742940 -114918561167106576639 101057616370673656059 -116762461061414014956 115739378269261680935 -117377434815709898403 107234826207633309420 -115527632958457358109 107133948555394893679 -111171416539633276676 109813896768294978296 -101057616370673656059 113210431006401244170 -108574688020691152748 114790574178411061829 -101057616370673656059 113475277239647026452 -109778238062128383421 109412257237874861202 -114549564725160709822 113612142759476883204 -108817085747440374986 110286587261352351537 -108314259245584185142 114918561167106576639 -105901259206530390933 113247423264358423892 -118418436905562612953 107519026002586025827 -101261243957067319422 113166718268343560861 -114991987213662121376 114461903539732780109 -103020619410065980303 109247306373593947755 -103691312271671214670 105863188856924083857 -116768967108862685383 107968787521028284191 -104450760987525660219 111422286077941361166 -113116318008017777871 106312895983244085949 -106122462724662012890 104560124403688998123 -109182513536739786206 109412257237874861202 -103493459351957813291 111091089527727420853 -105901259206530390933 116388668762198604003 -118357356982727825178 115863474911002159675 -115064258994656104138 105076678694475690385 -116374117927631468606 117421021456205115327 -111091089527727420853 101849747879612982297 -108000051912603578599 103660543175586203250 -103171849011748425097 101261243957067319422 -103207773865797007066 102216887206636463918 -100397511207083609950 101261243957067319422 -115706830138905259568 111310990991240556038 -107006059340452534782 106189723444098348646 -107519026002586025827 108434394145774737013 -100269980559891536109 103100496883422151101 -111538009015644508967 105006381068870463173 -117550971892000156946 111285782175840598932 -114244914082871792125 109581870574956225297 -116374117927631468606 109339805471557551388 -113612142759476883204 115739378269261680935 -118357356982727825178 109412257237874861202 -112878918236054024365 112852253337028739987 -117691391504351341685 117377434815709898403 -108255750659110762991 106665185918564754695 -112276589013569458330 105634350975670602787 -111091089527727420853 107090629815001792243 -116374117927631468606 103012564142649561853 -104612091113514802664 110649214929620497857 -102512310412972518336 114790574178411061829 -116207701819773193333 103112588675637065591 -104870518715355770532 103493459351957813291 -107006059340452534782 112364132652438722780 -117683744929337064105 104450760987525660219 -113475277239647026452 108255750659110762991 -107755092517418534815 115341960624782381062 -115565811010545226083 115478779964227301239 -107196172964000631645 112820512550939559523 -101246601531247561585 108894779805940659869 -103207773865797007066 107753428759636856492 -111091089527727420853 116388668762198604003 -115963821022986200770 117691391504351341685 -106224435901697064976 118207880179234484610 -117377434815709898403 101569655404865588155 -102034052532213921839 103171849011748425097 -112276589013569458330 105400903062771750089 -104364058018116761460 105822688186016123722 -100535338638690515335 108832773152747423283 -106695181236161584825 100415723513846680553 -115622466243011136115 111091089527727420853 -103171849011748425097 110318982509514011806 -104364058018116761460 103112588675637065591 -106925005603331131101 108434394145774737013 -109581870574956225297 114790574178411061829 -108952536790629690817 113117251731252114390 -100397511207083609950 116374117927631468606 -115739378269261680935 106837636108890930395 -101225750534150134109 115565811010545226083 -116388668762198604003 110468193592032465149 -100871232248276491534 110728349411116483031 -101261243957067319422 111666959095947698908 -115527632958457358109 102484577222269062816 -117421021456205115327 101261243957067319422 -104612091113514802664 109895887909967698705 -116107530889292552664 102403331307606219198 -116207701819773193333 100173452066172931939 -103100496883422151101 109581870574956225297 -109009089551467495747 109247306373593947755 -114758749740576519343 103171849011748425097 -104987932455782713675 111091089527727420853 -112944532473909341307 103100496883422151101 -110774757382682582490 117421021456205115327 -107753428759636856492 109174551750397653742 -106695181236161584825 110649214929620497857 -106224435901697064976 114079920283986872783 -116762461061414014956 113920721823301219308 -107896527414017792767 112276589013569458330 -108817085747440374986 109412257237874861202 -104612091113514802664 114244914082871792125 -111091089527727420853 117421021456205115327 -115109077044202722504 103100496883422151101 -100353346783543697435 110318982509514011806 -116773104421165750126 106026445270708973611 -112944532473909341307 108000051912603578599 -102512310412972518336 106189723444098348646 -117377434815709898403 116388668762198604003 -102034052532213921839 118207880179234484610 -116107530889292552664 105632941129656401917 -104450760987525660219 109504122343901736603 -108832773152747423283 100397511207083609950 -117691391504351341685 108817085747440374986 -114918561167106576639 113166718268343560861 -102034052532213921839 118320665823821681206 -109581870574956225297 113612142759476883204 -115360979797396777969 115047896996200277508 -112016425853417877466 117550971892000156946 -107519026002586025827 114758749740576519343 -101057616370673656059 107006059340452534782 -109174551750397653742 105705665708025552983 -101261243957067319422 106812355611465528242 -113612142759476883204 105634350975670602787 -118086737936443306746 106925005603331131101 -109170680659355634945 111666959095947698908 -109581870574956225297 115360979797396777969 -107519026002586025827 107992936493665613654 -113166718268343560861 100537991844787325512 -102088173699409175139 110367546804237452889 -105076678694475690385 109519167630731639094 -115302451851587317396 114821161730370452301 -108894779805940659869 100397143564111754723 -105006381068870463173 106096957694385885466 -113116318008017777871 114979733565079457374 -106837636108890930395 105030465637303791249 -118357356982727825178 102178700954286324866 -115478779964227301239 101225750534150134109 -117691391504351341685 114979733565079457374 -103207773865797007066 117691391504351341685 -108817085747440374986 103475991020114516832 -116207701819773193333 103012564142649561853 -112364132652438722780 112339769006469685593 -100871232248276491534 115341960624782381062 -102512310412972518336 116374117927631468606 -107033731246200681024 113920721823301219308 -110318982509514011806 103716847685048716973 -100353346783543697435 114821161730370452301 -105076678694475690385 118207880179234484610 -116773104421165750126 115109077044202722504 -113612142759476883204 113166718268343560861 -112276589013569458330 109581870574956225297 -115109077044202722504 106812355611465528242 -104870518715355770532 118418436905562612953 -100397511207083609950 112016425853417877466 -111422286077941361166 109931095616224405271 -107033731246200681024 109778238062128383421 -113166718268343560861 101849747879612982297 -114079920283986872783 111091089527727420853 -108952536790629690817 108082478497335384404 -113801236315350503728 100262595546646927505 -100535338638690515335 109412257237874861202 -115706830138905259568 108434394145774737013 -105901259206530390933 100262595546646927505 -115478779964227301239 103660543175586203250 -115739148151601573808 117550971892000156946 -109809835379677001002 104870518715355770532 -111091089527727420853 115863474911002159675 -109809835379677001002 103100496883422151101 -107699711897781234810 113801236315350503728 -105076678694475690385 101185406398932804414 -109504122343901736603 100397143564111754723 -109778238062128383421 109247306373593947755 -117012574629989558450 107308976571078250231 -108832773152747423283 104612091113514802664 -114244914082871792125 100084737546039360199 -102403331307606219198 109339805471557551388 -103493459351957813291 113116318008017777871 -103100496883422151101 105400903062771750089 -107519026002586025827 107968787521028284191 -111666959095947698908 109412257237874861202 -110318982509514011806 109412257237874861202 -106812355611465528242 107793717361981126032 -113047102292798770205 100535338638690515335 -112364132652438722780 101720949843787442951 -100397511207083609950 111310990991240556038 -117421021456205115327 105376842241046675559 -111091089527727420853 101720949843787442951 -109581870574956225297 109778238062128383421 -115047896996200277508 104364058018116761460 -115739148151601573808 112878918236054024365 -104450760987525660219 111538009015644508967 -102545157386069758709 105634350975670602787 -100269980559891536109 100535338638690515335 -110318982509514011806 112063946124358686266 -117921656724816772352 114856222286197208502 -112016425853417877466 103325969492772452485 -117421021456205115327 109895887909967698705 -117691391504351341685 103660543175586203250 -109304903996729396661 111666959095947698908 -104612091113514802664 103325969492772452485 -105076678694475690385 112276589013569458330 -113166718268343560861 113801236315350503728 -113475277239647026452 110318982509514011806 -106026445270708973611 100269980559891536109 -106312895983244085949 103100496883422151101 -113166718268343560861 118320665823821681206 -107896527414017792767 116374117927631468606 -102034052532213921839 107033731246200681024 -103207773865797007066 111666959095947698908 -112944532473909341307 109778238062128383421 -111310990991240556038 103012564142649561853 -107006059340452534782 100537991844787325512 -113166718268343560861 105662484616118909569 -114918561167106576639 101629211371073711149 -104191514233385365427 101261243957067319422 -103016521073558596116 101057616370673656059 -101057616370673656059 106189723444098348646 -117477042502591652021 104612091113514802664 -115360979797396777969 102216887206636463918 -106026445270708973611 107090629815001792243 -104364058018116761460 102048265612444661933 -101092351652012588236 109388259228280605303 -112820512550939559523 108082478497335384404 -111171416539633276676 108176814619778619437 -113166718268343560861 109895887909967698705 -100093902492789669774 117995161934475952507 -115341960624782381062 100173452066172931939 -103325969492772452485 111538009015644508967 -107896527414017792767 115360979797396777969 -103100496883422151101 117421021456205115327 -111091089527727420853 114979733565079457374 -103171849011748425097 109074857816744029470 -103016521073558596116 111538009015644508967 -112364132652438722780 114790574178411061829 -115360979797396777969 111285782175840598932 -111171416539633276676 107308976571078250231 -115739148151601573808 104191514233385365427 -114790574178411061829 103325969492772452485 -115478779964227301239 115706830138905259568 -118357356982727825178 110318982509514011806 -103207773865797007066 110286587261352351537 -117377434815709898403 101213524574984631953 -112364132652438722780 107106500560002041088 -115739378269261680935 113047102292798770205 -110731951130561423918 113117251731252114390 -115622466243011136115 101094440579835956866 -101057616370673656059 114791921155677330282 -115527632958457358109 106665185918564754695 -107896527414017792767 118207880179234484610 -115739378269261680935 111806715084467662398 -115565811010545226083 109412257237874861202 -109182513536739786206 113210431006401244170 -110774757382682582490 101057616370673656059 -106224435901697064976 103100496883422151101 -102545157386069758709 113116318008017777871 -115739148151601573808 111538009015644508967 -114549564725160709822 101261243957067319422 -115064258994656104138 103660543175586203250 -118086737936443306746 111654284395316165338 -114758749740576519343 106189723444098348646 -110318982509514011806 100262595546646927505 -112339769006469685593 104612091113514802664 -101094440579835956866 105076678694475690385 -116773104421165750126 115047896996200277508 -114244914082871792125 100397511207083609950 -111538009015644508967 106312895983244085949 -113166718268343560861 113247423264358423892 -107896527414017792767 114790574178411061829 -102654570556058167176 111091089527727420853 -113612142759476883204 102088173699409175139 -116762461061414014956 104560124403688998123 -106695181236161584825 107587075873786034394 -112364132652438722780 117377434815709898403 -113166718268343560861 107781761552417614958 -102654570556058167176 115017401467423642930 -113920721823301219308 101057616370673656059 -109009089551467495747 101704103161442695877 -109170680659355634945 103020619410065980303 -111310990991240556038 103716847685048716973 -103207773865797007066 116723923766489326849 -116768967108862685383 115739378269261680935 -105076678694475690385 117477042502591652021 -100353346783543697435 104987932455782713675 -108817085747440374986 118207880179234484610 -112878918236054024365 107097980510051172895 -106665185918564754695 102034052532213921839 -104612091113514802664 106189723444098348646 -100269980559891536109 103012564142649561853 -106312895983244085949 114790574178411061829 -103100496883422151101 114079920283986872783 -108894779805940659869 114979733565079457374 -102216887206636463918 106189723444098348646 -117921656724816772352 110286587261352351537 -100397143564111754723 105662484616118909569 -111091089527727420853 117693415411676715849 -107587075873786034394 118357356982727825178 -115622466243011136115 109174551750397653742 -101720949843787442951 105400903062771750089 -113116318008017777871 109813896768294978296 -101261243957067319422 109247306373593947755 -107133948555394893679 101849747879612982297 -112339769006469685593 118357356982727825178 -113475277239647026452 112063946124358686266 -107896527414017792767 106189723444098348646 -112276589013569458330 108574688020691152748 -112276589013569458330 112364132652438722780 -101720949843787442951 107968787521028284191 -115622466243011136115 110318982509514011806 -102216887206636463918 112364132652438722780 -100269980559891536109 115478779964227301239 -104987932455782713675 115478779964227301239 -107133948555394893679 106695181236161584825 -112016425853417877466 114821161730370452301 -112364132652438722780 107090629815001792243 -115920538018564742940 110731951130561423918 -111806715084467662398 104412682128547752131 -115341960624782381062 116927391465690022495 -107587075873786034394 118264184129842070900 -112364132652438722780 102048265612444661933 -109581870574956225297 116762461061414014956 -110318982509514011806 105634350975670602787 -113920721823301219308 108082478497335384404 -103207773865797007066 103691312271671214670 -101057616370673656059 116107530889292552664 -109778238062128383421 114790574178411061829 -117377434815709898403 102216887206636463918 -108082478497335384404 109809835379677001002 -115478779964227301239 101094440579835956866 -101481313915867030905 114991987213662121376 -100397511207083609950 109809835379677001002 -100397511207083609950 118207880179234484610 -115739148151601573808 108574688020691152748 -113166718268343560861 117691391504351341685 -105076678694475690385 117421021456205115327 -108255750659110762991 115064258994656104138 -104383523254857614001 110728349411116483031 -116388668762198604003 111091089527727420853 -112364132652438722780 115341960624782381062 -103171849011748425097 101569655404865588155 -117377434815709898403 111091089527727420853 -113920721823301219308 118357356982727825178 -101261243957067319422 108574688020691152748 -103171849011748425097 101225750534150134109 -106665185918564754695 107753428759636856492 -106122462724662012890 105076678694475690385 -106122462724662012890 103112588675637065591 -113920721823301219308 107033731246200681024 -111666959095947698908 115739378269261680935 -117377434815709898403 114632854492678778509 -108255750659110762991 106345802537137414958 -112276589013569458330 105376842241046675559 -102512310412972518336 102088173699409175139 -105705665708025552983 103012564142649561853 -107519026002586025827 118320665823821681206 -104612091113514802664 109412257237874861202 -107033731246200681024 109074857816744029470 -115064258994656104138 104560124403688998123 -105076678694475690385 118264184129842070900 -111091089527727420853 109074857816744029470 -108817085747440374986 102403331307606219198 -115963821022986200770 111310990991240556038 -114918561167106576639 107308976571078250231 -101094440579835956866 115622466243011136115 -102216887206636463918 113117251731252114390 -115109077044202722504 116762461061414014956 -109581870574956225297 117421021456205115327 -116374117927631468606 101629211371073711149 -112276589013569458330 114632854492678778509 -115341960624782381062 106100296973968329853 -100093902492789669774 109170680659355634945 -110318982509514011806 100397143564111754723 -113116318008017777871 109412257237874861202 -112016425853417877466 101213524574984631953 -115064258994656104138 114461903539732780109 -105901259206530390933 101261243957067319422 -109174551750397653742 111091089527727420853 -105207943512906810696 111707854651652464890 -108082478497335384404 110318982509514011806 -113801236315350503728 107519026002586025827 -100173452066172931939 115706830138905259568 -111261496925076985134 107308976571078250231 -115883560681104199404 109170680659355634945 -115706830138905259568 112944532473909341307 -116374117927631468606 106100296973968329853 -115739378269261680935 113117251731252114390 -108082478497335384404 100397511207083609950 -109809835379677001002 105076678694475690385 -112364132652438722780 111285782175840598932 -115302451851587317396 115622466243011136115 -108000051912603578599 106925005603331131101 -115963821022986200770 108574688020691152748 -115341960624782381062 110209787594312878744 -101600577333348274552 104612091113514802664 -111091089527727420853 106312895983244085949 -111091089527727420853 100871232248276491534 -103207773865797007066 100535338638690515335 -106665185918564754695 115064258994656104138 -112339769006469685593 117377434815709898403 -109196389259504239326 100173452066172931939 -105076678694475690385 113351703941294630458 -109504122343901736603 103112588675637065591 -101057616370673656059 106312895983244085949 -102034052532213921839 101569655404865588155 -106665185918564754695 112944532473909341307 -111975545018506506119 113612142759476883204 -102512310412972518336 115047896996200277508 -101092351652012588236 108817085747440374986 -115963821022986200770 102034052532213921839 -106224435901697064976 115360979797396777969 -117377434815709898403 108832773152747423283 -118086737936443306746 100019606796298306813 -118245559326500322262 109931095616224405271 -118156281382429939997 101246601531247561585 -105863188856924083857 117477042502591652021 -105006381068870463173 100523784851251213675 -110728349411116483031 108899222163640713555 -115047896996200277508 113068441549452664746 -117683744929337064105 103012564142649561853 -101225750534150134109 108255750659110762991 -104364058018116761460 114791921155677330282 -109778238062128383421 110318982509514011806 -100397511207083609950 107968787521028284191 -117477042502591652021 114991987213662121376 -106122462724662012890 115863474911002159675 -112016425853417877466 110286587261352351537 -113166718268343560861 105400369085832308485 -101092351652012588236 103475991020114516832 -112364132652438722780 111091089527727420853 -111666959095947698908 113612142759476883204 -108082478497335384404 109895887909967698705 -115360979797396777969 107896527414017792767 -115064258994656104138 106665185918564754695 -107896527414017792767 112852253337028739987 -109304903996729396661 102048265612444661933 -116621986644249676039 102178700954286324866 -113166718268343560861 107968787521028284191 -110774757382682582490 112276589013569458330 -115064258994656104138 101213524574984631953 -115392876317176762477 106096957694385885466 -111337216646096594888 101704103161442695877 -108894779805940659869 116762461061414014956 -115109077044202722504 107033731246200681024 -111091089527727420853 106345802537137414958 -102034052532213921839 100269980559891536109 -114152150496380806218 111601729473858041964 -105822688186016123722 107781761552417614958 -111975545018506506119 113210431006401244170 -108000051912603578599 109170680659355634945 -109247306373593947755 102654570556058167176 -115109077044202722504 113247423264358423892 -102034052532213921839 118086737936443306746 -111666959095947698908 115017401467423642930 -104612091113514802664 111422286077941361166 -105822688186016123722 103171849011748425097 -108894779805940659869 101832196121408756348 -113116318008017777871 107117418142368704725 -105076678694475690385 115360979797396777969 -100269980559891536109 116388668762198604003 -103207773865797007066 117477042502591652021 -116762461061414014956 116388668762198604003 -105006381068870463173 108082478497335384404 -100084737546039360199 114079920283986872783 -111091089527727420853 104383523254857614001 -113166718268343560861 109074857816744029470 -111091089527727420853 113210431006401244170 -106623900962110772648 115047896996200277508 -103207773865797007066 111337216646096594888 -108817085747440374986 106189723444098348646 -114244914082871792125 114918561167106576639 -101094440579835956866 113920721823301219308 -115302451851587317396 103012564142649561853 -118357356982727825178 105705665708025552983 -108817085747440374986 117550971892000156946 -108899222163640713555 116773104421165750126 -109809835379677001002 114079920283986872783 -117377434815709898403 113117251731252114390 -100397511207083609950 107781761552417614958 -108817085747440374986 115739378269261680935 -107753428759636856492 101094440579835956866 -111975545018506506119 116768967108862685383 -117550971892000156946 100262595546646927505 -104364058018116761460 104226321884965863264 -103207773865797007066 105901259206530390933 -118245559326500322262 110318982509514011806 -111975545018506506119 113116318008017777871 -112364132652438722780 109182513536739786206 -117421021456205115327 115064258994656104138 -114152150496380806218 100173452066172931939 -107587075873786034394 107519026002586025827 -115739148151601573808 111285782175840598932 -115963821022986200770 108176814619778619437 -101126226710566561379 110731951130561423918 -103171849011748425097 117377434815709898403 -112339769006469685593 100269980559891536109 -117550971892000156946 115047896996200277508 -108899222163640713555 104870518715355770532 -118086737936443306746 101629211371073711149 -111091089527727420853 102034052532213921839 -115565811010545226083 109813896768294978296 -103016521073558596116 112820512550939559523 -109196389259504239326 107090629815001792243 -115739378269261680935 101057616370673656059 -101057616370673656059 118207880179234484610 -104364058018116761460 106312895983244085949 -112339769006469685593 106189723444098348646 -104364058018116761460 102034052532213921839 -118245559326500322262 101849747879612982297 -100093902492789669774 109388259228280605303 -112364132652438722780 115047896996200277508 -105076678694475690385 103691312271671214670 -108243648069327964538 101569655404865588155 -105705665708025552983 115622466243011136115 -104612091113514802664 104364058018116761460 -115706830138905259568 109247306373593947755 -109581870574956225297 101629211371073711149 -100093902492789669774 113166718268343560861 -110774757382682582490 114244914082871792125 -109247306373593947755 118156281382429939997 -100871232248276491534 100856165335040300712 -108082478497335384404 111091089527727420853 -115963821022986200770 107896527414017792767 -105901259206530390933 116927391465690022495 -101261243957067319422 117550971892000156946 -115963821022986200770 118245559326500322262 -100939735623367202041 108574688020691152748 -112944532473909341307 117691391504351341685 -115017401467423642930 109780617142585395916 -103691312271671214670 107308976571078250231 -109182513536739786206 117377434815709898403 -114758749740576519343 114790574178411061829 -102216887206636463918 102088173699409175139 -102034052532213921839 109174551750397653742 -108082478497335384404 102034052532213921839 -112276589013569458330 112063946124358686266 -112016425853417877466 113722523501415106689 -109581870574956225297 108817085747440374986 -115963821022986200770 114790574178411061829 -118357356982727825178 100535338638690515335 -100084737546039360199 109074857816744029470 -103016521073558596116 112844561713780016118 -104450760987525660219 112944532473909341307 -109388259228280605303 108817085747440374986 -100397511207083609950 116621986644249676039 -115064258994656104138 105400903062771750089 -106026445270708973611 106812355611465528242 -115739378269261680935 104191514233385365427 -107303107611470093265 102010610384685218706 -100353346783543697435 116548025566090395827 -102512310412972518336 106837636108890930395 -100084737546039360199 115963821022986200770 -118418436905562612953 118264184129842070900 -107896527414017792767 117691391504351341685 -105076678694475690385 104191514233385365427 -116768967108862685383 108952536790629690817 -100535338638690515335 111601729473858041964 -114918561167106576639 102048265612444661933 -103493459351957813291 101704103161442695877 -111091089527727420853 112878918236054024365 -114244914082871792125 100535338638690515335 -103691312271671214670 107699711897781234810 -105822688186016123722 107097980510051172895 -115706830138905259568 102048265612444661933 -102545157386069758709 103716847685048716973 -118245559326500322262 104618664838382110366 -107519026002586025827 105076678694475690385 -103325969492772452485 109247306373593947755 -118017787526225833770 107308976571078250231 -104364058018116761460 109412257237874861202 -115047896996200277508 101225750534150134109 -115739378269261680935 103716847685048716973 -110318982509514011806 106312895983244085949 -113612142759476883204 115863474911002159675 -113166718268343560861 106837636108890930395 -104450760987525660219 106224435901697064976 -105705665708025552983 101261243957067319422 -106665185918564754695 118207880179234484610 -100535338638690515335 111310990991240556038 -104450760987525660219 101481313915867030905 -109304903996729396661 103112588675637065591 -117012574629989558450 110731951130561423918 -109304903996729396661 104612091113514802664 -108314259245584185142 106388983874370865380 -111975545018506506119 109388259228280605303 -103660543175586203250 105400903062771750089 -115739148151601573808 112276589013569458330 -107896527414017792767 101094440579835956866 -102545157386069758709 104191514233385365427 -116192724891839469024 102088173699409175139 -100397511207083609950 108082478497335384404 -115565811010545226083 107968787521028284191 -100257676670422660178 110014891370822989957 -107587075873786034394 108000051912603578599 -115047896996200277508 100353346783543697435 -115739378269261680935 113801236315350503728 -106026445270708973611 107793717361981126032 -116107530889292552664 109170680659355634945 -103171849011748425097 109412257237874861202 -108314259245584185142 118320665823821681206 -101849747879612982297 109412257237874861202 -109780617142585395916 116621986644249676039 -109581870574956225297 113166718268343560861 -108594511384403031361 112820512550939559523 -117921656724816772352 110728349411116483031 -116374117927631468606 109895887909967698705 -105705665708025552983 103112588675637065591 -100535338638690515335 105901259206530390933 -101261243957067319422 116762461061414014956 -117691391504351341685 100523784851251213675 -117691391504351341685 111285782175840598932 -113612142759476883204 111538009015644508967 -100397511207083609950 107033731246200681024 -109304903996729396661 116388668762198604003 -115739378269261680935 117012574629989558450 -112364132652438722780 113801236315350503728 -118245559326500322262 107308976571078250231 -105207943512906810696 113210431006401244170 -106096957694385885466 111996414642516891950 -103171849011748425097 103112588675637065591 -114244914082871792125 114979733565079457374 -115622466243011136115 113116318008017777871 -112276589013569458330 106224435901697064976 -103207773865797007066 104383523254857614001 -101849747879612982297 111091089527727420853 -103207773865797007066 109074857816744029470 -106312895983244085949 115963821022986200770 -111654284395316165338 100397511207083609950 -104870518715355770532 111538009015644508967 -118086737936443306746 104364058018116761460 -116374117927631468606 113247423264358423892 -106812355611465528242 103716847685048716973 -112016425853417877466 100535338638690515335 -107519026002586025827 101213524574984631953 -115017401467423642930 113612142759476883204 -117691391504351341685 107519026002586025827 -104612091113514802664 113920721823301219308 -115064258994656104138 110649214929620497857 -103207773865797007066 115017401467423642930 -111091089527727420853 118086737936443306746 -106665185918564754695 103716847685048716973 -108314259245584185142 103475991020114516832 -111337216646096594888 109170680659355634945 -112364132652438722780 104191514233385365427 -100269980559891536109 111091089527727420853 -108817085747440374986 109813896768294978296 -100397511207083609950 115017401467423642930 -102048265612444661933 103012564142649561853 -109780617142585395916 105863188856924083857 -106312895983244085949 113116318008017777871 -103207773865797007066 101704103161442695877 -113166718268343560861 107117483540235115863 -109196389259504239326 100537991844787325512 -102034052532213921839 109182513536739786206 -113164038788726940319 111538009015644508967 -103100496883422151101 106189723444098348646 -104612091113514802664 115706830138905259568 -100535338638690515335 117693415411676715849 -112944532473909341307 118357356982727825178 -101057616370673656059 105076678694475690385 -103207773865797007066 110650241045258158224 -106026445270708973611 113116318008017777871 -101600577333348274552 108817085747440374986 -103171849011748425097 109182513536739786206 -113722523501415106689 106812355611465528242 -109170680659355634945 103493459351957813291 -115565811010545226083 105822688186016123722 -115302451851587317396 103171849011748425097 -100093902492789669774 107753428759636856492 -112339769006469685593 115863474911002159675 -111091089527727420853 114461903539732780109 -107896527414017792767 107781761552417614958 -115963821022986200770 112063946124358686266 -109247306373593947755 114079920283986872783 -111538009015644508967 116107530889292552664 -109778238062128383421 103012564142649561853 -100269980559891536109 104612091113514802664 -103207773865797007066 113612142759476883204 -105076678694475690385 109581870574956225297 -103171849011748425097 107117483540235115863 -115963821022986200770 112820512550939559523 -104383523254857614001 104870518715355770532 -113047102292798770205 109895887909967698705 -113920721823301219308 106312895983244085949 -108000051912603578599 107992936493665613654 -106224435901697064976 102048265612444661933 -115739378269261680935 102654570556058167176 -106026445270708973611 103171849011748425097 -109182513536739786206 113116318008017777871 -101213524574984631953 103171849011748425097 -100397511207083609950 113117251731252114390 -113612142759476883204 101832196121408756348 -100397511207083609950 111285782175840598932 -104612091113514802664 104618664838382110366 -102512310412972518336 115622466243011136115 -101720949843787442951 103475991020114516832 -111666959095947698908 111091089527727420853 -109196389259504239326 115017401467423642930 -108082478497335384404 103171849011748425097 -113164038788726940319 117550971892000156946 -111538009015644508967 113164038788726940319 -109504122343901736603 107753428759636856492 -107753428759636856492 108574688020691152748 -109335713877994755095 101261243957067319422 -109304903996729396661 104987932455782713675 -109581870574956225297 107587075873786034394 -105705665708025552983 107234826207633309420 -100535338638690515335 116491285067171323298 -104450760987525660219 118086737936443306746 -116374117927631468606 118245559326500322262 -106312895983244085949 109581870574956225297 -107006059340452534782 112276589013569458330 -105822688186016123722 102403331307606219198 -100269980559891536109 109412257237874861202 -115478779964227301239 103716847685048716973 -105901259206530390933 104450760987525660219 -111261496925076985134 106100296973968329853 -103171849011748425097 109809835379677001002 -117477042502591652021 100537991844787325512 -115478779964227301239 105400903062771750089 -104870518715355770532 103100496883422151101 -100397511207083609950 100537991844787325512 -117691391504351341685 118207880179234484610 -115963821022986200770 103112588675637065591 -107196172964000631645 103716847685048716973 -103016521073558596116 114790574178411061829 -100269980559891536109 102178700954286324866 -115478779964227301239 107234826207633309420 -114244914082871792125 111666959095947698908 -113612142759476883204 111975545018506506119 -107793717361981126032 103207773865797007066 -113047102292798770205 104612091113514802664 -112364132652438722780 100397511207083609950 -104618664838382110366 117550971892000156946 -115360979797396777969 110209787594312878744 -117377434815709898403 106100296973968329853 -108817085747440374986 111337216646096594888 -100535338638690515335 113801236315350503728 -111422286077941361166 109519167630731639094 -102034052532213921839 105076678694475690385 -100084737546039360199 113612142759476883204 -112944532473909341307 109504122343901736603 -105901259206530390933 109388259228280605303 -111091089527727420853 117550971892000156946 -117691391504351341685 103012564142649561853 -103975368181760158212 109388259228280605303 -109170680659355634945 108000051912603578599 -114790574178411061829 118357356982727825178 -103207773865797007066 116621986644249676039 -101261243957067319422 116768967108862685383 -113116318008017777871 101569655404865588155 -106122462724662012890 110727249496967897430 -115963821022986200770 106312895983244085949 -114549564725160709822 102088173699409175139 -113166718268343560861 116107530889292552664 -106345802537137414958 114991987213662121376 -104364058018116761460 117421021456205115327 -113166718268343560861 112844561713780016118 -115739378269261680935 100871232248276491534 -107781761552417614958 113166718268343560861 -106695181236161584825 103475991020114516832 -117421021456205115327 104364058018116761460 -101213524574984631953 105634350975670602787 -108314259245584185142 113801236315350503728 -109931095616224405271 103475991020114516832 -106026445270708973611 115341960624782381062 -106388983874370865380 110286587261352351537 -114758749740576519343 107781761552417614958 -102545157386069758709 102048265612444661933 -106695181236161584825 115622466243011136115 -117377434815709898403 115565811010545226083 -101261243957067319422 113612142759476883204 -101569655404865588155 115478779964227301239 -102034052532213921839 107781761552417614958 -101261243957067319422 115302451851587317396 -109504122343901736603 113351703941294630458 -111538009015644508967 102654570556058167176 -113612142759476883204 100535338638690515335 -102034052532213921839 116762461061414014956 -100084737546039360199 109182513536739786206 -118086737936443306746 109809835379677001002 -103207773865797007066 101261243957067319422 -104987932455782713675 109182513536739786206 -100093902492789669774 107234826207633309420 -100415723513846680553 109778238062128383421 -113801236315350503728 116773104421165750126 -100397511207083609950 107896527414017792767 -100397511207083609950 115963821022986200770 -108817085747440374986 115622466243011136115 -115565811010545226083 113612142759476883204 -116374117927631468606 106665185918564754695 -109581870574956225297 106925005603331131101 -112364132652438722780 100523784851251213675 -101849747879612982297 113117251731252114390 -113801236315350503728 110286587261352351537 -112276589013569458330 103475991020114516832 -101261243957067319422 101057616370673656059 -109174551750397653742 102034052532213921839 -117377434815709898403 109813896768294978296 -111666959095947698908 111538009015644508967 -109335713877994755095 111538009015644508967 -108832773152747423283 113920721823301219308 -115739378269261680935 106812355611465528242 -105076678694475690385 104612091113514802664 -117421021456205115327 111654284395316165338 -108817085747440374986 116374117927631468606 -105207943512906810696 116768967108862685383 -117377434815709898403 105400903062771750089 -116621986644249676039 108894779805940659869 -115739378269261680935 108176814619778619437 -115622466243011136115 109182513536739786206 -113351703941294630458 115478779964227301239 -115739378269261680935 109174551750397653742 -107753428759636856492 103012564142649561853 -109778238062128383421 103100496883422151101 -107781761552417614958 113351703941294630458 -100269980559891536109 118264184129842070900 -100535338638690515335 101213524574984631953 -100871232248276491534 105076678694475690385 -104450760987525660219 100535338638690515335 -115565811010545226083 101094440579835956866 -111422286077941361166 116374117927631468606 -106224435901697064976 109519167630731639094 -115064258994656104138 115565811010545226083 -112944532473909341307 108255750659110762991 -115360979797396777969 113117251731252114390 -100084737546039360199 107033731246200681024 -116491285067171323298 113210431006401244170 -101057616370673656059 103171849011748425097 -112276589013569458330 106695181236161584825 -100173452066172931939 114549564725160709822 -116621986644249676039 111538009015644508967 -103171849011748425097 104191514233385365427 -112820512550939559523 107033731246200681024 -111091089527727420853 115360979797396777969 -100397511207083609950 106665185918564754695 -107587075873786034394 101569655404865588155 -117421021456205115327 113920721823301219308 -100535338638690515335 105076678694475690385 -109174551750397653742 109813896768294978296 -101092351652012588236 115706830138905259568 -114758749740576519343 115478779964227301239 -112016425853417877466 107519026002586025827 -112944532473909341307 108574688020691152748 -109304903996729396661 117550971892000156946 -112364132652438722780 108574688020691152748 -103207773865797007066 115739148151601573808 -116773104421165750126 105076678694475690385 -101057616370673656059 104560124403688998123 -113351703941294630458 102048265612444661933 -108817085747440374986 118245559326500322262 -110728349411116483031 106096957694385885466 -107033731246200681024 107117483540235115863 -103171849011748425097 111654284395316165338 -112364132652438722780 100871232248276491534 -100269980559891536109 102034052532213921839 -112276589013569458330 116388668762198604003 -112016425853417877466 103012564142649561853 -107519026002586025827 104987932455782713675 -107006059340452534782 107753428759636856492 -104987932455782713675 107097980510051172895 -103325969492772452485 115963821022986200770 -101185406398932804414 103207773865797007066 -118086737936443306746 115047896996200277508 -103975368181760158212 101246601531247561585 -106312895983244085949 109174551750397653742 -116374117927631468606 113612142759476883204 -107753428759636856492 116762461061414014956 -102034052532213921839 113116318008017777871 -114918561167106576639 115478779964227301239 -105662484616118909569 109388259228280605303 -114832793541825307503 109603191376504998413 -101261243957067319422 106695181236161584825 -118245559326500322262 102178700954286324866 -109304903996729396661 113920721823301219308 -108082478497335384404 105076678694475690385 -115706830138905259568 114991987213662121376 -117691391504351341685 118320665823821681206 -104450760987525660219 100269980559891536109 -109247306373593947755 115047896996200277508 -116374117927631468606 108255750659110762991 -112276589013569458330 113117251731252114390 -115622466243011136115 117377434815709898403 -113351703941294630458 104450760987525660219 -115963821022986200770 114244914082871792125 -108082478497335384404 102048265612444661933 -106096957694385885466 101849747879612982297 -117377434815709898403 113210431006401244170 -105076678694475690385 113068441549452664746 -109931095616224405271 102403331307606219198 -116374117927631468606 101600577333348274552 -107303107611470093265 110318982509514011806 -117550971892000156946 110318982509514011806 -115739148151601573808 103012564142649561853 -110728349411116483031 108176814619778619437 -116374117927631468606 111654284395316165338 -100397511207083609950 113612142759476883204 -117477042502591652021 102654570556058167176 -109247306373593947755 101246601531247561585 -103100496883422151101 107117483540235115863 -105901259206530390933 118245559326500322262 -110318982509514011806 115863474911002159675 -116762461061414014956 103012564142649561853 -116388668762198604003 109412257237874861202 -111091089527727420853 116491285067171323298 -107896527414017792767 107117483540235115863 -109009089551467495747 105662484616118909569 -104870518715355770532 116192724891839469024 -111310990991240556038 101213524574984631953 -100856165335040300712 106026445270708973611 -100001826804813287036 115739378269261680935 -115963821022986200770 106189723444098348646 -113116318008017777871 112844561713780016118 -115739378269261680935 107753428759636856492 -103207773865797007066 108817085747440374986 -100269980559891536109 108082478497335384404 -113801236315350503728 114979733565079457374 -106665185918564754695 111310990991240556038 -115963821022986200770 115739148151601573808 -106026445270708973611 118264184129842070900 -112944532473909341307 114079920283986872783 -108817085747440374986 108434394145774737013 -101261243957067319422 113117251731252114390 -107006059340452534782 113166718268343560861 -107519026002586025827 113247423264358423892 -107133948555394893679 107519026002586025827 -100093902492789669774 111538009015644508967 -105705665708025552983 109174551750397653742 -104450760987525660219 105030465637303791249 -118357356982727825178 114758749740576519343 -106665185918564754695 109174551750397653742 -113164038788726940319 113801236315350503728 -106096957694385885466 101629211371073711149 -116621986644249676039 115739378269261680935 -112820512550939559523 103325969492772452485 -100397511207083609950 113210431006401244170 -106026445270708973611 111310990991240556038 -111538009015644508967 102545157386069758709 -103016521073558596116 116548025566090395827 -114244914082871792125 117421021456205115327 -118156281382429939997 109780617142585395916 -101720949843787442951 111975545018506506119 -108832773152747423283 115565811010545226083 -106925005603331131101 102048265612444661933 -102216887206636463918 115017401467423642930 -101246601531247561585 101832771958125915909 -116374117927631468606 107753428759636856492 -112878918236054024365 107587075873786034394 -111975545018506506119 100537991844787325512 -101213524574984631953 118357356982727825178 -100397511207083609950 115302451851587317396 -107781761552417614958 115565811010545226083 -108952536790629690817 100093902492789669774 -104612091113514802664 107117483540235115863 -111261496925076985134 111538009015644508967 -107896527414017792767 103012564142649561853 -111091089527727420853 106122462724662012890 -111422286077941361166 102034052532213921839 -113166718268343560861 101094440579835956866 -106096957694385885466 104560124403688998123 -110774757382682582490 103171849011748425097 -103171849011748425097 112364132652438722780 -101261243957067319422 107133948555394893679 -110318982509514011806 103207773865797007066 -100535338638690515335 101057616370673656059 -116388668762198604003 106189723444098348646 -106122462724662012890 108082478497335384404 -111538009015644508967 106925005603331131101 -109809835379677001002 114790574178411061829 -108894779805940659869 113166718268343560861 -109778238062128383421 115565811010545226083 -115478779964227301239 108082478497335384404 -104618664838382110366 116374117927631468606 -108817085747440374986 101720949843787442951 -114244914082871792125 113247423264358423892 -118086737936443306746 105400903062771750089 -117550971892000156946 107753428759636856492 -118418436905562612953 112063946124358686266 -109196389259504239326 114549564725160709822 -107793717361981126032 116773104421165750126 -113351703941294630458 108243648069327964538 -107196172964000631645 101213524574984631953 -109581870574956225297 105400903062771750089 -111091089527727420853 117157132370347986579 -115478779964227301239 104560124403688998123 -114079920283986872783 101213524574984631953 -104612091113514802664 116926943858449614201 -101600577333348274552 116762461061414014956 -111422286077941361166 108817085747440374986 -107793717361981126032 114549564725160709822 -100397511207083609950 115622466243011136115 -102403331307606219198 107133948555394893679 -100397511207083609950 102216887206636463918 -101185406398932804414 115963821022986200770 -109170680659355634945 111538009015644508967 -114918561167106576639 113247423264358423892 -105662484616118909569 109170680659355634945 -115739378269261680935 105400369085832308485 -100535338638690515335 118207880179234484610 -109581870574956225297 109412257237874861202 -103207773865797007066 110727249496967897430 -115527632958457358109 111538009015644508967 -100397511207083609950 115565811010545226083 -114244914082871792125 107968787521028284191 -112016425853417877466 118418436905562612953 -116768967108862685383 104450760987525660219 -115963821022986200770 107519026002586025827 -103325969492772452485 103100496883422151101 -100535338638690515335 115963821022986200770 -115963821022986200770 114948739867290323960 -107303107611470093265 109412257237874861202 -103325969492772452485 107753428759636856492 -116762461061414014956 101092351652012588236 -109304903996729396661 118320665823821681206 -118086737936443306746 107781761552417614958 -104364058018116761460 101261243957067319422 -101057616370673656059 111091089527727420853 -115706830138905259568 116388668762198604003 -115064258994656104138 103171849011748425097 -115360979797396777969 109412257237874861202 -111091089527727420853 102545157386069758709 -101126226710566561379 103691312271671214670 -112944532473909341307 116762461061414014956 -104412682128547752131 111538009015644508967 -114918561167106576639 109182513536739786206 -109009089551467495747 118156281382429939997 -107519026002586025827 113164038788726940319 -115883560681104199404 106925005603331131101 -118245559326500322262 115565811010545226083 -109581870574956225297 117693415411676715849 -102088173699409175139 102654570556058167176 -109174551750397653742 107033731246200681024 -104450760987525660219 105076678694475690385 -111538009015644508967 113116318008017777871 -112276589013569458330 108176814619778619437 -105076678694475690385 117691391504351341685 -103016521073558596116 105207943512906810696 -116374117927631468606 101185406398932804414 -112820512550939559523 115963821022986200770 -116374117927631468606 107519026002586025827 -101261243957067319422 114632854492678778509 -103100496883422151101 105705665708025552983 -102216887206636463918 109412257237874861202 -109809835379677001002 112820512550939559523 -117421021456205115327 115565811010545226083 -115963821022986200770 104612091113514802664 -106695181236161584825 115739148151601573808 -104191514233385365427 113166718268343560861 -117691391504351341685 104987932455782713675 -110318982509514011806 103100496883422151101 -116762461061414014956 105634350975670602787 -116723923766489326849 110367546804237452889 -108082478497335384404 115047896996200277508 -110650241045258158224 106096957694385885466 -109174551750397653742 103012564142649561853 -110318982509514011806 112944532473909341307 -112339769006469685593 113166718268343560861 -107896527414017792767 111538009015644508967 -110731951130561423918 108894779805940659869 -102034052532213921839 103716847685048716973 -101213524574984631953 102178700954286324866 -107896527414017792767 100535338638690515335 -101261243957067319422 107033731246200681024 -109304903996729396661 107519026002586025827 -105901259206530390933 118320665823821681206 -108082478497335384404 113920721823301219308 -109304903996729396661 100535338638690515335 -117377434815709898403 115047896996200277508 -111422286077941361166 117550971892000156946 -106312895983244085949 104987932455782713675 -111538009015644508967 112063946124358686266 -113920721823301219308 101849747879612982297 -108899222163640713555 110728349411116483031 -100535338638690515335 105634350975670602787 -118245559326500322262 116374117927631468606 -108082478497335384404 112063946124358686266 -102654570556058167176 109388259228280605303 -102403331307606219198 107097980510051172895 -102545157386069758709 109009089551467495747 -108952536790629690817 109895887909967698705 -112364132652438722780 118320665823821681206 -101261243957067319422 109304903996729396661 -108817085747440374986 117477042502591652021 -110728349411116483031 101126226710566561379 -111654284395316165338 112063946124358686266 -101569655404865588155 106189723444098348646 -101849747879612982297 105076678694475690385 -117377434815709898403 103325969492772452485 -116207701819773193333 116388668762198604003 -110728349411116483031 115109077044202722504 -112016425853417877466 116374117927631468606 -104870518715355770532 115739378269261680935 -103207773865797007066 112339769006469685593 -117550971892000156946 104450760987525660219 -115739378269261680935 113247423264358423892 -113164038788726940319 117693415411676715849 -100093902492789669774 118156281382429939997 -101261243957067319422 106189723444098348646 -113920721823301219308 103171849011748425097 -106122462724662012890 115047896996200277508 -104191514233385365427 112878918236054024365 -109581870574956225297 113475277239647026452 -115302451851587317396 114751436351490918894 -101600577333348274552 109504122343901736603 -113116318008017777871 112063946124358686266 -115478779964227301239 112364132652438722780 -113166718268343560861 116621986644249676039 -103207773865797007066 106822154985570317672 -112016425853417877466 113117251731252114390 -108817085747440374986 111422286077941361166 -106026445270708973611 107196172964000631645 -116773104421165750126 110318982509514011806 -112364132652438722780 115739378269261680935 -116762461061414014956 101261243957067319422 -113612142759476883204 107033731246200681024 -109581870574956225297 114791921155677330282 -103207773865797007066 113166718268343560861 -111091089527727420853 107303107611470093265 -115360979797396777969 103716847685048716973 -114758749740576519343 108817085747440374986 -100871232248276491534 107117483540235115863 -112339769006469685593 104560124403688998123 -106096957694385885466 100093902492789669774 -118245559326500322262 108817085747440374986 -105006381068870463173 115739378269261680935 -101600577333348274552 102034052532213921839 -104412682128547752131 109388259228280605303 -117421021456205115327 115478779964227301239 -113164038788726940319 105822688186016123722 -118418436905562612953 113166718268343560861 -115706830138905259568 101213524574984631953 -114791921155677330282 114821161730370452301 -105901259206530390933 109412257237874861202 -114244914082871792125 107896527414017792767 -113351703941294630458 107033731246200681024 -116374117927631468606 117691391504351341685 -107303107611470093265 102048265612444661933 -101225750534150134109 103171849011748425097 -101057616370673656059 116388668762198604003 -106026445270708973611 113210431006401244170 -112339769006469685593 109809835379677001002 -116374117927631468606 111285782175840598932 -115109077044202722504 113612142759476883204 -100397511207083609950 106837636108890930395 -109196389259504239326 113284787225540728296 -109170680659355634945 104560124403688998123 -100397511207083609950 108255750659110762991 -107006059340452534782 105822688186016123722 -111091089527727420853 111171416539633276676 -110650241045258158224 115017401467423642930 -105901259206530390933 115047896996200277508 -108000051912603578599 109895887909967698705 -103016521073558596116 115565811010545226083 -100397511207083609950 109174551750397653742 -115739148151601573808 107133948555394893679 -108952536790629690817 101849747879612982297 -100397511207083609950 104450760987525660219 -116374117927631468606 103716847685048716973 -116374117927631468606 108771911258181286059 -113801236315350503728 107133948555394893679 -105207943512906810696 113801236315350503728 -109335713877994755095 116621986644249676039 -100535338638690515335 110286587261352351537 -115360979797396777969 107033731246200681024 -101057616370673656059 112063946124358686266 -113920721823301219308 117421021456205115327 -117421021456205115327 113210431006401244170 -115739148151601573808 110286587261352351537 -115478779964227301239 103171849011748425097 -104450760987525660219 100606519862794948506 -108817085747440374986 115963821022986200770 -100397511207083609950 112063946124358686266 -113920721823301219308 112364132652438722780 -113722523501415106689 116773104421165750126 -105006381068870463173 107117483540235115863 -100084737546039360199 114790574178411061829 -109304903996729396661 115064258994656104138 -102216887206636463918 110286587261352351537 -109174551750397653742 118207880179234484610 -112339769006469685593 113116318008017777871 -115622466243011136115 107519026002586025827 -101261243957067319422 116927391465690022495 -102545157386069758709 107117483540235115863 -117921656724816772352 106263529626268281828 -115302451851587317396 115527632958457358109 -104364058018116761460 105400903062771750089 -100269980559891536109 117691391504351341685 -118418436905562612953 105662484616118909569 -108817085747440374986 107234826207633309420 -117693415411676715849 115047896996200277508 -111091089527727420853 118418436905562612953 -117691391504351341685 108832773152747423283 -111091089527727420853 115565811010545226083 -109304903996729396661 103100496883422151101 -116548025566090395827 116762461061414014956 -111666959095947698908 117377434815709898403 -103207773865797007066 108899222163640713555 -104364058018116761460 109074857816744029470 -118245559326500322262 103660543175586203250 -104612091113514802664 110727249496967897430 -117421021456205115327 104450760987525660219 -113920721823301219308 101094440579835956866 -103016521073558596116 102034052532213921839 -103493459351957813291 104191514233385365427 -104191514233385365427 116762461061414014956 -100084737546039360199 114461903539732780109 -116374117927631468606 115739148151601573808 -112944532473909341307 103171849011748425097 -114244914082871792125 104364058018116761460 -118418436905562612953 111310990991240556038 -112276589013569458330 114244914082871792125 -107519026002586025827 104364058018116761460 -103171849011748425097 107753428759636856492 -103100496883422151101 102178700954286324866 -116374117927631468606 100262595546646927505 -103100496883422151101 112844561713780016118 -112276589013569458330 107519026002586025827 -112364132652438722780 101704103161442695877 -111538009015644508967 101704103161442695877 -100173452066172931939 100523784851251213675 -102216887206636463918 101261243957067319422 -100939735623367202041 114821161730370452301 -117377434815709898403 104450760987525660219 -100173452066172931939 101057616370673656059 -113351703941294630458 101261243957067319422 -105076678694475690385 114791921155677330282 -118086737936443306746 118357356982727825178 -115478779964227301239 117421021456205115327 -104612091113514802664 103112588675637065591 -115706830138905259568 106189723444098348646 -104364058018116761460 103012564142649561853 -115739378269261680935 100262595546646927505 -116768967108862685383 113612142759476883204 -104226321884965863264 114758749740576519343 -109778238062128383421 106695181236161584825 -117377434815709898403 108255750659110762991 -116374117927631468606 113920721823301219308 -106026445270708973611 107117483540235115863 -105076678694475690385 112364132652438722780 -108817085747440374986 105634350975670602787 -115392876317176762477 111091089527727420853 -104870518715355770532 111091089527727420853 -114244914082871792125 101720949843787442951 -100397511207083609950 103691312271671214670 -106026445270708973611 109412257237874861202 -105076678694475690385 105863188856924083857 -102512310412972518336 111666959095947698908 -112364132652438722780 117693415411676715849 -114152150496380806218 116773104421165750126 -109581870574956225297 109895887909967698705 -112364132652438722780 102088173699409175139 -109778238062128383421 104612091113514802664 -105207943512906810696 112844561713780016118 -100397511207083609950 108894779805940659869 -117550971892000156946 108817085747440374986 -116621986644249676039 115017401467423642930 -110318982509514011806 113920721823301219308 -114918561167106576639 106695181236161584825 -102545157386069758709 118357356982727825178 -108082478497335384404 106665185918564754695 -106096957694385885466 110318982509514011806 -105207943512906810696 103207773865797007066 -108082478497335384404 113247423264358423892 -102034052532213921839 108176814619778619437 -103493459351957813291 110286587261352351537 -117693415411676715849 115302451851587317396 -109388259228280605303 113166718268343560861 -104450760987525660219 117683744929337064105 -116374117927631468606 111601729473858041964 -108817085747440374986 104618664838382110366 -113166718268343560861 111285782175840598932 -107519026002586025827 108129202557078877094 -113166718268343560861 103020619410065980303 -101246601531247561585 114632854492678778509 -109170680659355634945 101246601531247561585 -105703999093618427814 100871232248276491534 -113166718268343560861 111538009015644508967 -103207773865797007066 107781761552417614958 -114758749740576519343 115565811010545226083 -109388259228280605303 101261243957067319422 -109304903996729396661 103325969492772452485 -106312895983244085949 107033731246200681024 -109581870574956225297 104987932455782713675 -105901259206530390933 116374117927631468606 -109778238062128383421 118357356982727825178 -114991987213662121376 116107530889292552664 -118418436905562612953 108894779805940659869 -107133948555394893679 110286587261352351537 -112944532473909341307 107753428759636856492 -109809835379677001002 114758749740576519343 -113166718268343560861 107753428759636856492 -108817085747440374986 115863474911002159675 -117550971892000156946 101213524574984631953 -115392876317176762477 104987932455782713675 -111538009015644508967 107753428759636856492 -103207773865797007066 115341960624782381062 -113116318008017777871 102034052532213921839 -117691391504351341685 112339769006469685593 -107753428759636856492 113210431006401244170 -100939735623367202041 100353346783543697435 -105400369085832308485 102088173699409175139 -108000051912603578599 109581870574956225297 -105703999093618427814 112364132652438722780 -108243648069327964538 115527632958457358109 -111975545018506506119 110318982509514011806 -115478779964227301239 101720949843787442951 -115739378269261680935 110728349411116483031 -111538009015644508967 106100296973968329853 -103171849011748425097 103716847685048716973 -110728349411116483031 118017787526225833770 -107896527414017792767 106312895983244085949 -106026445270708973611 113247423264358423892 -107519026002586025827 107781761552417614958 -114079920283986872783 105376842241046675559 -104870518715355770532 107234826207633309420 -109581870574956225297 107097980510051172895 -109196389259504239326 108000051912603578599 -109304903996729396661 100523784851251213675 -107519026002586025827 113801236315350503728 -113116318008017777871 117157132370347986579 -115739378269261680935 117691391504351341685 -112364132652438722780 104612091113514802664 -109581870574956225297 115565811010545226083 -107896527414017792767 104612091113514802664 -105076678694475690385 102048265612444661933 -108952536790629690817 110286587261352351537 -109335713877994755095 101057616370673656059 -101261243957067319422 115064258994656104138 -105400369085832308485 103691312271671214670 -111091089527727420853 103660543175586203250 -115017401467423642930 111538009015644508967 -100093902492789669774 118017787526225833770 -102034052532213921839 104560124403688998123 -118357356982727825178 112339769006469685593 -108243648069327964538 115302451851587317396 -106925005603331131101 108817085747440374986 -115109077044202722504 107699711897781234810 -112944532473909341307 104191514233385365427 -103016521073558596116 100535338638690515335 -113116318008017777871 108176814619778619437 -100535338638690515335 114948739867290323960 -117421021456205115327 111091089527727420853 -115478779964227301239 100084737546039360199 -102403331307606219198 100262595546646927505 -109182513536739786206 106925005603331131101 -115739148151601573808 106695181236161584825 -104364058018116761460 101213524574984631953 -115109077044202722504 107129852879758941909 -109581870574956225297 102048265612444661933 -113166718268343560861 111310990991240556038 -107090629815001792243 112364132652438722780 -115739148151601573808 113612142759476883204 -104364058018116761460 110318982509514011806 -109196389259504239326 114821161730370452301 -103171849011748425097 115360979797396777969 -109809835379677001002 109412257237874861202 -116207701819773193333 113116318008017777871 -110774757382682582490 106122462724662012890 -103691312271671214670 110728349411116483031 -103691312271671214670 115047896996200277508 -114918561167106576639 112276589013569458330 -115360979797396777969 102048265612444661933 -118418436905562612953 112276589013569458330 -112276589013569458330 108082478497335384404 -109304903996729396661 105400903062771750089 -116374117927631468606 113117251731252114390 -115739378269261680935 116768967108862685383 -107196172964000631645 117691391504351341685 -107519026002586025827 106925005603331131101 -115302451851587317396 100257676670422660178 -107753428759636856492 106665185918564754695 -111091089527727420853 109809835379677001002 -115109077044202722504 114549564725160709822 -108314259245584185142 111091089527727420853 -117691391504351341685 112844561713780016118 -112944532473909341307 104560124403688998123 -109304903996729396661 115047896996200277508 -106224435901697064976 101261243957067319422 -102034052532213921839 113210431006401244170 -115739148151601573808 107234826207633309420 -108082478497335384404 116374117927631468606 -114244914082871792125 115739378269261680935 -111310990991240556038 102178700954286324866 -112364132652438722780 111310990991240556038 -106122462724662012890 102178700954286324866 -108952536790629690817 107234826207633309420 -100084737546039360199 103112588675637065591 -100397511207083609950 108832773152747423283 -117691391504351341685 114791921155677330282 -100535338638690515335 102178700954286324866 -115739378269261680935 114918561167106576639 -115622466243011136115 108082478497335384404 -104981620794721816747 105662484616118909569 -108000051912603578599 101225750534150134109 -108817085747440374986 115565811010545226083 -116388668762198604003 115622466243011136115 -115739148151601573808 114918561167106576639 -109581870574956225297 101569655404865588155 -105076678694475690385 105662484616118909569 -116374117927631468606 108574688020691152748 -117377434815709898403 103100496883422151101 -109778238062128383421 115360979797396777969 -110728349411116483031 107699711897781234810 -111538009015644508967 109170680659355634945 -107090629815001792243 100173452066172931939 -118418436905562612953 104560124403688998123 -106695181236161584825 107519026002586025827 -111171416539633276676 110286587261352351537 -103016521073558596116 116621986644249676039 -106096957694385885466 101126226710566561379 -115064258994656104138 103112588675637065591 -101185406398932804414 101261243957067319422 -100084737546039360199 112364132652438722780 -102048265612444661933 118357356982727825178 -107781761552417614958 109412257237874861202 -108817085747440374986 110649214929620497857 -111091089527727420853 109412257237874861202 -116192724891839469024 104066486855641683676 -111091089527727420853 107968787521028284191 -108082478497335384404 101261243957067319422 -114790574178411061829 111310990991240556038 -103171849011748425097 105376842241046675559 -101057616370673656059 115047896996200277508 -104364058018116761460 108000051912603578599 -109504122343901736603 112276589013569458330 -110731951130561423918 101261243957067319422 -113116318008017777871 107781761552417614958 -118245559326500322262 105076678694475690385 -107896527414017792767 115565811010545226083 -107519026002586025827 112063946124358686266 -114918561167106576639 108314259245584185142 -116374117927631468606 102048265612444661933 -112339769006469685593 116388668762198604003 -107587075873786034394 112944532473909341307 -111091089527727420853 104612091113514802664 -100084737546039360199 112276589013569458330 -111091089527727420853 115109077044202722504 -100093902492789669774 104412682128547752131 -107753428759636856492 113068441549452664746 -111310990991240556038 103100496883422151101 -112364132652438722780 102034052532213921839 -118245559326500322262 116621986644249676039 -108894779805940659869 104618664838382110366 -115392876317176762477 110286587261352351537 -101057616370673656059 109182513536739786206 -114244914082871792125 107117483540235115863 -107896527414017792767 117421021456205115327 -117683744929337064105 101225750534150134109 -108894779805940659869 113612142759476883204 -114918561167106576639 113475277239647026452 -115360979797396777969 111310990991240556038 -102034052532213921839 100415723513846680553 -111538009015644508967 102048265612444661933 -117377434815709898403 117693415411676715849 -100397511207083609950 114632854492678778509 -101057616370673656059 117421021456205115327 -111707854651652464890 114918561167106576639 -111975545018506506119 102034052532213921839 -107519026002586025827 109809835379677001002 -104412682128547752131 115109077044202722504 -108314259245584185142 103207773865797007066 -107587075873786034394 105400903062771750089 -105705665708025552983 104612091113514802664 -110728349411116483031 115739378269261680935 -104364058018116761460 115047896996200277508 -100084737546039360199 109412257237874861202 -105901259206530390933 108176814619778619437 -100173452066172931939 116927391465690022495 -102512310412972518336 111996414642516891950 -113612142759476883204 102034052532213921839 -115341960624782381062 116762461061414014956 -114244914082871792125 116927391465690022495 -113116318008017777871 112364132652438722780 -101213524574984631953 107753428759636856492 -104364058018116761460 111538009015644508967 -116374117927631468606 118357356982727825178 -102034052532213921839 107753428759636856492 -109581870574956225297 104450760987525660219 -113166718268343560861 101832196121408756348 -112276589013569458330 104560124403688998123 -108000051912603578599 100537991844787325512 -107033731246200681024 106189723444098348646 -106665185918564754695 115478779964227301239 -101057616370673656059 103112588675637065591 -101246601531247561585 104191514233385365427 -112852253337028739987 108817085747440374986 -105400369085832308485 115109077044202722504 -118357356982727825178 112276589013569458330 -101261243957067319422 117377434815709898403 -100093902492789669774 107699711897781234810 -111654284395316165338 101213524574984631953 -106345802537137414958 108000051912603578599 -115109077044202722504 109174551750397653742 -105901259206530390933 103325969492772452485 -101057616370673656059 115302451851587317396 -100397511207083609950 109170680659355634945 -106122462724662012890 107587075873786034394 -103660543175586203250 115064258994656104138 -109581870574956225297 100397511207083609950 -100084737546039360199 117550971892000156946 -104870518715355770532 100397511207083609950 -106096957694385885466 104981620794721816747 -114790574178411061829 108574688020691152748 -103171849011748425097 111538009015644508967 -111975545018506506119 111310990991240556038 -107196172964000631645 109813896768294978296 -104450760987525660219 100523784851251213675 -102048265612444661933 105634350975670602787 -114244914082871792125 107006059340452534782 -112944532473909341307 104364058018116761460 -111091089527727420853 117691391504351341685 -104450760987525660219 101057616370673656059 -106026445270708973611 106189723444098348646 -112016425853417877466 112364132652438722780 -118418436905562612953 103716847685048716973 -109304903996729396661 108082478497335384404 -103171849011748425097 105076678694475690385 -118418436905562612953 107992936493665613654 -118418436905562612953 107133948555394893679 -104450760987525660219 101600577333348274552 -109174551750397653742 103660543175586203250 -113801236315350503728 109895887909967698705 -112276589013569458330 111285782175840598932 -115739148151601573808 113047102292798770205 -108000051912603578599 104191514233385365427 -102403331307606219198 116762461061414014956 -103325969492772452485 101225750534150134109 -113166718268343560861 104612091113514802664 -115739148151601573808 108594511384403031361 -116207701819773193333 113351703941294630458 -107781761552417614958 110318982509514011806 -112820512550939559523 107196172964000631645 -106812355611465528242 111601729473858041964 -113116318008017777871 101057616370673656059 -107129852879758941909 115017401467423642930 -105076678694475690385 101704103161442695877 -117691391504351341685 118418436905562612953 -118357356982727825178 109074857816744029470 -115478779964227301239 101213524574984631953 -117421021456205115327 115360979797396777969 -107090629815001792243 100856165335040300712 -117421021456205115327 108082478497335384404 -106925005603331131101 110318982509514011806 -102545157386069758709 101213524574984631953 -105662484616118909569 110318982509514011806 -102403331307606219198 109931095616224405271 -103207773865797007066 100173452066172931939 -100173452066172931939 114359738470992181937 -108899222163640713555 109170680659355634945 -111654284395316165338 118207880179234484610 -101261243957067319422 108952536790629690817 -101481313915867030905 114821161730370452301 -118207880179234484610 114790574178411061829 -112364132652438722780 104450760987525660219 -113351703941294630458 114632854492678778509 -107755092517418534815 107090629815001792243 -108817085747440374986 108000051912603578599 -114079920283986872783 117691391504351341685 -116762461061414014956 116927391465690022495 -113351703941294630458 101629211371073711149 -117691391504351341685 111666959095947698908 -116762461061414014956 108000051912603578599 -110318982509514011806 102178700954286324866 -108255750659110762991 104560124403688998123 -106312895983244085949 109813896768294978296 -102512310412972518336 114522811866073303399 -102654570556058167176 109009089551467495747 -118357356982727825178 102048265612444661933 -104987932455782713675 106189723444098348646 -107006059340452534782 109412257237874861202 -103207773865797007066 117550971892000156946 -106096957694385885466 113166718268343560861 -108817085747440374986 109778238062128383421 -111091089527727420853 111337216646096594888 -112364132652438722780 110318982509514011806 -102512310412972518336 113210431006401244170 -107090629815001792243 101057616370673656059 -108082478497335384404 112820512550939559523 -114152150496380806218 100871232248276491534 -113166718268343560861 100523784851251213675 -106665185918564754695 108434394145774737013 -103691312271671214670 104383523254857614001 -104612091113514802664 112364132652438722780 -108434394145774737013 112944532473909341307 -101185406398932804414 109074857816744029470 -100397511207083609950 115360979797396777969 -103207773865797007066 110728349411116483031 -102088173699409175139 114549564725160709822 -115622466243011136115 100269980559891536109 -109304903996729396661 103012564142649561853 -106312895983244085949 115565811010545226083 -100001826804813287036 105703999093618427814 -113116318008017777871 101720949843787442951 -104450760987525660219 117377434815709898403 -102654570556058167176 111337216646096594888 -108082478497335384404 109074857816744029470 -112364132652438722780 115622466243011136115 -112276589013569458330 103100496883422151101 -115478779964227301239 111285782175840598932 -115360979797396777969 115478779964227301239 -102034052532213921839 106122462724662012890 -108894779805940659869 107699711897781234810 -113475277239647026452 114790574178411061829 -111666959095947698908 115863474911002159675 -113920721823301219308 105400903062771750089 -116207701819773193333 115360979797396777969 -102034052532213921839 109778238062128383421 -105705665708025552983 115478779964227301239 -115739378269261680935 118207880179234484610 -100093902492789669774 115392876317176762477 -106096957694385885466 104870518715355770532 -109504122343901736603 112944532473909341307 -106026445270708973611 112364132652438722780 -101094440579835956866 106189723444098348646 -108000051912603578599 105634350975670602787 -113164038788726940319 103012564142649561853 -100269980559891536109 109074857816744029470 -111654284395316165338 113117251731252114390 -109581870574956225297 103100496883422151101 -116491285067171323298 106189723444098348646 -112364132652438722780 103660543175586203250 -115739378269261680935 109895887909967698705 -112364132652438722780 105006381068870463173 -117683744929337064105 118357356982727825178 -103691312271671214670 118017787526225833770 -108869261693909788407 106096957694385885466 -106925005603331131101 106190212616572073606 -100397511207083609950 103716847685048716973 -112339769006469685593 117421021456205115327 -114549564725160709822 116768967108862685383 -109780617142585395916 101832771958125915909 -111091089527727420853 100353346783543697435 -113116318008017777871 103716847685048716973 -115360979797396777969 117691391504351341685 -103207773865797007066 106312895983244085949 -102403331307606219198 101720949843787442951 -101261243957067319422 112063946124358686266 -104987932455782713675 115360979797396777969 -111091089527727420853 114948739867290323960 -107896527414017792767 109581870574956225297 -115047896996200277508 116548025566090395827 -100173452066172931939 113475277239647026452 -101720949843787442951 114979733565079457374 -113612142759476883204 114791921155677330282 -116374117927631468606 110649214929620497857 -101261243957067319422 112276589013569458330 -114991987213662121376 112944532473909341307 -102216887206636463918 102178700954286324866 -116207701819773193333 114791921155677330282 -100397511207083609950 104191514233385365427 -115064258994656104138 100269980559891536109 -115478779964227301239 118320665823821681206 -108894779805940659869 117477042502591652021 -106312895983244085949 107117483540235115863 -102034052532213921839 100397511207083609950 -108000051912603578599 108574688020691152748 -103207773865797007066 101832196121408756348 -108817085747440374986 102048265612444661933 -111666959095947698908 117691391504351341685 -112339769006469685593 113247423264358423892 -102088173699409175139 101704103161442695877 -107781761552417614958 113116318008017777871 -112820512550939559523 118207880179234484610 -106665185918564754695 110727249496967897430 -100397511207083609950 116388668762198604003 -115739378269261680935 110318982509514011806 -104364058018116761460 112063946124358686266 -100397511207083609950 101629211371073711149 -115360979797396777969 104450760987525660219 -101213524574984631953 103716847685048716973 -113612142759476883204 107117483540235115863 -117421021456205115327 105634350975670602787 -117377434815709898403 102705549361550492663 -104412682128547752131 109182513536739786206 -115739378269261680935 117921656724816772352 -105705665708025552983 104450760987525660219 -111310990991240556038 117421021456205115327 -103171849011748425097 115478779964227301239 -104450760987525660219 110468193592032465149 -112364132652438722780 103716847685048716973 -101720949843787442951 113801236315350503728 -113166718268343560861 115706830138905259568 -115064258994656104138 118357356982727825178 -114244914082871792125 103493459351957813291 -111422286077941361166 111538009015644508967 -113164038788726940319 103112588675637065591 -106312895983244085949 116768967108862685383 -116548025566090395827 111285782175840598932 -111538009015644508967 107699711897781234810 -118357356982727825178 104450760987525660219 -102403331307606219198 104618664838382110366 -114244914082871792125 117477042502591652021 -112878918236054024365 109581870574956225297 -104412682128547752131 115739378269261680935 -100535338638690515335 107117483540235115863 -106026445270708973611 106100296973968329853 -102512310412972518336 109335713877994755095 -111091089527727420853 116773104421165750126 -118245559326500322262 108894779805940659869 -117691391504351341685 107097980510051172895 -106312895983244085949 109809835379677001002 -118357356982727825178 108255750659110762991 -102034052532213921839 107117483540235115863 -116762461061414014956 109581870574956225297 -101092351652012588236 109170680659355634945 -112944532473909341307 100019606796298306813 -113475277239647026452 103325969492772452485 -101057616370673656059 107896527414017792767 -100084737546039360199 106189723444098348646 -101094440579835956866 103171849011748425097 -102216887206636463918 114791921155677330282 -100397511207083609950 102512310412972518336 -104450760987525660219 102688620589277847136 -113801236315350503728 118320665823821681206 -110318982509514011806 101094440579835956866 -113166718268343560861 109780617142585395916 -100173452066172931939 102216887206636463918 -116768967108862685383 113166718268343560861 -111171416539633276676 107117483540235115863 -115622466243011136115 115565811010545226083 -111091089527727420853 118320665823821681206 -101094440579835956866 109813896768294978296 -111538009015644508967 109174551750397653742 -102403331307606219198 100397143564111754723 -111091089527727420853 105662484616118909569 -101481313915867030905 111285782175840598932 -115565811010545226083 109074857816744029470 -108082478497335384404 103112588675637065591 -104450760987525660219 108434394145774737013 -104987932455782713675 108817085747440374986 -103207773865797007066 107129852879758941909 -115064258994656104138 102048265612444661933 -115302451851587317396 115047896996200277508 -117477042502591652021 105662484616118909569 -113166718268343560861 108255750659110762991 -107753428759636856492 118264184129842070900 -108000051912603578599 111310990991240556038 -115109077044202722504 108894779805940659869 -114244914082871792125 112063946124358686266 -104364058018116761460 107753428759636856492 -111310990991240556038 115478779964227301239 -107090629815001792243 110209787594312878744 -100856165335040300712 105703999093618427814 -113164038788726940319 100397511207083609950 -117477042502591652021 109182513536739786206 -104612091113514802664 102048265612444661933 -107896527414017792767 105822688186016123722 -111975545018506506119 101720949843787442951 -115047896996200277508 103207773865797007066 -113166718268343560861 104450760987525660219 -104987932455782713675 115739378269261680935 -106096957694385885466 104383523254857614001 -116374117927631468606 103112588675637065591 -117691391504351341685 113801236315350503728 -109581870574956225297 100523784851251213675 -109778238062128383421 114948739867290323960 -112339769006469685593 108574688020691152748 -101057616370673656059 117550971892000156946 -115109077044202722504 111285782175840598932 -110318982509514011806 100019606796298306813 -105006381068870463173 117377434815709898403 -118156281382429939997 109009089551467495747 -108000051912603578599 114991987213662121376 -100397511207083609950 115109077044202722504 -116374117927631468606 106695181236161584825 -100397511207083609950 109813896768294978296 -115565811010545226083 112844561713780016118 -115360979797396777969 107117483540235115863 -109581870574956225297 111310990991240556038 -118264184129842070900 113068441549452664746 -106695181236161584825 103012564142649561853 -108899222163640713555 107699711897781234810 -109809835379677001002 109182513536739786206 -112339769006469685593 109895887909967698705 -100871232248276491534 116723923766489326849 -115527632958457358109 105376842241046675559 -117421021456205115327 100535338638690515335 -109603191376504998413 103153499873703329897 -103153499873703329897 114832793541825307503 -115739378269261680935 105632941129656401917 -106665185918564754695 104364058018116761460 -109182513536739786206 102425976203575211068 -108000051912603578599 109813896768294978296 -116388668762198604003 111310990991240556038 -111091089527727420853 115017401467423642930 -112276589013569458330 106189723444098348646 -102034052532213921839 113117251731252114390 -104987932455782713675 111538009015644508967 -107117418142368704725 113116318008017777871 -113164038788726940319 109074857816744029470 -106067770652209688980 118245559326500322262 -106695181236161584825 112820512550939559523 -111806715084467662398 116621986644249676039 -113612142759476883204 118320665823821681206 -102403331307606219198 109504122343901736603 -106096957694385885466 111261496925076985134 -109304903996729396661 106189723444098348646 -117921656724816772352 116192724891839469024 -118357356982727825178 109247306373593947755 -100084737546039360199 106345802537137414958 -111261496925076985134 101849747879612982297 -104364058018116761460 111091089527727420853 -109182513536739786206 102048265612444661933 -106665185918564754695 103100496883422151101 -117691391504351341685 108574688020691152748 -109388259228280605303 103207773865797007066 -111091089527727420853 101057616370673656059 -111310990991240556038 115064258994656104138 -103207773865797007066 108952536790629690817 -103100496883422151101 113475277239647026452 -116207701819773193333 115478779964227301239 -108434394145774737013 115706830138905259568 -116374117927631468606 104618664838382110366 -100093902492789669774 103207773865797007066 -103016521073558596116 116388668762198604003 -104191514233385365427 110318982509514011806 -108787861479092510435 107308976571078250231 -100856165335040300712 116773104421165750126 -117377434815709898403 108082478497335384404 -113166718268343560861 104560124403688998123 -102545157386069758709 118418436905562612953 -114758749740576519343 109412257237874861202 -103020619410065980303 104412682128547752131 -109174551750397653742 107117483540235115863 -105076678694475690385 117377434815709898403 -100535338638690515335 116768967108862685383 -101569655404865588155 101261243957067319422 -107196172964000631645 109412257237874861202 -116926943858449614201 105376842241046675559 -112820512550939559523 105076678694475690385 -107090629815001792243 115390494223651393388 -111538009015644508967 110727249496967897430 -109247306373593947755 114790574178411061829 -115739378269261680935 116762461061414014956 -106122462724662012890 117421021456205115327 -108952536790629690817 108176814619778619437 -111654284395316165338 109895887909967698705 -114359738470992181937 111601729473858041964 -111091089527727420853 104412682128547752131 -115706830138905259568 103716847685048716973 -113116318008017777871 114359738470992181937 -105705665708025552983 116388668762198604003 -102654570556058167176 112364132652438722780 -105376842241046675559 111538009015644508967 -112276589013569458330 107033731246200681024 -118245559326500322262 104191514233385365427 -106837636108890930395 105006381068870463173 -115739378269261680935 114549564725160709822 -109931095616224405271 111422286077941361166 -102088173699409175139 116107530889292552664 -102088173699409175139 106096957694385885466 -115527632958457358109 118207880179234484610 -102654570556058167176 105006381068870463173 -103016521073558596116 109813896768294978296 -110774757382682582490 109412257237874861202 -115109077044202722504 101261243957067319422 -117377434815709898403 100537991844787325512 -115706830138905259568 115478779964227301239 -106312895983244085949 115622466243011136115 -110318982509514011806 106189723444098348646 -117377434815709898403 107117483540235115863 -106224435901697064976 102178700954286324866 -100093902492789669774 112364132652438722780 -114758749740576519343 104364058018116761460 -108787861479092510435 108314259245584185142 -104870518715355770532 117691391504351341685 -106925005603331131101 114948739867290323960 -113047102292798770205 102048265612444661933 -114549564725160709822 111310990991240556038 -110468193592032465149 115622466243011136115 -103112588675637065591 108574688020691152748 -116192724891839469024 110728349411116483031 -112852253337028739987 110649214929620497857 -109182513536739786206 109074857816744029470 -115706830138905259568 111091089527727420853 -100173452066172931939 109895887909967698705 -102216887206636463918 113116318008017777871 -100173452066172931939 100262595546646927505 -100871232248276491534 112364132652438722780 -107753428759636856492 102178700954286324866 -113920721823301219308 115360979797396777969 -101057616370673656059 110318982509514011806 -116491285067171323298 107117483540235115863 -100173452066172931939 107006059340452534782 -102088173699409175139 115017401467423642930 -108255750659110762991 101569655404865588155 -115047896996200277508 102705549361550492663 -106122462724662012890 114079920283986872783 -108817085747440374986 103716847685048716973 -101213524574984631953 112063946124358686266 -104612091113514802664 107519026002586025827 -100535338638690515335 116388668762198604003 -118245559326500322262 112844561713780016118 -102512310412972518336 115863474911002159675 -112276589013569458330 104364058018116761460 -102654570556058167176 113166718268343560861 -111538009015644508967 106189723444098348646 -106096957694385885466 108899222163640713555 -108082478497335384404 101849747879612982297 -103325969492772452485 112276589013569458330 -112820512550939559523 115360979797396777969 -114734885658057433270 114632854492678778509 -101263833299534001868 100537991844787325512 -112852253337028739987 104612091113514802664 -103207773865797007066 104450760987525660219 -103660543175586203250 109504122343901736603 -104612091113514802664 100523784851251213675 -111171416539633276676 115047896996200277508 -116374117927631468606 102088173699409175139 -116374117927631468606 109182513536739786206 -101832196121408756348 105662484616118909569 -115064258994656104138 102034052532213921839 -108817085747440374986 115478779964227301239 -104450760987525660219 114758749740576519343 -111666959095947698908 109174551750397653742 -117477042502591652021 107781761552417614958 -106026445270708973611 109581870574956225297 -115064258994656104138 107992936493665613654 -115064258994656104138 103100496883422151101 -102216887206636463918 112063946124358686266 -109504122343901736603 111538009015644508967 -118418436905562612953 101849747879612982297 -105207943512906810696 108314259245584185142 -102512310412972518336 103171849011748425097 -105822688186016123722 117693415411676715849 -102048265612444661933 108574688020691152748 -112364132652438722780 112820512550939559523 -111538009015644508967 109182513536739786206 -107519026002586025827 109074857816744029470 -103016521073558596116 109388259228280605303 -103691312271671214670 113612142759476883204 -105822688186016123722 112852253337028739987 -108434394145774737013 103100496883422151101 -106312895983244085949 109182513536739786206 -108894779805940659869 109780617142585395916 -100353346783543697435 110774757382682582490 -112364132652438722780 115360979797396777969 -107755092517418534815 116927391465690022495 -107753428759636856492 109813896768294978296 -117921656724816772352 108894779805940659869 -106026445270708973611 117421021456205115327 -104612091113514802664 107968787521028284191 -106695181236161584825 107753428759636856492 -106837636108890930395 101704103161442695877 -109388259228280605303 117477042502591652021 -104364058018116761460 113920721823301219308 -115622466243011136115 101569655404865588155 -112820512550939559523 113116318008017777871 -104364058018116761460 117377434815709898403 -113475277239647026452 118264184129842070900 -103016521073558596116 114549564725160709822 -117377434815709898403 100523784851251213675 -112016425853417877466 107133948555394893679 -115341960624782381062 103207773865797007066 -115478779964227301239 107033731246200681024 -112276589013569458330 101225750534150134109 -109182513536739786206 115883560681104199404 -107519026002586025827 101094440579835956866 -102034052532213921839 109304903996729396661 -102088173699409175139 101832196121408756348 -117550971892000156946 114979733565079457374 -109388259228280605303 110318982509514011806 -105207943512906810696 107753428759636856492 -115739378269261680935 109813896768294978296 -104618664838382110366 105822688186016123722 -108000051912603578599 100019606796298306813 -103207773865797007066 109174551750397653742 -102425976203575211068 102034052532213921839 -106224435901697064976 113210431006401244170 -117477042502591652021 106925005603331131101 -109247306373593947755 101832771958125915909 -114244914082871792125 111310990991240556038 -100535338638690515335 117377434815709898403 -111091089527727420853 104450760987525660219 -117421021456205115327 102178700954286324866 -114758749740576519343 107033731246200681024 -109009089551467495747 116621986644249676039 -111975545018506506119 100262595546646927505 -111310990991240556038 116388668762198604003 -114152150496380806218 103207773865797007066 -101126226710566561379 103207773865797007066 -101185406398932804414 107753428759636856492 -109182513536739786206 101094440579835956866 -112364132652438722780 103112588675637065591 -114856222286197208502 117921656724816772352 -115064258994656104138 111666959095947698908 -108082478497335384404 118207880179234484610 -103016521073558596116 102048265612444661933 -104364058018116761460 108082478497335384404 -109247306373593947755 104450760987525660219 -111975545018506506119 109170680659355634945 -116374117927631468606 112339769006469685593 -113164038788726940319 112063946124358686266 -113047102292798770205 109504122343901736603 -116207701819773193333 116374117927631468606 -101849747879612982297 118264184129842070900 -118245559326500322262 101261243957067319422 -108082478497335384404 109778238062128383421 -111422286077941361166 113047102292798770205 -116762461061414014956 112852253337028739987 -109504122343901736603 115047896996200277508 -100871232248276491534 104383523254857614001 -111091089527727420853 108176814619778619437 -111091089527727420853 106665185918564754695 -117377434815709898403 113116318008017777871 -107133948555394893679 112063946124358686266 -106026445270708973611 116374117927631468606 -116621986644249676039 118245559326500322262 -109809835379677001002 113210431006401244170 -108000051912603578599 109778238062128383421 -109182513536739786206 109813896768294978296 -101057616370673656059 114821161730370452301 -100397511207083609950 104612091113514802664 -107519026002586025827 102048265612444661933 -113801236315350503728 116374117927631468606 -100269980559891536109 103660543175586203250 -104364058018116761460 105705665708025552983 -100093902492789669774 117921656724816772352 -106665185918564754695 108082478497335384404 -112016425853417877466 103537420161725387429 -116621986644249676039 103475991020114516832 -103691312271671214670 114856222286197208502 -102034052532213921839 107133948555394893679 -106224435901697064976 114948739867290323960 -116773104421165750126 114549564725160709822 -116762461061414014956 114790574178411061829 -115622466243011136115 103112588675637065591 -111091089527727420853 116768967108862685383 -104450760987525660219 118320665823821681206 -102216887206636463918 118207880179234484610 -115047896996200277508 110318982509514011806 -106312895983244085949 113475277239647026452 -106026445270708973611 101213524574984631953 -115963821022986200770 105400903062771750089 -115739378269261680935 115739148151601573808 -104412682128547752131 109009089551467495747 -103207773865797007066 112063946124358686266 -103207773865797007066 109581870574956225297 -108255750659110762991 116388668762198604003 -117012574629989558450 104870518715355770532 -105705665708025552983 110727249496967897430 -104612091113514802664 101094440579835956866 -117691391504351341685 104412682128547752131 -116762461061414014956 103020619410065980303 -100871232248276491534 118017787526225833770 -117377434815709898403 112063946124358686266 -107033731246200681024 100523784851251213675 -103171849011748425097 113475277239647026452 -117421021456205115327 107133948555394893679 -115478779964227301239 106925005603331131101 -108082478497335384404 111538009015644508967 -117377434815709898403 103171849011748425097 -109581870574956225297 107781761552417614958 -114079920283986872783 114790574178411061829 -109581870574956225297 113210431006401244170 -106665185918564754695 106189723444098348646 -112364132652438722780 107234826207633309420 -117477042502591652021 115047896996200277508 -117683744929337064105 102425976203575211068 -100269980559891536109 111654284395316165338 -106925005603331131101 100019606796298306813 -117921656724816772352 101261243957067319422 -102654570556058167176 101832196121408756348 -117012574629989558450 117921656724816772352 -105662484616118909569 100397143564111754723 -100093902492789669774 111707854651652464890 -111091089527727420853 113247423264358423892 -100397511207083609950 113116318008017777871 -115047896996200277508 107117483540235115863 -103207773865797007066 116773104421165750126 -104987932455782713675 107753428759636856492 -109778238062128383421 109174551750397653742 -107753428759636856492 101057616370673656059 -103016521073558596116 105006381068870463173 -118418436905562612953 104450760987525660219 -110774757382682582490 111091089527727420853 -101263833299534001868 107308976571078250231 -106623900962110772648 111285782175840598932 -106122462724662012890 113920721823301219308 -111091089527727420853 106189723444098348646 -102512310412972518336 108176814619778619437 -110728349411116483031 110650241045258158224 -100093902492789669774 108894779805940659869 -118418436905562612953 116773104421165750126 -109304903996729396661 111538009015644508967 -105822688186016123722 108434394145774737013 -104364058018116761460 113116318008017777871 -102545157386069758709 100019606796298306813 -102545157386069758709 107753428759636856492 -108894779805940659869 115403621788538540544 -112276589013569458330 115064258994656104138 -111538009015644508967 101092351652012588236 -110728349411116483031 104383523254857614001 -112339769006469685593 101261243957067319422 -104612091113514802664 108176814619778619437 -106224435901697064976 114790574178411061829 -108894779805940659869 103207773865797007066 -115527632958457358109 113612142759476883204 -100353346783543697435 118086737936443306746 -114244914082871792125 116388668762198604003 -105207943512906810696 101849747879612982297 -117377434815709898403 112944532473909341307 -112276589013569458330 106345802537137414958 -108817085747440374986 102425976203575211068 -102216887206636463918 100173452066172931939 -113801236315350503728 118418436905562612953 -108817085747440374986 109504122343901736603 -107699711897781234810 104383523254857614001 -115478779964227301239 103112588675637065591 -109504122343901736603 108434394145774737013 -104450760987525660219 101213524574984631953 -113116318008017777871 107133948555394893679 -113351703941294630458 107781761552417614958 -116374117927631468606 111666959095947698908 -104450760987525660219 108574688020691152748 -106312895983244085949 113068441549452664746 -114244914082871792125 115360979797396777969 -115360979797396777969 115565811010545226083 -103207773865797007066 117693415411676715849 -101213524574984631953 111310990991240556038 -100397511207083609950 109182513536739786206 -100084737546039360199 109581870574956225297 -108574688020691152748 103716847685048716973 -112339769006469685593 102048265612444661933 -118357356982727825178 106312895983244085949 -111310990991240556038 105705665708025552983 -103020619410065980303 113166718268343560861 -104450760987525660219 103012564142649561853 -104987932455782713675 104450760987525660219 -105006381068870463173 113247423264358423892 -103100496883422151101 109074857816744029470 -115739378269261680935 117477042502591652021 -107699711897781234810 115739378269261680935 -110731951130561423918 110286587261352351537 -113116318008017777871 115565811010545226083 -104870518715355770532 118017787526225833770 -114549564725160709822 102178700954286324866 -106312895983244085949 101213524574984631953 -102034052532213921839 105705665708025552983 -107753428759636856492 108434394145774737013 -104612091113514802664 100269980559891536109 -101261243957067319422 107006059340452534782 -107006059340452534782 100523784851251213675 -109304903996729396661 105076678694475690385 -109196389259504239326 101569655404865588155 -117550971892000156946 106189723444098348646 -104450760987525660219 106122462724662012890 -117921656724816772352 104870518715355770532 -104450760987525660219 114790574178411061829 -105400369085832308485 100871232248276491534 -117377434815709898403 118320665823821681206 -105076678694475690385 115565811010545226083 -103691312271671214670 107117483540235115863 -107519026002586025827 100019606796298306813 -116548025566090395827 115047896996200277508 -100535338638690515335 111091089527727420853 -100535338638690515335 101261243957067319422 -104450760987525660219 109519167630731639094 -113116318008017777871 106100296973968329853 -100084737546039360199 101849747879612982297 -115739378269261680935 116773104421165750126 -103016521073558596116 102178700954286324866 -101092351652012588236 108000051912603578599 -116388668762198604003 113116318008017777871 -117377434815709898403 110209787594312878744 -112878918236054024365 116927391465690022495 -113920721823301219308 117691391504351341685 -100173452066172931939 107793717361981126032 -105705665708025552983 104191514233385365427 -114244914082871792125 108817085747440374986 -111337216646096594888 115706830138905259568 -100397511207083609950 102088173699409175139 -101126226710566561379 101261243957067319422 -105822688186016123722 107587075873786034394 -112016425853417877466 111654284395316165338 -111310990991240556038 118357356982727825178 -100093902492789669774 104191514233385365427 -108894779805940659869 104560124403688998123 -107519026002586025827 118264184129842070900 -103691312271671214670 108869261693909788407 -115706830138905259568 109895887909967698705 -117421021456205115327 115527632958457358109 -115360979797396777969 111666959095947698908 -103016521073558596116 112063946124358686266 -108817085747440374986 111310990991240556038 -116374117927631468606 104560124403688998123 -100093902492789669774 103691312271671214670 -102034052532213921839 101094440579835956866 -106096957694385885466 118017787526225833770 -104450760987525660219 107587075873786034394 -103100496883422151101 113247423264358423892 -116374117927631468606 103100496883422151101 -116374117927631468606 107992936493665613654 -101261243957067319422 109174551750397653742 -102216887206636463918 105076678694475690385 -103171849011748425097 117421021456205115327 -107699711897781234810 118017787526225833770 -116773104421165750126 111601729473858041964 -118086737936443306746 114758749740576519343 -106026445270708973611 108894779805940659869 -104412682128547752131 104191514233385365427 -111538009015644508967 104450760987525660219 -104450760987525660219 111666959095947698908 -107519026002586025827 111091089527727420853 -103016521073558596116 107896527414017792767 -105705665708025552983 113475277239647026452 -108817085747440374986 113210431006401244170 -100173452066172931939 111538009015644508967 -115706830138905259568 109182513536739786206 -111806715084467662398 101246601531247561585 -111310990991240556038 109809835379677001002 -114991987213662121376 105705665708025552983 -107090629815001792243 106100296973968329853 -100397511207083609950 109304903996729396661 -100093902492789669774 113612142759476883204 -105632941129656401917 103207773865797007066 -114991987213662121376 115706830138905259568 -106122462724662012890 107992936493665613654 -107129852879758941909 102088173699409175139 -106026445270708973611 116762461061414014956 -115360979797396777969 116768967108862685383 -101261243957067319422 106100296973968329853 -111261496925076985134 110731951130561423918 -111261496925076985134 100262595546646927505 -107753428759636856492 107587075873786034394 -101261243957067319422 104964811874969620954 -118418436905562612953 115963821022986200770 -100084737546039360199 118264184129842070900 -108817085747440374986 112852253337028739987 -113116318008017777871 115706830138905259568 -115047896996200277508 105376842241046675559 -101057616370673656059 107033731246200681024 -100397511207083609950 112844561713780016118 -100084737546039360199 103012564142649561853 -104612091113514802664 115963821022986200770 -108817085747440374986 102034052532213921839 -103207773865797007066 118177473010760322916 -105076678694475690385 115478779964227301239 -101246601531247561585 103207773865797007066 -104612091113514802664 109182513536739786206 diff --git a/scripts/dashboard/timeline.py b/scripts/dashboard/timeline.py new file mode 100644 index 0000000..021d96d --- /dev/null +++ b/scripts/dashboard/timeline.py @@ -0,0 +1,507 @@ +import time +import webbrowser +from pathlib import Path +from threading import Thread +from typing import cast + +import dash_cytoscape as cyto +import pandas as pd +import plotly.express as px +from dash import ( + Dash, + Input, + Output, + State, + callback, + dash_table, + dcc, + html, +) +from pandas import DataFrame + +from lang_main.analysis import graphs +from lang_main.io import load_pickle +from lang_main.types import ObjectID, TimelineCandidates +from lang_main.analysis import tokens +from lang_main.constants import SPCY_MODEL + +# df = pd.read_csv('https://raw.githubusercontent.com/plotly/datasets/master/gapminder_unfiltered.csv') + +# ** data +# p_df = Path(r'../Pipe-TargetFeature_Step-3_remove_NA.pkl').resolve() +p_df = Path(r'../results/test_20240619/TIMELINE.pkl').resolve() +# p_tl = Path(r'/Pipe-Timeline_Analysis_Step-4_get_timeline_candidates.pkl').resolve() +p_tl = Path(r'../results/test_20240619/TIMELINE_POSTPROCESSING.pkl').resolve() +ret = cast(tuple[DataFrame], load_pickle(p_df)) +data = ret[0] +ret = cast(tuple[TimelineCandidates, dict[ObjectID, str]], load_pickle(p_tl)) +cands = ret[0] +texts = ret[1] + +# p_df = Path(r'.\test-notebooks\dashboard\data.pkl') +# p_cands = Path(r'.\test-notebooks\dashboard\map_candidates.pkl') +# p_map = Path(r'.\test-notebooks\dashboard\map_texts.pkl') +# data = cast(DataFrame, load_pickle(p_df)) +# cands = cast(TimelineCandidates, load_pickle(p_cands)) +# texts = cast(dict[ObjectID, str], load_pickle(p_map)) + +table_feats = [ + 'ErstellungsDatum', + 'ErledigungsDatum', + 'VorgangsTypName', + 'VorgangsBeschreibung', +] +table_feats_dates = [ + 'ErstellungsDatum', + 'ErledigungsDatum', +] + +# ** figure config +markers = { + 'size': 12, + 'color': 'yellow', + 'line': { + 'width': 2, + 'color': 'red', + }, +} +hover_data = { + 'ErstellungsDatum': '|%d.%m.%Y', + 'VorgangsBeschreibung': True, +} + +# ** graphs +target = '../results/test_20240529/Pipe-Token_Analysis_Step-1_build_token_graph.pkl' +p = Path(target).resolve() +ret = load_pickle(p) +tk_graph = cast(graphs.TokenGraph, ret[0]) +tk_graph_filtered = graphs.filter_graph_by_edge_weight(tk_graph, 150, None) +tk_graph_filtered = graphs.filter_graph_by_node_degree(tk_graph_filtered, 1, None) +# tk_graph_filtered = tk_graph.filter_by_edge_weight(150, None) +# tk_graph_filtered = tk_graph_filtered.filter_by_node_degree(1, None) +cyto_data_base, weight_data = graphs.convert_graph_to_cytoscape(tk_graph_filtered) + +MIN_WEIGHT = weight_data['min'] +MAX_WEIGHT = weight_data['max'] + +cyto.load_extra_layouts() + +cose_layout = { + 'name': 'cose', + 'nodeOverlap': 500, + 'refresh': 20, + 'fit': True, + 'padding': 20, + 'randomize': False, + 'componentSpacing': 1.2, + 'nodeRepulsion': 1000, + 'edgeElasticity': 1000, + 'idealEdgeLength': 100, + 'nestingFactor': 1.2, + 'gravity': 50, + 'numIter': 3000, + 'initialTemp': 2000, + 'coolingFactor': 0.7, + 'minTemp': 1.0, + 'nodeDimensionsIncludeLabels': True, +} + +my_stylesheet = [ + # Group selectors + { + 'selector': 'node', + 'style': { + 'shape': 'circle', + 'content': 'data(label)', + 'background-color': '#B10DC9', + 'border-width': 2, + 'border-color': 'black', + 'border-opacity': 1, + 'opacity': 1, + 'color': 'black', + 'text-opacity': 1, + 'font-size': 12, + 'z-index': 9999, + }, + }, + { + 'selector': 'edge', + 'style': { + #'width': f'mapData(weight, {MIN_WEIGHT}, {MAX_WEIGHT}, 1, 10)', + # 'width': """function(ele) { + # return ele.data('weight'); + # """, + 'curve-style': 'bezier', + 'line-color': 'grey', + 'line-style': 'solid', + 'line-opacity': 1, + }, + }, + # Class selectors + # {'selector': '.red', 'style': {'background-color': 'red', 'line-color': 'red'}}, + # {'selector': '.triangle', 'style': {'shape': 'triangle'}}, +] + +# ** app +external_stylesheets = ['https://codepen.io/chriddyp/pen/bWLwgP.css'] +app = Dash(__name__, external_stylesheets=external_stylesheets) + +graph_layout = html.Div( + [ + html.Button('Trigger JS Weight', id='test_js_weight'), + html.Button('Trigger Candidate Graph', id='cand_graph'), + html.Div(id='output'), + html.Div( + [ + html.H2('Token Graph', style={'margin': 0}), + html.Button( + 'Reset Default', + id='bt-reset', + style={ + 'marginLeft': 'auto', + 'width': '300px', + }, + ), + ], + style={ + 'display': 'flex', + 'marginBottom': '1em', + }, + ), + html.H3('Layout'), + dcc.Dropdown( + id='layout_choice', + options=[ + 'cose', + 'cola', + 'euler', + 'random', + ], + value='cose', + clearable=False, + ), + html.Div( + [ + html.H3('Graph Filter'), + dcc.Input( + id='weight_min', + type='number', + min=MIN_WEIGHT, + max=MAX_WEIGHT, + step=1, + placeholder=f'Minimum edge weight: {MIN_WEIGHT} - {MAX_WEIGHT}', + debounce=True, + style={'width': '40%'}, + ), + dcc.Input( + id='weight_max', + type='number', + min=MIN_WEIGHT, + max=MAX_WEIGHT, + step=1, + placeholder=f'Maximum edge weight: {MIN_WEIGHT} - {MAX_WEIGHT}', + debounce=True, + style={'width': '40%'}, + ), + html.H3('Graph'), + html.Button('Re-Layout', id='trigger_relayout'), + html.Div( + [ + cyto.Cytoscape( + id='cytoscape-graph', + style={'width': '100%', 'height': '600px'}, + layout=cose_layout, + stylesheet=my_stylesheet, + elements=cyto_data_base, + zoom=1, + ), + ], + style={ + 'border': '3px solid black', + 'borderRadius': '25px', + 'marginTop': '1em', + 'marginBottom': '2em', + 'padding': '7px', + }, + ), + ], + style={'marginTop': '1em'}, + ), + ], +) + +app.layout = html.Div( + [ + html.H1(children='Demo Zeitreihenanalyse', style={'textAlign': 'center'}), + html.Div( + children=[ + html.H2('Wählen Sie ein Objekt aus (ObjektID):'), + dcc.Dropdown( + list(cands.keys()), + id='dropdown-selection', + placeholder='ObjektID auswählen...', + ), + ] + ), + html.Div( + children=[ + html.H3(id='object_text'), + dcc.Dropdown(id='choice-candidates'), + dcc.Graph(id='graph-output'), + ] + ), + html.Div( + [dash_table.DataTable(id='table-candidates')], style={'marginBottom': '2em'} + ), + graph_layout, + ], + style={'margin': '2em'}, +) + + +@callback( + Output('object_text', 'children'), + Input('dropdown-selection', 'value'), + prevent_initial_call=True, +) +def update_obj_text(obj_id): + obj_id = int(obj_id) + obj_text = texts[obj_id] + headline = f'HObjektText: {obj_text}' + return headline + + +@callback( + Output('choice-candidates', 'options'), + Input('dropdown-selection', 'value'), + prevent_initial_call=True, +) +def update_choice_candidates(obj_id): + obj_id = int(obj_id) + cands_obj_id = cands[obj_id] + choices = list(range(1, len(cands_obj_id) + 1)) + return choices + + +@callback( + Output('graph-output', 'figure'), + Input('choice-candidates', 'value'), + State('dropdown-selection', 'value'), + prevent_initial_call=True, +) +def update_timeline(index, obj_id): + obj_id = int(obj_id) + # title + obj_text = texts[obj_id] + title = f'HObjektText: {obj_text}' + # cands + cands_obj_id = cands[obj_id] + cands_choice = cands_obj_id[int(index) - 1] + # data + df = data.loc[list(cands_choice)].sort_index() # type: ignore + # figure + fig = px.line( + data_frame=df, + x='ErstellungsDatum', + y='ObjektID', + title=title, + hover_data=hover_data, + ) + fig.update_traces(mode='markers+lines', marker=markers, marker_symbol='diamond') + fig.update_xaxes( + tickformat='%B\n%Y', + rangeslider_visible=True, + ) + fig.update_yaxes(type='category') + fig.update_layout(hovermode='x unified') + return fig + + +@callback( + [Output('table-candidates', 'data'), Output('table-candidates', 'columns')], + Input('choice-candidates', 'value'), + State('dropdown-selection', 'value'), + prevent_initial_call=True, +) +def update_table_candidates(index, obj_id): + # obj_id = int(obj_id) + # # cands + # cands_obj_id = cands[obj_id] + # cands_choice = cands_obj_id[int(index) - 1] + # # data + # df = data.loc[list(cands_choice)].sort_index() # type: ignore + df = pre_filter_data(data, idx=index, obj_id=obj_id) + df = df.filter(items=table_feats, axis=1).sort_values( + by='ErstellungsDatum', ascending=True + ) + cols = [{'name': i, 'id': i} for i in df.columns] + # convert dates to strings + for col in table_feats_dates: + df[col] = df[col].dt.strftime(r'%Y-%m-%d') + + table_data = df.to_dict('records') + return table_data, cols + + +def pre_filter_data( + data: DataFrame, + idx: int, + obj_id: ObjectID, +) -> DataFrame: + obj_id = int(obj_id) + data = data.copy() + # cands + cands_obj_id = cands[obj_id] + cands_choice = cands_obj_id[int(idx) - 1] + # data + data = data.loc[list(cands_choice)].sort_index() # type: ignore + + return data + + +# ** graph +@app.callback( + Output('cytoscape-graph', 'elements', allow_duplicate=True), + Output('weight_min', 'min', allow_duplicate=True), + Output('weight_min', 'max', allow_duplicate=True), + Output('weight_min', 'placeholder', allow_duplicate=True), + Output('weight_max', 'min', allow_duplicate=True), + Output('weight_max', 'max', allow_duplicate=True), + Output('weight_max', 'placeholder', allow_duplicate=True), + Input('cand_graph', 'n_clicks'), + State('choice-candidates', 'value'), + State('dropdown-selection', 'value'), + prevent_initial_call=True, +) +def update_graph_candidates(_, index, obj_id): + df = pre_filter_data(data, idx=index, obj_id=obj_id) + tk_graph_cands, _ = tokens.build_token_graph( + data=df, + model=SPCY_MODEL, + target_feature='VorgangsBeschreibung', + build_map=False, + ) + cyto_data, weight_info = graphs.convert_graph_to_cytoscape(tk_graph_cands) + weight_min = weight_info['min'] + weight_max = weight_info['max'] + placeholder_min = f'Minimum edge weight: {weight_min} - {weight_max}' + placeholder_max = f'Minimum edge weight: {weight_min} - {weight_max}' + return ( + cyto_data, + weight_min, + weight_max, + placeholder_min, + weight_min, + weight_max, + placeholder_max, + ) + + +@app.callback( + Output('cytoscape-graph', 'layout', allow_duplicate=True), + Input('layout_choice', 'value'), + prevent_initial_call=True, +) +def update_layout_internal(layout_choice): + # return {'name': layout_choice} + return cose_layout + # return cose_bilkent_layout + # return cola_layout + + +@app.callback( + Output('cytoscape-graph', 'zoom'), + Output('cytoscape-graph', 'elements', allow_duplicate=True), + Output('weight_min', 'value'), + Output('weight_max', 'value'), + Input('bt-reset', 'n_clicks'), + prevent_initial_call=True, +) +def reset_layout(n_clicks): + return (1, cyto_data_base, None, None) + + +# update edge weight +@app.callback( + Output('cytoscape-graph', 'elements', allow_duplicate=True), + Input('weight_min', 'value'), + Input('weight_max', 'value'), + prevent_initial_call=True, +) +def update_edge_weight(weight_min, weight_max): + if not any([weight_min, weight_max]): + return cyto_data_base + + if weight_min is None: + weight_min = MIN_WEIGHT + if weight_max is None: + weight_max = MAX_WEIGHT + tk_graph_filtered = graphs.filter_graph_by_edge_weight(tk_graph, weight_min, weight_max) + # tk_graph_filtered = tk_graph.filter_by_edge_weight(weight_min, weight_max) + tk_graph_filtered = graphs.filter_graph_by_node_degree(tk_graph_filtered, 1, None) + # tk_graph_filtered = tk_graph_filtered.filter_by_node_degree(1, None) + cyto_data, _ = graphs.convert_graph_to_cytoscape(tk_graph_filtered) + return cyto_data + + +app.clientside_callback( + """ + function(n_clicks, layout) { + layout.edgeElasticity = function(edge) { + return edge.data().weight * 0.05; + }; + layout.idealEdgeLength = function(edge) { + return edge.data().weight * 0.4; + }; + cy.layout(layout).run(); + return layout; + } + """, + Output('cytoscape-graph', 'layout', allow_duplicate=True), + Input('trigger_relayout', 'n_clicks'), + State('cytoscape-graph', 'layout'), + prevent_initial_call=True, +) + +app.clientside_callback( + """ + function(n_clicks, stylesheet) { + function edge_weight(ele) { + let threshold = 1000; + let weight = ele.data('weight'); + if (weight > threshold) { + weight = 12; + } else { + weight = weight / threshold * 10; + weight = Math.max(1, weight); + } + return weight; + } + stylesheet[1].style.width = edge_weight; + cy.style(stylesheet).update(); + return stylesheet; + } + """, + Output('cytoscape-graph', 'stylesheet'), + Input('test_js_weight', 'n_clicks'), + State('cytoscape-graph', 'stylesheet'), + prevent_initial_call=False, +) + + +def _start_webbrowser(): + host = '127.0.0.1' + port = '8050' + adress = f'http://{host}:{port}/' + time.sleep(2) + webbrowser.open_new(adress) + + +def main(): + webbrowser_thread = Thread(target=_start_webbrowser, daemon=True) + webbrowser_thread.start() + app.run(debug=True) + + +if __name__ == '__main__': + main() diff --git a/scripts/lang_main_config copy.toml b/scripts/lang_main_config copy.toml deleted file mode 100644 index 8cf2829..0000000 --- a/scripts/lang_main_config copy.toml +++ /dev/null @@ -1,38 +0,0 @@ -# lang_main: Config file - -[paths] -inputs = 'A:/Arbeitsaufgaben/lang-main/scripts' -results = 'A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240529/' -dataset = 'A:/Arbeitsaufgaben/lang-main/data/02_202307/Export4.csv' -#results = './results/Export7/' -#dataset = './01_03_Rohdaten_202403/Export7_59499_Zeilen.csv' -#results = './results/Export7_trunc/' -#dataset = './01_03_Rohdaten_202403/Export7_trunc.csv' - -[control] -preprocessing = true -preprocessing_skip = false -token_analysis = false -token_analysis_skip = true -graph_postprocessing = false -graph_postprocessing_skip = true - -#[export_filenames] -#filename_cossim_filter_candidates = 'CosSim-FilterCandidates' - -[preprocess] -filename_cossim_filter_candidates = 'CosSim-FilterCandidates' -date_cols = [ - "VorgangsDatum", - "ErledigungsDatum", - "Arbeitsbeginn", - "ErstellungsDatum", -] -threshold_amount_characters = 5 -threshold_similarity = 0.8 - -[graph_postprocessing] -threshold_edge_weight = 150 - -[time_analysis] -threshold_unique_texts = 5 \ No newline at end of file diff --git a/scripts/lang_main_config.toml b/scripts/lang_main_config.toml index a0b65d9..f5c2788 100644 --- a/scripts/lang_main_config.toml +++ b/scripts/lang_main_config.toml @@ -2,22 +2,20 @@ [paths] inputs = './inputs/' -results = './results/test_20240529/' +results = './results/test_20240619/' dataset = '../data/02_202307/Export4.csv' #results = './results/Export7/' #dataset = './01_03_Rohdaten_202403/Export7_59499_Zeilen.csv' #results = './results/Export7_trunc/' #dataset = './01_03_Rohdaten_202403/Export7_trunc.csv' +# only debugging features, production-ready pipelines should always +# be fully executed [control] -preprocessing = false -preprocessing_skip = false -token_analysis = true -token_analysis_skip = false -graph_postprocessing = false +preprocessing_skip = true +token_analysis_skip = true graph_postprocessing_skip = true -time_analysis = false -time_analysis_skip = true +time_analysis_skip = false #[export_filenames] #filename_cossim_filter_candidates = 'CosSim-FilterCandidates' diff --git a/src/lang_main/analysis/graphs.py b/src/lang_main/analysis/graphs.py index b282495..dde0248 100644 --- a/src/lang_main/analysis/graphs.py +++ b/src/lang_main/analysis/graphs.py @@ -1,3 +1,5 @@ +from __future__ import annotations + import copy import sys import typing @@ -169,6 +171,90 @@ def convert_graph_to_cytoscape( return cyto_data, weight_metadata +def filter_graph_by_edge_weight( + graph: TokenGraph, + bound_lower: int | None, + bound_upper: int | None, +) -> TokenGraph: + """filters all edges which are within the provided bounds + + Parameters + ---------- + bound_lower : int | None + lower bound for edge weights, edges with weight equal to this value are retained + bound_upper : int | None + upper bound for edge weights, edges with weight equal to this value are retained + + Returns + ------- + TokenGraph + a copy of the graph with filtered edges + """ + original_graph_edges = copy.deepcopy(graph.edges) + filtered_graph = graph.copy() + + if not any([bound_lower, bound_upper]): + logger.warning('No bounds provided, returning original graph.') + return filtered_graph + + for edge in original_graph_edges: + weight = typing.cast(int, filtered_graph[edge[0]][edge[1]]['weight']) + if bound_lower is not None and weight < bound_lower: + filtered_graph.remove_edge(edge[0], edge[1]) + if bound_upper is not None and weight > bound_upper: + filtered_graph.remove_edge(edge[0], edge[1]) + + if filtered_graph._undirected is not None: + filtered_graph.to_undirected(inplace=True, logging=False) + + filtered_graph.update_metadata(logging=False) + + return filtered_graph + + +def filter_graph_by_node_degree( + graph: TokenGraph, + bound_lower: int | None, + bound_upper: int | None, +) -> TokenGraph: + """filters all nodes which are within the provided bounds by their degree + + Parameters + ---------- + bound_lower : int | None + lower bound for node degree, nodes with degree equal to this value are retained + bound_upper : int | None + upper bound for node degree, nodes with degree equal to this value are retained + + Returns + ------- + TokenGraph + a copy of the graph with filtered nodes + """ + # filter nodes by degree + original_graph_nodes = copy.deepcopy(graph.nodes) + filtered_graph = graph.copy() + + if not any([bound_lower, bound_upper]): + logger.warning('No bounds provided, returning original graph.') + return filtered_graph + + for node in original_graph_nodes: + degree = filtered_graph.degree[node] # type: ignore + if bound_lower is not None and degree < bound_lower: + filtered_graph.remove_node(node) + if bound_upper is not None and degree > bound_upper: + filtered_graph.remove_node(node) + + if filtered_graph._undirected is not None: + filtered_graph.to_undirected(inplace=True, logging=False) + + filtered_graph.update_metadata(logging=False) + + return filtered_graph + + +# ** --------------------------------------- class TokenGraph(DiGraph): def __init__( self, @@ -286,87 +372,6 @@ class TokenGraph(DiGraph): graph=self._undirected, logging=logging ) - def filter_by_edge_weight( - self, - bound_lower: int | None, - bound_upper: int | None, - ) -> Self: - """filters all edges which are within the provided bounds - - Parameters - ---------- - bound_lower : int | None - lower bound for edge weights, edges with weight equal to this value are retained - bound_upper : int | None - upper bound for edge weights, edges with weight equal to this value are retained - - Returns - ------- - Self - a copy of the graph with filtered edges - """ - original_graph_edges = copy.deepcopy(self.edges) - filtered_graph = self.copy() - - if not any([bound_lower, bound_upper]): - logger.warning('No bounds provided, returning original graph.') - return filtered_graph - - for edge in original_graph_edges: - weight = typing.cast(int, filtered_graph[edge[0]][edge[1]]['weight']) - if bound_lower is not None and weight < bound_lower: - filtered_graph.remove_edge(edge[0], edge[1]) - if bound_upper is not None and weight > bound_upper: - filtered_graph.remove_edge(edge[0], edge[1]) - - if filtered_graph._undirected is not None: - filtered_graph.to_undirected(inplace=True, logging=False) - - filtered_graph.update_metadata(logging=False) - - return filtered_graph - - def filter_by_node_degree( - self, - bound_lower: int | None, - bound_upper: int | None, - ) -> Self: - """filters all nodes which are within the provided bounds by their degree - - Parameters - ---------- - bound_lower : int | None - lower bound for node degree, nodes with degree equal to this value are retained - bound_upper : int | None - upper bound for node degree, nodes with degree equal to this value are retained - - Returns - ------- - Self - a copy of the graph with filtered nodes - """ - # filter nodes by degree - original_graph_nodes = copy.deepcopy(self.nodes) - filtered_graph = self.copy() - - if not any([bound_lower, bound_upper]): - logger.warning('No bounds provided, returning original graph.') - return filtered_graph - - for node in original_graph_nodes: - degree = filtered_graph.degree[node] # type: ignore - if bound_lower is not None and degree < bound_lower: - filtered_graph.remove_node(node) - if bound_upper is not None and degree > bound_upper: - filtered_graph.remove_node(node) - - if filtered_graph._undirected is not None: - filtered_graph.to_undirected(inplace=True, logging=False) - - filtered_graph.update_metadata(logging=False) - - return filtered_graph - def _save_prepare( self, path: Path, @@ -379,14 +384,13 @@ class TokenGraph(DiGraph): return saving_path - def save_graph( + def to_GraphML( self, path: Path, filename: str | None = None, directed: bool = False, ) -> None: - """save one of the stored graphs to disk file, - currently only GraphML format is supported + """save one of the stored graphs to GraphML format on disk, Parameters ---------- diff --git a/src/lang_main/analysis/preprocessing.py b/src/lang_main/analysis/preprocessing.py index 65ce4dc..54a9f93 100644 --- a/src/lang_main/analysis/preprocessing.py +++ b/src/lang_main/analysis/preprocessing.py @@ -22,7 +22,7 @@ from lang_main.analysis.shared import ( similar_index_groups, ) from lang_main.loggers import logger_preprocess as logger -from lang_main.pipelines.base import BasePipeline +from lang_main.pipelines.base import Pipeline from lang_main.types import Embedding, PandasIndex # ** RE patterns @@ -119,10 +119,9 @@ def remove_duplicates( ).copy() logger.info('Removed all duplicates from dataset successfully.') logger.info( - ( - f'New Dataset properties: number of entries: {len(wo_duplicates)}, ' - f'number of features {len(wo_duplicates.columns)}' - ) + 'New Dataset properties: number of entries: %d, number of features %d', + len(wo_duplicates), + len(wo_duplicates.columns), ) return (wo_duplicates,) @@ -176,6 +175,7 @@ def clean_string_slim(string: str) -> str: string = pattern_special_chars.sub(' ', string) string = pattern_repeated_chars.sub(r'\1', string) # string = pattern_dates.sub('', string) + # dates are used for context, should not be removed at this stage string = pattern_whitespace.sub(' ', string) # remove whitespaces at the beginning and the end string = string.strip() @@ -241,11 +241,84 @@ def analyse_feature( return (result_df,) +# ** pre-filter +def numeric_pre_filter_feature( + data: DataFrame, + feature: str, + bound_lower: int | None, + bound_upper: int | None, +) -> tuple[DataFrame]: + if not any([bound_lower, bound_upper]): + raise ValueError('No bounds for filtering provided') + + data = data.copy() + if bound_lower is None: + bound_lower = cast(int, data[feature].min()) + if bound_upper is None: + bound_upper = cast(int, data[feature].max()) + + filter_lower = data[feature] >= bound_lower + filter_upper = data[feature] <= bound_upper + filter = filter_lower & filter_upper + + data = data.loc[filter] + + return (data,) + + # ** embedding based similarity # following functions used to identify similar entries to have # a more robust identification of duplicates negating negative side effects # of several disturbances like typos, escape characters, etc. # build mapping of embeddings for given model +def merge_similarity_dupl( + data: DataFrame, + model: SentenceTransformer, + cos_sim_threshold: float, +) -> tuple[DataFrame]: + logger.info('Start merging of similarity candidates...') + + # data + merged_data = data.copy() + model_input = merged_data['entry'] + candidates_idx = candidates_by_index( + data_model_input=model_input, + model=model, + cos_sim_threshold=cos_sim_threshold, + ) + # graph of similar ids + similar_id_graph, _ = similar_index_connection_graph(candidates_idx) + + for similar_id_group in similar_index_groups(similar_id_graph): + similar_id_group = list(similar_id_group) + similar_data = merged_data.loc[similar_id_group, :] + # keep first entry with max number occurrences, then number of + # associated objects, then length of entry + similar_data = similar_data.sort_values( + by=['num_occur', 'num_assoc_obj_ids', 'len'], + ascending=[False, False, False], + ) + # merge information to first entry + data_idx = cast(PandasIndex, similar_data.index[0]) + similar_data.at[data_idx, 'num_occur'] = similar_data['num_occur'].sum() + assoc_obj_ids = similar_data['assoc_obj_ids'].to_numpy() + assoc_obj_ids = np.concatenate(assoc_obj_ids) + assoc_obj_ids = np.unique(assoc_obj_ids) + similar_data.at[data_idx, 'assoc_obj_ids'] = assoc_obj_ids + similar_data.at[data_idx, 'num_assoc_obj_ids'] = len(assoc_obj_ids) + # remaining indices, should be removed + similar_id_group.remove(data_idx) + merged_similar_data = similar_data.drop(index=similar_id_group) + # update entry in main dataset, drop remaining entries + merged_data.update(merged_similar_data) + merged_data = merged_data.drop(index=similar_id_group) + + logger.info('Similarity candidates merged successfully.') + + return (merged_data,) + + +##################################################################### def build_embedding_map( data: Series, model: GermanSpacyModel | SentenceTransformer, @@ -373,7 +446,7 @@ def list_cosSim_dupl_candidates( save_candidates: bool = False, saving_path: Path | None = None, filename: str = 'CosSim-FilterCandidates', - pipeline: BasePipeline | None = None, + pipeline: Pipeline | None = None, ) -> tuple[list[tuple[PandasIndex, PandasIndex]], dict[int, tuple[Embedding, str]]]: """providing an overview of candidates with a similarity score greater than given threshold; more suitable for debugging purposes @@ -465,53 +538,6 @@ def similar_ids_groups( """ -def merge_similarity_dupl( - data: DataFrame, - model: SentenceTransformer, - cos_sim_threshold: float, -) -> tuple[DataFrame]: - logger.info('Start merging of similarity candidates...') - - # data - merged_data = data.copy() - model_input = merged_data['entry'] - candidates_idx = candidates_by_index( - data_model_input=model_input, - model=model, - cos_sim_threshold=cos_sim_threshold, - ) - # graph of similar ids - similar_id_graph, _ = similar_index_connection_graph(candidates_idx) - - for similar_id_group in similar_index_groups(similar_id_graph): - similar_id_group = list(similar_id_group) - similar_data = merged_data.loc[similar_id_group, :] - # keep first entry with max number occurrences, then number of - # associated objects, then length of entry - similar_data = similar_data.sort_values( - by=['num_occur', 'num_assoc_obj_ids', 'len'], - ascending=[False, False, False], - ) - # merge information to first entry - data_idx = cast(PandasIndex, similar_data.index[0]) - similar_data.at[data_idx, 'num_occur'] = similar_data['num_occur'].sum() - assoc_obj_ids = similar_data['assoc_obj_ids'].to_numpy() - assoc_obj_ids = np.concatenate(assoc_obj_ids) - assoc_obj_ids = np.unique(assoc_obj_ids) - similar_data.at[data_idx, 'assoc_obj_ids'] = assoc_obj_ids - similar_data.at[data_idx, 'num_assoc_obj_ids'] = len(assoc_obj_ids) - # remaining indices, should be removed - similar_id_group.remove(data_idx) - merged_similar_data = similar_data.drop(index=similar_id_group) - # update entry in main dataset, drop remaining entries - merged_data.update(merged_similar_data) - merged_data = merged_data.drop(index=similar_id_group) - - logger.info('Similarity candidates merged successfully.') - - return (merged_data.copy(),) - - # merge duplicates def merge_similarity_dupl_old( data: DataFrame, diff --git a/src/lang_main/constants.py b/src/lang_main/constants.py index 62e3b0d..40e37f4 100644 --- a/src/lang_main/constants.py +++ b/src/lang_main/constants.py @@ -24,13 +24,13 @@ PATH_TO_DATASET: Final[Path] = path_dataset_conf.resolve() # if not PATH_TO_DATASET.exists(): # raise FileNotFoundError(f'Dataset path >>{PATH_TO_DATASET}<< does not exist.') # ** control -DO_PREPROCESSING: Final[bool] = CONFIG['control']['preprocessing'] +# DO_PREPROCESSING: Final[bool] = CONFIG['control']['preprocessing'] SKIP_PREPROCESSING: Final[bool] = CONFIG['control']['preprocessing_skip'] -DO_TOKEN_ANALYSIS: Final[bool] = CONFIG['control']['token_analysis'] +# DO_TOKEN_ANALYSIS: Final[bool] = CONFIG['control']['token_analysis'] SKIP_TOKEN_ANALYSIS: Final[bool] = CONFIG['control']['token_analysis_skip'] -DO_GRAPH_POSTPROCESSING: Final[bool] = CONFIG['control']['graph_postprocessing'] +# DO_GRAPH_POSTPROCESSING: Final[bool] = CONFIG['control']['graph_postprocessing'] SKIP_GRAPH_POSTPROCESSING: Final[bool] = CONFIG['control']['graph_postprocessing_skip'] -DO_TIME_ANALYSIS: Final[bool] = CONFIG['control']['time_analysis'] +# DO_TIME_ANALYSIS: Final[bool] = CONFIG['control']['time_analysis'] SKIP_TIME_ANALYSIS: Final[bool] = CONFIG['control']['time_analysis_skip'] # ** models @@ -66,11 +66,11 @@ UNIQUE_CRITERION_FEATURE: Final[str] = CONFIG['time_analysis']['uniqueness'][ ] FEATURE_NAME_OBJ_ID: Final[str] = CONFIG['time_analysis']['uniqueness']['feature_name_obj_id'] # ** time_analysis.model_input -MODEL_INPUT_FEATURES: Final[tuple[str]] = tuple( +MODEL_INPUT_FEATURES: Final[tuple[str, ...]] = tuple( CONFIG['time_analysis']['model_input']['input_features'] ) ACTIVITY_FEATURE: Final[str] = CONFIG['time_analysis']['model_input']['activity_feature'] -ACTIVITY_TYPES: Final[tuple[str]] = tuple( +ACTIVITY_TYPES: Final[tuple[str, ...]] = tuple( CONFIG['time_analysis']['model_input']['activity_types'] ) THRESHOLD_NUM_ACTIVITIES: Final[int] = CONFIG['time_analysis']['model_input'][ diff --git a/src/lang_main/io.py b/src/lang_main/io.py index bc19a1a..9107d72 100644 --- a/src/lang_main/io.py +++ b/src/lang_main/io.py @@ -1,4 +1,3 @@ -import os import pickle import shutil import tomllib @@ -22,7 +21,7 @@ def create_saving_folder( if overwrite_existing: # overwrite if desired (deletes whole path and re-creates it) shutil.rmtree(saving_path_folder) - os.makedirs(saving_path_folder) + saving_path_folder.mkdir(parents=True) else: logger.info( ( @@ -62,56 +61,14 @@ def load_pickle( return obj -# TODO: remove, too specialised for common application -""" -def filter_candidates_idx( - data_model_input: Series, - model: SentenceTransformer, - cos_sim_threshold: float, -) -> Iterator[tuple[PandasIndex, PandasIndex]]: - common function to filter candidate indices based on cosine similarity - using SentenceTransformer model in batch mode, - feed of data as Series to retain information about indices of entries - - Parameters - ---------- - data_model_input : Series - containing indices and text entries to process - model : SentenceTransformer - necessary SentenceTransformer model to encode text entries - cos_sim_threshold : float - threshold for cosine similarity to filter candidates - - Yields - ------ - Iterator[tuple[PandasIndex, PandasIndex]] - index pairs which meet the cosine similarity threshold - - - # embeddings - batch = typing.cast(list[str], - data_model_input.to_list()) - embds = typing.cast(Tensor, - model.encode( - batch, - convert_to_numpy=False, - convert_to_tensor=True, - show_progress_bar=False, - )) - - # cosine similarity - cos_sim = typing.cast( - npt.NDArray, - sentence_transformers.util.cos_sim(embds, embds).numpy() - ) - np.fill_diagonal(cos_sim, 0.) - cos_sim = np.triu(cos_sim) - cos_sim_idx = np.argwhere(cos_sim >= cos_sim_threshold) - - for idx_array in cos_sim_idx: - idx_pair = typing.cast( - tuple[np.int64, np.int64], - tuple(data_model_input.index[idx] for idx in idx_array) +def get_entry_point( + saving_path: Path, + filename: str, +) -> Path: + entry_point_path = (saving_path / filename).with_suffix('.pkl') + if not entry_point_path.exists(): + raise FileNotFoundError( + f'Could not find provided entry data under path: >>{entry_point_path}<<' ) - yield idx_pair -""" + + return entry_point_path diff --git a/src/lang_main/lang_main_config.toml b/src/lang_main/lang_main_config.toml index c694e25..ef7dbbc 100644 --- a/src/lang_main/lang_main_config.toml +++ b/src/lang_main/lang_main_config.toml @@ -9,14 +9,12 @@ dataset = './01_2_Rohdaten_neu/Export4.csv' #results = './results/Export7_trunc/' #dataset = './01_03_Rohdaten_202403/Export7_trunc.csv' +# only debugging features, production-ready pipelines should always +# be fully executed [control] -preprocessing = true preprocessing_skip = false -token_analysis = false token_analysis_skip = false -graph_postprocessing = false graph_postprocessing_skip = false -time_analysis = false time_analysis_skip = false #[export_filenames] @@ -42,9 +40,12 @@ criterion_feature = 'HObjektText' feature_name_obj_id = 'ObjektID' [time_analysis.model_input] +# input_features = [ +# 'VorgangsTypName', +# 'VorgangsArtText', +# 'VorgangsBeschreibung', +# ] input_features = [ - 'VorgangsTypName', - 'VorgangsArtText', 'VorgangsBeschreibung', ] activity_feature = 'VorgangsTypName' diff --git a/src/lang_main/pipelines/base.py b/src/lang_main/pipelines/base.py index d1da557..2cc25a7 100644 --- a/src/lang_main/pipelines/base.py +++ b/src/lang_main/pipelines/base.py @@ -1,9 +1,14 @@ +from __future__ import annotations + +from abc import ABC, abstractmethod from collections.abc import Callable from pathlib import Path -from typing import Any +from typing import Any, Never, cast +from typing_extensions import override -from lang_main.loggers import logger_pipelines as logger from lang_main.io import load_pickle, save_pickle +from lang_main.loggers import logger_pipelines as logger +from lang_main.types import ResultHandling # ** pipelines to perform given actions on dataset in a customisable manner @@ -12,7 +17,18 @@ class NoPerformableActionError(Exception): """Error describing that no action is available in the current pipeline""" -class BasePipeline: +class WrongActionTypeError(Exception): + """Error raised if added action type is not supported by corresponding pipeline""" + + +class OutputInPipelineContainerError(Exception): + """Error raised if an output was detected by one of the performed + actions in a PipelineContainer. Each action in a PipelineContainer is itself a + procedure which does not have any parameters or return values and should therefore not + return any values.""" + + +class BasePipeline(ABC): def __init__( self, name: str, @@ -25,18 +41,12 @@ class BasePipeline: self.name = name # working directory for pipeline == output path self.working_dir = working_dir - # if not self.working_dir.exists(): - # self.working_dir.mkdir(parents=True) # container for actions to perform during pass self.actions: list[Callable] = [] self.action_names: list[str] = [] - self.actions_kwargs: list[dict[str, Any]] = [] - self.is_save_result: list[bool] = [] # progress tracking, start at 1 self.curr_proc_idx: int = 1 - # intermediate result - self._intermediate_result: Any | None = None def __repr__(self) -> str: return ( @@ -44,15 +54,132 @@ class BasePipeline: f'working dir: {self.working_dir}, contents: {self.action_names})' ) - @property - def intermediate_result(self) -> Any: - return self._intermediate_result + def panic_wrong_action_type( + self, + action: Any, + compatible_type: str, + ) -> Never: + raise WrongActionTypeError( + ( + f'Action must be of type {compatible_type}, ' + f'but is of type >>{type(action)}<<.' + ) + ) + def prep_run(self) -> None: + logger.info('Starting pipeline >>%s<<...', self.name) + # progress tracking + self.curr_proc_idx = 1 + # check if performable actions available + if len(self.actions) == 0: + raise NoPerformableActionError( + 'The pipeline does not contain any performable actions.' + ) + + def post_run(self) -> None: + logger.info( + 'Processing pipeline >>%s<< successfully ended after %d steps.', + self.name, + (self.curr_proc_idx - 1), + ) + + @abstractmethod + def add(self) -> None: ... + + @abstractmethod + def logic(self) -> None: ... + + def run(self, *args, **kwargs) -> Any: + self.prep_run() + ret = self.logic(*args, **kwargs) + self.post_run() + return ret + + +class PipelineContainer(BasePipeline): + def __init__( + self, + name: str, + working_dir: Path, + ) -> None: + super().__init__(name=name, working_dir=working_dir) + + self.action_skip: list[bool] = [] + + @override + def add( + self, + action: Callable, + skip: bool = False, + ) -> None: + if isinstance(action, Callable): + self.actions.append(action) + self.action_names.append(action.__name__) + self.action_skip.append(skip) + else: + self.panic_wrong_action_type(action=action, compatible_type=Callable.__name__) + + @override + def logic(self) -> None: + for idx, (action, action_name) in enumerate(zip(self.actions, self.action_names)): + # loading + if self.action_skip[idx]: + logger.info('[No Calculation] Skipping >>%s<<...', action_name) + self.curr_proc_idx += 1 + continue + # calculation + ret = action() + if ret is not None: + raise OutputInPipelineContainerError( + ( + f'Output in PipelineContainers not allowed. Action {action_name} ' + f'returned values in Container {self.name}.' + ) + ) + # processing tracking + self.curr_proc_idx += 1 + + +class Pipeline(BasePipeline): + def __init__( + self, + name: str, + working_dir: Path, + ) -> None: + # init base class + super().__init__(name=name, working_dir=working_dir) + + # name of pipeline + self.name = name + # working directory for pipeline == output path + self.working_dir = working_dir + # if not self.working_dir.exists(): + # self.working_dir.mkdir(parents=True) + + # container for actions to perform during pass + self.actions_kwargs: list[dict[str, Any]] = [] + self.save_results: ResultHandling = [] + self.load_results: ResultHandling = [] + # intermediate result + self._intermediate_result: tuple[Any, ...] | None = None + + def __repr__(self) -> str: + return ( + f'{self.__class__.__name__}(name: {self.name}, ' + f'working dir: {self.working_dir}, contents: {self.action_names})' + ) + + # @property + # def intermediate_result(self) -> tuple[Any, ...] | None: + # return self._intermediate_result + @override def add( self, action: Callable, action_kwargs: dict[str, Any] = {}, save_result: bool = False, + load_result: bool = False, + filename: str | None = None, ) -> None: # check explicitly for function type # if isinstance(action, FunctionType): @@ -60,11 +187,10 @@ class BasePipeline: self.actions.append(action) self.action_names.append(action.__name__) self.actions_kwargs.append(action_kwargs.copy()) - self.is_save_result.append(save_result) + self.save_results.append((save_result, filename)) + self.load_results.append((load_result, filename)) else: - raise TypeError( - f'Action must be custom function, but is of type >>{type(action)}<<.' - ) + self.panic_wrong_action_type(action=action, compatible_type=Callable.__name__) # TODO: add multiple entries by utilising simple add method """ @@ -88,57 +214,84 @@ class BasePipeline: f"but is of type >>{type(action)}<<.")) """ - def save_curr_result( + def get_result_path( self, - filename: str, + action_idx: int, + filename: str | None, + ) -> tuple[Path, str]: + action_name = self.action_names[action_idx] + if filename is None: + target_filename = f'Pipe-{self.name}_Step-{self.curr_proc_idx}_{action_name}' + else: + target_filename = filename + target_path = self.working_dir.joinpath(target_filename).with_suffix('.pkl') + return target_path, action_name + + def load_step( + self, + action_idx: int, + filename: str | None, + ) -> tuple[Any, ...]: + target_path, action_name = self.get_result_path(action_idx, filename) + + if not target_path.exists(): + raise FileNotFoundError( + ( + f'No intermediate results for action >>{action_name}<< ' + f'under >>{target_path}<< found' + ) + ) + # results should be tuple, but that is not guaranteed + result_loaded = cast(tuple[Any, ...], load_pickle(target_path)) + if not isinstance(result_loaded, tuple): + raise TypeError(f'Loaded results must be tuple, not {type(result_loaded)}') + + return result_loaded + + def save_step( + self, + action_idx: int, + filename: str | None, ) -> None: - target_filename = f'Pipe-{self.name}_Step-{self.curr_proc_idx}_' + filename - target_path = self.working_dir.joinpath(target_filename) - target_path = target_path.with_suffix('.pkl') + # target_filename = f'Pipe-{self.name}_Step-{self.curr_proc_idx}_' + filename + # target_path = self.working_dir.joinpath(target_filename) + # target_path = target_path.with_suffix('.pkl') + target_path, _ = self.get_result_path(action_idx, filename) # saving file locally save_pickle(obj=self._intermediate_result, path=target_path) - def load_intermediate_result( - self, - saving_path: str, - filename: str, - ) -> tuple[Any, ...]: - target_path = Path(saving_path + filename).with_suffix('.pkl') - # loading DataFrame or Series from pickle - data = load_pickle(target_path) - - return data - - def prep_run(self) -> None: - logger.info('Starting processing pipeline >>%s<<...', self.name) - # progress tracking - self.curr_proc_idx = 1 - # check if performable actions available - if len(self.actions) == 0: - raise NoPerformableActionError( - 'The pipeline does not contain any performable actions.' - ) - - def run( + @override + def logic( self, starting_values: tuple[Any, ...], ) -> tuple[Any, ...]: - # prepare start - self.prep_run() - for idx, (action, action_kwargs) in enumerate(zip(self.actions, self.actions_kwargs)): + # loading + if self.load_results[idx][0]: + filename = self.load_results[idx][1] + ret = self.load_step(action_idx=idx, filename=filename) + logger.info( + '[No Calculation] Loaded result for action >>%s<< successfully', + self.action_names[idx], + ) + self.curr_proc_idx += 1 + continue + # calculation if idx == 0: ret = action(*starting_values, **action_kwargs) else: ret = action(*ret, **action_kwargs) + + if not isinstance(ret, tuple): + ret = (ret,) + ret = cast(tuple[Any, ...], ret) # save intermediate result self._intermediate_result = ret - # check if result should be saved locally - if self.is_save_result[idx]: - self.save_curr_result(filename=self.action_names[idx]) + # saving result locally, always save last action + if self.save_results[idx][0] or idx == (len(self.actions) - 1): + filename = self.save_results[idx][1] + self.save_step(action_idx=idx, filename=filename) # processing tracking self.curr_proc_idx += 1 - logger.info('Processing pipeline >>%s<< successfully ended.', self.name) - return ret diff --git a/src/lang_main/pipelines/predefined.py b/src/lang_main/pipelines/predefined.py index b40a456..a130532 100644 --- a/src/lang_main/pipelines/predefined.py +++ b/src/lang_main/pipelines/predefined.py @@ -1,9 +1,11 @@ +from lang_main.analysis import graphs from lang_main.analysis.preprocessing import ( analyse_feature, clean_string_slim, entry_wise_cleansing, load_raw_data, merge_similarity_dupl, + numeric_pre_filter_feature, remove_duplicates, remove_NA, ) @@ -23,40 +25,50 @@ from lang_main.constants import ( SAVE_PATH_FOLDER, SPCY_MODEL, STFR_MODEL, + THRESHOLD_AMOUNT_CHARACTERS, + THRESHOLD_EDGE_WEIGHT, THRESHOLD_NUM_ACTIVITIES, THRESHOLD_SIMILARITY, THRESHOLD_TIMELINE_SIMILARITY, THRESHOLD_UNIQUE_TEXTS, UNIQUE_CRITERION_FEATURE, ) -from lang_main.pipelines.base import BasePipeline +from lang_main.pipelines.base import Pipeline +from lang_main.types import EntryPoints + # ** pipeline configuration # ** target feature preparation -pipe_target_feat = BasePipeline(name='TargetFeature', working_dir=SAVE_PATH_FOLDER) -pipe_target_feat.add( - load_raw_data, - { - 'date_cols': DATE_COLS, - }, -) -pipe_target_feat.add(remove_duplicates) -pipe_target_feat.add(remove_NA, save_result=True) -pipe_target_feat.add( - entry_wise_cleansing, - { - 'target_feature': 'VorgangsBeschreibung', - 'cleansing_func': clean_string_slim, - }, - save_result=True, -) -pipe_target_feat.add( - analyse_feature, - { - 'target_feature': 'VorgangsBeschreibung', - }, - save_result=True, -) +def build_base_target_feature_pipe() -> Pipeline: + pipe_target_feat = Pipeline(name='TargetFeature', working_dir=SAVE_PATH_FOLDER) + pipe_target_feat.add( + load_raw_data, + { + 'date_cols': DATE_COLS, + }, + ) + pipe_target_feat.add(remove_duplicates) + pipe_target_feat.add(remove_NA, save_result=True) + pipe_target_feat.add( + entry_wise_cleansing, + { + 'target_feature': 'VorgangsBeschreibung', + 'cleansing_func': clean_string_slim, + }, + save_result=True, + filename=EntryPoints.TIMELINE, + ) + pipe_target_feat.add( + analyse_feature, + { + 'target_feature': 'VorgangsBeschreibung', + }, + save_result=True, + ) + + return pipe_target_feat + + # output: DataFrame containing target feature with # number of occurrences and associated ObjectIDs @@ -81,68 +93,114 @@ pipe_target_feat.add( # save_result=True, # ) + # ** Merge duplicates -pipe_merge = BasePipeline(name='Merge_Duplicates', working_dir=SAVE_PATH_FOLDER) -# pipe_merge.add(merge_similarity_dupl, save_result=True) -pipe_merge.add( - merge_similarity_dupl, - { - 'model': STFR_MODEL, - 'cos_sim_threshold': THRESHOLD_SIMILARITY, - }, - save_result=True, -) +def build_merge_duplicates_pipe() -> Pipeline: + pipe_merge = Pipeline(name='Merge_Duplicates', working_dir=SAVE_PATH_FOLDER) + # pipe_merge.add(merge_similarity_dupl, save_result=True) + pipe_merge.add( + numeric_pre_filter_feature, + { + 'feature': 'len', + 'bound_lower': THRESHOLD_AMOUNT_CHARACTERS, + 'bound_upper': None, + }, + ) + pipe_merge.add( + merge_similarity_dupl, + { + 'model': STFR_MODEL, + 'cos_sim_threshold': THRESHOLD_SIMILARITY, + }, + save_result=True, + filename=EntryPoints.TOKEN_ANALYSIS, + ) + + return pipe_merge + # ** token analysis -pipe_token_analysis = BasePipeline(name='Token_Analysis', working_dir=SAVE_PATH_FOLDER) -pipe_token_analysis.add( - build_token_graph, - { - 'model': SPCY_MODEL, - 'target_feature': 'entry', - 'weights_feature': 'num_occur', - 'batch_idx_feature': 'batched_idxs', - 'build_map': True, - 'batch_size_model': 50, - }, - save_result=True, -) +def build_tk_graph_pipe() -> Pipeline: + pipe_token_analysis = Pipeline(name='Token_Analysis', working_dir=SAVE_PATH_FOLDER) + pipe_token_analysis.add( + build_token_graph, + { + 'model': SPCY_MODEL, + 'target_feature': 'entry', + 'weights_feature': 'num_occur', + 'batch_idx_feature': 'batched_idxs', + 'build_map': False, + 'batch_size_model': 50, + }, + save_result=True, + filename=EntryPoints.TK_GRAPH_POST, + ) + + return pipe_token_analysis + + +def build_tk_graph_post_pipe() -> Pipeline: + pipe_graph_postprocessing = Pipeline( + name='Graph_Postprocessing', working_dir=SAVE_PATH_FOLDER + ) + pipe_graph_postprocessing.add( + graphs.filter_graph_by_edge_weight, + { + 'bound_lower': THRESHOLD_EDGE_WEIGHT, + 'bound_upper': None, + }, + ) + pipe_graph_postprocessing.add( + graphs.filter_graph_by_node_degree, + { + 'bound_lower': 1, + 'bound_upper': None, + }, + save_result=True, + filename=EntryPoints.TK_GRAPH_ANALYSIS, + ) + + return pipe_graph_postprocessing # ** timeline analysis -pipe_timeline = BasePipeline(name='Timeline_Analysis', working_dir=SAVE_PATH_FOLDER) -pipe_timeline.add( - remove_non_relevant_obj_ids, - { - 'thresh_unique_feat_per_id': THRESHOLD_UNIQUE_TEXTS, - 'feature_uniqueness': UNIQUE_CRITERION_FEATURE, - 'feature_obj_id': FEATURE_NAME_OBJ_ID, - }, - save_result=True, -) -pipe_timeline.add( - generate_model_input, - { - 'target_feature_name': 'nlp_model_input', - 'model_input_features': MODEL_INPUT_FEATURES, - }, -) -pipe_timeline.add( - filter_activities_per_obj_id, - { - 'activity_feature': ACTIVITY_FEATURE, - 'relevant_activity_types': ACTIVITY_TYPES, - 'feature_obj_id': FEATURE_NAME_OBJ_ID, - 'threshold_num_activities': THRESHOLD_NUM_ACTIVITIES, - }, -) -pipe_timeline.add( - get_timeline_candidates, - { - 'model': STFR_MODEL, - 'cos_sim_threshold': THRESHOLD_TIMELINE_SIMILARITY, - 'feature_obj_id': FEATURE_NAME_OBJ_ID, - 'model_input_feature': 'nlp_model_input', - }, - save_result=True, -) +def build_timeline_pipe() -> Pipeline: + pipe_timeline = Pipeline(name='Timeline_Analysis', working_dir=SAVE_PATH_FOLDER) + pipe_timeline.add( + remove_non_relevant_obj_ids, + { + 'thresh_unique_feat_per_id': THRESHOLD_UNIQUE_TEXTS, + 'feature_uniqueness': UNIQUE_CRITERION_FEATURE, + 'feature_obj_id': FEATURE_NAME_OBJ_ID, + }, + save_result=True, + ) + pipe_timeline.add( + generate_model_input, + { + 'target_feature_name': 'nlp_model_input', + 'model_input_features': MODEL_INPUT_FEATURES, + }, + ) + pipe_timeline.add( + filter_activities_per_obj_id, + { + 'activity_feature': ACTIVITY_FEATURE, + 'relevant_activity_types': ACTIVITY_TYPES, + 'feature_obj_id': FEATURE_NAME_OBJ_ID, + 'threshold_num_activities': THRESHOLD_NUM_ACTIVITIES, + }, + ) + pipe_timeline.add( + get_timeline_candidates, + { + 'model': STFR_MODEL, + 'cos_sim_threshold': THRESHOLD_TIMELINE_SIMILARITY, + 'feature_obj_id': FEATURE_NAME_OBJ_ID, + 'model_input_feature': 'nlp_model_input', + }, + save_result=True, + filename=EntryPoints.TIMELINE_POST, + ) + + return pipe_timeline diff --git a/src/lang_main/types.py b/src/lang_main/types.py index 731a630..baf2dc1 100644 --- a/src/lang_main/types.py +++ b/src/lang_main/types.py @@ -17,8 +17,20 @@ class LoggingLevels(enum.IntEnum): # ** devices class STFRDeviceTypes(enum.StrEnum): - CPU = 'cpu' - GPU = 'cuda' + CPU = enum.auto() + GPU = enum.auto() + + +# ** pipelines +ResultHandling: TypeAlias = list[tuple[bool, str | None]] + + +class EntryPoints(enum.StrEnum): + TIMELINE = 'TIMELINE' + TIMELINE_POST = 'TIMELINE_POSTPROCESSING' + TK_GRAPH_POST = 'TK-GRAPH_POSTPROCESSING' + TK_GRAPH_ANALYSIS = 'TK-GRAPH_ANALYSIS' + TOKEN_ANALYSIS = 'TOKEN_ANALYSIS' # ** datasets diff --git a/test-notebooks/misc.ipynb b/test-notebooks/misc.ipynb new file mode 100644 index 0000000..920cde4 --- /dev/null +++ b/test-notebooks/misc.ipynb @@ -0,0 +1,1687 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 7, + "id": "b9ec018c-dffc-420f-85b4-b792e3aebb17", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-06-19 11:10:00 +0000 | io:INFO | Loaded TOML config file successfully.\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "A:\\Arbeitsaufgaben\\lang-main\\.venv\\Lib\\site-packages\\transformers\\utils\\generic.py:441: UserWarning: torch.utils._pytree._register_pytree_node is deprecated. Please use torch.utils._pytree.register_pytree_node instead.\n", + " _torch_pytree._register_pytree_node(\n" + ] + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "from lang_main.analysis.preprocessing import numeric_pre_filter_feature" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "492f6106-b60b-47f3-bb82-7f831028a8d9", + "metadata": {}, + "outputs": [], + "source": [ + "data = {\n", + " 'col1': range(10),\n", + " 'col2': range(10),\n", + "}" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "966a6e04-6e4c-4962-a3b1-51370c1e1571", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
col1col2
000
111
222
333
444
555
666
777
888
999
\n", + "
" + ], + "text/plain": [ + " col1 col2\n", + "0 0 0\n", + "1 1 1\n", + "2 2 2\n", + "3 3 3\n", + "4 4 4\n", + "5 5 5\n", + "6 6 6\n", + "7 7 7\n", + "8 8 8\n", + "9 9 9" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df = pd.DataFrame.from_dict(data)\n", + "df" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "456fca6a-0ce6-4f81-bf3b-edf370670243", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "0675a24d-16f9-46b7-86da-140fcc664d8e", + "metadata": {}, + "outputs": [], + "source": [ + "d, = numeric_pre_filter_feature(df, 'col1', 3, 5)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "3092e20f-a2e3-42c3-afad-aa6f05a79d8e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
col1col2
333
444
555
\n", + "
" + ], + "text/plain": [ + " col1 col2\n", + "3 3 3\n", + "4 4 4\n", + "5 5 5" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "d" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e1ae2606-98d0-4554-86ae-c7cc830bc81d", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "b4377b3a-abfa-4154-b006-813d5625cbea", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "93896a5f-cb6c-4a17-9c17-818da4cd9584", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 False\n", + "3 True\n", + "4 True\n", + "Name: col1, dtype: bool" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f1 = df['col1'] > 2\n", + "f1" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "6752944d-4d20-486b-bbde-47f2a27a09e5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 True\n", + "1 True\n", + "2 True\n", + "3 True\n", + "4 False\n", + "Name: col1, dtype: bool" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f2 = df['col1'] < 4\n", + "f2" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "65bc71ca-4c23-49a8-ba54-3497e555978b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0 False\n", + "1 False\n", + "2 False\n", + "3 True\n", + "4 False\n", + "Name: col1, dtype: bool" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "f1 & f2" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "774c857f-d5d5-48f4-9064-9d0e4947d315", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "4" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df['col1'].max()" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "a6855e4d-c678-45cd-bb34-c413c4591146", + "metadata": {}, + "outputs": [], + "source": [ + "from collections.abc import Callable" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "7d449844-16d9-44cb-ae9f-700de74c5b1e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'Callable'" + ] + }, + "execution_count": 6, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "Callable.__name__" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "46a3897d-9910-426d-b5b8-c9c8f11b1b3d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
col1col2
000
111
222
333
444
555
666
777
888
999
\n", + "
" + ], + "text/plain": [ + " col1 col2\n", + "0 0 0\n", + "1 1 1\n", + "2 2 2\n", + "3 3 3\n", + "4 4 4\n", + "5 5 5\n", + "6 6 6\n", + "7 7 7\n", + "8 8 8\n", + "9 9 9" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "(df,)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "7017f5ae-6be9-4059-b41c-5f2ba4ad0202", + "metadata": {}, + "outputs": [], + "source": [ + "def test(ret):\n", + " print(ret)" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "043baf70-aa27-4412-9cc0-9fc12a916021", + "metadata": {}, + "outputs": [], + "source": [ + "import networkx as nx" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "e8f7d226-601d-4563-9103-642d012f0ebf", + "metadata": {}, + "outputs": [], + "source": [ + "G = nx.path_graph(5)" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "2642d9d9-dc9c-4f73-9a18-cb3a773c70e2", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "NodeView((0, 1, 2, 3, 4))" + ] + }, + "execution_count": 22, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "ebb4d78b-008c-4ca7-954b-ad6fb4320535", + "metadata": {}, + "outputs": [ + { + "ename": "TypeError", + "evalue": "test() takes 1 positional argument but 5 were given", + "output_type": "error", + "traceback": [ + "\u001b[1;31m---------------------------------------------------------------------------\u001b[0m", + "\u001b[1;31mTypeError\u001b[0m Traceback (most recent call last)", + "Cell \u001b[1;32mIn[23], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[43mtest\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mG\u001b[49m\u001b[43m)\u001b[49m\n", + "\u001b[1;31mTypeError\u001b[0m: test() takes 1 positional argument but 5 were given" + ] + } + ], + "source": [ + "test(*G)" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "f02f3099-19e8-4d24-8f8d-0d34aea4cf54", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Graph with 5 nodes and 4 edges\n" + ] + } + ], + "source": [ + "if not isinstance(G, tuple):\n", + " ret = (G,)\n", + "test(*ret)" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "500549ea-1142-4070-be16-a41bb51489cf", + "metadata": {}, + "outputs": [], + "source": [ + "t = True" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "79ed1f52-73a1-43b7-a5a4-6beceacd20fc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-2" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "~t" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "1902dd8d-4146-4095-8813-d26bbc84fdf9", + "metadata": {}, + "outputs": [], + "source": [ + "from pathlib import Path" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "51a6ee63-f08c-445b-92b5-4cc725dc91a9", + "metadata": {}, + "outputs": [], + "source": [ + "cwd = Path.cwd()" + ] + }, + { + "cell_type": "code", + "execution_count": 39, + "id": "8932d81b-99a4-4deb-87bf-af9de8b0013a", + "metadata": {}, + "outputs": [], + "source": [ + "results_pth = cwd.parent / 'scripts/results/test_20240619'" + ] + }, + { + "cell_type": "code", + "execution_count": 41, + "id": "7051d693-b3ce-4ca8-88bd-6034042efe5d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/Pipe-TargetFeature_Step-3_remove_NA.pkl'),\n", + " WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/TIMELINE.pkl'),\n", + " WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/Pipe-TargetFeature_Step-5_analyse_feature.pkl'),\n", + " WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/TOKEN_ANALYSIS.pkl'),\n", + " WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/TK-GRAPH_POSTPROCESSING.pkl'),\n", + " WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/TokenGraph.graphml'),\n", + " WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/TK-GRAPH_ANALYSIS.pkl'),\n", + " WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/TokenGraph-filtered.graphml'),\n", + " WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/Pipe-Timeline_Analysis_Step-1_remove_non_relevant_obj_ids.pkl'),\n", + " WindowsPath('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/TIMELINE_POSTPROCESSING.pkl')]" + ] + }, + "execution_count": 41, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "list(results_pth.glob('*'))" + ] + }, + { + "cell_type": "code", + "execution_count": 42, + "id": "ea0a8a4e-cf00-4d1e-ad9a-3bc80863d33b", + "metadata": {}, + "outputs": [], + "source": [ + "target = Path('A:/Arbeitsaufgaben/lang-main/scripts/results/test_20240619/TIMELINE_POSTPROCESSING.pkl')\n", + "assert target.exists()" + ] + }, + { + "cell_type": "code", + "execution_count": 43, + "id": "5a637d0d-ec66-4bd8-b047-e57c68663860", + "metadata": {}, + "outputs": [], + "source": [ + "from lang_main.io import load_pickle" + ] + }, + { + "cell_type": "code", + "execution_count": 44, + "id": "7f4e2797-ec6e-4421-8006-4a218b63ddf0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "2024-06-19 13:14:03 +0000 | io:INFO | Loaded file successfully.\n" + ] + } + ], + "source": [ + "ret = load_pickle(target)" + ] + }, + { + "cell_type": "code", + "execution_count": 46, + "id": "b3808e74-ba74-4b46-a64e-4f5f9f335868", + "metadata": { + "scrolled": true + }, + "outputs": [ + { + "data": { + "text/plain": [ + "2" + ] + }, + "execution_count": 46, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(ret)" + ] + }, + { + "cell_type": "code", + "execution_count": 47, + "id": "cc0e4dc4-504e-4442-8bb6-e3e604a4f701", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{1: ((8384, 452, 8398, 107864, 32988),\n", + " (780, 49325, 26519),\n", + " (10393, 1933),\n", + " (5438, 2607),\n", + " (12785, 3890, 37541, 7829),\n", + " (13906, 5499),\n", + " (6690, 68315, 115550),\n", + " (121315, 8127),\n", + " (22919, 11751),\n", + " (59632, 11761),\n", + " (90888, 100796, 11887),\n", + " (87480, 13109),\n", + " (14329, 17918),\n", + " (36691, 18532),\n", + " (29616, 76792),\n", + " (84034, 33859),\n", + " (36344, 56857),\n", + " (121760, 95085, 36686, 122066, 47476, 65786, 57563),\n", + " (40546, 65778),\n", + " (49393, 49636),\n", + " (53976, 117139, 55520),\n", + " (79962, 88540)),\n", + " 1654: ((111241,\n", + " 78986,\n", + " 6798,\n", + " 55952,\n", + " 1680,\n", + " 43411,\n", + " 43412,\n", + " 8084,\n", + " 122902,\n", + " 7579,\n", + " 2980,\n", + " 87479,\n", + " 119480,\n", + " 78778,\n", + " 66749,\n", + " 46790,\n", + " 57927,\n", + " 46791,\n", + " 1743,\n", + " 96080,\n", + " 57937,\n", + " 83,\n", + " 2774,\n", + " 98277,\n", + " 32229,\n", + " 67562,\n", + " 100461,\n", + " 4846,\n", + " 55024,\n", + " 117758),\n", + " (7552,\n", + " 8192,\n", + " 119558,\n", + " 647,\n", + " 2310,\n", + " 48781,\n", + " 66323,\n", + " 8214,\n", + " 5405,\n", + " 108961,\n", + " 91173,\n", + " 2985,\n", + " 3881,\n", + " 9917,\n", + " 66751,\n", + " 85442,\n", + " 118602,\n", + " 7243,\n", + " 62416,\n", + " 979,\n", + " 214,\n", + " 103,\n", + " 123111,\n", + " 81133,\n", + " 88558,\n", + " 14319,\n", + " 14834,\n", + " 2424,\n", + " 101497,\n", + " 25341,\n", + " 69375),\n", + " (85369, 1370),\n", + " (76317, 6063),\n", + " (6696, 113620, 50223),\n", + " (10859, 75412),\n", + " (121970, 11303),\n", + " (31352, 31590),\n", + " (34634, 121293),\n", + " (77686, 43639),\n", + " (108202, 48391),\n", + " (78155, 110755),\n", + " (78889, 117391),\n", + " (85960, 78895),\n", + " (87481, 106398),\n", + " (117081, 109158)),\n", + " 7: ((5120,\n", + " 87301,\n", + " 648,\n", + " 119560,\n", + " 74382,\n", + " 66583,\n", + " 7066,\n", + " 80671,\n", + " 122401,\n", + " 97316,\n", + " 120614,\n", + " 47659,\n", + " 46765,\n", + " 71729,\n", + " 49331,\n", + " 8380,\n", + " 54208,\n", + " 8642,\n", + " 80195,\n", + " 2120,\n", + " 122314,\n", + " 3788,\n", + " 87379,\n", + " 30421,\n", + " 121307,\n", + " 122336,\n", + " 123105,\n", + " 86118,\n", + " 81771,\n", + " 75118,\n", + " 4719,\n", + " 116977,\n", + " 5492,\n", + " 9590,\n", + " 9591,\n", + " 3963,\n", + " 9214),\n", + " (1002, 78291),\n", + " (52680, 1642),\n", + " (4633, 109068),\n", + " (5081, 65787, 72943),\n", + " (113995, 6068),\n", + " (100500, 8804),\n", + " (72251, 12548),\n", + " (18152, 123168),\n", + " (22694, 36783),\n", + " (107560, 39036, 107502, 41735),\n", + " (116905, 117242),\n", + " (122082, 122533)),\n", + " 151: ((65508, 61861, 18087, 8, 39858, 4437, 100283),\n", + " (128, 10478),\n", + " (38404,\n", + " 4619,\n", + " 120855,\n", + " 83484,\n", + " 47644,\n", + " 14884,\n", + " 59442,\n", + " 15932,\n", + " 93761,\n", + " 86091,\n", + " 24153,\n", + " 2138,\n", + " 47199,\n", + " 121969,\n", + " 1650,\n", + " 1656,\n", + " 68219,\n", + " 57980,\n", + " 56963,\n", + " 63108,\n", + " 8328,\n", + " 62088,\n", + " 76962,\n", + " 18098,\n", + " 74418,\n", + " 49334,\n", + " 10936,\n", + " 10437,\n", + " 77003,\n", + " 13521,\n", + " 86226,\n", + " 122071,\n", + " 2776,\n", + " 59613,\n", + " 44261,\n", + " 67335,\n", + " 778,\n", + " 59659,\n", + " 25363,\n", + " 74527,\n", + " 13089,\n", + " 19749,\n", + " 77095,\n", + " 79658,\n", + " 50999,\n", + " 1857,\n", + " 14146,\n", + " 15681,\n", + " 24899,\n", + " 15682,\n", + " 94534,\n", + " 11088,\n", + " 8023,\n", + " 53084,\n", + " 10083,\n", + " 114024,\n", + " 5490,\n", + " 100211,\n", + " 89978,\n", + " 60287,\n", + " 30083,\n", + " 75658,\n", + " 18327,\n", + " 34205,\n", + " 91038,\n", + " 96159,\n", + " 46496,\n", + " 100282,\n", + " 18364,\n", + " 8128,\n", + " 84445,\n", + " 97758,\n", + " 62431,\n", + " 121309,\n", + " 9714,\n", + " 8694,\n", + " 8695,\n", + " 8697,\n", + " 79357,\n", + " 66047),\n", + " (1440, 66963, 5069),\n", + " (11346, 2427),\n", + " (9824, 117698, 14331, 109159, 48463, 2964, 8696, 29083),\n", + " (5744, 5571, 15974),\n", + " (9000, 117132),\n", + " (113153, 9157),\n", + " (47877, 11767),\n", + " (14883, 14885),\n", + " (18362, 65854),\n", + " (27568, 115879),\n", + " (121292, 38870),\n", + " (60025, 57890, 44707),\n", + " (81978, 62091),\n", + " (95982, 112287)),\n", + " 140: ((240, 14336),\n", + " (76832,\n", + " 8259,\n", + " 74211,\n", + " 122310,\n", + " 122311,\n", + " 33288,\n", + " 93864,\n", + " 116265,\n", + " 3886,\n", + " 75411,\n", + " 11764,\n", + " 2260,\n", + " 49397,\n", + " 46202,\n", + " 121887),\n", + " (74381, 117909)),\n", + " 20: ((1601, 65811, 113997, 102023),\n", + " (10944, 91868),\n", + " (14841, 11852),\n", + " (44296, 23694),\n", + " (117225, 26212, 24430, 47638),\n", + " (91000, 33710),\n", + " (56816, 39340)),\n", + " 21: ((49608, 15970),\n", + " (122898, 36301),\n", + " (81480, 51043),\n", + " (54844, 119479),\n", + " (119633, 86225, 112289),\n", + " (107323, 114334, 121595)),\n", + " 1652: ((68574, 22),\n", + " (24164,\n", + " 43815,\n", + " 201,\n", + " 1193,\n", + " 81773,\n", + " 36687,\n", + " 82802,\n", + " 116978,\n", + " 8211,\n", + " 62837,\n", + " 122547,\n", + " 5526),\n", + " (83458, 108291, 1901, 95981, 5523, 8212, 46229, 5528, 48857, 63325),\n", + " (5569, 49571, 53358, 78991, 32478),\n", + " (19769, 43237),\n", + " (22939, 25174),\n", + " (49324, 25172),\n", + " (28778, 47549, 65390),\n", + " (113290, 54460)),\n", + " 1656: ((1987, 9334),),\n", + " 138: ((1723, 48780),\n", + " (9953, 47331, 27560, 67560, 94796, 11768, 30558),\n", + " (14592, 14777)),\n", + " 137: ((74900, 84), (27249, 48108), (68795, 77909, 68799)),\n", + " 141: ((68810, 62346), (122308, 122309)),\n", + " 1808: ((4716, 60), (2488, 117713), (13386, 121523), (57088, 17745, 65852)),\n", + " 22: ((121608, 108177, 1013), (4650, 19258), (83425, 7615), (86748, 78175)),\n", + " 1139: ((8661, 1585, 8161, 48182),\n", + " (8656, 8163, 8164),\n", + " (8657, 8658, 8662),\n", + " (47512, 47513),\n", + " (121625, 48171, 48173, 47831),\n", + " (116498, 69796, 116502, 48063),\n", + " (69603, 69779, 69780, 69749, 69781)),\n", + " 144: ((7619, 14718),\n", + " (7817, 66732),\n", + " (10318, 121623),\n", + " (68541, 19798),\n", + " (98410, 96332)),\n", + " 306: ((18530, 121384, 74889, 74890, 4830),\n", + " (6505, 86631),\n", + " (22380, 22381),\n", + " (50033, 56964)),\n", + " 345: ((12776, 75162, 9934, 78167),),\n", + " 346: ((9723, 27084), (121770, 21218)),\n", + " 1662: ((14150,\n", + " 8327,\n", + " 84166,\n", + " 79530,\n", + " 65809,\n", + " 95955,\n", + " 117143,\n", + " 47769,\n", + " 77339,\n", + " 8700,\n", + " 10943),\n", + " (39625, 96202, 51188, 14143),\n", + " (97094, 107724, 76998)),\n", + " 347: ((32330, 60182), (62808, 122944)),\n", + " 1663: ((19684, 51608, 121294, 59154, 17912),\n", + " (43489, 52901, 71654),\n", + " (122897, 62522, 68074),\n", + " (76288, 120024),\n", + " (76571, 122535)),\n", + " 405: ((59658, 97198), (75989, 75991)),\n", + " 337: ((69251,\n", + " 69924,\n", + " 121891,\n", + " 77381,\n", + " 121607,\n", + " 118759,\n", + " 53033,\n", + " 76875,\n", + " 32268,\n", + " 101389,\n", + " 34297,\n", + " 101951,\n", + " 107664,\n", + " 33585,\n", + " 101111,\n", + " 30489,\n", + " 54846,\n", + " 12447),\n", + " (25913, 35380, 59767),\n", + " (67082, 27076)),\n", + " 336: ((1681, 7819), (122875, 6703), (35336, 14145), (63570, 67211, 37247)),\n", + " 69: ((5568, 25747), (10380, 7367), (65875, 118679)),\n", + " 1657: ((462, 463),),\n", + " 65: ((56, 107325), (5504, 116326), (48517, 122502, 39436, 123157, 8381)),\n", + " 73: ((48110, 9998), (62332, 14342), (37235, 18140)),\n", + " 84: ((3330, 94810, 11754), (76674, 96677)),\n", + " 250: ((120681, 756),\n", + " (27908, 104166),\n", + " (28336, 95705),\n", + " (64057, 121380, 84493, 33494)),\n", + " 1809: ((26853, 90158),),\n", + " 79: ((123104, 10049), (113633, 12663), (32481, 118199), (48485, 81686)),\n", + " 325: ((57060, 18001, 75987, 533, 49974, 8701),),\n", + " 90: ((108827, 120790, 679),\n", + " (49323, 12868),\n", + " (76501, 45269, 80006),\n", + " (47752, 68072)),\n", + " 63: ((7584, 32449), (55009, 44970), (59404, 79655)),\n", + " 96: ((8805, 6933), (57977, 7837, 8223), (93856, 92995, 92989, 92990)),\n", + " 326: ((86120, 5079), (5538, 19911)),\n", + " 72: ((14892, 36022), (76539, 116822)),\n", + " 193: ((5065, 49326, 13262, 118431),),\n", + " 315: ((14105, 1082, 121822, 107351),\n", + " (79821, 66746, 13645),\n", + " (32457, 62125, 22686),\n", + " (47634, 47628)),\n", + " 59: ((10470, 122411, 6096, 53974, 107542, 188),\n", + " (8584, 43422),\n", + " (122377, 122371)),\n", + " 136: ((77236, 1687),),\n", + " 67: ((116865, 8996),\n", + " (10373, 111190),\n", + " (22041, 100060),\n", + " (53081, 110209),\n", + " (68257, 94242)),\n", + " 195: ((18537, 13271), (117128, 60213)),\n", + " 91: ((48401, 6706, 79566), (81730, 118223)),\n", + " 74: ((23688, 22052),),\n", + " 51: ((8281, 62333), (10930, 91410), (62348, 73454)),\n", + " 77: ((91514, 47716), (80933, 58157), (67970, 76140)),\n", + " 60: ((14890, 25911), (47898, 31254)),\n", + " 2166: ((6065, 11770, 117244), (29104, 49400, 48395, 107566), (78153, 93855)),\n", + " 186: ((56752, 12793), (47754, 47751), (80609, 62887), (122926, 88686)),\n", + " 76: ((35379, 32255), (88634, 111188)),\n", + " 100: ((35874, 51382), (38866, 56764)),\n", + " 121: ((68817, 6707), (24467, 12981, 101382), (103314, 87483)),\n", + " 78: ((11348, 35527), (22049, 70101)),\n", + " 2165: ((6064, 7622), (47720, 78148), (108234, 69700)),\n", + " 70: ((117080, 107084),),\n", + " 407: ((68655, 108238, 59631), (122520, 77237), (103313, 80724)),\n", + " 66: ((121971, 6540),),\n", + " 109: ((118579, 122383, 10071),),\n", + " 132: ((9411, 9407),),\n", + " 94: ((108872, 49140),),\n", + " 2480: ((70098, 122358),),\n", + " 115: ((23690, 1828), (14844, 14886)),\n", + " 80: ((97974, 96158, 9775),),\n", + " 114: ((61920, 8083), (11819, 49559)),\n", + " 111: ((46185, 26180),),\n", + " 92: ((10816, 27753), (29105, 25916), (39364, 81693), (48570, 110782)),\n", + " 110: ((16578, 16579, 53818, 109071), (121767, 106447)),\n", + " 317: ((1304, 52642, 108227, 67563), (7523, 13524), (122337, 117131)),\n", + " 68: ((6675, 71508),),\n", + " 180: ((9690, 9691),),\n", + " 54: ((79915, 112391),),\n", + " 1126: ((41736,\n", + " 41737,\n", + " 74826,\n", + " 116171,\n", + " 122315,\n", + " 106863,\n", + " 106864,\n", + " 72945,\n", + " 79356,\n", + " 116413),),\n", + " 318: ((4240, 57381), (68788, 35509)),\n", + " 108: ((97248, 80260, 49558, 8399), (121376, 121386, 107527)),\n", + " 58: ((1025, 80194, 9671), (17755, 10053), (83954, 83980)),\n", + " 107: ((14314, 14316),),\n", + " 47: ((46192, 92986),),\n", + " 98: ((8708, 19669),),\n", + " 113: ((3787, 2487), (28228, 89317), (91459, 91460)),\n", + " 81: ((1353, 47948),),\n", + " 181: ((7590, 7558, 3789, 98621, 48925), (118193, 91866), (122878, 113622)),\n", + " 119: ((13539, 9677, 14320, 1685, 13342),),\n", + " 309: ((54520, 106318),),\n", + " 127: ((5416, 5417, 9344),),\n", + " 53: ((7571, 9646),),\n", + " 75: ((10335, 9999),),\n", + " 95: ((32450, 32451, 33374),),\n", + " 218: ((111609, 6677),),\n", + " 120: ((108132, 6097, 62652), (94042, 108829, 118677)),\n", + " 149: ((57963, 9710),),\n", + " 123: ((7435, 49607),),\n", + " 183: ((118195, 140, 90998), (89451, 33012)),\n", + " 135: ((92984, 94489), (123392, 108873)),\n", + " 116: ((4656, 94895),),\n", + " 255: ((57065, 43995),),\n", + " 152: ((3517, 94663), (78882, 93595, 10085)),\n", + " 57: ((27083, 9685),),\n", + " 388: ((7060, 829), (96161, 55060)),\n", + " 319: ((14344, 14343),),\n", + " 44: ((40092, 40093, 678), (6919, 6503)),\n", + " 148: ((77001, 9330), (10030, 107015), (73497, 108083)),\n", + " 316: ((10381, 52399),),\n", + " 89: ((27457, 321, 65784), (48464, 55188)),\n", + " 625: ((61634, 49291, 68773), (86638, 86079)),\n", + " 220: ((81465, 83663),),\n", + " 311: ((66839, 13295),),\n", + " 64: ((8641, 7347),),\n", + " 338: ((76177, 4636), (9817, 67083)),\n", + " 145: ((34424, 68772),),\n", + " 175: ((17756, 14893, 75918, 33239),),\n", + " 698: ((12665, 49141), (59760, 67421)),\n", + " 52: ((6691, 6207),),\n", + " 129: ((13264, 9909),),\n", + " 241: ((7585, 6510, 8799),),\n", + " 182: ((122069, 82695),),\n", + " 895: ((68753, 53322),),\n", + " 122: ((88640, 56996),),\n", + " 41: ((122317, 5406),),\n", + " 259: ((3880, 65892),),\n", + " 404: ((65386, 65774),),\n", + " 214: ((114641, 6511), (25396, 32646)),\n", + " 167: ((18841, 56813),),\n", + " 153: ((22040, 7572),),\n", + " 2562: ((356, 2006),),\n", + " 1348: ((114, 71916),),\n", + " 223: ((33858, 114335),),\n", + " 894: ((48524, 33375),),\n", + " 168: ((102208, 97309),),\n", + " 112: ((29491, 113284),),\n", + " 256: ((50031, 48455),),\n", + " 312: ((75414, 3534),),\n", + " 423: ((4829, 86637), (34304, 86632)),\n", + " 157: ((78881, 81774),),\n", + " 126: ((34909, 122503),),\n", + " 213: ((113650, 120933),),\n", + " 1659: ((4241, 44251),),\n", + " 184: ((86956, 27085),),\n", + " 432: ((54666, 108092),),\n", + " 216: ((108024, 7226),),\n", + " 281: ((106445, 106454),),\n", + " 170: ((1385, 15683), (112720, 96679)),\n", + " 1705: ((83868, 55951),),\n", + " 232: ((31648, 47707),),\n", + " 171: ((102032, 121896),),\n", + " 279: ((7816, 93859),),\n", + " 632: ((76176, 75917),),\n", + " 626: ((12448, 67212),),\n", + " 1124: ((93825, 49364),),\n", + " 1152: ((98472, 37234),)}" + ] + }, + "execution_count": 47, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ret[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 48, + "id": "987e5afb-bdbd-4762-8941-4a3c52c21910", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{244: '285 C, Webmaschine, SG 220 EMS',\n", + " 257: '107, Webmaschine, OM 220 EOS',\n", + " 138: '00138, Schärmaschine 9',\n", + " 241: '294 C, Webmaschine, SG 240 EMS',\n", + " 151: '00151, Bandschneidmaschine 4 / Kitamura',\n", + " 52: '506 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 75: '442 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 1: '00001, Ausrüstungsanlage 1',\n", + " 325: 'B41, Niederhubwagen',\n", + " 213: 'A009, Webmaschine, DL 280 EMS Breite 280',\n", + " 59: '514 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 22: '00022, Lasercutter 4',\n", + " 1652: '01652, Vorwerk allgemein',\n", + " 98: '476 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 515: 'B52, Elektro-Kettbaumhubwagen',\n", + " 233: '292 C, Webmaschine, SG 240 EMS',\n", + " 307: 'B05, Deichselstapler mit Dorn',\n", + " 232: '291 C, Webmaschine, SG 240 EMS',\n", + " 132: '411 C , Webmaschine, DL 240 EMS',\n", + " 403: '00403, Schärmaschine 10 - Matthys',\n", + " 219: 'A006, Webmaschine, DL 280 EMS Breite 280',\n", + " 195: 'B36, Niederhubwagen',\n", + " 337: '00337, Bändchenablängmaschine 1',\n", + " 65: '434 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 1808: '01809, Labor allgemein',\n", + " 253: '103, Webmaschine, OM 220 EOS',\n", + " 1654: 'WEBEREI ALLGEMEIN, Weberei allgemein',\n", + " 64: '435 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 131: '412 C , Webmaschine, DL 240 EMS',\n", + " 1705: 'EINZIEHEREI ALLGEMEIN, EINZIEHEREI ALLGEMEIN',\n", + " 121: '217 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 63: '517 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 141: '00141, Schlichtmaschine 5 - Sucker',\n", + " 137: '00137, Schärmaschine 7 - Matthys',\n", + " 174: 'A031 , Webmaschine, DL 280 EMS Breite 280',\n", + " 217: 'A005, Webmaschine, DL 280 EMS Breite 280',\n", + " 130: '201 C , Webmaschine, DL 320 EMS',\n", + " 212: 'A007, Webmaschine, DL 280 EMS Breite 280',\n", + " 344: '00347, Warenschautisch 3',\n", + " 1344: '01344, Inline Scanner',\n", + " 82: '453 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 1348: '01348, Filteranlage für Lasercutter 2',\n", + " 248: '277, Webmaschine, SG 220 EMS',\n", + " 66: '433 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 79: '456 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 242: '295 C, Webmaschine, SG 240 EMS',\n", + " 133: '413 C , Webmaschine, DL 240 EMS',\n", + " 7: '00007, Ausrüstung 2',\n", + " 69: '448 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 140: '00140, Schlichtmaschine 4 - Sucker',\n", + " 222: '274 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 183: '223 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 256: '106, Webmaschine, OM 220 EOS',\n", + " 193: 'B18, Hochhubwagen',\n", + " 144: '00144, Zettelmaschine 1',\n", + " 352: '00352, Ultraschallschweißanlage 1',\n", + " 427: '00428, Nähmaschine Tisch 6',\n", + " 324: 'B42, Hochhubwagen',\n", + " 179: '206 S SI , Webmaschine, DL 280 EMS Breite 220',\n", + " 318: 'B45, Niederhubwagen',\n", + " 58: '513 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 20: '00020, Lasercutter 2',\n", + " 311: 'B12 (A), Regalbediengerät',\n", + " 1656: 'GRUNDSTÜCK UND GEBÄUDE, Grundstück und Gebäude',\n", + " 92: '468 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 125: '622 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 2473: 'A056, Webmaschine Jacquard',\n", + " 96: '474 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 21: '00021, Lasercutter 3',\n", + " 89: '465 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 2562: 'TECHNISCHE ENTWICKLUNG ALLGEMEIN, TECHNISCHE ENTWICKLUNG ALLGEMEIN',\n", + " 346: '00349, Warenschautisch 5',\n", + " 319: 'B47, Niederhubwagen',\n", + " 347: '00350, Warenschautisch 6',\n", + " 1660: '01660, Laser 4 allgemein',\n", + " 100: '478 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 71: '446 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 1657: 'WARENSCHAU ALLGEMEIN, Warenschau allgemein',\n", + " 289: 'B16, Niederhubwagen',\n", + " 338: '00338, Bändchenablängmaschine 2',\n", + " 252: '102, Webmaschine, OM 220 EOS',\n", + " 345: '00348, Warenschautisch 4',\n", + " 145: '00145, Zettelmaschine 2 - Mayer',\n", + " 633: 'R18, Schnelllauftor',\n", + " 625: 'R08 , Schnelllauftor',\n", + " 255: '105, Webmaschine, OM 220 EOS',\n", + " 943: '01723, Klimaanlage Saal 4',\n", + " 115: '415 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 171: 'A028 , Webmaschine, DL 280 EMS Breite 280',\n", + " 97: '475 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 220: '271 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 114: '427 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 68: '431 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 225: '261 S M, Webmaschine, DG 220 SMS',\n", + " 328: 'B43, Niederhubwagen',\n", + " 44: '605 , Webmaschine, DL 190 SOS',\n", + " 90: '466 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 894: 'U22, Kippgerät (Versand)',\n", + " 166: 'A023 , Webmaschine, DL 280 EMS Breite 280',\n", + " 180: '207 C S SI, Webmaschine, DL 280 EMS Breite 220',\n", + " 250: '141C, Webmaschine, OM280SOS',\n", + " 72: '445 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 333: 'B27, Kettbaum- und Dockentransportwagen',\n", + " 2318: 'A067, Webmaschine, DL 280 EMS Breite 280',\n", + " 388: 'H31.1, Deckenlaufkran',\n", + " 288: 'B10, Ketteinlegewagen',\n", + " 1655: 'VERSAND ALLGEMEIN, Versand allgemein',\n", + " 117: '213 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 56: '511 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 422: '00422, Knotex 1',\n", + " 315: 'B15, Niederhubwagen',\n", + " 245: '296 C, Webmaschine, SG 240 EMS',\n", + " 426: '00427, Nähmaschine Tisch 4',\n", + " 343: '00344, Warenschautisch 2',\n", + " 43: '604 , Webmaschine, DL 190 SOS',\n", + " 45: '606 , Webmaschine, DL 190 SOS',\n", + " 76: '441 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 197: 'B39, Niederhubwagen',\n", + " 19: '00018, Lasercutter 1',\n", + " 106: '436 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 186: '245 J, Webmaschine Jacquard',\n", + " 119: '215 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 107: '437 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 2551: 'ERSTE-HILFE 7-1, Erste-Hilfe-Koffer 7',\n", + " 164: 'A021 , Webmaschine, DL 280 EMS Breite 280',\n", + " 2165: 'A060, Webmaschine Jacquard',\n", + " 91: '467 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 110: '423 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 317: 'B35, Niederhubwagen',\n", + " 326: 'B38, Niederhubwagen',\n", + " 81: '454 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 109: '422 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 122: '610 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 1244: '251 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 335: 'B23 (A), Niederhubwagen',\n", + " 170: 'A027 , Webmaschine, DL 280 EMS Breite 280',\n", + " 1179: 'KOMPRESSORSTATION 2, Allgemein',\n", + " 229: '266 C S N, Webmaschine, DG 260 EMS',\n", + " 148: '00148, Bandschneidmaschine 1',\n", + " 182: '222 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 240: '293 C, Webmaschine, SG 240 EMS',\n", + " 1139: '01139, Ausrüstung 2 / Spannrahmen',\n", + " 405: '00405, Assembliermaschine 8',\n", + " 73: '444 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 85: '461 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 1698: '01698, Kesselhaus',\n", + " 407: '00407, Einziehmaschine Delta 110',\n", + " 336: 'B22, Ketteinlegewagen',\n", + " 80: '455 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 136: '00136, Schärmaschine 3 - Benninger',\n", + " 127: '624 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 60: '515 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 1794: 'A058, Webmaschine Jacquard',\n", + " 624: 'R07 , Schnelllauftor',\n", + " 455: 'I.1.5.5, Brandschutzschiebetor',\n", + " 1151: '01151, Ausrüstung 2 / Dosier- und Mischanlage',\n", + " 2316: 'A065, Webmaschine, DL 280 EMS Breite 280',\n", + " 123: '620 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 1663: '01663, Bandschneiderei allgemein',\n", + " 2654: '202, Webmaschine',\n", + " 2480: '00352, Ultraschallschweißanlage 1',\n", + " 214: 'A010, Webmaschine, DL 280 EMS Breite 280',\n", + " 1795: 'A054.S, Jacquardmaschine',\n", + " 1695: 'GRUNDSTÜCK UND GEBÄUDE ERWEITERUNG NORD, Grundstück und Gebäude Erweiterung Nord',\n", + " 46: '607 , Webmaschine, DL 190 SOS',\n", + " 70: '447 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 178: '205 C S SI, Webmaschine, DL 280 EMS Breite 220',\n", + " 224: '276 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 86: '462 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 51: '507 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 629: 'R12 , Schnelllauftor',\n", + " 99: '477 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 113: '426 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 1809: 'LASER ALLGEMEIN, Laser allgemein',\n", + " 351: 'B40, Stückauslegewagen',\n", + " 112: '425 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 111: '424 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 108: '421 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 162: 'A020 , Webmaschine, DL 280 EMS Breite 280',\n", + " 135: '408 C, Webmaschine, DL 240 EMS',\n", + " 129: '626 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 116: '212 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 181: '221 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 84: '451 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 53: '505 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 128: '211 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 152: 'A001, Webmaschine, DL 280 EMS Breite 280',\n", + " 312: 'B12, Regalbediengerät',\n", + " 157: 'A015 , Webmaschine, DL 280 EMS Breite 280',\n", + " 640: 'R35, Schnelllauftor',\n", + " 259: '109, Webmaschine, OM 220 EOS',\n", + " 176: 'A033 , Webmaschine, DL 280 EMS Breite 280',\n", + " 277: 'A046, Webmaschine, DL 280 EMS Breite 280',\n", + " 1126: '01126, Ausrüstung 2 / 0900-Streichmaschine',\n", + " 83: '452 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 74: '443 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 1659: '01659, Laser 3 allgemein',\n", + " 1662: 'AUSRÜSTUNG 2 ALLGEMEIN, Ausrüstung 2 allgemein',\n", + " 274: 'A035, Webmaschine, DL 280 EMS Breite 280',\n", + " 423: '00423, Knotex 2',\n", + " 306: 'B04, Ketteinlegewagen',\n", + " 698: 'R13, Sektionaltor',\n", + " 94: '472 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 167: 'A024 , Webmaschine, DL 280 EMS Breite 280',\n", + " 54: '504 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 258: '108, Webmaschine, OM 220 EOS',\n", + " 2313: 'A062, Webmaschine, DL 280 EMS Breite 280',\n", + " 95: '473 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 41: '602, Webmaschine, DL 190 SOS',\n", + " 17: '601, Webmaschine, DL 190 SOS',\n", + " 961: 'A054, Webmaschine Jacquard',\n", + " 47: '608 , Webmaschine, DL 190 SOS',\n", + " 168: 'A025 , Webmaschine, DL 280 EMS Breite 280',\n", + " 87: '463 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 154: 'A003 , Webmaschine, DL 280 EMS Breite 280',\n", + " 1352: 'GESCHÄFTSLEITUNG, WC - Geschäftsleitung',\n", + " 93: '471 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 281: 'A051, Webmaschine, DL 280 EMS Breite 280',\n", + " 2166: 'A061, Webmaschine Jacquard',\n", + " 230: '255 C, Webmaschine, DG 250 EMS',\n", + " 118: '214 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 77: '458 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 120: '216 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 67: '432 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 424: '00425, Knotex 3',\n", + " 42: '603 , Webmaschine, DL 190 SOS',\n", + " 2315: 'A064, Webmaschine, DL 280 EMS Breite 280',\n", + " 2560: 'VETRIEB/VERKAUF ALLGEMEIN, VETRIEB/VERKAUF ALLGEMEIN',\n", + " 55: '503 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 309: 'B08, Niederhubwagen',\n", + " 153: 'A002 , Webmaschine, DL 280 EMS Breite 280',\n", + " 218: 'A004, Webmaschine, DL 280 EMS Breite 280',\n", + " 1799: 'A059.S, Jacquardmaschine',\n", + " 175: 'A032 , Webmaschine, DL 280 EMS Breite 280',\n", + " 280: 'A050, Webmaschine, DL 280 EMS Breite 280',\n", + " 2559: 'A070, Webmaschine Jacquard',\n", + " 348: 'B19, Schubmaststapler',\n", + " 273: 'A036, Webmaschine, DL 280 EMS Breite 280',\n", + " 78: '457 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 160: 'A018 , Webmaschine, DL 280 EMS Breite 280',\n", + " 216: 'A012, Webmaschine, DL 280 EMS Breite 280',\n", + " 404: '00404, Assembliermaschine 6',\n", + " 268: 'A041, Webmaschine, DL 280 EMS Breite 280',\n", + " 211: 'A008, Webmaschine, DL 280 EMS Breite 280',\n", + " 275: 'A048, Webmaschine, DL 280 EMS Breite 280',\n", + " 149: '00149, Bandschneidmaschine 2',\n", + " 626: 'R09 , Schnelllauftor',\n", + " 511: 'B29, Nassschrubbautomat',\n", + " 189: '246.S, Jacquardmaschine',\n", + " 683: 'R02, Sektionaltor',\n", + " 134: '414 C , Webmaschine, DL 240 EMS',\n", + " 184: '224 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 279: 'A049, Webmaschine, DL 280 EMS Breite 280',\n", + " 172: 'A029 , Webmaschine, DL 280 EMS Breite 280',\n", + " 227: '262 S SI, Webmaschine, DG 220 SMS',\n", + " 349: 'B21, Hochhubwagen',\n", + " 251: '101, Webmaschine, OM 220 EOS',\n", + " 394: 'H15.2, Einschienenbahn',\n", + " 576: 'D76, Thermalölanlage',\n", + " 962: 'A055, Webmaschine Jaquard',\n", + " 61: '516 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 126: '623 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 940: 'SAAL 7 - NORD, Klimaanlage - Saal 7',\n", + " 1350: '01350, Filteranlage für Lasercutter 4',\n", + " 266: 'A043, Webmaschine, DL 280 EMS Breite 280',\n", + " 432: 'B02 (ALT), Gabelstapler',\n", + " 223: '275 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 231: '256 C, Webmaschine, DG 250 EMS',\n", + " 350: 'B34 (A), Niederhubwagen',\n", + " 278: 'A045, Webmaschine, DL 280 EMS Breite 280',\n", + " 1792: 'A057, Webmaschine Jacquard',\n", + " 254: '104, Webmaschine, OM 220 EOS',\n", + " 57: '512 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 191: 'B37, Niederhubwagen',\n", + " 895: 'U25, Ballenpresse',\n", + " 635: 'R30, Schnelllauftor',\n", + " 88: '464 C , Webmaschine, DL 280 EMS Breite 280 Bj. 04-07',\n", + " 156: 'A014 , Webmaschine, DL 280 EMS Breite 280',\n", + " 1149: 'R50, 2flg. Schwenktor',\n", + " 215: 'A011, Webmaschine, DL 280 EMS Breite 280',\n", + " 1653: '01653, Campen Anlage',\n", + " 838: 'H31.2, Deckenlaufkran',\n", + " 316: 'B34, Niederhubwagen',\n", + " 177: '204 S SI , Webmaschine, DL 280 EMS Breite 220',\n", + " 169: 'A026 , Webmaschine, DL 280 EMS Breite 280',\n", + " 898: 'U24, Abfallpresscontainer',\n", + " 308: 'B07, Gabelstapler',\n", + " 298: 'B11, Gabelstapler',\n", + " 1793: 'A057, Webmaschine Jacquard',\n", + " 249: '203 C S SI, Webmaschine, DL 280 EMS Breite 220',\n", + " 329: 'B30, Hubarbeitsbühne',\n", + " 158: 'A016 , Webmaschine, DL 280 EMS Breite 280',\n", + " 2029: '03033, Brandmeldeanlage mit Rauch u. Handmelder',\n", + " 159: 'A017 , Webmaschine, DL 280 EMS Breite 280',\n", + " 398: 'H21, Säulenschwenkkran',\n", + " 685: 'R04, Sektionaltor',\n", + " 342: '00346, Warenschautisch 1',\n", + " 1119: '01119, Ausrüstung 2 / 0200-Abwicklung',\n", + " 271: 'A038, Webmaschine, DL 280 EMS Breite 280',\n", + " 941: '01727, Klimaanlage Saal 7 - Süd',\n", + " 434: 'H36, Einschienenbahn',\n", + " 297: 'B06, Gabelstapler',\n", + " 287: 'B02, Gabelstapler',\n", + " 320: 'B23, Hochhubwagen',\n", + " 247: '287 C, Webmaschine, SG 220 EMS',\n", + " 1694: 'KOMPRESSOREN ALLGEMEIN, Kompressoren allgemein',\n", + " 124: '621 C , Webmaschine, DL 280 EMS Breite 280',\n", + " 1759: '01759, Klimaanlagen Allgemein',\n", + " 155: 'A013 , Webmaschine, DL 280 EMS Breite 280',\n", + " 1697: 'SCHLOSSEREI ALLGEMEIN, Schlosserei allgemein',\n", + " 327: 'B44, Niederhubwagen',\n", + " 305: 'B03, Gabelstapler',\n", + " 1178: 'KOMPRESSORSTATION 1, Allgemein',\n", + " 1665: '01665, Jacquard-Webmaschinen allgemein',\n", + " 425: '00426, Nähmaschine Tisch 5',\n", + " 2170: 'A061.S , Jacquardmaschine',\n", + " 415: 'H07, Einschienenbahn',\n", + " 1135: '01135, Ausrüstung 2 / 2800-Aufwicklung',\n", + " 323: 'B25, Hubarbeitsbühne',\n", + " 1696: 'ELEKTROWERKSTATT ALLGEMEIN, Elektrowerkstatt allgemein',\n", + " 1703: '01703, Wasserversorgung allgemein',\n", + " 1658: '01658, Laser 2 allgemein',\n", + " 2317: 'A066, Webmaschine, DL 280 EMS Breite 280',\n", + " 1760: '01780, Kantine',\n", + " 1349: '01349, Filteranlage für Lasercutter 3',\n", + " 2561: 'GESCHÄFTSLEITUNG ALLGEMEIN, Geschäftsleitung Allgemein',\n", + " 270: 'A039, Webmaschine, DL 280 EMS Breite 280',\n", + " 1661: 'AUSRÜSTUNG 1 ALLGEMEIN, Ausrüstung 1 allgemein',\n", + " 283: 'A053, Webmaschine, DL 280 EMS Breite 280',\n", + " 243: '297 C, Webmaschine, SG 240 EMS',\n", + " 632: 'R17 , Schnelllauftor',\n", + " 1152: '01152, Ausrüstung 2 / Strukturdetektor SD 1C Serie 210',\n", + " 282: 'A052, Webmaschine, DL 280 EMS Breite 280',\n", + " 221: '272 C, Webmaschine, DL 280 EMS Breite 280',\n", + " 1545: '01545, Fangleisten-Schärmaschine 2',\n", + " 272: 'A037, Webmaschine, DL 280 EMS Breite 280',\n", + " 260: '110, Webmaschine, OM 220 EOS',\n", + " 173: 'A030 , Webmaschine, DL 280 EMS Breite 280',\n", + " 264: 'A034, Webmaschine, DL 280 EMS Breite 280',\n", + " 414: 'H30.2, Einschienenbahn',\n", + " 461: 'I.1.9.3, Brandschutzschiebetor',\n", + " 1114: '01114, Ausrüstung 2 / 1300-2-Stellen-Abwicklung',\n", + " 1361: '01877, Klimaanlage - Laborraum',\n", + " 1123: '01123, Ausrüstung 2 / 0600-Vorheizaggregat',\n", + " 2319: 'A068, Webmaschine, DL 280 EMS Breite 280',\n", + " 187: '246, Webmaschine Jacquard',\n", + " 1796: 'A055.S, Jacquardmaschine',\n", + " 1124: '01124, Ausrüstung 2 / 0700-Kühlaggregat',\n", + " 942: 'SAAL 6 , Klimaanlage',\n", + " 269: 'A040, Webmaschine, DL 280 EMS Breite 280',\n", + " 265: 'A044, Webmaschine, DL 280 EMS Breite 280',\n", + " 920: 'W5, Hochdruckreiniger',\n", + " 1047: 'KÜHLKREISLAUF, Kompressorhaus alt - offener Kreis',\n", + " 228: '265 C S SI, Webmaschine, DG 260 EMS',\n", + " 2169: 'A060.S, Jacquardmaschine',\n", + " 1131: '01131, Ausrüstung 2 / 2400-Auslaufspeicher',\n", + " 2320: 'A069, Webmaschine',\n", + " 514: 'B51, Elektro-Kettbaumhubwagen',\n", + " 1127: '01127, Ausrüstung 2 / 2000-Umlufttrockner 1',\n", + " 1116: '01116, Ausrüstung 2 / 1500-Thermokalander',\n", + " 161: 'A019 , Webmaschine, DL 280 EMS Breite 280',\n", + " 2658: 'PM 0235, Berstdruckprüfgerät 1',\n", + " 276: 'A047, Webmaschine, DL 280 EMS Breite 280',\n", + " 2048: '03064, Kühlgeräte Kantine',\n", + " 165: 'A022 , Webmaschine, DL 280 EMS Breite 280',\n", + " 2749: 'PM 0044, Zugfadenspannungsmesser'}" + ] + }, + "execution_count": 48, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "ret[1]" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "dbb7f717-42a0-4fed-aaf0-41e52115da8e", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.11.9" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}