From 1ec8de8ee2682f2c7134336f8d47726253340b4b Mon Sep 17 00:00:00 2001 From: Stefan Dresselhaus Date: Mon, 9 Dec 2013 01:51:32 +0100 Subject: [PATCH] made parallel some performance-data in main.hs. Changes can be viewed in git. TODO: - Find out why there is overhed of >50% --- hgraph.cabal | 3 +- sampledata.adj | 7 +- sampledata.adj.atr | 7 +- sampledata100.adj | 100 ++++++++++++++ sampledata100.adj.atr | 100 ++++++++++++++ sampledata200.adj | 200 +++++++++++++++++++++++++++ sampledata200.adj.atr | 200 +++++++++++++++++++++++++++ sampledata300.adj | 300 ++++++++++++++++++++++++++++++++++++++++ sampledata300.adj.atr | 300 ++++++++++++++++++++++++++++++++++++++++ sampledataSmall.adj | 6 + sampledataSmall.adj.atr | 6 + src/DCB/DCB.hs | 82 ++++++----- src/Main.hs | 240 +++++++++++++++++++++++++++++++- 13 files changed, 1498 insertions(+), 53 deletions(-) mode change 100644 => 120000 sampledata.adj mode change 100644 => 120000 sampledata.adj.atr create mode 100644 sampledata100.adj create mode 100644 sampledata100.adj.atr create mode 100644 sampledata200.adj create mode 100644 sampledata200.adj.atr create mode 100644 sampledata300.adj create mode 100644 sampledata300.adj.atr create mode 100644 sampledataSmall.adj create mode 100644 sampledataSmall.adj.atr diff --git a/hgraph.cabal b/hgraph.cabal index fd12d5d..77844f4 100644 --- a/hgraph.cabal +++ b/hgraph.cabal @@ -21,7 +21,8 @@ executable hgraph repa >=3.2, text -any, transformers >=0.3.0, - vector >=0.10.9 + vector >=0.10.9, + mtl >=2.1 && <3 main-is: Main.hs buildable: True hs-source-dirs: src diff --git a/sampledata.adj b/sampledata.adj deleted file mode 100644 index 6589938..0000000 --- a/sampledata.adj +++ /dev/null @@ -1,6 +0,0 @@ -010111 -101100 -010100 -111011 -100100 -100100 diff --git a/sampledata.adj b/sampledata.adj new file mode 120000 index 0000000..a2066a0 --- /dev/null +++ b/sampledata.adj @@ -0,0 +1 @@ +sampledata512.adj \ No newline at end of file diff --git a/sampledata.adj.atr b/sampledata.adj.atr deleted file mode 100644 index 566665a..0000000 --- a/sampledata.adj.atr +++ /dev/null @@ -1,6 +0,0 @@ -0.5 0 -1 -1 1 -1 -1 0.5 -1 -1 1 -0.5 -0.5 0 0 --1 0 2 diff --git a/sampledata.adj.atr b/sampledata.adj.atr new file mode 120000 index 0000000..2536468 --- /dev/null +++ b/sampledata.adj.atr @@ -0,0 +1 @@ +sampledata512.adj.atr \ No newline at end of file diff --git a/sampledata100.adj b/sampledata100.adj new file mode 100644 index 0000000..7efee53 --- /dev/null +++ b/sampledata100.adj @@ -0,0 +1,100 @@ +0000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000 +0000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000010001000000000000000000000000000000000000000000000000000000000000000000000 +0000010000000000000000000000000001000000000000000000000000000010000000000000000000000000000010000000 +0000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000001000000010000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000 +0000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000100000000000001000000000000000000000000000000000000000000000000000000000 +0010000010000000000000010001010000000000000000100000000000000000001000010000001101100000000001000000 +0000000000000000001000000000100000000000000000000000000000000000000000000000000000000000000000000000 +0000001000000000000000000000000000000000000000000000000000000000000000110000000000100000010000000000 +1000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000100000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000001 +0000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000010000000001000000000000000000000000000000000000000000000 +0000000000000000000000000000000000001000000000000010000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000001000001001100000000000000000000100010000000100000001000000000001000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000100000000000000000001000000000000000100000010000000000000000000010000000 +0000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000100000000000000000000001000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000001000010000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000100000000000000000000000000000000001000000000000000000000000000000000000000000000000010000000 +0000100000001101000000000000000000000000000000000010000000000000000000000000000000000000000000000000 +0000000000000000000000000000000100000000000000100000000000000000000000000001000000001000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +0000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000001000000000001000000000000000000000000000010000000000000000000000000000 +0000000000000011000000001000101000100000000000100000000000000000000010100001001011000000011000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000100000000000001000000000000000000000000000010000000000000000000000000000 +0000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +0000000000000000000000000000100000000000000000000000000000000000000000010000000000000000000000000000 +0000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000001000000000000000000001000000000000000000000000000000000000000010000000000000000000000000000 +0000000000000000000000000000000000000000001000000000000000000000000000010000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000 +0000000100000000000000000100000000000000000000100000000000010010000000001000000000000000000000000010 +0000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000 +0000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000 diff --git a/sampledata100.adj.atr b/sampledata100.adj.atr new file mode 100644 index 0000000..8c63b49 --- /dev/null +++ b/sampledata100.adj.atr @@ -0,0 +1,100 @@ +0 6 0 573 6 14 +1 5 4 461 5 18 +2 5 0 615 5 17 +3 6 2 906 0 15 +4 3 1 370 1 4 +5 5 4 1130 3 4 +6 9 1 1113 2 6 +7 16 3 780 2 14 +8 3 3 349 0 10 +9 11 0 433 0 19 +10 3 0 248 0 19 +11 3 0 812 9 7 +12 7 4 1290 2 7 +13 3 1 582 7 0 +14 3 4 835 3 4 +15 6 1 546 5 4 +16 1 1 1035 9 2 +17 3 2 410 0 1 +18 6 3 90 6 14 +19 3 2 267 4 8 +20 3 1 162 2 1 +21 3 2 864 5 0 +22 4 0 1032 8 9 +23 5 4 2556 3 14 +24 3 1 520 1 11 +25 3 2 382 3 12 +26 8 1 881 1 16 +27 4 1 200 9 4 +28 44 2 551 0 12 +29 6 0 832 6 2 +30 11 2 724 9 17 +31 10 3 277 9 0 +32 1 0 220 8 9 +33 5 0 1132 9 12 +34 4 4 1255 2 4 +35 3 1 372 7 9 +36 6 1 686 4 14 +37 5 4 737 4 18 +38 3 1 864 7 4 +39 12 2 1657 9 18 +40 6 4 380 7 0 +41 3 0 1220 3 12 +42 48 3 648 2 16 +43 2 4 263 4 2 +44 4 0 1356 3 3 +45 1 3 627 7 0 +46 10 3 2442 9 4 +47 3 0 914 9 5 +48 3 2 284 6 19 +49 4 1 496 4 2 +50 3 2 140 9 5 +51 4 2 1242 0 16 +52 3 2 233 8 18 +53 7 0 427 7 6 +54 9 4 2843 6 12 +55 15 1 186 4 13 +56 3 0 1338 8 11 +57 3 3 772 1 14 +58 14 4 184 5 19 +59 5 2 784 9 10 +60 3 0 942 5 17 +61 3 0 385 2 0 +62 7 2 1382 7 8 +63 19 3 705 2 7 +64 11 4 1141 7 19 +65 4 4 404 9 13 +66 7 0 317 5 10 +67 3 3 1074 9 18 +68 4 4 435 9 14 +69 4 3 745 6 8 +70 14 3 480 2 2 +71 67 1 595 5 19 +72 4 3 202 8 0 +73 5 4 431 8 18 +74 5 3 336 8 2 +75 5 0 158 1 10 +76 11 3 2261 7 4 +77 4 3 894 5 0 +78 8 2 920 5 12 +79 6 2 750 8 14 +80 3 3 566 1 13 +81 3 3 581 1 13 +82 5 2 756 1 18 +83 5 4 503 3 0 +84 4 0 101 1 15 +85 5 1 697 4 6 +86 3 1 355 4 8 +87 3 4 657 7 10 +88 3 1 2639 4 13 +89 10 1 393 4 13 +90 4 1 345 4 9 +91 6 2 478 4 9 +92 29 4 450 3 11 +93 3 3 1014 0 6 +94 2 1 2701 1 16 +95 2 1 332 1 17 +96 1 1 646 0 11 +97 2 4 574 7 2 +98 3 3 742 3 4 +99 6 3 473 7 15 diff --git a/sampledata200.adj b/sampledata200.adj new file mode 100644 index 0000000..66f847b --- /dev/null +++ b/sampledata200.adj @@ -0,0 +1,200 @@ +00000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000 +00000100000000000000000000000000010000000000000000000000000000100000000000000000000000000000100000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000 +00000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000010000000000000000000100000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000010000000100000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000100 +00000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000001000000000000000000000000000 +00000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000010000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000010000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00100000100000000000000100010100000000000000001000000000000000000010000100000011011000000000010000001000000000000010001000000000000000000000000001000100101000000000001000001000000001000000001001000000 +00000000000000000010000000001000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000001100000000001000000100000000000000000000000000001000000000000000000000000000000010000000000000000000000000000000000000000000000000 +10000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000001000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000001010000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000010000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000100000000010000000000000000000000000000000000000000000000000000000000000000000000010000010001000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000010000010011000000000000000000001000100000001000000010000000000010000000000000001010000010000100000000001010010000001000000000000000000000010000000010000001001000000000100000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000000000010000000000000001000000100000000000000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000001000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000010000000000000000000000000000000000000000000100 +00000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000011000001000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000001000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00001000000011010000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000100000000101010000000000000000000000000000000001000000000000000000000000000000000000000000 +00000000000000000000000000000001000000000000001000000000000000000000000000010000000010000000000000000000000000000000000000000000000010000000000000000000100000000000000000001100000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000100 +00000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000000000000000010000000000010000000000000000000000000000100000000000000000000000000000000000000000000000100000000101000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000110000000010001010001000000000001000000000000000000000101000010010110000000110000000001110000000000000000100001001010010000000000010000000101000010000001000001001010000000000111000000001 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000001000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000100000010100000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000010000000000000000000000000000100000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000100000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000 +00000000010000000000000000000010000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001001000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000000000000000000000000000010000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000 +00000001000000000000000001000000000000000000001000000000000100100000000010000000000000000000000000100100000000000000000100000000000000010000000000001000000000000100000010000000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000100000000000000000000000000000000000000000000000000 +00100000100000010000000100011000000000000000000000000000000000000010000100000010011000000000010000000000000000000000001000000010010000000000000001000000000000000000000001000000000000000000001001000100 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000100000000000000000000000000100000000000000000000000000000000000000000000000000000000000100000000000000000000 +00000000000000000000000000000100000000000000000000000000000000000000000100000010000000000000000000000000000000000000001000000010010000000000000000000000100000000000000000001000000000000000001000000100 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000 +00000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000100000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000001000000000000000000000000000 +00000000000000000000000000001000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000010000000000000000000000000000000000000000000000000000000 +10000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000001010000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00010100000110000000100001000000001001100010100000000000000101110010101110000101001000000000100000000100010100000000001001001010000100000000000000001010000001100100010010000010100001010000010100010011 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000001010000000000000010000000000000000100000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000010000000000000010000000000000000000000000000000000000000000001010000000000000000100000000000000000000100000000000000000000000000000000000000000000000000000000100 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000001010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00010100000000000000000000100000000000000010000000010100100000000000011000000000100000000100000000000000101000000000000010000000000000000100000000000001000000001000100000010010000000000001010000100001 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000010010000000000001000000001000000100000000000000010000000000010000000000000001000010000000000000000000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000100000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +01000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000 +00000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000001000000000000000000000000000000000010000000000100000000000000000000010000000000000000100010000000000000000000000000000000000000000000000010000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000100000000000000000000000000000000000000000 +00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000 +00000000000000000000000000000000000000000000000000000001000000000000000100000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000010000000000000000001000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000000001000000000000001000000010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000100010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000010000000000000000100000000000000000000 +00000000100000000010000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000001000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000001000000100000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000100000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000100000000000000000100000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000100000000000000000000010000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000010000000001000000000000000000000000000000000001000000100000000000000000000000000000010000000000100000000000000000000000000000000000001000100000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000010000000000001000000000000000000000000000000000000000000000000000000000000000100000000001000000000100000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000001000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000010000000000000000000000000000000000000000000000010000001000000000000000100001000000000000100000000000000000000100000000000000000000000100010000000000000000000000000000001100000000010000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000010000000000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000100000000000000000100 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000100000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000 +00000001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000001000000000000000000000000000000000000000000100000000000000000000000000001010000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000 +00000000000000000000000000001000000000000000000000000000001000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100 +00000000000000000100000110000000000000000000000000000010000000000000111001000000000000000100000000001010000000000010000000000010000000100000000000000000000000001000000001000000000001000000000000001001 +00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +00000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000100000000001000000000000000000000000000000000000000000000000000000000000000000100 diff --git a/sampledata200.adj.atr b/sampledata200.adj.atr new file mode 100644 index 0000000..f827134 --- /dev/null +++ b/sampledata200.adj.atr @@ -0,0 +1,200 @@ +0 6 0 573 6 14 +1 5 4 461 5 18 +2 5 0 615 5 17 +3 6 2 906 0 15 +4 3 1 370 1 4 +5 5 4 1130 3 4 +6 9 1 1113 2 6 +7 16 3 780 2 14 +8 3 3 349 0 10 +9 11 0 433 0 19 +10 3 0 248 0 19 +11 3 0 812 9 7 +12 7 4 1290 2 7 +13 3 1 582 7 0 +14 3 4 835 3 4 +15 6 1 546 5 4 +16 1 1 1035 9 2 +17 3 2 410 0 1 +18 6 3 90 6 14 +19 3 2 267 4 8 +20 3 1 162 2 1 +21 3 2 864 5 0 +22 4 0 1032 8 9 +23 5 4 2556 3 14 +24 3 1 520 1 11 +25 3 2 382 3 12 +26 8 1 881 1 16 +27 4 1 200 9 4 +28 44 2 551 0 12 +29 6 0 832 6 2 +30 11 2 724 9 17 +31 10 3 277 9 0 +32 1 0 220 8 9 +33 5 0 1132 9 12 +34 4 4 1255 2 4 +35 3 1 372 7 9 +36 6 1 686 4 14 +37 5 4 737 4 18 +38 3 1 864 7 4 +39 12 2 1657 9 18 +40 6 4 380 7 0 +41 3 0 1220 3 12 +42 48 3 648 2 16 +43 2 4 263 4 2 +44 4 0 1356 3 3 +45 1 3 627 7 0 +46 10 3 2442 9 4 +47 3 0 914 9 5 +48 3 2 284 6 19 +49 4 1 496 4 2 +50 3 2 140 9 5 +51 4 2 1242 0 16 +52 3 2 233 8 18 +53 7 0 427 7 6 +54 9 4 2843 6 12 +55 15 1 186 4 13 +56 3 0 1338 8 11 +57 3 3 772 1 14 +58 14 4 184 5 19 +59 5 2 784 9 10 +60 3 0 942 5 17 +61 3 0 385 2 0 +62 7 2 1382 7 8 +63 19 3 705 2 7 +64 11 4 1141 7 19 +65 4 4 404 9 13 +66 7 0 317 5 10 +67 3 3 1074 9 18 +68 4 4 435 9 14 +69 4 3 745 6 8 +70 14 3 480 2 2 +71 67 1 595 5 19 +72 4 3 202 8 0 +73 5 4 431 8 18 +74 5 3 336 8 2 +75 5 0 158 1 10 +76 11 3 2261 7 4 +77 4 3 894 5 0 +78 8 2 920 5 12 +79 6 2 750 8 14 +80 3 3 566 1 13 +81 3 3 581 1 13 +82 5 2 756 1 18 +83 5 4 503 3 0 +84 4 0 101 1 15 +85 5 1 697 4 6 +86 3 1 355 4 8 +87 3 4 657 7 10 +88 3 1 2639 4 13 +89 10 1 393 4 13 +90 4 1 345 4 9 +91 6 2 478 4 9 +92 29 4 450 3 11 +93 3 3 1014 0 6 +94 2 1 2701 1 16 +95 2 1 332 1 17 +96 1 1 646 0 11 +97 2 4 574 7 2 +98 3 3 742 3 4 +99 6 3 473 7 15 +100 32 3 969 5 10 +101 8 1 178 4 8 +102 14 0 295 7 17 +103 3 3 288 0 4 +104 3 3 1356 9 0 +105 9 1 1009 5 0 +106 3 0 1374 4 4 +107 3 0 186 5 11 +108 4 4 359 3 3 +109 5 0 767 9 4 +110 9 3 556 5 1 +111 3 0 976 9 8 +112 3 0 415 9 7 +113 5 2 207 2 2 +114 4 2 454 3 6 +115 4 3 399 9 3 +116 4 3 95 7 5 +117 2 3 673 6 2 +118 11 3 770 1 19 +119 101 3 536 6 11 +120 8 1 528 3 2 +121 4 0 524 3 12 +122 3 3 1544 4 6 +123 3 3 304 4 16 +124 8 2 595 1 2 +125 3 4 391 1 16 +126 11 2 781 8 12 +127 3 4 1333 0 14 +128 3 0 1112 5 2 +129 6 4 1441 9 17 +130 48 3 245 5 10 +131 3 1 561 1 14 +132 21 1 360 7 8 +133 7 4 403 0 12 +134 4 3 496 4 5 +135 9 3 537 7 9 +136 4 0 377 5 15 +137 6 3 496 4 1 +138 6 3 206 8 10 +139 4 0 92 2 11 +140 12 1 377 4 13 +141 5 3 817 5 12 +142 3 4 393 7 8 +143 3 2 1038 3 14 +144 6 4 360 4 10 +145 3 3 429 4 18 +146 3 3 757 3 0 +147 3 3 143 0 12 +148 3 0 413 1 0 +149 18 3 391 7 3 +150 19 2 439 7 0 +151 9 0 100 9 1 +152 4 1 785 7 19 +153 3 2 313 8 9 +154 3 0 743 5 10 +155 6 0 217 9 6 +156 4 1 505 4 4 +157 5 0 292 6 6 +158 3 0 1591 6 5 +159 3 1 673 4 12 +160 5 2 758 1 1 +161 6 0 738 9 18 +162 2 1 1585 8 3 +163 1 4 184 8 1 +164 4 1 400 1 18 +165 6 4 1106 5 7 +166 5 0 331 4 5 +167 4 3 656 3 1 +168 3 0 529 5 1 +169 4 3 446 4 15 +170 5 4 381 6 10 +171 4 0 444 3 13 +172 10 1 2414 0 0 +173 3 3 330 6 9 +174 13 2 676 6 10 +175 3 2 361 7 11 +176 4 3 283 8 2 +177 7 2 735 8 9 +178 2 2 295 8 10 +179 25 1 193 0 15 +180 1 2 405 6 3 +181 11 0 592 1 15 +182 6 2 1275 6 7 +183 3 0 476 6 12 +184 3 3 1154 8 16 +185 3 2 327 6 14 +186 2 1 197 4 19 +187 3 1 897 8 5 +188 3 0 334 7 11 +189 7 0 870 5 19 +190 8 3 1863 5 7 +191 5 2 976 7 19 +192 4 1 150 6 6 +193 3 4 482 5 16 +194 3 1 430 4 4 +195 3 4 586 2 14 +196 3 2 2471 1 15 +197 35 2 433 1 14 +198 4 3 787 3 15 +199 4 4 655 9 0 diff --git a/sampledata300.adj b/sampledata300.adj new file mode 100644 index 0000000..10e5ce6 --- /dev/null +++ b/sampledata300.adj @@ -0,0 +1,300 @@ +000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000100000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000010000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +000000000000000000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000010000000000000000000000000 +000001000000000000000000000000000100000000000000000000000000001000000000000000000000000000001000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000010000000000000000000100001000001000000100000000010000000000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000100000000000000000001000000000000001000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000100000001000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000 +000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000 +000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000010000000000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000100000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000001000000000000001000101000000000000000010000000000000000000100001000000110110000000000100000010000000000000100010000000000000000000000000010001001010000000000010000010000000010000000010010000000000000000000100000000000000000000000000001100001000000000000000010000000100000000000000000010001010 +000000000000000000100000000010000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000011000000000010000001000000000000000000000000000010000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000 +100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000010000000000001000000000010000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000010000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000001000000000100000000000000000000000000000000000000000000000000000000000000000000000100000100010000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000010000000000000000000000000000000000000000010000000 +000000000000000000000000000000000000100000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000010000000 +000000000000000000000000000100000100110000000000000000000010001000000010000000100000000000100000000000000010100000100001000000000010100100000010000000000000000000000100000000100000010010000000001000000000000100000000000000000000010100000000010000000000000000000001000100011000000000100100000001000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000 +000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000100000000000000010000001000000000000000000001000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000010000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000100000000000000000000000000000000000000000001000000000000000000000000000000000000000000000100000000000000100000000000000000000000000000000000000000 +000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000110000010000000000000000000100000000000000000000000100000100000001010010000000000000000001000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000000000100000000000000000000000000000000000000000010001000000000000000000000000000100000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000010000000000000000000000000000000000100000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000010000000110100000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000001000000001010100000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000001100000000010000010000000000000000000000000000000000010000000000000000 +000000000000000000000000000000010000000000000010000000000000000000000000000100000000100000000000000000000000000000000000000000000000100000000000000000001000000000000000000011000000000000000000000000000000000010000000000000000000000000000000010000000000000000000000001000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000100000000000100000000000000000000000000001000000000000000000000000000000000000000000000001000000001010000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000001100000000100010100010000000000010000000000000000000001010000100101100000001100000000011100000000000000001000010010100100000000000100000001010000100000010000010010100000000001110000000010000000000000000100000000001000110100010011000000001001000000000011000001001000000000000000010011000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000010000000000000000000000000000001000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000010000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000100000000000000000000000000001000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000001000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000 +000000000100000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000 +000000010000000000000000010000000000000000000010000000000001001000000000100000000000000000000000001001000000000000000001000000000000000100000000000010000000000001000000100000000000000000000000000000000100000000000000101000000000000000000010000000010000000000100010000000000000000000000010000000000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000001000000000000000000000000000000000000 +001000001000000100000001000110000000000000000000000000000000000000100001000000100110000000000100000000000000000000000010000000100100000000000000010000000000000000000000010000000000000000000010010001000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000001010 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000001000000000000000000000000000000000000000001000000100000000000000000000000000000000000000010000000100100000000000000000000001000000000000000000010000000000000000010000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000 +000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000100 +000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000 +000000000000000000000000000010000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000 +100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000 +000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000010100000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000101000001100000001000010000000010011000101000000000000001011100101011100001010010000000001000000001000101000000000010010010100001000000000000000010100000011001000100100000101000010100000101000100110110000000001100110000000001010010000011100001010000001100100001000100001000010000001011000100001000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000010100000000000000100000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000100000000000000100000000000000000000000000000000000000000000010100000000000000001000000000000000000001000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000101000000000000000000001000000000000000100000000101001000000000000110000000001000000001000000000000001010000000000000100000000000000001000000000000010000000010001000000100100000000000010100001000010000100000000000110000000000000000000001000000000000000000000001000000000000000000000100000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000100100000000000010000000010000001000000000000000100000000000100000000000000010000100000000000000000000100000000000000000000000000000000000000000000000000000000000000000001000010000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000001000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000100000000000000000000000000000000000000000000000000000000000 +010000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000 +000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000010000000000000000000000000000000000100000000001000000000000000000000100000000000000001000100000000000000000000000000000000000000000000000100000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000001000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000010000000000000001000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000100000000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000000000010000000000000010000000100000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000100000000000000000000000000000000000000000000000000000000000000000100000 +000000000000000000000000001000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000100000000000000001000000000000000000000000000000000000000000000010000000000100100000010000000000000000000000000010000000000000000000000001 +000000001000000000100000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000010000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000100 +000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000001000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000001000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000001000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000 +000000000000000000100000000010000000000000000000000000000000000010000001000000000000000000000000000000100000000001000000000000000000000000000000000000010001000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000010000000000000000000000000000000000000000000000000000000000000001000000000010000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000010000000000 +000000000000000000000000000000000000000000000000000000010000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000010000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000 +000000000000100000000000000000000000000000000000000000000000100000010000000000000001000010000000000001000000000000000000001000000000000000000000001000100000000000000000000000000000011000000000100000000000100000000000000000000000000000000000000000000000010000000001000000000000000010000000000001000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000100000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000001000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000001000000000000000000000000000010100000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000010000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000 +000000000000000001000001100000000000000000000000000000100000000000001110010000000000000001000000000010100000000000100000000000100000001000000000000000000000000010000000010000000000010000000000000010011001000000000001000001000000000001000000000000000000000000100000000000000000000000000010000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000010000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000010000000100000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000100000000000000010000000000000000000000000000001000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000001000000000000000000000000001000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000010000000 +000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000010000000000000000000000000000000000000000010000000000100000000000000000000000000000000000000000000000000001000000000000000000000000000000000000001000000000000000010000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000001000000000000000 +000000000000000000000000000000000000000000100000000000010000000100000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000001000000010000000000000000010010000000000000000000001000000000000010000000000000000000000000000000000000100000000000000000000000000000010010000000000000000000010000000000000011000000000000000001000000000000000000000000000000000100000000000000000000010000000000001000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000010000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000100000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000 +000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000100000000100000000000000000000100000000001000000100001001001000000000000001010000000000000000000001000100000100000011000011010000000100000000000000100000000001000100000000000000000010010001000100100010000001000000111000000001000000000010010001000000000001100001000000000000110100000010000000001000 +000000000000000000000000000000000000000000100000000000010000000110000001000000000000000100000000000000000000000000010000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000100000000000000000100000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100001000001000000001000000000010000000000001000000000000010001100000000001000000000000000001000000000000100000100000001000000000000000000000000000000100000000000000100000000000000000000000001100000000000000000001000110000010000010000000010000000000010000011000000000000000000000100000011000100000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000001000000000000000000000 +000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +000000000100000000000000000000000000000000000000000000000010000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000010000000000000000000000000000000000000000000000100000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000100 +000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000010000000 +010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +010000010000000000100000000000000000000001100000000000010000000000000000000000000000000000010000000100000000000001000001000000000010000000100000000000010001000000000000000000001001000000000000000000000000000000000000000000000000000000010000100000000000000000000000000000010000000000001000001000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010010000 +000000000000000000000000000010000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000010000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000 +000000010000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000 +000000000000000000000000000000010001000000100000010011000000000000000000000000000000000001100100000000000000000000000000000000000000100000000000100000000000000000000000000000000000000000000000000000000000110000000000000000000000010001000000010110000000000000000001000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000001000000000000000000000000000000000000000000000001000000000000000001000000000000000000000000000000000100000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000001000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000100000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000 +000000000000010000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001001000000000000000000000000000101000000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000010010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000010000000000000010000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000100000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000110000000000000000000000000001000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000001000000000000000001100000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000 +010000000000000000000000000010000000000101010000000000000000000000000001000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000001000000000010000000000000000000000001000100000000000000000000000000000000000 +000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000001000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000 +000000000000000000000000000010100000000000000000000000000000000000000001000000000000000000000000000010000000000000000001000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000 +000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 +000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 diff --git a/sampledata300.adj.atr b/sampledata300.adj.atr new file mode 100644 index 0000000..b3e5779 --- /dev/null +++ b/sampledata300.adj.atr @@ -0,0 +1,300 @@ +0 6 0 573 6 14 +1 5 4 461 5 18 +2 5 0 615 5 17 +3 6 2 906 0 15 +4 3 1 370 1 4 +5 5 4 1130 3 4 +6 9 1 1113 2 6 +7 16 3 780 2 14 +8 3 3 349 0 10 +9 11 0 433 0 19 +10 3 0 248 0 19 +11 3 0 812 9 7 +12 7 4 1290 2 7 +13 3 1 582 7 0 +14 3 4 835 3 4 +15 6 1 546 5 4 +16 1 1 1035 9 2 +17 3 2 410 0 1 +18 6 3 90 6 14 +19 3 2 267 4 8 +20 3 1 162 2 1 +21 3 2 864 5 0 +22 4 0 1032 8 9 +23 5 4 2556 3 14 +24 3 1 520 1 11 +25 3 2 382 3 12 +26 8 1 881 1 16 +27 4 1 200 9 4 +28 44 2 551 0 12 +29 6 0 832 6 2 +30 11 2 724 9 17 +31 10 3 277 9 0 +32 1 0 220 8 9 +33 5 0 1132 9 12 +34 4 4 1255 2 4 +35 3 1 372 7 9 +36 6 1 686 4 14 +37 5 4 737 4 18 +38 3 1 864 7 4 +39 12 2 1657 9 18 +40 6 4 380 7 0 +41 3 0 1220 3 12 +42 48 3 648 2 16 +43 2 4 263 4 2 +44 4 0 1356 3 3 +45 1 3 627 7 0 +46 10 3 2442 9 4 +47 3 0 914 9 5 +48 3 2 284 6 19 +49 4 1 496 4 2 +50 3 2 140 9 5 +51 4 2 1242 0 16 +52 3 2 233 8 18 +53 7 0 427 7 6 +54 9 4 2843 6 12 +55 15 1 186 4 13 +56 3 0 1338 8 11 +57 3 3 772 1 14 +58 14 4 184 5 19 +59 5 2 784 9 10 +60 3 0 942 5 17 +61 3 0 385 2 0 +62 7 2 1382 7 8 +63 19 3 705 2 7 +64 11 4 1141 7 19 +65 4 4 404 9 13 +66 7 0 317 5 10 +67 3 3 1074 9 18 +68 4 4 435 9 14 +69 4 3 745 6 8 +70 14 3 480 2 2 +71 67 1 595 5 19 +72 4 3 202 8 0 +73 5 4 431 8 18 +74 5 3 336 8 2 +75 5 0 158 1 10 +76 11 3 2261 7 4 +77 4 3 894 5 0 +78 8 2 920 5 12 +79 6 2 750 8 14 +80 3 3 566 1 13 +81 3 3 581 1 13 +82 5 2 756 1 18 +83 5 4 503 3 0 +84 4 0 101 1 15 +85 5 1 697 4 6 +86 3 1 355 4 8 +87 3 4 657 7 10 +88 3 1 2639 4 13 +89 10 1 393 4 13 +90 4 1 345 4 9 +91 6 2 478 4 9 +92 29 4 450 3 11 +93 3 3 1014 0 6 +94 2 1 2701 1 16 +95 2 1 332 1 17 +96 1 1 646 0 11 +97 2 4 574 7 2 +98 3 3 742 3 4 +99 6 3 473 7 15 +100 32 3 969 5 10 +101 8 1 178 4 8 +102 14 0 295 7 17 +103 3 3 288 0 4 +104 3 3 1356 9 0 +105 9 1 1009 5 0 +106 3 0 1374 4 4 +107 3 0 186 5 11 +108 4 4 359 3 3 +109 5 0 767 9 4 +110 9 3 556 5 1 +111 3 0 976 9 8 +112 3 0 415 9 7 +113 5 2 207 2 2 +114 4 2 454 3 6 +115 4 3 399 9 3 +116 4 3 95 7 5 +117 2 3 673 6 2 +118 11 3 770 1 19 +119 101 3 536 6 11 +120 8 1 528 3 2 +121 4 0 524 3 12 +122 3 3 1544 4 6 +123 3 3 304 4 16 +124 8 2 595 1 2 +125 3 4 391 1 16 +126 11 2 781 8 12 +127 3 4 1333 0 14 +128 3 0 1112 5 2 +129 6 4 1441 9 17 +130 48 3 245 5 10 +131 3 1 561 1 14 +132 21 1 360 7 8 +133 7 4 403 0 12 +134 4 3 496 4 5 +135 9 3 537 7 9 +136 4 0 377 5 15 +137 6 3 496 4 1 +138 6 3 206 8 10 +139 4 0 92 2 11 +140 12 1 377 4 13 +141 5 3 817 5 12 +142 3 4 393 7 8 +143 3 2 1038 3 14 +144 6 4 360 4 10 +145 3 3 429 4 18 +146 3 3 757 3 0 +147 3 3 143 0 12 +148 3 0 413 1 0 +149 18 3 391 7 3 +150 19 2 439 7 0 +151 9 0 100 9 1 +152 4 1 785 7 19 +153 3 2 313 8 9 +154 3 0 743 5 10 +155 6 0 217 9 6 +156 4 1 505 4 4 +157 5 0 292 6 6 +158 3 0 1591 6 5 +159 3 1 673 4 12 +160 5 2 758 1 1 +161 6 0 738 9 18 +162 2 1 1585 8 3 +163 1 4 184 8 1 +164 4 1 400 1 18 +165 6 4 1106 5 7 +166 5 0 331 4 5 +167 4 3 656 3 1 +168 3 0 529 5 1 +169 4 3 446 4 15 +170 5 4 381 6 10 +171 4 0 444 3 13 +172 10 1 2414 0 0 +173 3 3 330 6 9 +174 13 2 676 6 10 +175 3 2 361 7 11 +176 4 3 283 8 2 +177 7 2 735 8 9 +178 2 2 295 8 10 +179 25 1 193 0 15 +180 1 2 405 6 3 +181 11 0 592 1 15 +182 6 2 1275 6 7 +183 3 0 476 6 12 +184 3 3 1154 8 16 +185 3 2 327 6 14 +186 2 1 197 4 19 +187 3 1 897 8 5 +188 3 0 334 7 11 +189 7 0 870 5 19 +190 8 3 1863 5 7 +191 5 2 976 7 19 +192 4 1 150 6 6 +193 3 4 482 5 16 +194 3 1 430 4 4 +195 3 4 586 2 14 +196 3 2 2471 1 15 +197 35 2 433 1 14 +198 4 3 787 3 15 +199 4 4 655 9 0 +200 3 2 355 4 13 +201 4 4 544 0 2 +202 3 3 526 6 1 +203 3 1 350 4 10 +204 5 2 641 6 9 +205 8 0 341 6 19 +206 3 1 465 7 17 +207 3 2 629 9 3 +208 2 0 1279 4 11 +209 12 3 557 2 5 +210 2 2 689 5 1 +211 3 0 1159 8 13 +212 3 3 986 9 0 +213 3 1 847 3 8 +214 3 1 1076 8 18 +215 5 2 901 2 6 +216 7 4 1367 6 12 +217 4 1 1271 9 6 +218 3 4 196 5 3 +219 6 0 477 5 19 +220 3 1 592 0 2 +221 4 2 737 0 4 +222 3 0 179 8 6 +223 3 0 412 3 14 +224 5 0 726 2 12 +225 3 1 473 3 11 +226 3 2 470 5 11 +227 6 0 794 4 3 +228 13 4 271 5 3 +229 6 2 189 0 7 +230 4 1 94 5 4 +231 9 4 553 4 17 +232 4 0 411 0 1 +233 19 4 467 0 13 +234 3 3 552 0 19 +235 3 3 946 2 1 +236 3 3 1105 3 18 +237 8 2 1770 4 3 +238 10 3 583 0 4 +239 5 3 596 2 13 +240 55 4 593 9 1 +241 16 1 379 3 3 +242 3 2 316 3 2 +243 4 0 309 9 14 +244 3 2 1192 9 5 +245 3 2 555 4 15 +246 2 3 2138 6 4 +247 44 1 1047 0 12 +248 3 3 606 0 2 +249 3 4 293 7 19 +250 3 1 577 0 15 +251 4 0 1647 5 8 +252 3 0 440 0 3 +253 3 2 1562 6 19 +254 3 3 1130 2 1 +255 4 0 281 8 19 +256 3 2 1304 7 17 +257 3 1 225 3 7 +258 9 1 1074 0 17 +259 4 0 817 0 12 +260 7 4 768 8 14 +261 5 1 489 8 6 +262 3 1 418 1 2 +263 35 3 672 1 17 +264 3 1 181 2 19 +265 4 3 651 7 9 +266 7 2 425 2 9 +267 3 0 594 1 16 +268 3 4 52 8 16 +269 3 4 444 7 10 +270 3 0 416 4 9 +271 24 3 239 7 7 +272 11 4 246 9 7 +273 3 4 529 8 4 +274 3 3 789 9 18 +275 3 3 279 1 12 +276 4 2 834 0 2 +277 4 2 676 1 8 +278 8 1 2871 4 0 +279 4 1 796 0 18 +280 3 3 631 5 18 +281 2 4 198 9 8 +282 4 3 559 9 5 +283 4 2 506 1 14 +284 11 4 432 7 5 +285 4 3 323 9 16 +286 10 2 605 3 2 +287 4 3 317 5 14 +288 7 1 350 8 1 +289 2 4 700 3 3 +290 13 2 1480 1 19 +291 4 4 443 6 1 +292 16 1 149 5 4 +293 6 1 845 4 5 +294 6 4 2364 5 19 +295 4 1 354 4 8 +296 6 0 745 1 0 +297 6 3 433 9 3 +298 3 1 899 7 15 +299 2 1 193 7 3 diff --git a/sampledataSmall.adj b/sampledataSmall.adj new file mode 100644 index 0000000..6589938 --- /dev/null +++ b/sampledataSmall.adj @@ -0,0 +1,6 @@ +010111 +101100 +010100 +111011 +100100 +100100 diff --git a/sampledataSmall.adj.atr b/sampledataSmall.adj.atr new file mode 100644 index 0000000..566665a --- /dev/null +++ b/sampledataSmall.adj.atr @@ -0,0 +1,6 @@ +0.5 0 -1 +1 1 -1 +1 0.5 -1 +1 1 -0.5 +0.5 0 0 +-1 0 2 diff --git a/src/DCB/DCB.hs b/src/DCB/DCB.hs index b2bc6e1..1b917b6 100644 --- a/src/DCB/DCB.hs +++ b/src/DCB/DCB.hs @@ -20,20 +20,23 @@ import Util import DCB.Structures import DCB.IO -import Prelude hiding ((++)) -import qualified Prelude as P ((++)) +import Prelude hiding ((++)) +import qualified Prelude as P ((++)) import Control.Monad.Par -import Data.Array.Repa ((:.) (..), Array, (!), (*^), (++), (+^), - (-^), (/^)) -import qualified Data.Array.Repa as A +import Control.Parallel.Strategies +import Control.Monad.Identity +import Control.DeepSeq +import Data.Array.Repa ((:.) (..), Array, (!), (*^), (++), (+^), + (-^), (/^)) +import qualified Data.Array.Repa as A import Data.Array.Repa.Index import Data.Either import Data.Int -import qualified Data.List as L +import qualified Data.List as L import Data.Maybe -import qualified Data.Vector.Unboxed as V -import Debug.Trace +import qualified Data.Vector.Unboxed as V +--import Debug.Trace import qualified Data.ByteString.Char8 as B @@ -62,12 +65,21 @@ testDivergence = A.fromListUnboxed (ix1 5) [3.0, 0.0, 300.0, 2.0, 10.0] testDensity = 0.7::Density; testReq = 3 ::Int +force :: (A.Shape sh, V.Unbox e) => Array A.D sh e -> Array A.U sh e +force a = runIdentity (A.computeP a) + +--ignore A.U-Array in deepseq - already unboxed.. +instance (A.Shape sh, V.Unbox e) => NFData (Array A.U sh e) where + rnf a = () + {-# INLINE rnf #-} --TODO: Do we have to filter? step :: [Graph] -> Adj -> Attr -> Density -> MaxDivergence -> Int -> [Graph] step gs@((ind,_,_):_) a b c d e = --trace ("step from " P.++ show (A.extent ind) ) $ filterLayer $ concat $ map (expand a b c d e ) gs + +|| (parBuffer 75 rdeepseq) + -- | calculates all possible additions to one Graph, yielding a list of valid expansions @@ -90,13 +102,14 @@ preprocess :: Adj -- ^ original adjacency matrix -> (Adj, [Graph]) preprocess adj attr div req = let - (Z:.nNodes:._) = A.extent adj - results = map (initGraph attr div req) [(i, j) | i <- [0..(nNodes-1)], j <- [(i+1)..(nNodes-1)], adj!(ix2 i j) /= 0] - finalGraphs = lefts results - mask = A.fromUnboxed (A.extent adj) $V.replicate (nNodes*nNodes) False V.// + ! (Z:.nNodes:._) = A.extent adj + ! results = map (initGraph attr div req) [(i, j) | i <- [0..(nNodes-1)], j <- [(i+1)..(nNodes-1)], adj!(ix2 i j) /= 0] + +|| (parBuffer 25 rdeepseq) + ! finalGraphs = lefts results + ! mask = A.fromUnboxed (A.extent adj) $V.replicate (nNodes*nNodes) False V.// ((map (\(i,j) -> (i*nNodes + (mod j nNodes), True)) $rights results) P.++ (map (\(i,j) -> (j*nNodes + (mod i nNodes), True)) $rights results)) - adj' = A.computeS $A.fromFunction (A.extent adj) (\sh -> if mask!sh then 0 else adj!sh) + ! adj' = runIdentity $ A.computeUnboxedP $A.fromFunction (A.extent adj) (\sh -> if mask!sh then 0 else adj!sh) in (adj', finalGraphs) -- | Initializes a seed 'Graph' if it fulfills the constraints, returns the input nodes @@ -108,7 +121,7 @@ initGraph :: Attr -- ^ table of all node’s attributes -> Either Graph (Int, Int) initGraph attr div req (i, j) = let - constr = constraintInit attr div req i j + ! constr = constraintInit attr div req i j in case constr of Nothing -> Right (i, j) Just c -> Left (A.fromListUnboxed (ix1 2) [i,j], c, 1) @@ -119,20 +132,23 @@ constraintInit :: Attr -> MaxDivergence -> Int -- ^ required number of consisten -> Int -- ^ first node to test -> Int -- ^ second node to test first node against -> Maybe Constraints -constraintInit attr div req i j = +constraintInit ! attr ! div req i j = let - (Z:._:.nAttr) = A.extent attr + ! (Z:._:.nAttr) = A.extent attr fConstr (Z:.a:.c) = let - col = A.slice attr (A.Any:.a) + ! col = A.slice attr (A.Any:.a) in case c of 0 -> min (attr!(ix2 i a)) (attr!(ix2 j a)) 1 -> max (attr!(ix2 i a)) (attr!(ix2 j a)) - constr = A.computeS $A.fromFunction (ix2 nAttr 2) fConstr - fulfill = A.zipWith (\thediv dist -> if abs dist <= thediv then 1 else 0) div - $A.foldS (-) 0 constr - nrHit = A.foldAllS (+) (0::Int) $A.map fromIntegral fulfill - in if nrHit >= req then Just (A.computeS fulfill, constr) else Nothing + (constr, fulfill, nrHit) = runIdentity $ + do + ! constr <- return $ A.computeUnboxedS $A.fromFunction (ix2 nAttr 2) fConstr + ! fulfill <- return $ A.computeUnboxedS $ A.zipWith (\thediv dist -> if abs dist <= thediv then 1 else 0) div + $A.foldS (-) 0 constr + ! nrHit <- return $ A.foldAllS (+) (0::Int) $A.map fromIntegral fulfill + return (constr, fulfill, nrHit) + in if nrHit >= req then Just (fulfill, constr) else Nothing -- | removes all duplicate graphs filterLayer :: [Graph] -> [Graph] @@ -151,16 +167,16 @@ constraint :: Attr -> MaxDivergence -> Int -- ^ required number of consistent at constraint attr div req (ind, (fulfill, constr), _) newNode = let --TODO: UGLY hack... this has to be somewhere .. -.- - posInf = read "Infinity" :: Double - negInf = read "-Infinity" :: Double + ! posInf = read "Infinity" :: Double + ! negInf = read "-Infinity" :: Double -- convert into Vector of new Indices after appending new node-index - totalInd = A.toUnboxed $ A.computeUnboxedS $ ind ++ A.fromListUnboxed (ix1 1) [newNode] + ! totalInd = A.toUnboxed $ A.computeUnboxedS $ ind ++ A.fromListUnboxed (ix1 1) [newNode] updateConstr :: (DIM2 -> Double) -> DIM2 -> Double updateConstr f sh@(Z:.i:.c) = let - slice = A.slice attr (A.Any :. i) - mins = A.traverse slice id (\g sh'@(Z :. j)-> if V.any (==j) totalInd then (g sh') else posInf) - maxs = A.traverse slice id (\g sh'@(Z :. j)-> if V.any (==j) totalInd then (g sh') else negInf) + ! slice = A.slice attr (A.Any :. i) + ! mins = A.traverse slice id (\g sh'@(Z :. j)-> if V.any (==j) totalInd then (g sh') else posInf) + ! maxs = A.traverse slice id (\g sh'@(Z :. j)-> if V.any (==j) totalInd then (g sh') else negInf) in -- trace (show i P.++ show (A.toList slice) P.++ show c P.++ "\n " P.++ show (A.foldAllS (max) negInf $ maxs)) $ @@ -175,7 +191,7 @@ constraint attr div req (ind, (fulfill, constr), _) newNode = $A.zipWith (\thediv dist -> abs dist <= thediv) div $A.foldS (-) 0 constrNew ! nrHit = A.foldAllS (+) (0::Int) $A.map fromIntegral fulfillNew in if nrHit >= req then Just {-$ trace ("returning const-matrix for "P.++ show (A.toList ind) P.++"\n" P.++ (B.unpack $ outputArray constrNew))-} - (A.computeS fulfillNew, constrNew) else Nothing + (A.computeUnboxedS fulfillNew, constrNew) else Nothing -- updates the density of a graph extended by a single node updateDensity :: Adj -- ^ global adjacency matrix of all nodes @@ -225,8 +241,8 @@ addPoint :: Adj -- ^ global adjacency matrix of all nodes -> Maybe Graph addPoint adj attr d div req g@(nodes, _, dens) n = let - constr = constraint attr div req g n - densNew = updateDensity adj nodes n dens + (! constr,! densNew) = (constraint attr div req g n,updateDensity adj nodes n dens) + -- +|| (parTuple2 rdeepseq rdeepseq) in case constr of Nothing -> Nothing @@ -234,7 +250,7 @@ addPoint adj attr d div req g@(nodes, _, dens) n = --trace (B.unpack $ outputArray constr) $ case densNew >= d of True -> Just {-$ trace ("submitting graph:\n================\n " P.++ (B.unpack $ outputGraph [(A.computeS $nodes ++ A.fromListUnboxed (ix1 1) [n], c, densNew)])) -} - (A.computeS $nodes ++ A.fromListUnboxed (ix1 1) [n], c, densNew) + (A.computeUnboxedS $nodes ++ A.fromListUnboxed (ix1 1) [n], c, densNew) False -> Nothing reduceDim :: (A.Shape sh, Integral a) => (sh :. a) -> sh @@ -242,7 +258,7 @@ reduceDim (a :. b) = a --A.shapeOfList $ tail $ A.listOfShape a -- | yields all valid addititons (=neighbours) to a Graph addablePoints :: Adj -> Graph -> Vector A.U Bool -addablePoints adj (ind,_,_) = A.computeS $ +addablePoints adj (ind,_,_) = A.computeUnboxedS $ (A.traverse adj reduceDim diff --git a/src/Main.hs b/src/Main.hs index 0c61b67..f0a4611 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -42,7 +42,7 @@ import qualified Data.Stream as S import qualified Data.Text as T import Data.Text.Encoding import qualified Data.Vector.Unboxed as V -import Debug.Trace +--import Debug.Trace import System.Environment import System.Exit (exitFailure, exitSuccess) import Test.QuickCheck.All (quickCheckAll) @@ -120,20 +120,21 @@ emptyLine a doCalculation adj attr = let dens = 0.75 - omega = (A.fromListUnboxed (ix1 3) [0.5,0.5,0.5]) + omega = (A.fromListUnboxed (ix1 6) [0,5,3,300,5,10]) delta = 2 (adj_, graph_) = preprocess adj attr {--0.8--} omega delta in B.concat $ [ - outputArray $ trace ("After: "++ show (sumAllS adj_)++"\n") adj_, + --outputArray $ --trace ("After: "++ show (sumAllS adj_)++"\n") + -- adj_, outputGraph $ L.sort $ doAll graph_ adj_ attr dens omega delta --- outputGraph $ L.sort $ (step graph_ adj attr dens omega delta) --- ++ (step (step graph_ adj attr dens omega delta) adj attr dens omega delta) ] where + -- don't print out seeds doAll [] _ _ _ _ _ = [] doAll gs a b c d e = doAll' (step gs a b c d e) a b c d e + -- but everything in the following recursive calls doAll' [] _ _ _ _ _ = [] doAll' gs a b c d e = gs ++ doAll' (step gs a b c d e) a b c d e @@ -172,7 +173,7 @@ checkError a -- | convinience debug-function. Needs to be -- changed to return () to disable Debug. -debug a = putStrLn a +debug a = return () --putStrLn a -- | The main-function to bootstrap our application @@ -226,5 +227,230 @@ main = do ----- CALCULATE & OUTPUT - debug $ "Before: " ++ show (sumAllS graph) + --debug $ "Before: " ++ show (sumAllS graph) B.putStr $ doCalculation graph attr + + + + +{---TIMINGS + +SINGLE CORE +=========== + ./hgraph +RTS -s >result + 197,751,229,488 bytes allocated in the heap + 290,034,880 bytes copied during GC + 11,061,600 bytes maximum residency (10 sample(s)) + 1,513,488 bytes maximum slop + 33 MB total memory in use (0 MB lost due to fragmentation) + + Tot time (elapsed) Avg pause Max pause + Gen 0 381500 colls, 0 par 2.24s 2.20s 0.0000s 0.0005s + Gen 1 10 colls, 0 par 0.05s 0.05s 0.0054s 0.0154s + + TASKS: 3 (1 bound, 2 peak workers (2 total), using -N1) + + SPARKS: 6266 (0 converted, 0 overflowed, 0 dud, 15 GC'd, 6251 fizzled) + + INIT time 0.00s ( 0.00s elapsed) + MUT time 74.11s ( 74.11s elapsed) + GC time 2.30s ( 2.25s elapsed) + EXIT time 0.00s ( 0.00s elapsed) + Total time 76.42s ( 76.36s elapsed) + + Alloc rate 2,668,183,845 bytes per MUT second + + Productivity 97.0% of total user, 97.1% of total elapsed + +gc_alloc_block_sync: 0 +whitehole_spin: 0 +gen[0].sync: 0 +gen[1].sync: 0 + +4 CORES: +======== +./hgraph +RTS -s -N4 >result + 197,754,645,560 bytes allocated in the heap + 293,083,624 bytes copied during GC + 11,061,264 bytes maximum residency (10 sample(s)) + 1,555,576 bytes maximum slop + 34 MB total memory in use (0 MB lost due to fragmentation) + + Tot time (elapsed) Avg pause Max pause + Gen 0 380952 colls, 380952 par 15.25s 3.92s 0.0000s 0.0255s + Gen 1 10 colls, 9 par 0.22s 0.06s 0.0056s 0.0181s + + Parallel GC work balance: 1.68% (serial 0%, perfect 100%) + + TASKS: 6 (1 bound, 5 peak workers (5 total), using -N4) + + SPARKS: 6266 (6228 converted, 0 overflowed, 0 dud, 30 GC'd, 8 fizzled) + + INIT time 0.00s ( 0.00s elapsed) + MUT time 105.25s ( 86.11s elapsed) + GC time 15.47s ( 3.98s elapsed) + EXIT time 0.00s ( 0.00s elapsed) + Total time 120.73s ( 90.09s elapsed) + + Alloc rate 1,878,861,647 bytes per MUT second + + Productivity 87.2% of total user, 116.8% of total elapsed + +gc_alloc_block_sync: 661438 +whitehole_spin: 0 +gen[0].sync: 655 +gen[1].sync: 1347 + + +parallel preprocessing (Adj, Seeds) +================================== +./hgraph +RTS -s -N4 >result +Building hgraph-0.0.1... +Preprocessing executable 'hgraph' for hgraph-0.0.1... +[4 of 5] Compiling DCB.DCB ( src/DCB/DCB.hs, dist/build/hgraph/hgraph-tmp/DCB/DCB.o ) +Linking dist/build/hgraph/hgraph ... + 197,755,802,848 bytes allocated in the heap + 289,986,840 bytes copied during GC + 11,071,880 bytes maximum residency (10 sample(s)) + 1,566,376 bytes maximum slop + 34 MB total memory in use (0 MB lost due to fragmentation) + + Tot time (elapsed) Avg pause Max pause + Gen 0 380919 colls, 380919 par 15.73s 3.93s 0.0000s 0.0112s + Gen 1 10 colls, 9 par 0.28s 0.07s 0.0073s 0.0335s + + Parallel GC work balance: 1.69% (serial 0%, perfect 100%) + + TASKS: 6 (1 bound, 5 peak workers (5 total), using -N4) + + SPARKS: 7895 (7825 converted, 0 overflowed, 0 dud, 50 GC'd, 20 fizzled) + + INIT time 0.00s ( 0.00s elapsed) + MUT time 98.47s ( 81.37s elapsed) + GC time 16.01s ( 4.00s elapsed) + EXIT time 0.00s ( 0.00s elapsed) + Total time 114.49s ( 85.37s elapsed) + + Alloc rate 2,008,240,220 bytes per MUT second + + Productivity 86.0% of total user, 115.3% of total elapsed + +gc_alloc_block_sync: 757575 +whitehole_spin: 0 +gen[0].sync: 592 +gen[1].sync: 510 + +parallel processing (primitive, too many sparks fizzled) - Speedup: 76.36/51.51 = 1.48 +======================================================== +./hgraph +RTS -s -N4 >result +Building hgraph-0.0.1... +Preprocessing executable 'hgraph' for hgraph-0.0.1... +[4 of 5] Compiling DCB.DCB ( src/DCB/DCB.hs, dist/build/hgraph/hgraph-tmp/DCB/DCB.o ) +[5 of 5] Compiling Main ( src/Main.hs, dist/build/hgraph/hgraph-tmp/Main.o ) +Linking dist/build/hgraph/hgraph ... + 205,324,862,344 bytes allocated in the heap + 224,224,264 bytes copied during GC + 11,157,008 bytes maximum residency (9 sample(s)) + 1,559,568 bytes maximum slop + 35 MB total memory in use (0 MB lost due to fragmentation) + + Tot time (elapsed) Avg pause Max pause + Gen 0 123063 colls, 123063 par 6.77s 1.67s 0.0000s 0.0074s + Gen 1 9 colls, 8 par 0.21s 0.06s 0.0061s 0.0190s + + Parallel GC work balance: 8.15% (serial 0%, perfect 100%) + + TASKS: 6 (1 bound, 5 peak workers (5 total), using -N4) + + SPARKS: 1714681 (861196 converted, 0 overflowed, 0 dud, 78 GC'd, 853407 fizzled) + + INIT time 0.00s ( 0.00s elapsed) + MUT time 145.46s ( 49.78s elapsed) + GC time 6.99s ( 1.73s elapsed) + EXIT time 0.00s ( 0.00s elapsed) + Total time 152.45s ( 51.51s elapsed) + + Alloc rate 1,411,565,587 bytes per MUT second + + Productivity 95.4% of total user, 282.4% of total elapsed + +gc_alloc_block_sync: 378641 +whitehole_spin: 0 +gen[0].sync: 572 +gen[1].sync: 609 + + +parallel processing (monad-par, repa-stuff seqential) - Speedup: 76.36/34,05 = 2.243 +===================================================== + +./hgraph +RTS -N4 -s > result.txt + 204,368,634,080 bytes allocated in the heap + 306,058,720 bytes copied during GC + 11,108,872 bytes maximum residency (10 sample(s)) + 1,597,088 bytes maximum slop + 35 MB total memory in use (0 MB lost due to fragmentation) + + Tot time (elapsed) Avg pause Max pause + Gen 0 108838 colls, 108838 par 9.21s 2.29s 0.0000s 0.0020s + Gen 1 10 colls, 9 par 0.32s 0.08s 0.0083s 0.0245s + + Parallel GC work balance: 29.41% (serial 0%, perfect 100%) + + TASKS: 6 (1 bound, 5 peak workers (5 total), using -N4) + + SPARKS: 15737 (14412 converted, 0 overflowed, 0 dud, 1251 GC'd, 74 fizzled) + + INIT time 0.00s ( 0.00s elapsed) + MUT time 124.37s ( 31.67s elapsed) + GC time 9.53s ( 2.37s elapsed) + EXIT time 0.00s ( 0.00s elapsed) + Total time 133.91s ( 34.05s elapsed) + + Alloc rate 1,643,242,747 bytes per MUT second + + Productivity 92.9% of total user, 365.3% of total elapsed + +gc_alloc_block_sync: 531144 +whitehole_spin: 0 +gen[0].sync: 758 +gen[1].sync: 17 + + +ADDITIONAL OVERHEAD (running on 1 Core with parallel stuff): Slowdown: 76.36/123.39 = 0.62885 +============================================================ + +./hgraph +RTS -N1 -s > result.txt + 204,364,490,096 bytes allocated in the heap + 291,824,120 bytes copied during GC + 10,081,664 bytes maximum residency (11 sample(s)) + 1,545,536 bytes maximum slop + 30 MB total memory in use (0 MB lost due to fragmentation) + + Tot time (elapsed) Avg pause Max pause + Gen 0 393965 colls, 0 par 6.77s 6.72s 0.0000s 0.0017s + Gen 1 11 colls, 0 par 0.09s 0.09s 0.0079s 0.0217s + + TASKS: 3 (1 bound, 2 peak workers (2 total), using -N1) + + SPARKS: 15737 (0 converted, 0 overflowed, 0 dud, 166 GC'd, 15571 fizzled) + + INIT time 0.00s ( 0.00s elapsed) + MUT time 116.53s (116.52s elapsed) + GC time 6.85s ( 6.80s elapsed) + EXIT time 0.00s ( 0.00s elapsed) + Total time 123.39s (123.32s elapsed) + + Alloc rate 1,753,707,727 bytes per MUT second + + Productivity 94.4% of total user, 94.5% of total elapsed + +gc_alloc_block_sync: 0 +whitehole_spin: 0 +gen[0].sync: 0 +gen[1].sync: 0 + + +REAL SPEEDUP AGAINST OVERHEAD-VARIANT: 129.39/34.05 = 3.8 +========================================================= + +-} \ No newline at end of file