diff --git a/.gitignore b/.gitignore index 1c18d74..19c8d2e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ *.o .DS_Store .token +.idea diff --git a/.idea/modules.xml b/.idea/modules.xml index 284c6d9..00872aa 100644 --- a/.idea/modules.xml +++ b/.idea/modules.xml @@ -2,7 +2,7 @@ - + \ No newline at end of file diff --git a/.idea/paranormal-or-skeptic-ISI-public.iml b/.idea/paranormal-or-skeptic-ISI-public.iml deleted file mode 100644 index d6ebd48..0000000 --- a/.idea/paranormal-or-skeptic-ISI-public.iml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/.idea/sonarlint/issuestore/index.pb b/.idea/sonarlint/issuestore/index.pb index e69de29..dcba01c 100644 --- a/.idea/sonarlint/issuestore/index.pb +++ b/.idea/sonarlint/issuestore/index.pb @@ -0,0 +1,7 @@ + +: + +.gitignore,a/5/a5cc2925ca8258af241be7e5b0381edf30266302 +: + +log_reg.py,8/d/8defb5199d336fa9e58cbe5b8c4833d0e222ccf9 \ No newline at end of file diff --git a/README.md b/README.md deleted file mode 100644 index 8c928a6..0000000 --- a/README.md +++ /dev/null @@ -1,13 +0,0 @@ -Skeptic vs paranormal subreddits -================================ - -Classify a reddit as either from Skeptic subreddit or one of the -"paranormal" subreddits (Paranormal, UFOs, TheTruthIsHere, Ghosts, -,Glitch-in-the-Matrix, conspiracytheories). - -Output label is the probability of a paranormal subreddit. - -Sources -------- - -Data taken from . diff --git a/config.txt b/config.txt deleted file mode 100644 index f148428..0000000 --- a/config.txt +++ /dev/null @@ -1 +0,0 @@ ---metric Likelihood --metric Accuracy --metric F1 --metric F0:N --metric F9999999:N --precision 4 --in-header in-header.tsv --out-header out-header.tsv diff --git a/dev-0/out.tsv b/dev-out.tsv similarity index 99% rename from dev-0/out.tsv rename to dev-out.tsv index 5b39cc0..c342f25 100644 --- a/dev-0/out.tsv +++ b/dev-out.tsv @@ -16,7 +16,7 @@ 1 0 0 -0 +1 1 1 0 @@ -95,7 +95,7 @@ 0 0 1 -0 +1 1 0 0 @@ -123,7 +123,7 @@ 0 0 0 -0 +1 0 0 0 @@ -189,7 +189,7 @@ 0 0 1 -1 +0 0 0 1 @@ -321,7 +321,7 @@ 0 1 0 -0 +1 1 0 0 @@ -367,7 +367,7 @@ 0 0 0 -0 +1 0 0 0 @@ -425,7 +425,7 @@ 1 0 0 -0 +1 0 1 1 @@ -436,7 +436,7 @@ 0 0 0 -0 +1 0 0 1 @@ -497,7 +497,6 @@ 0 0 0 -0 1 0 0 @@ -508,6 +507,7 @@ 0 0 0 +0 1 0 0 @@ -529,7 +529,7 @@ 0 0 1 -0 +1 0 0 0 @@ -639,8 +639,8 @@ 0 1 0 -1 -1 +0 +0 1 0 1 @@ -652,7 +652,7 @@ 1 0 1 -0 +1 1 1 0 @@ -691,11 +691,11 @@ 0 0 1 -1 0 0 0 1 +1 0 0 1 @@ -782,7 +782,7 @@ 1 0 1 -0 +1 0 1 0 @@ -846,7 +846,7 @@ 1 0 0 -0 +1 0 1 1 @@ -1056,7 +1056,7 @@ 0 1 0 -1 +0 0 0 0 @@ -1067,7 +1067,7 @@ 0 0 1 -1 +0 0 0 0 @@ -1110,7 +1110,7 @@ 0 0 0 -1 +0 0 0 1 @@ -1311,13 +1311,13 @@ 0 0 0 -0 1 0 0 0 0 0 +0 1 1 1 @@ -1366,7 +1366,7 @@ 0 0 0 -0 +1 1 0 0 @@ -1395,7 +1395,7 @@ 0 0 1 -1 +0 0 0 1 @@ -1416,7 +1416,7 @@ 0 0 0 -1 +0 1 0 0 @@ -1435,7 +1435,7 @@ 0 0 1 -0 +1 0 0 1 @@ -1476,7 +1476,7 @@ 0 0 0 -1 +0 1 0 0 @@ -1504,7 +1504,7 @@ 0 0 0 -0 +1 1 0 0 @@ -1524,7 +1524,7 @@ 0 1 0 -0 +1 0 0 1 @@ -1739,7 +1739,7 @@ 1 0 0 -0 +1 0 1 1 @@ -1820,7 +1820,7 @@ 0 0 0 -0 +1 0 0 0 @@ -1848,7 +1848,7 @@ 1 0 0 -0 +1 1 0 0 @@ -1922,7 +1922,7 @@ 1 0 0 -0 +1 0 0 1 @@ -1995,7 +1995,7 @@ 0 0 1 -0 +1 1 0 0 @@ -2116,7 +2116,7 @@ 0 0 1 -1 +0 1 0 0 @@ -2182,12 +2182,12 @@ 0 1 0 +1 0 0 0 0 -0 -0 +1 0 0 0 @@ -2295,7 +2295,7 @@ 0 0 0 -0 +1 0 0 0 @@ -2520,7 +2520,7 @@ 0 0 1 -0 +1 0 0 0 @@ -2584,7 +2584,7 @@ 0 0 0 -0 +1 0 0 1 @@ -2660,13 +2660,13 @@ 0 0 0 -0 +1 0 0 1 1 0 -0 +1 1 0 0 @@ -2821,7 +2821,7 @@ 0 0 0 -1 +0 1 0 0 @@ -2893,7 +2893,7 @@ 0 0 1 -0 +1 0 0 1 @@ -2920,7 +2920,7 @@ 0 1 0 -1 +0 0 1 1 @@ -2961,14 +2961,14 @@ 0 0 0 -1 0 0 0 0 0 -1 0 +1 +1 0 0 0 @@ -2997,13 +2997,13 @@ 1 1 0 -0 +1 1 0 0 0 1 -0 +1 0 0 0 @@ -3092,7 +3092,7 @@ 0 1 0 -0 +1 0 0 0 @@ -3135,7 +3135,7 @@ 0 0 1 -1 +0 1 0 0 @@ -3179,7 +3179,7 @@ 0 0 1 -0 +1 1 1 1 @@ -3197,7 +3197,7 @@ 0 0 0 -0 +1 0 1 0 @@ -3259,7 +3259,7 @@ 0 0 0 -0 +1 1 1 0 @@ -3356,7 +3356,7 @@ 0 0 0 -0 +1 0 0 0 @@ -3400,14 +3400,14 @@ 0 0 0 -1 0 0 -1 0 +1 0 0 0 +1 0 1 0 @@ -3494,7 +3494,7 @@ 0 1 0 -0 +1 0 0 0 @@ -3632,7 +3632,7 @@ 0 0 0 -1 +0 1 0 0 @@ -3710,7 +3710,7 @@ 0 0 1 -0 +1 0 0 0 @@ -3754,7 +3754,7 @@ 0 1 0 -1 +0 0 1 0 @@ -3822,7 +3822,7 @@ 0 1 0 -0 +1 0 1 1 @@ -3879,7 +3879,7 @@ 1 0 0 -0 +1 0 0 1 @@ -3910,7 +3910,7 @@ 0 1 0 -1 +0 0 0 0 @@ -3966,7 +3966,7 @@ 0 1 0 -0 +1 0 0 1 @@ -4011,7 +4011,7 @@ 1 0 0 -0 +1 0 0 1 @@ -4208,7 +4208,7 @@ 0 1 1 -0 +1 1 1 0 @@ -4238,7 +4238,7 @@ 0 0 0 -1 +0 0 1 1 @@ -4277,7 +4277,7 @@ 1 0 0 -1 +0 1 0 0 @@ -4459,14 +4459,14 @@ 1 0 0 -1 +0 1 0 0 0 1 0 -0 +1 0 0 0 @@ -4495,11 +4495,11 @@ 0 0 0 +1 0 0 0 -0 -0 +1 0 0 0 @@ -4527,7 +4527,7 @@ 0 1 1 -0 +1 0 1 0 @@ -4537,7 +4537,7 @@ 1 0 0 -0 +1 0 0 1 @@ -4743,7 +4743,7 @@ 0 0 0 -1 +0 0 0 0 @@ -4895,9 +4895,9 @@ 0 0 0 -0 1 1 +0 1 0 0 @@ -4909,7 +4909,7 @@ 0 0 1 -0 +1 0 0 0 @@ -5057,7 +5057,7 @@ 1 0 0 -0 +1 0 1 0 @@ -5135,7 +5135,7 @@ 0 0 0 -1 +0 1 0 0 @@ -5162,7 +5162,7 @@ 0 0 0 -0 +1 0 0 0 @@ -5235,7 +5235,7 @@ 1 1 0 -0 +1 1 1 1 diff --git a/dev-stats.txt b/dev-stats.txt new file mode 100644 index 0000000..fbf8468 --- /dev/null +++ b/dev-stats.txt @@ -0,0 +1,5 @@ +Likelihood 0.0000 +Accuracy 0.7627 +F1.0 0.6495 +Precision 0.6806 +Recall 0.6211 diff --git a/dev-0/expected.tsv b/expected-dev.tsv similarity index 100% rename from dev-0/expected.tsv rename to expected-dev.tsv diff --git a/train/expected.tsv b/expected-train.tsv similarity index 100% rename from train/expected.tsv rename to expected-train.tsv diff --git a/geval b/geval deleted file mode 100755 index b68b316..0000000 Binary files a/geval and /dev/null differ diff --git a/dev-0/in.tsv.xz b/in-dev.tsv.xz similarity index 100% rename from dev-0/in.tsv.xz rename to in-dev.tsv.xz diff --git a/in-header.tsv b/in-header.tsv deleted file mode 100644 index 5615913..0000000 --- a/in-header.tsv +++ /dev/null @@ -1 +0,0 @@ -PostText Timestamp diff --git a/train/in.tsv.xz b/in-train.tsv.xz similarity index 100% rename from train/in.tsv.xz rename to in-train.tsv.xz diff --git a/log_reg.py b/log_reg.py index dbe4d53..74ccf0a 100644 --- a/log_reg.py +++ b/log_reg.py @@ -23,23 +23,19 @@ def doc2vec(doc): return np.mean([word2vec[word] for word in doc if word in word2vec] or [np.zeros(300)], axis=0) -x_train = pd.read_table('train/in.tsv.xz', compression='xz', sep='\t', header=None, error_bad_lines=False, quoting=3) -y_train = pd.read_table('train/expected.tsv', sep='\t', header=None, quoting=3) -x_dev = pd.read_table('dev-0/in.tsv.xz', compression='xz', sep='\t', header=None, quoting=3) -x_test = pd.read_table('test-A/in.tsv.xz', compression='xz', sep='\t', header=None, quoting=3) +x_train = pd.read_table('in-train.tsv.xz', compression='xz', sep='\t', header=None, error_bad_lines=False, quoting=3) +y_train = pd.read_table('expected-train.tsv', sep='\t', header=None, quoting=3) +x_dev = pd.read_table('in-dev.tsv.xz', compression='xz', sep='\t', header=None, quoting=3) y_train = y_train[0] x_train = x_train[0].str.lower() x_train = [word_tokenize(x) for x in x_train] x_dev = x_dev[0].str.lower() x_dev = [word_tokenize(x) for x in x_dev] -x_test = x_test[0].str.lower() -x_test = [word_tokenize(x) for x in x_test] word2vec = gensim.load('word2vec-google-news-300') x_train = [doc2vec(doc) for doc in x_train] x_dev = [doc2vec(doc) for doc in x_dev] -x_test = [doc2vec(doc) for doc in x_test] model = NeuralNetworkModel() BATCH_SIZE = 1024 @@ -71,16 +67,6 @@ with torch.no_grad(): y = (outputs > 0.5) y_dev.extend(y) - for i in range(0, len(x_test), BATCH_SIZE): - X = x_test[i:i + BATCH_SIZE] - X = torch.tensor(X) - outputs = model(X.float()) - y = (outputs >= 0.5) - y_test.extend(y) - y_dev = np.asarray(y_dev, dtype=np.int32) Y_dev = pd.DataFrame({'label': y_dev}) -Y_dev.to_csv(r'dev-0/out.tsv', sep='\t', index=False, header=False) -y_test = np.asarray(y_test, dtype=np.int32) -Y_test = pd.DataFrame({'label': y_test}) -Y_test.to_csv(r'test-A/out.tsv', sep='\t', index=False, header=False) +Y_dev.to_csv(r'dev-out.tsv', sep='\t', index=False, header=False) diff --git a/out-header.tsv b/out-header.tsv deleted file mode 100644 index 0767caf..0000000 --- a/out-header.tsv +++ /dev/null @@ -1 +0,0 @@ -Label diff --git a/test-A/in.tsv.xz b/test-A/in.tsv.xz deleted file mode 100644 index 5e4f4f4..0000000 Binary files a/test-A/in.tsv.xz and /dev/null differ diff --git a/test-A/out.tsv b/test-A/out.tsv deleted file mode 100644 index 68febb8..0000000 --- a/test-A/out.tsv +++ /dev/null @@ -1,5152 +0,0 @@ -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -1 -1 -0 -0 -1 -1 -0 -1 -1 -1 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -1 -1 -1 -0 -1 -0 -0 -1 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -1 -0 -1 -0 -1 -0 -0 -1 -0 -1 -1 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -0 -1 -1 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -1 -1 -0 -1 -0 -1 -0 -1 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -1 -1 -1 -1 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -1 -0 -0 -1 -0 -1 -0 -1 -0 -1 -0 -0 -1 -1 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -1 -0 -1 -0 -1 -0 -1 -0 -0 -0 -1 -1 -1 -0 -0 -1 -0 -0 -1 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -0 -1 -0 -1 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -0 -1 -0 -1 -0 -0 -1 -1 -1 -0 -1 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -1 -1 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -1 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -1 -1 -1 -0 -0 -0 -0 -1 -1 -1 -1 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -1 -1 -1 -0 -1 -0 -1 -1 -0 -0 -0 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -0 -0 -1 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -1 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -1 -1 -0 -0 -0 -1 -1 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -1 -1 -0 -1 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -0 -1 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -1 -1 -1 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -1 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -0 -1 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -0 -1 -1 -1 -0 -0 -1 -1 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -1 -0 -1 -1 -1 -0 -0 -1 -0 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -1 -0 -0 -0 -0 -1 -0 -1 -1 -0 -1 -0 -0 -1 -1 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -1 -0 -1 -0 -1 -1 -1 -0 -0 -1 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -1 -0 -1 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -1 -0 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -1 -1 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -1 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -1 -0 -0 -1 -1 -1 -0 -1 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -1 -1 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -1 -0 -0 -1 -1 -1 -0 -0 -0 -1 -0 -1 -1 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -1 -0 -1 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -1 -1 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -1 -1 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -1 -1 -0 -0 -0 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -1 -1 -0 -0 -1 -1 -1 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -1 -0 -1 -1 -1 -1 -1 -0 -0 -1 -0 -1 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -1 -0 -1 -0 -1 -0 -1 -0 -0 -0 -1 -0 -1 -1 -1 -0 -1 -1 -0 -0 -1 -1 -1 -0 -1 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -1 -0 -1 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -1 -1 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -1 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -1 -1 -0 -1 -0 -1 -1 -0 -1 -0 -1 -0 -1 -1 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -1 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -1 -1 -0 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -1 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -1 -0 -1 -0 -1 -1 -1 -0 -0 -0 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -1 -0 -1 -1 -0 -1 -1 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -1 -1 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -0 -1 -0 -0 -1 -0 -0 -1 -0 -1 -1 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -1 -1 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -1 -0 -1 -0 -0 -0 -1 -0 -1 -1 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -1 -1 -1 -0 -0 -1 -1 -1 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -1 -1 -0 -1 -0 -1 -0 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -1 -1 -0 -1 -0 -1 -1 -1 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -1 -1 -0 -1 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -1 -1 -0 -1 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -1 -1 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -1 -0 -1 -0 -1 -0 -1 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -0 -1 -1 -0 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -1 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -1 -0 -1 -1 -1 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -0 -0 -1 -1 -1 -0 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -1 -1 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -1 -1 -1 -0 -0 -1 -0 -0 -1 -1 -0 -0 -1 -1 -0 -0 -1 -1 -0 -0 -0 -1 -0 -1 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1 -0 -1 -1 -0 -1 -1 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1 -1 -0 -0 -1 -0 -1 -0 -1 -0 -0 -1 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -1 -1 -1 -0 -1 -1 -0 -0 -0 -0 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -1 -1 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -1 -0 -1 -0 -0 -1 -0 -0 -1 -0 -1 -1 -0 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -1 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -1 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -1 -1 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -1 -0 -0 -1 -0 -1 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -1 -1 -1 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -1 -1 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -0 -1 -1 -1 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -1 -0 -1 -1 -0 -0 -1 -0 -1 -1 -1 -0 -0 -0 -0 -1 -1 -0 -1 -1 -1 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -1 -1 -1 -0 -1 -1 -1 -0 -0 -0 -0 -1 -0 -1 -0 -1 -0 -1 -0 -0 -1 -0 -1 -0 -1 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -1 -1 -0 -1 -1 -1 -0 -0 -1 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -0 -0 -1 -0 -1 -1 -0 -1 -1 -0 -1 -0 -0 -1 -0 -0 -0 -1 -1 -0 -0 -1 -1 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -1 -1 -1 -0 -0 -0 -0 -1 -1 -0 -0 -1 -0 -1 -1 -0 -0 -1 -0 -0 -1 -0 -1 -0 -0 -1 -0 -1 -1 -1 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -1 -0 -1 -0 -1 -1 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -1 -1 -1 -0 -0 -1 -1 -0 -0 -1 -0 -1 -0 -1 -1 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -1 -0 -1 -0 -0 -1 -1 -1 -0 -1 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -1 -0 -1 -1 -1 -1 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -0 -0 -0 -1 -1 -1 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -1 -0 -0 -1 -0 -0 -0 -0 -0 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -1 -1 -1 -0 -0 -1 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -1 -1 -0 -0 -0 -0 -1 -1 -1 -1 -1 -1 -1 -0 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -1 -0 -0 -0 -1 -1 -0 -1 -1 -1 -0 -0 -0 -0 -0 -1 -1 -0 -0 -0 -1 -0 -0 -0 -0 -1 -1 -1 -1 -1 -0 -0 -1 -0 -0 -0 -1 -1 -0 -0 -0 -1 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -1 -0 -1 -0 -1 -0 -0 -1 -1 -0 -1 -0 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -1 -1 -1 -0 -0 -0 -0 -1 -0 -0 -0 -0 -0 -0 -0 -0 -0 -0 -1 -0 -1 -0 -0 -0 -1 -0 -0 -0 -0