summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/test/isolation/README22
-rw-r--r--src/test/isolation/specparse.y14
-rw-r--r--src/test/isolation/specs/aborted-keyrevoke.spec46
-rw-r--r--src/test/isolation/specs/alter-table-1.spec298
-rw-r--r--src/test/isolation/specs/alter-table-2.spec118
-rw-r--r--src/test/isolation/specs/alter-table-3.spec116
-rw-r--r--src/test/isolation/specs/alter-table-4.spec26
-rw-r--r--src/test/isolation/specs/async-notify.spec56
-rw-r--r--src/test/isolation/specs/classroom-scheduling.spec16
-rw-r--r--src/test/isolation/specs/create-trigger.spec68
-rw-r--r--src/test/isolation/specs/deadlock-hard.spec66
-rw-r--r--src/test/isolation/specs/deadlock-simple.spec18
-rw-r--r--src/test/isolation/specs/deadlock-soft-2.spec30
-rw-r--r--src/test/isolation/specs/deadlock-soft.spec30
-rw-r--r--src/test/isolation/specs/delete-abort-savept-2.spec28
-rw-r--r--src/test/isolation/specs/delete-abort-savept.spec32
-rw-r--r--src/test/isolation/specs/drop-index-concurrently-1.spec36
-rw-r--r--src/test/isolation/specs/eval-plan-qual-trigger.spec420
-rw-r--r--src/test/isolation/specs/eval-plan-qual.spec80
-rw-r--r--src/test/isolation/specs/fk-contention.spec10
-rw-r--r--src/test/isolation/specs/fk-deadlock.spec44
-rw-r--r--src/test/isolation/specs/fk-deadlock2.spec38
-rw-r--r--src/test/isolation/specs/freeze-the-dead.spec48
-rw-r--r--src/test/isolation/specs/index-only-scan.spec12
-rw-r--r--src/test/isolation/specs/inherit-temp.spec56
-rw-r--r--src/test/isolation/specs/insert-conflict-do-nothing-2.spec38
-rw-r--r--src/test/isolation/specs/insert-conflict-do-nothing.spec20
-rw-r--r--src/test/isolation/specs/insert-conflict-do-update-2.spec20
-rw-r--r--src/test/isolation/specs/insert-conflict-do-update-3.spec16
-rw-r--r--src/test/isolation/specs/insert-conflict-do-update.spec20
-rw-r--r--src/test/isolation/specs/insert-conflict-specconflict.spec110
-rw-r--r--src/test/isolation/specs/insert-conflict-toast.spec14
-rw-r--r--src/test/isolation/specs/lock-committed-keyupdate.spec74
-rw-r--r--src/test/isolation/specs/lock-committed-update.spec84
-rw-r--r--src/test/isolation/specs/lock-update-delete.spec46
-rw-r--r--src/test/isolation/specs/lock-update-traversal.spec30
-rw-r--r--src/test/isolation/specs/multiple-cic.spec12
-rw-r--r--src/test/isolation/specs/multiple-row-versions.spec32
-rw-r--r--src/test/isolation/specs/multixact-no-deadlock.spec24
-rw-r--r--src/test/isolation/specs/multixact-no-forget.spec46
-rw-r--r--src/test/isolation/specs/nowait-2.spec20
-rw-r--r--src/test/isolation/specs/nowait-3.spec20
-rw-r--r--src/test/isolation/specs/nowait-4.spec22
-rw-r--r--src/test/isolation/specs/nowait-5.spec20
-rw-r--r--src/test/isolation/specs/nowait.spec12
-rw-r--r--src/test/isolation/specs/partial-index.spec16
-rw-r--r--src/test/isolation/specs/predicate-lock-hot-tuple.spec22
-rw-r--r--src/test/isolation/specs/prepared-transactions-cic.spec16
-rw-r--r--src/test/isolation/specs/prepared-transactions.spec2894
-rw-r--r--src/test/isolation/specs/project-manager.spec16
-rw-r--r--src/test/isolation/specs/propagate-lock-delete.spec46
-rw-r--r--src/test/isolation/specs/read-write-unique-2.spec20
-rw-r--r--src/test/isolation/specs/read-write-unique-3.spec14
-rw-r--r--src/test/isolation/specs/read-write-unique-4.spec22
-rw-r--r--src/test/isolation/specs/read-write-unique.spec20
-rw-r--r--src/test/isolation/specs/receipt-report.spec20
-rw-r--r--src/test/isolation/specs/referential-integrity.spec18
-rw-r--r--src/test/isolation/specs/ri-trigger.spec14
-rw-r--r--src/test/isolation/specs/simple-write-skew.spec12
-rw-r--r--src/test/isolation/specs/skip-locked-2.spec20
-rw-r--r--src/test/isolation/specs/skip-locked-3.spec20
-rw-r--r--src/test/isolation/specs/skip-locked-4.spec22
-rw-r--r--src/test/isolation/specs/skip-locked.spec16
-rw-r--r--src/test/isolation/specs/temporal-range-integrity.spec16
-rw-r--r--src/test/isolation/specs/timeouts.spec36
-rw-r--r--src/test/isolation/specs/total-cash.spec16
-rw-r--r--src/test/isolation/specs/tuplelock-conflict.spec90
-rw-r--r--src/test/isolation/specs/tuplelock-update.spec32
-rw-r--r--src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec78
-rw-r--r--src/test/isolation/specs/two-ids.spec18
-rw-r--r--src/test/isolation/specs/update-conflict-out.spec52
-rw-r--r--src/test/isolation/specs/update-locked-tuple.spec30
-rw-r--r--src/test/isolation/specs/vacuum-reltuples.spec22
-rw-r--r--src/test/isolation/specscanner.l54
74 files changed, 3053 insertions, 3027 deletions
diff --git a/src/test/isolation/README b/src/test/isolation/README
index 9d568e53543..8457a5689fb 100644
--- a/src/test/isolation/README
+++ b/src/test/isolation/README
@@ -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
diff --git a/src/test/isolation/specparse.y b/src/test/isolation/specparse.y
index 33bbbdaaf1c..a0222136ea6 100644
--- a/src/test/isolation/specparse.y
+++ b/src/test/isolation/specparse.y
@@ -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;
diff --git a/src/test/isolation/specs/aborted-keyrevoke.spec b/src/test/isolation/specs/aborted-keyrevoke.spec
index 08945d8b31c..4f6f9027ccb 100644
--- a/src/test/isolation/specs/aborted-keyrevoke.spec
+++ b/src/test/isolation/specs/aborted-keyrevoke.spec
@@ -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
diff --git a/src/test/isolation/specs/alter-table-1.spec b/src/test/isolation/specs/alter-table-1.spec
index 10e463f6bcf..dfd0ce70945 100644
--- a/src/test/isolation/specs/alter-table-1.spec
+++ b/src/test/isolation/specs/alter-table-1.spec
@@ -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
diff --git a/src/test/isolation/specs/alter-table-2.spec b/src/test/isolation/specs/alter-table-2.spec
index 9b17992d7d2..a3e3131e9f9 100644
--- a/src/test/isolation/specs/alter-table-2.spec
+++ b/src/test/isolation/specs/alter-table-2.spec
@@ -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
diff --git a/src/test/isolation/specs/alter-table-3.spec b/src/test/isolation/specs/alter-table-3.spec
index d07e3dde418..f70d9c07924 100644
--- a/src/test/isolation/specs/alter-table-3.spec
+++ b/src/test/isolation/specs/alter-table-3.spec
@@ -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
diff --git a/src/test/isolation/specs/alter-table-4.spec b/src/test/isolation/specs/alter-table-4.spec
index a9c1a937238..f143b790d96 100644
--- a/src/test/isolation/specs/alter-table-4.spec
+++ b/src/test/isolation/specs/alter-table-4.spec
@@ -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
diff --git a/src/test/isolation/specs/async-notify.spec b/src/test/isolation/specs/async-notify.spec
index a7b2600d25c..0b8cfd91083 100644
--- a/src/test/isolation/specs/async-notify.spec
+++ b/src/test/isolation/specs/async-notify.spec
@@ -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
diff --git a/src/test/isolation/specs/classroom-scheduling.spec b/src/test/isolation/specs/classroom-scheduling.spec
index a31565b9cd7..770715b149d 100644
--- a/src/test/isolation/specs/classroom-scheduling.spec
+++ b/src/test/isolation/specs/classroom-scheduling.spec
@@ -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; }
diff --git a/src/test/isolation/specs/create-trigger.spec b/src/test/isolation/specs/create-trigger.spec
index caac381757d..9d4710cbdde 100644
--- a/src/test/isolation/specs/create-trigger.spec
+++ b/src/test/isolation/specs/create-trigger.spec
@@ -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
diff --git a/src/test/isolation/specs/deadlock-hard.spec b/src/test/isolation/specs/deadlock-hard.spec
index 3316d75e953..60bedca237a 100644
--- a/src/test/isolation/specs/deadlock-hard.spec
+++ b/src/test/isolation/specs/deadlock-hard.spec
@@ -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
diff --git a/src/test/isolation/specs/deadlock-simple.spec b/src/test/isolation/specs/deadlock-simple.spec
index b1300ca77ce..3086dc7c867 100644
--- a/src/test/isolation/specs/deadlock-simple.spec
+++ b/src/test/isolation/specs/deadlock-simple.spec
@@ -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
diff --git a/src/test/isolation/specs/deadlock-soft-2.spec b/src/test/isolation/specs/deadlock-soft-2.spec
index 6ff915f6061..5b7d3db5036 100644
--- a/src/test/isolation/specs/deadlock-soft-2.spec
+++ b/src/test/isolation/specs/deadlock-soft-2.spec
@@ -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
diff --git a/src/test/isolation/specs/deadlock-soft.spec b/src/test/isolation/specs/deadlock-soft.spec
index 49d16e027c4..bc9c6a7d438 100644
--- a/src/test/isolation/specs/deadlock-soft.spec
+++ b/src/test/isolation/specs/deadlock-soft.spec
@@ -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
diff --git a/src/test/isolation/specs/delete-abort-savept-2.spec b/src/test/isolation/specs/delete-abort-savept-2.spec
index d35c67f670d..65bd936dcca 100644
--- a/src/test/isolation/specs/delete-abort-savept-2.spec
+++ b/src/test/isolation/specs/delete-abort-savept-2.spec
@@ -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
diff --git a/src/test/isolation/specs/delete-abort-savept.spec b/src/test/isolation/specs/delete-abort-savept.spec
index bc32e216829..498ffed32ab 100644
--- a/src/test/isolation/specs/delete-abort-savept.spec
+++ b/src/test/isolation/specs/delete-abort-savept.spec
@@ -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
diff --git a/src/test/isolation/specs/drop-index-concurrently-1.spec b/src/test/isolation/specs/drop-index-concurrently-1.spec
index dd42b70ddf3..812b5de2261 100644
--- a/src/test/isolation/specs/drop-index-concurrently-1.spec
+++ b/src/test/isolation/specs/drop-index-concurrently-1.spec
@@ -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
diff --git a/src/test/isolation/specs/eval-plan-qual-trigger.spec b/src/test/isolation/specs/eval-plan-qual-trigger.spec
index 9876948f9f2..be34f9af920 100644
--- a/src/test/isolation/specs/eval-plan-qual-trigger.spec
+++ b/src/test/isolation/specs/eval-plan-qual-trigger.spec
@@ -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
diff --git a/src/test/isolation/specs/eval-plan-qual.spec b/src/test/isolation/specs/eval-plan-qual.spec
index 3825dd22f6e..09dcaa1339f 100644
--- a/src/test/isolation/specs/eval-plan-qual.spec
+++ b/src/test/isolation/specs/eval-plan-qual.spec
@@ -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
diff --git a/src/test/isolation/specs/fk-contention.spec b/src/test/isolation/specs/fk-contention.spec
index 8481ae4e332..f11a1d8cefc 100644
--- a/src/test/isolation/specs/fk-contention.spec
+++ b/src/test/isolation/specs/fk-contention.spec
@@ -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'; }
diff --git a/src/test/isolation/specs/fk-deadlock.spec b/src/test/isolation/specs/fk-deadlock.spec
index 4f357c62ea5..b4970dd06fd 100644
--- a/src/test/isolation/specs/fk-deadlock.spec
+++ b/src/test/isolation/specs/fk-deadlock.spec
@@ -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
diff --git a/src/test/isolation/specs/fk-deadlock2.spec b/src/test/isolation/specs/fk-deadlock2.spec
index a8305246e13..c8e0e4eb19a 100644
--- a/src/test/isolation/specs/fk-deadlock2.spec
+++ b/src/test/isolation/specs/fk-deadlock2.spec
@@ -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
diff --git a/src/test/isolation/specs/freeze-the-dead.spec b/src/test/isolation/specs/freeze-the-dead.spec
index 219242841d4..926e0c5e213 100644
--- a/src/test/isolation/specs/freeze-the-dead.spec
+++ b/src/test/isolation/specs/freeze-the-dead.spec
@@ -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/E5711E62-8FDF-4DCA-A888-C200BF6B5742@amazon.com
@@ -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
diff --git a/src/test/isolation/specs/index-only-scan.spec b/src/test/isolation/specs/index-only-scan.spec
index 417bb02102e..4e4171ca80e 100644
--- a/src/test/isolation/specs/index-only-scan.spec
+++ b/src/test/isolation/specs/index-only-scan.spec
@@ -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; }
diff --git a/src/test/isolation/specs/inherit-temp.spec b/src/test/isolation/specs/inherit-temp.spec
index 5cd251d0aaa..644f919e846 100644
--- a/src/test/isolation/specs/inherit-temp.spec
+++ b/src/test/isolation/specs/inherit-temp.spec
@@ -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
diff --git a/src/test/isolation/specs/insert-conflict-do-nothing-2.spec b/src/test/isolation/specs/insert-conflict-do-nothing-2.spec
index f1e5bde357c..7909093d889 100644
--- a/src/test/isolation/specs/insert-conflict-do-nothing-2.spec
+++ b/src/test/isolation/specs/insert-conflict-do-nothing-2.spec
@@ -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
diff --git a/src/test/isolation/specs/insert-conflict-do-nothing.spec b/src/test/isolation/specs/insert-conflict-do-nothing.spec
index 71acc380c7a..b0e6a372476 100644
--- a/src/test/isolation/specs/insert-conflict-do-nothing.spec
+++ b/src/test/isolation/specs/insert-conflict-do-nothing.spec
@@ -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
diff --git a/src/test/isolation/specs/insert-conflict-do-update-2.spec b/src/test/isolation/specs/insert-conflict-do-update-2.spec
index 6e4f3d6017b..3ae220417e3 100644
--- a/src/test/isolation/specs/insert-conflict-do-update-2.spec
+++ b/src/test/isolation/specs/insert-conflict-do-update-2.spec
@@ -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
diff --git a/src/test/isolation/specs/insert-conflict-do-update-3.spec b/src/test/isolation/specs/insert-conflict-do-update-3.spec
index e282c3beca5..df6795467da 100644
--- a/src/test/isolation/specs/insert-conflict-do-update-3.spec
+++ b/src/test/isolation/specs/insert-conflict-do-update-3.spec
@@ -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
diff --git a/src/test/isolation/specs/insert-conflict-do-update.spec b/src/test/isolation/specs/insert-conflict-do-update.spec
index 7c8cb471002..62cdafda988 100644
--- a/src/test/isolation/specs/insert-conflict-do-update.spec
+++ b/src/test/isolation/specs/insert-conflict-do-update.spec
@@ -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
diff --git a/src/test/isolation/specs/insert-conflict-specconflict.spec b/src/test/isolation/specs/insert-conflict-specconflict.spec
index 3a70484fc29..e1afa6f11c3 100644
--- a/src/test/isolation/specs/insert-conflict-specconflict.spec
+++ b/src/test/isolation/specs/insert-conflict-specconflict.spec
@@ -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
diff --git a/src/test/isolation/specs/insert-conflict-toast.spec b/src/test/isolation/specs/insert-conflict-toast.spec
index c5e39ef9e31..efd4474f377 100644
--- a/src/test/isolation/specs/insert-conflict-toast.spec
+++ b/src/test/isolation/specs/insert-conflict-toast.spec
@@ -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
diff --git a/src/test/isolation/specs/lock-committed-keyupdate.spec b/src/test/isolation/specs/lock-committed-keyupdate.spec
index 1630282d0f4..652233c4beb 100644
--- a/src/test/isolation/specs/lock-committed-keyupdate.spec
+++ b/src/test/isolation/specs/lock-committed-keyupdate.spec
@@ -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
diff --git a/src/test/isolation/specs/lock-committed-update.spec b/src/test/isolation/specs/lock-committed-update.spec
index 0495c115707..74d80d53e61 100644
--- a/src/test/isolation/specs/lock-committed-update.spec
+++ b/src/test/isolation/specs/lock-committed-update.spec
@@ -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
diff --git a/src/test/isolation/specs/lock-update-delete.spec b/src/test/isolation/specs/lock-update-delete.spec
index b7b796fc019..b9dd7d12a99 100644
--- a/src/test/isolation/specs/lock-update-delete.spec
+++ b/src/test/isolation/specs/lock-update-delete.spec
@@ -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
diff --git a/src/test/isolation/specs/lock-update-traversal.spec b/src/test/isolation/specs/lock-update-traversal.spec
index 7042b9399cf..a7f83894a44 100644
--- a/src/test/isolation/specs/lock-update-traversal.spec
+++ b/src/test/isolation/specs/lock-update-traversal.spec
@@ -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
diff --git a/src/test/isolation/specs/multiple-cic.spec b/src/test/isolation/specs/multiple-cic.spec
index 3ac1d39d86d..e34a6b0f9b5 100644
--- a/src/test/isolation/specs/multiple-cic.spec
+++ b/src/test/isolation/specs/multiple-cic.spec
@@ -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(*)
diff --git a/src/test/isolation/specs/multiple-row-versions.spec b/src/test/isolation/specs/multiple-row-versions.spec
index 1bb5b4e8ba2..0779ea09b8d 100644
--- a/src/test/isolation/specs/multiple-row-versions.spec
+++ b/src/test/isolation/specs/multiple-row-versions.spec
@@ -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
diff --git a/src/test/isolation/specs/multixact-no-deadlock.spec b/src/test/isolation/specs/multixact-no-deadlock.spec
index 205658b897e..a8af724e58b 100644
--- a/src/test/isolation/specs/multixact-no-deadlock.spec
+++ b/src/test/isolation/specs/multixact-no-deadlock.spec
@@ -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
diff --git a/src/test/isolation/specs/multixact-no-forget.spec b/src/test/isolation/specs/multixact-no-forget.spec
index 7fb93c1e344..7f8a38b51b6 100644
--- a/src/test/isolation/specs/multixact-no-forget.spec
+++ b/src/test/isolation/specs/multixact-no-forget.spec
@@ -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
diff --git a/src/test/isolation/specs/nowait-2.spec b/src/test/isolation/specs/nowait-2.spec
index 69ce5edd81a..cf892f2cbec 100644
--- a/src/test/isolation/specs/nowait-2.spec
+++ b/src/test/isolation/specs/nowait-2.spec
@@ -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
diff --git a/src/test/isolation/specs/nowait-3.spec b/src/test/isolation/specs/nowait-3.spec
index 9e6b994fddc..06fb7624c3c 100644
--- a/src/test/isolation/specs/nowait-3.spec
+++ b/src/test/isolation/specs/nowait-3.spec
@@ -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
diff --git a/src/test/isolation/specs/nowait-4.spec b/src/test/isolation/specs/nowait-4.spec
index 48ac777d78a..da80330a62b 100644
--- a/src/test/isolation/specs/nowait-4.spec
+++ b/src/test/isolation/specs/nowait-4.spec
@@ -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
diff --git a/src/test/isolation/specs/nowait-5.spec b/src/test/isolation/specs/nowait-5.spec
index 75e9462fc1f..46108de16d4 100644
--- a/src/test/isolation/specs/nowait-5.spec
+++ b/src/test/isolation/specs/nowait-5.spec
@@ -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
diff --git a/src/test/isolation/specs/nowait.spec b/src/test/isolation/specs/nowait.spec
index 73580cd1b2a..a75e54cc67b 100644
--- a/src/test/isolation/specs/nowait.spec
+++ b/src/test/isolation/specs/nowait.spec
@@ -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; }
diff --git a/src/test/isolation/specs/partial-index.spec b/src/test/isolation/specs/partial-index.spec
index 74e72645d97..c0338418a8d 100644
--- a/src/test/isolation/specs/partial-index.spec
+++ b/src/test/isolation/specs/partial-index.spec
@@ -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; }
diff --git a/src/test/isolation/specs/predicate-lock-hot-tuple.spec b/src/test/isolation/specs/predicate-lock-hot-tuple.spec
index d16fb60533b..5b8aecc4ed0 100644
--- a/src/test/isolation/specs/predicate-lock-hot-tuple.spec
+++ b/src/test/isolation/specs/predicate-lock-hot-tuple.spec
@@ -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
diff --git a/src/test/isolation/specs/prepared-transactions-cic.spec b/src/test/isolation/specs/prepared-transactions-cic.spec
index c39eaf5ad0c..626b1b686a2 100644
--- a/src/test/isolation/specs/prepared-transactions-cic.spec
+++ b/src/test/isolation/specs/prepared-transactions-cic.spec
@@ -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
diff --git a/src/test/isolation/specs/prepared-transactions.spec b/src/test/isolation/specs/prepared-transactions.spec
index bb9e154e6ea..78b9d2c84ef 100644
--- a/src/test/isolation/specs/prepared-transactions.spec
+++ b/src/test/isolation/specs/prepared-transactions.spec
@@ -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
diff --git a/src/test/isolation/specs/project-manager.spec b/src/test/isolation/specs/project-manager.spec
index 884012dd89c..42e5fc53a2e 100644
--- a/src/test/isolation/specs/project-manager.spec
+++ b/src/test/isolation/specs/project-manager.spec
@@ -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; }
diff --git a/src/test/isolation/specs/propagate-lock-delete.spec b/src/test/isolation/specs/propagate-lock-delete.spec
index 857c36b3dbb..641fb842833 100644
--- a/src/test/isolation/specs/propagate-lock-delete.spec
+++ b/src/test/isolation/specs/propagate-lock-delete.spec
@@ -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
diff --git a/src/test/isolation/specs/read-write-unique-2.spec b/src/test/isolation/specs/read-write-unique-2.spec
index 5e7cbf2cf54..16c73e19c43 100644
--- a/src/test/isolation/specs/read-write-unique-2.spec
+++ b/src/test/isolation/specs/read-write-unique-2.spec
@@ -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
diff --git a/src/test/isolation/specs/read-write-unique-3.spec b/src/test/isolation/specs/read-write-unique-3.spec
index 52d287721b1..cba2c4c0bc0 100644
--- a/src/test/isolation/specs/read-write-unique-3.spec
+++ b/src/test/isolation/specs/read-write-unique-3.spec
@@ -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
diff --git a/src/test/isolation/specs/read-write-unique-4.spec b/src/test/isolation/specs/read-write-unique-4.spec
index ec447823484..90022488113 100644
--- a/src/test/isolation/specs/read-write-unique-4.spec
+++ b/src/test/isolation/specs/read-write-unique-4.spec
@@ -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
diff --git a/src/test/isolation/specs/read-write-unique.spec b/src/test/isolation/specs/read-write-unique.spec
index c782f10c43e..3ce059f5ceb 100644
--- a/src/test/isolation/specs/read-write-unique.spec
+++ b/src/test/isolation/specs/read-write-unique.spec
@@ -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
diff --git a/src/test/isolation/specs/receipt-report.spec b/src/test/isolation/specs/receipt-report.spec
index 5e1d51d0bd0..85ac60fb9f0 100644
--- a/src/test/isolation/specs/receipt-report.spec
+++ b/src/test/isolation/specs/receipt-report.spec
@@ -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; }
diff --git a/src/test/isolation/specs/referential-integrity.spec b/src/test/isolation/specs/referential-integrity.spec
index 0bea3eab973..ecaa9bba023 100644
--- a/src/test/isolation/specs/referential-integrity.spec
+++ b/src/test/isolation/specs/referential-integrity.spec
@@ -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; }
diff --git a/src/test/isolation/specs/ri-trigger.spec b/src/test/isolation/specs/ri-trigger.spec
index 78d1f2f226d..00fcdff414f 100644
--- a/src/test/isolation/specs/ri-trigger.spec
+++ b/src/test/isolation/specs/ri-trigger.spec
@@ -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; }
diff --git a/src/test/isolation/specs/simple-write-skew.spec b/src/test/isolation/specs/simple-write-skew.spec
index 0aee43f38ed..ecabbf1ded4 100644
--- a/src/test/isolation/specs/simple-write-skew.spec
+++ b/src/test/isolation/specs/simple-write-skew.spec
@@ -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; }
diff --git a/src/test/isolation/specs/skip-locked-2.spec b/src/test/isolation/specs/skip-locked-2.spec
index a179d343534..cfdaa938786 100644
--- a/src/test/isolation/specs/skip-locked-2.spec
+++ b/src/test/isolation/specs/skip-locked-2.spec
@@ -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
diff --git a/src/test/isolation/specs/skip-locked-3.spec b/src/test/isolation/specs/skip-locked-3.spec
index 30bf4c6b1a9..7921425ed87 100644
--- a/src/test/isolation/specs/skip-locked-3.spec
+++ b/src/test/isolation/specs/skip-locked-3.spec
@@ -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
diff --git a/src/test/isolation/specs/skip-locked-4.spec b/src/test/isolation/specs/skip-locked-4.spec
index ef182348801..02994a37bcd 100644
--- a/src/test/isolation/specs/skip-locked-4.spec
+++ b/src/test/isolation/specs/skip-locked-4.spec
@@ -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
diff --git a/src/test/isolation/specs/skip-locked.spec b/src/test/isolation/specs/skip-locked.spec
index 3565963c455..12168f8f8a9 100644
--- a/src/test/isolation/specs/skip-locked.spec
+++ b/src/test/isolation/specs/skip-locked.spec
@@ -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; }
diff --git a/src/test/isolation/specs/temporal-range-integrity.spec b/src/test/isolation/specs/temporal-range-integrity.spec
index 63784ce0a78..2d4c59c21b1 100644
--- a/src/test/isolation/specs/temporal-range-integrity.spec
+++ b/src/test/isolation/specs/temporal-range-integrity.spec
@@ -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; }
diff --git a/src/test/isolation/specs/timeouts.spec b/src/test/isolation/specs/timeouts.spec
index e167e1885af..c747b4ae28d 100644
--- a/src/test/isolation/specs/timeouts.spec
+++ b/src/test/isolation/specs/timeouts.spec
@@ -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(*)
diff --git a/src/test/isolation/specs/total-cash.spec b/src/test/isolation/specs/total-cash.spec
index 843f41c77f2..d98121a5f8a 100644
--- a/src/test/isolation/specs/total-cash.spec
+++ b/src/test/isolation/specs/total-cash.spec
@@ -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; }
diff --git a/src/test/isolation/specs/tuplelock-conflict.spec b/src/test/isolation/specs/tuplelock-conflict.spec
index 922b572f2d7..85582306c41 100644
--- a/src/test/isolation/specs/tuplelock-conflict.spec
+++ b/src/test/isolation/specs/tuplelock-conflict.spec
@@ -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
diff --git a/src/test/isolation/specs/tuplelock-update.spec b/src/test/isolation/specs/tuplelock-update.spec
index d3de0bcbc78..4b940bcb124 100644
--- a/src/test/isolation/specs/tuplelock-update.spec
+++ b/src/test/isolation/specs/tuplelock-update.spec
@@ -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
diff --git a/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec b/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec
index 106c2465c0a..6221a27f4b0 100644
--- a/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec
+++ b/src/test/isolation/specs/tuplelock-upgrade-no-deadlock.spec
@@ -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
diff --git a/src/test/isolation/specs/two-ids.spec b/src/test/isolation/specs/two-ids.spec
index 277097125ac..fc0289f236d 100644
--- a/src/test/isolation/specs/two-ids.spec
+++ b/src/test/isolation/specs/two-ids.spec
@@ -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; }
diff --git a/src/test/isolation/specs/update-conflict-out.spec b/src/test/isolation/specs/update-conflict-out.spec
index 25c27d4ca65..8aad6aa6619 100644
--- a/src/test/isolation/specs/update-conflict-out.spec
+++ b/src/test/isolation/specs/update-conflict-out.spec
@@ -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
diff --git a/src/test/isolation/specs/update-locked-tuple.spec b/src/test/isolation/specs/update-locked-tuple.spec
index 10dd3ef3d23..0dad792e798 100644
--- a/src/test/isolation/specs/update-locked-tuple.spec
+++ b/src/test/isolation/specs/update-locked-tuple.spec
@@ -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
diff --git a/src/test/isolation/specs/vacuum-reltuples.spec b/src/test/isolation/specs/vacuum-reltuples.spec
index 6d9fa010b3c..ae2f79b8fe8 100644
--- a/src/test/isolation/specs/vacuum-reltuples.spec
+++ b/src/test/isolation/specs/vacuum-reltuples.spec
@@ -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
diff --git a/src/test/isolation/specscanner.l b/src/test/isolation/specscanner.l
index 40cdc9f5bee..ebfaacadfac 100644
--- a/src/test/isolation/specscanner.l
+++ b/src/test/isolation/specscanner.l
@@ -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);