Allow non-quoted identifiers as isolation test session/step names.
authorTom Lane <[email protected]>
Wed, 23 Jun 2021 22:41:39 +0000 (18:41 -0400)
committerTom Lane <[email protected]>
Wed, 23 Jun 2021 22:41:39 +0000 (18:41 -0400)
For no obvious reason, isolationtester has always insisted that
session and step names be written with double quotes.  This is
fairly tedious and does little for test readability, especially
since the names that people actually choose almost always look
like normal identifiers.  Hence, let's tweak the lexer to allow
SQL-like identifiers not only double-quoted strings.

(They're SQL-like, not exactly SQL, because I didn't add any
case-folding logic.  Also there's no provision for U&"..." names,
not that anyone's likely to care.)

There is one incompatibility introduced by this change: if you write
"foo""bar" with no space, that used to be taken as two identifiers,
but now it's just one identifier with an embedded quote mark.

I converted all the src/test/isolation/ specfiles to remove
unnecessary double quotes, but stopped there because my
eyes were glazing over already.

Like 741d7f104, back-patch to all supported branches, so that this
isn't a stumbling block for back-patching isolation test changes.

Discussion: https://postgr.es/m/759113.1623861959@sss.pgh.pa.us

74 files changed:
src/test/isolation/README
src/test/isolation/specparse.y
src/test/isolation/specs/aborted-keyrevoke.spec
src/test/isolation/specs/alter-table-1.spec
src/test/isolation/specs/alter-table-2.spec
src/test/isolation/specs/alter-table-3.spec
src/test/isolation/specs/alter-table-4.spec
src/test/isolation/specs/async-notify.spec
src/test/isolation/specs/classroom-scheduling.spec
src/test/isolation/specs/create-trigger.spec
src/test/isolation/specs/deadlock-hard.spec
src/test/isolation/specs/deadlock-simple.spec
src/test/isolation/specs/deadlock-soft-2.spec
src/test/isolation/specs/deadlock-soft.spec
src/test/isolation/specs/delete-abort-savept-2.spec
src/test/isolation/specs/delete-abort-savept.spec
src/test/isolation/specs/drop-index-concurrently-1.spec
src/test/isolation/specs/eval-plan-qual-trigger.spec
src/test/isolation/specs/eval-plan-qual.spec
src/test/isolation/specs/fk-contention.spec
src/test/isolation/specs/fk-deadlock.spec
src/test/isolation/specs/fk-deadlock2.spec
src/test/isolation/specs/freeze-the-dead.spec
src/test/isolation/specs/index-only-scan.spec
src/test/isolation/specs/inherit-temp.spec
src/test/isolation/specs/insert-conflict-do-nothing-2.spec
src/test/isolation/specs/insert-conflict-do-nothing.spec
src/test/isolation/specs/insert-conflict-do-update-2.spec
src/test/isolation/specs/insert-conflict-do-update-3.spec
src/test/isolation/specs/insert-conflict-do-update.spec
src/test/isolation/specs/insert-conflict-specconflict.spec
src/test/isolation/specs/insert-conflict-toast.spec
src/test/isolation/specs/lock-committed-keyupdate.spec
src/test/isolation/specs/lock-committed-update.spec
src/test/isolation/specs/lock-update-delete.spec
src/test/isolation/specs/lock-update-traversal.spec
src/test/isolation/specs/multiple-cic.spec
src/test/isolation/specs/multiple-row-versions.spec
src/test/isolation/specs/multixact-no-deadlock.spec
src/test/isolation/specs/multixact-no-forget.spec
src/test/isolation/specs/nowait-2.spec
src/test/isolation/specs/nowait-3.spec
src/test/isolation/specs/nowait-4.spec
src/test/isolation/specs/nowait-5.spec
src/test/isolation/specs/nowait.spec
src/test/isolation/specs/partial-index.spec
src/test/isolation/specs/predicate-lock-hot-tuple.spec
src/test/isolation/specs/prepared-transactions-cic.spec
src/test/isolation/specs/prepared-transactions.spec
src/test/isolation/specs/project-manager.spec
src/test/isolation/specs/propagate-lock-delete.spec
src/test/isolation/specs/read-write-unique-2.spec
src/test/isolation/specs/read-write-unique-3.spec
src/test/isolation/specs/read-write-unique-4.spec
src/test/isolation/specs/read-write-unique.spec
src/test/isolation/specs/receipt-report.spec
src/test/isolation/specs/referential-integrity.spec
src/test/isolation/specs/ri-trigger.spec
src/test/isolation/specs/simple-write-skew.spec
src/test/isolation/specs/skip-locked-2.spec
src/test/isolation/specs/skip-locked-3.spec
src/test/isolation/specs/skip-locked-4.spec
src/test/isolation/specs/skip-locked.spec
src/test/isolation/specs/temporal-range-integrity.spec
src/test/isolation/specs/timeouts.spec
src/test/isolation/specs/total-cash.spec
src/test/isolation/specs/tuplelock-conflict.spec
src/test/isolation/specs/tuplelock-update.spec
src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec
src/test/isolation/specs/two-ids.spec
src/test/isolation/specs/update-conflict-out.spec
src/test/isolation/specs/update-locked-tuple.spec
src/test/isolation/specs/vacuum-reltuples.spec
src/test/isolation/specscanner.l

index 9d568e53543d49fdc34a7990cecec3053f058d45..8457a5689fb36aba88cfdc85a0aff1aaf24189b3 100644 (file)
@@ -80,7 +80,7 @@ teardown { <SQL> }
   this to clean up in preparation for the next permutation, e.g dropping
   any test tables created by setup. This part is optional.
 
-session "<name>"
+session <name>
 
   There are normally several "session" parts in a spec file. Each
   session is executed in its own connection. A session part consists
@@ -91,17 +91,17 @@ session "<name>"
 
   Each step has the syntax
 
-  step "<name>" { <SQL> }
+  step <name> { <SQL> }
 
-  where <name> is a name identifying this step, and SQL is a SQL statement
+  where <name> is a name identifying this step, and <SQL> is a SQL statement
   (or statements, separated by semicolons) that is executed in the step.
   Step names must be unique across the whole spec file.
 
-permutation "<step name>" ...
+permutation <step name> ...
 
   A permutation line specifies a list of steps that are run in that order.
   Any number of permutation lines can appear.  If no permutation lines are
-  given, the test program automatically generates all possible orderings
+  given, the test program automatically runs all possible interleavings
   of the steps from each session (running the steps of any one session in
   order).  Note that the list of steps in a manually specified
   "permutation" line doesn't actually have to be a permutation of the
@@ -109,7 +109,17 @@ permutation "<step name>" ...
   or leave others out.  Also, each step name can be annotated with some
   parenthesized markers, which are described below.
 
-Lines beginning with a # are considered comments.
+Session and step names are SQL identifiers, either plain or double-quoted.
+A difference from standard SQL is that no case-folding occurs, so that
+FOO and "FOO" are the same name while FOO and Foo are different,
+whether you quote them or not.  You must use quotes if you want to use
+an isolation test keyword (such as "permutation") as a name.
+
+A # character begins a comment, which extends to the end of the line.
+(This does not work inside <SQL> blocks, however.  Use the usual SQL
+comment conventions there.)
+
+There is no way to include a "}" character in an <SQL> block.
 
 For each permutation of the session steps (whether these are manually
 specified in the spec file, or automatically generated), the isolation
index 33bbbdaaf1ca6f1a7a0e5f2b44e77006dbf6de18..a0222136ea608d632d4afb0360de833268cb0ed3 100644 (file)
@@ -49,7 +49,7 @@ TestSpec      parseresult;            /* result of parsing is left here */
 %type <permutationstep> permutation_step
 %type <blocker> blocker
 
-%token <str> sqlblock string_literal
+%token <str> sqlblock identifier
 %token <integer> INTEGER
 %token NOTICES PERMUTATION SESSION SETUP STEP TEARDOWN TEST
 
@@ -117,7 +117,7 @@ session_list:
        ;
 
 session:
-           SESSION string_literal opt_setup step_list opt_teardown
+           SESSION identifier opt_setup step_list opt_teardown
            {
                $$ = pg_malloc(sizeof(Session));
                $$->name = $2;
@@ -146,7 +146,7 @@ step_list:
 
 
 step:
-           STEP string_literal sqlblock
+           STEP identifier sqlblock
            {
                $$ = pg_malloc(sizeof(Step));
                $$->name = $2;
@@ -211,7 +211,7 @@ permutation_step_list:
        ;
 
 permutation_step:
-           string_literal
+           identifier
            {
                $$ = pg_malloc(sizeof(PermutationStep));
                $$->name = $1;
@@ -219,7 +219,7 @@ permutation_step:
                $$->nblockers = 0;
                $$->step = NULL;
            }
-           | string_literal '(' blocker_list ')'
+           | identifier '(' blocker_list ')'
            {
                $$ = pg_malloc(sizeof(PermutationStep));
                $$->name = $1;
@@ -246,7 +246,7 @@ blocker_list:
        ;
 
 blocker:
-           string_literal
+           identifier
            {
                $$ = pg_malloc(sizeof(PermutationStepBlocker));
                $$->stepname = $1;
@@ -255,7 +255,7 @@ blocker:
                $$->step = NULL;
                $$->target_notices = -1;
            }
-           | string_literal NOTICES INTEGER
+           | identifier NOTICES INTEGER
            {
                $$ = pg_malloc(sizeof(PermutationStepBlocker));
                $$->stepname = $1;
index 08945d8b31c5e5207512e0c11aa5c8912e683979..4f6f9027ccba924551677748d4bdd69deb9cbce5 100644 (file)
@@ -17,30 +17,30 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1s" { SAVEPOINT f; }
-step "s1u" { UPDATE foo SET key = 2; } # obtain KEY REVOKE
-step "s1r" { ROLLBACK TO f; } # lose KEY REVOKE
-step "s1l" { SELECT * FROM foo FOR KEY SHARE; }
-step "s1c" { COMMIT; }
+step s1s   { SAVEPOINT f; }
+step s1u   { UPDATE foo SET key = 2; } # obtain KEY REVOKE
+step s1r   { ROLLBACK TO f; } # lose KEY REVOKE
+step s1l   { SELECT * FROM foo FOR KEY SHARE; }
+step s1c   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; }
-step "s2l" { SELECT * FROM foo FOR KEY SHARE; }
-step "s2c" { COMMIT; }
+step s2l   { SELECT * FROM foo FOR KEY SHARE; }
+step s2c   { COMMIT; }
 
-permutation "s1s" "s1u" "s1r" "s1l" "s1c" "s2l" "s2c"
-permutation "s1s" "s1u" "s1r" "s1l" "s2l" "s1c" "s2c"
-permutation "s1s" "s1u" "s1r" "s1l" "s2l" "s2c" "s1c"
-permutation "s1s" "s1u" "s1r" "s2l" "s1l" "s1c" "s2c"
-permutation "s1s" "s1u" "s1r" "s2l" "s1l" "s2c" "s1c"
-permutation "s1s" "s1u" "s1r" "s2l" "s2c" "s1l" "s1c"
-permutation "s1s" "s1u" "s2l" "s1r" "s1l" "s1c" "s2c"
-permutation "s1s" "s1u" "s2l" "s1r" "s1l" "s2c" "s1c"
-permutation "s1s" "s1u" "s2l" "s1r" "s2c" "s1l" "s1c"
-permutation "s1s" "s2l" "s1u" "s2c" "s1r" "s1l" "s1c"
-permutation "s1s" "s2l" "s2c" "s1u" "s1r" "s1l" "s1c"
-permutation "s2l" "s1s" "s1u" "s2c" "s1r" "s1l" "s1c"
-permutation "s2l" "s1s" "s2c" "s1u" "s1r" "s1l" "s1c"
-permutation "s2l" "s2c" "s1s" "s1u" "s1r" "s1l" "s1c"
+permutation s1s s1u s1r s1l s1c s2l s2c
+permutation s1s s1u s1r s1l s2l s1c s2c
+permutation s1s s1u s1r s1l s2l s2c s1c
+permutation s1s s1u s1r s2l s1l s1c s2c
+permutation s1s s1u s1r s2l s1l s2c s1c
+permutation s1s s1u s1r s2l s2c s1l s1c
+permutation s1s s1u s2l s1r s1l s1c s2c
+permutation s1s s1u s2l s1r s1l s2c s1c
+permutation s1s s1u s2l s1r s2c s1l s1c
+permutation s1s s2l s1u s2c s1r s1l s1c
+permutation s1s s2l s2c s1u s1r s1l s1c
+permutation s2l s1s s1u s2c s1r s1l s1c
+permutation s2l s1s s2c s1u s1r s1l s1c
+permutation s2l s2c s1s s1u s1r s1l s1c
index 10e463f6bcf3fe687b193a27a12e39fd1f384539..dfd0ce70945aaf854452ae3200dff233e8b4c930 100644 (file)
@@ -16,155 +16,155 @@ teardown
  DROP TABLE a, b;
 }
 
-session "s1"
-step "s1"  { BEGIN; }
-step "at1" { ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; }
-step "sc1" { COMMIT; }
-step "s2"  { BEGIN; }
-step "at2" { ALTER TABLE b VALIDATE CONSTRAINT bfk; }
-step "sc2" { COMMIT; }
+session s1
+step s1        { BEGIN; }
+step at1   { ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; }
+step sc1   { COMMIT; }
+step s2        { BEGIN; }
+step at2   { ALTER TABLE b VALIDATE CONSTRAINT bfk; }
+step sc2   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; }
-step "rx1" { SELECT * FROM b WHERE a_id = 1 LIMIT 1; }
-step "wx"  { INSERT INTO b VALUES (0); }
-step "rx3" { SELECT * FROM b WHERE a_id = 3 LIMIT 3; }
-step "c2"  { COMMIT; }
+step rx1   { SELECT * FROM b WHERE a_id = 1 LIMIT 1; }
+step wx        { INSERT INTO b VALUES (0); }
+step rx3   { SELECT * FROM b WHERE a_id = 3 LIMIT 3; }
+step c2        { COMMIT; }
 
-permutation "s1" "at1" "sc1" "s2" "at2" "sc2" "rx1" "wx" "rx3" "c2"
-permutation "s1" "at1" "sc1" "s2" "at2" "rx1" "sc2" "wx" "rx3" "c2"
-permutation "s1" "at1" "sc1" "s2" "at2" "rx1" "wx" "sc2" "rx3" "c2"
-permutation "s1" "at1" "sc1" "s2" "at2" "rx1" "wx" "rx3" "sc2" "c2"
-permutation "s1" "at1" "sc1" "s2" "at2" "rx1" "wx" "rx3" "c2" "sc2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "at2" "sc2" "wx" "rx3" "c2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "at2" "wx" "sc2" "rx3" "c2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "at2" "wx" "rx3" "sc2" "c2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "at2" "wx" "rx3" "c2" "sc2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "at2" "sc2" "rx3" "c2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "at2" "rx3" "sc2" "c2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "at2" "rx3" "c2" "sc2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "rx3" "at2" "sc2" "c2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "rx3" "at2" "c2" "sc2"
-permutation "s1" "at1" "sc1" "s2" "rx1" "wx" "rx3" "c2" "at2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "at2" "sc2" "wx" "rx3" "c2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "at2" "wx" "sc2" "rx3" "c2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "at2" "wx" "rx3" "sc2" "c2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "at2" "wx" "rx3" "c2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "at2" "sc2" "rx3" "c2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "at2" "rx3" "sc2" "c2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "at2" "rx3" "c2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "rx3" "at2" "sc2" "c2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "rx3" "at2" "c2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "s2" "wx" "rx3" "c2" "at2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "at2" "sc2" "rx3" "c2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "at2" "rx3" "sc2" "c2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "at2" "rx3" "c2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "rx3" "at2" "sc2" "c2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "rx3" "at2" "c2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "s2" "rx3" "c2" "at2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "rx3" "s2" "at2" "sc2" "c2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "rx3" "s2" "at2" "c2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "rx3" "s2" "c2" "at2" "sc2"
-permutation "s1" "at1" "sc1" "rx1" "wx" "rx3" "c2" "s2" "at2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "at2" "sc2" "wx" "rx3" "c2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "at2" "wx" "sc2" "rx3" "c2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "at2" "wx" "rx3" "sc2" "c2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "at2" "wx" "rx3" "c2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "at2" "sc2" "rx3" "c2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "at2" "rx3" "sc2" "c2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "at2" "rx3" "c2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "rx3" "at2" "sc2" "c2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "rx3" "at2" "c2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "s2" "wx" "rx3" "c2" "at2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "at2" "sc2" "rx3" "c2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "at2" "rx3" "sc2" "c2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "at2" "rx3" "c2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "rx3" "at2" "sc2" "c2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "rx3" "at2" "c2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "s2" "rx3" "c2" "at2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "rx3" "s2" "at2" "sc2" "c2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "rx3" "s2" "at2" "c2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "rx3" "s2" "c2" "at2" "sc2"
-permutation "s1" "at1" "rx1" "sc1" "wx" "rx3" "c2" "s2" "at2" "sc2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "at2" "sc2" "rx3" "c2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "at2" "rx3" "sc2" "c2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "at2" "rx3" "c2" "sc2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "rx3" "at2" "sc2" "c2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "rx3" "at2" "c2" "sc2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "s2" "rx3" "c2" "at2" "sc2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "rx3" "s2" "at2" "sc2" "c2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "rx3" "s2" "at2" "c2" "sc2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "rx3" "s2" "c2" "at2" "sc2"
-permutation "s1" "at1" "rx1" "wx" "sc1" "rx3" "c2" "s2" "at2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "at2" "sc2" "wx" "rx3" "c2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "at2" "wx" "sc2" "rx3" "c2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "at2" "wx" "rx3" "sc2" "c2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "at2" "wx" "rx3" "c2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "at2" "sc2" "rx3" "c2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "at2" "rx3" "sc2" "c2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "at2" "rx3" "c2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "rx3" "at2" "sc2" "c2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "rx3" "at2" "c2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "s2" "wx" "rx3" "c2" "at2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "at2" "sc2" "rx3" "c2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "at2" "rx3" "sc2" "c2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "at2" "rx3" "c2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "rx3" "at2" "sc2" "c2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "rx3" "at2" "c2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "s2" "rx3" "c2" "at2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "rx3" "s2" "at2" "sc2" "c2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "rx3" "s2" "at2" "c2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "rx3" "s2" "c2" "at2" "sc2"
-permutation "s1" "rx1" "at1" "sc1" "wx" "rx3" "c2" "s2" "at2" "sc2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "at2" "sc2" "rx3" "c2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "at2" "rx3" "sc2" "c2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "at2" "rx3" "c2" "sc2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "rx3" "at2" "sc2" "c2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "rx3" "at2" "c2" "sc2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "s2" "rx3" "c2" "at2" "sc2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "rx3" "s2" "at2" "sc2" "c2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "rx3" "s2" "at2" "c2" "sc2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "rx3" "s2" "c2" "at2" "sc2"
-permutation "s1" "rx1" "at1" "wx" "sc1" "rx3" "c2" "s2" "at2" "sc2"
-permutation "s1" "rx1" "wx" "at1" "rx3" "c2" "sc1" "s2" "at2" "sc2"
-permutation "s1" "rx1" "wx" "rx3" "at1" "c2" "sc1" "s2" "at2" "sc2"
-permutation "s1" "rx1" "wx" "rx3" "c2" "at1" "sc1" "s2" "at2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "at2" "sc2" "wx" "rx3" "c2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "at2" "wx" "sc2" "rx3" "c2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "at2" "wx" "rx3" "sc2" "c2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "at2" "wx" "rx3" "c2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "at2" "sc2" "rx3" "c2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "at2" "rx3" "sc2" "c2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "at2" "rx3" "c2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "rx3" "at2" "sc2" "c2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "rx3" "at2" "c2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "s2" "wx" "rx3" "c2" "at2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "at2" "sc2" "rx3" "c2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "at2" "rx3" "sc2" "c2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "at2" "rx3" "c2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "rx3" "at2" "sc2" "c2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "rx3" "at2" "c2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "s2" "rx3" "c2" "at2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "rx3" "s2" "at2" "sc2" "c2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "rx3" "s2" "at2" "c2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "rx3" "s2" "c2" "at2" "sc2"
-permutation "rx1" "s1" "at1" "sc1" "wx" "rx3" "c2" "s2" "at2" "sc2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "at2" "sc2" "rx3" "c2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "at2" "rx3" "sc2" "c2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "at2" "rx3" "c2" "sc2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "rx3" "at2" "sc2" "c2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "rx3" "at2" "c2" "sc2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "s2" "rx3" "c2" "at2" "sc2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "rx3" "s2" "at2" "sc2" "c2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "rx3" "s2" "at2" "c2" "sc2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "rx3" "s2" "c2" "at2" "sc2"
-permutation "rx1" "s1" "at1" "wx" "sc1" "rx3" "c2" "s2" "at2" "sc2"
-permutation "rx1" "s1" "wx" "at1" "rx3" "c2" "sc1" "s2" "at2" "sc2"
-permutation "rx1" "s1" "wx" "rx3" "at1" "c2" "sc1" "s2" "at2" "sc2"
-permutation "rx1" "s1" "wx" "rx3" "c2" "at1" "sc1" "s2" "at2" "sc2"
-permutation "rx1" "wx" "s1" "at1" "rx3" "c2" "sc1" "s2" "at2" "sc2"
-permutation "rx1" "wx" "s1" "rx3" "at1" "c2" "sc1" "s2" "at2" "sc2"
-permutation "rx1" "wx" "s1" "rx3" "c2" "at1" "sc1" "s2" "at2" "sc2"
-permutation "rx1" "wx" "rx3" "s1" "at1" "c2" "sc1" "s2" "at2" "sc2"
-permutation "rx1" "wx" "rx3" "s1" "c2" "at1" "sc1" "s2" "at2" "sc2"
-permutation "rx1" "wx" "rx3" "c2" "s1" "at1" "sc1" "s2" "at2" "sc2"
+permutation s1 at1 sc1 s2 at2 sc2 rx1 wx rx3 c2
+permutation s1 at1 sc1 s2 at2 rx1 sc2 wx rx3 c2
+permutation s1 at1 sc1 s2 at2 rx1 wx sc2 rx3 c2
+permutation s1 at1 sc1 s2 at2 rx1 wx rx3 sc2 c2
+permutation s1 at1 sc1 s2 at2 rx1 wx rx3 c2 sc2
+permutation s1 at1 sc1 s2 rx1 at2 sc2 wx rx3 c2
+permutation s1 at1 sc1 s2 rx1 at2 wx sc2 rx3 c2
+permutation s1 at1 sc1 s2 rx1 at2 wx rx3 sc2 c2
+permutation s1 at1 sc1 s2 rx1 at2 wx rx3 c2 sc2
+permutation s1 at1 sc1 s2 rx1 wx at2 sc2 rx3 c2
+permutation s1 at1 sc1 s2 rx1 wx at2 rx3 sc2 c2
+permutation s1 at1 sc1 s2 rx1 wx at2 rx3 c2 sc2
+permutation s1 at1 sc1 s2 rx1 wx rx3 at2 sc2 c2
+permutation s1 at1 sc1 s2 rx1 wx rx3 at2 c2 sc2
+permutation s1 at1 sc1 s2 rx1 wx rx3 c2 at2 sc2
+permutation s1 at1 sc1 rx1 s2 at2 sc2 wx rx3 c2
+permutation s1 at1 sc1 rx1 s2 at2 wx sc2 rx3 c2
+permutation s1 at1 sc1 rx1 s2 at2 wx rx3 sc2 c2
+permutation s1 at1 sc1 rx1 s2 at2 wx rx3 c2 sc2
+permutation s1 at1 sc1 rx1 s2 wx at2 sc2 rx3 c2
+permutation s1 at1 sc1 rx1 s2 wx at2 rx3 sc2 c2
+permutation s1 at1 sc1 rx1 s2 wx at2 rx3 c2 sc2
+permutation s1 at1 sc1 rx1 s2 wx rx3 at2 sc2 c2
+permutation s1 at1 sc1 rx1 s2 wx rx3 at2 c2 sc2
+permutation s1 at1 sc1 rx1 s2 wx rx3 c2 at2 sc2
+permutation s1 at1 sc1 rx1 wx s2 at2 sc2 rx3 c2
+permutation s1 at1 sc1 rx1 wx s2 at2 rx3 sc2 c2
+permutation s1 at1 sc1 rx1 wx s2 at2 rx3 c2 sc2
+permutation s1 at1 sc1 rx1 wx s2 rx3 at2 sc2 c2
+permutation s1 at1 sc1 rx1 wx s2 rx3 at2 c2 sc2
+permutation s1 at1 sc1 rx1 wx s2 rx3 c2 at2 sc2
+permutation s1 at1 sc1 rx1 wx rx3 s2 at2 sc2 c2
+permutation s1 at1 sc1 rx1 wx rx3 s2 at2 c2 sc2
+permutation s1 at1 sc1 rx1 wx rx3 s2 c2 at2 sc2
+permutation s1 at1 sc1 rx1 wx rx3 c2 s2 at2 sc2
+permutation s1 at1 rx1 sc1 s2 at2 sc2 wx rx3 c2
+permutation s1 at1 rx1 sc1 s2 at2 wx sc2 rx3 c2
+permutation s1 at1 rx1 sc1 s2 at2 wx rx3 sc2 c2
+permutation s1 at1 rx1 sc1 s2 at2 wx rx3 c2 sc2
+permutation s1 at1 rx1 sc1 s2 wx at2 sc2 rx3 c2
+permutation s1 at1 rx1 sc1 s2 wx at2 rx3 sc2 c2
+permutation s1 at1 rx1 sc1 s2 wx at2 rx3 c2 sc2
+permutation s1 at1 rx1 sc1 s2 wx rx3 at2 sc2 c2
+permutation s1 at1 rx1 sc1 s2 wx rx3 at2 c2 sc2
+permutation s1 at1 rx1 sc1 s2 wx rx3 c2 at2 sc2
+permutation s1 at1 rx1 sc1 wx s2 at2 sc2 rx3 c2
+permutation s1 at1 rx1 sc1 wx s2 at2 rx3 sc2 c2
+permutation s1 at1 rx1 sc1 wx s2 at2 rx3 c2 sc2
+permutation s1 at1 rx1 sc1 wx s2 rx3 at2 sc2 c2
+permutation s1 at1 rx1 sc1 wx s2 rx3 at2 c2 sc2
+permutation s1 at1 rx1 sc1 wx s2 rx3 c2 at2 sc2
+permutation s1 at1 rx1 sc1 wx rx3 s2 at2 sc2 c2
+permutation s1 at1 rx1 sc1 wx rx3 s2 at2 c2 sc2
+permutation s1 at1 rx1 sc1 wx rx3 s2 c2 at2 sc2
+permutation s1 at1 rx1 sc1 wx rx3 c2 s2 at2 sc2
+permutation s1 at1 rx1 wx sc1 s2 at2 sc2 rx3 c2
+permutation s1 at1 rx1 wx sc1 s2 at2 rx3 sc2 c2
+permutation s1 at1 rx1 wx sc1 s2 at2 rx3 c2 sc2
+permutation s1 at1 rx1 wx sc1 s2 rx3 at2 sc2 c2
+permutation s1 at1 rx1 wx sc1 s2 rx3 at2 c2 sc2
+permutation s1 at1 rx1 wx sc1 s2 rx3 c2 at2 sc2
+permutation s1 at1 rx1 wx sc1 rx3 s2 at2 sc2 c2
+permutation s1 at1 rx1 wx sc1 rx3 s2 at2 c2 sc2
+permutation s1 at1 rx1 wx sc1 rx3 s2 c2 at2 sc2
+permutation s1 at1 rx1 wx sc1 rx3 c2 s2 at2 sc2
+permutation s1 rx1 at1 sc1 s2 at2 sc2 wx rx3 c2
+permutation s1 rx1 at1 sc1 s2 at2 wx sc2 rx3 c2
+permutation s1 rx1 at1 sc1 s2 at2 wx rx3 sc2 c2
+permutation s1 rx1 at1 sc1 s2 at2 wx rx3 c2 sc2
+permutation s1 rx1 at1 sc1 s2 wx at2 sc2 rx3 c2
+permutation s1 rx1 at1 sc1 s2 wx at2 rx3 sc2 c2
+permutation s1 rx1 at1 sc1 s2 wx at2 rx3 c2 sc2
+permutation s1 rx1 at1 sc1 s2 wx rx3 at2 sc2 c2
+permutation s1 rx1 at1 sc1 s2 wx rx3 at2 c2 sc2
+permutation s1 rx1 at1 sc1 s2 wx rx3 c2 at2 sc2
+permutation s1 rx1 at1 sc1 wx s2 at2 sc2 rx3 c2
+permutation s1 rx1 at1 sc1 wx s2 at2 rx3 sc2 c2
+permutation s1 rx1 at1 sc1 wx s2 at2 rx3 c2 sc2
+permutation s1 rx1 at1 sc1 wx s2 rx3 at2 sc2 c2
+permutation s1 rx1 at1 sc1 wx s2 rx3 at2 c2 sc2
+permutation s1 rx1 at1 sc1 wx s2 rx3 c2 at2 sc2
+permutation s1 rx1 at1 sc1 wx rx3 s2 at2 sc2 c2
+permutation s1 rx1 at1 sc1 wx rx3 s2 at2 c2 sc2
+permutation s1 rx1 at1 sc1 wx rx3 s2 c2 at2 sc2
+permutation s1 rx1 at1 sc1 wx rx3 c2 s2 at2 sc2
+permutation s1 rx1 at1 wx sc1 s2 at2 sc2 rx3 c2
+permutation s1 rx1 at1 wx sc1 s2 at2 rx3 sc2 c2
+permutation s1 rx1 at1 wx sc1 s2 at2 rx3 c2 sc2
+permutation s1 rx1 at1 wx sc1 s2 rx3 at2 sc2 c2
+permutation s1 rx1 at1 wx sc1 s2 rx3 at2 c2 sc2
+permutation s1 rx1 at1 wx sc1 s2 rx3 c2 at2 sc2
+permutation s1 rx1 at1 wx sc1 rx3 s2 at2 sc2 c2
+permutation s1 rx1 at1 wx sc1 rx3 s2 at2 c2 sc2
+permutation s1 rx1 at1 wx sc1 rx3 s2 c2 at2 sc2
+permutation s1 rx1 at1 wx sc1 rx3 c2 s2 at2 sc2
+permutation s1 rx1 wx at1 rx3 c2 sc1 s2 at2 sc2
+permutation s1 rx1 wx rx3 at1 c2 sc1 s2 at2 sc2
+permutation s1 rx1 wx rx3 c2 at1 sc1 s2 at2 sc2
+permutation rx1 s1 at1 sc1 s2 at2 sc2 wx rx3 c2
+permutation rx1 s1 at1 sc1 s2 at2 wx sc2 rx3 c2
+permutation rx1 s1 at1 sc1 s2 at2 wx rx3 sc2 c2
+permutation rx1 s1 at1 sc1 s2 at2 wx rx3 c2 sc2
+permutation rx1 s1 at1 sc1 s2 wx at2 sc2 rx3 c2
+permutation rx1 s1 at1 sc1 s2 wx at2 rx3 sc2 c2
+permutation rx1 s1 at1 sc1 s2 wx at2 rx3 c2 sc2
+permutation rx1 s1 at1 sc1 s2 wx rx3 at2 sc2 c2
+permutation rx1 s1 at1 sc1 s2 wx rx3 at2 c2 sc2
+permutation rx1 s1 at1 sc1 s2 wx rx3 c2 at2 sc2
+permutation rx1 s1 at1 sc1 wx s2 at2 sc2 rx3 c2
+permutation rx1 s1 at1 sc1 wx s2 at2 rx3 sc2 c2
+permutation rx1 s1 at1 sc1 wx s2 at2 rx3 c2 sc2
+permutation rx1 s1 at1 sc1 wx s2 rx3 at2 sc2 c2
+permutation rx1 s1 at1 sc1 wx s2 rx3 at2 c2 sc2
+permutation rx1 s1 at1 sc1 wx s2 rx3 c2 at2 sc2
+permutation rx1 s1 at1 sc1 wx rx3 s2 at2 sc2 c2
+permutation rx1 s1 at1 sc1 wx rx3 s2 at2 c2 sc2
+permutation rx1 s1 at1 sc1 wx rx3 s2 c2 at2 sc2
+permutation rx1 s1 at1 sc1 wx rx3 c2 s2 at2 sc2
+permutation rx1 s1 at1 wx sc1 s2 at2 sc2 rx3 c2
+permutation rx1 s1 at1 wx sc1 s2 at2 rx3 sc2 c2
+permutation rx1 s1 at1 wx sc1 s2 at2 rx3 c2 sc2
+permutation rx1 s1 at1 wx sc1 s2 rx3 at2 sc2 c2
+permutation rx1 s1 at1 wx sc1 s2 rx3 at2 c2 sc2
+permutation rx1 s1 at1 wx sc1 s2 rx3 c2 at2 sc2
+permutation rx1 s1 at1 wx sc1 rx3 s2 at2 sc2 c2
+permutation rx1 s1 at1 wx sc1 rx3 s2 at2 c2 sc2
+permutation rx1 s1 at1 wx sc1 rx3 s2 c2 at2 sc2
+permutation rx1 s1 at1 wx sc1 rx3 c2 s2 at2 sc2
+permutation rx1 s1 wx at1 rx3 c2 sc1 s2 at2 sc2
+permutation rx1 s1 wx rx3 at1 c2 sc1 s2 at2 sc2
+permutation rx1 s1 wx rx3 c2 at1 sc1 s2 at2 sc2
+permutation rx1 wx s1 at1 rx3 c2 sc1 s2 at2 sc2
+permutation rx1 wx s1 rx3 at1 c2 sc1 s2 at2 sc2
+permutation rx1 wx s1 rx3 c2 at1 sc1 s2 at2 sc2
+permutation rx1 wx rx3 s1 at1 c2 sc1 s2 at2 sc2
+permutation rx1 wx rx3 s1 c2 at1 sc1 s2 at2 sc2
+permutation rx1 wx rx3 c2 s1 at1 sc1 s2 at2 sc2
index 9b17992d7d2c2eef4fd2e1d6f164fc9d3b820418..a3e3131e9f9dadf1ba2f015b0477e9fc4f0395a3 100644 (file)
@@ -16,64 +16,64 @@ teardown
  DROP TABLE a, b;
 }
 
-session "s1"
-step "s1a" { BEGIN; }
-step "s1b" { ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; }
-step "s1c" { COMMIT; }
+session s1
+step s1a { BEGIN; }
+step s1b { ALTER TABLE b ADD CONSTRAINT bfk FOREIGN KEY (a_id) REFERENCES a (i) NOT VALID; }
+step s1c { COMMIT; }
 
-session "s2"
-step "s2a" { BEGIN; }
-step "s2b" { SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; }
-step "s2c" { SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; }
-step "s2d" { INSERT INTO b VALUES (0); }
-step "s2e" { INSERT INTO a VALUES (4); }
-step "s2f" { COMMIT; }
+session s2
+step s2a { BEGIN; }
+step s2b { SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; }
+step s2c { SELECT * FROM b WHERE a_id = 3 LIMIT 1 FOR UPDATE; }
+step s2d { INSERT INTO b VALUES (0); }
+step s2e { INSERT INTO a VALUES (4); }
+step s2f { COMMIT; }
 
-permutation "s1a" "s1b" "s1c" "s2a" "s2b" "s2c" "s2d" "s2e" "s2f"
-permutation "s1a" "s1b" "s2a" "s1c" "s2b" "s2c" "s2d" "s2e" "s2f"
-permutation "s1a" "s1b" "s2a" "s2b" "s1c" "s2c" "s2d" "s2e" "s2f"
-permutation "s1a" "s1b" "s2a" "s2b" "s2c" "s1c" "s2d" "s2e" "s2f"
-permutation "s1a" "s1b" "s2a" "s2b" "s2c" "s2d" "s1c" "s2e" "s2f"
-permutation "s1a" "s2a" "s1b" "s1c" "s2b" "s2c" "s2d" "s2e" "s2f"
-permutation "s1a" "s2a" "s1b" "s2b" "s1c" "s2c" "s2d" "s2e" "s2f"
-permutation "s1a" "s2a" "s1b" "s2b" "s2c" "s1c" "s2d" "s2e" "s2f"
-permutation "s1a" "s2a" "s1b" "s2b" "s2c" "s2d" "s1c" "s2e" "s2f"
-permutation "s1a" "s2a" "s2b" "s1b" "s1c" "s2c" "s2d" "s2e" "s2f"
-permutation "s1a" "s2a" "s2b" "s1b" "s2c" "s1c" "s2d" "s2e" "s2f"
-permutation "s1a" "s2a" "s2b" "s1b" "s2c" "s2d" "s1c" "s2e" "s2f"
-permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s1c" "s2d" "s2e" "s2f"
-permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s2d" "s1c" "s2e" "s2f"
-permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s1b" "s2e" "s2f" "s1c"
-permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s2e" "s1b" "s2f" "s1c"
-permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s2e" "s2f" "s1b" "s1c"
-permutation "s2a" "s1a" "s1b" "s1c" "s2b" "s2c" "s2d" "s2e" "s2f"
-permutation "s2a" "s1a" "s1b" "s2b" "s1c" "s2c" "s2d" "s2e" "s2f"
-permutation "s2a" "s1a" "s1b" "s2b" "s2c" "s1c" "s2d" "s2e" "s2f"
-permutation "s2a" "s1a" "s1b" "s2b" "s2c" "s2d" "s1c" "s2e" "s2f"
-permutation "s2a" "s1a" "s2b" "s1b" "s1c" "s2c" "s2d" "s2e" "s2f"
-permutation "s2a" "s1a" "s2b" "s1b" "s2c" "s1c" "s2d" "s2e" "s2f"
-permutation "s2a" "s1a" "s2b" "s1b" "s2c" "s2d" "s1c" "s2e" "s2f"
-permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s1c" "s2d" "s2e" "s2f"
-permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s2d" "s1c" "s2e" "s2f"
-permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s1b" "s2e" "s2f" "s1c"
-permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s2e" "s1b" "s2f" "s1c"
-permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s2e" "s2f" "s1b" "s1c"
-permutation "s2a" "s2b" "s1a" "s1b" "s1c" "s2c" "s2d" "s2e" "s2f"
-permutation "s2a" "s2b" "s1a" "s1b" "s2c" "s1c" "s2d" "s2e" "s2f"
-permutation "s2a" "s2b" "s1a" "s1b" "s2c" "s2d" "s1c" "s2e" "s2f"
-permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s1c" "s2d" "s2e" "s2f"
-permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s2d" "s1c" "s2e" "s2f"
-permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s1b" "s2e" "s2f" "s1c"
-permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s2e" "s1b" "s2f" "s1c"
-permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s2e" "s2f" "s1b" "s1c"
-permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s1c" "s2d" "s2e" "s2f"
-permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s2d" "s1c" "s2e" "s2f"
-permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s1b" "s2e" "s2f" "s1c"
-permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s2e" "s1b" "s2f" "s1c"
-permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s2e" "s2f" "s1b" "s1c"
-permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s1b" "s2e" "s2f" "s1c"
-permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s2e" "s1b" "s2f" "s1c"
-permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s2e" "s2f" "s1b" "s1c"
-permutation "s2a" "s2b" "s2c" "s2d" "s2e" "s1a" "s1b" "s2f" "s1c"
-permutation "s2a" "s2b" "s2c" "s2d" "s2e" "s1a" "s2f" "s1b" "s1c"
-permutation "s2a" "s2b" "s2c" "s2d" "s2e" "s2f" "s1a" "s1b" "s1c"
+permutation s1a s1b s1c s2a s2b s2c s2d s2e s2f
+permutation s1a s1b s2a s1c s2b s2c s2d s2e s2f
+permutation s1a s1b s2a s2b s1c s2c s2d s2e s2f
+permutation s1a s1b s2a s2b s2c s1c s2d s2e s2f
+permutation s1a s1b s2a s2b s2c s2d s1c s2e s2f
+permutation s1a s2a s1b s1c s2b s2c s2d s2e s2f
+permutation s1a s2a s1b s2b s1c s2c s2d s2e s2f
+permutation s1a s2a s1b s2b s2c s1c s2d s2e s2f
+permutation s1a s2a s1b s2b s2c s2d s1c s2e s2f
+permutation s1a s2a s2b s1b s1c s2c s2d s2e s2f
+permutation s1a s2a s2b s1b s2c s1c s2d s2e s2f
+permutation s1a s2a s2b s1b s2c s2d s1c s2e s2f
+permutation s1a s2a s2b s2c s1b s1c s2d s2e s2f
+permutation s1a s2a s2b s2c s1b s2d s1c s2e s2f
+permutation s1a s2a s2b s2c s2d s1b s2e s2f s1c
+permutation s1a s2a s2b s2c s2d s2e s1b s2f s1c
+permutation s1a s2a s2b s2c s2d s2e s2f s1b s1c
+permutation s2a s1a s1b s1c s2b s2c s2d s2e s2f
+permutation s2a s1a s1b s2b s1c s2c s2d s2e s2f
+permutation s2a s1a s1b s2b s2c s1c s2d s2e s2f
+permutation s2a s1a s1b s2b s2c s2d s1c s2e s2f
+permutation s2a s1a s2b s1b s1c s2c s2d s2e s2f
+permutation s2a s1a s2b s1b s2c s1c s2d s2e s2f
+permutation s2a s1a s2b s1b s2c s2d s1c s2e s2f
+permutation s2a s1a s2b s2c s1b s1c s2d s2e s2f
+permutation s2a s1a s2b s2c s1b s2d s1c s2e s2f
+permutation s2a s1a s2b s2c s2d s1b s2e s2f s1c
+permutation s2a s1a s2b s2c s2d s2e s1b s2f s1c
+permutation s2a s1a s2b s2c s2d s2e s2f s1b s1c
+permutation s2a s2b s1a s1b s1c s2c s2d s2e s2f
+permutation s2a s2b s1a s1b s2c s1c s2d s2e s2f
+permutation s2a s2b s1a s1b s2c s2d s1c s2e s2f
+permutation s2a s2b s1a s2c s1b s1c s2d s2e s2f
+permutation s2a s2b s1a s2c s1b s2d s1c s2e s2f
+permutation s2a s2b s1a s2c s2d s1b s2e s2f s1c
+permutation s2a s2b s1a s2c s2d s2e s1b s2f s1c
+permutation s2a s2b s1a s2c s2d s2e s2f s1b s1c
+permutation s2a s2b s2c s1a s1b s1c s2d s2e s2f
+permutation s2a s2b s2c s1a s1b s2d s1c s2e s2f
+permutation s2a s2b s2c s1a s2d s1b s2e s2f s1c
+permutation s2a s2b s2c s1a s2d s2e s1b s2f s1c
+permutation s2a s2b s2c s1a s2d s2e s2f s1b s1c
+permutation s2a s2b s2c s2d s1a s1b s2e s2f s1c
+permutation s2a s2b s2c s2d s1a s2e s1b s2f s1c
+permutation s2a s2b s2c s2d s1a s2e s2f s1b s1c
+permutation s2a s2b s2c s2d s2e s1a s1b s2f s1c
+permutation s2a s2b s2c s2d s2e s1a s2f s1b s1c
+permutation s2a s2b s2c s2d s2e s2f s1a s1b s1c
index d07e3dde4186c231919908d990969a13378771c9..f70d9c079245d5f9e00511852168e68ff01d5c9d 100644 (file)
@@ -17,63 +17,63 @@ teardown
  DROP FUNCTION f();
 }
 
-session "s1"
-step "s1a" { BEGIN; }
-step "s1b" { ALTER TABLE a DISABLE TRIGGER t; }
-step "s1c" { ALTER TABLE a ENABLE TRIGGER t; }
-step "s1d" { COMMIT; }
+session s1
+step s1a { BEGIN; }
+step s1b { ALTER TABLE a DISABLE TRIGGER t; }
+step s1c { ALTER TABLE a ENABLE TRIGGER t; }
+step s1d { COMMIT; }
 
-session "s2"
-step "s2a" { BEGIN; }
-step "s2b" { SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; }
-step "s2c" { INSERT INTO a VALUES (0); }
-step "s2d" { COMMIT; }
+session s2
+step s2a { BEGIN; }
+step s2b { SELECT * FROM a WHERE i = 1 LIMIT 1 FOR UPDATE; }
+step s2c { INSERT INTO a VALUES (0); }
+step s2d { COMMIT; }
 
-permutation "s1a" "s1b" "s1c" "s1d" "s2a" "s2b" "s2c" "s2d"
-permutation "s1a" "s1b" "s1c" "s2a" "s1d" "s2b" "s2c" "s2d"
-permutation "s1a" "s1b" "s1c" "s2a" "s2b" "s1d" "s2c" "s2d"
-permutation "s1a" "s1b" "s1c" "s2a" "s2b" "s2c" "s1d" "s2d"
-permutation "s1a" "s1b" "s2a" "s1c" "s1d" "s2b" "s2c" "s2d"
-permutation "s1a" "s1b" "s2a" "s1c" "s2b" "s1d" "s2c" "s2d"
-permutation "s1a" "s1b" "s2a" "s1c" "s2b" "s2c" "s1d" "s2d"
-permutation "s1a" "s1b" "s2a" "s2b" "s1c" "s1d" "s2c" "s2d"
-permutation "s1a" "s1b" "s2a" "s2b" "s1c" "s2c" "s1d" "s2d"
-permutation "s1a" "s1b" "s2a" "s2b" "s2c" "s1c" "s1d" "s2d"
-permutation "s1a" "s2a" "s1b" "s1c" "s1d" "s2b" "s2c" "s2d"
-permutation "s1a" "s2a" "s1b" "s1c" "s2b" "s1d" "s2c" "s2d"
-permutation "s1a" "s2a" "s1b" "s1c" "s2b" "s2c" "s1d" "s2d"
-permutation "s1a" "s2a" "s1b" "s2b" "s1c" "s1d" "s2c" "s2d"
-permutation "s1a" "s2a" "s1b" "s2b" "s1c" "s2c" "s1d" "s2d"
-permutation "s1a" "s2a" "s1b" "s2b" "s2c" "s1c" "s1d" "s2d"
-permutation "s1a" "s2a" "s2b" "s1b" "s1c" "s1d" "s2c" "s2d"
-permutation "s1a" "s2a" "s2b" "s1b" "s1c" "s2c" "s1d" "s2d"
-permutation "s1a" "s2a" "s2b" "s1b" "s2c" "s1c" "s1d" "s2d"
-permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s1c" "s1d" "s2d"
-permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s1c" "s2d" "s1d"
-permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s2d" "s1c" "s1d"
-permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s1b" "s1c" "s1d"
-permutation "s2a" "s1a" "s1b" "s1c" "s1d" "s2b" "s2c" "s2d"
-permutation "s2a" "s1a" "s1b" "s1c" "s2b" "s1d" "s2c" "s2d"
-permutation "s2a" "s1a" "s1b" "s1c" "s2b" "s2c" "s1d" "s2d"
-permutation "s2a" "s1a" "s1b" "s2b" "s1c" "s1d" "s2c" "s2d"
-permutation "s2a" "s1a" "s1b" "s2b" "s1c" "s2c" "s1d" "s2d"
-permutation "s2a" "s1a" "s1b" "s2b" "s2c" "s1c" "s1d" "s2d"
-permutation "s2a" "s1a" "s2b" "s1b" "s1c" "s1d" "s2c" "s2d"
-permutation "s2a" "s1a" "s2b" "s1b" "s1c" "s2c" "s1d" "s2d"
-permutation "s2a" "s1a" "s2b" "s1b" "s2c" "s1c" "s1d" "s2d"
-permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s1c" "s1d" "s2d"
-permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s1c" "s2d" "s1d"
-permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s2d" "s1c" "s1d"
-permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s1b" "s1c" "s1d"
-permutation "s2a" "s2b" "s1a" "s1b" "s1c" "s1d" "s2c" "s2d"
-permutation "s2a" "s2b" "s1a" "s1b" "s1c" "s2c" "s1d" "s2d"
-permutation "s2a" "s2b" "s1a" "s1b" "s2c" "s1c" "s1d" "s2d"
-permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s1c" "s1d" "s2d"
-permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s1c" "s2d" "s1d"
-permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s2d" "s1c" "s1d"
-permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s1b" "s1c" "s1d"
-permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s1c" "s1d" "s2d"
-permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s1c" "s2d" "s1d"
-permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s2d" "s1c" "s1d"
-permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s1b" "s1c" "s1d"
-permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s1b" "s1c" "s1d"
+permutation s1a s1b s1c s1d s2a s2b s2c s2d
+permutation s1a s1b s1c s2a s1d s2b s2c s2d
+permutation s1a s1b s1c s2a s2b s1d s2c s2d
+permutation s1a s1b s1c s2a s2b s2c s1d s2d
+permutation s1a s1b s2a s1c s1d s2b s2c s2d
+permutation s1a s1b s2a s1c s2b s1d s2c s2d
+permutation s1a s1b s2a s1c s2b s2c s1d s2d
+permutation s1a s1b s2a s2b s1c s1d s2c s2d
+permutation s1a s1b s2a s2b s1c s2c s1d s2d
+permutation s1a s1b s2a s2b s2c s1c s1d s2d
+permutation s1a s2a s1b s1c s1d s2b s2c s2d
+permutation s1a s2a s1b s1c s2b s1d s2c s2d
+permutation s1a s2a s1b s1c s2b s2c s1d s2d
+permutation s1a s2a s1b s2b s1c s1d s2c s2d
+permutation s1a s2a s1b s2b s1c s2c s1d s2d
+permutation s1a s2a s1b s2b s2c s1c s1d s2d
+permutation s1a s2a s2b s1b s1c s1d s2c s2d
+permutation s1a s2a s2b s1b s1c s2c s1d s2d
+permutation s1a s2a s2b s1b s2c s1c s1d s2d
+permutation s1a s2a s2b s2c s1b s1c s1d s2d
+permutation s1a s2a s2b s2c s1b s1c s2d s1d
+permutation s1a s2a s2b s2c s1b s2d s1c s1d
+permutation s1a s2a s2b s2c s2d s1b s1c s1d
+permutation s2a s1a s1b s1c s1d s2b s2c s2d
+permutation s2a s1a s1b s1c s2b s1d s2c s2d
+permutation s2a s1a s1b s1c s2b s2c s1d s2d
+permutation s2a s1a s1b s2b s1c s1d s2c s2d
+permutation s2a s1a s1b s2b s1c s2c s1d s2d
+permutation s2a s1a s1b s2b s2c s1c s1d s2d
+permutation s2a s1a s2b s1b s1c s1d s2c s2d
+permutation s2a s1a s2b s1b s1c s2c s1d s2d
+permutation s2a s1a s2b s1b s2c s1c s1d s2d
+permutation s2a s1a s2b s2c s1b s1c s1d s2d
+permutation s2a s1a s2b s2c s1b s1c s2d s1d
+permutation s2a s1a s2b s2c s1b s2d s1c s1d
+permutation s2a s1a s2b s2c s2d s1b s1c s1d
+permutation s2a s2b s1a s1b s1c s1d s2c s2d
+permutation s2a s2b s1a s1b s1c s2c s1d s2d
+permutation s2a s2b s1a s1b s2c s1c s1d s2d
+permutation s2a s2b s1a s2c s1b s1c s1d s2d
+permutation s2a s2b s1a s2c s1b s1c s2d s1d
+permutation s2a s2b s1a s2c s1b s2d s1c s1d
+permutation s2a s2b s1a s2c s2d s1b s1c s1d
+permutation s2a s2b s2c s1a s1b s1c s1d s2d
+permutation s2a s2b s2c s1a s1b s1c s2d s1d
+permutation s2a s2b s2c s1a s1b s2d s1c s1d
+permutation s2a s2b s2c s1a s2d s1b s1c s1d
+permutation s2a s2b s2c s2d s1a s1b s1c s1d
index a9c1a937238f422269cb69c250ddb8219e4f0115..f143b790d9619e1c54769c73bcd4771f03046a6a 100644 (file)
@@ -15,23 +15,23 @@ teardown
  DROP TABLE IF EXISTS c1, c2, p;
 }
 
-session "s1"
-step "s1b" { BEGIN; }
-step "s1delc1" { ALTER TABLE c1 NO INHERIT p; }
-step "s1modc1a"    { ALTER TABLE c1 ALTER COLUMN a TYPE float; }
-step "s1addc2" { ALTER TABLE c2 INHERIT p; }
-step "s1dropc1"    { DROP TABLE c1; }
-step "s1c" { COMMIT; }
+session s1
+step s1b   { BEGIN; }
+step s1delc1   { ALTER TABLE c1 NO INHERIT p; }
+step s1modc1a  { ALTER TABLE c1 ALTER COLUMN a TYPE float; }
+step s1addc2   { ALTER TABLE c2 INHERIT p; }
+step s1dropc1  { DROP TABLE c1; }
+step s1c   { COMMIT; }
 
-session "s2"
-step "s2sel"   { SELECT SUM(a) FROM p; }
+session s2
+step s2sel { SELECT SUM(a) FROM p; }
 
 # NO INHERIT will not be visible to concurrent select,
 # since we identify children before locking them
-permutation "s1b" "s1delc1" "s2sel" "s1c" "s2sel"
+permutation s1b s1delc1 s2sel s1c s2sel
 # adding inheritance likewise is not seen if s1 commits after s2 locks p
-permutation "s1b" "s1delc1" "s1addc2" "s2sel" "s1c" "s2sel"
+permutation s1b s1delc1 s1addc2 s2sel s1c s2sel
 # but we do cope with DROP on a child table
-permutation "s1b" "s1dropc1" "s2sel" "s1c" "s2sel"
+permutation s1b s1dropc1 s2sel s1c s2sel
 # this case currently results in an error; doesn't seem worth preventing
-permutation "s1b" "s1delc1" "s1modc1a" "s2sel" "s1c" "s2sel"
+permutation s1b s1delc1 s1modc1a s2sel s1c s2sel
index a7b2600d25c651ffafa1e1d0e46f538ab83f1a25..0b8cfd91083744c660e7a9b322565a048048ad3f 100644 (file)
@@ -5,15 +5,15 @@
 # Note we assume that each step is delivered to the backend as a single Query
 # message so it will run as one transaction.
 
-session "notifier"
-step "listenc" { LISTEN c1; LISTEN c2; }
-step "notify1" { NOTIFY c1; }
-step "notify2" { NOTIFY c2, 'payload'; }
-step "notify3" { NOTIFY c3, 'payload3'; }  # not listening to c3
-step "notifyf" { SELECT pg_notify('c2', NULL); }
-step "notifyd1"    { NOTIFY c2, 'payload'; NOTIFY c1; NOTIFY "c2", 'payload'; }
-step "notifyd2"    { NOTIFY c1; NOTIFY c1; NOTIFY c1, 'p1'; NOTIFY c1, 'p2'; }
-step "notifys1"    {
+session notifier
+step listenc   { LISTEN c1; LISTEN c2; }
+step notify1   { NOTIFY c1; }
+step notify2   { NOTIFY c2, 'payload'; }
+step notify3   { NOTIFY c3, 'payload3'; }  # not listening to c3
+step notifyf   { SELECT pg_notify('c2', NULL); }
+step notifyd1  { NOTIFY c2, 'payload'; NOTIFY c1; NOTIFY "c2", 'payload'; }
+step notifyd2  { NOTIFY c1; NOTIFY c1; NOTIFY c1, 'p1'; NOTIFY c1, 'p2'; }
+step notifys1  {
    BEGIN;
    NOTIFY c1, 'payload'; NOTIFY "c2", 'payload';
    NOTIFY c1, 'payload'; NOTIFY "c2", 'payload';
@@ -31,47 +31,47 @@ step "notifys1" {
    ROLLBACK TO SAVEPOINT s2;
    COMMIT;
 }
-step "usage"   { SELECT pg_notification_queue_usage() > 0 AS nonzero; }
-step "bignotify"   { SELECT count(pg_notify('c1', s::text)) FROM generate_series(1, 1000) s; }
+step usage     { SELECT pg_notification_queue_usage() > 0 AS nonzero; }
+step bignotify { SELECT count(pg_notify('c1', s::text)) FROM generate_series(1, 1000) s; }
 teardown       { UNLISTEN *; }
 
 # The listener session is used for cross-backend notify checks.
 
-session "listener"
-step "llisten" { LISTEN c1; LISTEN c2; }
-step "lcheck"  { SELECT 1 AS x; }
-step "lbegin"  { BEGIN; }
-step "lbegins" { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "lcommit" { COMMIT; }
+session listener
+step llisten   { LISTEN c1; LISTEN c2; }
+step lcheck        { SELECT 1 AS x; }
+step lbegin        { BEGIN; }
+step lbegins   { BEGIN ISOLATION LEVEL SERIALIZABLE; }
+step lcommit   { COMMIT; }
 teardown       { UNLISTEN *; }
 
 # In some tests we need a second listener, just to block the queue.
 
-session "listener2"
-step "l2listen"    { LISTEN c1; }
-step "l2begin" { BEGIN; }
-step "l2commit"    { COMMIT; }
-step "l2stop"  { UNLISTEN *; }
+session listener2
+step l2listen  { LISTEN c1; }
+step l2begin   { BEGIN; }
+step l2commit  { COMMIT; }
+step l2stop        { UNLISTEN *; }
 
 
 # Trivial cases.
-permutation "listenc" "notify1" "notify2" "notify3" "notifyf"
+permutation listenc notify1 notify2 notify3 notifyf
 
 # Check simple and less-simple deduplication.
-permutation "listenc" "notifyd1" "notifyd2" "notifys1"
+permutation listenc notifyd1 notifyd2 notifys1
 
 # Cross-backend notification delivery.  We use a "select 1" to force the
 # listener session to check for notifies.  In principle we could just wait
 # for delivery, but that would require extra support in isolationtester
 # and might have portability-of-timing issues.
-permutation "llisten" "notify1" "notify2" "notify3" "notifyf" "lcheck"
+permutation llisten notify1 notify2 notify3 notifyf lcheck
 
 # Again, with local delivery too.
-permutation "listenc" "llisten" "notify1" "notify2" "notify3" "notifyf" "lcheck"
+permutation listenc llisten notify1 notify2 notify3 notifyf lcheck
 
 # Check for bug when initial listen is only action in a serializable xact,
 # and notify queue is not empty
-permutation "l2listen" "l2begin" "notify1" "lbegins" "llisten" "lcommit" "l2commit" "l2stop"
+permutation l2listen l2begin notify1 lbegins llisten lcommit l2commit l2stop
 
 # Verify that pg_notification_queue_usage correctly reports a non-zero result,
 # after submitting notifications while another connection is listening for
@@ -81,4 +81,4 @@ permutation "l2listen" "l2begin" "notify1" "lbegins" "llisten" "lcommit" "l2comm
 # commit the listener's transaction, so that it never reports these events.
 # Hence, this should be the last test in this script.
 
-permutation "llisten" "lbegin" "usage" "bignotify" "usage"
+permutation llisten lbegin usage bignotify usage
index a31565b9cd759a6c18a487ea81069fb57ec186e1..770715b149dafde91a71d834acdc08e6adb65cfb 100644 (file)
@@ -16,14 +16,14 @@ teardown
  DROP TABLE room_reservation;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rx1" { SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; }
-step "wy1" { INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); }
-step "c1"  { COMMIT; }
+step rx1   { SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:00' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:00'; }
+step wy1   { INSERT INTO room_reservation VALUES ('101', TIMESTAMP WITH TIME ZONE '2010-04-01 13:00', TIMESTAMP WITH TIME ZONE '2010-04-01 14:00', 'Carol'); }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "ry2" { SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; }
-step "wx2" { UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; }
-step "c2"  { COMMIT; }
+step ry2   { SELECT count(*) FROM room_reservation WHERE room_id = '101' AND start_time < TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' AND end_time > TIMESTAMP WITH TIME ZONE '2010-04-01 13:30'; }
+step wx2   { UPDATE room_reservation SET start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 13:30', end_time = TIMESTAMP WITH TIME ZONE '2010-04-01 14:30' WHERE room_id = '101' AND start_time = TIMESTAMP WITH TIME ZONE '2010-04-01 10:00'; }
+step c2        { COMMIT; }
index caac381757d253c85af294692dc3bc7cbd10d2ba..9d4710cbdde4ab5fcf82a283e6834ef556d44332 100644 (file)
@@ -16,39 +16,39 @@ teardown
  DROP FUNCTION f();
 }
 
-session "s1"
-step "s1a" { BEGIN; }
-step "s1b" { CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); }
-step "s1c" { COMMIT; }
+session s1
+step s1a { BEGIN; }
+step s1b { CREATE TRIGGER t AFTER UPDATE ON a EXECUTE PROCEDURE f(); }
+step s1c { COMMIT; }
 
-session "s2"
-step "s2a" { BEGIN; }
-step "s2b" { SELECT * FROM a WHERE i = 1 FOR UPDATE; }
-step "s2c" { UPDATE a SET i = 4 WHERE i = 3; }
-step "s2d" { COMMIT; }
+session s2
+step s2a { BEGIN; }
+step s2b { SELECT * FROM a WHERE i = 1 FOR UPDATE; }
+step s2c { UPDATE a SET i = 4 WHERE i = 3; }
+step s2d { COMMIT; }
 
-permutation "s1a" "s1b" "s1c" "s2a" "s2b" "s2c" "s2d"
-permutation "s1a" "s1b" "s2a" "s1c" "s2b" "s2c" "s2d"
-permutation "s1a" "s1b" "s2a" "s2b" "s1c" "s2c" "s2d"
-permutation "s1a" "s1b" "s2a" "s2b" "s2c" "s1c" "s2d"
-permutation "s1a" "s2a" "s1b" "s1c" "s2b" "s2c" "s2d"
-permutation "s1a" "s2a" "s1b" "s2b" "s1c" "s2c" "s2d"
-permutation "s1a" "s2a" "s1b" "s2b" "s2c" "s1c" "s2d"
-permutation "s1a" "s2a" "s2b" "s1b" "s1c" "s2c" "s2d"
-permutation "s1a" "s2a" "s2b" "s1b" "s2c" "s1c" "s2d"
-permutation "s1a" "s2a" "s2b" "s2c" "s1b" "s2d" "s1c"
-permutation "s1a" "s2a" "s2b" "s2c" "s2d" "s1b" "s1c"
-permutation "s2a" "s1a" "s1b" "s1c" "s2b" "s2c" "s2d"
-permutation "s2a" "s1a" "s1b" "s2b" "s1c" "s2c" "s2d"
-permutation "s2a" "s1a" "s1b" "s2b" "s2c" "s1c" "s2d"
-permutation "s2a" "s1a" "s2b" "s1b" "s1c" "s2c" "s2d"
-permutation "s2a" "s1a" "s2b" "s1b" "s2c" "s1c" "s2d"
-permutation "s2a" "s1a" "s2b" "s2c" "s1b" "s2d" "s1c"
-permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s1b" "s1c"
-permutation "s2a" "s2b" "s1a" "s1b" "s1c" "s2c" "s2d"
-permutation "s2a" "s2b" "s1a" "s1b" "s2c" "s1c" "s2d"
-permutation "s2a" "s2b" "s1a" "s2c" "s1b" "s2d" "s1c"
-permutation "s2a" "s2b" "s1a" "s2c" "s2d" "s1b" "s1c"
-permutation "s2a" "s2b" "s2c" "s1a" "s1b" "s2d" "s1c"
-permutation "s2a" "s2b" "s2c" "s1a" "s2d" "s1b" "s1c"
-permutation "s2a" "s2b" "s2c" "s2d" "s1a" "s1b" "s1c"
+permutation s1a s1b s1c s2a s2b s2c s2d
+permutation s1a s1b s2a s1c s2b s2c s2d
+permutation s1a s1b s2a s2b s1c s2c s2d
+permutation s1a s1b s2a s2b s2c s1c s2d
+permutation s1a s2a s1b s1c s2b s2c s2d
+permutation s1a s2a s1b s2b s1c s2c s2d
+permutation s1a s2a s1b s2b s2c s1c s2d
+permutation s1a s2a s2b s1b s1c s2c s2d
+permutation s1a s2a s2b s1b s2c s1c s2d
+permutation s1a s2a s2b s2c s1b s2d s1c
+permutation s1a s2a s2b s2c s2d s1b s1c
+permutation s2a s1a s1b s1c s2b s2c s2d
+permutation s2a s1a s1b s2b s1c s2c s2d
+permutation s2a s1a s1b s2b s2c s1c s2d
+permutation s2a s1a s2b s1b s1c s2c s2d
+permutation s2a s1a s2b s1b s2c s1c s2d
+permutation s2a s1a s2b s2c s1b s2d s1c
+permutation s2a s1a s2b s2c s2d s1b s1c
+permutation s2a s2b s1a s1b s1c s2c s2d
+permutation s2a s2b s1a s1b s2c s1c s2d
+permutation s2a s2b s1a s2c s1b s2d s1c
+permutation s2a s2b s1a s2c s2d s1b s1c
+permutation s2a s2b s2c s1a s1b s2d s1c
+permutation s2a s2b s2c s1a s2d s1b s1c
+permutation s2a s2b s2c s2d s1a s1b s1c
index 3316d75e953d5a55d763eb1f74e2ca3f6c82275a..60bedca237a48ed89d49c5aea4a939a5337a1e8f 100644 (file)
@@ -20,53 +20,53 @@ teardown
   DROP TABLE a1, a2, a3, a4, a5, a6, a7, a8;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s1a1"    { LOCK TABLE a1; }
-step "s1a2"    { LOCK TABLE a2; }
-step "s1c" { COMMIT; }
+step s1a1  { LOCK TABLE a1; }
+step s1a2  { LOCK TABLE a2; }
+step s1c   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s2a2"    { LOCK TABLE a2; }
-step "s2a3"    { LOCK TABLE a3; }
-step "s2c" { COMMIT; }
+step s2a2  { LOCK TABLE a2; }
+step s2a3  { LOCK TABLE a3; }
+step s2c   { COMMIT; }
 
-session "s3"
+session s3
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s3a3"    { LOCK TABLE a3; }
-step "s3a4"    { LOCK TABLE a4; }
-step "s3c" { COMMIT; }
+step s3a3  { LOCK TABLE a3; }
+step s3a4  { LOCK TABLE a4; }
+step s3c   { COMMIT; }
 
-session "s4"
+session s4
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s4a4"    { LOCK TABLE a4; }
-step "s4a5"    { LOCK TABLE a5; }
-step "s4c" { COMMIT; }
+step s4a4  { LOCK TABLE a4; }
+step s4a5  { LOCK TABLE a5; }
+step s4c   { COMMIT; }
 
-session "s5"
+session s5
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s5a5"    { LOCK TABLE a5; }
-step "s5a6"    { LOCK TABLE a6; }
-step "s5c" { COMMIT; }
+step s5a5  { LOCK TABLE a5; }
+step s5a6  { LOCK TABLE a6; }
+step s5c   { COMMIT; }
 
-session "s6"
+session s6
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s6a6"    { LOCK TABLE a6; }
-step "s6a7"    { LOCK TABLE a7; }
-step "s6c" { COMMIT; }
+step s6a6  { LOCK TABLE a6; }
+step s6a7  { LOCK TABLE a7; }
+step s6c   { COMMIT; }
 
-session "s7"
+session s7
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s7a7"    { LOCK TABLE a7; }
-step "s7a8"    { LOCK TABLE a8; }
-step "s7c" { COMMIT; }
+step s7a7  { LOCK TABLE a7; }
+step s7a8  { LOCK TABLE a8; }
+step s7c   { COMMIT; }
 
-session "s8"
+session s8
 setup      { BEGIN; SET deadlock_timeout = '10ms'; }
-step "s8a8"    { LOCK TABLE a8; }
-step "s8a1"    { LOCK TABLE a1; }
-step "s8c" { COMMIT; }
+step s8a8  { LOCK TABLE a8; }
+step s8a1  { LOCK TABLE a1; }
+step s8c   { COMMIT; }
 
 # Note: when s8a1 detects the deadlock and fails, s7a8 is released, making
 # it timing-dependent which query completion is received first by the tester.
@@ -76,4 +76,4 @@ step "s8c"    { COMMIT; }
 # dummy blocking mark to s8a1 to ensure it will be reported as "waiting"
 # regardless of that.
 
-permutation "s1a1" "s2a2" "s3a3" "s4a4" "s5a5" "s6a6" "s7a7" "s8a8" "s1a2" "s2a3" "s3a4" "s4a5" "s5a6" "s6a7" "s7a8"("s8a1") "s8a1"(*) "s8c" "s7c" "s6c" "s5c" "s4c" "s3c" "s2c" "s1c"
+permutation s1a1 s2a2 s3a3 s4a4 s5a5 s6a6 s7a7 s8a8 s1a2 s2a3 s3a4 s4a5 s5a6 s6a7 s7a8(s8a1) s8a1(*) s8c s7c s6c s5c s4c s3c s2c s1c
index b1300ca77ceab6af2d53bff1932709fdf8c60a37..3086dc7c867ab38d090868d2d731f7edcf9a08f5 100644 (file)
@@ -14,16 +14,16 @@ teardown
   DROP TABLE a1;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1as"    { LOCK TABLE a1 IN ACCESS SHARE MODE; }
-step "s1ae"    { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; }
-step "s1c" { COMMIT; }
+step s1as  { LOCK TABLE a1 IN ACCESS SHARE MODE; }
+step s1ae  { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; }
+step s1c   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; }
-step "s2as"    { LOCK TABLE a1 IN ACCESS SHARE MODE; }
-step "s2ae"    { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; }
-step "s2c" { COMMIT; }
+step s2as  { LOCK TABLE a1 IN ACCESS SHARE MODE; }
+step s2ae  { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; }
+step s2c   { COMMIT; }
 
-permutation "s1as" "s2as" "s1ae" "s2ae" "s1c" "s2c"
+permutation s1as s2as s1ae s2ae s1c s2c
index 6ff915f6061d2732a25cf0b1ac4ed00563c14b9f..5b7d3db5036d2f8aa370123e6ac1c2b06c81733a 100644 (file)
@@ -13,31 +13,31 @@ teardown
   DROP TABLE a1, a2;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; SET deadlock_timeout = '10ms'; }
-step "s1a" { LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; }
-step "s1b" { LOCK TABLE a2 IN SHARE UPDATE EXCLUSIVE MODE; }
-step "s1c" { COMMIT; }
+step s1a   { LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; }
+step s1b   { LOCK TABLE a2 IN SHARE UPDATE EXCLUSIVE MODE; }
+step s1c   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s2a"     { LOCK TABLE a2 IN ACCESS SHARE MODE; }
-step "s2b"     { LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; }
-step "s2c" { COMMIT; }
+step s2a   { LOCK TABLE a2 IN ACCESS SHARE MODE; }
+step s2b   { LOCK TABLE a1 IN SHARE UPDATE EXCLUSIVE MODE; }
+step s2c   { COMMIT; }
 
-session "s3"
+session s3
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s3a" { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; }
-step "s3c" { COMMIT; }
+step s3a   { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; }
+step s3c   { COMMIT; }
 
-session "s4"
+session s4
 setup      { BEGIN; SET deadlock_timeout = '100s'; }
-step "s4a" { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; }
-step "s4c" { COMMIT; }
+step s4a   { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; }
+step s4c   { COMMIT; }
 
 # The expected output for this test assumes that isolationtester will
 # detect step s1b as waiting before the deadlock detector runs and
 # releases s1 from its blocked state.  To ensure that happens even in
 # very slow (CLOBBER_CACHE_ALWAYS) cases, apply a (*) annotation.
 
-permutation "s1a" "s2a" "s2b" "s3a" "s4a" "s1b"(*) "s1c" "s2c" "s3c" "s4c"
+permutation s1a s2a s2b s3a s4a s1b(*) s1c s2c s3c s4c
index 49d16e027c4d06c9a934a49a738bc22288776743..bc9c6a7d438f283095419313652a14d917e9ff00 100644 (file)
@@ -15,26 +15,26 @@ teardown
   DROP TABLE a1, a2;
 }
 
-session "d1"
+session d1
 setup      { BEGIN; SET deadlock_timeout = '10s'; }
-step "d1a1"    { LOCK TABLE a1 IN ACCESS SHARE MODE; }
-step "d1a2"    { LOCK TABLE a2 IN ACCESS SHARE MODE; }
-step "d1c" { COMMIT; }
+step d1a1  { LOCK TABLE a1 IN ACCESS SHARE MODE; }
+step d1a2  { LOCK TABLE a2 IN ACCESS SHARE MODE; }
+step d1c   { COMMIT; }
 
-session "d2"
+session d2
 setup      { BEGIN; SET deadlock_timeout = '10ms'; }
-step "d2a2"    { LOCK TABLE a2 IN ACCESS SHARE MODE; }
-step "d2a1"    { LOCK TABLE a1 IN ACCESS SHARE MODE; }
-step "d2c" { COMMIT; }
+step d2a2  { LOCK TABLE a2 IN ACCESS SHARE MODE; }
+step d2a1  { LOCK TABLE a1 IN ACCESS SHARE MODE; }
+step d2c   { COMMIT; }
 
-session "e1"
+session e1
 setup      { BEGIN; SET deadlock_timeout = '10s'; }
-step "e1l" { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; }
-step "e1c" { COMMIT; }
+step e1l   { LOCK TABLE a1 IN ACCESS EXCLUSIVE MODE; }
+step e1c   { COMMIT; }
 
-session "e2"
+session e2
 setup      { BEGIN; SET deadlock_timeout = '10s'; }
-step "e2l" { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; }
-step "e2c" { COMMIT; }
+step e2l   { LOCK TABLE a2 IN ACCESS EXCLUSIVE MODE; }
+step e2c   { COMMIT; }
 
-permutation "d1a1" "d2a2" "e1l" "e2l" "d1a2" "d2a1" "d1c" "e1c" "d2c" "e2c"
+permutation d1a1 d2a2 e1l e2l d1a2 d2a1 d1c e1c d2c e2c
index d35c67f670db67997911f4c4867c8206ce243577..65bd936dcca298a82b3fb11eb51bdfb307ae0cb1 100644 (file)
@@ -14,21 +14,21 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
+session s1
 setup          { BEGIN; }
-step "s1l"     { SELECT * FROM foo FOR KEY SHARE; }
-step "s1svp"   { SAVEPOINT f; }
-step "s1d"     { SELECT * FROM foo FOR NO KEY UPDATE; }
-step "s1r"     { ROLLBACK TO f; }
-step "s1c"     { COMMIT; }
+step s1l       { SELECT * FROM foo FOR KEY SHARE; }
+step s1svp     { SAVEPOINT f; }
+step s1d       { SELECT * FROM foo FOR NO KEY UPDATE; }
+step s1r       { ROLLBACK TO f; }
+step s1c       { COMMIT; }
 
-session "s2"
+session s2
 setup          { BEGIN; }
-step "s2l"     { SELECT * FROM foo FOR UPDATE; }
-step "s2l2"        { SELECT * FROM foo FOR NO KEY UPDATE; }
-step "s2c"     { COMMIT; }
+step s2l       { SELECT * FROM foo FOR UPDATE; }
+step s2l2      { SELECT * FROM foo FOR NO KEY UPDATE; }
+step s2c       { COMMIT; }
 
-permutation "s1l" "s1svp" "s1d" "s1r" "s2l" "s1c" "s2c"
-permutation "s1l" "s1svp" "s1d" "s2l" "s1r" "s1c" "s2c"
-permutation "s1l" "s1svp" "s1d" "s1r" "s2l2" "s1c" "s2c"
-permutation "s1l" "s1svp" "s1d" "s2l2" "s1r" "s1c" "s2c"
+permutation s1l s1svp s1d s1r s2l s1c s2c
+permutation s1l s1svp s1d s2l s1r s1c s2c
+permutation s1l s1svp s1d s1r s2l2 s1c s2c
+permutation s1l s1svp s1d s2l2 s1r s1c s2c
index bc32e216829a52182f0acaeccd938f77054e9e81..498ffed32ab4b25b12cf1d66cc2adb5415fc04ec 100644 (file)
@@ -15,23 +15,23 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
+session s1
 setup          { BEGIN; }
-step "s1l"     { SELECT * FROM foo FOR KEY SHARE; }
-step "s1svp"   { SAVEPOINT f; }
-step "s1d"     { DELETE FROM foo; }
-step "s1r"     { ROLLBACK TO f; }
-step "s1c"     { COMMIT; }
+step s1l       { SELECT * FROM foo FOR KEY SHARE; }
+step s1svp     { SAVEPOINT f; }
+step s1d       { DELETE FROM foo; }
+step s1r       { ROLLBACK TO f; }
+step s1c       { COMMIT; }
 
-session "s2"
+session s2
 setup          { BEGIN; }
-step "s2l"     { SELECT * FROM foo FOR UPDATE; }
-step "s2c"     { COMMIT; }
+step s2l       { SELECT * FROM foo FOR UPDATE; }
+step s2c       { COMMIT; }
 
-permutation "s1l" "s1svp" "s1d" "s1r" "s1c" "s2l" "s2c"
-permutation "s1l" "s1svp" "s1d" "s1r" "s2l" "s1c" "s2c"
-permutation "s1l" "s1svp" "s1d" "s2l" "s1r" "s1c" "s2c"
-permutation "s1l" "s1svp" "s2l" "s1d" "s1r" "s1c" "s2c"
-permutation "s1l" "s2l" "s1svp" "s1d" "s1r" "s1c" "s2c"
-permutation "s2l" "s1l" "s2c" "s1svp" "s1d" "s1r" "s1c"
-permutation "s2l" "s2c" "s1l" "s1svp" "s1d" "s1r" "s1c"
+permutation s1l s1svp s1d s1r s1c s2l s2c
+permutation s1l s1svp s1d s1r s2l s1c s2c
+permutation s1l s1svp s1d s2l s1r s1c s2c
+permutation s1l s1svp s2l s1d s1r s1c s2c
+permutation s1l s2l s1svp s1d s1r s1c s2c
+permutation s2l s1l s2c s1svp s1d s1r s1c
+permutation s2l s2c s1l s1svp s1d s1r s1c
index dd42b70ddf3fea72480f1f613a38072b186ecaab..812b5de22617df71240ef301b297fa6230b00a9e 100644 (file)
@@ -17,25 +17,25 @@ teardown
    DROP TABLE test_dc;
 }
 
-session "s1"
-step "noseq" { SET enable_seqscan = false; }
-step "chkiso" { SELECT (setting in ('read committed','read uncommitted')) AS is_read_committed FROM pg_settings WHERE name = 'default_transaction_isolation'; }
-step "prepi" { PREPARE getrow_idx AS SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; }
-step "preps" { PREPARE getrow_seq AS SELECT * FROM test_dc WHERE data::text=34::text ORDER BY id,data; }
-step "begin" { BEGIN; }
-step "explaini" { EXPLAIN (COSTS OFF) EXECUTE getrow_idx; }
-step "explains" { EXPLAIN (COSTS OFF) EXECUTE getrow_seq; }
-step "selecti" { EXECUTE getrow_idx; }
-step "selects" { EXECUTE getrow_seq; }
-step "end" { COMMIT; }
+session s1
+step noseq { SET enable_seqscan = false; }
+step chkiso { SELECT (setting in ('read committed','read uncommitted')) AS is_read_committed FROM pg_settings WHERE name = 'default_transaction_isolation'; }
+step prepi { PREPARE getrow_idx AS SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; }
+step preps { PREPARE getrow_seq AS SELECT * FROM test_dc WHERE data::text=34::text ORDER BY id,data; }
+step begin { BEGIN; }
+step explaini { EXPLAIN (COSTS OFF) EXECUTE getrow_idx; }
+step explains { EXPLAIN (COSTS OFF) EXECUTE getrow_seq; }
+step selecti { EXECUTE getrow_idx; }
+step selects { EXECUTE getrow_seq; }
+step end { COMMIT; }
 
-session "s2"
+session s2
 setup { BEGIN; }
-step "select2" { SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; }
-step "insert2" { INSERT INTO test_dc(data) SELECT * FROM generate_series(1, 100); }
-step "end2" { COMMIT; }
+step select2 { SELECT * FROM test_dc WHERE data=34 ORDER BY id,data; }
+step insert2 { INSERT INTO test_dc(data) SELECT * FROM generate_series(1, 100); }
+step end2 { COMMIT; }
 
-session "s3"
-step "drop" { DROP INDEX CONCURRENTLY test_dc_data; }
+session s3
+step drop { DROP INDEX CONCURRENTLY test_dc_data; }
 
-permutation "noseq" "chkiso" "prepi" "preps" "begin" "explaini" "explains" "select2" "drop" "insert2" "end2" "selecti" "selects" "end"
+permutation noseq chkiso prepi preps begin explaini explains select2 drop insert2 end2 selecti selects end
index 9876948f9f282832bdd43a4e284cd749d7549fa8..be34f9af9204a45bd1df8e59227b52e395aad4a4 100644 (file)
@@ -54,53 +54,53 @@ teardown
 }
 
 
-session "s0"
-step "s0_rep" { SELECT * FROM trigtest ORDER BY key, data }
+session s0
+step s0_rep { SELECT * FROM trigtest ORDER BY key, data }
 
-session "s1"
+session s1
 #setup          {  }
-step "s1_b_rc"     { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; }
-step "s1_b_rr"     { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; }
-step "s1_c"     { COMMIT; }
-step "s1_r"     { ROLLBACK; }
-step "s1_trig_rep_b_i" { CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
-step "s1_trig_rep_a_i" { CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
-step "s1_trig_rep_b_u" { CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
-step "s1_trig_rep_a_u" { CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
-step "s1_trig_rep_b_d" { CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
-step "s1_trig_rep_a_d" { CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
-step "s1_ins_a" { INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; }
-step "s1_ins_b" { INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; }
-step "s1_ins_c" { INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; }
-step "s1_del_a" {
+step s1_b_rc     { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; }
+step s1_b_rr     { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; }
+step s1_c     { COMMIT; }
+step s1_r     { ROLLBACK; }
+step s1_trig_rep_b_i { CREATE TRIGGER rep_b_i BEFORE INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
+step s1_trig_rep_a_i { CREATE TRIGGER rep_a_i AFTER INSERT ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
+step s1_trig_rep_b_u { CREATE TRIGGER rep_b_u BEFORE UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
+step s1_trig_rep_a_u { CREATE TRIGGER rep_a_u AFTER UPDATE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
+step s1_trig_rep_b_d { CREATE TRIGGER rep_b_d BEFORE DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
+step s1_trig_rep_a_d { CREATE TRIGGER rep_a_d AFTER DELETE ON trigtest FOR EACH ROW EXECUTE PROCEDURE trig_report(); }
+step s1_ins_a { INSERT INTO trigtest VALUES ('key-a', 'val-a-s1') RETURNING *; }
+step s1_ins_b { INSERT INTO trigtest VALUES ('key-b', 'val-b-s1') RETURNING *; }
+step s1_ins_c { INSERT INTO trigtest VALUES ('key-c', 'val-c-s1') RETURNING *; }
+step s1_del_a {
     DELETE FROM trigtest
     WHERE
         noisy_oper('upd', key, '=', 'key-a') AND
         noisy_oper('upk', data, '<>', 'mismatch')
     RETURNING *
 }
-step "s1_del_b" {
+step s1_del_b {
     DELETE FROM trigtest
     WHERE
         noisy_oper('upd', key, '=', 'key-b') AND
         noisy_oper('upk', data, '<>', 'mismatch')
     RETURNING *
 }
-step "s1_upd_a_data" {
+step s1_upd_a_data {
     UPDATE trigtest SET data = data || '-ups1'
     WHERE
         noisy_oper('upd', key, '=', 'key-a') AND
         noisy_oper('upk', data, '<>', 'mismatch')
     RETURNING *;
 }
-step "s1_upd_b_data" {
+step s1_upd_b_data {
     UPDATE trigtest SET data = data || '-ups1'
     WHERE
         noisy_oper('upd', key, '=', 'key-b') AND
         noisy_oper('upk', data, '<>', 'mismatch')
     RETURNING *;
 }
-step "s1_upd_a_tob" {
+step s1_upd_a_tob {
     UPDATE trigtest SET key = 'key-b', data = data || '-tobs1'
     WHERE
         noisy_oper('upk', key, '=', 'key-a') AND
@@ -108,42 +108,42 @@ step "s1_upd_a_tob" {
     RETURNING *;
 }
 
-session "s2"
+session s2
 #setup          {  }
-step "s2_b_rc"     { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; }
-step "s2_b_rr"     { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; }
-step "s2_c"     { COMMIT; }
-#step "s2_r"     { ROLLBACK; }
-step "s2_ins_a" { INSERT INTO trigtest VALUES ('key-a', 'val-a-s2') RETURNING *; }
-step "s2_del_a" {
+step s2_b_rc     { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; }
+step s2_b_rr     { BEGIN ISOLATION LEVEL REPEATABLE READ; SELECT 1; }
+step s2_c     { COMMIT; }
+#step s2_r     { ROLLBACK; }
+step s2_ins_a { INSERT INTO trigtest VALUES ('key-a', 'val-a-s2') RETURNING *; }
+step s2_del_a {
     DELETE FROM trigtest
     WHERE
         noisy_oper('upd', key, '=', 'key-a') AND
         noisy_oper('upk', data, '<>', 'mismatch')
     RETURNING *
 }
-step "s2_upd_a_data" {
+step s2_upd_a_data {
     UPDATE trigtest SET data = data || '-ups2'
     WHERE
         noisy_oper('upd', key, '=', 'key-a') AND
         noisy_oper('upk', data, '<>', 'mismatch')
     RETURNING *;
 }
-step "s2_upd_b_data" {
+step s2_upd_b_data {
     UPDATE trigtest SET data = data || '-ups2'
     WHERE
         noisy_oper('upd', key, '=', 'key-b') AND
         noisy_oper('upk', data, '<>', 'mismatch')
     RETURNING *;
 }
-step "s2_upd_all_data" {
+step s2_upd_all_data {
     UPDATE trigtest SET data = data || '-ups2'
     WHERE
         noisy_oper('upd', key, '<>', 'mismatch') AND
         noisy_oper('upk', data, '<>', 'mismatch')
     RETURNING *;
 }
-step "s2_upsert_a_data" {
+step s2_upsert_a_data {
     INSERT INTO trigtest VALUES ('key-a', 'val-a-upss2')
     ON CONFLICT (key)
         DO UPDATE SET data = trigtest.data || '-upserts2'
@@ -153,19 +153,19 @@ step "s2_upsert_a_data" {
     RETURNING *;
 }
 
-#session "s3"
+#session s3
 #setup          {  }
-#step "s3_b_rc"     { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; }
-#step "s3_c"     { COMMIT; }
-#step "s3_r"     { ROLLBACK; }
-#step "s3_del_a" {
+#step s3_b_rc     { BEGIN ISOLATION LEVEL READ COMMITTED; SELECT 1; }
+#step s3_c     { COMMIT; }
+#step s3_r     { ROLLBACK; }
+#step s3_del_a {
 #    DELETE FROM trigtest
 #    WHERE
 #        noisy_oper('upd', key, '=', 'key-a') AND
 #        noisy_oper('upk', data, '<>', 'mismatch')
 #    RETURNING *
 #}
-#step "s3_upd_a_data" {
+#step s3_upd_a_data {
 #    UPDATE trigtest SET data = data || '-ups3'
 #    WHERE
 #        noisy_oper('upd', key, '=', 'key-a') AND
@@ -175,236 +175,236 @@ step "s2_upsert_a_data" {
 
 ### base case verifying that triggers see performed modifications
 # s1 updates, s1 commits, s2 updates
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s1_c" "s2_upd_a_data" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s1_c s2_upd_a_data s2_c
+    s0_rep
 # s1 updates, s1 rolls back, s2 updates
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s1_r" "s2_upd_a_data" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s1_r s2_upd_a_data s2_c
+    s0_rep
 # s1 updates, s1 commits back, s2 deletes
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s1_c" "s2_del_a" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s1_c s2_del_a s2_c
+    s0_rep
 # s1 updates, s1 rolls back back, s2 deletes
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s1_r" "s2_del_a" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s1_r s2_del_a s2_c
+    s0_rep
 
 ### Verify EPQ is performed if necessary, and skipped if transaction rolled back
 # s1 updates, s2 updates, s1 commits, EPQ
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_upd_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_upd_a_data s1_c s2_c
+    s0_rep
 # s1 updates, s2 updates, s1 rolls back, no EPQ
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_upd_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_upd_a_data s1_r s2_c
+    s0_rep
 # s1 updates, s2 deletes, s1 commits, EPQ
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_upd_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_upd_a_data s1_c s2_c
+    s0_rep
 # s1 updates, s2 deletes, s1 rolls back, no EPQ
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_upd_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_upd_a_data s1_r s2_c
+    s0_rep
 # s1 deletes, s2 updates, s1 commits, EPQ
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_upd_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_del_a s2_upd_a_data s1_c s2_c
+    s0_rep
 # s1 deletes, s2 updates, s1 rolls back, no EPQ
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_upd_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_del_a s2_upd_a_data s1_r s2_c
+    s0_rep
 # s1 inserts, s2 inserts, s1 commits, s2 inserts, unique conflict
-permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_a_i" "s1_trig_rep_a_d"
-    "s1_b_rc" "s2_b_rc"
-    "s1_ins_a" "s2_ins_a" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_a_i s1_trig_rep_a_d
+    s1_b_rc s2_b_rc
+    s1_ins_a s2_ins_a s1_c s2_c
+    s0_rep
 # s1 inserts, s2 inserts, s1 rolls back, s2 inserts, no unique conflict
-permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_a_i" "s1_trig_rep_a_d"
-    "s1_b_rc" "s2_b_rc"
-    "s1_ins_a" "s2_ins_a" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_a_i s1_trig_rep_a_d
+    s1_b_rc s2_b_rc
+    s1_ins_a s2_ins_a s1_r s2_c
+    s0_rep
 # s1 updates, s2 upserts, s1 commits, EPQ
-permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_upsert_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_upsert_a_data s1_c s2_c
+    s0_rep
 # s1 updates, s2 upserts, s1 rolls back, no EPQ
-permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_upsert_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_upsert_a_data s1_c s2_c
+    s0_rep
 # s1 inserts, s2 upserts, s1 commits
-permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_b_rc" "s2_b_rc"
-    "s1_ins_a" "s2_upsert_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_b_rc s2_b_rc
+    s1_ins_a s2_upsert_a_data s1_c s2_c
+    s0_rep
 # s1 inserts, s2 upserts, s1 rolls back
-permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_b_rc" "s2_b_rc"
-    "s1_ins_a" "s2_upsert_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_b_rc s2_b_rc
+    s1_ins_a s2_upsert_a_data s1_r s2_c
+    s0_rep
 # s1 inserts, s2 upserts, s1 updates, s1 commits, EPQ
-permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_b_rc" "s2_b_rc"
-    "s1_ins_a" "s1_upd_a_data" "s2_upsert_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_b_rc s2_b_rc
+    s1_ins_a s1_upd_a_data s2_upsert_a_data s1_c s2_c
+    s0_rep
 # s1 inserts, s2 upserts, s1 updates, s1 rolls back, no EPQ
-permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_b_rc" "s2_b_rc"
-    "s1_ins_a" "s1_upd_a_data" "s2_upsert_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_b_rc s2_b_rc
+    s1_ins_a s1_upd_a_data s2_upsert_a_data s1_r s2_c
+    s0_rep
 
 ### Verify EPQ is performed if necessary, and skipped if transaction rolled back,
 ### just without before triggers (for comparison, no additional row locks)
 # s1 updates, s2 updates, s1 commits, EPQ
-permutation "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_upd_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_upd_a_data s1_c s2_c
+    s0_rep
 # s1 updates, s2 updates, s1 rolls back, no EPQ
-permutation "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_upd_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_upd_a_data s1_r s2_c
+    s0_rep
 # s1 updates, s2 deletes, s1 commits, EPQ
-permutation "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_del_a" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_del_a s1_c s2_c
+    s0_rep
 # s1 updates, s2 deletes, s1 rolls back, no EPQ
-permutation "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_data" "s2_del_a" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_upd_a_data s2_del_a s1_r s2_c
+    s0_rep
 # s1 deletes, s2 updates, s1 commits, EPQ
-permutation "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_upd_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_del_a s2_upd_a_data s1_c s2_c
+    s0_rep
 # s1 deletes, s2 updates, s1 rolls back, no EPQ
-permutation "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_upd_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_del_a s2_upd_a_data s1_r s2_c
+    s0_rep
 # s1 deletes, s2 deletes, s1 commits, EPQ
-permutation "s1_trig_rep_a_d"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_del_a" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_a_d
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_del_a s2_del_a s1_c s2_c
+    s0_rep
 # s1 deletes, s2 deletes, s1 rolls back, no EPQ
-permutation "s1_trig_rep_a_d"
-    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_del_a" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_a_d
+    s1_ins_a s1_ins_b s1_b_rc s2_b_rc
+    s1_del_a s2_del_a s1_r s2_c
+    s0_rep
 
 ### Verify that an update affecting a row that has been
 ### updated/deleted to not match the where clause anymore works
 ### correctly
 # s1 updates to different key, s2 updates old key, s1 commits, EPQ failure should lead to no update
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_tob" "s2_upd_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_c s1_b_rc s2_b_rc
+    s1_upd_a_tob s2_upd_a_data s1_c s2_c
+    s0_rep
 # s1 updates to different key, s2 updates old key, s1 rolls back, no EPQ failure
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_tob" "s2_upd_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_c s1_b_rc s2_b_rc
+    s1_upd_a_tob s2_upd_a_data s1_r s2_c
+    s0_rep
 # s1 updates to different key, s2 updates new key, s1 commits, s2 will
 # not see tuple with new key and not block
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_tob" "s2_upd_b_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_c s1_b_rc s2_b_rc
+    s1_upd_a_tob s2_upd_b_data s1_c s2_c
+    s0_rep
 # s1 updates to different key, s2 updates all keys, s1 commits, s2,
 # will not see tuple with old key, but block on old, and then follow
 # the chain
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc"
-    "s1_upd_a_tob" "s2_upd_all_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_c s1_b_rc s2_b_rc
+    s1_upd_a_tob s2_upd_all_data s1_c s2_c
+    s0_rep
 # s1 deletes, s2 updates, s1 committs, EPQ failure should lead to no update
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_upd_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_c s1_b_rc s2_b_rc
+    s1_del_a s2_upd_a_data s1_c s2_c
+    s0_rep
 # s1 deletes, s2 updates, s1 rolls back, no EPQ failure
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_upd_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_c s1_b_rc s2_b_rc
+    s1_del_a s2_upd_a_data s1_r s2_c
+    s0_rep
 # s1 deletes, s2 deletes, s1 committs, EPQ failure should lead to no delete
-permutation "s1_trig_rep_b_d" "s1_trig_rep_a_d"
-    "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_del_a" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_a_d
+    s1_ins_a s1_ins_c s1_b_rc s2_b_rc
+    s1_del_a s2_del_a s1_c s2_c
+    s0_rep
 # s1 deletes, s2 deletes, s1 rolls back, no EPQ failure
-permutation "s1_trig_rep_b_d" "s1_trig_rep_a_d"
-    "s1_ins_a" "s1_ins_c" "s1_b_rc" "s2_b_rc"
-    "s1_del_a" "s2_del_a" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_a_d
+    s1_ins_a s1_ins_c s1_b_rc s2_b_rc
+    s1_del_a s2_del_a s1_r s2_c
+    s0_rep
 
 ### Verify EPQ with more than two participants works
 ## XXX: Disable tests, there is some potential for instability here that's not yet fully understood
 ## s1 updates, s2 updates, s3 updates, s1 commits, s2 EPQ, s2 commits, s3 EPQ
-#permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-#    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" "s3_b_rc"
-#    "s1_upd_a_data" "s2_upd_a_data" "s3_upd_a_data" "s1_c" "s2_c" "s3_c"
-#    "s0_rep"
+#permutation s1_trig_rep_b_u s1_trig_rep_a_u
+#    s1_ins_a s1_ins_b s1_b_rc s2_b_rc s3_b_rc
+#    s1_upd_a_data s2_upd_a_data s3_upd_a_data s1_c s2_c s3_c
+#    s0_rep
 ## s1 updates, s2 updates, s3 updates, s1 commits, s2 EPQ, s2 rolls back, s3 EPQ
-#permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-#    "s1_ins_a" "s1_ins_b" "s1_b_rc" "s2_b_rc" "s3_b_rc"
-#    "s1_upd_a_data" "s2_upd_a_data" "s3_upd_a_data" "s1_c" "s2_r" "s3_c"
-#    "s0_rep"
+#permutation s1_trig_rep_b_u s1_trig_rep_a_u
+#    s1_ins_a s1_ins_b s1_b_rc s2_b_rc s3_b_rc
+#    s1_upd_a_data s2_upd_a_data s3_upd_a_data s1_c s2_r s3_c
+#    s0_rep
 ## s1 updates, s3 updates, s2 upserts, s1 updates, s1 commits, s3 EPQ, s3 deletes, s3 commits, s2 inserts without EPQ recheck
-#permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-#    "s1_ins_a" "s1_b_rc" "s2_b_rc" "s3_b_rc"
-#    "s1_upd_a_data" "s3_upd_a_data" "s2_upsert_a_data" "s1_upd_a_data" "s1_c" "s3_del_a" "s3_c" "s2_c"
-#    "s0_rep"
+#permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u
+#    s1_ins_a s1_b_rc s2_b_rc s3_b_rc
+#    s1_upd_a_data s3_upd_a_data s2_upsert_a_data s1_upd_a_data s1_c s3_del_a s3_c s2_c
+#    s0_rep
 ## s1 updates, s3 updates, s2 upserts, s1 updates, s1 commits, s3 EPQ, s3 deletes, s3 rolls back, s2 EPQ
-#permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-#    "s1_ins_a" "s1_b_rc" "s2_b_rc" "s3_b_rc"
-#    "s1_upd_a_data" "s3_upd_a_data" "s2_upsert_a_data" "s1_upd_a_data" "s1_c" "s3_del_a" "s3_r" "s2_c"
-#    "s0_rep"
+#permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u
+#    s1_ins_a s1_b_rc s2_b_rc s3_b_rc
+#    s1_upd_a_data s3_upd_a_data s2_upsert_a_data s1_upd_a_data s1_c s3_del_a s3_r s2_c
+#    s0_rep
 
 ### Document that EPQ doesn't "leap" onto a tuple that would match after blocking
 # s1 inserts a, s1 updates b, s2 updates b, s1 deletes b, s1 updates a to b, s1 commits, s2 EPQ finds tuple deleted
-permutation "s1_trig_rep_b_i" "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_i" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_b" "s1_b_rc" "s2_b_rc"
-    "s1_ins_a" "s1_upd_b_data" "s2_upd_b_data" "s1_del_b" "s1_upd_a_tob" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_i s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_i s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_b s1_b_rc s2_b_rc
+    s1_ins_a s1_upd_b_data s2_upd_b_data s1_del_b s1_upd_a_tob s1_c s2_c
+    s0_rep
 
 ### Triggers for EPQ detect serialization failures
 # s1 updates, s2 updates, s1 commits, serialization failure
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rr" "s2_b_rr"
-    "s1_upd_a_data" "s2_upd_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rr s2_b_rr
+    s1_upd_a_data s2_upd_a_data s1_c s2_c
+    s0_rep
 # s1 updates, s2 updates, s1 rolls back, s2 succeeds
-permutation "s1_trig_rep_b_u" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rr" "s2_b_rr"
-    "s1_upd_a_data" "s2_upd_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_u s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rr s2_b_rr
+    s1_upd_a_data s2_upd_a_data s1_r s2_c
+    s0_rep
 # s1 deletes, s2 updates, s1 commits, serialization failure
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rr" "s2_b_rr"
-    "s1_del_a" "s2_upd_a_data" "s1_c" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rr s2_b_rr
+    s1_del_a s2_upd_a_data s1_c s2_c
+    s0_rep
 # s1 deletes, s2 updates, s1 rolls back, s2 succeeds
-permutation "s1_trig_rep_b_d" "s1_trig_rep_b_u" "s1_trig_rep_a_d" "s1_trig_rep_a_u"
-    "s1_ins_a" "s1_ins_b" "s1_b_rr" "s2_b_rr"
-    "s1_del_a" "s2_upd_a_data" "s1_r" "s2_c"
-    "s0_rep"
+permutation s1_trig_rep_b_d s1_trig_rep_b_u s1_trig_rep_a_d s1_trig_rep_a_u
+    s1_ins_a s1_ins_b s1_b_rr s2_b_rr
+    s1_del_a s2_upd_a_data s1_r s2_c
+    s0_rep
index 3825dd22f6e815dd3c5e12ff9c2071af5e0b15ff..09dcaa1339fc20c70ba57355ff23a97a94874a68 100644 (file)
@@ -30,14 +30,14 @@ teardown
  DROP TABLE table_a, table_b;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL READ COMMITTED; }
 # wx1 then wx2 checks the basic case of re-fetching up-to-date values
-step "wx1" { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; }
+step wx1   { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; }
 # wy1 then wy2 checks the case where quals pass then fail
-step "wy1" { UPDATE accounts SET balance = balance + 500 WHERE accountid = 'checking'; }
+step wy1   { UPDATE accounts SET balance = balance + 500 WHERE accountid = 'checking'; }
 # upsert tests are to check writable-CTE cases
-step "upsert1" {
+step upsert1   {
    WITH upsert AS
      (UPDATE accounts SET balance = balance + 500
       WHERE accountid = 'savings'
@@ -51,20 +51,20 @@ step "upsert1"  {
 # when the first updated tuple was in a non-first child table.
 # writep2/returningp1 tests a memory allocation issue
 
-step "readp1"  { SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; }
-step "writep1" { UPDATE p SET b = -1 WHERE a = 1 AND b = 1 AND c = 0; }
-step "writep2" { UPDATE p SET b = -b WHERE a = 1 AND c = 0; }
-step "c1"  { COMMIT; }
+step readp1    { SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; }
+step writep1   { UPDATE p SET b = -1 WHERE a = 1 AND b = 1 AND c = 0; }
+step writep2   { UPDATE p SET b = -b WHERE a = 1 AND c = 0; }
+step c1    { COMMIT; }
 
 # these tests are meant to exercise EvalPlanQualFetchRowMarks,
 # ie, handling non-locked tables in an EvalPlanQual recheck
 
-step "partiallock" {
+step partiallock   {
    SELECT * FROM accounts a1, accounts a2
      WHERE a1.accountid = a2.accountid
      FOR UPDATE OF a1;
 }
-step "lockwithvalues"  {
+step lockwithvalues    {
    SELECT * FROM accounts a1, (values('checking'),('savings')) v(id)
      WHERE a1.accountid = v.id
      FOR UPDATE OF a1;
@@ -73,7 +73,7 @@ step "lockwithvalues" {
 # these tests exercise EvalPlanQual with a SubLink sub-select (which should be
 # unaffected by any EPQ recheck behavior in the outer query); cf bug #14034
 
-step "updateforss" {
+step updateforss   {
    UPDATE table_a SET value = 'newTableAValue' WHERE id = 1;
    UPDATE table_b SET value = 'newTableBValue' WHERE id = 1;
 }
@@ -81,16 +81,16 @@ step "updateforss"  {
 # these tests exercise EvalPlanQual with conditional InitPlans which
 # have not been executed prior to the EPQ
 
-step "updateforcip"    {
+step updateforcip  {
    UPDATE table_a SET value = NULL WHERE id = 1;
 }
 
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL READ COMMITTED; }
-step "wx2" { UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking'; }
-step "wy2" { UPDATE accounts SET balance = balance + 1000 WHERE accountid = 'checking' AND balance < 1000; }
-step "upsert2" {
+step wx2   { UPDATE accounts SET balance = balance + 450 WHERE accountid = 'checking'; }
+step wy2   { UPDATE accounts SET balance = balance + 1000 WHERE accountid = 'checking' AND balance < 1000; }
+step upsert2   {
    WITH upsert AS
      (UPDATE accounts SET balance = balance + 1234
       WHERE accountid = 'savings'
@@ -98,35 +98,35 @@ step "upsert2"  {
    INSERT INTO accounts SELECT 'savings', 1234
      WHERE NOT EXISTS (SELECT 1 FROM upsert);
 }
-step "readp2"  { SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; }
-step "returningp1" {
+step readp2    { SELECT tableoid::regclass, ctid, * FROM p WHERE b IN (0, 1) AND c = 0 FOR UPDATE; }
+step returningp1 {
    WITH u AS ( UPDATE p SET b = b WHERE a > 0 RETURNING * )
      SELECT * FROM u;
 }
-step "readforss"   {
+step readforss {
    SELECT ta.id AS ta_id, ta.value AS ta_value,
        (SELECT ROW(tb.id, tb.value)
         FROM table_b tb WHERE ta.id = tb.id) AS tb_row
    FROM table_a ta
    WHERE ta.id = 1 FOR UPDATE OF ta;
 }
-step "updateforcip2"   {
+step updateforcip2 {
    UPDATE table_a SET value = COALESCE(value, (SELECT text 'newValue')) WHERE id = 1;
 }
-step "updateforcip3"   {
+step updateforcip3 {
    WITH d(val) AS (SELECT text 'newValue' FROM generate_series(1,1))
    UPDATE table_a SET value = COALESCE(value, (SELECT val FROM d)) WHERE id = 1;
 }
-step "wrtwcte" { UPDATE table_a SET value = 'tableAValue2' WHERE id = 1; }
-step "c2"  { COMMIT; }
+step wrtwcte   { UPDATE table_a SET value = 'tableAValue2' WHERE id = 1; }
+step c2    { COMMIT; }
 
-session "s3"
+session s3
 setup      { BEGIN ISOLATION LEVEL READ COMMITTED; }
-step "read"    { SELECT * FROM accounts ORDER BY accountid; }
-step "read_a"  { SELECT * FROM table_a ORDER BY id; }
+step read  { SELECT * FROM accounts ORDER BY accountid; }
+step read_a    { SELECT * FROM table_a ORDER BY id; }
 
 # this test exercises EvalPlanQual with a CTE, cf bug #14328
-step "readwcte"    {
+step readwcte  {
    WITH
        cte1 AS (
          SELECT id FROM table_b WHERE value = 'tableBValue'
@@ -140,7 +140,7 @@ step "readwcte" {
 }
 
 # this test exercises a different CTE misbehavior, cf bug #14870
-step "multireadwcte"   {
+step multireadwcte {
    WITH updated AS (
      UPDATE table_a SET value = 'tableAValue3' WHERE id = 1 RETURNING id
    )
@@ -149,15 +149,15 @@ step "multireadwcte"  {
 
 teardown   { COMMIT; }
 
-permutation "wx1" "wx2" "c1" "c2" "read"
-permutation "wy1" "wy2" "c1" "c2" "read"
-permutation "upsert1" "upsert2" "c1" "c2" "read"
-permutation "readp1" "writep1" "readp2" "c1" "c2"
-permutation "writep2" "returningp1" "c1" "c2"
-permutation "wx2" "partiallock" "c2" "c1" "read"
-permutation "wx2" "lockwithvalues" "c2" "c1" "read"
-permutation "updateforss" "readforss" "c1" "c2"
-permutation "updateforcip" "updateforcip2" "c1" "c2" "read_a"
-permutation "updateforcip" "updateforcip3" "c1" "c2" "read_a"
-permutation "wrtwcte" "readwcte" "c1" "c2"
-permutation "wrtwcte" "multireadwcte" "c1" "c2"
+permutation wx1 wx2 c1 c2 read
+permutation wy1 wy2 c1 c2 read
+permutation upsert1 upsert2 c1 c2 read
+permutation readp1 writep1 readp2 c1 c2
+permutation writep2 returningp1 c1 c2
+permutation wx2 partiallock c2 c1 read
+permutation wx2 lockwithvalues c2 c1 read
+permutation updateforss readforss c1 c2
+permutation updateforcip updateforcip2 c1 c2 read_a
+permutation updateforcip updateforcip3 c1 c2 read_a
+permutation wrtwcte readwcte c1 c2
+permutation wrtwcte multireadwcte c1 c2
index 8481ae4e332fc01c0167d9ebd0fbb24a2fe6e589..f11a1d8cefc4795ab5a49925f06a9a3d34455efd 100644 (file)
@@ -10,10 +10,10 @@ teardown
   DROP TABLE foo, bar;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "ins" { INSERT INTO bar VALUES (42); }
-step "com" { COMMIT; }
+step ins   { INSERT INTO bar VALUES (42); }
+step com   { COMMIT; }
 
-session "s2"
-step "upd" { UPDATE foo SET b = 'Hello World'; }
+session s2
+step upd   { UPDATE foo SET b = 'Hello World'; }
index 4f357c62ea560cac66968af486dae7bd46cec7c0..b4970dd06fd705f38deb14522f5afa0be01e0034 100644 (file)
@@ -18,29 +18,29 @@ teardown
   DROP TABLE parent, child;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; SET deadlock_timeout = '100ms'; }
-step "s1i" { INSERT INTO child VALUES (1, 1); }
-step "s1u" { UPDATE parent SET aux = 'bar'; }
-step "s1c" { COMMIT; }
+step s1i   { INSERT INTO child VALUES (1, 1); }
+step s1u   { UPDATE parent SET aux = 'bar'; }
+step s1c   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; SET deadlock_timeout = '10s'; }
-step "s2i" { INSERT INTO child VALUES (2, 1); }
-step "s2u" { UPDATE parent SET aux = 'baz'; }
-step "s2c" { COMMIT; }
+step s2i   { INSERT INTO child VALUES (2, 1); }
+step s2u   { UPDATE parent SET aux = 'baz'; }
+step s2c   { COMMIT; }
 
-permutation "s1i" "s1u" "s1c" "s2i" "s2u" "s2c"
-permutation "s1i" "s1u" "s2i" "s1c" "s2u" "s2c"
-permutation "s1i" "s1u" "s2i" "s2u" "s1c" "s2c"
-permutation "s1i" "s2i" "s1u" "s1c" "s2u" "s2c"
-permutation "s1i" "s2i" "s1u" "s2u" "s1c" "s2c"
-permutation "s1i" "s2i" "s2u" "s1u" "s2c" "s1c"
-permutation "s1i" "s2i" "s2u" "s2c" "s1u" "s1c"
-permutation "s2i" "s1i" "s1u" "s1c" "s2u" "s2c"
-permutation "s2i" "s1i" "s1u" "s2u" "s1c" "s2c"
-permutation "s2i" "s1i" "s2u" "s1u" "s2c" "s1c"
-permutation "s2i" "s1i" "s2u" "s2c" "s1u" "s1c"
-permutation "s2i" "s2u" "s1i" "s1u" "s2c" "s1c"
-permutation "s2i" "s2u" "s1i" "s2c" "s1u" "s1c"
-permutation "s2i" "s2u" "s2c" "s1i" "s1u" "s1c"
+permutation s1i s1u s1c s2i s2u s2c
+permutation s1i s1u s2i s1c s2u s2c
+permutation s1i s1u s2i s2u s1c s2c
+permutation s1i s2i s1u s1c s2u s2c
+permutation s1i s2i s1u s2u s1c s2c
+permutation s1i s2i s2u s1u s2c s1c
+permutation s1i s2i s2u s2c s1u s1c
+permutation s2i s1i s1u s1c s2u s2c
+permutation s2i s1i s1u s2u s1c s2c
+permutation s2i s1i s2u s1u s2c s1c
+permutation s2i s1i s2u s2c s1u s1c
+permutation s2i s2u s1i s1u s2c s1c
+permutation s2i s2u s1i s2c s1u s1c
+permutation s2i s2u s2c s1i s1u s1c
index a8305246e13afc20b628b8d164ba6aa09e3c0529..c8e0e4eb19a013f4f8ad3cb1267583a50ac7f3c0 100644 (file)
@@ -23,26 +23,26 @@ teardown
   DROP TABLE a, b;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; SET deadlock_timeout = '100ms'; }
-step "s1u1"    { UPDATE A SET Col1 = 1 WHERE AID = 1; }
-step "s1u2"    { UPDATE B SET Col2 = 1 WHERE BID = 2; }
-step "s1c" { COMMIT; }
+step s1u1  { UPDATE A SET Col1 = 1 WHERE AID = 1; }
+step s1u2  { UPDATE B SET Col2 = 1 WHERE BID = 2; }
+step s1c   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; SET deadlock_timeout = '10s'; }
-step "s2u1"    { UPDATE B SET Col2 = 1 WHERE BID = 2; }
-step "s2u2"    { UPDATE B SET Col2 = 1 WHERE BID = 2; }
-step "s2c" { COMMIT; }
+step s2u1  { UPDATE B SET Col2 = 1 WHERE BID = 2; }
+step s2u2  { UPDATE B SET Col2 = 1 WHERE BID = 2; }
+step s2c   { COMMIT; }
 
-permutation "s1u1" "s1u2" "s1c" "s2u1" "s2u2" "s2c"
-permutation "s1u1" "s1u2" "s2u1" "s1c" "s2u2" "s2c"
-permutation "s1u1" "s2u1" "s1u2" "s2u2" "s2c" "s1c"
-permutation "s1u1" "s2u1" "s2u2" "s1u2" "s2c" "s1c"
-permutation "s1u1" "s2u1" "s2u2" "s2c" "s1u2" "s1c"
-permutation "s2u1" "s1u1" "s1u2" "s2u2" "s2c" "s1c"
-permutation "s2u1" "s1u1" "s2u2" "s1u2" "s2c" "s1c"
-permutation "s2u1" "s1u1" "s2u2" "s2c" "s1u2" "s1c"
-permutation "s2u1" "s2u2" "s1u1" "s1u2" "s2c" "s1c"
-permutation "s2u1" "s2u2" "s1u1" "s2c" "s1u2" "s1c"
-permutation "s2u1" "s2u2" "s2c" "s1u1" "s1u2" "s1c"
+permutation s1u1 s1u2 s1c s2u1 s2u2 s2c
+permutation s1u1 s1u2 s2u1 s1c s2u2 s2c
+permutation s1u1 s2u1 s1u2 s2u2 s2c s1c
+permutation s1u1 s2u1 s2u2 s1u2 s2c s1c
+permutation s1u1 s2u1 s2u2 s2c s1u2 s1c
+permutation s2u1 s1u1 s1u2 s2u2 s2c s1c
+permutation s2u1 s1u1 s2u2 s1u2 s2c s1c
+permutation s2u1 s1u1 s2u2 s2c s1u2 s1c
+permutation s2u1 s2u2 s1u1 s1u2 s2c s1c
+permutation s2u1 s2u2 s1u1 s2c s1u2 s1c
+permutation s2u1 s2u2 s2c s1u1 s1u2 s1c
index 219242841d4f6f2013ce8e3d24ff46147ae5e732..926e0c5e2130a63bb40280e4223a175b7e3a0ea4 100644 (file)
@@ -15,29 +15,29 @@ teardown
   DROP TABLE tab_freeze;
 }
 
-session "s1"
-step "s1_begin"        { BEGIN; }
-step "s1_update"   { UPDATE tab_freeze SET x = x + 1 WHERE id = 3; }
-step "s1_commit"   { COMMIT; }
-step "s1_selectone"    {
+session s1
+step s1_begin      { BEGIN; }
+step s1_update     { UPDATE tab_freeze SET x = x + 1 WHERE id = 3; }
+step s1_commit     { COMMIT; }
+step s1_selectone  {
     BEGIN;
     SET LOCAL enable_seqscan = false;
     SET LOCAL enable_bitmapscan = false;
     SELECT * FROM tab_freeze WHERE id = 3;
     COMMIT;
 }
-step "s1_selectall"    { SELECT * FROM tab_freeze ORDER BY name, id; }
+step s1_selectall  { SELECT * FROM tab_freeze ORDER BY name, id; }
 
-session "s2"
-step "s2_begin"        { BEGIN; }
-step "s2_key_share"    { SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; }
-step "s2_commit"   { COMMIT; }
-step "s2_vacuum"   { VACUUM FREEZE tab_freeze; }
+session s2
+step s2_begin      { BEGIN; }
+step s2_key_share  { SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; }
+step s2_commit     { COMMIT; }
+step s2_vacuum     { VACUUM FREEZE tab_freeze; }
 
-session "s3"
-step "s3_begin"        { BEGIN; }
-step "s3_key_share"    { SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; }
-step "s3_commit"   { COMMIT; }
+session s3
+step s3_begin      { BEGIN; }
+step s3_key_share  { SELECT id FROM tab_freeze WHERE id = 3 FOR KEY SHARE; }
+step s3_commit     { COMMIT; }
 
 # This permutation verfies that a previous bug
 #     https://postgr.es/m/[email protected]
@@ -45,12 +45,12 @@ step "s3_commit"    { COMMIT; }
 # is not reintroduced. We used to make wrong pruning / freezing
 # decision for multixacts, which could lead to a) broken hot chains b)
 # dead rows being revived.
-permutation "s1_begin" "s2_begin" "s3_begin" # start transactions
-   "s1_update" "s2_key_share" "s3_key_share" # have xmax be a multi with an updater, updater being oldest xid
-   "s1_update" # create additional row version that has multis
-   "s1_commit" "s2_commit" # commit both updater and share locker
-   "s2_vacuum" # due to bug in freezing logic, we used to *not* prune updated row, and then froze it
-   "s1_selectone" # if hot chain is broken, the row can't be found via index scan
-   "s3_commit" # commit remaining open xact
-   "s2_vacuum" # pruning / freezing in broken hot chains would unset xmax, reviving rows
-   "s1_selectall" # show borkedness
+permutation s1_begin s2_begin s3_begin # start transactions
+   s1_update s2_key_share s3_key_share # have xmax be a multi with an updater, updater being oldest xid
+   s1_update # create additional row version that has multis
+   s1_commit s2_commit # commit both updater and share locker
+   s2_vacuum # due to bug in freezing logic, we used to *not* prune updated row, and then froze it
+   s1_selectone # if hot chain is broken, the row can't be found via index scan
+   s3_commit # commit remaining open xact
+   s2_vacuum # pruning / freezing in broken hot chains would unset xmax, reviving rows
+   s1_selectall # show borkedness
index 417bb02102e9d6009dc28ebc4865f72b6847a0d4..4e4171ca80ee4870af16468636d6f3c2be98e4a4 100644 (file)
@@ -23,7 +23,7 @@ teardown
   DROP TABLE taby;
 }
 
-session "s1"
+session s1
 setup
 {
   BEGIN ISOLATION LEVEL SERIALIZABLE;
@@ -31,10 +31,10 @@ setup
   SET LOCAL random_page_cost = 0.1;
   SET LOCAL cpu_tuple_cost = 0.03;
 }
-step "rxwy1" { DELETE FROM taby WHERE id = (SELECT min(id) FROM tabx); }
-step "c1" { COMMIT; }
+step rxwy1 { DELETE FROM taby WHERE id = (SELECT min(id) FROM tabx); }
+step c1 { COMMIT; }
 
-session "s2"
+session s2
 setup
 {
   BEGIN ISOLATION LEVEL SERIALIZABLE;
@@ -42,5 +42,5 @@ setup
   SET LOCAL random_page_cost = 0.1;
   SET LOCAL cpu_tuple_cost = 0.03;
 }
-step "rywx2" { DELETE FROM tabx WHERE id = (SELECT min(id) FROM taby); }
-step "c2" { COMMIT; }
+step rywx2 { DELETE FROM tabx WHERE id = (SELECT min(id) FROM taby); }
+step c2 { COMMIT; }
index 5cd251d0aaa46e66f66f9cc1fac156e92ae99ed6..644f919e8462ad9f6936eaec4c9679f4f4b5baed 100644 (file)
@@ -19,60 +19,60 @@ teardown
 # Session 1 executes actions which act directly on both the parent and
 # its child.  Abbreviation "c" is used for queries working on the child
 # and "p" on the parent.
-session "s1"
+session s1
 setup
 {
   CREATE TEMPORARY TABLE inh_temp_child_s1 () INHERITS (inh_parent);
 }
-step "s1_begin" { BEGIN; }
-step "s1_truncate_p" { TRUNCATE inh_parent; }
-step "s1_select_p" { SELECT a FROM inh_parent; }
-step "s1_select_c" { SELECT a FROM inh_temp_child_s1; }
-step "s1_insert_p" { INSERT INTO inh_parent VALUES (1), (2); }
-step "s1_insert_c" { INSERT INTO inh_temp_child_s1 VALUES (3), (4); }
-step "s1_update_p" { UPDATE inh_parent SET a = 11 WHERE a = 1; }
-step "s1_update_c" { UPDATE inh_parent SET a = 13 WHERE a IN (3, 5); }
-step "s1_delete_p" { DELETE FROM inh_parent WHERE a = 2; }
-step "s1_delete_c" { DELETE FROM inh_parent WHERE a IN (4, 6); }
-step "s1_commit" { COMMIT; }
+step s1_begin { BEGIN; }
+step s1_truncate_p { TRUNCATE inh_parent; }
+step s1_select_p { SELECT a FROM inh_parent; }
+step s1_select_c { SELECT a FROM inh_temp_child_s1; }
+step s1_insert_p { INSERT INTO inh_parent VALUES (1), (2); }
+step s1_insert_c { INSERT INTO inh_temp_child_s1 VALUES (3), (4); }
+step s1_update_p { UPDATE inh_parent SET a = 11 WHERE a = 1; }
+step s1_update_c { UPDATE inh_parent SET a = 13 WHERE a IN (3, 5); }
+step s1_delete_p { DELETE FROM inh_parent WHERE a = 2; }
+step s1_delete_c { DELETE FROM inh_parent WHERE a IN (4, 6); }
+step s1_commit { COMMIT; }
 teardown
 {
   DROP TABLE inh_temp_child_s1;
 }
 
 # Session 2 executes actions on the parent which act only on the child.
-session "s2"
+session s2
 setup
 {
   CREATE TEMPORARY TABLE inh_temp_child_s2 () INHERITS (inh_parent);
 }
-step "s2_truncate_p" { TRUNCATE inh_parent; }
-step "s2_select_p" { SELECT a FROM inh_parent; }
-step "s2_select_c" { SELECT a FROM inh_temp_child_s2; }
-step "s2_insert_c" { INSERT INTO inh_temp_child_s2 VALUES (5), (6); }
-step "s2_update_c" { UPDATE inh_parent SET a = 15 WHERE a IN (3, 5); }
-step "s2_delete_c" { DELETE FROM inh_parent WHERE a IN (4, 6); }
+step s2_truncate_p { TRUNCATE inh_parent; }
+step s2_select_p { SELECT a FROM inh_parent; }
+step s2_select_c { SELECT a FROM inh_temp_child_s2; }
+step s2_insert_c { INSERT INTO inh_temp_child_s2 VALUES (5), (6); }
+step s2_update_c { UPDATE inh_parent SET a = 15 WHERE a IN (3, 5); }
+step s2_delete_c { DELETE FROM inh_parent WHERE a IN (4, 6); }
 teardown
 {
   DROP TABLE inh_temp_child_s2;
 }
 
 # Check INSERT behavior across sessions
-permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c"
+permutation s1_insert_p s1_insert_c s2_insert_c s1_select_p s1_select_c s2_select_p s2_select_c
 
 # Check UPDATE behavior across sessions
-permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_update_p" "s1_update_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c"
-permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s2_update_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c"
+permutation s1_insert_p s1_insert_c s2_insert_c s1_update_p s1_update_c s1_select_p s1_select_c s2_select_p s2_select_c
+permutation s1_insert_p s1_insert_c s2_insert_c s2_update_c s1_select_p s1_select_c s2_select_p s2_select_c
 
 # Check DELETE behavior across sessions
-permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_delete_p" "s1_delete_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c"
-permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s2_delete_c" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c"
+permutation s1_insert_p s1_insert_c s2_insert_c s1_delete_p s1_delete_c s1_select_p s1_select_c s2_select_p s2_select_c
+permutation s1_insert_p s1_insert_c s2_insert_c s2_delete_c s1_select_p s1_select_c s2_select_p s2_select_c
 
 # Check TRUNCATE behavior across sessions
-permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_truncate_p" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c"
-permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s2_truncate_p" "s1_select_p" "s1_select_c" "s2_select_p" "s2_select_c"
+permutation s1_insert_p s1_insert_c s2_insert_c s1_truncate_p s1_select_p s1_select_c s2_select_p s2_select_c
+permutation s1_insert_p s1_insert_c s2_insert_c s2_truncate_p s1_select_p s1_select_c s2_select_p s2_select_c
 
 # TRUNCATE on a parent tree does not block access to temporary child relation
 # of another session, and blocks when scanning the parent.
-permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_begin" "s1_truncate_p" "s2_select_p" "s1_commit"
-permutation "s1_insert_p" "s1_insert_c" "s2_insert_c" "s1_begin" "s1_truncate_p" "s2_select_c" "s1_commit"
+permutation s1_insert_p s1_insert_c s2_insert_c s1_begin s1_truncate_p s2_select_p s1_commit
+permutation s1_insert_p s1_insert_c s2_insert_c s1_begin s1_truncate_p s2_select_c s1_commit
index f1e5bde357cb8a4c51782a4274c8a18a380c5af8..7909093d889a3b8d171a40530a6e2c3d0e82fa07 100644 (file)
@@ -11,24 +11,24 @@ teardown
   DROP TABLE ints;
 }
 
-session "s1"
-step "beginrr1" { BEGIN ISOLATION LEVEL REPEATABLE READ; }
-step "begins1" { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "donothing1" { INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; }
-step "c1" { COMMIT; }
-step "show" { SELECT * FROM ints; }
+session s1
+step beginrr1 { BEGIN ISOLATION LEVEL REPEATABLE READ; }
+step begins1 { BEGIN ISOLATION LEVEL SERIALIZABLE; }
+step donothing1 { INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; }
+step c1 { COMMIT; }
+step show { SELECT * FROM ints; }
 
-session "s2"
-step "beginrr2" { BEGIN ISOLATION LEVEL REPEATABLE READ; }
-step "begins2" { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "donothing2" { INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donothing3') ON CONFLICT DO NOTHING; }
-step "c2" { COMMIT; }
+session s2
+step beginrr2 { BEGIN ISOLATION LEVEL REPEATABLE READ; }
+step begins2 { BEGIN ISOLATION LEVEL SERIALIZABLE; }
+step donothing2 { INSERT INTO ints(key, val) VALUES(1, 'donothing2'), (1, 'donothing3') ON CONFLICT DO NOTHING; }
+step c2 { COMMIT; }
 
-permutation "beginrr1" "beginrr2" "donothing1" "c1" "donothing2" "c2" "show"
-permutation "beginrr1" "beginrr2" "donothing2" "c2" "donothing1" "c1" "show"
-permutation "beginrr1" "beginrr2" "donothing1" "donothing2" "c1" "c2" "show"
-permutation "beginrr1" "beginrr2" "donothing2" "donothing1" "c2" "c1" "show"
-permutation "begins1" "begins2" "donothing1" "c1" "donothing2" "c2" "show"
-permutation "begins1" "begins2" "donothing2" "c2" "donothing1" "c1" "show"
-permutation "begins1" "begins2" "donothing1" "donothing2" "c1" "c2" "show"
-permutation "begins1" "begins2" "donothing2" "donothing1" "c2" "c1" "show"
+permutation beginrr1 beginrr2 donothing1 c1 donothing2 c2 show
+permutation beginrr1 beginrr2 donothing2 c2 donothing1 c1 show
+permutation beginrr1 beginrr2 donothing1 donothing2 c1 c2 show
+permutation beginrr1 beginrr2 donothing2 donothing1 c2 c1 show
+permutation begins1 begins2 donothing1 c1 donothing2 c2 show
+permutation begins1 begins2 donothing2 c2 donothing1 c1 show
+permutation begins1 begins2 donothing1 donothing2 c1 c2 show
+permutation begins1 begins2 donothing2 donothing1 c2 c1 show
index 71acc380c7a941d3bb9641024f5566229b024337..b0e6a3724765dad160a5fbf370105b7065a87487 100644 (file)
@@ -16,25 +16,25 @@ teardown
   DROP TABLE ints;
 }
 
-session "s1"
+session s1
 setup
 {
   BEGIN ISOLATION LEVEL READ COMMITTED;
 }
-step "donothing1" { INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; }
-step "c1" { COMMIT; }
-step "a1" { ABORT; }
+step donothing1 { INSERT INTO ints(key, val) VALUES(1, 'donothing1') ON CONFLICT DO NOTHING; }
+step c1 { COMMIT; }
+step a1 { ABORT; }
 
-session "s2"
+session s2
 setup
 {
   BEGIN ISOLATION LEVEL READ COMMITTED;
 }
-step "donothing2" { INSERT INTO ints(key, val) VALUES(1, 'donothing2') ON CONFLICT DO NOTHING; }
-step "select2" { SELECT * FROM ints; }
-step "c2" { COMMIT; }
+step donothing2 { INSERT INTO ints(key, val) VALUES(1, 'donothing2') ON CONFLICT DO NOTHING; }
+step select2 { SELECT * FROM ints; }
+step c2 { COMMIT; }
 
 # Regular case where one session block-waits on another to determine if it
 # should proceed with an insert or do nothing.
-permutation "donothing1" "donothing2" "c1" "select2" "c2"
-permutation "donothing1" "donothing2" "a1" "select2" "c2"
+permutation donothing1 donothing2 c1 select2 c2
+permutation donothing1 donothing2 a1 select2 c2
index 6e4f3d6017b21faf2bd53bbf0df0d67b07e9d840..3ae220417e36db0553a0b2343742b1c1eb3b4bb4 100644 (file)
@@ -15,26 +15,26 @@ teardown
   DROP TABLE upsert;
 }
 
-session "s1"
+session s1
 setup
 {
   BEGIN ISOLATION LEVEL READ COMMITTED;
 }
-step "insert1" { INSERT INTO upsert(key, payload) VALUES('FooFoo', 'insert1') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert1'; }
-step "c1" { COMMIT; }
-step "a1" { ABORT; }
+step insert1 { INSERT INTO upsert(key, payload) VALUES('FooFoo', 'insert1') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert1'; }
+step c1 { COMMIT; }
+step a1 { ABORT; }
 
-session "s2"
+session s2
 setup
 {
   BEGIN ISOLATION LEVEL READ COMMITTED;
 }
-step "insert2" { INSERT INTO upsert(key, payload) VALUES('FOOFOO', 'insert2') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert2'; }
-step "select2" { SELECT * FROM upsert; }
-step "c2" { COMMIT; }
+step insert2 { INSERT INTO upsert(key, payload) VALUES('FOOFOO', 'insert2') ON CONFLICT (lower(key)) DO UPDATE set key = EXCLUDED.key, payload = upsert.payload || ' updated by insert2'; }
+step select2 { SELECT * FROM upsert; }
+step c2 { COMMIT; }
 
 # One session (session 2) block-waits on another (session 1) to determine if it
 # should proceed with an insert or update.  The user can still usefully UPDATE
 # a column constrained by a unique index, as the example illustrates.
-permutation "insert1" "insert2" "c1" "select2" "c2"
-permutation "insert1" "insert2" "a1" "select2" "c2"
+permutation insert1 insert2 c1 select2 c2
+permutation insert1 insert2 a1 select2 c2
index e282c3beca543f13328f741c1f2148a7eafc4ec3..df6795467daffd3f36966f1cf04046e77d407321 100644 (file)
@@ -37,12 +37,12 @@ teardown
   DROP TABLE colors;
 }
 
-session "s1"
+session s1
 setup
 {
   BEGIN ISOLATION LEVEL READ COMMITTED;
 }
-step "insert1" {
+step insert1 {
     WITH t AS (
         INSERT INTO colors(key, color, is_active)
         VALUES(1, 'Brown', true), (2, 'Gray', true)
@@ -50,20 +50,20 @@ step "insert1" {
         SET color = EXCLUDED.color
         WHERE colors.is_active)
     SELECT * FROM colors ORDER BY key;}
-step "select1surprise" { SELECT * FROM colors ORDER BY key; }
-step "c1" { COMMIT; }
+step select1surprise { SELECT * FROM colors ORDER BY key; }
+step c1 { COMMIT; }
 
-session "s2"
+session s2
 setup
 {
   BEGIN ISOLATION LEVEL READ COMMITTED;
 }
-step "update2" { UPDATE colors SET is_active = true WHERE key = 1; }
-step "c2" { COMMIT; }
+step update2 { UPDATE colors SET is_active = true WHERE key = 1; }
+step c2 { COMMIT; }
 
 # Perhaps surprisingly, the session 1 MVCC-snapshot-visible tuple (the tuple
 # with the pre-populated color 'Red') is denied the opportunity to prevent the
 # UPDATE from taking place -- only the conclusively-locked tuple version
 # matters, and so the tuple with key value 1 was updated to 'Brown' (but not
 # tuple with key value 2, since nothing changed there):
-permutation "update2" "insert1" "c2" "select1surprise" "c1"
+permutation update2 insert1 c2 select1surprise c1
index 7c8cb4710025318fda5c32db8376d890d267d2f3..62cdafda988510b2ecebafd9d34ed8f4062b1ed7 100644 (file)
@@ -13,27 +13,27 @@ teardown
   DROP TABLE upsert;
 }
 
-session "s1"
+session s1
 setup
 {
   BEGIN ISOLATION LEVEL READ COMMITTED;
 }
-step "insert1" { INSERT INTO upsert(key, val) VALUES(1, 'insert1') ON CONFLICT (key) DO UPDATE set val = upsert.val || ' updated by insert1'; }
-step "c1" { COMMIT; }
-step "a1" { ABORT; }
+step insert1 { INSERT INTO upsert(key, val) VALUES(1, 'insert1') ON CONFLICT (key) DO UPDATE set val = upsert.val || ' updated by insert1'; }
+step c1 { COMMIT; }
+step a1 { ABORT; }
 
-session "s2"
+session s2
 setup
 {
   BEGIN ISOLATION LEVEL READ COMMITTED;
 }
-step "insert2" { INSERT INTO upsert(key, val) VALUES(1, 'insert2') ON CONFLICT (key) DO UPDATE set val = upsert.val || ' updated by insert2'; }
-step "select2" { SELECT * FROM upsert; }
-step "c2" { COMMIT; }
+step insert2 { INSERT INTO upsert(key, val) VALUES(1, 'insert2') ON CONFLICT (key) DO UPDATE set val = upsert.val || ' updated by insert2'; }
+step select2 { SELECT * FROM upsert; }
+step c2 { COMMIT; }
 
 # One session (session 2) block-waits on another (session 1) to determine if it
 # should proceed with an insert or update.  Notably, this entails updating a
 # tuple while there is no version of that tuple visible to the updating
 # session's snapshot.  This is permitted only in READ COMMITTED mode.
-permutation "insert1" "insert2" "c1" "select2" "c2"
-permutation "insert1" "insert2" "a1" "select2" "c2"
+permutation insert1 insert2 c1 select2 c2
+permutation insert1 insert2 a1 select2 c2
index 3a70484fc299f09db6d12fe4586213447135f5be..e1afa6f11c30c6848608ca781bca295e0d8d5642 100644 (file)
@@ -33,39 +33,39 @@ teardown
     DROP TABLE upserttest;
 }
 
-session "controller"
+session controller
 setup
 {
   SET default_transaction_isolation = 'read committed';
 }
-step "controller_locks" {SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock);}
-step "controller_unlock_1_1" { SELECT pg_advisory_unlock(1, 1); }
-step "controller_unlock_2_1" { SELECT pg_advisory_unlock(2, 1); }
-step "controller_unlock_1_2" { SELECT pg_advisory_unlock(1, 2); }
-step "controller_unlock_2_2" { SELECT pg_advisory_unlock(2, 2); }
-step "controller_unlock_1_3" { SELECT pg_advisory_unlock(1, 3); }
-step "controller_unlock_2_3" { SELECT pg_advisory_unlock(2, 3); }
-step "controller_show" {SELECT * FROM upserttest; }
+step controller_locks {SELECT pg_advisory_lock(sess, lock), sess, lock FROM generate_series(1, 2) a(sess), generate_series(1,3) b(lock);}
+step controller_unlock_1_1 { SELECT pg_advisory_unlock(1, 1); }
+step controller_unlock_2_1 { SELECT pg_advisory_unlock(2, 1); }
+step controller_unlock_1_2 { SELECT pg_advisory_unlock(1, 2); }
+step controller_unlock_2_2 { SELECT pg_advisory_unlock(2, 2); }
+step controller_unlock_1_3 { SELECT pg_advisory_unlock(1, 3); }
+step controller_unlock_2_3 { SELECT pg_advisory_unlock(2, 3); }
+step controller_show {SELECT * FROM upserttest; }
 
-session "s1"
+session s1
 setup
 {
   SET default_transaction_isolation = 'read committed';
   SET spec.session = 1;
 }
-step "s1_begin"  { BEGIN; }
-step "s1_upsert" { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s1') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s1'; }
-step "s1_commit"  { COMMIT; }
+step s1_begin  { BEGIN; }
+step s1_upsert { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s1') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s1'; }
+step s1_commit  { COMMIT; }
 
-session "s2"
+session s2
 setup
 {
   SET default_transaction_isolation = 'read committed';
   SET spec.session = 2;
 }
-step "s2_begin"  { BEGIN; }
-step "s2_upsert" { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; }
-step "s2_commit"  { COMMIT; }
+step s2_begin  { BEGIN; }
+step s2_upsert { INSERT INTO upserttest(key, data) VALUES('k1', 'inserted s2') ON CONFLICT (blurt_and_lock(key)) DO UPDATE SET data = upserttest.data || ' with conflict update s2'; }
+step s2_commit  { COMMIT; }
 
 # Test that speculative locks are correctly acquired and released, s2
 # inserts, s1 updates.
@@ -74,23 +74,23 @@ permutation
    # blurt_and_lock function acquires advisory locks that allow us to
    # continue after a) the optimistic conflict probe b) after the
    # insertion of the speculative tuple.
-   "controller_locks"
-   "controller_show"
-   "s1_upsert" "s2_upsert"
-   "controller_show"
+   controller_locks
+   controller_show
+   s1_upsert s2_upsert
+   controller_show
    # Switch both sessions to wait on the other lock next time (the speculative insertion)
-   "controller_unlock_1_1" "controller_unlock_2_1"
+   controller_unlock_1_1 controller_unlock_2_1
    # Allow both sessions to continue
-   "controller_unlock_1_3" "controller_unlock_2_3"
-   "controller_show"
+   controller_unlock_1_3 controller_unlock_2_3
+   controller_show
    # Allow the second session to finish insertion
-   "controller_unlock_2_2"
+   controller_unlock_2_2
    # This should now show a successful insertion
-   "controller_show"
+   controller_show
    # Allow the first session to finish insertion
-   "controller_unlock_1_2"
+   controller_unlock_1_2
    # This should now show a successful UPSERT
-   "controller_show"
+   controller_show
 
 # Test that speculative locks are correctly acquired and released, s2
 # inserts, s1 updates.
@@ -99,23 +99,23 @@ permutation
    # blurt_and_lock function acquires advisory locks that allow us to
    # continue after a) the optimistic conflict probe b) after the
    # insertion of the speculative tuple.
-   "controller_locks"
-   "controller_show"
-   "s1_upsert" "s2_upsert"
-   "controller_show"
+   controller_locks
+   controller_show
+   s1_upsert s2_upsert
+   controller_show
    # Switch both sessions to wait on the other lock next time (the speculative insertion)
-   "controller_unlock_1_1" "controller_unlock_2_1"
+   controller_unlock_1_1 controller_unlock_2_1
    # Allow both sessions to continue
-   "controller_unlock_1_3" "controller_unlock_2_3"
-   "controller_show"
+   controller_unlock_1_3 controller_unlock_2_3
+   controller_show
    # Allow the first session to finish insertion
-   "controller_unlock_1_2"
+   controller_unlock_1_2
    # This should now show a successful insertion
-   "controller_show"
+   controller_show
    # Allow the second session to finish insertion
-   "controller_unlock_2_2"
+   controller_unlock_2_2
    # This should now show a successful UPSERT
-   "controller_show"
+   controller_show
 
 # Test that speculative locks are correctly acquired and released, s2
 # inserts, s1 updates.  With the added complication that transactions
@@ -125,25 +125,25 @@ permutation
    # blurt_and_lock function acquires advisory locks that allow us to
    # continue after a) the optimistic conflict probe b) after the
    # insertion of the speculative tuple.
-   "controller_locks"
-   "controller_show"
-   "s1_begin" "s2_begin"
-   "s1_upsert" "s2_upsert"
-   "controller_show"
+   controller_locks
+   controller_show
+   s1_begin s2_begin
+   s1_upsert s2_upsert
+   controller_show
    # Switch both sessions to wait on the other lock next time (the speculative insertion)
-   "controller_unlock_1_1" "controller_unlock_2_1"
+   controller_unlock_1_1 controller_unlock_2_1
    # Allow both sessions to continue
-   "controller_unlock_1_3" "controller_unlock_2_3"
-   "controller_show"
+   controller_unlock_1_3 controller_unlock_2_3
+   controller_show
    # Allow the first session to finish insertion
-   "controller_unlock_1_2"
+   controller_unlock_1_2
    # But the change isn't visible yet, nor should the second session continue
-   "controller_show"
+   controller_show
    # Allow the second session to finish insertion, but it's blocked
-   "controller_unlock_2_2"
-   "controller_show"
+   controller_unlock_2_2
+   controller_show
    # But committing should unblock
-   "s1_commit"
-   "controller_show"
-   "s2_commit"
-   "controller_show"
+   s1_commit
+   controller_show
+   s2_commit
+   controller_show
index c5e39ef9e316362cb7a4f90272b3bddd0c0d4f9f..efd4474f377d04420b44e1330d27bf0ba4e237fb 100644 (file)
@@ -22,30 +22,30 @@ teardown
   DROP FUNCTION ctoast_large_val();
 }
 
-session "s1"
+session s1
 setup
 {
   BEGIN ISOLATION LEVEL READ COMMITTED;
   SELECT pg_advisory_xact_lock(1);
 }
-step "s1commit" { COMMIT; }
+step s1commit { COMMIT; }
 
-session "s2"
+session s2
 setup
 {
   SET default_transaction_isolation = 'read committed';
 }
-step "s2insert" {
+step s2insert {
   INSERT INTO ctoast (key, val) VALUES (1, ctoast_large_val()) ON CONFLICT DO NOTHING;
 }
 
-session "s3"
+session s3
 setup
 {
   SET default_transaction_isolation = 'read committed';
 }
-step "s3insert" {
+step s3insert {
   INSERT INTO ctoast (key, val) VALUES (1, ctoast_large_val()) ON CONFLICT DO NOTHING;
 }
 
-permutation "s2insert" "s3insert" "s1commit"
+permutation s2insert s3insert s1commit
index 1630282d0f44ab2a455c7f11acc82a4205cadd91..652233c4bebe0f87b4b4a2d115b3e08d926b6c39 100644 (file)
@@ -18,49 +18,49 @@ teardown
     DROP TABLE lcku_table;
 }
 
-session "s1"
-step "s1b"    { BEGIN; }
-step "s1l"    { SELECT pg_advisory_lock(578902068); }
-step "s1u"    { UPDATE lcku_table SET id = 2 WHERE id = 3; }
-step "s1hint" { SELECT * FROM lcku_table; }
-step "s1ul"   { SELECT pg_advisory_unlock(578902068); }
-step "s1c"    { COMMIT; }
+session s1
+step s1b      { BEGIN; }
+step s1l      { SELECT pg_advisory_lock(578902068); }
+step s1u      { UPDATE lcku_table SET id = 2 WHERE id = 3; }
+step s1hint   { SELECT * FROM lcku_table; }
+step s1ul     { SELECT pg_advisory_unlock(578902068); }
+step s1c      { COMMIT; }
 teardown      { SELECT pg_advisory_unlock_all(); }
 
-session "s2"
-step "s2b1"    { BEGIN ISOLATION LEVEL READ COMMITTED; }
-step "s2b2"    { BEGIN ISOLATION LEVEL REPEATABLE READ; }
-step "s2b3"    { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "s2l"    { SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; }
-step "s2c"    { COMMIT; }
+session s2
+step s2b1     { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step s2b2     { BEGIN ISOLATION LEVEL REPEATABLE READ; }
+step s2b3     { BEGIN ISOLATION LEVEL SERIALIZABLE; }
+step s2l      { SELECT * FROM lcku_table WHERE pg_advisory_lock(578902068) IS NOT NULL FOR KEY SHARE; }
+step s2c      { COMMIT; }
 teardown      { SELECT pg_advisory_unlock_all(); }
 
-permutation "s1b" "s2b1" "s1l" "s2l"        "s1u" "s1c"          "s1ul" "s2c"
-permutation "s1b" "s2b1" "s1l" "s1u"        "s2l" "s1c"          "s1ul" "s2c"
-#permutation "s1b" "s2b1" "s1l" "s2l" "s1ul" "s1u" "s1c"                 "s2c"
-permutation "s1b" "s2b1" "s1l" "s1u" "s1ul" "s2l" "s1c"                 "s2c"
+permutation s1b s2b1 s1l s2l        s1u s1c          s1ul s2c
+permutation s1b s2b1 s1l s1u        s2l s1c          s1ul s2c
+#permutation s1b s2b1 s1l s2l s1ul s1u s1c                 s2c
+permutation s1b s2b1 s1l s1u s1ul s2l s1c                 s2c
 
-permutation "s1b" "s2b1" "s1l" "s2l"        "s1u" "s1c" "s1hint" "s1ul" "s2c"
-permutation "s1b" "s2b1" "s1l" "s1u"        "s2l" "s1c" "s1hint" "s1ul" "s2c"
-#permutation "s1b" "s2b1" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint"        "s2c"
-permutation "s1b" "s2b1" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint"        "s2c"
+permutation s1b s2b1 s1l s2l        s1u s1c s1hint s1ul s2c
+permutation s1b s2b1 s1l s1u        s2l s1c s1hint s1ul s2c
+#permutation s1b s2b1 s1l s2l s1ul s1u s1c s1hint        s2c
+permutation s1b s2b1 s1l s1u s1ul s2l s1c s1hint        s2c
 
-permutation "s1b" "s2b2" "s1l" "s2l"        "s1u" "s1c"          "s1ul" "s2c"
-permutation "s1b" "s2b2" "s1l" "s1u"        "s2l" "s1c"          "s1ul" "s2c"
-#permutation "s1b" "s2b2" "s1l" "s2l" "s1ul" "s1u" "s1c"                 "s2c"
-permutation "s1b" "s2b2" "s1l" "s1u" "s1ul" "s2l" "s1c"                 "s2c"
+permutation s1b s2b2 s1l s2l        s1u s1c          s1ul s2c
+permutation s1b s2b2 s1l s1u        s2l s1c          s1ul s2c
+#permutation s1b s2b2 s1l s2l s1ul s1u s1c                 s2c
+permutation s1b s2b2 s1l s1u s1ul s2l s1c                 s2c
 
-permutation "s1b" "s2b2" "s1l" "s2l"        "s1u" "s1c" "s1hint" "s1ul" "s2c"
-permutation "s1b" "s2b2" "s1l" "s1u"        "s2l" "s1c" "s1hint" "s1ul" "s2c"
-#permutation "s1b" "s2b2" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint"        "s2c"
-permutation "s1b" "s2b2" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint"        "s2c"
+permutation s1b s2b2 s1l s2l        s1u s1c s1hint s1ul s2c
+permutation s1b s2b2 s1l s1u        s2l s1c s1hint s1ul s2c
+#permutation s1b s2b2 s1l s2l s1ul s1u s1c s1hint        s2c
+permutation s1b s2b2 s1l s1u s1ul s2l s1c s1hint        s2c
 
-permutation "s1b" "s2b3" "s1l" "s2l"        "s1u" "s1c"          "s1ul" "s2c"
-permutation "s1b" "s2b3" "s1l" "s1u"        "s2l" "s1c"          "s1ul" "s2c"
-#permutation "s1b" "s2b3" "s1l" "s2l" "s1ul" "s1u" "s1c"                 "s2c"
-permutation "s1b" "s2b3" "s1l" "s1u" "s1ul" "s2l" "s1c"                 "s2c"
+permutation s1b s2b3 s1l s2l        s1u s1c          s1ul s2c
+permutation s1b s2b3 s1l s1u        s2l s1c          s1ul s2c
+#permutation s1b s2b3 s1l s2l s1ul s1u s1c                 s2c
+permutation s1b s2b3 s1l s1u s1ul s2l s1c                 s2c
 
-permutation "s1b" "s2b3" "s1l" "s2l"        "s1u" "s1c" "s1hint" "s1ul" "s2c"
-permutation "s1b" "s2b3" "s1l" "s1u"        "s2l" "s1c" "s1hint" "s1ul" "s2c"
-#permutation "s1b" "s2b3" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint"        "s2c"
-permutation "s1b" "s2b3" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint"        "s2c"
+permutation s1b s2b3 s1l s2l        s1u s1c s1hint s1ul s2c
+permutation s1b s2b3 s1l s1u        s2l s1c s1hint s1ul s2c
+#permutation s1b s2b3 s1l s2l s1ul s1u s1c s1hint        s2c
+permutation s1b s2b3 s1l s1u s1ul s2l s1c s1hint        s2c
index 0495c115707bb358fd3a0941b9b7fdab2ad4830f..74d80d53e614ea2989ce81bae6f4726e70e66aee 100644 (file)
@@ -14,49 +14,49 @@ teardown
     DROP TABLE lcu_table;
 }
 
-session "s1"
-step "s1b"    { BEGIN; }
-step "s1l"    { SELECT pg_advisory_lock(380170116); }
-step "s1u"    { UPDATE lcu_table SET value = 'two' WHERE id = 1; }
-step "s1hint" { SELECT * FROM lcu_table; }
-step "s1ul"   { SELECT pg_advisory_unlock(380170116); }
-step "s1c"    { COMMIT; }
+session s1
+step s1b    { BEGIN; }
+step s1l    { SELECT pg_advisory_lock(380170116); }
+step s1u    { UPDATE lcu_table SET value = 'two' WHERE id = 1; }
+step s1hint { SELECT * FROM lcu_table; }
+step s1ul   { SELECT pg_advisory_unlock(380170116); }
+step s1c    { COMMIT; }
 teardown      { SELECT pg_advisory_unlock_all(); }
 
-session "s2"
-step "s2b1"    { BEGIN ISOLATION LEVEL READ COMMITTED; }
-step "s2b2"    { BEGIN ISOLATION LEVEL REPEATABLE READ; }
-step "s2b3"    { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "s2l"    { SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; }
-step "s2c"    { COMMIT; }
+session s2
+step s2b1    { BEGIN ISOLATION LEVEL READ COMMITTED; }
+step s2b2    { BEGIN ISOLATION LEVEL REPEATABLE READ; }
+step s2b3    { BEGIN ISOLATION LEVEL SERIALIZABLE; }
+step s2l    { SELECT * FROM lcu_table WHERE pg_advisory_lock(380170116) IS NOT NULL FOR KEY SHARE; }
+step s2c    { COMMIT; }
 teardown      { SELECT pg_advisory_unlock_all(); }
 
-permutation "s1b" "s2b1" "s1l" "s2l"        "s1u" "s1c"          "s1ul" "s2c"
-permutation "s1b" "s2b1" "s1l" "s1u"        "s2l" "s1c"          "s1ul" "s2c"
-permutation "s1b" "s2b1" "s1l" "s2l" "s1ul" "s1u" "s1c"                 "s2c"
-permutation "s1b" "s2b1" "s1l" "s1u" "s1ul" "s2l" "s1c"                 "s2c"
-
-permutation "s1b" "s2b1" "s1l" "s2l"        "s1u" "s1c" "s1hint" "s1ul" "s2c"
-permutation "s1b" "s2b1" "s1l" "s1u"        "s2l" "s1c" "s1hint" "s1ul" "s2c"
-permutation "s1b" "s2b1" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint"        "s2c"
-permutation "s1b" "s2b1" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint"        "s2c"
-
-permutation "s1b" "s2b2" "s1l" "s2l"        "s1u" "s1c"          "s1ul" "s2c"
-permutation "s1b" "s2b2" "s1l" "s1u"        "s2l" "s1c"          "s1ul" "s2c"
-permutation "s1b" "s2b2" "s1l" "s2l" "s1ul" "s1u" "s1c"                 "s2c"
-permutation "s1b" "s2b2" "s1l" "s1u" "s1ul" "s2l" "s1c"                 "s2c"
-
-permutation "s1b" "s2b2" "s1l" "s2l"        "s1u" "s1c" "s1hint" "s1ul" "s2c"
-permutation "s1b" "s2b2" "s1l" "s1u"        "s2l" "s1c" "s1hint" "s1ul" "s2c"
-permutation "s1b" "s2b2" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint"        "s2c"
-permutation "s1b" "s2b2" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint"        "s2c"
-
-permutation "s1b" "s2b3" "s1l" "s2l"        "s1u" "s1c"          "s1ul" "s2c"
-permutation "s1b" "s2b3" "s1l" "s1u"        "s2l" "s1c"          "s1ul" "s2c"
-permutation "s1b" "s2b3" "s1l" "s2l" "s1ul" "s1u" "s1c"                 "s2c"
-permutation "s1b" "s2b3" "s1l" "s1u" "s1ul" "s2l" "s1c"                 "s2c"
-
-permutation "s1b" "s2b3" "s1l" "s2l"        "s1u" "s1c" "s1hint" "s1ul" "s2c"
-permutation "s1b" "s2b3" "s1l" "s1u"        "s2l" "s1c" "s1hint" "s1ul" "s2c"
-permutation "s1b" "s2b3" "s1l" "s2l" "s1ul" "s1u" "s1c" "s1hint"        "s2c"
-permutation "s1b" "s2b3" "s1l" "s1u" "s1ul" "s2l" "s1c" "s1hint"        "s2c"
+permutation s1b s2b1 s1l s2l        s1u s1c          s1ul s2c
+permutation s1b s2b1 s1l s1u        s2l s1c          s1ul s2c
+permutation s1b s2b1 s1l s2l s1ul s1u s1c                 s2c
+permutation s1b s2b1 s1l s1u s1ul s2l s1c                 s2c
+
+permutation s1b s2b1 s1l s2l        s1u s1c s1hint s1ul s2c
+permutation s1b s2b1 s1l s1u        s2l s1c s1hint s1ul s2c
+permutation s1b s2b1 s1l s2l s1ul s1u s1c s1hint        s2c
+permutation s1b s2b1 s1l s1u s1ul s2l s1c s1hint        s2c
+
+permutation s1b s2b2 s1l s2l        s1u s1c          s1ul s2c
+permutation s1b s2b2 s1l s1u        s2l s1c          s1ul s2c
+permutation s1b s2b2 s1l s2l s1ul s1u s1c                 s2c
+permutation s1b s2b2 s1l s1u s1ul s2l s1c                 s2c
+
+permutation s1b s2b2 s1l s2l        s1u s1c s1hint s1ul s2c
+permutation s1b s2b2 s1l s1u        s2l s1c s1hint s1ul s2c
+permutation s1b s2b2 s1l s2l s1ul s1u s1c s1hint        s2c
+permutation s1b s2b2 s1l s1u s1ul s2l s1c s1hint        s2c
+
+permutation s1b s2b3 s1l s2l        s1u s1c          s1ul s2c
+permutation s1b s2b3 s1l s1u        s2l s1c          s1ul s2c
+permutation s1b s2b3 s1l s2l s1ul s1u s1c                 s2c
+permutation s1b s2b3 s1l s1u s1ul s2l s1c                 s2c
+
+permutation s1b s2b3 s1l s2l        s1u s1c s1hint s1ul s2c
+permutation s1b s2b3 s1l s1u        s2l s1c s1hint s1ul s2c
+permutation s1b s2b3 s1l s2l s1ul s1u s1c s1hint        s2c
+permutation s1b s2b3 s1l s1u s1ul s2l s1c s1hint        s2c
index b7b796fc0195d35db6f0aa152c6dab45ae774259..b9dd7d12a999b2f25ecb6ef10a54d441458ed71c 100644 (file)
@@ -31,31 +31,31 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
+session s1
 # obtain lock on the tuple, traversing its update chain
-step "s1l" { SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; }
+step s1l   { SELECT * FROM foo WHERE pg_advisory_xact_lock(0) IS NOT NULL AND key = 1 FOR KEY SHARE; }
 
-session "s2"
+session s2
 setup      { SELECT pg_advisory_lock(0); }
-step "s2b" { BEGIN; }
-step "s2u" { UPDATE foo SET value = 2 WHERE key = 1; }
-step "s2_blocker1" { DELETE FROM foo; }
-step "s2_blocker2" { UPDATE foo SET key = 2 WHERE key = 1; }
-step "s2_blocker3" { UPDATE foo SET value = 2 WHERE key = 1; }
-step "s2_unlock" { SELECT pg_advisory_unlock(0); }
-step "s2c" { COMMIT; }
-step "s2r" { ROLLBACK; }
+step s2b   { BEGIN; }
+step s2u   { UPDATE foo SET value = 2 WHERE key = 1; }
+step s2_blocker1   { DELETE FROM foo; }
+step s2_blocker2   { UPDATE foo SET key = 2 WHERE key = 1; }
+step s2_blocker3   { UPDATE foo SET value = 2 WHERE key = 1; }
+step s2_unlock     { SELECT pg_advisory_unlock(0); }
+step s2c   { COMMIT; }
+step s2r   { ROLLBACK; }
 
-permutation "s2b" "s1l" "s2u" "s2_blocker1" "s2_unlock" "s2c"
-permutation "s2b" "s1l" "s2u" "s2_blocker2" "s2_unlock" "s2c"
-permutation "s2b" "s1l" "s2u" "s2_blocker3" "s2_unlock" "s2c"
-permutation "s2b" "s1l" "s2u" "s2_blocker1" "s2_unlock" "s2r"
-permutation "s2b" "s1l" "s2u" "s2_blocker2" "s2_unlock" "s2r"
-permutation "s2b" "s1l" "s2u" "s2_blocker3" "s2_unlock" "s2r"
+permutation s2b s1l s2u s2_blocker1 s2_unlock s2c
+permutation s2b s1l s2u s2_blocker2 s2_unlock s2c
+permutation s2b s1l s2u s2_blocker3 s2_unlock s2c
+permutation s2b s1l s2u s2_blocker1 s2_unlock s2r
+permutation s2b s1l s2u s2_blocker2 s2_unlock s2r
+permutation s2b s1l s2u s2_blocker3 s2_unlock s2r
 
-permutation "s2b" "s1l" "s2u" "s2_blocker1" "s2c" "s2_unlock"
-permutation "s2b" "s1l" "s2u" "s2_blocker2" "s2c" "s2_unlock"
-permutation "s2b" "s1l" "s2u" "s2_blocker3" "s2c" "s2_unlock"
-permutation "s2b" "s1l" "s2u" "s2_blocker1" "s2r" "s2_unlock"
-permutation "s2b" "s1l" "s2u" "s2_blocker2" "s2r" "s2_unlock"
-permutation "s2b" "s1l" "s2u" "s2_blocker3" "s2r" "s2_unlock"
+permutation s2b s1l s2u s2_blocker1 s2c s2_unlock
+permutation s2b s1l s2u s2_blocker2 s2c s2_unlock
+permutation s2b s1l s2u s2_blocker3 s2c s2_unlock
+permutation s2b s1l s2u s2_blocker1 s2r s2_unlock
+permutation s2b s1l s2u s2_blocker2 s2r s2_unlock
+permutation s2b s1l s2u s2_blocker3 s2r s2_unlock
index 7042b9399cf4832232abaee6b30b8e218e18f150..a7f83894a4448a55e6b89333100de12e90659514 100644 (file)
@@ -19,20 +19,20 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
-step "s1b" { BEGIN ISOLATION LEVEL REPEATABLE READ; }
-step "s1s" { SELECT * FROM foo; }  # obtain snapshot
-step "s1l" { SELECT * FROM foo FOR KEY SHARE; } # obtain lock
-step "s1c" { COMMIT; }
+session s1
+step s1b   { BEGIN ISOLATION LEVEL REPEATABLE READ; }
+step s1s   { SELECT * FROM foo; }  # obtain snapshot
+step s1l   { SELECT * FROM foo FOR KEY SHARE; } # obtain lock
+step s1c   { COMMIT; }
 
-session "s2"
-step "s2b" { BEGIN; }
-step "s2u" { UPDATE foo SET value = 2 WHERE key = 1; }
-step "s2c" { COMMIT; }
-step "s2d1"    { DELETE FROM foo WHERE key = 1; }
-step "s2d2"    { UPDATE foo SET key = 3 WHERE key = 1; }
-step "s2d3"    { UPDATE foo SET value = 3 WHERE key = 1; }
+session s2
+step s2b   { BEGIN; }
+step s2u   { UPDATE foo SET value = 2 WHERE key = 1; }
+step s2c   { COMMIT; }
+step s2d1  { DELETE FROM foo WHERE key = 1; }
+step s2d2  { UPDATE foo SET key = 3 WHERE key = 1; }
+step s2d3  { UPDATE foo SET value = 3 WHERE key = 1; }
 
-permutation "s1b" "s2b" "s1s" "s2u" "s1l" "s2c" "s2d1" "s1c"
-permutation "s1b" "s2b" "s1s" "s2u" "s1l" "s2c" "s2d2" "s1c"
-permutation "s1b" "s2b" "s1s" "s2u" "s1l" "s2c" "s2d3" "s1c"
+permutation s1b s2b s1s s2u s1l s2c s2d1 s1c
+permutation s1b s2b s1s s2u s1l s2c s2d2 s1c
+permutation s1b s2b s1s s2u s1l s2c s2d3 s1c
index 3ac1d39d86d4cedc768d8b34797ec12f455a14cd..e34a6b0f9b53c2e43e613e315f1e0e4093cd6e29 100644 (file)
@@ -22,17 +22,17 @@ teardown
   DROP FUNCTION unlck();
 }
 
-session "s1"
-step "s1i" {
+session s1
+step s1i   {
        CREATE INDEX CONCURRENTLY mcic_one_pkey ON mcic_one (id)
        WHERE lck_shr(281457);
    }
 teardown   { SELECT unlck(); }
 
 
-session "s2"
-step "s2l"  { SELECT pg_advisory_lock(281457); }
-step "s2i" {
+session s2
+step s2l   { SELECT pg_advisory_lock(281457); }
+step s2i   {
        CREATE INDEX CONCURRENTLY mcic_two_pkey ON mcic_two (id)
        WHERE unlck();
    }
@@ -40,4 +40,4 @@ step "s2i"    {
 # (*) marker ensures that s2i is reported as "waiting", even if it
 # completes very quickly
 
-permutation "s2l" "s1i" "s2i"(*)
+permutation s2l s1i s2i(*)
index 1bb5b4e8ba25e57e06dbb35d34089565888e4503..0779ea09b8db3531ede2cde54dce530bcf42a2dc 100644 (file)
@@ -19,29 +19,29 @@ teardown
  DROP TABLE t;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rx1" { SELECT * FROM t WHERE id = 1000000; }
+step rx1   { SELECT * FROM t WHERE id = 1000000; }
 # delay until after T3 commits
-step "wz1" { UPDATE t SET txt = 'a' WHERE id = 1; }
-step "c1"  { COMMIT; }
+step wz1   { UPDATE t SET txt = 'a' WHERE id = 1; }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "wx2" { UPDATE t SET txt = 'b' WHERE id = 1000000; }
-step "c2"  { COMMIT; }
+step wx2   { UPDATE t SET txt = 'b' WHERE id = 1000000; }
+step c2        { COMMIT; }
 
-session "s3"
+session s3
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "wx3" { UPDATE t SET txt = 'c' WHERE id = 1000000; }
-step "ry3" { SELECT * FROM t WHERE id = 500000; }
+step wx3   { UPDATE t SET txt = 'c' WHERE id = 1000000; }
+step ry3   { SELECT * FROM t WHERE id = 500000; }
 # delay until after T4 commits
-step "c3"  { COMMIT; }
+step c3        { COMMIT; }
 
-session "s4"
+session s4
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "wy4" { UPDATE t SET txt = 'd' WHERE id = 500000; }
-step "rz4" { SELECT * FROM t WHERE id = 1; }
-step "c4"  { COMMIT; }
+step wy4   { UPDATE t SET txt = 'd' WHERE id = 500000; }
+step rz4   { SELECT * FROM t WHERE id = 1; }
+step c4        { COMMIT; }
 
-permutation "rx1" "wx2" "c2" "wx3" "ry3" "wy4" "rz4" "c4" "c3" "wz1" "c1"
+permutation rx1 wx2 c2 wx3 ry3 wy4 rz4 c4 c3 wz1 c1
index 205658b897ed3db794c72776c70d905799706f5d..a8af724e58b148b20cb5279248262a46d1826da4 100644 (file)
@@ -15,21 +15,21 @@ teardown
   DROP TABLE justthis;
 }
 
-session "s1"
+session s1
 setup          { BEGIN; }
-step "s1lock"  { SELECT * FROM justthis FOR SHARE; }
-step "s1svpt"  { SAVEPOINT foo; }
-step "s1lock2" { SELECT * FROM justthis FOR SHARE; }
-step "s1c"     { COMMIT; }
+step s1lock        { SELECT * FROM justthis FOR SHARE; }
+step s1svpt        { SAVEPOINT foo; }
+step s1lock2   { SELECT * FROM justthis FOR SHARE; }
+step s1c       { COMMIT; }
 
-session "s2"
+session s2
 setup          { BEGIN; }
-step "s2lock"  { SELECT * FROM justthis FOR SHARE; }   # ensure it's a multi
-step "s2c"     { COMMIT; }
+step s2lock        { SELECT * FROM justthis FOR SHARE; }   # ensure it's a multi
+step s2c       { COMMIT; }
 
-session "s3"
+session s3
 setup          { BEGIN; }
-step "s3lock"  { SELECT * FROM justthis FOR UPDATE; }
-step "s3c"     { COMMIT; }
+step s3lock        { SELECT * FROM justthis FOR UPDATE; }
+step s3c       { COMMIT; }
 
-permutation "s1lock" "s2lock" "s1svpt" "s3lock" "s1lock2" "s2c" "s1c" "s3c"
+permutation s1lock s2lock s1svpt s3lock s1lock2 s2c s1c s3c
index 7fb93c1e3442101849dbf742b86c3d3f8b4492a8..7f8a38b51b67d4811c09d8519a12e703d3354990 100644 (file)
@@ -14,31 +14,31 @@ teardown
   DROP TABLE dont_forget;
 }
 
-session "s1"
+session s1
 setup          { BEGIN; }
-step "s1_show" { SELECT current_setting('default_transaction_isolation') <> 'read committed'; }
-step "s1_lock" { SELECT * FROM dont_forget FOR KEY SHARE; }
-step "s1_commit" { COMMIT; }
+step s1_show   { SELECT current_setting('default_transaction_isolation') <> 'read committed'; }
+step s1_lock   { SELECT * FROM dont_forget FOR KEY SHARE; }
+step s1_commit { COMMIT; }
 
-session "s2"
-setup              { BEGIN; }
-step "s2_update"   { UPDATE dont_forget SET value = 2; }
-step "s2_abort"        { ROLLBACK; }
-step "s2_commit"   { COMMIT; }
+session s2
+setup          { BEGIN; }
+step s2_update { UPDATE dont_forget SET value = 2; }
+step s2_abort  { ROLLBACK; }
+step s2_commit { COMMIT; }
 
-session "s3"
+session s3
 # try cases with both a non-conflicting lock with s1's and a conflicting one
-step "s3_forkeyshr"    { SELECT * FROM dont_forget FOR KEY SHARE; }
-step "s3_fornokeyupd"  { SELECT * FROM dont_forget FOR NO KEY UPDATE; }
-step "s3_forupd"   { SELECT * FROM dont_forget FOR UPDATE; }
+step s3_forkeyshr  { SELECT * FROM dont_forget FOR KEY SHARE; }
+step s3_fornokeyupd    { SELECT * FROM dont_forget FOR NO KEY UPDATE; }
+step s3_forupd     { SELECT * FROM dont_forget FOR UPDATE; }
 
-permutation "s1_show" "s1_commit" "s2_commit"
-permutation "s1_lock" "s2_update" "s2_abort" "s3_forkeyshr" "s1_commit"
-permutation "s1_lock" "s2_update" "s2_commit" "s3_forkeyshr" "s1_commit"
-permutation "s1_lock" "s2_update" "s1_commit" "s3_forkeyshr" "s2_commit"
-permutation "s1_lock" "s2_update" "s2_abort" "s3_fornokeyupd" "s1_commit"
-permutation "s1_lock" "s2_update" "s2_commit" "s3_fornokeyupd" "s1_commit"
-permutation "s1_lock" "s2_update" "s1_commit" "s3_fornokeyupd" "s2_commit"
-permutation "s1_lock" "s2_update" "s2_abort" "s3_forupd" "s1_commit"
-permutation "s1_lock" "s2_update" "s2_commit" "s3_forupd" "s1_commit"
-permutation "s1_lock" "s2_update" "s1_commit" "s3_forupd" "s2_commit"
+permutation s1_show s1_commit s2_commit
+permutation s1_lock s2_update s2_abort s3_forkeyshr s1_commit
+permutation s1_lock s2_update s2_commit s3_forkeyshr s1_commit
+permutation s1_lock s2_update s1_commit s3_forkeyshr s2_commit
+permutation s1_lock s2_update s2_abort s3_fornokeyupd s1_commit
+permutation s1_lock s2_update s2_commit s3_fornokeyupd s1_commit
+permutation s1_lock s2_update s1_commit s3_fornokeyupd s2_commit
+permutation s1_lock s2_update s2_abort s3_forupd s1_commit
+permutation s1_lock s2_update s2_commit s3_forupd s1_commit
+permutation s1_lock s2_update s1_commit s3_forupd s2_commit
index 69ce5edd81a5e7bd90a4a675f969dcd882595178..cf892f2cbecad1a35586665a666925bccc6bd122 100644 (file)
@@ -14,24 +14,24 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1a" { SELECT * FROM foo FOR SHARE NOWAIT; }
-step "s1b" { COMMIT; }
+step s1a   { SELECT * FROM foo FOR SHARE NOWAIT; }
+step s1b   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; }
-step "s2a" { SELECT * FROM foo FOR SHARE NOWAIT; }
-step "s2b" { SELECT * FROM foo FOR UPDATE NOWAIT; }
-step "s2c" { COMMIT; }
+step s2a   { SELECT * FROM foo FOR SHARE NOWAIT; }
+step s2b   { SELECT * FROM foo FOR UPDATE NOWAIT; }
+step s2c   { COMMIT; }
 
 # s1 and s2 both get SHARE lock, creating a multixact lock, then s2
 # tries to upgrade to UPDATE but aborts because it cannot acquire a
 # multi-xact lock
-permutation "s1a" "s2a" "s2b" "s1b" "s2c"
+permutation s1a s2a s2b s1b s2c
 # the same but with the SHARE locks acquired in a different order, so
 # s2 again aborts because it can't acquired a multi-xact lock
-permutation "s2a" "s1a" "s2b" "s1b" "s2c"
+permutation s2a s1a s2b s1b s2c
 # s2 acquires SHARE then UPDATE, then s1 tries to acquire SHARE but
 # can't so aborts because it can't acquire a regular lock
-permutation "s2a" "s2b" "s1a" "s1b" "s2c"
+permutation s2a s2b s1a s1b s2c
index 9e6b994fddcd42fdca834b439c05545931cec9a5..06fb7624c3ce668f601595934dbf0a7e5506c98e 100644 (file)
@@ -14,20 +14,20 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1a" { SELECT * FROM foo FOR UPDATE; }
-step "s1b" { COMMIT; }
+step s1a   { SELECT * FROM foo FOR UPDATE; }
+step s1b   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; }
-step "s2a" { SELECT * FROM foo FOR UPDATE; }
-step "s2b" { COMMIT; }
+step s2a   { SELECT * FROM foo FOR UPDATE; }
+step s2b   { COMMIT; }
 
-session "s3"
+session s3
 setup      { BEGIN; }
-step "s3a" { SELECT * FROM foo FOR UPDATE NOWAIT; }
-step "s3b" { COMMIT; }
+step s3a   { SELECT * FROM foo FOR UPDATE NOWAIT; }
+step s3b   { COMMIT; }
 
 # s3 skips to second record due to tuple lock held by s2
-permutation "s1a" "s2a" "s3a" "s1b" "s2b" "s3b"
+permutation s1a s2a s3a s1b s2b s3b
index 48ac777d78a18d8a20b77801a477ed16cde83d79..da80330a62b3f5cb727a13004e2d140d75adefb5 100644 (file)
@@ -14,22 +14,22 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1a" { SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL FOR UPDATE NOWAIT; }
-step "s1b" { COMMIT; }
+step s1a   { SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL FOR UPDATE NOWAIT; }
+step s1b   { COMMIT; }
 
-session "s2"
-step "s2a" { SELECT pg_advisory_lock(0); }
-step "s2b" { UPDATE foo SET data = data; }
-step "s2c" { BEGIN; }
-step "s2d" { UPDATE foo SET data = data; }
-step "s2e" { SELECT pg_advisory_unlock(0); }
-step "s2f" { COMMIT; }
+session s2
+step s2a   { SELECT pg_advisory_lock(0); }
+step s2b   { UPDATE foo SET data = data; }
+step s2c   { BEGIN; }
+step s2d   { UPDATE foo SET data = data; }
+step s2e   { SELECT pg_advisory_unlock(0); }
+step s2f   { COMMIT; }
 
 # s1 takes a snapshot but then waits on an advisory lock, then s2
 # updates the row in one transaction, then again in another without
 # committing, before allowing s1 to proceed to try to lock a row;
 # because it has a snapshot that sees the older version, we reach the
 # waiting code in EvalPlanQualFetch which ereports when in NOWAIT mode.
-permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s2e" "s1b" "s2f"
+permutation s2a s1a s2b s2c s2d s2e s1b s2f
index 75e9462fc1fd94bc1b9b4e7395e10573b186af1e..46108de16d4c0e858d5e0b0f41ffcf68ff3605f1 100644 (file)
@@ -18,11 +18,11 @@ teardown
   DROP TABLE test_nowait;
 }
 
-session "sl1"
-step "sl1_prep" {
+session sl1
+step sl1_prep {
    PREPARE sl1_run AS SELECT id FROM test_nowait WHERE pg_advisory_lock(0) is not null FOR UPDATE NOWAIT;
 }
-step "sl1_exec" {
+step sl1_exec {
    BEGIN ISOLATION LEVEL READ COMMITTED;
    EXECUTE sl1_run;
    SELECT xmin, xmax, ctid, * FROM test_nowait;
@@ -31,22 +31,22 @@ teardown { COMMIT; }
 
 # A session that's used for an UPDATE of the rows to be locked, for when we're testing ctid
 # chain following.
-session "upd"
-step "upd_getlock" {
+session upd
+step upd_getlock {
    SELECT pg_advisory_lock(0);
 }
-step "upd_doupdate" {
+step upd_doupdate {
    BEGIN ISOLATION LEVEL READ COMMITTED;
    UPDATE test_nowait SET value = value WHERE id % 2 = 0;
    COMMIT;
 }
-step "upd_releaselock" {
+step upd_releaselock {
    SELECT pg_advisory_unlock(0);
 }
 
 # A session that acquires locks that sl1 is supposed to avoid blocking on
-session "lk1"
-step "lk1_doforshare" {
+session lk1
+step lk1_doforshare {
    BEGIN ISOLATION LEVEL READ COMMITTED;
    SELECT id FROM test_nowait WHERE id % 2 = 0 FOR SHARE;
 }
@@ -54,4 +54,4 @@ teardown {
    COMMIT;
 }
 
-permutation "sl1_prep" "upd_getlock" "sl1_exec" "upd_doupdate" "lk1_doforshare" "upd_releaselock"
+permutation sl1_prep upd_getlock sl1_exec upd_doupdate lk1_doforshare upd_releaselock
index 73580cd1b2a28863c46e4726e0c18680e2ac4299..a75e54cc67b428a3d6136d47ee6e69931138dc00 100644 (file)
@@ -14,12 +14,12 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1a" { SELECT * FROM foo FOR UPDATE NOWAIT; }
-step "s1b" { COMMIT; }
+step s1a   { SELECT * FROM foo FOR UPDATE NOWAIT; }
+step s1b   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; }
-step "s2a" { SELECT * FROM foo FOR UPDATE NOWAIT; }
-step "s2b" { COMMIT; }
+step s2a   { SELECT * FROM foo FOR UPDATE NOWAIT; }
+step s2b   { COMMIT; }
index 74e72645d9720d7ee191aac4c5e4511b6b80aab4..c0338418a8dfd241ffd91dba7620d11bb2a25876 100644 (file)
@@ -19,14 +19,14 @@ teardown
  DROP TABLE test_t;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rxy1"    { select * from test_t where val2 = 1; }
-step "wx1" { update test_t set val2 = 2 where val2 = 1 and id = 10; }
-step "c1"  { COMMIT; }
+step rxy1  { select * from test_t where val2 = 1; }
+step wx1   { update test_t set val2 = 2 where val2 = 1 and id = 10; }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "wy2" { update test_t set val2 = 2 where val2 = 1 and id = 9; }
-step "rxy2"    { select * from test_t where val2 = 1; }
-step "c2"  { COMMIT; }
+step wy2   { update test_t set val2 = 2 where val2 = 1 and id = 9; }
+step rxy2  { select * from test_t where val2 = 1; }
+step c2        { COMMIT; }
index d16fb60533b63050d1b9a19b850e099520186eae..5b8aecc4ed0edcae0a8bf1573ca4050648cee8cf 100644 (file)
@@ -22,16 +22,16 @@ teardown
   DROP TABLE test;
 }
 
-session "s1"
-step "b1" { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "r1" { SELECT * FROM test WHERE i IN (5, 7) }
-step "w1" { UPDATE test SET t = 'pear_xact1' WHERE i = 7 }
-step "c1" { COMMIT; }
+session s1
+step b1 { BEGIN ISOLATION LEVEL SERIALIZABLE; }
+step r1 { SELECT * FROM test WHERE i IN (5, 7) }
+step w1 { UPDATE test SET t = 'pear_xact1' WHERE i = 7 }
+step c1 { COMMIT; }
 
-session "s2"
-step "b2" { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "r2" { SELECT * FROM test WHERE i IN (5, 7) }
-step "w2" { UPDATE test SET t = 'apple_xact2' WHERE i = 5 }
-step "c2" { COMMIT; }
+session s2
+step b2 { BEGIN ISOLATION LEVEL SERIALIZABLE; }
+step r2 { SELECT * FROM test WHERE i IN (5, 7) }
+step w2 { UPDATE test SET t = 'apple_xact2' WHERE i = 5 }
+step c2 { COMMIT; }
 
-permutation "b1" "b2" "r1" "r2" "w1" "w2" "c1" "c2"
+permutation b1 b2 r1 r2 w1 w2 c1 c2
index c39eaf5ad0c521f9e5d5d957c5260aa54fa360fc..626b1b686a26e805a38512fbdca53a3204f2dbf0 100644 (file)
@@ -12,26 +12,26 @@ teardown
 
 
 # Sessions for CREATE INDEX CONCURRENTLY test
-session "s1"
-step "w1" { BEGIN; INSERT INTO cic_test VALUES (1); }
-step "p1" { PREPARE TRANSACTION 's1'; }
-step "c1" { COMMIT PREPARED 's1'; }
+session s1
+step w1 { BEGIN; INSERT INTO cic_test VALUES (1); }
+step p1 { PREPARE TRANSACTION 's1'; }
+step c1 { COMMIT PREPARED 's1'; }
 
-session "s2"
+session s2
 # The isolation tester never recognizes that a lock of s1 blocks s2, because a
 # prepared transaction's locks have no pid associated.  While there's a slight
 # chance of timeout while waiting for an autovacuum-held lock, that wouldn't
 # change the output.  Hence, no timeout is too short.
 setup { SET lock_timeout = 10; }
-step "cic2"
+step cic2
 {
     CREATE INDEX CONCURRENTLY on cic_test(a);
 }
-step "r2"
+step r2
 {
     SET enable_seqscan to off;
     SET enable_bitmapscan to off;
     SELECT * FROM cic_test WHERE a = 1;
 }
 
-permutation  "w1" "p1" "cic2" "c1" "r2"
+permutation  w1 p1 cic2 c1 r2
index bb9e154e6ea40de8539bbb8e9521723f4e8c5e11..78b9d2c84ef27d834dd14d760629cc632775ba91 100644 (file)
@@ -32,30 +32,30 @@ teardown
 }
 
 
-session "s1"
+session s1
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; INSERT INTO test1 VALUES (1); }
-step "r1" { SELECT * FROM test2; }
-step "p1" { PREPARE TRANSACTION 's1'; }
-step "c1" { COMMIT PREPARED 's1'; }
+step r1 { SELECT * FROM test2; }
+step p1 { PREPARE TRANSACTION 's1'; }
+step c1 { COMMIT PREPARED 's1'; }
 
-session "s2"
+session s2
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; SELECT * FROM force_snapshot; }
-step "r2" { SELECT * FROM test3; }
-step "w2" { INSERT INTO test2 VALUES (2); }
-step "p2" { PREPARE TRANSACTION 's2'; }
-step "c2" { COMMIT PREPARED 's2'; }
+step r2 { SELECT * FROM test3; }
+step w2 { INSERT INTO test2 VALUES (2); }
+step p2 { PREPARE TRANSACTION 's2'; }
+step c2 { COMMIT PREPARED 's2'; }
 
-session "s3"
+session s3
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; SELECT * FROM force_snapshot; }
-step "w3" { INSERT INTO test3 VALUES (3); }
-step "p3" { PREPARE TRANSACTION 's3'; }
-step "c3" { COMMIT PREPARED 's3'; }
+step w3 { INSERT INTO test3 VALUES (3); }
+step p3 { PREPARE TRANSACTION 's3'; }
+step c3 { COMMIT PREPARED 's3'; }
 
 # When run at the end of the permutations below, this SELECT statement
 # should never return any tuples, because at least one of the three
 # transactions involved should be aborted.
-session "s4"
-step "check" { SELECT * FROM test1,test2,test3; }
+session s4
+step check { SELECT * FROM test1,test2,test3; }
 
 # We run on all permutations of the statements above subject to the
 # following constraints:
@@ -73,1435 +73,1435 @@ step "check" { SELECT * FROM test1,test2,test3; }
 # This eliminates some redundant combinations. For example, it doesn't
 # matter if w2 happens before w3 as long as both come before the
 # conflicting reads.
-permutation  "r1"  "r2"  "w2"  "w3"  "p1"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p1"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p1"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p1"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p1"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p1"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p1"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p2"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p2"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p2"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p2"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p2"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p2"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p2"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "w3"  "p3"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "p1"  "w3"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "p1"  "w3"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "p1"  "w3"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "p1"  "w3"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "p1"  "w3"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "p1"  "w3"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "p1"  "w3"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "p1"  "p2"  "w3"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "p1"  "p2"  "w3"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "p2"  "w3"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "p2"  "w3"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "p2"  "w3"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "p2"  "w3"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "p2"  "w3"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "p2"  "w3"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "p2"  "w3"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "r2"  "w2"  "p2"  "p1"  "w3"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "w2"  "p2"  "p1"  "w3"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "p1"  "w2"  "w3"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "p1"  "w2"  "w3"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "p1"  "w2"  "w3"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "p1"  "w2"  "w3"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "p1"  "w2"  "w3"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "p1"  "w2"  "w3"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "r2"  "p1"  "w2"  "w3"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "r2"  "p1"  "w2"  "p2"  "w3"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "r2"  "p1"  "w2"  "p2"  "w3"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p1"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p1"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p1"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p1"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p1"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p1"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p1"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p2"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p2"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p2"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p2"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p2"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p2"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p2"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "r2"  "p3"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p1"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "r2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "p1"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "p1"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "p1"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "p1"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "p1"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "p1"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "p1"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "p1"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "p1"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "w3"  "p3"  "c3"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w2"  "p1"  "w3"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p1"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p1"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p1"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p1"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p1"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p1"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p1"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p2"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p2"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p2"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p2"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p2"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p2"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p2"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "w2"  "p3"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "w2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "w2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "w2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "w2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "w2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "w2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "w2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "p3"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "p3"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "p3"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "p3"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "p3"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "p3"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "p3"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "p3"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p1"  "p3"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "w2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "p1"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "p1"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "p1"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "p1"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "p1"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "p1"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "p1"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "p1"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "p1"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "r2"  "p3"  "c3"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p1"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p1"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p1"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p1"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p1"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p1"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p1"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p2"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p2"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p2"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p2"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p2"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p2"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p2"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "r2"  "p3"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p1"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "r2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "p1"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "p1"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "p1"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "p1"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "p1"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "p1"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "p1"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "p1"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "p1"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "w2"  "p3"  "c3"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "w2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "w2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "w2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "w2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "w2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "w2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "w2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "p3"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "p3"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "p3"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "p3"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "p3"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "p3"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "p3"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "p3"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "r2"  "p3"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "w2"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "r2"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "r2"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "r2"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "r2"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "r2"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "r2"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "r2"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "r2"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "r2"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "w2"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "w2"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "w2"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "w2"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "w2"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "w2"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "w2"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "w2"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "w2"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p1"  "p3"  "c3"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "w2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "p1"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "p1"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "p1"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "p1"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "p1"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "p1"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "p1"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "p1"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "p1"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "r2"  "c3"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "r2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "p1"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "p1"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "p1"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "p1"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "p1"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "p1"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "p1"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "p1"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "p1"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "w2"  "c3"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "r2"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "r2"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "r2"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "r2"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "r2"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "r2"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "r2"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "r2"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "r2"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "w2"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "w2"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "w2"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "w2"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "w2"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "w2"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "w2"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "w2"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "w2"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "p1"  "c3"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "r2"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "w2"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "w3"  "p3"  "c3"  "p1"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "r2"  "w2"  "w3"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "r2"  "w2"  "w3"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "r2"  "w2"  "w3"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "r2"  "w2"  "w3"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "r2"  "w2"  "w3"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "r2"  "w2"  "w3"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "r2"  "w2"  "w3"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "r2"  "w2"  "p2"  "w3"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "r2"  "w2"  "p2"  "w3"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w2"  "w3"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "w2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "w2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "w2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "w2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "w2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "w2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "w2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "p3"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "p3"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "p3"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "p3"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "p3"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "p3"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "p3"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "p3"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "r2"  "p3"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "w2"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "r2"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "r2"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "r2"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "r2"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "r2"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "r2"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "r2"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "r2"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "r2"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "w2"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "w2"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "w2"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "w2"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "w2"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "w2"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "w2"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "w2"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "w2"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "r1"  "p1"  "w3"  "p3"  "c3"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p1"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p1"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p1"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p1"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p1"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p1"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p1"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p2"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p2"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p2"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p2"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p2"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p2"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p2"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "w3"  "p3"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "p1"  "w3"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "p1"  "w3"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "p1"  "w3"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "p1"  "w3"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "p1"  "w3"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "p1"  "w3"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "p1"  "w3"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "p1"  "p2"  "w3"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "p1"  "p2"  "w3"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "p2"  "w3"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "p2"  "w3"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "p2"  "w3"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "p2"  "w3"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "p2"  "w3"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "p2"  "w3"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "p2"  "w3"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "r2"  "p2"  "p1"  "w3"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "r2"  "p2"  "p1"  "w3"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p1"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p1"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p1"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p1"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p1"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p1"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p1"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p2"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p2"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p2"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p2"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p2"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p2"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p2"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "r2"  "p3"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p1"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "r2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "p1"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "p1"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "p1"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "p1"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "p1"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "p1"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "p1"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "p1"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "p1"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "w3"  "p3"  "c3"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "r2"  "w3"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "r2"  "w3"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "r2"  "w3"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "r2"  "w3"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "r2"  "w3"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "r2"  "w3"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "r2"  "w3"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "r2"  "p2"  "w3"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "r2"  "p2"  "w3"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w2"  "r1"  "p1"  "w3"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p1"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p1"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p1"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p1"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p1"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p1"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p1"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p2"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p2"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p2"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p2"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p2"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p2"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p2"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "w2"  "p3"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "w2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "w2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "w2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "w2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "w2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "w2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "w2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "p3"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "p3"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "p3"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "p3"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "p3"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "p3"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "p3"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "p3"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p1"  "p3"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "w2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "p1"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "p1"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "p1"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "p1"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "p1"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "p1"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "p1"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "p1"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "p1"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "r2"  "p3"  "c3"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p1"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p1"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p1"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p1"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p1"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p1"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p1"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p2"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p2"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p2"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p2"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p2"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p2"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p2"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "r2"  "p3"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p1"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "r2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "p1"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "p1"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "p1"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "p1"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "p1"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "p1"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "p1"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "p1"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "p1"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "w2"  "p3"  "c3"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "w2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "w2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "w2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "w2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "w2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "w2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "w2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "p3"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "p3"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "p3"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "p3"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "p3"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "p3"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "p3"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "p3"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "r2"  "p3"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "r2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "r2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "r2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "r2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "r2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "r2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "r2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "p3"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "p3"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "p3"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "p3"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "p3"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "p3"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "p3"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "p3"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "w2"  "p3"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "r2"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "r2"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "r2"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "r2"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "r2"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "r2"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "r2"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "r2"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "r2"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "w2"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "w2"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "w2"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "w2"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "w2"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "w2"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "w2"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "w2"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "w2"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p1"  "p3"  "c3"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "w2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "p1"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "p1"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "p1"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "p1"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "p1"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "p1"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "p1"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "p1"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "p1"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "r2"  "c3"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "r2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "p1"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "p1"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "p1"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "p1"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "p1"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "p1"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "p1"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "p1"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "p1"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "w2"  "c3"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "r2"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "r2"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "r2"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "r2"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "r2"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "r2"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "r2"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "r2"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "r2"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "w2"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "w2"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "w2"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "w2"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "w2"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "w2"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "w2"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "w2"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "w2"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "p1"  "c3"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "r2"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "w2"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r1"  "p3"  "c3"  "p1"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p1"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p1"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p1"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p1"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p1"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p1"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p1"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p2"  "p1"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p2"  "p1"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p2"  "p3"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p2"  "p3"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p2"  "p3"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p2"  "p3"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p2"  "p3"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "w2"  "p3"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "w2"  "p2"  "p3"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "w2"  "p2"  "p3"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "w2"  "p3"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "w2"  "p3"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "w2"  "p3"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "w2"  "p3"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "w2"  "p3"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "p3"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "p3"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "p3"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "p3"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "p3"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "p3"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "p3"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "p3"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p1"  "p3"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "w2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "p1"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "p1"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "p1"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "p1"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "p1"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "p1"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "p1"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "p1"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "p1"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "r1"  "p3"  "c3"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "w2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "p1"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "p1"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "p1"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "p1"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "p1"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "p1"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "p1"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "p1"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "p1"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "r1"  "c3"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "r2"  "p3"  "c3"  "r1"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "w2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "p1"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "p1"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "p1"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "p1"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "p1"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "p1"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "p1"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "p1"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "p1"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "r2"  "c3"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "r2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "p1"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "p1"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "p1"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "p1"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "p1"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "p1"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "p1"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "p1"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "p1"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "w2"  "c3"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "r2"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "r2"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "r2"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "r2"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "r2"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "r2"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "r2"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "r2"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "r2"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "w2"  "r2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "w2"  "r2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "w2"  "r2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "w2"  "r2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "w2"  "r2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "w2"  "c3"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "w2"  "c3"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "w2"  "c3"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "w2"  "c3"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "p1"  "c3"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "r2"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "w2"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r1"  "c3"  "p1"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p1"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p1"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p1"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p1"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p1"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p2"  "p1"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p2"  "p1"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p2"  "c3"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p2"  "c3"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "p2"  "c3"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "c3"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "c3"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "c3"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "c3"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "c3"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "w2"  "c3"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "p1"  "w2"  "p2"  "c3"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "p1"  "w2"  "p2"  "c3"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "p1"  "w2"  "c3"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "p1"  "w2"  "c3"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "p1"  "w2"  "c3"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "p1"  "c3"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "p1"  "c3"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "p1"  "c3"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "p1"  "c3"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "r1"  "c3"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "r2"  "c3"  "r1"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "r2"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "r2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "r2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "r2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "r2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "r2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "r2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "p1"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "p1"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "p1"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "w2"  "p1"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "r2"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "r2"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "r2"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "r2"  "c1"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "w2"  "r2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "w2"  "r2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "w2"  "r2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "w2"  "c1"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "c1"  "r2"  "w2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r1"  "p1"  "c1"  "w2"  "r2"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "w2"  "p1"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "w2"  "p1"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "w2"  "p1"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "w2"  "p2"  "p1"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "w2"  "p2"  "p1"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "w2"  "p2"  "c2"  "p1"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "p1"  "w2"  "p2"  "c1"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "p1"  "w2"  "p2"  "c2"  "c1"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "p1"  "w2"  "c1"  "p2"  "c2"  "check"
-permutation  "w3"  "p3"  "c3"  "r2"  "r1"  "p1"  "c1"  "w2"  "p2"  "c2"  "check"
+permutation  r1  r2  w2  w3  p1  p2  p3  c3  c1  c2  check
+permutation  r1  r2  w2  w3  p1  p2  p3  c3  c2  c1  check
+permutation  r1  r2  w2  w3  p1  p3  p2  c3  c1  c2  check
+permutation  r1  r2  w2  w3  p1  p3  p2  c3  c2  c1  check
+permutation  r1  r2  w2  w3  p1  p3  c3  p2  c1  c2  check
+permutation  r1  r2  w2  w3  p1  p3  c3  p2  c2  c1  check
+permutation  r1  r2  w2  w3  p1  p3  c3  c1  p2  c2  check
+permutation  r1  r2  w2  w3  p2  p1  p3  c3  c1  c2  check
+permutation  r1  r2  w2  w3  p2  p1  p3  c3  c2  c1  check
+permutation  r1  r2  w2  w3  p2  p3  p1  c3  c1  c2  check
+permutation  r1  r2  w2  w3  p2  p3  p1  c3  c2  c1  check
+permutation  r1  r2  w2  w3  p2  p3  c3  p1  c1  c2  check
+permutation  r1  r2  w2  w3  p2  p3  c3  p1  c2  c1  check
+permutation  r1  r2  w2  w3  p2  p3  c3  c2  p1  c1  check
+permutation  r1  r2  w2  w3  p3  p1  p2  c3  c1  c2  check
+permutation  r1  r2  w2  w3  p3  p1  p2  c3  c2  c1  check
+permutation  r1  r2  w2  w3  p3  p1  c3  p2  c1  c2  check
+permutation  r1  r2  w2  w3  p3  p1  c3  p2  c2  c1  check
+permutation  r1  r2  w2  w3  p3  p1  c3  c1  p2  c2  check
+permutation  r1  r2  w2  w3  p3  p2  p1  c3  c1  c2  check
+permutation  r1  r2  w2  w3  p3  p2  p1  c3  c2  c1  check
+permutation  r1  r2  w2  w3  p3  p2  c3  p1  c1  c2  check
+permutation  r1  r2  w2  w3  p3  p2  c3  p1  c2  c1  check
+permutation  r1  r2  w2  w3  p3  p2  c3  c2  p1  c1  check
+permutation  r1  r2  w2  w3  p3  c3  p1  p2  c1  c2  check
+permutation  r1  r2  w2  w3  p3  c3  p1  p2  c2  c1  check
+permutation  r1  r2  w2  w3  p3  c3  p1  c1  p2  c2  check
+permutation  r1  r2  w2  w3  p3  c3  p2  p1  c1  c2  check
+permutation  r1  r2  w2  w3  p3  c3  p2  p1  c2  c1  check
+permutation  r1  r2  w2  w3  p3  c3  p2  c2  p1  c1  check
+permutation  r1  r2  w2  p1  w3  p2  p3  c3  c1  c2  check
+permutation  r1  r2  w2  p1  w3  p2  p3  c3  c2  c1  check
+permutation  r1  r2  w2  p1  w3  p3  p2  c3  c1  c2  check
+permutation  r1  r2  w2  p1  w3  p3  p2  c3  c2  c1  check
+permutation  r1  r2  w2  p1  w3  p3  c3  p2  c1  c2  check
+permutation  r1  r2  w2  p1  w3  p3  c3  p2  c2  c1  check
+permutation  r1  r2  w2  p1  w3  p3  c3  c1  p2  c2  check
+permutation  r1  r2  w2  p1  p2  w3  p3  c3  c1  c2  check
+permutation  r1  r2  w2  p1  p2  w3  p3  c3  c2  c1  check
+permutation  r1  r2  w2  p2  w3  p1  p3  c3  c1  c2  check
+permutation  r1  r2  w2  p2  w3  p1  p3  c3  c2  c1  check
+permutation  r1  r2  w2  p2  w3  p3  p1  c3  c1  c2  check
+permutation  r1  r2  w2  p2  w3  p3  p1  c3  c2  c1  check
+permutation  r1  r2  w2  p2  w3  p3  c3  p1  c1  c2  check
+permutation  r1  r2  w2  p2  w3  p3  c3  p1  c2  c1  check
+permutation  r1  r2  w2  p2  w3  p3  c3  c2  p1  c1  check
+permutation  r1  r2  w2  p2  p1  w3  p3  c3  c1  c2  check
+permutation  r1  r2  w2  p2  p1  w3  p3  c3  c2  c1  check
+permutation  r1  r2  p1  w2  w3  p2  p3  c3  c1  c2  check
+permutation  r1  r2  p1  w2  w3  p2  p3  c3  c2  c1  check
+permutation  r1  r2  p1  w2  w3  p3  p2  c3  c1  c2  check
+permutation  r1  r2  p1  w2  w3  p3  p2  c3  c2  c1  check
+permutation  r1  r2  p1  w2  w3  p3  c3  p2  c1  c2  check
+permutation  r1  r2  p1  w2  w3  p3  c3  p2  c2  c1  check
+permutation  r1  r2  p1  w2  w3  p3  c3  c1  p2  c2  check
+permutation  r1  r2  p1  w2  p2  w3  p3  c3  c1  c2  check
+permutation  r1  r2  p1  w2  p2  w3  p3  c3  c2  c1  check
+permutation  r1  w2  w3  r2  p1  p2  p3  c3  c1  c2  check
+permutation  r1  w2  w3  r2  p1  p2  p3  c3  c2  c1  check
+permutation  r1  w2  w3  r2  p1  p3  p2  c3  c1  c2  check
+permutation  r1  w2  w3  r2  p1  p3  p2  c3  c2  c1  check
+permutation  r1  w2  w3  r2  p1  p3  c3  p2  c1  c2  check
+permutation  r1  w2  w3  r2  p1  p3  c3  p2  c2  c1  check
+permutation  r1  w2  w3  r2  p1  p3  c3  c1  p2  c2  check
+permutation  r1  w2  w3  r2  p2  p1  p3  c3  c1  c2  check
+permutation  r1  w2  w3  r2  p2  p1  p3  c3  c2  c1  check
+permutation  r1  w2  w3  r2  p2  p3  p1  c3  c1  c2  check
+permutation  r1  w2  w3  r2  p2  p3  p1  c3  c2  c1  check
+permutation  r1  w2  w3  r2  p2  p3  c3  p1  c1  c2  check
+permutation  r1  w2  w3  r2  p2  p3  c3  p1  c2  c1  check
+permutation  r1  w2  w3  r2  p2  p3  c3  c2  p1  c1  check
+permutation  r1  w2  w3  r2  p3  p1  p2  c3  c1  c2  check
+permutation  r1  w2  w3  r2  p3  p1  p2  c3  c2  c1  check
+permutation  r1  w2  w3  r2  p3  p1  c3  p2  c1  c2  check
+permutation  r1  w2  w3  r2  p3  p1  c3  p2  c2  c1  check
+permutation  r1  w2  w3  r2  p3  p1  c3  c1  p2  c2  check
+permutation  r1  w2  w3  r2  p3  p2  p1  c3  c1  c2  check
+permutation  r1  w2  w3  r2  p3  p2  p1  c3  c2  c1  check
+permutation  r1  w2  w3  r2  p3  p2  c3  p1  c1  c2  check
+permutation  r1  w2  w3  r2  p3  p2  c3  p1  c2  c1  check
+permutation  r1  w2  w3  r2  p3  p2  c3  c2  p1  c1  check
+permutation  r1  w2  w3  r2  p3  c3  p1  p2  c1  c2  check
+permutation  r1  w2  w3  r2  p3  c3  p1  p2  c2  c1  check
+permutation  r1  w2  w3  r2  p3  c3  p1  c1  p2  c2  check
+permutation  r1  w2  w3  r2  p3  c3  p2  p1  c1  c2  check
+permutation  r1  w2  w3  r2  p3  c3  p2  p1  c2  c1  check
+permutation  r1  w2  w3  r2  p3  c3  p2  c2  p1  c1  check
+permutation  r1  w2  w3  p1  r2  p2  p3  c3  c1  c2  check
+permutation  r1  w2  w3  p1  r2  p2  p3  c3  c2  c1  check
+permutation  r1  w2  w3  p1  r2  p3  p2  c3  c1  c2  check
+permutation  r1  w2  w3  p1  r2  p3  p2  c3  c2  c1  check
+permutation  r1  w2  w3  p1  r2  p3  c3  p2  c1  c2  check
+permutation  r1  w2  w3  p1  r2  p3  c3  p2  c2  c1  check
+permutation  r1  w2  w3  p1  r2  p3  c3  c1  p2  c2  check
+permutation  r1  w2  w3  p1  p3  r2  p2  c3  c1  c2  check
+permutation  r1  w2  w3  p1  p3  r2  p2  c3  c2  c1  check
+permutation  r1  w2  w3  p1  p3  r2  c3  p2  c1  c2  check
+permutation  r1  w2  w3  p1  p3  r2  c3  p2  c2  c1  check
+permutation  r1  w2  w3  p1  p3  r2  c3  c1  p2  c2  check
+permutation  r1  w2  w3  p1  p3  c3  r2  p2  c1  c2  check
+permutation  r1  w2  w3  p1  p3  c3  r2  p2  c2  c1  check
+permutation  r1  w2  w3  p1  p3  c3  r2  c1  p2  c2  check
+permutation  r1  w2  w3  p1  p3  c3  c1  r2  p2  c2  check
+permutation  r1  w2  w3  p3  r2  p1  p2  c3  c1  c2  check
+permutation  r1  w2  w3  p3  r2  p1  p2  c3  c2  c1  check
+permutation  r1  w2  w3  p3  r2  p1  c3  p2  c1  c2  check
+permutation  r1  w2  w3  p3  r2  p1  c3  p2  c2  c1  check
+permutation  r1  w2  w3  p3  r2  p1  c3  c1  p2  c2  check
+permutation  r1  w2  w3  p3  r2  p2  p1  c3  c1  c2  check
+permutation  r1  w2  w3  p3  r2  p2  p1  c3  c2  c1  check
+permutation  r1  w2  w3  p3  r2  p2  c3  p1  c1  c2  check
+permutation  r1  w2  w3  p3  r2  p2  c3  p1  c2  c1  check
+permutation  r1  w2  w3  p3  r2  p2  c3  c2  p1  c1  check
+permutation  r1  w2  w3  p3  r2  c3  p1  p2  c1  c2  check
+permutation  r1  w2  w3  p3  r2  c3  p1  p2  c2  c1  check
+permutation  r1  w2  w3  p3  r2  c3  p1  c1  p2  c2  check
+permutation  r1  w2  w3  p3  r2  c3  p2  p1  c1  c2  check
+permutation  r1  w2  w3  p3  r2  c3  p2  p1  c2  c1  check
+permutation  r1  w2  w3  p3  r2  c3  p2  c2  p1  c1  check
+permutation  r1  w2  w3  p3  p1  r2  p2  c3  c1  c2  check
+permutation  r1  w2  w3  p3  p1  r2  p2  c3  c2  c1  check
+permutation  r1  w2  w3  p3  p1  r2  c3  p2  c1  c2  check
+permutation  r1  w2  w3  p3  p1  r2  c3  p2  c2  c1  check
+permutation  r1  w2  w3  p3  p1  r2  c3  c1  p2  c2  check
+permutation  r1  w2  w3  p3  p1  c3  r2  p2  c1  c2  check
+permutation  r1  w2  w3  p3  p1  c3  r2  p2  c2  c1  check
+permutation  r1  w2  w3  p3  p1  c3  r2  c1  p2  c2  check
+permutation  r1  w2  w3  p3  p1  c3  c1  r2  p2  c2  check
+permutation  r1  w2  w3  p3  c3  r2  p1  p2  c1  c2  check
+permutation  r1  w2  w3  p3  c3  r2  p1  p2  c2  c1  check
+permutation  r1  w2  w3  p3  c3  r2  p1  c1  p2  c2  check
+permutation  r1  w2  w3  p3  c3  r2  p2  p1  c1  c2  check
+permutation  r1  w2  w3  p3  c3  r2  p2  p1  c2  c1  check
+permutation  r1  w2  w3  p3  c3  r2  p2  c2  p1  c1  check
+permutation  r1  w2  w3  p3  c3  p1  r2  p2  c1  c2  check
+permutation  r1  w2  w3  p3  c3  p1  r2  p2  c2  c1  check
+permutation  r1  w2  w3  p3  c3  p1  r2  c1  p2  c2  check
+permutation  r1  w2  w3  p3  c3  p1  c1  r2  p2  c2  check
+permutation  r1  w2  p1  w3  r2  p2  p3  c3  c1  c2  check
+permutation  r1  w2  p1  w3  r2  p2  p3  c3  c2  c1  check
+permutation  r1  w2  p1  w3  r2  p3  p2  c3  c1  c2  check
+permutation  r1  w2  p1  w3  r2  p3  p2  c3  c2  c1  check
+permutation  r1  w2  p1  w3  r2  p3  c3  p2  c1  c2  check
+permutation  r1  w2  p1  w3  r2  p3  c3  p2  c2  c1  check
+permutation  r1  w2  p1  w3  r2  p3  c3  c1  p2  c2  check
+permutation  r1  w2  p1  w3  p3  r2  p2  c3  c1  c2  check
+permutation  r1  w2  p1  w3  p3  r2  p2  c3  c2  c1  check
+permutation  r1  w2  p1  w3  p3  r2  c3  p2  c1  c2  check
+permutation  r1  w2  p1  w3  p3  r2  c3  p2  c2  c1  check
+permutation  r1  w2  p1  w3  p3  r2  c3  c1  p2  c2  check
+permutation  r1  w2  p1  w3  p3  c3  r2  p2  c1  c2  check
+permutation  r1  w2  p1  w3  p3  c3  r2  p2  c2  c1  check
+permutation  r1  w2  p1  w3  p3  c3  r2  c1  p2  c2  check
+permutation  r1  w2  p1  w3  p3  c3  c1  r2  p2  c2  check
+permutation  r1  w3  r2  w2  p1  p2  p3  c3  c1  c2  check
+permutation  r1  w3  r2  w2  p1  p2  p3  c3  c2  c1  check
+permutation  r1  w3  r2  w2  p1  p3  p2  c3  c1  c2  check
+permutation  r1  w3  r2  w2  p1  p3  p2  c3  c2  c1  check
+permutation  r1  w3  r2  w2  p1  p3  c3  p2  c1  c2  check
+permutation  r1  w3  r2  w2  p1  p3  c3  p2  c2  c1  check
+permutation  r1  w3  r2  w2  p1  p3  c3  c1  p2  c2  check
+permutation  r1  w3  r2  w2  p2  p1  p3  c3  c1  c2  check
+permutation  r1  w3  r2  w2  p2  p1  p3  c3  c2  c1  check
+permutation  r1  w3  r2  w2  p2  p3  p1  c3  c1  c2  check
+permutation  r1  w3  r2  w2  p2  p3  p1  c3  c2  c1  check
+permutation  r1  w3  r2  w2  p2  p3  c3  p1  c1  c2  check
+permutation  r1  w3  r2  w2  p2  p3  c3  p1  c2  c1  check
+permutation  r1  w3  r2  w2  p2  p3  c3  c2  p1  c1  check
+permutation  r1  w3  r2  w2  p3  p1  p2  c3  c1  c2  check
+permutation  r1  w3  r2  w2  p3  p1  p2  c3  c2  c1  check
+permutation  r1  w3  r2  w2  p3  p1  c3  p2  c1  c2  check
+permutation  r1  w3  r2  w2  p3  p1  c3  p2  c2  c1  check
+permutation  r1  w3  r2  w2  p3  p1  c3  c1  p2  c2  check
+permutation  r1  w3  r2  w2  p3  p2  p1  c3  c1  c2  check
+permutation  r1  w3  r2  w2  p3  p2  p1  c3  c2  c1  check
+permutation  r1  w3  r2  w2  p3  p2  c3  p1  c1  c2  check
+permutation  r1  w3  r2  w2  p3  p2  c3  p1  c2  c1  check
+permutation  r1  w3  r2  w2  p3  p2  c3  c2  p1  c1  check
+permutation  r1  w3  r2  w2  p3  c3  p1  p2  c1  c2  check
+permutation  r1  w3  r2  w2  p3  c3  p1  p2  c2  c1  check
+permutation  r1  w3  r2  w2  p3  c3  p1  c1  p2  c2  check
+permutation  r1  w3  r2  w2  p3  c3  p2  p1  c1  c2  check
+permutation  r1  w3  r2  w2  p3  c3  p2  p1  c2  c1  check
+permutation  r1  w3  r2  w2  p3  c3  p2  c2  p1  c1  check
+permutation  r1  w3  r2  p1  w2  p2  p3  c3  c1  c2  check
+permutation  r1  w3  r2  p1  w2  p2  p3  c3  c2  c1  check
+permutation  r1  w3  r2  p1  w2  p3  p2  c3  c1  c2  check
+permutation  r1  w3  r2  p1  w2  p3  p2  c3  c2  c1  check
+permutation  r1  w3  r2  p1  w2  p3  c3  p2  c1  c2  check
+permutation  r1  w3  r2  p1  w2  p3  c3  p2  c2  c1  check
+permutation  r1  w3  r2  p1  w2  p3  c3  c1  p2  c2  check
+permutation  r1  w3  r2  p1  p3  w2  p2  c3  c1  c2  check
+permutation  r1  w3  r2  p1  p3  w2  p2  c3  c2  c1  check
+permutation  r1  w3  r2  p1  p3  w2  c3  p2  c1  c2  check
+permutation  r1  w3  r2  p1  p3  w2  c3  p2  c2  c1  check
+permutation  r1  w3  r2  p1  p3  w2  c3  c1  p2  c2  check
+permutation  r1  w3  r2  p1  p3  c3  w2  p2  c1  c2  check
+permutation  r1  w3  r2  p1  p3  c3  w2  p2  c2  c1  check
+permutation  r1  w3  r2  p1  p3  c3  w2  c1  p2  c2  check
+permutation  r1  w3  r2  p1  p3  c3  c1  w2  p2  c2  check
+permutation  r1  w3  r2  p3  w2  p1  p2  c3  c1  c2  check
+permutation  r1  w3  r2  p3  w2  p1  p2  c3  c2  c1  check
+permutation  r1  w3  r2  p3  w2  p1  c3  p2  c1  c2  check
+permutation  r1  w3  r2  p3  w2  p1  c3  p2  c2  c1  check
+permutation  r1  w3  r2  p3  w2  p1  c3  c1  p2  c2  check
+permutation  r1  w3  r2  p3  w2  p2  p1  c3  c1  c2  check
+permutation  r1  w3  r2  p3  w2  p2  p1  c3  c2  c1  check
+permutation  r1  w3  r2  p3  w2  p2  c3  p1  c1  c2  check
+permutation  r1  w3  r2  p3  w2  p2  c3  p1  c2  c1  check
+permutation  r1  w3  r2  p3  w2  p2  c3  c2  p1  c1  check
+permutation  r1  w3  r2  p3  w2  c3  p1  p2  c1  c2  check
+permutation  r1  w3  r2  p3  w2  c3  p1  p2  c2  c1  check
+permutation  r1  w3  r2  p3  w2  c3  p1  c1  p2  c2  check
+permutation  r1  w3  r2  p3  w2  c3  p2  p1  c1  c2  check
+permutation  r1  w3  r2  p3  w2  c3  p2  p1  c2  c1  check
+permutation  r1  w3  r2  p3  w2  c3  p2  c2  p1  c1  check
+permutation  r1  w3  r2  p3  p1  w2  p2  c3  c1  c2  check
+permutation  r1  w3  r2  p3  p1  w2  p2  c3  c2  c1  check
+permutation  r1  w3  r2  p3  p1  w2  c3  p2  c1  c2  check
+permutation  r1  w3  r2  p3  p1  w2  c3  p2  c2  c1  check
+permutation  r1  w3  r2  p3  p1  w2  c3  c1  p2  c2  check
+permutation  r1  w3  r2  p3  p1  c3  w2  p2  c1  c2  check
+permutation  r1  w3  r2  p3  p1  c3  w2  p2  c2  c1  check
+permutation  r1  w3  r2  p3  p1  c3  w2  c1  p2  c2  check
+permutation  r1  w3  r2  p3  p1  c3  c1  w2  p2  c2  check
+permutation  r1  w3  r2  p3  c3  w2  p1  p2  c1  c2  check
+permutation  r1  w3  r2  p3  c3  w2  p1  p2  c2  c1  check
+permutation  r1  w3  r2  p3  c3  w2  p1  c1  p2  c2  check
+permutation  r1  w3  r2  p3  c3  w2  p2  p1  c1  c2  check
+permutation  r1  w3  r2  p3  c3  w2  p2  p1  c2  c1  check
+permutation  r1  w3  r2  p3  c3  w2  p2  c2  p1  c1  check
+permutation  r1  w3  r2  p3  c3  p1  w2  p2  c1  c2  check
+permutation  r1  w3  r2  p3  c3  p1  w2  p2  c2  c1  check
+permutation  r1  w3  r2  p3  c3  p1  w2  c1  p2  c2  check
+permutation  r1  w3  r2  p3  c3  p1  c1  w2  p2  c2  check
+permutation  r1  w3  w2  r2  p1  p2  p3  c3  c1  c2  check
+permutation  r1  w3  w2  r2  p1  p2  p3  c3  c2  c1  check
+permutation  r1  w3  w2  r2  p1  p3  p2  c3  c1  c2  check
+permutation  r1  w3  w2  r2  p1  p3  p2  c3  c2  c1  check
+permutation  r1  w3  w2  r2  p1  p3  c3  p2  c1  c2  check
+permutation  r1  w3  w2  r2  p1  p3  c3  p2  c2  c1  check
+permutation  r1  w3  w2  r2  p1  p3  c3  c1  p2  c2  check
+permutation  r1  w3  w2  r2  p2  p1  p3  c3  c1  c2  check
+permutation  r1  w3  w2  r2  p2  p1  p3  c3  c2  c1  check
+permutation  r1  w3  w2  r2  p2  p3  p1  c3  c1  c2  check
+permutation  r1  w3  w2  r2  p2  p3  p1  c3  c2  c1  check
+permutation  r1  w3  w2  r2  p2  p3  c3  p1  c1  c2  check
+permutation  r1  w3  w2  r2  p2  p3  c3  p1  c2  c1  check
+permutation  r1  w3  w2  r2  p2  p3  c3  c2  p1  c1  check
+permutation  r1  w3  w2  r2  p3  p1  p2  c3  c1  c2  check
+permutation  r1  w3  w2  r2  p3  p1  p2  c3  c2  c1  check
+permutation  r1  w3  w2  r2  p3  p1  c3  p2  c1  c2  check
+permutation  r1  w3  w2  r2  p3  p1  c3  p2  c2  c1  check
+permutation  r1  w3  w2  r2  p3  p1  c3  c1  p2  c2  check
+permutation  r1  w3  w2  r2  p3  p2  p1  c3  c1  c2  check
+permutation  r1  w3  w2  r2  p3  p2  p1  c3  c2  c1  check
+permutation  r1  w3  w2  r2  p3  p2  c3  p1  c1  c2  check
+permutation  r1  w3  w2  r2  p3  p2  c3  p1  c2  c1  check
+permutation  r1  w3  w2  r2  p3  p2  c3  c2  p1  c1  check
+permutation  r1  w3  w2  r2  p3  c3  p1  p2  c1  c2  check
+permutation  r1  w3  w2  r2  p3  c3  p1  p2  c2  c1  check
+permutation  r1  w3  w2  r2  p3  c3  p1  c1  p2  c2  check
+permutation  r1  w3  w2  r2  p3  c3  p2  p1  c1  c2  check
+permutation  r1  w3  w2  r2  p3  c3  p2  p1  c2  c1  check
+permutation  r1  w3  w2  r2  p3  c3  p2  c2  p1  c1  check
+permutation  r1  w3  w2  p1  r2  p2  p3  c3  c1  c2  check
+permutation  r1  w3  w2  p1  r2  p2  p3  c3  c2  c1  check
+permutation  r1  w3  w2  p1  r2  p3  p2  c3  c1  c2  check
+permutation  r1  w3  w2  p1  r2  p3  p2  c3  c2  c1  check
+permutation  r1  w3  w2  p1  r2  p3  c3  p2  c1  c2  check
+permutation  r1  w3  w2  p1  r2  p3  c3  p2  c2  c1  check
+permutation  r1  w3  w2  p1  r2  p3  c3  c1  p2  c2  check
+permutation  r1  w3  w2  p1  p3  r2  p2  c3  c1  c2  check
+permutation  r1  w3  w2  p1  p3  r2  p2  c3  c2  c1  check
+permutation  r1  w3  w2  p1  p3  r2  c3  p2  c1  c2  check
+permutation  r1  w3  w2  p1  p3  r2  c3  p2  c2  c1  check
+permutation  r1  w3  w2  p1  p3  r2  c3  c1  p2  c2  check
+permutation  r1  w3  w2  p1  p3  c3  r2  p2  c1  c2  check
+permutation  r1  w3  w2  p1  p3  c3  r2  p2  c2  c1  check
+permutation  r1  w3  w2  p1  p3  c3  r2  c1  p2  c2  check
+permutation  r1  w3  w2  p1  p3  c3  c1  r2  p2  c2  check
+permutation  r1  w3  w2  p3  r2  p1  p2  c3  c1  c2  check
+permutation  r1  w3  w2  p3  r2  p1  p2  c3  c2  c1  check
+permutation  r1  w3  w2  p3  r2  p1  c3  p2  c1  c2  check
+permutation  r1  w3  w2  p3  r2  p1  c3  p2  c2  c1  check
+permutation  r1  w3  w2  p3  r2  p1  c3  c1  p2  c2  check
+permutation  r1  w3  w2  p3  r2  p2  p1  c3  c1  c2  check
+permutation  r1  w3  w2  p3  r2  p2  p1  c3  c2  c1  check
+permutation  r1  w3  w2  p3  r2  p2  c3  p1  c1  c2  check
+permutation  r1  w3  w2  p3  r2  p2  c3  p1  c2  c1  check
+permutation  r1  w3  w2  p3  r2  p2  c3  c2  p1  c1  check
+permutation  r1  w3  w2  p3  r2  c3  p1  p2  c1  c2  check
+permutation  r1  w3  w2  p3  r2  c3  p1  p2  c2  c1  check
+permutation  r1  w3  w2  p3  r2  c3  p1  c1  p2  c2  check
+permutation  r1  w3  w2  p3  r2  c3  p2  p1  c1  c2  check
+permutation  r1  w3  w2  p3  r2  c3  p2  p1  c2  c1  check
+permutation  r1  w3  w2  p3  r2  c3  p2  c2  p1  c1  check
+permutation  r1  w3  w2  p3  p1  r2  p2  c3  c1  c2  check
+permutation  r1  w3  w2  p3  p1  r2  p2  c3  c2  c1  check
+permutation  r1  w3  w2  p3  p1  r2  c3  p2  c1  c2  check
+permutation  r1  w3  w2  p3  p1  r2  c3  p2  c2  c1  check
+permutation  r1  w3  w2  p3  p1  r2  c3  c1  p2  c2  check
+permutation  r1  w3  w2  p3  p1  c3  r2  p2  c1  c2  check
+permutation  r1  w3  w2  p3  p1  c3  r2  p2  c2  c1  check
+permutation  r1  w3  w2  p3  p1  c3  r2  c1  p2  c2  check
+permutation  r1  w3  w2  p3  p1  c3  c1  r2  p2  c2  check
+permutation  r1  w3  w2  p3  c3  r2  p1  p2  c1  c2  check
+permutation  r1  w3  w2  p3  c3  r2  p1  p2  c2  c1  check
+permutation  r1  w3  w2  p3  c3  r2  p1  c1  p2  c2  check
+permutation  r1  w3  w2  p3  c3  r2  p2  p1  c1  c2  check
+permutation  r1  w3  w2  p3  c3  r2  p2  p1  c2  c1  check
+permutation  r1  w3  w2  p3  c3  r2  p2  c2  p1  c1  check
+permutation  r1  w3  w2  p3  c3  p1  r2  p2  c1  c2  check
+permutation  r1  w3  w2  p3  c3  p1  r2  p2  c2  c1  check
+permutation  r1  w3  w2  p3  c3  p1  r2  c1  p2  c2  check
+permutation  r1  w3  w2  p3  c3  p1  c1  r2  p2  c2  check
+permutation  r1  w3  p1  r2  w2  p2  p3  c3  c1  c2  check
+permutation  r1  w3  p1  r2  w2  p2  p3  c3  c2  c1  check
+permutation  r1  w3  p1  r2  w2  p3  p2  c3  c1  c2  check
+permutation  r1  w3  p1  r2  w2  p3  p2  c3  c2  c1  check
+permutation  r1  w3  p1  r2  w2  p3  c3  p2  c1  c2  check
+permutation  r1  w3  p1  r2  w2  p3  c3  p2  c2  c1  check
+permutation  r1  w3  p1  r2  w2  p3  c3  c1  p2  c2  check
+permutation  r1  w3  p1  r2  p3  w2  p2  c3  c1  c2  check
+permutation  r1  w3  p1  r2  p3  w2  p2  c3  c2  c1  check
+permutation  r1  w3  p1  r2  p3  w2  c3  p2  c1  c2  check
+permutation  r1  w3  p1  r2  p3  w2  c3  p2  c2  c1  check
+permutation  r1  w3  p1  r2  p3  w2  c3  c1  p2  c2  check
+permutation  r1  w3  p1  r2  p3  c3  w2  p2  c1  c2  check
+permutation  r1  w3  p1  r2  p3  c3  w2  p2  c2  c1  check
+permutation  r1  w3  p1  r2  p3  c3  w2  c1  p2  c2  check
+permutation  r1  w3  p1  r2  p3  c3  c1  w2  p2  c2  check
+permutation  r1  w3  p1  w2  r2  p2  p3  c3  c1  c2  check
+permutation  r1  w3  p1  w2  r2  p2  p3  c3  c2  c1  check
+permutation  r1  w3  p1  w2  r2  p3  p2  c3  c1  c2  check
+permutation  r1  w3  p1  w2  r2  p3  p2  c3  c2  c1  check
+permutation  r1  w3  p1  w2  r2  p3  c3  p2  c1  c2  check
+permutation  r1  w3  p1  w2  r2  p3  c3  p2  c2  c1  check
+permutation  r1  w3  p1  w2  r2  p3  c3  c1  p2  c2  check
+permutation  r1  w3  p1  w2  p3  r2  p2  c3  c1  c2  check
+permutation  r1  w3  p1  w2  p3  r2  p2  c3  c2  c1  check
+permutation  r1  w3  p1  w2  p3  r2  c3  p2  c1  c2  check
+permutation  r1  w3  p1  w2  p3  r2  c3  p2  c2  c1  check
+permutation  r1  w3  p1  w2  p3  r2  c3  c1  p2  c2  check
+permutation  r1  w3  p1  w2  p3  c3  r2  p2  c1  c2  check
+permutation  r1  w3  p1  w2  p3  c3  r2  p2  c2  c1  check
+permutation  r1  w3  p1  w2  p3  c3  r2  c1  p2  c2  check
+permutation  r1  w3  p1  w2  p3  c3  c1  r2  p2  c2  check
+permutation  r1  w3  p1  p3  r2  w2  p2  c3  c1  c2  check
+permutation  r1  w3  p1  p3  r2  w2  p2  c3  c2  c1  check
+permutation  r1  w3  p1  p3  r2  w2  c3  p2  c1  c2  check
+permutation  r1  w3  p1  p3  r2  w2  c3  p2  c2  c1  check
+permutation  r1  w3  p1  p3  r2  w2  c3  c1  p2  c2  check
+permutation  r1  w3  p1  p3  r2  c3  w2  p2  c1  c2  check
+permutation  r1  w3  p1  p3  r2  c3  w2  p2  c2  c1  check
+permutation  r1  w3  p1  p3  r2  c3  w2  c1  p2  c2  check
+permutation  r1  w3  p1  p3  r2  c3  c1  w2  p2  c2  check
+permutation  r1  w3  p1  p3  w2  r2  p2  c3  c1  c2  check
+permutation  r1  w3  p1  p3  w2  r2  p2  c3  c2  c1  check
+permutation  r1  w3  p1  p3  w2  r2  c3  p2  c1  c2  check
+permutation  r1  w3  p1  p3  w2  r2  c3  p2  c2  c1  check
+permutation  r1  w3  p1  p3  w2  r2  c3  c1  p2  c2  check
+permutation  r1  w3  p1  p3  w2  c3  r2  p2  c1  c2  check
+permutation  r1  w3  p1  p3  w2  c3  r2  p2  c2  c1  check
+permutation  r1  w3  p1  p3  w2  c3  r2  c1  p2  c2  check
+permutation  r1  w3  p1  p3  w2  c3  c1  r2  p2  c2  check
+permutation  r1  w3  p1  p3  c3  r2  w2  p2  c1  c2  check
+permutation  r1  w3  p1  p3  c3  r2  w2  p2  c2  c1  check
+permutation  r1  w3  p1  p3  c3  r2  w2  c1  p2  c2  check
+permutation  r1  w3  p1  p3  c3  r2  c1  w2  p2  c2  check
+permutation  r1  w3  p1  p3  c3  w2  r2  p2  c1  c2  check
+permutation  r1  w3  p1  p3  c3  w2  r2  p2  c2  c1  check
+permutation  r1  w3  p1  p3  c3  w2  r2  c1  p2  c2  check
+permutation  r1  w3  p1  p3  c3  w2  c1  r2  p2  c2  check
+permutation  r1  w3  p1  p3  c3  c1  r2  w2  p2  c2  check
+permutation  r1  w3  p1  p3  c3  c1  w2  r2  p2  c2  check
+permutation  r1  w3  p3  r2  w2  p1  p2  c3  c1  c2  check
+permutation  r1  w3  p3  r2  w2  p1  p2  c3  c2  c1  check
+permutation  r1  w3  p3  r2  w2  p1  c3  p2  c1  c2  check
+permutation  r1  w3  p3  r2  w2  p1  c3  p2  c2  c1  check
+permutation  r1  w3  p3  r2  w2  p1  c3  c1  p2  c2  check
+permutation  r1  w3  p3  r2  w2  p2  p1  c3  c1  c2  check
+permutation  r1  w3  p3  r2  w2  p2  p1  c3  c2  c1  check
+permutation  r1  w3  p3  r2  w2  p2  c3  p1  c1  c2  check
+permutation  r1  w3  p3  r2  w2  p2  c3  p1  c2  c1  check
+permutation  r1  w3  p3  r2  w2  p2  c3  c2  p1  c1  check
+permutation  r1  w3  p3  r2  w2  c3  p1  p2  c1  c2  check
+permutation  r1  w3  p3  r2  w2  c3  p1  p2  c2  c1  check
+permutation  r1  w3  p3  r2  w2  c3  p1  c1  p2  c2  check
+permutation  r1  w3  p3  r2  w2  c3  p2  p1  c1  c2  check
+permutation  r1  w3  p3  r2  w2  c3  p2  p1  c2  c1  check
+permutation  r1  w3  p3  r2  w2  c3  p2  c2  p1  c1  check
+permutation  r1  w3  p3  r2  p1  w2  p2  c3  c1  c2  check
+permutation  r1  w3  p3  r2  p1  w2  p2  c3  c2  c1  check
+permutation  r1  w3  p3  r2  p1  w2  c3  p2  c1  c2  check
+permutation  r1  w3  p3  r2  p1  w2  c3  p2  c2  c1  check
+permutation  r1  w3  p3  r2  p1  w2  c3  c1  p2  c2  check
+permutation  r1  w3  p3  r2  p1  c3  w2  p2  c1  c2  check
+permutation  r1  w3  p3  r2  p1  c3  w2  p2  c2  c1  check
+permutation  r1  w3  p3  r2  p1  c3  w2  c1  p2  c2  check
+permutation  r1  w3  p3  r2  p1  c3  c1  w2  p2  c2  check
+permutation  r1  w3  p3  r2  c3  w2  p1  p2  c1  c2  check
+permutation  r1  w3  p3  r2  c3  w2  p1  p2  c2  c1  check
+permutation  r1  w3  p3  r2  c3  w2  p1  c1  p2  c2  check
+permutation  r1  w3  p3  r2  c3  w2  p2  p1  c1  c2  check
+permutation  r1  w3  p3  r2  c3  w2  p2  p1  c2  c1  check
+permutation  r1  w3  p3  r2  c3  w2  p2  c2  p1  c1  check
+permutation  r1  w3  p3  r2  c3  p1  w2  p2  c1  c2  check
+permutation  r1  w3  p3  r2  c3  p1  w2  p2  c2  c1  check
+permutation  r1  w3  p3  r2  c3  p1  w2  c1  p2  c2  check
+permutation  r1  w3  p3  r2  c3  p1  c1  w2  p2  c2  check
+permutation  r1  w3  p3  w2  r2  p1  p2  c3  c1  c2  check
+permutation  r1  w3  p3  w2  r2  p1  p2  c3  c2  c1  check
+permutation  r1  w3  p3  w2  r2  p1  c3  p2  c1  c2  check
+permutation  r1  w3  p3  w2  r2  p1  c3  p2  c2  c1  check
+permutation  r1  w3  p3  w2  r2  p1  c3  c1  p2  c2  check
+permutation  r1  w3  p3  w2  r2  p2  p1  c3  c1  c2  check
+permutation  r1  w3  p3  w2  r2  p2  p1  c3  c2  c1  check
+permutation  r1  w3  p3  w2  r2  p2  c3  p1  c1  c2  check
+permutation  r1  w3  p3  w2  r2  p2  c3  p1  c2  c1  check
+permutation  r1  w3  p3  w2  r2  p2  c3  c2  p1  c1  check
+permutation  r1  w3  p3  w2  r2  c3  p1  p2  c1  c2  check
+permutation  r1  w3  p3  w2  r2  c3  p1  p2  c2  c1  check
+permutation  r1  w3  p3  w2  r2  c3  p1  c1  p2  c2  check
+permutation  r1  w3  p3  w2  r2  c3  p2  p1  c1  c2  check
+permutation  r1  w3  p3  w2  r2  c3  p2  p1  c2  c1  check
+permutation  r1  w3  p3  w2  r2  c3  p2  c2  p1  c1  check
+permutation  r1  w3  p3  w2  p1  r2  p2  c3  c1  c2  check
+permutation  r1  w3  p3  w2  p1  r2  p2  c3  c2  c1  check
+permutation  r1  w3  p3  w2  p1  r2  c3  p2  c1  c2  check
+permutation  r1  w3  p3  w2  p1  r2  c3  p2  c2  c1  check
+permutation  r1  w3  p3  w2  p1  r2  c3  c1  p2  c2  check
+permutation  r1  w3  p3  w2  p1  c3  r2  p2  c1  c2  check
+permutation  r1  w3  p3  w2  p1  c3  r2  p2  c2  c1  check
+permutation  r1  w3  p3  w2  p1  c3  r2  c1  p2  c2  check
+permutation  r1  w3  p3  w2  p1  c3  c1  r2  p2  c2  check
+permutation  r1  w3  p3  w2  c3  r2  p1  p2  c1  c2  check
+permutation  r1  w3  p3  w2  c3  r2  p1  p2  c2  c1  check
+permutation  r1  w3  p3  w2  c3  r2  p1  c1  p2  c2  check
+permutation  r1  w3  p3  w2  c3  r2  p2  p1  c1  c2  check
+permutation  r1  w3  p3  w2  c3  r2  p2  p1  c2  c1  check
+permutation  r1  w3  p3  w2  c3  r2  p2  c2  p1  c1  check
+permutation  r1  w3  p3  w2  c3  p1  r2  p2  c1  c2  check
+permutation  r1  w3  p3  w2  c3  p1  r2  p2  c2  c1  check
+permutation  r1  w3  p3  w2  c3  p1  r2  c1  p2  c2  check
+permutation  r1  w3  p3  w2  c3  p1  c1  r2  p2  c2  check
+permutation  r1  w3  p3  p1  r2  w2  p2  c3  c1  c2  check
+permutation  r1  w3  p3  p1  r2  w2  p2  c3  c2  c1  check
+permutation  r1  w3  p3  p1  r2  w2  c3  p2  c1  c2  check
+permutation  r1  w3  p3  p1  r2  w2  c3  p2  c2  c1  check
+permutation  r1  w3  p3  p1  r2  w2  c3  c1  p2  c2  check
+permutation  r1  w3  p3  p1  r2  c3  w2  p2  c1  c2  check
+permutation  r1  w3  p3  p1  r2  c3  w2  p2  c2  c1  check
+permutation  r1  w3  p3  p1  r2  c3  w2  c1  p2  c2  check
+permutation  r1  w3  p3  p1  r2  c3  c1  w2  p2  c2  check
+permutation  r1  w3  p3  p1  w2  r2  p2  c3  c1  c2  check
+permutation  r1  w3  p3  p1  w2  r2  p2  c3  c2  c1  check
+permutation  r1  w3  p3  p1  w2  r2  c3  p2  c1  c2  check
+permutation  r1  w3  p3  p1  w2  r2  c3  p2  c2  c1  check
+permutation  r1  w3  p3  p1  w2  r2  c3  c1  p2  c2  check
+permutation  r1  w3  p3  p1  w2  c3  r2  p2  c1  c2  check
+permutation  r1  w3  p3  p1  w2  c3  r2  p2  c2  c1  check
+permutation  r1  w3  p3  p1  w2  c3  r2  c1  p2  c2  check
+permutation  r1  w3  p3  p1  w2  c3  c1  r2  p2  c2  check
+permutation  r1  w3  p3  p1  c3  r2  w2  p2  c1  c2  check
+permutation  r1  w3  p3  p1  c3  r2  w2  p2  c2  c1  check
+permutation  r1  w3  p3  p1  c3  r2  w2  c1  p2  c2  check
+permutation  r1  w3  p3  p1  c3  r2  c1  w2  p2  c2  check
+permutation  r1  w3  p3  p1  c3  w2  r2  p2  c1  c2  check
+permutation  r1  w3  p3  p1  c3  w2  r2  p2  c2  c1  check
+permutation  r1  w3  p3  p1  c3  w2  r2  c1  p2  c2  check
+permutation  r1  w3  p3  p1  c3  w2  c1  r2  p2  c2  check
+permutation  r1  w3  p3  p1  c3  c1  r2  w2  p2  c2  check
+permutation  r1  w3  p3  p1  c3  c1  w2  r2  p2  c2  check
+permutation  r1  w3  p3  c3  r2  w2  p1  p2  c1  c2  check
+permutation  r1  w3  p3  c3  r2  w2  p1  p2  c2  c1  check
+permutation  r1  w3  p3  c3  r2  w2  p1  c1  p2  c2  check
+permutation  r1  w3  p3  c3  r2  w2  p2  p1  c1  c2  check
+permutation  r1  w3  p3  c3  r2  w2  p2  p1  c2  c1  check
+permutation  r1  w3  p3  c3  r2  w2  p2  c2  p1  c1  check
+permutation  r1  w3  p3  c3  r2  p1  w2  p2  c1  c2  check
+permutation  r1  w3  p3  c3  r2  p1  w2  p2  c2  c1  check
+permutation  r1  w3  p3  c3  r2  p1  w2  c1  p2  c2  check
+permutation  r1  w3  p3  c3  r2  p1  c1  w2  p2  c2  check
+permutation  r1  w3  p3  c3  w2  r2  p1  p2  c1  c2  check
+permutation  r1  w3  p3  c3  w2  r2  p1  p2  c2  c1  check
+permutation  r1  w3  p3  c3  w2  r2  p1  c1  p2  c2  check
+permutation  r1  w3  p3  c3  w2  r2  p2  p1  c1  c2  check
+permutation  r1  w3  p3  c3  w2  r2  p2  p1  c2  c1  check
+permutation  r1  w3  p3  c3  w2  r2  p2  c2  p1  c1  check
+permutation  r1  w3  p3  c3  w2  p1  r2  p2  c1  c2  check
+permutation  r1  w3  p3  c3  w2  p1  r2  p2  c2  c1  check
+permutation  r1  w3  p3  c3  w2  p1  r2  c1  p2  c2  check
+permutation  r1  w3  p3  c3  w2  p1  c1  r2  p2  c2  check
+permutation  r1  w3  p3  c3  p1  r2  w2  p2  c1  c2  check
+permutation  r1  w3  p3  c3  p1  r2  w2  p2  c2  c1  check
+permutation  r1  w3  p3  c3  p1  r2  w2  c1  p2  c2  check
+permutation  r1  w3  p3  c3  p1  r2  c1  w2  p2  c2  check
+permutation  r1  w3  p3  c3  p1  w2  r2  p2  c1  c2  check
+permutation  r1  w3  p3  c3  p1  w2  r2  p2  c2  c1  check
+permutation  r1  w3  p3  c3  p1  w2  r2  c1  p2  c2  check
+permutation  r1  w3  p3  c3  p1  w2  c1  r2  p2  c2  check
+permutation  r1  w3  p3  c3  p1  c1  r2  w2  p2  c2  check
+permutation  r1  w3  p3  c3  p1  c1  w2  r2  p2  c2  check
+permutation  r1  p1  r2  w2  w3  p2  p3  c3  c1  c2  check
+permutation  r1  p1  r2  w2  w3  p2  p3  c3  c2  c1  check
+permutation  r1  p1  r2  w2  w3  p3  p2  c3  c1  c2  check
+permutation  r1  p1  r2  w2  w3  p3  p2  c3  c2  c1  check
+permutation  r1  p1  r2  w2  w3  p3  c3  p2  c1  c2  check
+permutation  r1  p1  r2  w2  w3  p3  c3  p2  c2  c1  check
+permutation  r1  p1  r2  w2  w3  p3  c3  c1  p2  c2  check
+permutation  r1  p1  r2  w2  p2  w3  p3  c3  c1  c2  check
+permutation  r1  p1  r2  w2  p2  w3  p3  c3  c2  c1  check
+permutation  r1  p1  w2  w3  r2  p2  p3  c3  c1  c2  check
+permutation  r1  p1  w2  w3  r2  p2  p3  c3  c2  c1  check
+permutation  r1  p1  w2  w3  r2  p3  p2  c3  c1  c2  check
+permutation  r1  p1  w2  w3  r2  p3  p2  c3  c2  c1  check
+permutation  r1  p1  w2  w3  r2  p3  c3  p2  c1  c2  check
+permutation  r1  p1  w2  w3  r2  p3  c3  p2  c2  c1  check
+permutation  r1  p1  w2  w3  r2  p3  c3  c1  p2  c2  check
+permutation  r1  p1  w2  w3  p3  r2  p2  c3  c1  c2  check
+permutation  r1  p1  w2  w3  p3  r2  p2  c3  c2  c1  check
+permutation  r1  p1  w2  w3  p3  r2  c3  p2  c1  c2  check
+permutation  r1  p1  w2  w3  p3  r2  c3  p2  c2  c1  check
+permutation  r1  p1  w2  w3  p3  r2  c3  c1  p2  c2  check
+permutation  r1  p1  w2  w3  p3  c3  r2  p2  c1  c2  check
+permutation  r1  p1  w2  w3  p3  c3  r2  p2  c2  c1  check
+permutation  r1  p1  w2  w3  p3  c3  r2  c1  p2  c2  check
+permutation  r1  p1  w2  w3  p3  c3  c1  r2  p2  c2  check
+permutation  r1  p1  w3  r2  w2  p2  p3  c3  c1  c2  check
+permutation  r1  p1  w3  r2  w2  p2  p3  c3  c2  c1  check
+permutation  r1  p1  w3  r2  w2  p3  p2  c3  c1  c2  check
+permutation  r1  p1  w3  r2  w2  p3  p2  c3  c2  c1  check
+permutation  r1  p1  w3  r2  w2  p3  c3  p2  c1  c2  check
+permutation  r1  p1  w3  r2  w2  p3  c3  p2  c2  c1  check
+permutation  r1  p1  w3  r2  w2  p3  c3  c1  p2  c2  check
+permutation  r1  p1  w3  r2  p3  w2  p2  c3  c1  c2  check
+permutation  r1  p1  w3  r2  p3  w2  p2  c3  c2  c1  check
+permutation  r1  p1  w3  r2  p3  w2  c3  p2  c1  c2  check
+permutation  r1  p1  w3  r2  p3  w2  c3  p2  c2  c1  check
+permutation  r1  p1  w3  r2  p3  w2  c3  c1  p2  c2  check
+permutation  r1  p1  w3  r2  p3  c3  w2  p2  c1  c2  check
+permutation  r1  p1  w3  r2  p3  c3  w2  p2  c2  c1  check
+permutation  r1  p1  w3  r2  p3  c3  w2  c1  p2  c2  check
+permutation  r1  p1  w3  r2  p3  c3  c1  w2  p2  c2  check
+permutation  r1  p1  w3  w2  r2  p2  p3  c3  c1  c2  check
+permutation  r1  p1  w3  w2  r2  p2  p3  c3  c2  c1  check
+permutation  r1  p1  w3  w2  r2  p3  p2  c3  c1  c2  check
+permutation  r1  p1  w3  w2  r2  p3  p2  c3  c2  c1  check
+permutation  r1  p1  w3  w2  r2  p3  c3  p2  c1  c2  check
+permutation  r1  p1  w3  w2  r2  p3  c3  p2  c2  c1  check
+permutation  r1  p1  w3  w2  r2  p3  c3  c1  p2  c2  check
+permutation  r1  p1  w3  w2  p3  r2  p2  c3  c1  c2  check
+permutation  r1  p1  w3  w2  p3  r2  p2  c3  c2  c1  check
+permutation  r1  p1  w3  w2  p3  r2  c3  p2  c1  c2  check
+permutation  r1  p1  w3  w2  p3  r2  c3  p2  c2  c1  check
+permutation  r1  p1  w3  w2  p3  r2  c3  c1  p2  c2  check
+permutation  r1  p1  w3  w2  p3  c3  r2  p2  c1  c2  check
+permutation  r1  p1  w3  w2  p3  c3  r2  p2  c2  c1  check
+permutation  r1  p1  w3  w2  p3  c3  r2  c1  p2  c2  check
+permutation  r1  p1  w3  w2  p3  c3  c1  r2  p2  c2  check
+permutation  r1  p1  w3  p3  r2  w2  p2  c3  c1  c2  check
+permutation  r1  p1  w3  p3  r2  w2  p2  c3  c2  c1  check
+permutation  r1  p1  w3  p3  r2  w2  c3  p2  c1  c2  check
+permutation  r1  p1  w3  p3  r2  w2  c3  p2  c2  c1  check
+permutation  r1  p1  w3  p3  r2  w2  c3  c1  p2  c2  check
+permutation  r1  p1  w3  p3  r2  c3  w2  p2  c1  c2  check
+permutation  r1  p1  w3  p3  r2  c3  w2  p2  c2  c1  check
+permutation  r1  p1  w3  p3  r2  c3  w2  c1  p2  c2  check
+permutation  r1  p1  w3  p3  r2  c3  c1  w2  p2  c2  check
+permutation  r1  p1  w3  p3  w2  r2  p2  c3  c1  c2  check
+permutation  r1  p1  w3  p3  w2  r2  p2  c3  c2  c1  check
+permutation  r1  p1  w3  p3  w2  r2  c3  p2  c1  c2  check
+permutation  r1  p1  w3  p3  w2  r2  c3  p2  c2  c1  check
+permutation  r1  p1  w3  p3  w2  r2  c3  c1  p2  c2  check
+permutation  r1  p1  w3  p3  w2  c3  r2  p2  c1  c2  check
+permutation  r1  p1  w3  p3  w2  c3  r2  p2  c2  c1  check
+permutation  r1  p1  w3  p3  w2  c3  r2  c1  p2  c2  check
+permutation  r1  p1  w3  p3  w2  c3  c1  r2  p2  c2  check
+permutation  r1  p1  w3  p3  c3  r2  w2  p2  c1  c2  check
+permutation  r1  p1  w3  p3  c3  r2  w2  p2  c2  c1  check
+permutation  r1  p1  w3  p3  c3  r2  w2  c1  p2  c2  check
+permutation  r1  p1  w3  p3  c3  r2  c1  w2  p2  c2  check
+permutation  r1  p1  w3  p3  c3  w2  r2  p2  c1  c2  check
+permutation  r1  p1  w3  p3  c3  w2  r2  p2  c2  c1  check
+permutation  r1  p1  w3  p3  c3  w2  r2  c1  p2  c2  check
+permutation  r1  p1  w3  p3  c3  w2  c1  r2  p2  c2  check
+permutation  r1  p1  w3  p3  c3  c1  r2  w2  p2  c2  check
+permutation  r1  p1  w3  p3  c3  c1  w2  r2  p2  c2  check
+permutation  w2  r1  r2  w3  p1  p2  p3  c3  c1  c2  check
+permutation  w2  r1  r2  w3  p1  p2  p3  c3  c2  c1  check
+permutation  w2  r1  r2  w3  p1  p3  p2  c3  c1  c2  check
+permutation  w2  r1  r2  w3  p1  p3  p2  c3  c2  c1  check
+permutation  w2  r1  r2  w3  p1  p3  c3  p2  c1  c2  check
+permutation  w2  r1  r2  w3  p1  p3  c3  p2  c2  c1  check
+permutation  w2  r1  r2  w3  p1  p3  c3  c1  p2  c2  check
+permutation  w2  r1  r2  w3  p2  p1  p3  c3  c1  c2  check
+permutation  w2  r1  r2  w3  p2  p1  p3  c3  c2  c1  check
+permutation  w2  r1  r2  w3  p2  p3  p1  c3  c1  c2  check
+permutation  w2  r1  r2  w3  p2  p3  p1  c3  c2  c1  check
+permutation  w2  r1  r2  w3  p2  p3  c3  p1  c1  c2  check
+permutation  w2  r1  r2  w3  p2  p3  c3  p1  c2  c1  check
+permutation  w2  r1  r2  w3  p2  p3  c3  c2  p1  c1  check
+permutation  w2  r1  r2  w3  p3  p1  p2  c3  c1  c2  check
+permutation  w2  r1  r2  w3  p3  p1  p2  c3  c2  c1  check
+permutation  w2  r1  r2  w3  p3  p1  c3  p2  c1  c2  check
+permutation  w2  r1  r2  w3  p3  p1  c3  p2  c2  c1  check
+permutation  w2  r1  r2  w3  p3  p1  c3  c1  p2  c2  check
+permutation  w2  r1  r2  w3  p3  p2  p1  c3  c1  c2  check
+permutation  w2  r1  r2  w3  p3  p2  p1  c3  c2  c1  check
+permutation  w2  r1  r2  w3  p3  p2  c3  p1  c1  c2  check
+permutation  w2  r1  r2  w3  p3  p2  c3  p1  c2  c1  check
+permutation  w2  r1  r2  w3  p3  p2  c3  c2  p1  c1  check
+permutation  w2  r1  r2  w3  p3  c3  p1  p2  c1  c2  check
+permutation  w2  r1  r2  w3  p3  c3  p1  p2  c2  c1  check
+permutation  w2  r1  r2  w3  p3  c3  p1  c1  p2  c2  check
+permutation  w2  r1  r2  w3  p3  c3  p2  p1  c1  c2  check
+permutation  w2  r1  r2  w3  p3  c3  p2  p1  c2  c1  check
+permutation  w2  r1  r2  w3  p3  c3  p2  c2  p1  c1  check
+permutation  w2  r1  r2  p1  w3  p2  p3  c3  c1  c2  check
+permutation  w2  r1  r2  p1  w3  p2  p3  c3  c2  c1  check
+permutation  w2  r1  r2  p1  w3  p3  p2  c3  c1  c2  check
+permutation  w2  r1  r2  p1  w3  p3  p2  c3  c2  c1  check
+permutation  w2  r1  r2  p1  w3  p3  c3  p2  c1  c2  check
+permutation  w2  r1  r2  p1  w3  p3  c3  p2  c2  c1  check
+permutation  w2  r1  r2  p1  w3  p3  c3  c1  p2  c2  check
+permutation  w2  r1  r2  p1  p2  w3  p3  c3  c1  c2  check
+permutation  w2  r1  r2  p1  p2  w3  p3  c3  c2  c1  check
+permutation  w2  r1  r2  p2  w3  p1  p3  c3  c1  c2  check
+permutation  w2  r1  r2  p2  w3  p1  p3  c3  c2  c1  check
+permutation  w2  r1  r2  p2  w3  p3  p1  c3  c1  c2  check
+permutation  w2  r1  r2  p2  w3  p3  p1  c3  c2  c1  check
+permutation  w2  r1  r2  p2  w3  p3  c3  p1  c1  c2  check
+permutation  w2  r1  r2  p2  w3  p3  c3  p1  c2  c1  check
+permutation  w2  r1  r2  p2  w3  p3  c3  c2  p1  c1  check
+permutation  w2  r1  r2  p2  p1  w3  p3  c3  c1  c2  check
+permutation  w2  r1  r2  p2  p1  w3  p3  c3  c2  c1  check
+permutation  w2  r1  w3  r2  p1  p2  p3  c3  c1  c2  check
+permutation  w2  r1  w3  r2  p1  p2  p3  c3  c2  c1  check
+permutation  w2  r1  w3  r2  p1  p3  p2  c3  c1  c2  check
+permutation  w2  r1  w3  r2  p1  p3  p2  c3  c2  c1  check
+permutation  w2  r1  w3  r2  p1  p3  c3  p2  c1  c2  check
+permutation  w2  r1  w3  r2  p1  p3  c3  p2  c2  c1  check
+permutation  w2  r1  w3  r2  p1  p3  c3  c1  p2  c2  check
+permutation  w2  r1  w3  r2  p2  p1  p3  c3  c1  c2  check
+permutation  w2  r1  w3  r2  p2  p1  p3  c3  c2  c1  check
+permutation  w2  r1  w3  r2  p2  p3  p1  c3  c1  c2  check
+permutation  w2  r1  w3  r2  p2  p3  p1  c3  c2  c1  check
+permutation  w2  r1  w3  r2  p2  p3  c3  p1  c1  c2  check
+permutation  w2  r1  w3  r2  p2  p3  c3  p1  c2  c1  check
+permutation  w2  r1  w3  r2  p2  p3  c3  c2  p1  c1  check
+permutation  w2  r1  w3  r2  p3  p1  p2  c3  c1  c2  check
+permutation  w2  r1  w3  r2  p3  p1  p2  c3  c2  c1  check
+permutation  w2  r1  w3  r2  p3  p1  c3  p2  c1  c2  check
+permutation  w2  r1  w3  r2  p3  p1  c3  p2  c2  c1  check
+permutation  w2  r1  w3  r2  p3  p1  c3  c1  p2  c2  check
+permutation  w2  r1  w3  r2  p3  p2  p1  c3  c1  c2  check
+permutation  w2  r1  w3  r2  p3  p2  p1  c3  c2  c1  check
+permutation  w2  r1  w3  r2  p3  p2  c3  p1  c1  c2  check
+permutation  w2  r1  w3  r2  p3  p2  c3  p1  c2  c1  check
+permutation  w2  r1  w3  r2  p3  p2  c3  c2  p1  c1  check
+permutation  w2  r1  w3  r2  p3  c3  p1  p2  c1  c2  check
+permutation  w2  r1  w3  r2  p3  c3  p1  p2  c2  c1  check
+permutation  w2  r1  w3  r2  p3  c3  p1  c1  p2  c2  check
+permutation  w2  r1  w3  r2  p3  c3  p2  p1  c1  c2  check
+permutation  w2  r1  w3  r2  p3  c3  p2  p1  c2  c1  check
+permutation  w2  r1  w3  r2  p3  c3  p2  c2  p1  c1  check
+permutation  w2  r1  w3  p1  r2  p2  p3  c3  c1  c2  check
+permutation  w2  r1  w3  p1  r2  p2  p3  c3  c2  c1  check
+permutation  w2  r1  w3  p1  r2  p3  p2  c3  c1  c2  check
+permutation  w2  r1  w3  p1  r2  p3  p2  c3  c2  c1  check
+permutation  w2  r1  w3  p1  r2  p3  c3  p2  c1  c2  check
+permutation  w2  r1  w3  p1  r2  p3  c3  p2  c2  c1  check
+permutation  w2  r1  w3  p1  r2  p3  c3  c1  p2  c2  check
+permutation  w2  r1  w3  p1  p3  r2  p2  c3  c1  c2  check
+permutation  w2  r1  w3  p1  p3  r2  p2  c3  c2  c1  check
+permutation  w2  r1  w3  p1  p3  r2  c3  p2  c1  c2  check
+permutation  w2  r1  w3  p1  p3  r2  c3  p2  c2  c1  check
+permutation  w2  r1  w3  p1  p3  r2  c3  c1  p2  c2  check
+permutation  w2  r1  w3  p1  p3  c3  r2  p2  c1  c2  check
+permutation  w2  r1  w3  p1  p3  c3  r2  p2  c2  c1  check
+permutation  w2  r1  w3  p1  p3  c3  r2  c1  p2  c2  check
+permutation  w2  r1  w3  p1  p3  c3  c1  r2  p2  c2  check
+permutation  w2  r1  w3  p3  r2  p1  p2  c3  c1  c2  check
+permutation  w2  r1  w3  p3  r2  p1  p2  c3  c2  c1  check
+permutation  w2  r1  w3  p3  r2  p1  c3  p2  c1  c2  check
+permutation  w2  r1  w3  p3  r2  p1  c3  p2  c2  c1  check
+permutation  w2  r1  w3  p3  r2  p1  c3  c1  p2  c2  check
+permutation  w2  r1  w3  p3  r2  p2  p1  c3  c1  c2  check
+permutation  w2  r1  w3  p3  r2  p2  p1  c3  c2  c1  check
+permutation  w2  r1  w3  p3  r2  p2  c3  p1  c1  c2  check
+permutation  w2  r1  w3  p3  r2  p2  c3  p1  c2  c1  check
+permutation  w2  r1  w3  p3  r2  p2  c3  c2  p1  c1  check
+permutation  w2  r1  w3  p3  r2  c3  p1  p2  c1  c2  check
+permutation  w2  r1  w3  p3  r2  c3  p1  p2  c2  c1  check
+permutation  w2  r1  w3  p3  r2  c3  p1  c1  p2  c2  check
+permutation  w2  r1  w3  p3  r2  c3  p2  p1  c1  c2  check
+permutation  w2  r1  w3  p3  r2  c3  p2  p1  c2  c1  check
+permutation  w2  r1  w3  p3  r2  c3  p2  c2  p1  c1  check
+permutation  w2  r1  w3  p3  p1  r2  p2  c3  c1  c2  check
+permutation  w2  r1  w3  p3  p1  r2  p2  c3  c2  c1  check
+permutation  w2  r1  w3  p3  p1  r2  c3  p2  c1  c2  check
+permutation  w2  r1  w3  p3  p1  r2  c3  p2  c2  c1  check
+permutation  w2  r1  w3  p3  p1  r2  c3  c1  p2  c2  check
+permutation  w2  r1  w3  p3  p1  c3  r2  p2  c1  c2  check
+permutation  w2  r1  w3  p3  p1  c3  r2  p2  c2  c1  check
+permutation  w2  r1  w3  p3  p1  c3  r2  c1  p2  c2  check
+permutation  w2  r1  w3  p3  p1  c3  c1  r2  p2  c2  check
+permutation  w2  r1  w3  p3  c3  r2  p1  p2  c1  c2  check
+permutation  w2  r1  w3  p3  c3  r2  p1  p2  c2  c1  check
+permutation  w2  r1  w3  p3  c3  r2  p1  c1  p2  c2  check
+permutation  w2  r1  w3  p3  c3  r2  p2  p1  c1  c2  check
+permutation  w2  r1  w3  p3  c3  r2  p2  p1  c2  c1  check
+permutation  w2  r1  w3  p3  c3  r2  p2  c2  p1  c1  check
+permutation  w2  r1  w3  p3  c3  p1  r2  p2  c1  c2  check
+permutation  w2  r1  w3  p3  c3  p1  r2  p2  c2  c1  check
+permutation  w2  r1  w3  p3  c3  p1  r2  c1  p2  c2  check
+permutation  w2  r1  w3  p3  c3  p1  c1  r2  p2  c2  check
+permutation  w2  r1  p1  r2  w3  p2  p3  c3  c1  c2  check
+permutation  w2  r1  p1  r2  w3  p2  p3  c3  c2  c1  check
+permutation  w2  r1  p1  r2  w3  p3  p2  c3  c1  c2  check
+permutation  w2  r1  p1  r2  w3  p3  p2  c3  c2  c1  check
+permutation  w2  r1  p1  r2  w3  p3  c3  p2  c1  c2  check
+permutation  w2  r1  p1  r2  w3  p3  c3  p2  c2  c1  check
+permutation  w2  r1  p1  r2  w3  p3  c3  c1  p2  c2  check
+permutation  w2  r1  p1  r2  p2  w3  p3  c3  c1  c2  check
+permutation  w2  r1  p1  r2  p2  w3  p3  c3  c2  c1  check
+permutation  w2  r1  p1  w3  r2  p2  p3  c3  c1  c2  check
+permutation  w2  r1  p1  w3  r2  p2  p3  c3  c2  c1  check
+permutation  w2  r1  p1  w3  r2  p3  p2  c3  c1  c2  check
+permutation  w2  r1  p1  w3  r2  p3  p2  c3  c2  c1  check
+permutation  w2  r1  p1  w3  r2  p3  c3  p2  c1  c2  check
+permutation  w2  r1  p1  w3  r2  p3  c3  p2  c2  c1  check
+permutation  w2  r1  p1  w3  r2  p3  c3  c1  p2  c2  check
+permutation  w2  r1  p1  w3  p3  r2  p2  c3  c1  c2  check
+permutation  w2  r1  p1  w3  p3  r2  p2  c3  c2  c1  check
+permutation  w2  r1  p1  w3  p3  r2  c3  p2  c1  c2  check
+permutation  w2  r1  p1  w3  p3  r2  c3  p2  c2  c1  check
+permutation  w2  r1  p1  w3  p3  r2  c3  c1  p2  c2  check
+permutation  w2  r1  p1  w3  p3  c3  r2  p2  c1  c2  check
+permutation  w2  r1  p1  w3  p3  c3  r2  p2  c2  c1  check
+permutation  w2  r1  p1  w3  p3  c3  r2  c1  p2  c2  check
+permutation  w2  r1  p1  w3  p3  c3  c1  r2  p2  c2  check
+permutation  w3  r1  r2  w2  p1  p2  p3  c3  c1  c2  check
+permutation  w3  r1  r2  w2  p1  p2  p3  c3  c2  c1  check
+permutation  w3  r1  r2  w2  p1  p3  p2  c3  c1  c2  check
+permutation  w3  r1  r2  w2  p1  p3  p2  c3  c2  c1  check
+permutation  w3  r1  r2  w2  p1  p3  c3  p2  c1  c2  check
+permutation  w3  r1  r2  w2  p1  p3  c3  p2  c2  c1  check
+permutation  w3  r1  r2  w2  p1  p3  c3  c1  p2  c2  check
+permutation  w3  r1  r2  w2  p2  p1  p3  c3  c1  c2  check
+permutation  w3  r1  r2  w2  p2  p1  p3  c3  c2  c1  check
+permutation  w3  r1  r2  w2  p2  p3  p1  c3  c1  c2  check
+permutation  w3  r1  r2  w2  p2  p3  p1  c3  c2  c1  check
+permutation  w3  r1  r2  w2  p2  p3  c3  p1  c1  c2  check
+permutation  w3  r1  r2  w2  p2  p3  c3  p1  c2  c1  check
+permutation  w3  r1  r2  w2  p2  p3  c3  c2  p1  c1  check
+permutation  w3  r1  r2  w2  p3  p1  p2  c3  c1  c2  check
+permutation  w3  r1  r2  w2  p3  p1  p2  c3  c2  c1  check
+permutation  w3  r1  r2  w2  p3  p1  c3  p2  c1  c2  check
+permutation  w3  r1  r2  w2  p3  p1  c3  p2  c2  c1  check
+permutation  w3  r1  r2  w2  p3  p1  c3  c1  p2  c2  check
+permutation  w3  r1  r2  w2  p3  p2  p1  c3  c1  c2  check
+permutation  w3  r1  r2  w2  p3  p2  p1  c3  c2  c1  check
+permutation  w3  r1  r2  w2  p3  p2  c3  p1  c1  c2  check
+permutation  w3  r1  r2  w2  p3  p2  c3  p1  c2  c1  check
+permutation  w3  r1  r2  w2  p3  p2  c3  c2  p1  c1  check
+permutation  w3  r1  r2  w2  p3  c3  p1  p2  c1  c2  check
+permutation  w3  r1  r2  w2  p3  c3  p1  p2  c2  c1  check
+permutation  w3  r1  r2  w2  p3  c3  p1  c1  p2  c2  check
+permutation  w3  r1  r2  w2  p3  c3  p2  p1  c1  c2  check
+permutation  w3  r1  r2  w2  p3  c3  p2  p1  c2  c1  check
+permutation  w3  r1  r2  w2  p3  c3  p2  c2  p1  c1  check
+permutation  w3  r1  r2  p1  w2  p2  p3  c3  c1  c2  check
+permutation  w3  r1  r2  p1  w2  p2  p3  c3  c2  c1  check
+permutation  w3  r1  r2  p1  w2  p3  p2  c3  c1  c2  check
+permutation  w3  r1  r2  p1  w2  p3  p2  c3  c2  c1  check
+permutation  w3  r1  r2  p1  w2  p3  c3  p2  c1  c2  check
+permutation  w3  r1  r2  p1  w2  p3  c3  p2  c2  c1  check
+permutation  w3  r1  r2  p1  w2  p3  c3  c1  p2  c2  check
+permutation  w3  r1  r2  p1  p3  w2  p2  c3  c1  c2  check
+permutation  w3  r1  r2  p1  p3  w2  p2  c3  c2  c1  check
+permutation  w3  r1  r2  p1  p3  w2  c3  p2  c1  c2  check
+permutation  w3  r1  r2  p1  p3  w2  c3  p2  c2  c1  check
+permutation  w3  r1  r2  p1  p3  w2  c3  c1  p2  c2  check
+permutation  w3  r1  r2  p1  p3  c3  w2  p2  c1  c2  check
+permutation  w3  r1  r2  p1  p3  c3  w2  p2  c2  c1  check
+permutation  w3  r1  r2  p1  p3  c3  w2  c1  p2  c2  check
+permutation  w3  r1  r2  p1  p3  c3  c1  w2  p2  c2  check
+permutation  w3  r1  r2  p3  w2  p1  p2  c3  c1  c2  check
+permutation  w3  r1  r2  p3  w2  p1  p2  c3  c2  c1  check
+permutation  w3  r1  r2  p3  w2  p1  c3  p2  c1  c2  check
+permutation  w3  r1  r2  p3  w2  p1  c3  p2  c2  c1  check
+permutation  w3  r1  r2  p3  w2  p1  c3  c1  p2  c2  check
+permutation  w3  r1  r2  p3  w2  p2  p1  c3  c1  c2  check
+permutation  w3  r1  r2  p3  w2  p2  p1  c3  c2  c1  check
+permutation  w3  r1  r2  p3  w2  p2  c3  p1  c1  c2  check
+permutation  w3  r1  r2  p3  w2  p2  c3  p1  c2  c1  check
+permutation  w3  r1  r2  p3  w2  p2  c3  c2  p1  c1  check
+permutation  w3  r1  r2  p3  w2  c3  p1  p2  c1  c2  check
+permutation  w3  r1  r2  p3  w2  c3  p1  p2  c2  c1  check
+permutation  w3  r1  r2  p3  w2  c3  p1  c1  p2  c2  check
+permutation  w3  r1  r2  p3  w2  c3  p2  p1  c1  c2  check
+permutation  w3  r1  r2  p3  w2  c3  p2  p1  c2  c1  check
+permutation  w3  r1  r2  p3  w2  c3  p2  c2  p1  c1  check
+permutation  w3  r1  r2  p3  p1  w2  p2  c3  c1  c2  check
+permutation  w3  r1  r2  p3  p1  w2  p2  c3  c2  c1  check
+permutation  w3  r1  r2  p3  p1  w2  c3  p2  c1  c2  check
+permutation  w3  r1  r2  p3  p1  w2  c3  p2  c2  c1  check
+permutation  w3  r1  r2  p3  p1  w2  c3  c1  p2  c2  check
+permutation  w3  r1  r2  p3  p1  c3  w2  p2  c1  c2  check
+permutation  w3  r1  r2  p3  p1  c3  w2  p2  c2  c1  check
+permutation  w3  r1  r2  p3  p1  c3  w2  c1  p2  c2  check
+permutation  w3  r1  r2  p3  p1  c3  c1  w2  p2  c2  check
+permutation  w3  r1  r2  p3  c3  w2  p1  p2  c1  c2  check
+permutation  w3  r1  r2  p3  c3  w2  p1  p2  c2  c1  check
+permutation  w3  r1  r2  p3  c3  w2  p1  c1  p2  c2  check
+permutation  w3  r1  r2  p3  c3  w2  p2  p1  c1  c2  check
+permutation  w3  r1  r2  p3  c3  w2  p2  p1  c2  c1  check
+permutation  w3  r1  r2  p3  c3  w2  p2  c2  p1  c1  check
+permutation  w3  r1  r2  p3  c3  p1  w2  p2  c1  c2  check
+permutation  w3  r1  r2  p3  c3  p1  w2  p2  c2  c1  check
+permutation  w3  r1  r2  p3  c3  p1  w2  c1  p2  c2  check
+permutation  w3  r1  r2  p3  c3  p1  c1  w2  p2  c2  check
+permutation  w3  r1  w2  r2  p1  p2  p3  c3  c1  c2  check
+permutation  w3  r1  w2  r2  p1  p2  p3  c3  c2  c1  check
+permutation  w3  r1  w2  r2  p1  p3  p2  c3  c1  c2  check
+permutation  w3  r1  w2  r2  p1  p3  p2  c3  c2  c1  check
+permutation  w3  r1  w2  r2  p1  p3  c3  p2  c1  c2  check
+permutation  w3  r1  w2  r2  p1  p3  c3  p2  c2  c1  check
+permutation  w3  r1  w2  r2  p1  p3  c3  c1  p2  c2  check
+permutation  w3  r1  w2  r2  p2  p1  p3  c3  c1  c2  check
+permutation  w3  r1  w2  r2  p2  p1  p3  c3  c2  c1  check
+permutation  w3  r1  w2  r2  p2  p3  p1  c3  c1  c2  check
+permutation  w3  r1  w2  r2  p2  p3  p1  c3  c2  c1  check
+permutation  w3  r1  w2  r2  p2  p3  c3  p1  c1  c2  check
+permutation  w3  r1  w2  r2  p2  p3  c3  p1  c2  c1  check
+permutation  w3  r1  w2  r2  p2  p3  c3  c2  p1  c1  check
+permutation  w3  r1  w2  r2  p3  p1  p2  c3  c1  c2  check
+permutation  w3  r1  w2  r2  p3  p1  p2  c3  c2  c1  check
+permutation  w3  r1  w2  r2  p3  p1  c3  p2  c1  c2  check
+permutation  w3  r1  w2  r2  p3  p1  c3  p2  c2  c1  check
+permutation  w3  r1  w2  r2  p3  p1  c3  c1  p2  c2  check
+permutation  w3  r1  w2  r2  p3  p2  p1  c3  c1  c2  check
+permutation  w3  r1  w2  r2  p3  p2  p1  c3  c2  c1  check
+permutation  w3  r1  w2  r2  p3  p2  c3  p1  c1  c2  check
+permutation  w3  r1  w2  r2  p3  p2  c3  p1  c2  c1  check
+permutation  w3  r1  w2  r2  p3  p2  c3  c2  p1  c1  check
+permutation  w3  r1  w2  r2  p3  c3  p1  p2  c1  c2  check
+permutation  w3  r1  w2  r2  p3  c3  p1  p2  c2  c1  check
+permutation  w3  r1  w2  r2  p3  c3  p1  c1  p2  c2  check
+permutation  w3  r1  w2  r2  p3  c3  p2  p1  c1  c2  check
+permutation  w3  r1  w2  r2  p3  c3  p2  p1  c2  c1  check
+permutation  w3  r1  w2  r2  p3  c3  p2  c2  p1  c1  check
+permutation  w3  r1  w2  p1  r2  p2  p3  c3  c1  c2  check
+permutation  w3  r1  w2  p1  r2  p2  p3  c3  c2  c1  check
+permutation  w3  r1  w2  p1  r2  p3  p2  c3  c1  c2  check
+permutation  w3  r1  w2  p1  r2  p3  p2  c3  c2  c1  check
+permutation  w3  r1  w2  p1  r2  p3  c3  p2  c1  c2  check
+permutation  w3  r1  w2  p1  r2  p3  c3  p2  c2  c1  check
+permutation  w3  r1  w2  p1  r2  p3  c3  c1  p2  c2  check
+permutation  w3  r1  w2  p1  p3  r2  p2  c3  c1  c2  check
+permutation  w3  r1  w2  p1  p3  r2  p2  c3  c2  c1  check
+permutation  w3  r1  w2  p1  p3  r2  c3  p2  c1  c2  check
+permutation  w3  r1  w2  p1  p3  r2  c3  p2  c2  c1  check
+permutation  w3  r1  w2  p1  p3  r2  c3  c1  p2  c2  check
+permutation  w3  r1  w2  p1  p3  c3  r2  p2  c1  c2  check
+permutation  w3  r1  w2  p1  p3  c3  r2  p2  c2  c1  check
+permutation  w3  r1  w2  p1  p3  c3  r2  c1  p2  c2  check
+permutation  w3  r1  w2  p1  p3  c3  c1  r2  p2  c2  check
+permutation  w3  r1  w2  p3  r2  p1  p2  c3  c1  c2  check
+permutation  w3  r1  w2  p3  r2  p1  p2  c3  c2  c1  check
+permutation  w3  r1  w2  p3  r2  p1  c3  p2  c1  c2  check
+permutation  w3  r1  w2  p3  r2  p1  c3  p2  c2  c1  check
+permutation  w3  r1  w2  p3  r2  p1  c3  c1  p2  c2  check
+permutation  w3  r1  w2  p3  r2  p2  p1  c3  c1  c2  check
+permutation  w3  r1  w2  p3  r2  p2  p1  c3  c2  c1  check
+permutation  w3  r1  w2  p3  r2  p2  c3  p1  c1  c2  check
+permutation  w3  r1  w2  p3  r2  p2  c3  p1  c2  c1  check
+permutation  w3  r1  w2  p3  r2  p2  c3  c2  p1  c1  check
+permutation  w3  r1  w2  p3  r2  c3  p1  p2  c1  c2  check
+permutation  w3  r1  w2  p3  r2  c3  p1  p2  c2  c1  check
+permutation  w3  r1  w2  p3  r2  c3  p1  c1  p2  c2  check
+permutation  w3  r1  w2  p3  r2  c3  p2  p1  c1  c2  check
+permutation  w3  r1  w2  p3  r2  c3  p2  p1  c2  c1  check
+permutation  w3  r1  w2  p3  r2  c3  p2  c2  p1  c1  check
+permutation  w3  r1  w2  p3  p1  r2  p2  c3  c1  c2  check
+permutation  w3  r1  w2  p3  p1  r2  p2  c3  c2  c1  check
+permutation  w3  r1  w2  p3  p1  r2  c3  p2  c1  c2  check
+permutation  w3  r1  w2  p3  p1  r2  c3  p2  c2  c1  check
+permutation  w3  r1  w2  p3  p1  r2  c3  c1  p2  c2  check
+permutation  w3  r1  w2  p3  p1  c3  r2  p2  c1  c2  check
+permutation  w3  r1  w2  p3  p1  c3  r2  p2  c2  c1  check
+permutation  w3  r1  w2  p3  p1  c3  r2  c1  p2  c2  check
+permutation  w3  r1  w2  p3  p1  c3  c1  r2  p2  c2  check
+permutation  w3  r1  w2  p3  c3  r2  p1  p2  c1  c2  check
+permutation  w3  r1  w2  p3  c3  r2  p1  p2  c2  c1  check
+permutation  w3  r1  w2  p3  c3  r2  p1  c1  p2  c2  check
+permutation  w3  r1  w2  p3  c3  r2  p2  p1  c1  c2  check
+permutation  w3  r1  w2  p3  c3  r2  p2  p1  c2  c1  check
+permutation  w3  r1  w2  p3  c3  r2  p2  c2  p1  c1  check
+permutation  w3  r1  w2  p3  c3  p1  r2  p2  c1  c2  check
+permutation  w3  r1  w2  p3  c3  p1  r2  p2  c2  c1  check
+permutation  w3  r1  w2  p3  c3  p1  r2  c1  p2  c2  check
+permutation  w3  r1  w2  p3  c3  p1  c1  r2  p2  c2  check
+permutation  w3  r1  p1  r2  w2  p2  p3  c3  c1  c2  check
+permutation  w3  r1  p1  r2  w2  p2  p3  c3  c2  c1  check
+permutation  w3  r1  p1  r2  w2  p3  p2  c3  c1  c2  check
+permutation  w3  r1  p1  r2  w2  p3  p2  c3  c2  c1  check
+permutation  w3  r1  p1  r2  w2  p3  c3  p2  c1  c2  check
+permutation  w3  r1  p1  r2  w2  p3  c3  p2  c2  c1  check
+permutation  w3  r1  p1  r2  w2  p3  c3  c1  p2  c2  check
+permutation  w3  r1  p1  r2  p3  w2  p2  c3  c1  c2  check
+permutation  w3  r1  p1  r2  p3  w2  p2  c3  c2  c1  check
+permutation  w3  r1  p1  r2  p3  w2  c3  p2  c1  c2  check
+permutation  w3  r1  p1  r2  p3  w2  c3  p2  c2  c1  check
+permutation  w3  r1  p1  r2  p3  w2  c3  c1  p2  c2  check
+permutation  w3  r1  p1  r2  p3  c3  w2  p2  c1  c2  check
+permutation  w3  r1  p1  r2  p3  c3  w2  p2  c2  c1  check
+permutation  w3  r1  p1  r2  p3  c3  w2  c1  p2  c2  check
+permutation  w3  r1  p1  r2  p3  c3  c1  w2  p2  c2  check
+permutation  w3  r1  p1  w2  r2  p2  p3  c3  c1  c2  check
+permutation  w3  r1  p1  w2  r2  p2  p3  c3  c2  c1  check
+permutation  w3  r1  p1  w2  r2  p3  p2  c3  c1  c2  check
+permutation  w3  r1  p1  w2  r2  p3  p2  c3  c2  c1  check
+permutation  w3  r1  p1  w2  r2  p3  c3  p2  c1  c2  check
+permutation  w3  r1  p1  w2  r2  p3  c3  p2  c2  c1  check
+permutation  w3  r1  p1  w2  r2  p3  c3  c1  p2  c2  check
+permutation  w3  r1  p1  w2  p3  r2  p2  c3  c1  c2  check
+permutation  w3  r1  p1  w2  p3  r2  p2  c3  c2  c1  check
+permutation  w3  r1  p1  w2  p3  r2  c3  p2  c1  c2  check
+permutation  w3  r1  p1  w2  p3  r2  c3  p2  c2  c1  check
+permutation  w3  r1  p1  w2  p3  r2  c3  c1  p2  c2  check
+permutation  w3  r1  p1  w2  p3  c3  r2  p2  c1  c2  check
+permutation  w3  r1  p1  w2  p3  c3  r2  p2  c2  c1  check
+permutation  w3  r1  p1  w2  p3  c3  r2  c1  p2  c2  check
+permutation  w3  r1  p1  w2  p3  c3  c1  r2  p2  c2  check
+permutation  w3  r1  p1  p3  r2  w2  p2  c3  c1  c2  check
+permutation  w3  r1  p1  p3  r2  w2  p2  c3  c2  c1  check
+permutation  w3  r1  p1  p3  r2  w2  c3  p2  c1  c2  check
+permutation  w3  r1  p1  p3  r2  w2  c3  p2  c2  c1  check
+permutation  w3  r1  p1  p3  r2  w2  c3  c1  p2  c2  check
+permutation  w3  r1  p1  p3  r2  c3  w2  p2  c1  c2  check
+permutation  w3  r1  p1  p3  r2  c3  w2  p2  c2  c1  check
+permutation  w3  r1  p1  p3  r2  c3  w2  c1  p2  c2  check
+permutation  w3  r1  p1  p3  r2  c3  c1  w2  p2  c2  check
+permutation  w3  r1  p1  p3  w2  r2  p2  c3  c1  c2  check
+permutation  w3  r1  p1  p3  w2  r2  p2  c3  c2  c1  check
+permutation  w3  r1  p1  p3  w2  r2  c3  p2  c1  c2  check
+permutation  w3  r1  p1  p3  w2  r2  c3  p2  c2  c1  check
+permutation  w3  r1  p1  p3  w2  r2  c3  c1  p2  c2  check
+permutation  w3  r1  p1  p3  w2  c3  r2  p2  c1  c2  check
+permutation  w3  r1  p1  p3  w2  c3  r2  p2  c2  c1  check
+permutation  w3  r1  p1  p3  w2  c3  r2  c1  p2  c2  check
+permutation  w3  r1  p1  p3  w2  c3  c1  r2  p2  c2  check
+permutation  w3  r1  p1  p3  c3  r2  w2  p2  c1  c2  check
+permutation  w3  r1  p1  p3  c3  r2  w2  p2  c2  c1  check
+permutation  w3  r1  p1  p3  c3  r2  w2  c1  p2  c2  check
+permutation  w3  r1  p1  p3  c3  r2  c1  w2  p2  c2  check
+permutation  w3  r1  p1  p3  c3  w2  r2  p2  c1  c2  check
+permutation  w3  r1  p1  p3  c3  w2  r2  p2  c2  c1  check
+permutation  w3  r1  p1  p3  c3  w2  r2  c1  p2  c2  check
+permutation  w3  r1  p1  p3  c3  w2  c1  r2  p2  c2  check
+permutation  w3  r1  p1  p3  c3  c1  r2  w2  p2  c2  check
+permutation  w3  r1  p1  p3  c3  c1  w2  r2  p2  c2  check
+permutation  w3  r1  p3  r2  w2  p1  p2  c3  c1  c2  check
+permutation  w3  r1  p3  r2  w2  p1  p2  c3  c2  c1  check
+permutation  w3  r1  p3  r2  w2  p1  c3  p2  c1  c2  check
+permutation  w3  r1  p3  r2  w2  p1  c3  p2  c2  c1  check
+permutation  w3  r1  p3  r2  w2  p1  c3  c1  p2  c2  check
+permutation  w3  r1  p3  r2  w2  p2  p1  c3  c1  c2  check
+permutation  w3  r1  p3  r2  w2  p2  p1  c3  c2  c1  check
+permutation  w3  r1  p3  r2  w2  p2  c3  p1  c1  c2  check
+permutation  w3  r1  p3  r2  w2  p2  c3  p1  c2  c1  check
+permutation  w3  r1  p3  r2  w2  p2  c3  c2  p1  c1  check
+permutation  w3  r1  p3  r2  w2  c3  p1  p2  c1  c2  check
+permutation  w3  r1  p3  r2  w2  c3  p1  p2  c2  c1  check
+permutation  w3  r1  p3  r2  w2  c3  p1  c1  p2  c2  check
+permutation  w3  r1  p3  r2  w2  c3  p2  p1  c1  c2  check
+permutation  w3  r1  p3  r2  w2  c3  p2  p1  c2  c1  check
+permutation  w3  r1  p3  r2  w2  c3  p2  c2  p1  c1  check
+permutation  w3  r1  p3  r2  p1  w2  p2  c3  c1  c2  check
+permutation  w3  r1  p3  r2  p1  w2  p2  c3  c2  c1  check
+permutation  w3  r1  p3  r2  p1  w2  c3  p2  c1  c2  check
+permutation  w3  r1  p3  r2  p1  w2  c3  p2  c2  c1  check
+permutation  w3  r1  p3  r2  p1  w2  c3  c1  p2  c2  check
+permutation  w3  r1  p3  r2  p1  c3  w2  p2  c1  c2  check
+permutation  w3  r1  p3  r2  p1  c3  w2  p2  c2  c1  check
+permutation  w3  r1  p3  r2  p1  c3  w2  c1  p2  c2  check
+permutation  w3  r1  p3  r2  p1  c3  c1  w2  p2  c2  check
+permutation  w3  r1  p3  r2  c3  w2  p1  p2  c1  c2  check
+permutation  w3  r1  p3  r2  c3  w2  p1  p2  c2  c1  check
+permutation  w3  r1  p3  r2  c3  w2  p1  c1  p2  c2  check
+permutation  w3  r1  p3  r2  c3  w2  p2  p1  c1  c2  check
+permutation  w3  r1  p3  r2  c3  w2  p2  p1  c2  c1  check
+permutation  w3  r1  p3  r2  c3  w2  p2  c2  p1  c1  check
+permutation  w3  r1  p3  r2  c3  p1  w2  p2  c1  c2  check
+permutation  w3  r1  p3  r2  c3  p1  w2  p2  c2  c1  check
+permutation  w3  r1  p3  r2  c3  p1  w2  c1  p2  c2  check
+permutation  w3  r1  p3  r2  c3  p1  c1  w2  p2  c2  check
+permutation  w3  r1  p3  w2  r2  p1  p2  c3  c1  c2  check
+permutation  w3  r1  p3  w2  r2  p1  p2  c3  c2  c1  check
+permutation  w3  r1  p3  w2  r2  p1  c3  p2  c1  c2  check
+permutation  w3  r1  p3  w2  r2  p1  c3  p2  c2  c1  check
+permutation  w3  r1  p3  w2  r2  p1  c3  c1  p2  c2  check
+permutation  w3  r1  p3  w2  r2  p2  p1  c3  c1  c2  check
+permutation  w3  r1  p3  w2  r2  p2  p1  c3  c2  c1  check
+permutation  w3  r1  p3  w2  r2  p2  c3  p1  c1  c2  check
+permutation  w3  r1  p3  w2  r2  p2  c3  p1  c2  c1  check
+permutation  w3  r1  p3  w2  r2  p2  c3  c2  p1  c1  check
+permutation  w3  r1  p3  w2  r2  c3  p1  p2  c1  c2  check
+permutation  w3  r1  p3  w2  r2  c3  p1  p2  c2  c1  check
+permutation  w3  r1  p3  w2  r2  c3  p1  c1  p2  c2  check
+permutation  w3  r1  p3  w2  r2  c3  p2  p1  c1  c2  check
+permutation  w3  r1  p3  w2  r2  c3  p2  p1  c2  c1  check
+permutation  w3  r1  p3  w2  r2  c3  p2  c2  p1  c1  check
+permutation  w3  r1  p3  w2  p1  r2  p2  c3  c1  c2  check
+permutation  w3  r1  p3  w2  p1  r2  p2  c3  c2  c1  check
+permutation  w3  r1  p3  w2  p1  r2  c3  p2  c1  c2  check
+permutation  w3  r1  p3  w2  p1  r2  c3  p2  c2  c1  check
+permutation  w3  r1  p3  w2  p1  r2  c3  c1  p2  c2  check
+permutation  w3  r1  p3  w2  p1  c3  r2  p2  c1  c2  check
+permutation  w3  r1  p3  w2  p1  c3  r2  p2  c2  c1  check
+permutation  w3  r1  p3  w2  p1  c3  r2  c1  p2  c2  check
+permutation  w3  r1  p3  w2  p1  c3  c1  r2  p2  c2  check
+permutation  w3  r1  p3  w2  c3  r2  p1  p2  c1  c2  check
+permutation  w3  r1  p3  w2  c3  r2  p1  p2  c2  c1  check
+permutation  w3  r1  p3  w2  c3  r2  p1  c1  p2  c2  check
+permutation  w3  r1  p3  w2  c3  r2  p2  p1  c1  c2  check
+permutation  w3  r1  p3  w2  c3  r2  p2  p1  c2  c1  check
+permutation  w3  r1  p3  w2  c3  r2  p2  c2  p1  c1  check
+permutation  w3  r1  p3  w2  c3  p1  r2  p2  c1  c2  check
+permutation  w3  r1  p3  w2  c3  p1  r2  p2  c2  c1  check
+permutation  w3  r1  p3  w2  c3  p1  r2  c1  p2  c2  check
+permutation  w3  r1  p3  w2  c3  p1  c1  r2  p2  c2  check
+permutation  w3  r1  p3  p1  r2  w2  p2  c3  c1  c2  check
+permutation  w3  r1  p3  p1  r2  w2  p2  c3  c2  c1  check
+permutation  w3  r1  p3  p1  r2  w2  c3  p2  c1  c2  check
+permutation  w3  r1  p3  p1  r2  w2  c3  p2  c2  c1  check
+permutation  w3  r1  p3  p1  r2  w2  c3  c1  p2  c2  check
+permutation  w3  r1  p3  p1  r2  c3  w2  p2  c1  c2  check
+permutation  w3  r1  p3  p1  r2  c3  w2  p2  c2  c1  check
+permutation  w3  r1  p3  p1  r2  c3  w2  c1  p2  c2  check
+permutation  w3  r1  p3  p1  r2  c3  c1  w2  p2  c2  check
+permutation  w3  r1  p3  p1  w2  r2  p2  c3  c1  c2  check
+permutation  w3  r1  p3  p1  w2  r2  p2  c3  c2  c1  check
+permutation  w3  r1  p3  p1  w2  r2  c3  p2  c1  c2  check
+permutation  w3  r1  p3  p1  w2  r2  c3  p2  c2  c1  check
+permutation  w3  r1  p3  p1  w2  r2  c3  c1  p2  c2  check
+permutation  w3  r1  p3  p1  w2  c3  r2  p2  c1  c2  check
+permutation  w3  r1  p3  p1  w2  c3  r2  p2  c2  c1  check
+permutation  w3  r1  p3  p1  w2  c3  r2  c1  p2  c2  check
+permutation  w3  r1  p3  p1  w2  c3  c1  r2  p2  c2  check
+permutation  w3  r1  p3  p1  c3  r2  w2  p2  c1  c2  check
+permutation  w3  r1  p3  p1  c3  r2  w2  p2  c2  c1  check
+permutation  w3  r1  p3  p1  c3  r2  w2  c1  p2  c2  check
+permutation  w3  r1  p3  p1  c3  r2  c1  w2  p2  c2  check
+permutation  w3  r1  p3  p1  c3  w2  r2  p2  c1  c2  check
+permutation  w3  r1  p3  p1  c3  w2  r2  p2  c2  c1  check
+permutation  w3  r1  p3  p1  c3  w2  r2  c1  p2  c2  check
+permutation  w3  r1  p3  p1  c3  w2  c1  r2  p2  c2  check
+permutation  w3  r1  p3  p1  c3  c1  r2  w2  p2  c2  check
+permutation  w3  r1  p3  p1  c3  c1  w2  r2  p2  c2  check
+permutation  w3  r1  p3  c3  r2  w2  p1  p2  c1  c2  check
+permutation  w3  r1  p3  c3  r2  w2  p1  p2  c2  c1  check
+permutation  w3  r1  p3  c3  r2  w2  p1  c1  p2  c2  check
+permutation  w3  r1  p3  c3  r2  w2  p2  p1  c1  c2  check
+permutation  w3  r1  p3  c3  r2  w2  p2  p1  c2  c1  check
+permutation  w3  r1  p3  c3  r2  w2  p2  c2  p1  c1  check
+permutation  w3  r1  p3  c3  r2  p1  w2  p2  c1  c2  check
+permutation  w3  r1  p3  c3  r2  p1  w2  p2  c2  c1  check
+permutation  w3  r1  p3  c3  r2  p1  w2  c1  p2  c2  check
+permutation  w3  r1  p3  c3  r2  p1  c1  w2  p2  c2  check
+permutation  w3  r1  p3  c3  w2  r2  p1  p2  c1  c2  check
+permutation  w3  r1  p3  c3  w2  r2  p1  p2  c2  c1  check
+permutation  w3  r1  p3  c3  w2  r2  p1  c1  p2  c2  check
+permutation  w3  r1  p3  c3  w2  r2  p2  p1  c1  c2  check
+permutation  w3  r1  p3  c3  w2  r2  p2  p1  c2  c1  check
+permutation  w3  r1  p3  c3  w2  r2  p2  c2  p1  c1  check
+permutation  w3  r1  p3  c3  w2  p1  r2  p2  c1  c2  check
+permutation  w3  r1  p3  c3  w2  p1  r2  p2  c2  c1  check
+permutation  w3  r1  p3  c3  w2  p1  r2  c1  p2  c2  check
+permutation  w3  r1  p3  c3  w2  p1  c1  r2  p2  c2  check
+permutation  w3  r1  p3  c3  p1  r2  w2  p2  c1  c2  check
+permutation  w3  r1  p3  c3  p1  r2  w2  p2  c2  c1  check
+permutation  w3  r1  p3  c3  p1  r2  w2  c1  p2  c2  check
+permutation  w3  r1  p3  c3  p1  r2  c1  w2  p2  c2  check
+permutation  w3  r1  p3  c3  p1  w2  r2  p2  c1  c2  check
+permutation  w3  r1  p3  c3  p1  w2  r2  p2  c2  c1  check
+permutation  w3  r1  p3  c3  p1  w2  r2  c1  p2  c2  check
+permutation  w3  r1  p3  c3  p1  w2  c1  r2  p2  c2  check
+permutation  w3  r1  p3  c3  p1  c1  r2  w2  p2  c2  check
+permutation  w3  r1  p3  c3  p1  c1  w2  r2  p2  c2  check
+permutation  w3  r2  r1  w2  p1  p2  p3  c3  c1  c2  check
+permutation  w3  r2  r1  w2  p1  p2  p3  c3  c2  c1  check
+permutation  w3  r2  r1  w2  p1  p3  p2  c3  c1  c2  check
+permutation  w3  r2  r1  w2  p1  p3  p2  c3  c2  c1  check
+permutation  w3  r2  r1  w2  p1  p3  c3  p2  c1  c2  check
+permutation  w3  r2  r1  w2  p1  p3  c3  p2  c2  c1  check
+permutation  w3  r2  r1  w2  p1  p3  c3  c1  p2  c2  check
+permutation  w3  r2  r1  w2  p2  p1  p3  c3  c1  c2  check
+permutation  w3  r2  r1  w2  p2  p1  p3  c3  c2  c1  check
+permutation  w3  r2  r1  w2  p2  p3  p1  c3  c1  c2  check
+permutation  w3  r2  r1  w2  p2  p3  p1  c3  c2  c1  check
+permutation  w3  r2  r1  w2  p2  p3  c3  p1  c1  c2  check
+permutation  w3  r2  r1  w2  p2  p3  c3  p1  c2  c1  check
+permutation  w3  r2  r1  w2  p2  p3  c3  c2  p1  c1  check
+permutation  w3  r2  r1  w2  p3  p1  p2  c3  c1  c2  check
+permutation  w3  r2  r1  w2  p3  p1  p2  c3  c2  c1  check
+permutation  w3  r2  r1  w2  p3  p1  c3  p2  c1  c2  check
+permutation  w3  r2  r1  w2  p3  p1  c3  p2  c2  c1  check
+permutation  w3  r2  r1  w2  p3  p1  c3  c1  p2  c2  check
+permutation  w3  r2  r1  w2  p3  p2  p1  c3  c1  c2  check
+permutation  w3  r2  r1  w2  p3  p2  p1  c3  c2  c1  check
+permutation  w3  r2  r1  w2  p3  p2  c3  p1  c1  c2  check
+permutation  w3  r2  r1  w2  p3  p2  c3  p1  c2  c1  check
+permutation  w3  r2  r1  w2  p3  p2  c3  c2  p1  c1  check
+permutation  w3  r2  r1  w2  p3  c3  p1  p2  c1  c2  check
+permutation  w3  r2  r1  w2  p3  c3  p1  p2  c2  c1  check
+permutation  w3  r2  r1  w2  p3  c3  p1  c1  p2  c2  check
+permutation  w3  r2  r1  w2  p3  c3  p2  p1  c1  c2  check
+permutation  w3  r2  r1  w2  p3  c3  p2  p1  c2  c1  check
+permutation  w3  r2  r1  w2  p3  c3  p2  c2  p1  c1  check
+permutation  w3  r2  r1  p1  w2  p2  p3  c3  c1  c2  check
+permutation  w3  r2  r1  p1  w2  p2  p3  c3  c2  c1  check
+permutation  w3  r2  r1  p1  w2  p3  p2  c3  c1  c2  check
+permutation  w3  r2  r1  p1  w2  p3  p2  c3  c2  c1  check
+permutation  w3  r2  r1  p1  w2  p3  c3  p2  c1  c2  check
+permutation  w3  r2  r1  p1  w2  p3  c3  p2  c2  c1  check
+permutation  w3  r2  r1  p1  w2  p3  c3  c1  p2  c2  check
+permutation  w3  r2  r1  p1  p3  w2  p2  c3  c1  c2  check
+permutation  w3  r2  r1  p1  p3  w2  p2  c3  c2  c1  check
+permutation  w3  r2  r1  p1  p3  w2  c3  p2  c1  c2  check
+permutation  w3  r2  r1  p1  p3  w2  c3  p2  c2  c1  check
+permutation  w3  r2  r1  p1  p3  w2  c3  c1  p2  c2  check
+permutation  w3  r2  r1  p1  p3  c3  w2  p2  c1  c2  check
+permutation  w3  r2  r1  p1  p3  c3  w2  p2  c2  c1  check
+permutation  w3  r2  r1  p1  p3  c3  w2  c1  p2  c2  check
+permutation  w3  r2  r1  p1  p3  c3  c1  w2  p2  c2  check
+permutation  w3  r2  r1  p3  w2  p1  p2  c3  c1  c2  check
+permutation  w3  r2  r1  p3  w2  p1  p2  c3  c2  c1  check
+permutation  w3  r2  r1  p3  w2  p1  c3  p2  c1  c2  check
+permutation  w3  r2  r1  p3  w2  p1  c3  p2  c2  c1  check
+permutation  w3  r2  r1  p3  w2  p1  c3  c1  p2  c2  check
+permutation  w3  r2  r1  p3  w2  p2  p1  c3  c1  c2  check
+permutation  w3  r2  r1  p3  w2  p2  p1  c3  c2  c1  check
+permutation  w3  r2  r1  p3  w2  p2  c3  p1  c1  c2  check
+permutation  w3  r2  r1  p3  w2  p2  c3  p1  c2  c1  check
+permutation  w3  r2  r1  p3  w2  p2  c3  c2  p1  c1  check
+permutation  w3  r2  r1  p3  w2  c3  p1  p2  c1  c2  check
+permutation  w3  r2  r1  p3  w2  c3  p1  p2  c2  c1  check
+permutation  w3  r2  r1  p3  w2  c3  p1  c1  p2  c2  check
+permutation  w3  r2  r1  p3  w2  c3  p2  p1  c1  c2  check
+permutation  w3  r2  r1  p3  w2  c3  p2  p1  c2  c1  check
+permutation  w3  r2  r1  p3  w2  c3  p2  c2  p1  c1  check
+permutation  w3  r2  r1  p3  p1  w2  p2  c3  c1  c2  check
+permutation  w3  r2  r1  p3  p1  w2  p2  c3  c2  c1  check
+permutation  w3  r2  r1  p3  p1  w2  c3  p2  c1  c2  check
+permutation  w3  r2  r1  p3  p1  w2  c3  p2  c2  c1  check
+permutation  w3  r2  r1  p3  p1  w2  c3  c1  p2  c2  check
+permutation  w3  r2  r1  p3  p1  c3  w2  p2  c1  c2  check
+permutation  w3  r2  r1  p3  p1  c3  w2  p2  c2  c1  check
+permutation  w3  r2  r1  p3  p1  c3  w2  c1  p2  c2  check
+permutation  w3  r2  r1  p3  p1  c3  c1  w2  p2  c2  check
+permutation  w3  r2  r1  p3  c3  w2  p1  p2  c1  c2  check
+permutation  w3  r2  r1  p3  c3  w2  p1  p2  c2  c1  check
+permutation  w3  r2  r1  p3  c3  w2  p1  c1  p2  c2  check
+permutation  w3  r2  r1  p3  c3  w2  p2  p1  c1  c2  check
+permutation  w3  r2  r1  p3  c3  w2  p2  p1  c2  c1  check
+permutation  w3  r2  r1  p3  c3  w2  p2  c2  p1  c1  check
+permutation  w3  r2  r1  p3  c3  p1  w2  p2  c1  c2  check
+permutation  w3  r2  r1  p3  c3  p1  w2  p2  c2  c1  check
+permutation  w3  r2  r1  p3  c3  p1  w2  c1  p2  c2  check
+permutation  w3  r2  r1  p3  c3  p1  c1  w2  p2  c2  check
+permutation  w3  r2  p3  r1  w2  p1  p2  c3  c1  c2  check
+permutation  w3  r2  p3  r1  w2  p1  p2  c3  c2  c1  check
+permutation  w3  r2  p3  r1  w2  p1  c3  p2  c1  c2  check
+permutation  w3  r2  p3  r1  w2  p1  c3  p2  c2  c1  check
+permutation  w3  r2  p3  r1  w2  p1  c3  c1  p2  c2  check
+permutation  w3  r2  p3  r1  w2  p2  p1  c3  c1  c2  check
+permutation  w3  r2  p3  r1  w2  p2  p1  c3  c2  c1  check
+permutation  w3  r2  p3  r1  w2  p2  c3  p1  c1  c2  check
+permutation  w3  r2  p3  r1  w2  p2  c3  p1  c2  c1  check
+permutation  w3  r2  p3  r1  w2  p2  c3  c2  p1  c1  check
+permutation  w3  r2  p3  r1  w2  c3  p1  p2  c1  c2  check
+permutation  w3  r2  p3  r1  w2  c3  p1  p2  c2  c1  check
+permutation  w3  r2  p3  r1  w2  c3  p1  c1  p2  c2  check
+permutation  w3  r2  p3  r1  w2  c3  p2  p1  c1  c2  check
+permutation  w3  r2  p3  r1  w2  c3  p2  p1  c2  c1  check
+permutation  w3  r2  p3  r1  w2  c3  p2  c2  p1  c1  check
+permutation  w3  r2  p3  r1  p1  w2  p2  c3  c1  c2  check
+permutation  w3  r2  p3  r1  p1  w2  p2  c3  c2  c1  check
+permutation  w3  r2  p3  r1  p1  w2  c3  p2  c1  c2  check
+permutation  w3  r2  p3  r1  p1  w2  c3  p2  c2  c1  check
+permutation  w3  r2  p3  r1  p1  w2  c3  c1  p2  c2  check
+permutation  w3  r2  p3  r1  p1  c3  w2  p2  c1  c2  check
+permutation  w3  r2  p3  r1  p1  c3  w2  p2  c2  c1  check
+permutation  w3  r2  p3  r1  p1  c3  w2  c1  p2  c2  check
+permutation  w3  r2  p3  r1  p1  c3  c1  w2  p2  c2  check
+permutation  w3  r2  p3  r1  c3  w2  p1  p2  c1  c2  check
+permutation  w3  r2  p3  r1  c3  w2  p1  p2  c2  c1  check
+permutation  w3  r2  p3  r1  c3  w2  p1  c1  p2  c2  check
+permutation  w3  r2  p3  r1  c3  w2  p2  p1  c1  c2  check
+permutation  w3  r2  p3  r1  c3  w2  p2  p1  c2  c1  check
+permutation  w3  r2  p3  r1  c3  w2  p2  c2  p1  c1  check
+permutation  w3  r2  p3  r1  c3  p1  w2  p2  c1  c2  check
+permutation  w3  r2  p3  r1  c3  p1  w2  p2  c2  c1  check
+permutation  w3  r2  p3  r1  c3  p1  w2  c1  p2  c2  check
+permutation  w3  r2  p3  r1  c3  p1  c1  w2  p2  c2  check
+permutation  w3  r2  p3  c3  r1  w2  p1  p2  c1  c2  check
+permutation  w3  r2  p3  c3  r1  w2  p1  p2  c2  c1  check
+permutation  w3  r2  p3  c3  r1  w2  p1  c1  p2  c2  check
+permutation  w3  r2  p3  c3  r1  w2  p2  p1  c1  c2  check
+permutation  w3  r2  p3  c3  r1  w2  p2  p1  c2  c1  check
+permutation  w3  r2  p3  c3  r1  w2  p2  c2  p1  c1  check
+permutation  w3  r2  p3  c3  r1  p1  w2  p2  c1  c2  check
+permutation  w3  r2  p3  c3  r1  p1  w2  p2  c2  c1  check
+permutation  w3  r2  p3  c3  r1  p1  w2  c1  p2  c2  check
+permutation  w3  r2  p3  c3  r1  p1  c1  w2  p2  c2  check
+permutation  w3  p3  r1  r2  w2  p1  p2  c3  c1  c2  check
+permutation  w3  p3  r1  r2  w2  p1  p2  c3  c2  c1  check
+permutation  w3  p3  r1  r2  w2  p1  c3  p2  c1  c2  check
+permutation  w3  p3  r1  r2  w2  p1  c3  p2  c2  c1  check
+permutation  w3  p3  r1  r2  w2  p1  c3  c1  p2  c2  check
+permutation  w3  p3  r1  r2  w2  p2  p1  c3  c1  c2  check
+permutation  w3  p3  r1  r2  w2  p2  p1  c3  c2  c1  check
+permutation  w3  p3  r1  r2  w2  p2  c3  p1  c1  c2  check
+permutation  w3  p3  r1  r2  w2  p2  c3  p1  c2  c1  check
+permutation  w3  p3  r1  r2  w2  p2  c3  c2  p1  c1  check
+permutation  w3  p3  r1  r2  w2  c3  p1  p2  c1  c2  check
+permutation  w3  p3  r1  r2  w2  c3  p1  p2  c2  c1  check
+permutation  w3  p3  r1  r2  w2  c3  p1  c1  p2  c2  check
+permutation  w3  p3  r1  r2  w2  c3  p2  p1  c1  c2  check
+permutation  w3  p3  r1  r2  w2  c3  p2  p1  c2  c1  check
+permutation  w3  p3  r1  r2  w2  c3  p2  c2  p1  c1  check
+permutation  w3  p3  r1  r2  p1  w2  p2  c3  c1  c2  check
+permutation  w3  p3  r1  r2  p1  w2  p2  c3  c2  c1  check
+permutation  w3  p3  r1  r2  p1  w2  c3  p2  c1  c2  check
+permutation  w3  p3  r1  r2  p1  w2  c3  p2  c2  c1  check
+permutation  w3  p3  r1  r2  p1  w2  c3  c1  p2  c2  check
+permutation  w3  p3  r1  r2  p1  c3  w2  p2  c1  c2  check
+permutation  w3  p3  r1  r2  p1  c3  w2  p2  c2  c1  check
+permutation  w3  p3  r1  r2  p1  c3  w2  c1  p2  c2  check
+permutation  w3  p3  r1  r2  p1  c3  c1  w2  p2  c2  check
+permutation  w3  p3  r1  r2  c3  w2  p1  p2  c1  c2  check
+permutation  w3  p3  r1  r2  c3  w2  p1  p2  c2  c1  check
+permutation  w3  p3  r1  r2  c3  w2  p1  c1  p2  c2  check
+permutation  w3  p3  r1  r2  c3  w2  p2  p1  c1  c2  check
+permutation  w3  p3  r1  r2  c3  w2  p2  p1  c2  c1  check
+permutation  w3  p3  r1  r2  c3  w2  p2  c2  p1  c1  check
+permutation  w3  p3  r1  r2  c3  p1  w2  p2  c1  c2  check
+permutation  w3  p3  r1  r2  c3  p1  w2  p2  c2  c1  check
+permutation  w3  p3  r1  r2  c3  p1  w2  c1  p2  c2  check
+permutation  w3  p3  r1  r2  c3  p1  c1  w2  p2  c2  check
+permutation  w3  p3  r1  w2  r2  p1  p2  c3  c1  c2  check
+permutation  w3  p3  r1  w2  r2  p1  p2  c3  c2  c1  check
+permutation  w3  p3  r1  w2  r2  p1  c3  p2  c1  c2  check
+permutation  w3  p3  r1  w2  r2  p1  c3  p2  c2  c1  check
+permutation  w3  p3  r1  w2  r2  p1  c3  c1  p2  c2  check
+permutation  w3  p3  r1  w2  r2  p2  p1  c3  c1  c2  check
+permutation  w3  p3  r1  w2  r2  p2  p1  c3  c2  c1  check
+permutation  w3  p3  r1  w2  r2  p2  c3  p1  c1  c2  check
+permutation  w3  p3  r1  w2  r2  p2  c3  p1  c2  c1  check
+permutation  w3  p3  r1  w2  r2  p2  c3  c2  p1  c1  check
+permutation  w3  p3  r1  w2  r2  c3  p1  p2  c1  c2  check
+permutation  w3  p3  r1  w2  r2  c3  p1  p2  c2  c1  check
+permutation  w3  p3  r1  w2  r2  c3  p1  c1  p2  c2  check
+permutation  w3  p3  r1  w2  r2  c3  p2  p1  c1  c2  check
+permutation  w3  p3  r1  w2  r2  c3  p2  p1  c2  c1  check
+permutation  w3  p3  r1  w2  r2  c3  p2  c2  p1  c1  check
+permutation  w3  p3  r1  w2  p1  r2  p2  c3  c1  c2  check
+permutation  w3  p3  r1  w2  p1  r2  p2  c3  c2  c1  check
+permutation  w3  p3  r1  w2  p1  r2  c3  p2  c1  c2  check
+permutation  w3  p3  r1  w2  p1  r2  c3  p2  c2  c1  check
+permutation  w3  p3  r1  w2  p1  r2  c3  c1  p2  c2  check
+permutation  w3  p3  r1  w2  p1  c3  r2  p2  c1  c2  check
+permutation  w3  p3  r1  w2  p1  c3  r2  p2  c2  c1  check
+permutation  w3  p3  r1  w2  p1  c3  r2  c1  p2  c2  check
+permutation  w3  p3  r1  w2  p1  c3  c1  r2  p2  c2  check
+permutation  w3  p3  r1  w2  c3  r2  p1  p2  c1  c2  check
+permutation  w3  p3  r1  w2  c3  r2  p1  p2  c2  c1  check
+permutation  w3  p3  r1  w2  c3  r2  p1  c1  p2  c2  check
+permutation  w3  p3  r1  w2  c3  r2  p2  p1  c1  c2  check
+permutation  w3  p3  r1  w2  c3  r2  p2  p1  c2  c1  check
+permutation  w3  p3  r1  w2  c3  r2  p2  c2  p1  c1  check
+permutation  w3  p3  r1  w2  c3  p1  r2  p2  c1  c2  check
+permutation  w3  p3  r1  w2  c3  p1  r2  p2  c2  c1  check
+permutation  w3  p3  r1  w2  c3  p1  r2  c1  p2  c2  check
+permutation  w3  p3  r1  w2  c3  p1  c1  r2  p2  c2  check
+permutation  w3  p3  r1  p1  r2  w2  p2  c3  c1  c2  check
+permutation  w3  p3  r1  p1  r2  w2  p2  c3  c2  c1  check
+permutation  w3  p3  r1  p1  r2  w2  c3  p2  c1  c2  check
+permutation  w3  p3  r1  p1  r2  w2  c3  p2  c2  c1  check
+permutation  w3  p3  r1  p1  r2  w2  c3  c1  p2  c2  check
+permutation  w3  p3  r1  p1  r2  c3  w2  p2  c1  c2  check
+permutation  w3  p3  r1  p1  r2  c3  w2  p2  c2  c1  check
+permutation  w3  p3  r1  p1  r2  c3  w2  c1  p2  c2  check
+permutation  w3  p3  r1  p1  r2  c3  c1  w2  p2  c2  check
+permutation  w3  p3  r1  p1  w2  r2  p2  c3  c1  c2  check
+permutation  w3  p3  r1  p1  w2  r2  p2  c3  c2  c1  check
+permutation  w3  p3  r1  p1  w2  r2  c3  p2  c1  c2  check
+permutation  w3  p3  r1  p1  w2  r2  c3  p2  c2  c1  check
+permutation  w3  p3  r1  p1  w2  r2  c3  c1  p2  c2  check
+permutation  w3  p3  r1  p1  w2  c3  r2  p2  c1  c2  check
+permutation  w3  p3  r1  p1  w2  c3  r2  p2  c2  c1  check
+permutation  w3  p3  r1  p1  w2  c3  r2  c1  p2  c2  check
+permutation  w3  p3  r1  p1  w2  c3  c1  r2  p2  c2  check
+permutation  w3  p3  r1  p1  c3  r2  w2  p2  c1  c2  check
+permutation  w3  p3  r1  p1  c3  r2  w2  p2  c2  c1  check
+permutation  w3  p3  r1  p1  c3  r2  w2  c1  p2  c2  check
+permutation  w3  p3  r1  p1  c3  r2  c1  w2  p2  c2  check
+permutation  w3  p3  r1  p1  c3  w2  r2  p2  c1  c2  check
+permutation  w3  p3  r1  p1  c3  w2  r2  p2  c2  c1  check
+permutation  w3  p3  r1  p1  c3  w2  r2  c1  p2  c2  check
+permutation  w3  p3  r1  p1  c3  w2  c1  r2  p2  c2  check
+permutation  w3  p3  r1  p1  c3  c1  r2  w2  p2  c2  check
+permutation  w3  p3  r1  p1  c3  c1  w2  r2  p2  c2  check
+permutation  w3  p3  r1  c3  r2  w2  p1  p2  c1  c2  check
+permutation  w3  p3  r1  c3  r2  w2  p1  p2  c2  c1  check
+permutation  w3  p3  r1  c3  r2  w2  p1  c1  p2  c2  check
+permutation  w3  p3  r1  c3  r2  w2  p2  p1  c1  c2  check
+permutation  w3  p3  r1  c3  r2  w2  p2  p1  c2  c1  check
+permutation  w3  p3  r1  c3  r2  w2  p2  c2  p1  c1  check
+permutation  w3  p3  r1  c3  r2  p1  w2  p2  c1  c2  check
+permutation  w3  p3  r1  c3  r2  p1  w2  p2  c2  c1  check
+permutation  w3  p3  r1  c3  r2  p1  w2  c1  p2  c2  check
+permutation  w3  p3  r1  c3  r2  p1  c1  w2  p2  c2  check
+permutation  w3  p3  r1  c3  w2  r2  p1  p2  c1  c2  check
+permutation  w3  p3  r1  c3  w2  r2  p1  p2  c2  c1  check
+permutation  w3  p3  r1  c3  w2  r2  p1  c1  p2  c2  check
+permutation  w3  p3  r1  c3  w2  r2  p2  p1  c1  c2  check
+permutation  w3  p3  r1  c3  w2  r2  p2  p1  c2  c1  check
+permutation  w3  p3  r1  c3  w2  r2  p2  c2  p1  c1  check
+permutation  w3  p3  r1  c3  w2  p1  r2  p2  c1  c2  check
+permutation  w3  p3  r1  c3  w2  p1  r2  p2  c2  c1  check
+permutation  w3  p3  r1  c3  w2  p1  r2  c1  p2  c2  check
+permutation  w3  p3  r1  c3  w2  p1  c1  r2  p2  c2  check
+permutation  w3  p3  r1  c3  p1  r2  w2  p2  c1  c2  check
+permutation  w3  p3  r1  c3  p1  r2  w2  p2  c2  c1  check
+permutation  w3  p3  r1  c3  p1  r2  w2  c1  p2  c2  check
+permutation  w3  p3  r1  c3  p1  r2  c1  w2  p2  c2  check
+permutation  w3  p3  r1  c3  p1  w2  r2  p2  c1  c2  check
+permutation  w3  p3  r1  c3  p1  w2  r2  p2  c2  c1  check
+permutation  w3  p3  r1  c3  p1  w2  r2  c1  p2  c2  check
+permutation  w3  p3  r1  c3  p1  w2  c1  r2  p2  c2  check
+permutation  w3  p3  r1  c3  p1  c1  r2  w2  p2  c2  check
+permutation  w3  p3  r1  c3  p1  c1  w2  r2  p2  c2  check
+permutation  w3  p3  r2  r1  w2  p1  p2  c3  c1  c2  check
+permutation  w3  p3  r2  r1  w2  p1  p2  c3  c2  c1  check
+permutation  w3  p3  r2  r1  w2  p1  c3  p2  c1  c2  check
+permutation  w3  p3  r2  r1  w2  p1  c3  p2  c2  c1  check
+permutation  w3  p3  r2  r1  w2  p1  c3  c1  p2  c2  check
+permutation  w3  p3  r2  r1  w2  p2  p1  c3  c1  c2  check
+permutation  w3  p3  r2  r1  w2  p2  p1  c3  c2  c1  check
+permutation  w3  p3  r2  r1  w2  p2  c3  p1  c1  c2  check
+permutation  w3  p3  r2  r1  w2  p2  c3  p1  c2  c1  check
+permutation  w3  p3  r2  r1  w2  p2  c3  c2  p1  c1  check
+permutation  w3  p3  r2  r1  w2  c3  p1  p2  c1  c2  check
+permutation  w3  p3  r2  r1  w2  c3  p1  p2  c2  c1  check
+permutation  w3  p3  r2  r1  w2  c3  p1  c1  p2  c2  check
+permutation  w3  p3  r2  r1  w2  c3  p2  p1  c1  c2  check
+permutation  w3  p3  r2  r1  w2  c3  p2  p1  c2  c1  check
+permutation  w3  p3  r2  r1  w2  c3  p2  c2  p1  c1  check
+permutation  w3  p3  r2  r1  p1  w2  p2  c3  c1  c2  check
+permutation  w3  p3  r2  r1  p1  w2  p2  c3  c2  c1  check
+permutation  w3  p3  r2  r1  p1  w2  c3  p2  c1  c2  check
+permutation  w3  p3  r2  r1  p1  w2  c3  p2  c2  c1  check
+permutation  w3  p3  r2  r1  p1  w2  c3  c1  p2  c2  check
+permutation  w3  p3  r2  r1  p1  c3  w2  p2  c1  c2  check
+permutation  w3  p3  r2  r1  p1  c3  w2  p2  c2  c1  check
+permutation  w3  p3  r2  r1  p1  c3  w2  c1  p2  c2  check
+permutation  w3  p3  r2  r1  p1  c3  c1  w2  p2  c2  check
+permutation  w3  p3  r2  r1  c3  w2  p1  p2  c1  c2  check
+permutation  w3  p3  r2  r1  c3  w2  p1  p2  c2  c1  check
+permutation  w3  p3  r2  r1  c3  w2  p1  c1  p2  c2  check
+permutation  w3  p3  r2  r1  c3  w2  p2  p1  c1  c2  check
+permutation  w3  p3  r2  r1  c3  w2  p2  p1  c2  c1  check
+permutation  w3  p3  r2  r1  c3  w2  p2  c2  p1  c1  check
+permutation  w3  p3  r2  r1  c3  p1  w2  p2  c1  c2  check
+permutation  w3  p3  r2  r1  c3  p1  w2  p2  c2  c1  check
+permutation  w3  p3  r2  r1  c3  p1  w2  c1  p2  c2  check
+permutation  w3  p3  r2  r1  c3  p1  c1  w2  p2  c2  check
+permutation  w3  p3  r2  c3  r1  w2  p1  p2  c1  c2  check
+permutation  w3  p3  r2  c3  r1  w2  p1  p2  c2  c1  check
+permutation  w3  p3  r2  c3  r1  w2  p1  c1  p2  c2  check
+permutation  w3  p3  r2  c3  r1  w2  p2  p1  c1  c2  check
+permutation  w3  p3  r2  c3  r1  w2  p2  p1  c2  c1  check
+permutation  w3  p3  r2  c3  r1  w2  p2  c2  p1  c1  check
+permutation  w3  p3  r2  c3  r1  p1  w2  p2  c1  c2  check
+permutation  w3  p3  r2  c3  r1  p1  w2  p2  c2  c1  check
+permutation  w3  p3  r2  c3  r1  p1  w2  c1  p2  c2  check
+permutation  w3  p3  r2  c3  r1  p1  c1  w2  p2  c2  check
+permutation  w3  p3  c3  r1  r2  w2  p1  p2  c1  c2  check
+permutation  w3  p3  c3  r1  r2  w2  p1  p2  c2  c1  check
+permutation  w3  p3  c3  r1  r2  w2  p1  c1  p2  c2  check
+permutation  w3  p3  c3  r1  r2  w2  p2  p1  c1  c2  check
+permutation  w3  p3  c3  r1  r2  w2  p2  p1  c2  c1  check
+permutation  w3  p3  c3  r1  r2  w2  p2  c2  p1  c1  check
+permutation  w3  p3  c3  r1  r2  p1  w2  p2  c1  c2  check
+permutation  w3  p3  c3  r1  r2  p1  w2  p2  c2  c1  check
+permutation  w3  p3  c3  r1  r2  p1  w2  c1  p2  c2  check
+permutation  w3  p3  c3  r1  r2  p1  c1  w2  p2  c2  check
+permutation  w3  p3  c3  r1  w2  r2  p1  p2  c1  c2  check
+permutation  w3  p3  c3  r1  w2  r2  p1  p2  c2  c1  check
+permutation  w3  p3  c3  r1  w2  r2  p1  c1  p2  c2  check
+permutation  w3  p3  c3  r1  w2  r2  p2  p1  c1  c2  check
+permutation  w3  p3  c3  r1  w2  r2  p2  p1  c2  c1  check
+permutation  w3  p3  c3  r1  w2  r2  p2  c2  p1  c1  check
+permutation  w3  p3  c3  r1  w2  p1  r2  p2  c1  c2  check
+permutation  w3  p3  c3  r1  w2  p1  r2  p2  c2  c1  check
+permutation  w3  p3  c3  r1  w2  p1  r2  c1  p2  c2  check
+permutation  w3  p3  c3  r1  w2  p1  c1  r2  p2  c2  check
+permutation  w3  p3  c3  r1  p1  r2  w2  p2  c1  c2  check
+permutation  w3  p3  c3  r1  p1  r2  w2  p2  c2  c1  check
+permutation  w3  p3  c3  r1  p1  r2  w2  c1  p2  c2  check
+permutation  w3  p3  c3  r1  p1  r2  c1  w2  p2  c2  check
+permutation  w3  p3  c3  r1  p1  w2  r2  p2  c1  c2  check
+permutation  w3  p3  c3  r1  p1  w2  r2  p2  c2  c1  check
+permutation  w3  p3  c3  r1  p1  w2  r2  c1  p2  c2  check
+permutation  w3  p3  c3  r1  p1  w2  c1  r2  p2  c2  check
+permutation  w3  p3  c3  r1  p1  c1  r2  w2  p2  c2  check
+permutation  w3  p3  c3  r1  p1  c1  w2  r2  p2  c2  check
+permutation  w3  p3  c3  r2  r1  w2  p1  p2  c1  c2  check
+permutation  w3  p3  c3  r2  r1  w2  p1  p2  c2  c1  check
+permutation  w3  p3  c3  r2  r1  w2  p1  c1  p2  c2  check
+permutation  w3  p3  c3  r2  r1  w2  p2  p1  c1  c2  check
+permutation  w3  p3  c3  r2  r1  w2  p2  p1  c2  c1  check
+permutation  w3  p3  c3  r2  r1  w2  p2  c2  p1  c1  check
+permutation  w3  p3  c3  r2  r1  p1  w2  p2  c1  c2  check
+permutation  w3  p3  c3  r2  r1  p1  w2  p2  c2  c1  check
+permutation  w3  p3  c3  r2  r1  p1  w2  c1  p2  c2  check
+permutation  w3  p3  c3  r2  r1  p1  c1  w2  p2  c2  check
index 884012dd89ce702c68365aa0a3d721db60010fa1..42e5fc53a2ea65dcbaaf88e99ea85ab1091f6294 100644 (file)
@@ -17,14 +17,14 @@ teardown
  DROP TABLE person, project;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rx1" { SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; }
-step "wy1" { INSERT INTO project VALUES (101, 'Build Great Wall', 1); }
-step "c1"  { COMMIT; }
+step rx1   { SELECT count(*) FROM person WHERE person_id = 1 AND is_project_manager; }
+step wy1   { INSERT INTO project VALUES (101, 'Build Great Wall', 1); }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "ry2" { SELECT count(*) FROM project WHERE project_manager = 1; }
-step "wx2" { UPDATE person SET is_project_manager = false WHERE person_id = 1; }
-step "c2"  { COMMIT; }
+step ry2   { SELECT count(*) FROM project WHERE project_manager = 1; }
+step wx2   { UPDATE person SET is_project_manager = false WHERE person_id = 1; }
+step c2        { COMMIT; }
index 857c36b3dbbe138dda489199a57e087ff61add98..641fb842833fee297b7eb49ed2da06b456ef36cb 100644 (file)
@@ -14,29 +14,29 @@ teardown
    drop table child, parent;
 }
 
-session "s1"
-step "s1b"  { BEGIN; }
-step "s1l" { INSERT INTO child VALUES (1); }
-step "s1c" { COMMIT; }
+session s1
+step s1b   { BEGIN; }
+step s1l   { INSERT INTO child VALUES (1); }
+step s1c   { COMMIT; }
 
-session "s2"
-step "s2b"  { BEGIN; }
-step "s2l" { INSERT INTO child VALUES (1); }
-step "s2c" { COMMIT; }
+session s2
+step s2b   { BEGIN; }
+step s2l   { INSERT INTO child VALUES (1); }
+step s2c   { COMMIT; }
 
-session "s3"
-step "s3b" { BEGIN; }
-step "s3u" { UPDATE parent SET c=lower(c); }   # no key update
-step "s3u2"    { UPDATE parent SET i = i; }        # key update
-step "s3svu" { SAVEPOINT f; UPDATE parent SET c = 'bbb'; ROLLBACK TO f; }
-step "s3d" { DELETE FROM parent; }
-step "s3c" { COMMIT; }
+session s3
+step s3b   { BEGIN; }
+step s3u   { UPDATE parent SET c=lower(c); }   # no key update
+step s3u2  { UPDATE parent SET i = i; }        # key update
+step s3svu { SAVEPOINT f; UPDATE parent SET c = 'bbb'; ROLLBACK TO f; }
+step s3d   { DELETE FROM parent; }
+step s3c   { COMMIT; }
 
-permutation "s1b" "s1l" "s2b" "s2l" "s3b" "s3u"          "s3d" "s1c" "s2c" "s3c"
-permutation "s1b" "s1l" "s2b" "s2l" "s3b" "s3u"  "s3svu" "s3d" "s1c" "s2c" "s3c"
-permutation "s1b" "s1l" "s2b" "s2l" "s3b" "s3u2"         "s3d" "s1c" "s2c" "s3c"
-permutation "s1b" "s1l" "s2b" "s2l" "s3b" "s3u2" "s3svu" "s3d" "s1c" "s2c" "s3c"
-permutation "s1b" "s1l"             "s3b" "s3u"          "s3d" "s1c"       "s3c"
-permutation "s1b" "s1l"             "s3b" "s3u"  "s3svu" "s3d" "s1c"       "s3c"
-permutation "s1b" "s1l"             "s3b" "s3u2"         "s3d" "s1c"       "s3c"
-permutation "s1b" "s1l"             "s3b" "s3u2" "s3svu" "s3d" "s1c"       "s3c"
+permutation s1b s1l s2b s2l s3b s3u          s3d s1c s2c s3c
+permutation s1b s1l s2b s2l s3b s3u  s3svu s3d s1c s2c s3c
+permutation s1b s1l s2b s2l s3b s3u2         s3d s1c s2c s3c
+permutation s1b s1l s2b s2l s3b s3u2 s3svu s3d s1c s2c s3c
+permutation s1b s1l             s3b s3u          s3d s1c       s3c
+permutation s1b s1l             s3b s3u  s3svu s3d s1c       s3c
+permutation s1b s1l             s3b s3u2         s3d s1c       s3c
+permutation s1b s1l             s3b s3u2 s3svu s3d s1c       s3c
index 5e7cbf2cf544ddfaf27934b01b8f2e4632bad639..16c73e19c43487cc9d72f4f9d1894db97e56ee13 100644 (file)
@@ -10,27 +10,27 @@ teardown
   DROP TABLE test;
 }
 
-session "s1"
+session s1
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "r1" { SELECT * FROM test WHERE i = 42; }
-step "w1" { INSERT INTO test VALUES (42); }
-step "c1" { COMMIT; }
+step r1 { SELECT * FROM test WHERE i = 42; }
+step w1 { INSERT INTO test VALUES (42); }
+step c1 { COMMIT; }
 
-session "s2"
+session s2
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "r2" { SELECT * FROM test WHERE i = 42; }
-step "w2" { INSERT INTO test VALUES (42); }
-step "c2" { COMMIT; }
+step r2 { SELECT * FROM test WHERE i = 42; }
+step w2 { INSERT INTO test VALUES (42); }
+step c2 { COMMIT; }
 
 # Two SSI transactions see that there is no row with value 42
 # in the table, then try to insert that value; T1 inserts,
 # and then T2 blocks waiting for T1 to commit.  Finally,
 # T2 reports a serialization failure.
 
-permutation "r1" "r2" "w1" "w2" "c1" "c2"
+permutation r1 r2 w1 w2 c1 c2
 
 # If the value is already visible before T2 begins, then a
 # regular unique constraint violation should still be raised
 # by T2.
 
-permutation "r1" "w1" "c1" "r2" "w2" "c2"
+permutation r1 w1 c1 r2 w2 c2
index 52d287721b1dc400685bcdc03d78386edf5d211b..cba2c4c0bc0811a21d195482d954bd11263e0b86 100644 (file)
@@ -20,14 +20,14 @@ teardown
   DROP TABLE test;
 }
 
-session "s1"
+session s1
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rw1" { SELECT insert_unique(1, '1'); }
-step "c1" { COMMIT; }
+step rw1 { SELECT insert_unique(1, '1'); }
+step c1 { COMMIT; }
 
-session "s2"
+session s2
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rw2" { SELECT insert_unique(1, '2'); }
-step "c2" { COMMIT; }
+step rw2 { SELECT insert_unique(1, '2'); }
+step c2 { COMMIT; }
 
-permutation "rw1" "rw2" "c1" "c2"
+permutation rw1 rw2 c1 c2
index ec447823484cff99a61f2c2e67ed3aef2210d680..900224881131c5bc9ee34c46a995ad82a082f300 100644 (file)
@@ -17,27 +17,27 @@ teardown
   DROP TABLE invoice;
 }
 
-session "s1"
+session s1
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "r1" { SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; }
-step "w1" { INSERT INTO invoice VALUES (2016, 3); }
-step "c1" { COMMIT; }
+step r1 { SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; }
+step w1 { INSERT INTO invoice VALUES (2016, 3); }
+step c1 { COMMIT; }
 
-session "s2"
+session s2
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "r2" { SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; }
-step "w2" { INSERT INTO invoice VALUES (2016, 3); }
-step "c2" { COMMIT; }
+step r2 { SELECT COALESCE(MAX(invoice_number) + 1, 1) FROM invoice WHERE year = 2016; }
+step w2 { INSERT INTO invoice VALUES (2016, 3); }
+step c2 { COMMIT; }
 
 # if they both read first then there should be an SSI conflict
-permutation "r1" "r2" "w1" "w2" "c1" "c2"
+permutation r1 r2 w1 w2 c1 c2
 
 # cases where one session doesn't explicitly read before writing:
 
 # if s2 doesn't explicitly read, then trying to insert the value
 # generates a unique constraint violation after s1 commits, as if s2
 # ran after s1
-permutation "r1" "w1" "w2" "c1" "c2"
+permutation r1 w1 w2 c1 c2
 
 # if s1 doesn't explicitly read, but s2 does, then s1 inserts and
 # commits first, should s2 experience an SSI failure instead of a
@@ -45,4 +45,4 @@ permutation "r1" "w1" "w2" "c1" "c2"
 # (s1, s2) or (s2, s1) where s1 succeeds, and s2 doesn't see the row
 # in an explicit select but then fails to insert due to unique
 # constraint violation
-permutation "r2" "w1" "w2" "c1" "c2"
+permutation r2 w1 w2 c1 c2
index c782f10c43ebe2d505c0753a32fb8063a8b9cf10..3ce059f5ceb29b50a077c49a7ba39fa5458ae4a5 100644 (file)
@@ -10,17 +10,17 @@ teardown
   DROP TABLE test;
 }
 
-session "s1"
+session s1
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "r1" { SELECT * FROM test; }
-step "w1" { INSERT INTO test VALUES (42); }
-step "c1" { COMMIT; }
+step r1 { SELECT * FROM test; }
+step w1 { INSERT INTO test VALUES (42); }
+step c1 { COMMIT; }
 
-session "s2"
+session s2
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "r2" { SELECT * FROM test; }
-step "w2" { INSERT INTO test VALUES (42); }
-step "c2" { COMMIT; }
+step r2 { SELECT * FROM test; }
+step w2 { INSERT INTO test VALUES (42); }
+step c2 { COMMIT; }
 
 # Two SSI transactions see that there is no row with value 42
 # in the table, then try to insert that value; T1 inserts,
@@ -30,10 +30,10 @@ step "c2" { COMMIT; }
 # (In an earlier version of Postgres, T2 would report a unique
 # constraint violation).
 
-permutation "r1" "r2" "w1" "w2" "c1" "c2"
+permutation r1 r2 w1 w2 c1 c2
 
 # If the value is already visible before T2 begins, then a
 # regular unique constraint violation should still be raised
 # by T2.
 
-permutation "r1" "w1" "c1" "r2" "w2" "c2"
+permutation r1 w1 c1 r2 w2 c2
index 5e1d51d0bd06d3a7ea424d73cd573859d9fe94c9..85ac60fb9f0a077978d655db83d05bad52d34add 100644 (file)
@@ -30,18 +30,18 @@ teardown
   DROP TABLE ctl, receipt;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rxwy1"   { INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); }
-step "c1"  { COMMIT; }
+step rxwy1 { INSERT INTO receipt VALUES (3, (SELECT deposit_date FROM ctl WHERE k = 'receipt'), 4.00); }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "wx2" { UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; }
-step "c2"  { COMMIT; }
+step wx2   { UPDATE ctl SET deposit_date = DATE '2008-12-23' WHERE k = 'receipt'; }
+step c2        { COMMIT; }
 
-session "s3"
+session s3
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE, READ ONLY; }
-step "rx3" { SELECT * FROM ctl WHERE k = 'receipt'; }
-step "ry3" { SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; }
-step "c3"  { COMMIT; }
+step rx3   { SELECT * FROM ctl WHERE k = 'receipt'; }
+step ry3   { SELECT * FROM receipt WHERE deposit_date = DATE '2008-12-22'; }
+step c3        { COMMIT; }
index 0bea3eab973505ecbb5f984bd4c12ac112bf91d1..ecaa9bba023c52c7e480abcd287c8e1bb54f7560 100644 (file)
@@ -18,15 +18,15 @@ teardown
  DROP TABLE a, b;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rx1" { SELECT i FROM a WHERE i = 1; }
-step "wy1" { INSERT INTO b VALUES (1); }
-step "c1"  { COMMIT; }
+step rx1   { SELECT i FROM a WHERE i = 1; }
+step wy1   { INSERT INTO b VALUES (1); }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rx2" { SELECT i FROM a WHERE i = 1; }
-step "ry2" { SELECT a_id FROM b WHERE a_id = 1; }
-step "wx2" { DELETE FROM a WHERE i = 1; }
-step "c2"  { COMMIT; }
+step rx2   { SELECT i FROM a WHERE i = 1; }
+step ry2   { SELECT a_id FROM b WHERE a_id = 1; }
+step wx2   { DELETE FROM a WHERE i = 1; }
+step c2        { COMMIT; }
index 78d1f2f226de61230975cefb35d516ad19525000..00fcdff414f24a96f460d4ff3b8d40ca6aebd64e 100644 (file)
@@ -41,13 +41,13 @@ teardown
  DROP FUNCTION ri_child();
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "wxry1"   { INSERT INTO child (parent_id) VALUES (0); }
-step "c1"  { COMMIT; }
+step wxry1 { INSERT INTO child (parent_id) VALUES (0); }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "r2"  { SELECT TRUE; }
-step "wyrx2"   { DELETE FROM parent WHERE parent_id = 0; }
-step "c2"  { COMMIT; }
+step r2        { SELECT TRUE; }
+step wyrx2 { DELETE FROM parent WHERE parent_id = 0; }
+step c2        { COMMIT; }
index 0aee43f38eda113a045b78ffaa845f6298602e16..ecabbf1ded4e702c3cda13b804c81be21bf985f0 100644 (file)
@@ -19,12 +19,12 @@ teardown
   DROP TABLE test;
 }
 
-session "s1"
+session s1
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rwx1" { UPDATE test SET t = 'apple' WHERE t = 'pear'; }
-step "c1" { COMMIT; }
+step rwx1 { UPDATE test SET t = 'apple' WHERE t = 'pear'; }
+step c1 { COMMIT; }
 
-session "s2"
+session s2
 setup { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rwx2" { UPDATE test SET t = 'pear' WHERE t = 'apple'}
-step "c2" { COMMIT; }
+step rwx2 { UPDATE test SET t = 'pear' WHERE t = 'apple'}
+step c2 { COMMIT; }
index a179d343534d3b0a147ded629e3227b385347296..cfdaa93878648ca1bbb4c5138453283849cb08c9 100644 (file)
@@ -15,27 +15,27 @@ teardown
   DROP TABLE queue;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1a" { SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; }
-step "s1b" { COMMIT; }
+step s1a   { SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; }
+step s1b   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; }
-step "s2a" { SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; }
-step "s2b" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
-step "s2c" { COMMIT; }
+step s2a   { SELECT * FROM queue ORDER BY id FOR SHARE SKIP LOCKED LIMIT 1; }
+step s2b   { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
+step s2c   { COMMIT; }
 
 # s1 and s2 both get SHARE lock, creating a multixact lock, then s2
 # tries to update to UPDATE but skips the record because it can't
 # acquire a multixact lock
-permutation "s1a" "s2a" "s2b" "s1b" "s2c"
+permutation s1a s2a s2b s1b s2c
 
 # the same but with the SHARE locks acquired in a different order, so
 # s2 again skips because it can't acquired a multixact lock
-permutation "s2a" "s1a" "s2b" "s1b" "s2c"
+permutation s2a s1a s2b s1b s2c
 
 # s2 acquires SHARE then UPDATE, then s1 tries to acquire SHARE but
 # can't so skips the first record because it can't acquire a regular
 # lock
-permutation "s2a" "s2b" "s1a" "s1b" "s2c"
+permutation s2a s2b s1a s1b s2c
index 30bf4c6b1a925979d96be3c13b2716186df340a8..7921425ed8762bb56de9681067f6e947b69a87f1 100644 (file)
@@ -15,22 +15,22 @@ teardown
   DROP TABLE queue;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1a" { SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; }
-step "s1b" { COMMIT; }
+step s1a   { SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; }
+step s1b   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; }
-step "s2a" { SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; }
-step "s2b" { COMMIT; }
+step s2a   { SELECT * FROM queue ORDER BY id FOR UPDATE LIMIT 1; }
+step s2b   { COMMIT; }
 
-session "s3"
+session s3
 setup      { BEGIN; }
-step "s3a" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
-step "s3b" { COMMIT; }
+step s3a   { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
+step s3b   { COMMIT; }
 
 # s3 skips to the second record because it can't obtain the tuple lock
 # (s2 holds the tuple lock because it is next in line to obtain the
 # row lock, and s1 holds the row lock)
-permutation "s1a" "s2a" "s3a" "s1b" "s2b" "s3b"
+permutation s1a s2a s3a s1b s2b s3b
index ef1823488011b5deab8990ac12240329bdac4ebc..02994a37bcd990ab3ed5006eeb5855f9c9f3f6f4 100644 (file)
@@ -14,18 +14,18 @@ teardown
   DROP TABLE foo;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1a" { SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED; }
-step "s1b" { COMMIT; }
+step s1a   { SELECT * FROM foo WHERE pg_advisory_lock(0) IS NOT NULL ORDER BY id LIMIT 1 FOR UPDATE SKIP LOCKED; }
+step s1b   { COMMIT; }
 
-session "s2"
-step "s2a" { SELECT pg_advisory_lock(0); }
-step "s2b" { UPDATE foo SET data = data WHERE id = 1; }
-step "s2c" { BEGIN; }
-step "s2d" { UPDATE foo SET data = data WHERE id = 1; }
-step "s2e" { SELECT pg_advisory_unlock(0); }
-step "s2f" { COMMIT; }
+session s2
+step s2a   { SELECT pg_advisory_lock(0); }
+step s2b   { UPDATE foo SET data = data WHERE id = 1; }
+step s2c   { BEGIN; }
+step s2d   { UPDATE foo SET data = data WHERE id = 1; }
+step s2e   { SELECT pg_advisory_unlock(0); }
+step s2f   { COMMIT; }
 
 # s1 takes a snapshot but then waits on an advisory lock, then s2
 # updates the row in one transaction, then again in another without
@@ -33,4 +33,4 @@ step "s2f"    { COMMIT; }
 # because it has a snapshot that sees the older version, we reach the
 # waiting code in EvalPlanQualFetch which skips rows when in SKIP
 # LOCKED mode, so s1 sees the second row
-permutation "s2a" "s1a" "s2b" "s2c" "s2d" "s2e" "s1b" "s2f"
+permutation s2a s1a s2b s2c s2d s2e s1b s2f
index 3565963c455de23e8b36d639ff1543bf2e268114..12168f8f8a90e5bd583a401bc7240f02ff66fe84 100644 (file)
@@ -15,14 +15,14 @@ teardown
   DROP TABLE queue;
 }
 
-session "s1"
+session s1
 setup      { BEGIN; }
-step "s1a" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
-step "s1b" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
-step "s1c" { COMMIT; }
+step s1a   { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
+step s1b   { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
+step s1c   { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN; }
-step "s2a" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
-step "s2b" { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
-step "s2c" { COMMIT; }
+step s2a   { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
+step s2b   { SELECT * FROM queue ORDER BY id FOR UPDATE SKIP LOCKED LIMIT 1; }
+step s2c   { COMMIT; }
index 63784ce0a7801e5d830739b9aa2cd2d57382fdbe..2d4c59c21b146441f1ad215b3f2369e5e8d94cd1 100644 (file)
@@ -25,14 +25,14 @@ teardown
   DROP TABLE statute, offense;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rx1" { SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); }
-step "wy1" { INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); }
-step "c1"  { COMMIT; }
+step rx1   { SELECT count(*) FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date <= DATE '2009-05-15' AND (exp_date IS NULL OR exp_date > DATE '2009-05-15'); }
+step wy1   { INSERT INTO offense VALUES (1, '123.45(1)a', DATE '2009-05-15'); }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "ry2" { SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; }
-step "wx2" { DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; }
-step "c2"  { COMMIT; }
+step ry2   { SELECT count(*) FROM offense WHERE statute_cite = '123.45(1)a' AND offense_date >= DATE '2008-01-01'; }
+step wx2   { DELETE FROM statute WHERE statute_cite = '123.45(1)a' AND eff_date = DATE '2008-01-01'; }
+step c2        { COMMIT; }
index e167e1885af905b35a2b89b0ee24f2a8925f5feb..c747b4ae28dbf52ad81866695060d09654e183c9 100644 (file)
@@ -11,20 +11,20 @@ teardown
  DROP TABLE accounts;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL READ COMMITTED; }
-step "rdtbl"   { SELECT * FROM accounts; }
-step "wrtbl"   { UPDATE accounts SET balance = balance + 100; }
+step rdtbl { SELECT * FROM accounts; }
+step wrtbl { UPDATE accounts SET balance = balance + 100; }
 teardown   { ABORT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL READ COMMITTED; }
-step "sto" { SET statement_timeout = '10ms'; }
-step "lto" { SET lock_timeout = '10ms'; }
-step "lsto"    { SET lock_timeout = '10ms'; SET statement_timeout = '10s'; }
-step "slto"    { SET lock_timeout = '10s'; SET statement_timeout = '10ms'; }
-step "locktbl" { LOCK TABLE accounts; }
-step "update"  { DELETE FROM accounts WHERE accountid = 'checking'; }
+step sto   { SET statement_timeout = '10ms'; }
+step lto   { SET lock_timeout = '10ms'; }
+step lsto  { SET lock_timeout = '10ms'; SET statement_timeout = '10s'; }
+step slto  { SET lock_timeout = '10s'; SET statement_timeout = '10ms'; }
+step locktbl   { LOCK TABLE accounts; }
+step update    { DELETE FROM accounts WHERE accountid = 'checking'; }
 teardown   { ABORT; }
 
 # It's possible that the isolation tester will not observe the final
@@ -32,18 +32,18 @@ teardown    { ABORT; }
 # We can ensure consistent test output by marking those steps with (*).
 
 # statement timeout, table-level lock
-permutation "rdtbl" "sto" "locktbl"(*)
+permutation rdtbl sto locktbl(*)
 # lock timeout, table-level lock
-permutation "rdtbl" "lto" "locktbl"(*)
+permutation rdtbl lto locktbl(*)
 # lock timeout expires first, table-level lock
-permutation "rdtbl" "lsto" "locktbl"(*)
+permutation rdtbl lsto locktbl(*)
 # statement timeout expires first, table-level lock
-permutation "rdtbl" "slto" "locktbl"(*)
+permutation rdtbl slto locktbl(*)
 # statement timeout, row-level lock
-permutation "wrtbl" "sto" "update"(*)
+permutation wrtbl sto update(*)
 # lock timeout, row-level lock
-permutation "wrtbl" "lto" "update"(*)
+permutation wrtbl lto update(*)
 # lock timeout expires first, row-level lock
-permutation "wrtbl" "lsto" "update"(*)
+permutation wrtbl lsto update(*)
 # statement timeout expires first, row-level lock
-permutation "wrtbl" "slto" "update"(*)
+permutation wrtbl slto update(*)
index 843f41c77f2e4ede8cbc093ace0240171ec8d9f9..d98121a5f8a39e2522fe47671ed94f445fb7165e 100644 (file)
@@ -15,14 +15,14 @@ teardown
  DROP TABLE accounts;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "wx1" { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; }
-step "rxy1"    { SELECT SUM(balance) FROM accounts; }
-step "c1"  { COMMIT; }
+step wx1   { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'checking'; }
+step rxy1  { SELECT SUM(balance) FROM accounts; }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "wy2" { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; }
-step "rxy2"    { SELECT SUM(balance) FROM accounts; }
-step "c2"  { COMMIT; }
+step wy2   { UPDATE accounts SET balance = balance - 200 WHERE accountid = 'savings'; }
+step rxy2  { SELECT SUM(balance) FROM accounts; }
+step c2        { COMMIT; }
index 922b572f2d7fb44f53e1d95d681a20a543a775c7..85582306c4163e735a232b3ba3a5af7b74a16a16 100644 (file)
@@ -11,53 +11,53 @@ teardown {
    DROP TABLE multixact_conflict;
 }
 
-session "s1"
-step "s1_begin" { BEGIN; }
-step "s1_lcksvpt" { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; }
-step "s1_tuplock1" { SELECT * FROM multixact_conflict FOR KEY SHARE; }
-step "s1_tuplock2" { SELECT * FROM multixact_conflict FOR SHARE; }
-step "s1_tuplock3" { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; }
-step "s1_tuplock4" { SELECT * FROM multixact_conflict FOR UPDATE; }
-step "s1_commit" { COMMIT; }
+session s1
+step s1_begin { BEGIN; }
+step s1_lcksvpt { SELECT * FROM multixact_conflict FOR KEY SHARE; SAVEPOINT foo; }
+step s1_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; }
+step s1_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; }
+step s1_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; }
+step s1_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; }
+step s1_commit { COMMIT; }
 
-session "s2"
-step "s2_tuplock1" { SELECT * FROM multixact_conflict FOR KEY SHARE; }
-step "s2_tuplock2" { SELECT * FROM multixact_conflict FOR SHARE; }
-step "s2_tuplock3" { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; }
-step "s2_tuplock4" { SELECT * FROM multixact_conflict FOR UPDATE; }
+session s2
+step s2_tuplock1 { SELECT * FROM multixact_conflict FOR KEY SHARE; }
+step s2_tuplock2 { SELECT * FROM multixact_conflict FOR SHARE; }
+step s2_tuplock3 { SELECT * FROM multixact_conflict FOR NO KEY UPDATE; }
+step s2_tuplock4 { SELECT * FROM multixact_conflict FOR UPDATE; }
 
 # The version with savepoints test the multixact cases
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock1" "s2_tuplock1" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock1" "s2_tuplock2" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock1" "s2_tuplock3" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock1" "s2_tuplock4" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock2" "s2_tuplock1" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock2" "s2_tuplock2" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock2" "s2_tuplock3" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock2" "s2_tuplock4" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock3" "s2_tuplock1" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock3" "s2_tuplock2" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock3" "s2_tuplock3" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock3" "s2_tuplock4" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock4" "s2_tuplock1" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock4" "s2_tuplock2" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock4" "s2_tuplock3" "s1_commit"
-permutation "s1_begin" "s1_lcksvpt" "s1_tuplock4" "s2_tuplock4" "s1_commit"
+permutation s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock1 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock2 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock3 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock1 s2_tuplock4 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock1 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock2 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock3 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock2 s2_tuplock4 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock1 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock2 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock3 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock3 s2_tuplock4 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock1 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock2 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock3 s1_commit
+permutation s1_begin s1_lcksvpt s1_tuplock4 s2_tuplock4 s1_commit
 
 # no multixacts here
-permutation "s1_begin"              "s1_tuplock1" "s2_tuplock1" "s1_commit"
-permutation "s1_begin"              "s1_tuplock1" "s2_tuplock2" "s1_commit"
-permutation "s1_begin"              "s1_tuplock1" "s2_tuplock3" "s1_commit"
-permutation "s1_begin"              "s1_tuplock1" "s2_tuplock4" "s1_commit"
-permutation "s1_begin"              "s1_tuplock2" "s2_tuplock1" "s1_commit"
-permutation "s1_begin"              "s1_tuplock2" "s2_tuplock2" "s1_commit"
-permutation "s1_begin"              "s1_tuplock2" "s2_tuplock3" "s1_commit"
-permutation "s1_begin"              "s1_tuplock2" "s2_tuplock4" "s1_commit"
-permutation "s1_begin"              "s1_tuplock3" "s2_tuplock1" "s1_commit"
-permutation "s1_begin"              "s1_tuplock3" "s2_tuplock2" "s1_commit"
-permutation "s1_begin"              "s1_tuplock3" "s2_tuplock3" "s1_commit"
-permutation "s1_begin"              "s1_tuplock3" "s2_tuplock4" "s1_commit"
-permutation "s1_begin"              "s1_tuplock4" "s2_tuplock1" "s1_commit"
-permutation "s1_begin"              "s1_tuplock4" "s2_tuplock2" "s1_commit"
-permutation "s1_begin"              "s1_tuplock4" "s2_tuplock3" "s1_commit"
-permutation "s1_begin"              "s1_tuplock4" "s2_tuplock4" "s1_commit"
+permutation s1_begin              s1_tuplock1 s2_tuplock1 s1_commit
+permutation s1_begin              s1_tuplock1 s2_tuplock2 s1_commit
+permutation s1_begin              s1_tuplock1 s2_tuplock3 s1_commit
+permutation s1_begin              s1_tuplock1 s2_tuplock4 s1_commit
+permutation s1_begin              s1_tuplock2 s2_tuplock1 s1_commit
+permutation s1_begin              s1_tuplock2 s2_tuplock2 s1_commit
+permutation s1_begin              s1_tuplock2 s2_tuplock3 s1_commit
+permutation s1_begin              s1_tuplock2 s2_tuplock4 s1_commit
+permutation s1_begin              s1_tuplock3 s2_tuplock1 s1_commit
+permutation s1_begin              s1_tuplock3 s2_tuplock2 s1_commit
+permutation s1_begin              s1_tuplock3 s2_tuplock3 s1_commit
+permutation s1_begin              s1_tuplock3 s2_tuplock4 s1_commit
+permutation s1_begin              s1_tuplock4 s2_tuplock1 s1_commit
+permutation s1_begin              s1_tuplock4 s2_tuplock2 s1_commit
+permutation s1_begin              s1_tuplock4 s2_tuplock3 s1_commit
+permutation s1_begin              s1_tuplock4 s2_tuplock4 s1_commit
index d3de0bcbc7880c4a8116fb8ef1e9f9cee46795f5..4b940bcb124faf5c2c07ca0d1d34f499cc62b98b 100644 (file)
@@ -8,30 +8,30 @@ teardown {
    DROP TABLE pktab;
 }
 
-session "s1"
-step "s1_advlock" {
+session s1
+step s1_advlock {
     SELECT pg_advisory_lock(142857),
         pg_advisory_lock(285714),
         pg_advisory_lock(571428);
  }
-step "s1_chain" { UPDATE pktab SET data = DEFAULT; }
-step "s1_begin" { BEGIN; }
-step "s1_grablock" { SELECT * FROM pktab FOR KEY SHARE; }
-step "s1_advunlock1" { SELECT pg_advisory_unlock(142857); }
-step "s1_advunlock2" { SELECT pg_advisory_unlock(285714); }
-step "s1_advunlock3" { SELECT pg_advisory_unlock(571428); }
-step "s1_commit" { COMMIT; }
+step s1_chain { UPDATE pktab SET data = DEFAULT; }
+step s1_begin { BEGIN; }
+step s1_grablock { SELECT * FROM pktab FOR KEY SHARE; }
+step s1_advunlock1 { SELECT pg_advisory_unlock(142857); }
+step s1_advunlock2 { SELECT pg_advisory_unlock(285714); }
+step s1_advunlock3 { SELECT pg_advisory_unlock(571428); }
+step s1_commit { COMMIT; }
 
-session "s2"
-step "s2_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(142857) IS NOT NULL; }
+session s2
+step s2_update { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(142857) IS NOT NULL; }
 
-session "s3"
-step "s3_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(285714) IS NOT NULL; }
+session s3
+step s3_update { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(285714) IS NOT NULL; }
 
-session "s4"
-step "s4_update" { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(571428) IS NOT NULL; }
+session s4
+step s4_update { UPDATE pktab SET data = DEFAULT WHERE pg_advisory_lock_shared(571428) IS NOT NULL; }
 
 # We use blocker annotations on the s1_advunlockN steps so that we will not
 # move on to the next step until the other session's released step finishes.
 # This ensures stable ordering of the test output.
-permutation "s1_advlock" "s2_update" "s3_update" "s4_update" "s1_chain" "s1_begin" "s1_grablock" "s1_advunlock1"("s2_update") "s1_advunlock2"("s3_update") "s1_advunlock3"("s4_update") "s1_commit"
+permutation s1_advlock s2_update s3_update s4_update s1_chain s1_begin s1_grablock s1_advunlock1(s2_update) s1_advunlock2(s3_update) s1_advunlock3(s4_update) s1_commit
index 106c2465c0aebabe26212be55f8dc707c677abc5..6221a27f4b0ba611f31f8120c8709576134f1f66 100644 (file)
@@ -16,54 +16,54 @@ teardown
     drop table tlu_job;
 }
 
-session "s0"
-step "s0_begin" { begin; }
-step "s0_keyshare" { select id from tlu_job where id = 1 for key share;}
-step "s0_rollback" { rollback; }
+session s0
+step s0_begin { begin; }
+step s0_keyshare { select id from tlu_job where id = 1 for key share;}
+step s0_rollback { rollback; }
 
-session "s1"
+session s1
 setup { begin; }
-step "s1_keyshare" { select id from tlu_job where id = 1 for key share;}
-step "s1_share" { select id from tlu_job where id = 1 for share; }
-step "s1_fornokeyupd" { select id from tlu_job where id = 1 for no key update; }
-step "s1_update" { update tlu_job set name = 'b' where id = 1;  }
-step "s1_savept_e" { savepoint s1_e; }
-step "s1_savept_f" { savepoint s1_f; }
-step "s1_rollback_e" { rollback to s1_e; }
-step "s1_rollback_f" { rollback to s1_f; }
-step "s1_rollback" { rollback; }
-step "s1_commit" { commit; }
+step s1_keyshare { select id from tlu_job where id = 1 for key share;}
+step s1_share { select id from tlu_job where id = 1 for share; }
+step s1_fornokeyupd { select id from tlu_job where id = 1 for no key update; }
+step s1_update { update tlu_job set name = 'b' where id = 1;  }
+step s1_savept_e { savepoint s1_e; }
+step s1_savept_f { savepoint s1_f; }
+step s1_rollback_e { rollback to s1_e; }
+step s1_rollback_f { rollback to s1_f; }
+step s1_rollback { rollback; }
+step s1_commit { commit; }
 
-session "s2"
+session s2
 setup { begin; }
-step "s2_for_keyshare" { select id from tlu_job where id = 1 for key share; }
-step "s2_fornokeyupd" { select id from tlu_job where id = 1 for no key update; }
-step "s2_for_update" { select id from tlu_job where id = 1 for update; }
-step "s2_update" { update tlu_job set name = 'b' where id = 1; }
-step "s2_delete" { delete from tlu_job where id = 1; }
-step "s2_rollback" { rollback; }
+step s2_for_keyshare { select id from tlu_job where id = 1 for key share; }
+step s2_fornokeyupd { select id from tlu_job where id = 1 for no key update; }
+step s2_for_update { select id from tlu_job where id = 1 for update; }
+step s2_update { update tlu_job set name = 'b' where id = 1; }
+step s2_delete { delete from tlu_job where id = 1; }
+step s2_rollback { rollback; }
 
-session "s3"
+session s3
 setup { begin; }
-step "s3_keyshare" { select id from tlu_job where id = 1 for key share; }
-step "s3_share" { select id from tlu_job where id = 1 for share; }
-step "s3_for_update" { select id from tlu_job where id = 1 for update; }
-step "s3_update" { update tlu_job set name = 'c' where id = 1; }
-step "s3_delete" { delete from tlu_job where id = 1; }
-step "s3_rollback" { rollback; }
-step "s3_commit" { commit; }
+step s3_keyshare { select id from tlu_job where id = 1 for key share; }
+step s3_share { select id from tlu_job where id = 1 for share; }
+step s3_for_update { select id from tlu_job where id = 1 for update; }
+step s3_update { update tlu_job set name = 'c' where id = 1; }
+step s3_delete { delete from tlu_job where id = 1; }
+step s3_rollback { rollback; }
+step s3_commit { commit; }
 
 # test that s2 will not deadlock with s3 when s1 is rolled back
-permutation "s1_share" "s2_for_update" "s3_share" "s3_for_update" "s1_rollback" "s3_rollback" "s2_rollback"
+permutation s1_share s2_for_update s3_share s3_for_update s1_rollback s3_rollback s2_rollback
 # test that update does not cause deadlocks if it can proceed
-permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s1_update" "s3_update" "s1_rollback" "s3_rollback" "s2_rollback"
-permutation "s1_keyshare" "s2_for_update" "s3_keyshare" "s1_update" "s3_update" "s1_commit"   "s3_rollback" "s2_rollback"
+permutation s1_keyshare s2_for_update s3_keyshare s1_update s3_update s1_rollback s3_rollback s2_rollback
+permutation s1_keyshare s2_for_update s3_keyshare s1_update s3_update s1_commit   s3_rollback s2_rollback
 # test that delete does not cause deadlocks if it can proceed
-permutation "s1_keyshare" "s2_for_update" "s3_keyshare"  "s3_delete" "s1_rollback" "s3_rollback" "s2_rollback"
-permutation "s1_keyshare" "s2_for_update" "s3_keyshare"  "s3_delete" "s1_rollback" "s3_commit"   "s2_rollback"
+permutation s1_keyshare s2_for_update s3_keyshare  s3_delete s1_rollback s3_rollback s2_rollback
+permutation s1_keyshare s2_for_update s3_keyshare  s3_delete s1_rollback s3_commit   s2_rollback
 # test that sessions that don't upgrade locks acquire them in order
-permutation "s1_share" "s2_for_update" "s3_for_update" "s1_rollback" "s2_rollback" "s3_rollback"
-permutation "s1_share" "s2_update" "s3_update" "s1_rollback" "s2_rollback" "s3_rollback"
-permutation "s1_share" "s2_delete" "s3_delete" "s1_rollback" "s2_rollback" "s3_rollback"
+permutation s1_share s2_for_update s3_for_update s1_rollback s2_rollback s3_rollback
+permutation s1_share s2_update s3_update s1_rollback s2_rollback s3_rollback
+permutation s1_share s2_delete s3_delete s1_rollback s2_rollback s3_rollback
 # test s2 retrying the overall tuple lock algorithm after initially avoiding deadlock
-permutation "s1_keyshare" "s3_for_update" "s2_for_keyshare" "s1_savept_e" "s1_share" "s1_savept_f" "s1_fornokeyupd" "s2_fornokeyupd" "s0_begin" "s0_keyshare" "s1_rollback_f" "s0_keyshare" "s1_rollback_e" "s1_rollback" "s2_rollback" "s0_rollback" "s3_rollback"
+permutation s1_keyshare s3_for_update s2_for_keyshare s1_savept_e s1_share s1_savept_f s1_fornokeyupd s2_fornokeyupd s0_begin s0_keyshare s1_rollback_f s0_keyshare s1_rollback_e s1_rollback s2_rollback s0_rollback s3_rollback
index 277097125ac1a0f5a1be72ff12e2aefe85439a06..fc0289f236d7d2a48e624395a73e76e20193bee2 100644 (file)
@@ -24,17 +24,17 @@ teardown
  DROP TABLE D1, D2;
 }
 
-session "s1"
+session s1
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "wx1" { update D1 set id = id + 1; }
-step "c1"  { COMMIT; }
+step wx1   { update D1 set id = id + 1; }
+step c1        { COMMIT; }
 
-session "s2"
+session s2
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "rxwy2"   { update D2 set id = (select id+1 from D1); }
-step "c2"  { COMMIT; }
+step rxwy2 { update D2 set id = (select id+1 from D1); }
+step c2        { COMMIT; }
 
-session "s3"
+session s3
 setup      { BEGIN ISOLATION LEVEL SERIALIZABLE; }
-step "ry3" { select id from D2; }
-step "c3"  { COMMIT; }
+step ry3   { select id from D2; }
+step c3        { COMMIT; }
index 25c27d4ca6572ab5bdd99c099c86184b50817b26..8aad6aa6619705256bab8aedcea24acbc95c426a 100644 (file)
@@ -16,39 +16,39 @@ teardown
   DROP TABLE txn1;
 }
 
-session "foo"
+session foo
 setup                  { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; }
-step "foo_select"      { SELECT * FROM txn0 WHERE id = 42; }
-step "foo_insert"      { INSERT INTO txn1 SELECT 7, 'foo_insert'; }
-step "foo_commit"      { COMMIT; }
+step foo_select        { SELECT * FROM txn0 WHERE id = 42; }
+step foo_insert        { INSERT INTO txn1 SELECT 7, 'foo_insert'; }
+step foo_commit        { COMMIT; }
 
-session "bar"
+session bar
 setup                  { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; }
-step "bar_select"      { SELECT * FROM txn1 WHERE id = 7; }
-step "bar_insert"      { INSERT INTO txn0 SELECT 42, 'bar_insert'; }
-step "bar_commit"      { COMMIT; }
+step bar_select        { SELECT * FROM txn1 WHERE id = 7; }
+step bar_insert        { INSERT INTO txn0 SELECT 42, 'bar_insert'; }
+step bar_commit        { COMMIT; }
 
 # This session creates the conditions that confused bar's "conflict out"
 # handling in old releases affected by bug:
-session "trouble"
+session trouble
 setup                  { BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE; }
-step "trouble_update"  { UPDATE txn1 SET val = 'add physical version for "bar_select"' WHERE id = 7; }
-step "trouble_delete"  { DELETE FROM txn1 WHERE id = 7; }
-step "trouble_abort"   { ABORT; }
+step trouble_update    { UPDATE txn1 SET val = 'add physical version for "bar_select"' WHERE id = 7; }
+step trouble_delete    { DELETE FROM txn1 WHERE id = 7; }
+step trouble_abort     { ABORT; }
 
-permutation "foo_select"
-    "bar_insert"
-    "foo_insert" "foo_commit"
-    "trouble_update"   # Updates tuple...
-    "bar_select"       # Should observe one distinct XID per version
-    "bar_commit"       # "bar" should fail here at the latest
-    "trouble_abort"
+permutation foo_select
+    bar_insert
+    foo_insert foo_commit
+    trouble_update   # Updates tuple...
+    bar_select       # Should observe one distinct XID per version
+    bar_commit       # "bar" should fail here at the latest
+    trouble_abort
 
 # Same as above, but "trouble" session DELETEs this time around
-permutation "foo_select"
-    "bar_insert"
-    "foo_insert" "foo_commit"
-    "trouble_delete"   # Deletes tuple...
-    "bar_select"       # Should observe foo's XID
-    "bar_commit"       # "bar" should fail here at the latest
-    "trouble_abort"
+permutation foo_select
+    bar_insert
+    foo_insert foo_commit
+    trouble_delete   # Deletes tuple...
+    bar_select       # Should observe foo's XID
+    bar_commit       # "bar" should fail here at the latest
+    trouble_abort
index 10dd3ef3d23dfe521a4d90620c1b8c595cf497bf..0dad792e79803e6782392b161e8c4abcf5859ae5 100644 (file)
@@ -19,20 +19,20 @@ teardown
    DROP TABLE users, orders;
 }
 
-session "s1"
-step "s1b"  { BEGIN ISOLATION LEVEL REPEATABLE READ; }
-step "s1u1"  { UPDATE orders SET name = 'order of olivier (2)', user_id = 1 WHERE id = 1; }
-step "s1u2"  { UPDATE orders SET name = 'order of olivier (3)', user_id = 1 WHERE id = 1; }
-step "s1c"   { COMMIT; }
+session s1
+step s1b   { BEGIN ISOLATION LEVEL REPEATABLE READ; }
+step s1u1  { UPDATE orders SET name = 'order of olivier (2)', user_id = 1 WHERE id = 1; }
+step s1u2  { UPDATE orders SET name = 'order of olivier (3)', user_id = 1 WHERE id = 1; }
+step s1c   { COMMIT; }
 
-session "s2"
-step "s2b"   { BEGIN ISOLATION LEVEL REPEATABLE READ; }
-step "s2u"   { UPDATE users SET sometime = '1830-10-04' WHERE id = 1; }
-step "s2c"   { COMMIT; }
+session s2
+step s2b   { BEGIN ISOLATION LEVEL REPEATABLE READ; }
+step s2u   { UPDATE users SET sometime = '1830-10-04' WHERE id = 1; }
+step s2c   { COMMIT; }
 
-permutation "s1b" "s2b" "s2u" "s2c" "s1u1" "s1u2" "s1c"
-permutation "s1b" "s2b" "s2u" "s1u1" "s2c" "s1u2" "s1c"
-permutation "s1b" "s2b" "s1u1" "s2u" "s2c" "s1u2" "s1c"
-permutation "s1b" "s1u1" "s2b" "s2u" "s2c" "s1u2" "s1c"
-permutation "s1b" "s1u1" "s2b" "s1u2" "s2u" "s2c" "s1c"
-permutation "s1b" "s1u1" "s1u2" "s2b" "s2u" "s2c" "s1c"
+permutation s1b s2b s2u s2c s1u1 s1u2 s1c
+permutation s1b s2b s2u s1u1 s2c s1u2 s1c
+permutation s1b s2b s1u1 s2u s2c s1u2 s1c
+permutation s1b s1u1 s2b s2u s2c s1u2 s1c
+permutation s1b s1u1 s2b s1u2 s2u s2c s1c
+permutation s1b s1u1 s1u2 s2b s2u s2c s1c
index 6d9fa010b3c0ac55a391e914eaa7d1c7fb3ee5d2..ae2f79b8fe89a7774236436482cff26ad12b1d48 100644 (file)
@@ -19,30 +19,30 @@ teardown {
     drop table smalltbl;
 }
 
-session "worker"
-step "open" {
+session worker
+step open {
     begin;
     declare c1 cursor for select 1 as dummy from smalltbl;
 }
-step "fetch1" {
+step fetch1 {
     fetch next from c1;
 }
-step "close" {
+step close {
     commit;
 }
-step "stats" {
+step stats {
     select relpages, reltuples from pg_class
      where oid='smalltbl'::regclass;
 }
 
-session "vacuumer"
-step "vac" {
+session vacuumer
+step vac {
     vacuum smalltbl;
 }
-step "modify" {
+step modify {
     insert into smalltbl select max(id)+1 from smalltbl;
 }
 
-permutation "modify" "vac" "stats"
-permutation "modify" "open" "fetch1" "vac" "close" "stats"
-permutation "modify" "vac" "stats"
+permutation modify vac stats
+permutation modify open fetch1 vac close stats
+permutation modify vac stats
index 40cdc9f5bee887491ba2f6f88f982f94ba13cd29..ebfaacadfac69846fb685392f1f9120c4a8c548f 100644 (file)
@@ -32,17 +32,21 @@ static void addlitchar(char c);
 
 
 %x sql
-%x qstr
-
-digit          [0123456789]
-
-self           [,()*]
+%x qident
 
 non_newline        [^\n\r]
 space          [ \t\r\f]
 
 comment            ("#"{non_newline}*)
 
+digit          [0-9]
+ident_start        [A-Za-z\200-\377_]
+ident_cont     [A-Za-z\200-\377_0-9\$]
+
+identifier     {ident_start}{ident_cont}*
+
+self           [,()*]
+
 %%
 
 %{
@@ -50,6 +54,7 @@ comment           ("#"{non_newline}*)
    litbufsize = LITBUF_INIT;
 %}
 
+ /* Keywords (must appear before the {identifier} rule!) */
 notices            { return NOTICES; }
 permutation        { return PERMUTATION; }
 session            { return SESSION; }
@@ -57,33 +62,35 @@ setup           { return SETUP; }
 step           { return STEP; }
 teardown       { return TEARDOWN; }
 
-{digit}+       {
-                   yylval.integer = atoi(yytext);
-                   return INTEGER;
-               }
-
-{self}         { return yytext[0]; }
-
+ /* Whitespace and comments */
 [\n]           { yyline++; }
 {comment}      { /* ignore */ }
 {space}            { /* ignore */ }
 
- /* Quoted strings: "foo" */
+ /* Plain identifiers */
+{identifier}   {
+                   yylval.str = pg_strdup(yytext);
+                   return(identifier);
+               }
+
+ /* Quoted identifiers: "foo" */
 \"             {
                    litbufpos = 0;
-                   BEGIN(qstr);
+                   BEGIN(qident);
                }
-<qstr>\"       {
+<qident>\"\"   { addlitchar(yytext[0]); }
+<qident>\"     {
                    litbuf[litbufpos] = '\0';
                    yylval.str = pg_strdup(litbuf);
                    BEGIN(INITIAL);
-                   return(string_literal);
+                   return(identifier);
                }
-<qstr>.            { addlitchar(yytext[0]); }
-<qstr>\n       { yyerror("unexpected newline in quoted string"); }
-<qstr><<EOF>>  { yyerror("unterminated quoted string"); }
+<qident>.      { addlitchar(yytext[0]); }
+<qident>\n     { yyerror("unexpected newline in quoted identifier"); }
+<qident><<EOF>>    { yyerror("unterminated quoted identifier"); }
 
  /* SQL blocks: { UPDATE ... } */
+ /* We trim leading/trailing whitespace, otherwise they're unprocessed */
 "{"{space}*        {
 
                    litbufpos = 0;
@@ -106,6 +113,15 @@ teardown       { return TEARDOWN; }
                    yyerror("unterminated sql block");
                }
 
+ /* Numbers and punctuation */
+{digit}+       {
+                   yylval.integer = atoi(yytext);
+                   return INTEGER;
+               }
+
+{self}         { return yytext[0]; }
+
+ /* Anything else is an error */
 .              {
                    fprintf(stderr, "syntax error at line %d: unexpected character \"%s\"\n", yyline, yytext);
                    exit(1);