summaryrefslogtreecommitdiffstats
path: root/src/map/mpm/mpmDsd.c
blob: 662c9bb46340cabf6b0f5073da2008c7984daf0c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
/**CFile****************************************************************

  FileName    [mpmDsd.c]

  SystemName  [ABC: Logic synthesis and verification system.]

  PackageName [Configurable technology mapper.]

  Synopsis    [DSD manipulation.]

  Author      [Alan Mishchenko]
  
  Affiliation [UC Berkeley]

  Date        [Ver. 1.0. Started - June 1, 2013.]

  Revision    [$Id: mpmDsd.c,v 1.00 2013/06/01 00:00:00 alanmi Exp $]

***********************************************************************/

#include "mpmInt.h"
#include "misc/extra/extra.h"

ABC_NAMESPACE_IMPL_START

////////////////////////////////////////////////////////////////////////
///                        DECLARATIONS                              ///
////////////////////////////////////////////////////////////////////////

static Mpm_Dsd_t s_DsdClass6[595] = { 
    { 0,  0,  1, ABC_CONST(0x0000000000000000), "0" },   //    0
    { 1,  0,  2, ABC_CONST(0xAAAAAAAAAAAAAAAA), "a" },   //    1
    { 2,  1,  3, ABC_CONST(0x8888888888888888), "(ab)" },   //    2
    { 2,  3,  4, ABC_CONST(0x6666666666666666), "[ab]" },   //    3
    { 3,  2,  4, ABC_CONST(0x8080808080808080), "(abc)" },   //    4
    { 3,  2,  4, ABC_CONST(0x7070707070707070), "(!(ab)c)" },   //    5
    { 3,  4,  6, ABC_CONST(0x7878787878787878), "[(ab)c]" },   //    6
    { 3,  4,  5, ABC_CONST(0x6060606060606060), "([ab]c)" },   //    7
    { 3,  6,  8, ABC_CONST(0x9696969696969696), "[abc]" },   //    8
    { 3,  3,  4, ABC_CONST(0xCACACACACACACACA), "<abc>" },   //    9
    { 4,  3,  5, ABC_CONST(0x8000800080008000), "(abcd)" },   //   10
    { 4,  3,  5, ABC_CONST(0x7F007F007F007F00), "(!(abc)d)" },   //   11
    { 4,  5,  8, ABC_CONST(0x7F807F807F807F80), "[(abc)d]" },   //   12
    { 4,  3,  5, ABC_CONST(0x7000700070007000), "(!(ab)cd)" },   //   13
    { 4,  3,  5, ABC_CONST(0x8F008F008F008F00), "(!(!(ab)c)d)" },   //   14
    { 4,  5,  8, ABC_CONST(0x8F708F708F708F70), "[(!(ab)c)d]" },   //   15
    { 4,  5,  7, ABC_CONST(0x7800780078007800), "([(ab)c]d)" },   //   16
    { 4,  7, 12, ABC_CONST(0x8778877887788778), "[(ab)cd]" },   //   17
    { 4,  5,  6, ABC_CONST(0x6000600060006000), "([ab]cd)" },   //   18
    { 4,  5,  6, ABC_CONST(0x9F009F009F009F00), "(!([ab]c)d)" },   //   19
    { 4,  7, 10, ABC_CONST(0x9F609F609F609F60), "[([ab]c)d]" },   //   20
    { 4,  7,  9, ABC_CONST(0x9600960096009600), "([abc]d)" },   //   21
    { 4,  9, 16, ABC_CONST(0x6996699669966996), "[abcd]" },   //   22
    { 4,  4,  5, ABC_CONST(0xCA00CA00CA00CA00), "(<abc>d)" },   //   23
    { 4,  6,  8, ABC_CONST(0x35CA35CA35CA35CA), "[<abc>d]" },   //   24
    { 4,  3,  6, ABC_CONST(0x0777077707770777), "(!(ab)!(cd))" },   //   25
    { 4,  5,  9, ABC_CONST(0x7888788878887888), "[(ab)(cd)]" },   //   26
    { 4,  5,  7, ABC_CONST(0x0666066606660666), "([ab]!(cd))" },   //   27
    { 4,  7,  8, ABC_CONST(0x0660066006600660), "([ab][cd])" },   //   28
    { 4,  4,  6, ABC_CONST(0xCAAACAAACAAACAAA), "<ab(cd)>" },   //   29
    { 4,  6,  8, ABC_CONST(0xACCAACCAACCAACCA), "<ab[cd]>" },   //   30
    { 4,  4,  5, ABC_CONST(0xF088F088F088F088), "<(ab)cd>" },   //   31
    { 4,  6,  6, ABC_CONST(0xF066F066F066F066), "<[ab]cd>" },   //   32
    { 5,  4,  6, ABC_CONST(0x8000000080000000), "(abcde)" },   //   33
    { 5,  4,  6, ABC_CONST(0x7FFF00007FFF0000), "(!(abcd)e)" },   //   34
    { 5,  6, 10, ABC_CONST(0x7FFF80007FFF8000), "[(abcd)e]" },   //   35
    { 5,  4,  6, ABC_CONST(0x7F0000007F000000), "(!(abc)de)" },   //   36
    { 5,  4,  6, ABC_CONST(0x80FF000080FF0000), "(!(!(abc)d)e)" },   //   37
    { 5,  6, 10, ABC_CONST(0x80FF7F0080FF7F00), "[(!(abc)d)e]" },   //   38
    { 5,  6,  9, ABC_CONST(0x7F8000007F800000), "([(abc)d]e)" },   //   39
    { 5,  8, 16, ABC_CONST(0x807F7F80807F7F80), "[(abc)de]" },   //   40
    { 5,  4,  6, ABC_CONST(0x7000000070000000), "(!(ab)cde)" },   //   41
    { 5,  4,  6, ABC_CONST(0x8FFF00008FFF0000), "(!(!(ab)cd)e)" },   //   42
    { 5,  6, 10, ABC_CONST(0x8FFF70008FFF7000), "[(!(ab)cd)e]" },   //   43
    { 5,  4,  6, ABC_CONST(0x8F0000008F000000), "(!(!(ab)c)de)" },   //   44
    { 5,  4,  6, ABC_CONST(0x70FF000070FF0000), "(!(!(!(ab)c)d)e)" },   //   45
    { 5,  6, 10, ABC_CONST(0x70FF8F0070FF8F00), "[(!(!(ab)c)d)e]" },   //   46
    { 5,  6,  9, ABC_CONST(0x8F7000008F700000), "([(!(ab)c)d]e)" },   //   47
    { 5,  8, 16, ABC_CONST(0x708F8F70708F8F70), "[(!(ab)c)de]" },   //   48
    { 5,  6,  8, ABC_CONST(0x7800000078000000), "([(ab)c]de)" },   //   49
    { 5,  6,  8, ABC_CONST(0x87FF000087FF0000), "(!([(ab)c]d)e)" },   //   50
    { 5,  8, 14, ABC_CONST(0x87FF780087FF7800), "[([(ab)c]d)e]" },   //   51
    { 5,  8, 13, ABC_CONST(0x8778000087780000), "([(ab)cd]e)" },   //   52
    { 5, 10, 24, ABC_CONST(0x7887877878878778), "[(ab)cde]" },   //   53
    { 5,  6,  7, ABC_CONST(0x6000000060000000), "([ab]cde)" },   //   54
    { 5,  6,  7, ABC_CONST(0x9FFF00009FFF0000), "(!([ab]cd)e)" },   //   55
    { 5,  8, 12, ABC_CONST(0x9FFF60009FFF6000), "[([ab]cd)e]" },   //   56
    { 5,  6,  7, ABC_CONST(0x9F0000009F000000), "(!([ab]c)de)" },   //   57
    { 5,  6,  7, ABC_CONST(0x60FF000060FF0000), "(!(!([ab]c)d)e)" },   //   58
    { 5,  8, 12, ABC_CONST(0x60FF9F0060FF9F00), "[(!([ab]c)d)e]" },   //   59
    { 5,  8, 11, ABC_CONST(0x9F6000009F600000), "([([ab]c)d]e)" },   //   60
    { 5, 10, 20, ABC_CONST(0x609F9F60609F9F60), "[([ab]c)de]" },   //   61
    { 5,  8, 10, ABC_CONST(0x9600000096000000), "([abc]de)" },   //   62
    { 5,  8, 10, ABC_CONST(0x69FF000069FF0000), "(!([abc]d)e)" },   //   63
    { 5, 10, 18, ABC_CONST(0x69FF960069FF9600), "[([abc]d)e]" },   //   64
    { 5, 10, 17, ABC_CONST(0x6996000069960000), "([abcd]e)" },   //   65
    { 5, 12, 32, ABC_CONST(0x9669699696696996), "[abcde]" },   //   66
    { 5,  5,  6, ABC_CONST(0xCA000000CA000000), "(<abc>de)" },   //   67
    { 5,  5,  6, ABC_CONST(0x35FF000035FF0000), "(!(<abc>d)e)" },   //   68
    { 5,  7, 10, ABC_CONST(0x35FFCA0035FFCA00), "[(<abc>d)e]" },   //   69
    { 5,  7,  9, ABC_CONST(0x35CA000035CA0000), "([<abc>d]e)" },   //   70
    { 5,  9, 16, ABC_CONST(0xCA3535CACA3535CA), "[<abc>de]" },   //   71
    { 5,  4,  7, ABC_CONST(0x0777000007770000), "(!(ab)!(cd)e)" },   //   72
    { 5,  4,  7, ABC_CONST(0xF8880000F8880000), "(!(!(ab)!(cd))e)" },   //   73
    { 5,  6, 12, ABC_CONST(0xF8880777F8880777), "[(!(ab)!(cd))e]" },   //   74
    { 5,  6, 10, ABC_CONST(0x7888000078880000), "([(ab)(cd)]e)" },   //   75
    { 5,  6, 10, ABC_CONST(0x8777000087770000), "(![(ab)(cd)]e)" },   //   76
    { 5,  8, 18, ABC_CONST(0x8777788887777888), "[(ab)(cd)e]" },   //   77
    { 5,  6,  8, ABC_CONST(0x0666000006660000), "([ab]!(cd)e)" },   //   78
    { 5,  6,  8, ABC_CONST(0xF9990000F9990000), "(!([ab]!(cd))e)" },   //   79
    { 5,  8, 14, ABC_CONST(0xF9990666F9990666), "[([ab]!(cd))e]" },   //   80
    { 5,  8,  9, ABC_CONST(0x0660000006600000), "([ab][cd]e)" },   //   81
    { 5,  8,  9, ABC_CONST(0xF99F0000F99F0000), "(!([ab][cd])e)" },   //   82
    { 5, 10, 16, ABC_CONST(0xF99F0660F99F0660), "[([ab][cd])e]" },   //   83
    { 5,  5,  7, ABC_CONST(0xCAAA0000CAAA0000), "(<ab(cd)>e)" },   //   84
    { 5,  7, 12, ABC_CONST(0x3555CAAA3555CAAA), "[<ab(cd)>e]" },   //   85
    { 5,  7,  9, ABC_CONST(0xACCA0000ACCA0000), "(<ab[cd]>e)" },   //   86
    { 5,  9, 16, ABC_CONST(0x5335ACCA5335ACCA), "[<ab[cd]>e]" },   //   87
    { 5,  5,  6, ABC_CONST(0xF0880000F0880000), "(<(ab)cd>e)" },   //   88
    { 5,  5,  6, ABC_CONST(0x0F7700000F770000), "(!<(ab)cd>e)" },   //   89
    { 5,  7, 10, ABC_CONST(0x0F77F0880F77F088), "[<(ab)cd>e]" },   //   90
    { 5,  7,  7, ABC_CONST(0xF0660000F0660000), "(<[ab]cd>e)" },   //   91
    { 5,  9, 12, ABC_CONST(0x0F99F0660F99F066), "[<[ab]cd>e]" },   //   92
    { 5,  4,  8, ABC_CONST(0x007F7F7F007F7F7F), "(!(abc)!(de))" },   //   93
    { 5,  6, 12, ABC_CONST(0x7F8080807F808080), "[(abc)(de)]" },   //   94
    { 5,  4,  7, ABC_CONST(0x008F8F8F008F8F8F), "(!(!(ab)c)!(de))" },   //   95
    { 5,  6, 12, ABC_CONST(0x8F7070708F707070), "[(!(ab)c)(de)]" },   //   96
    { 5,  6, 10, ABC_CONST(0x0078787800787878), "([(ab)c]!(de))" },   //   97
    { 5,  6,  9, ABC_CONST(0x009F9F9F009F9F9F), "(!([ab]c)!(de))" },   //   98
    { 5,  8, 15, ABC_CONST(0x9F6060609F606060), "[([ab]c)(de)]" },   //   99
    { 5,  8, 13, ABC_CONST(0x0096969600969696), "([abc]!(de))" },   //  100
    { 5,  5,  7, ABC_CONST(0x00CACACA00CACACA), "(<abc>!(de))" },   //  101
    { 5,  7, 12, ABC_CONST(0x35CACACA35CACACA), "[<abc>(de)]" },   //  102
    { 5,  6,  9, ABC_CONST(0x007F7F00007F7F00), "(!(abc)[de])" },   //  103
    { 5,  6,  8, ABC_CONST(0x008F8F00008F8F00), "(!(!(ab)c)[de])" },   //  104
    { 5,  8, 11, ABC_CONST(0x0078780000787800), "([(ab)c][de])" },   //  105
    { 5,  8, 10, ABC_CONST(0x009F9F00009F9F00), "(!([ab]c)[de])" },   //  106
    { 5, 10, 14, ABC_CONST(0x0096960000969600), "([abc][de])" },   //  107
    { 5,  7,  8, ABC_CONST(0x00CACA0000CACA00), "(<abc>[de])" },   //  108
    { 5,  5,  8, ABC_CONST(0xCAAAAAAACAAAAAAA), "<ab(cde)>" },   //  109
    { 5,  5,  8, ABC_CONST(0xACCCAAAAACCCAAAA), "<ab(!(cd)e)>" },   //  110
    { 5,  7, 12, ABC_CONST(0xACCCCAAAACCCCAAA), "<ab[(cd)e]>" },   //  111
    { 5,  7, 10, ABC_CONST(0xACCAAAAAACCAAAAA), "<ab([cd]e)>" },   //  112
    { 5,  9, 16, ABC_CONST(0xCAACACCACAACACCA), "<ab[cde]>" },   //  113
    { 5,  6,  8, ABC_CONST(0xCCAACACACCAACACA), "<ab<cde>>" },   //  114
    { 5,  5,  7, ABC_CONST(0xC0AAAAAAC0AAAAAA), "<a(bc)(de)>" },   //  115
    { 5,  7,  8, ABC_CONST(0x3CAAAAAA3CAAAAAA), "<a[bc](de)>" },   //  116
    { 5,  5,  8, ABC_CONST(0xF0888888F0888888), "<(ab)c(de)>" },   //  117
    { 5,  7, 10, ABC_CONST(0x88F0F08888F0F088), "<(ab)c[de]>" },   //  118
    { 5,  7, 10, ABC_CONST(0xF0666666F0666666), "<[ab]c(de)>" },   //  119
    { 5,  9, 12, ABC_CONST(0x66F0F06666F0F066), "<[ab]c[de]>" },   //  120
    { 5,  5,  6, ABC_CONST(0xF0008888F0008888), "<(ab)(cd)e>" },   //  121
    { 5,  5,  6, ABC_CONST(0xF0007777F0007777), "<!(ab)(cd)e>" },   //  122
    { 5,  7,  7, ABC_CONST(0xF0006666F0006666), "<[ab](cd)e>" },   //  123
    { 5,  9,  8, ABC_CONST(0x0FF066660FF06666), "<[ab][cd]e>" },   //  124
    { 5,  5,  6, ABC_CONST(0xFF008080FF008080), "<(abc)de>" },   //  125
    { 5,  5,  6, ABC_CONST(0xFF007070FF007070), "<(!(ab)c)de>" },   //  126
    { 5,  7,  8, ABC_CONST(0xFF007878FF007878), "<[(ab)c]de>" },   //  127
    { 5,  7,  7, ABC_CONST(0xFF006060FF006060), "<([ab]c)de>" },   //  128
    { 5,  9, 10, ABC_CONST(0xFF009696FF009696), "<[abc]de>" },   //  129
    { 5,  6,  6, ABC_CONST(0xFF00CACAFF00CACA), "<<abc>de>" },   //  130
    { 6,  5,  7, ABC_CONST(0x8000000000000000), "(abcdef)" },   //  131
    { 6,  5,  7, ABC_CONST(0x7FFFFFFF00000000), "(!(abcde)f)" },   //  132
    { 6,  7, 12, ABC_CONST(0x7FFFFFFF80000000), "[(abcde)f]" },   //  133
    { 6,  5,  7, ABC_CONST(0x7FFF000000000000), "(!(abcd)ef)" },   //  134
    { 6,  5,  7, ABC_CONST(0x8000FFFF00000000), "(!(!(abcd)e)f)" },   //  135
    { 6,  7, 12, ABC_CONST(0x8000FFFF7FFF0000), "[(!(abcd)e)f]" },   //  136
    { 6,  7, 11, ABC_CONST(0x7FFF800000000000), "([(abcd)e]f)" },   //  137
    { 6,  9, 20, ABC_CONST(0x80007FFF7FFF8000), "[(abcd)ef]" },   //  138
    { 6,  5,  7, ABC_CONST(0x7F00000000000000), "(!(abc)def)" },   //  139
    { 6,  5,  7, ABC_CONST(0x80FFFFFF00000000), "(!(!(abc)de)f)" },   //  140
    { 6,  7, 12, ABC_CONST(0x80FFFFFF7F000000), "[(!(abc)de)f]" },   //  141
    { 6,  5,  7, ABC_CONST(0x80FF000000000000), "(!(!(abc)d)ef)" },   //  142
    { 6,  5,  7, ABC_CONST(0x7F00FFFF00000000), "(!(!(!(abc)d)e)f)" },   //  143
    { 6,  7, 12, ABC_CONST(0x7F00FFFF80FF0000), "[(!(!(abc)d)e)f]" },   //  144
    { 6,  7, 11, ABC_CONST(0x80FF7F0000000000), "([(!(abc)d)e]f)" },   //  145
    { 6,  9, 20, ABC_CONST(0x7F0080FF80FF7F00), "[(!(abc)d)ef]" },   //  146
    { 6,  7, 10, ABC_CONST(0x7F80000000000000), "([(abc)d]ef)" },   //  147
    { 6,  7, 10, ABC_CONST(0x807FFFFF00000000), "(!([(abc)d]e)f)" },   //  148
    { 6,  9, 18, ABC_CONST(0x807FFFFF7F800000), "[([(abc)d]e)f]" },   //  149
    { 6,  9, 17, ABC_CONST(0x807F7F8000000000), "([(abc)de]f)" },   //  150
    { 6, 11, 32, ABC_CONST(0x7F80807F807F7F80), "[(abc)def]" },   //  151
    { 6,  5,  7, ABC_CONST(0x7000000000000000), "(!(ab)cdef)" },   //  152
    { 6,  5,  7, ABC_CONST(0x8FFFFFFF00000000), "(!(!(ab)cde)f)" },   //  153
    { 6,  7, 12, ABC_CONST(0x8FFFFFFF70000000), "[(!(ab)cde)f]" },   //  154
    { 6,  5,  7, ABC_CONST(0x8FFF000000000000), "(!(!(ab)cd)ef)" },   //  155
    { 6,  5,  7, ABC_CONST(0x7000FFFF00000000), "(!(!(!(ab)cd)e)f)" },   //  156
    { 6,  7, 12, ABC_CONST(0x7000FFFF8FFF0000), "[(!(!(ab)cd)e)f]" },   //  157
    { 6,  7, 11, ABC_CONST(0x8FFF700000000000), "([(!(ab)cd)e]f)" },   //  158
    { 6,  9, 20, ABC_CONST(0x70008FFF8FFF7000), "[(!(ab)cd)ef]" },   //  159
    { 6,  5,  7, ABC_CONST(0x8F00000000000000), "(!(!(ab)c)def)" },   //  160
    { 6,  5,  7, ABC_CONST(0x70FFFFFF00000000), "(!(!(!(ab)c)de)f)" },   //  161
    { 6,  7, 12, ABC_CONST(0x70FFFFFF8F000000), "[(!(!(ab)c)de)f]" },   //  162
    { 6,  5,  7, ABC_CONST(0x70FF000000000000), "(!(!(!(ab)c)d)ef)" },   //  163
    { 6,  5,  7, ABC_CONST(0x8F00FFFF00000000), "(!(!(!(!(ab)c)d)e)f)" },   //  164
    { 6,  7, 12, ABC_CONST(0x8F00FFFF70FF0000), "[(!(!(!(ab)c)d)e)f]" },   //  165
    { 6,  7, 11, ABC_CONST(0x70FF8F0000000000), "([(!(!(ab)c)d)e]f)" },   //  166
    { 6,  9, 20, ABC_CONST(0x8F0070FF70FF8F00), "[(!(!(ab)c)d)ef]" },   //  167
    { 6,  7, 10, ABC_CONST(0x8F70000000000000), "([(!(ab)c)d]ef)" },   //  168
    { 6,  7, 10, ABC_CONST(0x708FFFFF00000000), "(!([(!(ab)c)d]e)f)" },   //  169
    { 6,  9, 18, ABC_CONST(0x708FFFFF8F700000), "[([(!(ab)c)d]e)f]" },   //  170
    { 6,  9, 17, ABC_CONST(0x708F8F7000000000), "([(!(ab)c)de]f)" },   //  171
    { 6, 11, 32, ABC_CONST(0x8F70708F708F8F70), "[(!(ab)c)def]" },   //  172
    { 6,  7,  9, ABC_CONST(0x7800000000000000), "([(ab)c]def)" },   //  173
    { 6,  7,  9, ABC_CONST(0x87FFFFFF00000000), "(!([(ab)c]de)f)" },   //  174
    { 6,  9, 16, ABC_CONST(0x87FFFFFF78000000), "[([(ab)c]de)f]" },   //  175
    { 6,  7,  9, ABC_CONST(0x87FF000000000000), "(!([(ab)c]d)ef)" },   //  176
    { 6,  7,  9, ABC_CONST(0x7800FFFF00000000), "(!(!([(ab)c]d)e)f)" },   //  177
    { 6,  9, 16, ABC_CONST(0x7800FFFF87FF0000), "[(!([(ab)c]d)e)f]" },   //  178
    { 6,  9, 15, ABC_CONST(0x87FF780000000000), "([([(ab)c]d)e]f)" },   //  179
    { 6, 11, 28, ABC_CONST(0x780087FF87FF7800), "[([(ab)c]d)ef]" },   //  180
    { 6,  9, 14, ABC_CONST(0x8778000000000000), "([(ab)cd]ef)" },   //  181
    { 6,  9, 14, ABC_CONST(0x7887FFFF00000000), "(!([(ab)cd]e)f)" },   //  182
    { 6, 11, 26, ABC_CONST(0x7887FFFF87780000), "[([(ab)cd]e)f]" },   //  183
    { 6, 11, 25, ABC_CONST(0x7887877800000000), "([(ab)cde]f)" },   //  184
    { 6, 13, 48, ABC_CONST(0x8778788778878778), "[(ab)cdef]" },   //  185
    { 6,  7,  8, ABC_CONST(0x6000000000000000), "([ab]cdef)" },   //  186
    { 6,  7,  8, ABC_CONST(0x9FFFFFFF00000000), "(!([ab]cde)f)" },   //  187
    { 6,  9, 14, ABC_CONST(0x9FFFFFFF60000000), "[([ab]cde)f]" },   //  188
    { 6,  7,  8, ABC_CONST(0x9FFF000000000000), "(!([ab]cd)ef)" },   //  189
    { 6,  7,  8, ABC_CONST(0x6000FFFF00000000), "(!(!([ab]cd)e)f)" },   //  190
    { 6,  9, 14, ABC_CONST(0x6000FFFF9FFF0000), "[(!([ab]cd)e)f]" },   //  191
    { 6,  9, 13, ABC_CONST(0x9FFF600000000000), "([([ab]cd)e]f)" },   //  192
    { 6, 11, 24, ABC_CONST(0x60009FFF9FFF6000), "[([ab]cd)ef]" },   //  193
    { 6,  7,  8, ABC_CONST(0x9F00000000000000), "(!([ab]c)def)" },   //  194
    { 6,  7,  8, ABC_CONST(0x60FFFFFF00000000), "(!(!([ab]c)de)f)" },   //  195
    { 6,  9, 14, ABC_CONST(0x60FFFFFF9F000000), "[(!([ab]c)de)f]" },   //  196
    { 6,  7,  8, ABC_CONST(0x60FF000000000000), "(!(!([ab]c)d)ef)" },   //  197
    { 6,  7,  8, ABC_CONST(0x9F00FFFF00000000), "(!(!(!([ab]c)d)e)f)" },   //  198
    { 6,  9, 14, ABC_CONST(0x9F00FFFF60FF0000), "[(!(!([ab]c)d)e)f]" },   //  199
    { 6,  9, 13, ABC_CONST(0x60FF9F0000000000), "([(!([ab]c)d)e]f)" },   //  200
    { 6, 11, 24, ABC_CONST(0x9F0060FF60FF9F00), "[(!([ab]c)d)ef]" },   //  201
    { 6,  9, 12, ABC_CONST(0x9F60000000000000), "([([ab]c)d]ef)" },   //  202
    { 6,  9, 12, ABC_CONST(0x609FFFFF00000000), "(!([([ab]c)d]e)f)" },   //  203
    { 6, 11, 22, ABC_CONST(0x609FFFFF9F600000), "[([([ab]c)d]e)f]" },   //  204
    { 6, 11, 21, ABC_CONST(0x609F9F6000000000), "([([ab]c)de]f)" },   //  205
    { 6, 13, 40, ABC_CONST(0x9F60609F609F9F60), "[([ab]c)def]" },   //  206
    { 6,  9, 11, ABC_CONST(0x9600000000000000), "([abc]def)" },   //  207
    { 6,  9, 11, ABC_CONST(0x69FFFFFF00000000), "(!([abc]de)f)" },   //  208
    { 6, 11, 20, ABC_CONST(0x69FFFFFF96000000), "[([abc]de)f]" },   //  209
    { 6,  9, 11, ABC_CONST(0x69FF000000000000), "(!([abc]d)ef)" },   //  210
    { 6,  9, 11, ABC_CONST(0x9600FFFF00000000), "(!(!([abc]d)e)f)" },   //  211
    { 6, 11, 20, ABC_CONST(0x9600FFFF69FF0000), "[(!([abc]d)e)f]" },   //  212
    { 6, 11, 19, ABC_CONST(0x69FF960000000000), "([([abc]d)e]f)" },   //  213
    { 6, 13, 36, ABC_CONST(0x960069FF69FF9600), "[([abc]d)ef]" },   //  214
    { 6, 11, 18, ABC_CONST(0x6996000000000000), "([abcd]ef)" },   //  215
    { 6, 11, 18, ABC_CONST(0x9669FFFF00000000), "(!([abcd]e)f)" },   //  216
    { 6, 13, 34, ABC_CONST(0x9669FFFF69960000), "[([abcd]e)f]" },   //  217
    { 6, 13, 33, ABC_CONST(0x9669699600000000), "([abcde]f)" },   //  218
    { 6, 15, 64, ABC_CONST(0x6996966996696996), "[abcdef]" },   //  219
    { 6,  6,  7, ABC_CONST(0xCA00000000000000), "(<abc>def)" },   //  220
    { 6,  6,  7, ABC_CONST(0x35FFFFFF00000000), "(!(<abc>de)f)" },   //  221
    { 6,  8, 12, ABC_CONST(0x35FFFFFFCA000000), "[(<abc>de)f]" },   //  222
    { 6,  6,  7, ABC_CONST(0x35FF000000000000), "(!(<abc>d)ef)" },   //  223
    { 6,  6,  7, ABC_CONST(0xCA00FFFF00000000), "(!(!(<abc>d)e)f)" },   //  224
    { 6,  8, 12, ABC_CONST(0xCA00FFFF35FF0000), "[(!(<abc>d)e)f]" },   //  225
    { 6,  8, 11, ABC_CONST(0x35FFCA0000000000), "([(<abc>d)e]f)" },   //  226
    { 6, 10, 20, ABC_CONST(0xCA0035FF35FFCA00), "[(<abc>d)ef]" },   //  227
    { 6,  8, 10, ABC_CONST(0x35CA000000000000), "([<abc>d]ef)" },   //  228
    { 6,  8, 10, ABC_CONST(0xCA35FFFF00000000), "(!([<abc>d]e)f)" },   //  229
    { 6, 10, 18, ABC_CONST(0xCA35FFFF35CA0000), "[([<abc>d]e)f]" },   //  230
    { 6, 10, 17, ABC_CONST(0xCA3535CA00000000), "([<abc>de]f)" },   //  231
    { 6, 12, 32, ABC_CONST(0x35CACA35CA3535CA), "[<abc>def]" },   //  232
    { 6,  5,  8, ABC_CONST(0x0777000000000000), "(!(ab)!(cd)ef)" },   //  233
    { 6,  5,  8, ABC_CONST(0xF888FFFF00000000), "(!(!(ab)!(cd)e)f)" },   //  234
    { 6,  7, 14, ABC_CONST(0xF888FFFF07770000), "[(!(ab)!(cd)e)f]" },   //  235
    { 6,  5,  8, ABC_CONST(0xF888000000000000), "(!(!(ab)!(cd))ef)" },   //  236
    { 6,  5,  8, ABC_CONST(0x0777FFFF00000000), "(!(!(!(ab)!(cd))e)f)" },   //  237
    { 6,  7, 14, ABC_CONST(0x0777FFFFF8880000), "[(!(!(ab)!(cd))e)f]" },   //  238
    { 6,  7, 13, ABC_CONST(0xF888077700000000), "([(!(ab)!(cd))e]f)" },   //  239
    { 6,  9, 24, ABC_CONST(0x0777F888F8880777), "[(!(ab)!(cd))ef]" },   //  240
    { 6,  7, 11, ABC_CONST(0x7888000000000000), "([(ab)(cd)]ef)" },   //  241
    { 6,  7, 11, ABC_CONST(0x8777FFFF00000000), "(!([(ab)(cd)]e)f)" },   //  242
    { 6,  9, 20, ABC_CONST(0x8777FFFF78880000), "[([(ab)(cd)]e)f]" },   //  243
    { 6,  7, 11, ABC_CONST(0x8777000000000000), "(![(ab)(cd)]ef)" },   //  244
    { 6,  7, 11, ABC_CONST(0x7888FFFF00000000), "(!(![(ab)(cd)]e)f)" },   //  245
    { 6,  9, 20, ABC_CONST(0x7888FFFF87770000), "[(![(ab)(cd)]e)f]" },   //  246
    { 6,  9, 19, ABC_CONST(0x8777788800000000), "([(ab)(cd)e]f)" },   //  247
    { 6, 11, 36, ABC_CONST(0x7888877787777888), "[(ab)(cd)ef]" },   //  248
    { 6,  7,  9, ABC_CONST(0x0666000000000000), "([ab]!(cd)ef)" },   //  249
    { 6,  7,  9, ABC_CONST(0xF999FFFF00000000), "(!([ab]!(cd)e)f)" },   //  250
    { 6,  9, 16, ABC_CONST(0xF999FFFF06660000), "[([ab]!(cd)e)f]" },   //  251
    { 6,  7,  9, ABC_CONST(0xF999000000000000), "(!([ab]!(cd))ef)" },   //  252
    { 6,  7,  9, ABC_CONST(0x0666FFFF00000000), "(!(!([ab]!(cd))e)f)" },   //  253
    { 6,  9, 16, ABC_CONST(0x0666FFFFF9990000), "[(!([ab]!(cd))e)f]" },   //  254
    { 6,  9, 15, ABC_CONST(0xF999066600000000), "([([ab]!(cd))e]f)" },   //  255
    { 6, 11, 28, ABC_CONST(0x0666F999F9990666), "[([ab]!(cd))ef]" },   //  256
    { 6,  9, 10, ABC_CONST(0x0660000000000000), "([ab][cd]ef)" },   //  257
    { 6,  9, 10, ABC_CONST(0xF99FFFFF00000000), "(!([ab][cd]e)f)" },   //  258
    { 6, 11, 18, ABC_CONST(0xF99FFFFF06600000), "[([ab][cd]e)f]" },   //  259
    { 6,  9, 10, ABC_CONST(0xF99F000000000000), "(!([ab][cd])ef)" },   //  260
    { 6,  9, 10, ABC_CONST(0x0660FFFF00000000), "(!(!([ab][cd])e)f)" },   //  261
    { 6, 11, 18, ABC_CONST(0x0660FFFFF99F0000), "[(!([ab][cd])e)f]" },   //  262
    { 6, 11, 17, ABC_CONST(0xF99F066000000000), "([([ab][cd])e]f)" },   //  263
    { 6, 13, 32, ABC_CONST(0x0660F99FF99F0660), "[([ab][cd])ef]" },   //  264
    { 6,  6,  8, ABC_CONST(0xCAAA000000000000), "(<ab(cd)>ef)" },   //  265
    { 6,  6,  8, ABC_CONST(0x3555FFFF00000000), "(!(<ab(cd)>e)f)" },   //  266
    { 6,  8, 14, ABC_CONST(0x3555FFFFCAAA0000), "[(<ab(cd)>e)f]" },   //  267
    { 6,  8, 13, ABC_CONST(0x3555CAAA00000000), "([<ab(cd)>e]f)" },   //  268
    { 6, 10, 24, ABC_CONST(0xCAAA35553555CAAA), "[<ab(cd)>ef]" },   //  269
    { 6,  8, 10, ABC_CONST(0xACCA000000000000), "(<ab[cd]>ef)" },   //  270
    { 6,  8, 10, ABC_CONST(0x5335FFFF00000000), "(!(<ab[cd]>e)f)" },   //  271
    { 6, 10, 18, ABC_CONST(0x5335FFFFACCA0000), "[(<ab[cd]>e)f]" },   //  272
    { 6, 10, 17, ABC_CONST(0x5335ACCA00000000), "([<ab[cd]>e]f)" },   //  273
    { 6, 12, 32, ABC_CONST(0xACCA53355335ACCA), "[<ab[cd]>ef]" },   //  274
    { 6,  6,  7, ABC_CONST(0xF088000000000000), "(<(ab)cd>ef)" },   //  275
    { 6,  6,  7, ABC_CONST(0x0F77FFFF00000000), "(!(<(ab)cd>e)f)" },   //  276
    { 6,  8, 12, ABC_CONST(0x0F77FFFFF0880000), "[(<(ab)cd>e)f]" },   //  277
    { 6,  6,  7, ABC_CONST(0x0F77000000000000), "(!<(ab)cd>ef)" },   //  278
    { 6,  6,  7, ABC_CONST(0xF088FFFF00000000), "(!(!<(ab)cd>e)f)" },   //  279
    { 6,  8, 12, ABC_CONST(0xF088FFFF0F770000), "[(!<(ab)cd>e)f]" },   //  280
    { 6,  8, 11, ABC_CONST(0x0F77F08800000000), "([<(ab)cd>e]f)" },   //  281
    { 6, 10, 20, ABC_CONST(0xF0880F770F77F088), "[<(ab)cd>ef]" },   //  282
    { 6,  8,  8, ABC_CONST(0xF066000000000000), "(<[ab]cd>ef)" },   //  283
    { 6,  8,  8, ABC_CONST(0x0F99FFFF00000000), "(!(<[ab]cd>e)f)" },   //  284
    { 6, 10, 14, ABC_CONST(0x0F99FFFFF0660000), "[(<[ab]cd>e)f]" },   //  285
    { 6, 10, 13, ABC_CONST(0x0F99F06600000000), "([<[ab]cd>e]f)" },   //  286
    { 6, 12, 24, ABC_CONST(0xF0660F990F99F066), "[<[ab]cd>ef]" },   //  287
    { 6,  5,  9, ABC_CONST(0x007F7F7F00000000), "(!(abc)!(de)f)" },   //  288
    { 6,  5,  9, ABC_CONST(0xFF80808000000000), "(!(!(abc)!(de))f)" },   //  289
    { 6,  7, 16, ABC_CONST(0xFF808080007F7F7F), "[(!(abc)!(de))f]" },   //  290
    { 6,  7, 13, ABC_CONST(0x7F80808000000000), "([(abc)(de)]f)" },   //  291
    { 6,  7, 13, ABC_CONST(0x807F7F7F00000000), "(![(abc)(de)]f)" },   //  292
    { 6,  9, 24, ABC_CONST(0x807F7F7F7F808080), "[(abc)(de)f]" },   //  293
    { 6,  5,  8, ABC_CONST(0x008F8F8F00000000), "(!(!(ab)c)!(de)f)" },   //  294
    { 6,  5,  8, ABC_CONST(0xFF70707000000000), "(!(!(!(ab)c)!(de))f)" },   //  295
    { 6,  7, 14, ABC_CONST(0xFF707070008F8F8F), "[(!(!(ab)c)!(de))f]" },   //  296
    { 6,  7, 13, ABC_CONST(0x8F70707000000000), "([(!(ab)c)(de)]f)" },   //  297
    { 6,  7, 13, ABC_CONST(0x708F8F8F00000000), "(![(!(ab)c)(de)]f)" },   //  298
    { 6,  9, 24, ABC_CONST(0x708F8F8F8F707070), "[(!(ab)c)(de)f]" },   //  299
    { 6,  7, 11, ABC_CONST(0x0078787800000000), "([(ab)c]!(de)f)" },   //  300
    { 6,  7, 11, ABC_CONST(0xFF87878700000000), "(!([(ab)c]!(de))f)" },   //  301
    { 6,  9, 20, ABC_CONST(0xFF87878700787878), "[([(ab)c]!(de))f]" },   //  302
    { 6,  7, 10, ABC_CONST(0x009F9F9F00000000), "(!([ab]c)!(de)f)" },   //  303
    { 6,  7, 10, ABC_CONST(0xFF60606000000000), "(!(!([ab]c)!(de))f)" },   //  304
    { 6,  9, 18, ABC_CONST(0xFF606060009F9F9F), "[(!([ab]c)!(de))f]" },   //  305
    { 6,  9, 16, ABC_CONST(0x9F60606000000000), "([([ab]c)(de)]f)" },   //  306
    { 6,  9, 16, ABC_CONST(0x609F9F9F00000000), "(![([ab]c)(de)]f)" },   //  307
    { 6, 11, 30, ABC_CONST(0x609F9F9F9F606060), "[([ab]c)(de)f]" },   //  308
    { 6,  9, 14, ABC_CONST(0x0096969600000000), "([abc]!(de)f)" },   //  309
    { 6,  9, 14, ABC_CONST(0xFF69696900000000), "(!([abc]!(de))f)" },   //  310
    { 6, 11, 26, ABC_CONST(0xFF69696900969696), "[([abc]!(de))f]" },   //  311
    { 6,  6,  8, ABC_CONST(0x00CACACA00000000), "(<abc>!(de)f)" },   //  312
    { 6,  6,  8, ABC_CONST(0xFF35353500000000), "(!(<abc>!(de))f)" },   //  313
    { 6,  8, 14, ABC_CONST(0xFF35353500CACACA), "[(<abc>!(de))f]" },   //  314
    { 6,  8, 13, ABC_CONST(0x35CACACA00000000), "([<abc>(de)]f)" },   //  315
    { 6, 10, 24, ABC_CONST(0xCA35353535CACACA), "[<abc>(de)f]" },   //  316
    { 6,  7, 10, ABC_CONST(0x007F7F0000000000), "(!(abc)[de]f)" },   //  317
    { 6,  7, 10, ABC_CONST(0xFF8080FF00000000), "(!(!(abc)[de])f)" },   //  318
    { 6,  9, 18, ABC_CONST(0xFF8080FF007F7F00), "[(!(abc)[de])f]" },   //  319
    { 6,  7,  9, ABC_CONST(0x008F8F0000000000), "(!(!(ab)c)[de]f)" },   //  320
    { 6,  7,  9, ABC_CONST(0xFF7070FF00000000), "(!(!(!(ab)c)[de])f)" },   //  321
    { 6,  9, 16, ABC_CONST(0xFF7070FF008F8F00), "[(!(!(ab)c)[de])f]" },   //  322
    { 6,  9, 12, ABC_CONST(0x0078780000000000), "([(ab)c][de]f)" },   //  323
    { 6,  9, 12, ABC_CONST(0xFF8787FF00000000), "(!([(ab)c][de])f)" },   //  324
    { 6, 11, 22, ABC_CONST(0xFF8787FF00787800), "[([(ab)c][de])f]" },   //  325
    { 6,  9, 11, ABC_CONST(0x009F9F0000000000), "(!([ab]c)[de]f)" },   //  326
    { 6,  9, 11, ABC_CONST(0xFF6060FF00000000), "(!(!([ab]c)[de])f)" },   //  327
    { 6, 11, 20, ABC_CONST(0xFF6060FF009F9F00), "[(!([ab]c)[de])f]" },   //  328
    { 6, 11, 15, ABC_CONST(0x0096960000000000), "([abc][de]f)" },   //  329
    { 6, 11, 15, ABC_CONST(0xFF6969FF00000000), "(!([abc][de])f)" },   //  330
    { 6, 13, 28, ABC_CONST(0xFF6969FF00969600), "[([abc][de])f]" },   //  331
    { 6,  8,  9, ABC_CONST(0x00CACA0000000000), "(<abc>[de]f)" },   //  332
    { 6,  8,  9, ABC_CONST(0xFF3535FF00000000), "(!(<abc>[de])f)" },   //  333
    { 6, 10, 16, ABC_CONST(0xFF3535FF00CACA00), "[(<abc>[de])f]" },   //  334
    { 6,  6,  9, ABC_CONST(0xCAAAAAAA00000000), "(<ab(cde)>f)" },   //  335
    { 6,  8, 16, ABC_CONST(0x35555555CAAAAAAA), "[<ab(cde)>f]" },   //  336
    { 6,  6,  9, ABC_CONST(0xACCCAAAA00000000), "(<ab(!(cd)e)>f)" },   //  337
    { 6,  8, 16, ABC_CONST(0x53335555ACCCAAAA), "[<ab(!(cd)e)>f]" },   //  338
    { 6,  8, 13, ABC_CONST(0xACCCCAAA00000000), "(<ab[(cd)e]>f)" },   //  339
    { 6, 10, 24, ABC_CONST(0x53333555ACCCCAAA), "[<ab[(cd)e]>f]" },   //  340
    { 6,  8, 11, ABC_CONST(0xACCAAAAA00000000), "(<ab([cd]e)>f)" },   //  341
    { 6, 10, 20, ABC_CONST(0x53355555ACCAAAAA), "[<ab([cd]e)>f]" },   //  342
    { 6, 10, 17, ABC_CONST(0xCAACACCA00000000), "(<ab[cde]>f)" },   //  343
    { 6, 12, 32, ABC_CONST(0x35535335CAACACCA), "[<ab[cde]>f]" },   //  344
    { 6,  7,  9, ABC_CONST(0xCCAACACA00000000), "(<ab<cde>>f)" },   //  345
    { 6,  9, 16, ABC_CONST(0x33553535CCAACACA), "[<ab<cde>>f]" },   //  346
    { 6,  6,  8, ABC_CONST(0xC0AAAAAA00000000), "(<a(bc)(de)>f)" },   //  347
    { 6,  6,  8, ABC_CONST(0x3F55555500000000), "(!<a(bc)(de)>f)" },   //  348
    { 6,  8, 14, ABC_CONST(0x3F555555C0AAAAAA), "[<a(bc)(de)>f]" },   //  349
    { 6,  8,  9, ABC_CONST(0x3CAAAAAA00000000), "(<a[bc](de)>f)" },   //  350
    { 6, 10, 16, ABC_CONST(0xC35555553CAAAAAA), "[<a[bc](de)>f]" },   //  351
    { 6,  6,  9, ABC_CONST(0xF088888800000000), "(<(ab)c(de)>f)" },   //  352
    { 6,  6,  9, ABC_CONST(0x0F77777700000000), "(!<(ab)c(de)>f)" },   //  353
    { 6,  8, 16, ABC_CONST(0x0F777777F0888888), "[<(ab)c(de)>f]" },   //  354
    { 6,  8, 11, ABC_CONST(0x88F0F08800000000), "(<(ab)c[de]>f)" },   //  355
    { 6,  8, 11, ABC_CONST(0x770F0F7700000000), "(!<(ab)c[de]>f)" },   //  356
    { 6, 10, 20, ABC_CONST(0x770F0F7788F0F088), "[<(ab)c[de]>f]" },   //  357
    { 6,  8, 11, ABC_CONST(0xF066666600000000), "(<[ab]c(de)>f)" },   //  358
    { 6, 10, 20, ABC_CONST(0x0F999999F0666666), "[<[ab]c(de)>f]" },   //  359
    { 6, 10, 13, ABC_CONST(0x66F0F06600000000), "(<[ab]c[de]>f)" },   //  360
    { 6, 12, 24, ABC_CONST(0x990F0F9966F0F066), "[<[ab]c[de]>f]" },   //  361
    { 6,  6,  7, ABC_CONST(0xF000888800000000), "(<(ab)(cd)e>f)" },   //  362
    { 6,  6,  7, ABC_CONST(0x0FFF777700000000), "(!<(ab)(cd)e>f)" },   //  363
    { 6,  8, 12, ABC_CONST(0x0FFF7777F0008888), "[<(ab)(cd)e>f]" },   //  364
    { 6,  6,  7, ABC_CONST(0xF000777700000000), "(<!(ab)(cd)e>f)" },   //  365
    { 6,  8, 12, ABC_CONST(0x0FFF8888F0007777), "[<!(ab)(cd)e>f]" },   //  366
    { 6,  8,  8, ABC_CONST(0xF000666600000000), "(<[ab](cd)e>f)" },   //  367
    { 6,  8,  8, ABC_CONST(0x0FFF999900000000), "(!<[ab](cd)e>f)" },   //  368
    { 6, 10, 14, ABC_CONST(0x0FFF9999F0006666), "[<[ab](cd)e>f]" },   //  369
    { 6, 10,  9, ABC_CONST(0x0FF0666600000000), "(<[ab][cd]e>f)" },   //  370
    { 6, 12, 16, ABC_CONST(0xF00F99990FF06666), "[<[ab][cd]e>f]" },   //  371
    { 6,  6,  7, ABC_CONST(0xFF00808000000000), "(<(abc)de>f)" },   //  372
    { 6,  6,  7, ABC_CONST(0x00FF7F7F00000000), "(!<(abc)de>f)" },   //  373
    { 6,  8, 12, ABC_CONST(0x00FF7F7FFF008080), "[<(abc)de>f]" },   //  374
    { 6,  6,  7, ABC_CONST(0xFF00707000000000), "(<(!(ab)c)de>f)" },   //  375
    { 6,  6,  7, ABC_CONST(0x00FF8F8F00000000), "(!<(!(ab)c)de>f)" },   //  376
    { 6,  8, 12, ABC_CONST(0x00FF8F8FFF007070), "[<(!(ab)c)de>f]" },   //  377
    { 6,  8,  9, ABC_CONST(0xFF00787800000000), "(<[(ab)c]de>f)" },   //  378
    { 6, 10, 16, ABC_CONST(0x00FF8787FF007878), "[<[(ab)c]de>f]" },   //  379
    { 6,  8,  8, ABC_CONST(0xFF00606000000000), "(<([ab]c)de>f)" },   //  380
    { 6,  8,  8, ABC_CONST(0x00FF9F9F00000000), "(!<([ab]c)de>f)" },   //  381
    { 6, 10, 14, ABC_CONST(0x00FF9F9FFF006060), "[<([ab]c)de>f]" },   //  382
    { 6, 10, 11, ABC_CONST(0xFF00969600000000), "(<[abc]de>f)" },   //  383
    { 6, 12, 20, ABC_CONST(0x00FF6969FF009696), "[<[abc]de>f]" },   //  384
    { 6,  7,  7, ABC_CONST(0xFF00CACA00000000), "(<<abc>de>f)" },   //  385
    { 6,  9, 12, ABC_CONST(0x00FF3535FF00CACA), "[<<abc>de>f]" },   //  386
    { 6,  5, 10, ABC_CONST(0x00007FFF7FFF7FFF), "(!(abcd)!(ef))" },   //  387
    { 6,  7, 15, ABC_CONST(0x7FFF800080008000), "[(abcd)(ef)]" },   //  388
    { 6,  5,  8, ABC_CONST(0x000080FF80FF80FF), "(!(!(abc)d)!(ef))" },   //  389
    { 6,  7, 15, ABC_CONST(0x80FF7F007F007F00), "[(!(abc)d)(ef)]" },   //  390
    { 6,  7, 13, ABC_CONST(0x00007F807F807F80), "([(abc)d]!(ef))" },   //  391
    { 6,  5,  9, ABC_CONST(0x00008FFF8FFF8FFF), "(!(!(ab)cd)!(ef))" },   //  392
    { 6,  7, 15, ABC_CONST(0x8FFF700070007000), "[(!(ab)cd)(ef)]" },   //  393
    { 6,  5,  9, ABC_CONST(0x000070FF70FF70FF), "(!(!(!(ab)c)d)!(ef))" },   //  394
    { 6,  7, 15, ABC_CONST(0x70FF8F008F008F00), "[(!(!(ab)c)d)(ef)]" },   //  395
    { 6,  7, 13, ABC_CONST(0x00008F708F708F70), "([(!(ab)c)d]!(ef))" },   //  396
    { 6,  7, 12, ABC_CONST(0x000087FF87FF87FF), "(!([(ab)c]d)!(ef))" },   //  397
    { 6,  9, 21, ABC_CONST(0x87FF780078007800), "[([(ab)c]d)(ef)]" },   //  398
    { 6,  9, 19, ABC_CONST(0x0000877887788778), "([(ab)cd]!(ef))" },   //  399
    { 6,  7, 11, ABC_CONST(0x00009FFF9FFF9FFF), "(!([ab]cd)!(ef))" },   //  400
    { 6,  9, 18, ABC_CONST(0x9FFF600060006000), "[([ab]cd)(ef)]" },   //  401
    { 6,  7, 10, ABC_CONST(0x000060FF60FF60FF), "(!(!([ab]c)d)!(ef))" },   //  402
    { 6,  9, 18, ABC_CONST(0x60FF9F009F009F00), "[(!([ab]c)d)(ef)]" },   //  403
    { 6,  9, 16, ABC_CONST(0x00009F609F609F60), "([([ab]c)d]!(ef))" },   //  404
    { 6,  9, 15, ABC_CONST(0x000069FF69FF69FF), "(!([abc]d)!(ef))" },   //  405
    { 6, 11, 27, ABC_CONST(0x69FF960096009600), "[([abc]d)(ef)]" },   //  406
    { 6, 11, 25, ABC_CONST(0x0000699669966996), "([abcd]!(ef))" },   //  407
    { 6,  6,  9, ABC_CONST(0x000035FF35FF35FF), "(!(<abc>d)!(ef))" },   //  408
    { 6,  8, 15, ABC_CONST(0x35FFCA00CA00CA00), "[(<abc>d)(ef)]" },   //  409
    { 6,  8, 13, ABC_CONST(0x000035CA35CA35CA), "([<abc>d]!(ef))" },   //  410
    { 6,  5, 11, ABC_CONST(0x0000077707770777), "(!(ab)!(cd)!(ef))" },   //  411
    { 6,  5,  9, ABC_CONST(0x0000F888F888F888), "(!(!(ab)!(cd))!(ef))" },   //  412
    { 6,  7, 18, ABC_CONST(0xF888077707770777), "[(!(ab)!(cd))(ef)]" },   //  413
    { 6,  7, 14, ABC_CONST(0x0000788878887888), "([(ab)(cd)]!(ef))" },   //  414
    { 6,  7, 15, ABC_CONST(0x0000877787778777), "(![(ab)(cd)]!(ef))" },   //  415
    { 6,  9, 27, ABC_CONST(0x8777788878887888), "[(ab)(cd)(ef)]" },   //  416
    { 6,  7, 12, ABC_CONST(0x0000066606660666), "([ab]!(cd)!(ef))" },   //  417
    { 6,  7, 11, ABC_CONST(0x0000F999F999F999), "(!([ab]!(cd))!(ef))" },   //  418
    { 6,  9, 21, ABC_CONST(0xF999066606660666), "[([ab]!(cd))(ef)]" },   //  419
    { 6,  9, 13, ABC_CONST(0x0000066006600660), "([ab][cd]!(ef))" },   //  420
    { 6,  9, 13, ABC_CONST(0x0000F99FF99FF99F), "(!([ab][cd])!(ef))" },   //  421
    { 6, 11, 24, ABC_CONST(0xF99F066006600660), "[([ab][cd])(ef)]" },   //  422
    { 6,  6, 10, ABC_CONST(0x0000CAAACAAACAAA), "(<ab(cd)>!(ef))" },   //  423
    { 6,  8, 18, ABC_CONST(0x3555CAAACAAACAAA), "[<ab(cd)>(ef)]" },   //  424
    { 6,  8, 13, ABC_CONST(0x0000ACCAACCAACCA), "(<ab[cd]>!(ef))" },   //  425
    { 6, 10, 24, ABC_CONST(0x5335ACCAACCAACCA), "[<ab[cd]>(ef)]" },   //  426
    { 6,  6,  8, ABC_CONST(0x0000F088F088F088), "(<(ab)cd>!(ef))" },   //  427
    { 6,  6,  9, ABC_CONST(0x00000F770F770F77), "(!<(ab)cd>!(ef))" },   //  428
    { 6,  8, 15, ABC_CONST(0x0F77F088F088F088), "[<(ab)cd>(ef)]" },   //  429
    { 6,  8, 10, ABC_CONST(0x0000F066F066F066), "(<[ab]cd>!(ef))" },   //  430
    { 6, 10, 18, ABC_CONST(0x0F99F066F066F066), "[<[ab]cd>(ef)]" },   //  431
    { 6,  7, 11, ABC_CONST(0x00007FFF7FFF0000), "(!(abcd)[ef])" },   //  432
    { 6,  7,  9, ABC_CONST(0x000080FF80FF0000), "(!(!(abc)d)[ef])" },   //  433
    { 6,  9, 14, ABC_CONST(0x00007F807F800000), "([(abc)d][ef])" },   //  434
    { 6,  7, 10, ABC_CONST(0x00008FFF8FFF0000), "(!(!(ab)cd)[ef])" },   //  435
    { 6,  7, 10, ABC_CONST(0x000070FF70FF0000), "(!(!(!(ab)c)d)[ef])" },   //  436
    { 6,  9, 14, ABC_CONST(0x00008F708F700000), "([(!(ab)c)d][ef])" },   //  437
    { 6,  9, 13, ABC_CONST(0x000087FF87FF0000), "(!([(ab)c]d)[ef])" },   //  438
    { 6, 11, 20, ABC_CONST(0x0000877887780000), "([(ab)cd][ef])" },   //  439
    { 6,  9, 12, ABC_CONST(0x00009FFF9FFF0000), "(!([ab]cd)[ef])" },   //  440
    { 6,  9, 11, ABC_CONST(0x000060FF60FF0000), "(!(!([ab]c)d)[ef])" },   //  441
    { 6, 11, 17, ABC_CONST(0x00009F609F600000), "([([ab]c)d][ef])" },   //  442
    { 6, 11, 16, ABC_CONST(0x000069FF69FF0000), "(!([abc]d)[ef])" },   //  443
    { 6, 13, 26, ABC_CONST(0x0000699669960000), "([abcd][ef])" },   //  444
    { 6,  8, 10, ABC_CONST(0x000035FF35FF0000), "(!(<abc>d)[ef])" },   //  445
    { 6, 10, 14, ABC_CONST(0x000035CA35CA0000), "([<abc>d][ef])" },   //  446
    { 6,  7, 10, ABC_CONST(0x0000F888F8880000), "(!(!(ab)!(cd))[ef])" },   //  447
    { 6,  9, 15, ABC_CONST(0x0000788878880000), "([(ab)(cd)][ef])" },   //  448
    { 6,  9, 16, ABC_CONST(0x0000877787770000), "(![(ab)(cd)][ef])" },   //  449
    { 6,  9, 12, ABC_CONST(0x0000F999F9990000), "(!([ab]!(cd))[ef])" },   //  450
    { 6, 11, 14, ABC_CONST(0x0000066006600000), "([ab][cd][ef])" },   //  451
    { 6, 11, 14, ABC_CONST(0x0000F99FF99F0000), "(!([ab][cd])[ef])" },   //  452
    { 6,  8, 11, ABC_CONST(0x0000CAAACAAA0000), "(<ab(cd)>[ef])" },   //  453
    { 6, 10, 14, ABC_CONST(0x0000ACCAACCA0000), "(<ab[cd]>[ef])" },   //  454
    { 6,  8,  9, ABC_CONST(0x0000F088F0880000), "(<(ab)cd>[ef])" },   //  455
    { 6,  8, 10, ABC_CONST(0x00000F770F770000), "(!<(ab)cd>[ef])" },   //  456
    { 6, 10, 11, ABC_CONST(0x0000F066F0660000), "(<[ab]cd>[ef])" },   //  457
    { 6,  5, 11, ABC_CONST(0x007F7F7F7F7F7F7F), "(!(abc)!(def))" },   //  458
    { 6,  7, 16, ABC_CONST(0x7F80808080808080), "[(abc)(def)]" },   //  459
    { 6,  5,  9, ABC_CONST(0x008F8F8F8F8F8F8F), "(!(!(ab)c)!(def))" },   //  460
    { 6,  7, 16, ABC_CONST(0x8F70707070707070), "[(!(ab)c)(def)]" },   //  461
    { 6,  7, 13, ABC_CONST(0x0078787878787878), "([(ab)c]!(def))" },   //  462
    { 6,  7, 12, ABC_CONST(0x009F9F9F9F9F9F9F), "(!([ab]c)!(def))" },   //  463
    { 6,  9, 20, ABC_CONST(0x9F60606060606060), "[([ab]c)(def)]" },   //  464
    { 6,  9, 17, ABC_CONST(0x0096969696969696), "([abc]!(def))" },   //  465
    { 6,  6,  9, ABC_CONST(0x00CACACACACACACA), "(<abc>!(def))" },   //  466
    { 6,  8, 16, ABC_CONST(0x35CACACACACACACA), "[<abc>(def)]" },   //  467
    { 6,  5,  8, ABC_CONST(0x8F0000008F8F8F8F), "(!(!(ab)c)!(!(de)f))" },   //  468
    { 6,  7, 16, ABC_CONST(0x708F8F8F70707070), "[(!(ab)c)(!(de)f)]" },   //  469
    { 6,  7, 11, ABC_CONST(0x7800000078787878), "([(ab)c]!(!(de)f))" },   //  470
    { 6,  7, 10, ABC_CONST(0x9F0000009F9F9F9F), "(!([ab]c)!(!(de)f))" },   //  471
    { 6,  9, 20, ABC_CONST(0x609F9F9F60606060), "[([ab]c)(!(de)f)]" },   //  472
    { 6,  9, 14, ABC_CONST(0x9600000096969696), "([abc]!(!(de)f))" },   //  473
    { 6,  6,  8, ABC_CONST(0xCA000000CACACACA), "(<abc>!(!(de)f))" },   //  474
    { 6,  8, 16, ABC_CONST(0xCA353535CACACACA), "[<abc>(!(de)f)]" },   //  475
    { 6,  9, 15, ABC_CONST(0x0078787878000000), "([(ab)c][(de)f])" },   //  476
    { 6,  9, 14, ABC_CONST(0x009F9F9F9F000000), "(!([ab]c)[(de)f])" },   //  477
    { 6, 11, 19, ABC_CONST(0x0096969696000000), "([abc][(de)f])" },   //  478
    { 6,  8, 11, ABC_CONST(0x00CACACACA000000), "(<abc>[(de)f])" },   //  479
    { 6,  9, 13, ABC_CONST(0x9F00009F9F9F9F9F), "(!([ab]c)!([de]f))" },   //  480
    { 6, 11, 25, ABC_CONST(0x609F9F6060606060), "[([ab]c)([de]f)]" },   //  481
    { 6, 11, 18, ABC_CONST(0x9600009696969696), "([abc]!([de]f))" },   //  482
    { 6,  8, 10, ABC_CONST(0xCA0000CACACACACA), "(<abc>!([de]f))" },   //  483
    { 6, 10, 20, ABC_CONST(0xCA3535CACACACACA), "[<abc>([de]f)]" },   //  484
    { 6, 13, 24, ABC_CONST(0x9600009600969600), "([abc][def])" },   //  485
    { 6, 10, 14, ABC_CONST(0xCA0000CA00CACA00), "(<abc>[def])" },   //  486
    { 6,  7,  8, ABC_CONST(0xCACA0000CA00CA00), "(<abc><def>)" },   //  487
    { 6,  9, 16, ABC_CONST(0x3535CACA35CA35CA), "[<abc><def>]" },   //  488
    { 6,  6, 10, ABC_CONST(0xCAAAAAAAAAAAAAAA), "<ab(cdef)>" },   //  489
    { 6,  6, 10, ABC_CONST(0xACCCCCCCAAAAAAAA), "<ab(!(cde)f)>" },   //  490
    { 6,  8, 16, ABC_CONST(0xACCCCCCCCAAAAAAA), "<ab[(cde)f]>" },   //  491
    { 6,  6, 10, ABC_CONST(0xACCCAAAAAAAAAAAA), "<ab(!(cd)ef)>" },   //  492
    { 6,  6, 10, ABC_CONST(0xCAAACCCCAAAAAAAA), "<ab(!(!(cd)e)f)>" },   //  493
    { 6,  8, 16, ABC_CONST(0xCAAACCCCACCCAAAA), "<ab[(!(cd)e)f]>" },   //  494
    { 6,  8, 14, ABC_CONST(0xACCCCAAAAAAAAAAA), "<ab([(cd)e]f)>" },   //  495
    { 6, 10, 24, ABC_CONST(0xCAAAACCCACCCCAAA), "<ab[(cd)ef]>" },   //  496
    { 6,  8, 12, ABC_CONST(0xACCAAAAAAAAAAAAA), "<ab([cd]ef)>" },   //  497
    { 6,  8, 12, ABC_CONST(0xCAACCCCCAAAAAAAA), "<ab(!([cd]e)f)>" },   //  498
    { 6, 10, 20, ABC_CONST(0xCAACCCCCACCAAAAA), "<ab[([cd]e)f]>" },   //  499
    { 6, 10, 18, ABC_CONST(0xCAACACCAAAAAAAAA), "<ab([cde]f)>" },   //  500
    { 6, 12, 32, ABC_CONST(0xACCACAACCAACACCA), "<ab[cdef]>" },   //  501
    { 6,  7, 10, ABC_CONST(0xCCAACACAAAAAAAAA), "<ab(<cde>f)>" },   //  502
    { 6,  9, 16, ABC_CONST(0xAACCACACCCAACACA), "<ab[<cde>f]>" },   //  503
    { 6,  6, 12, ABC_CONST(0xAAAAACCCACCCACCC), "<ab(!(cd)!(ef))>" },   //  504
    { 6,  8, 18, ABC_CONST(0xACCCCAAACAAACAAA), "<ab[(cd)(ef)]>" },   //  505
    { 6,  8, 14, ABC_CONST(0xAAAAACCAACCAACCA), "<ab([cd]!(ef))>" },   //  506
    { 6, 10, 16, ABC_CONST(0xAAAAACCAACCAAAAA), "<ab([cd][ef])>" },   //  507
    { 6,  7, 12, ABC_CONST(0xCCAACACACACACACA), "<ab<cd(ef)>>" },   //  508
    { 6,  9, 16, ABC_CONST(0xCACACCAACCAACACA), "<ab<cd[ef]>>" },   //  509
    { 6,  7, 10, ABC_CONST(0xCCCCAAAACAAACAAA), "<ab<(cd)ef>>" },   //  510
    { 6,  9, 12, ABC_CONST(0xCCCCAAAAACCAACCA), "<ab<[cd]ef>>" },   //  511
    { 6,  6,  9, ABC_CONST(0xC0AAAAAAAAAAAAAA), "<a(bc)(def)>" },   //  512
    { 6,  6, 10, ABC_CONST(0xAAC0C0C0AAAAAAAA), "<a(bc)(!(de)f)>" },   //  513
    { 6,  8, 12, ABC_CONST(0xAAC0C0AAAAAAAAAA), "<a(bc)([de]f)>" },   //  514
    { 6,  8, 10, ABC_CONST(0x3CAAAAAAAAAAAAAA), "<a[bc](def)>" },   //  515
    { 6,  8, 12, ABC_CONST(0xAA3C3C3CAAAAAAAA), "<a[bc](!(de)f)>" },   //  516
    { 6, 10, 14, ABC_CONST(0xAA3C3CAAAAAAAAAA), "<a[bc]([de]f)>" },   //  517
    { 6,  6,  8, ABC_CONST(0xC000AAAAAAAAAAAA), "<a(bcd)(ef)>" },   //  518
    { 6,  6,  8, ABC_CONST(0x3F00AAAAAAAAAAAA), "<a(!(bc)d)(ef)>" },   //  519
    { 6,  8, 10, ABC_CONST(0x3FC0AAAAAAAAAAAA), "<a[(bc)d](ef)>" },   //  520
    { 6,  8,  9, ABC_CONST(0x3C00AAAAAAAAAAAA), "<a([bc]d)(ef)>" },   //  521
    { 6, 10, 12, ABC_CONST(0xC33CAAAAAAAAAAAA), "<a[bcd](ef)>" },   //  522
    { 6,  7,  8, ABC_CONST(0xF0CCAAAAAAAAAAAA), "<a<bcd>(ef)>" },   //  523
    { 6,  6, 11, ABC_CONST(0xF088888888888888), "<(ab)c(def)>" },   //  524
    { 6,  6, 10, ABC_CONST(0x88F0F0F088888888), "<(ab)c(!(de)f)>" },   //  525
    { 6,  8, 15, ABC_CONST(0x88F0F0F0F0888888), "<(ab)c[(de)f]>" },   //  526
    { 6,  8, 13, ABC_CONST(0x88F0F08888888888), "<(ab)c([de]f)>" },   //  527
    { 6, 10, 20, ABC_CONST(0xF08888F088F0F088), "<(ab)c[def]>" },   //  528
    { 6,  7, 10, ABC_CONST(0xF0F08888F088F088), "<(ab)c<def>>" },   //  529
    { 6,  8, 14, ABC_CONST(0xF066666666666666), "<[ab]c(def)>" },   //  530
    { 6,  8, 12, ABC_CONST(0x66F0F0F066666666), "<[ab]c(!(de)f)>" },   //  531
    { 6, 10, 18, ABC_CONST(0x66F0F0F0F0666666), "<[ab]c[(de)f]>" },   //  532
    { 6, 10, 16, ABC_CONST(0x66F0F06666666666), "<[ab]c([de]f)>" },   //  533
    { 6, 12, 24, ABC_CONST(0xF06666F066F0F066), "<[ab]c[def]>" },   //  534
    { 6,  9, 12, ABC_CONST(0xF0F06666F066F066), "<[ab]c<def>>" },   //  535
    { 6,  6,  9, ABC_CONST(0xF000888888888888), "<(ab)(cd)(ef)>" },   //  536
    { 6,  6,  9, ABC_CONST(0xF000777777777777), "<!(ab)(cd)(ef)>" },   //  537
    { 6,  8, 12, ABC_CONST(0x8888F000F0008888), "<(ab)(cd)[ef]>" },   //  538
    { 6,  8, 12, ABC_CONST(0x7777F000F0007777), "<!(ab)(cd)[ef]>" },   //  539
    { 6,  8, 10, ABC_CONST(0x0FF0888888888888), "<(ab)[cd](ef)>" },   //  540
    { 6,  8, 11, ABC_CONST(0xF000666666666666), "<[ab](cd)(ef)>" },   //  541
    { 6, 10, 14, ABC_CONST(0x6666F000F0006666), "<[ab](cd)[ef]>" },   //  542
    { 6, 10, 12, ABC_CONST(0x0FF0666666666666), "<[ab][cd](ef)>" },   //  543
    { 6, 12, 16, ABC_CONST(0x66660FF00FF06666), "<[ab][cd][ef]>" },   //  544
    { 6,  6, 10, ABC_CONST(0xFF00808080808080), "<(abc)d(ef)>" },   //  545
    { 6,  8, 12, ABC_CONST(0x8080FF00FF008080), "<(abc)d[ef]>" },   //  546
    { 6,  6, 10, ABC_CONST(0xFF00707070707070), "<(!(ab)c)d(ef)>" },   //  547
    { 6,  8, 12, ABC_CONST(0x7070FF00FF007070), "<(!(ab)c)d[ef]>" },   //  548
    { 6,  8, 14, ABC_CONST(0xFF00787878787878), "<[(ab)c]d(ef)>" },   //  549
    { 6, 10, 16, ABC_CONST(0x7878FF00FF007878), "<[(ab)c]d[ef]>" },   //  550
    { 6,  8, 12, ABC_CONST(0xFF00606060606060), "<([ab]c)d(ef)>" },   //  551
    { 6, 10, 14, ABC_CONST(0x6060FF00FF006060), "<([ab]c)d[ef]>" },   //  552
    { 6, 10, 18, ABC_CONST(0xFF00969696969696), "<[abc]d(ef)>" },   //  553
    { 6, 12, 20, ABC_CONST(0x9696FF00FF009696), "<[abc]d[ef]>" },   //  554
    { 6,  7, 10, ABC_CONST(0xFF00CACACACACACA), "<<abc>d(ef)>" },   //  555
    { 6,  9, 12, ABC_CONST(0xCACAFF00FF00CACA), "<<abc>d[ef]>" },   //  556
    { 6,  6,  7, ABC_CONST(0xFF00000080808080), "<(abc)(de)f>" },   //  557
    { 6,  6,  7, ABC_CONST(0xFF0000007F7F7F7F), "<!(abc)(de)f>" },   //  558
    { 6,  8,  8, ABC_CONST(0x00FFFF0080808080), "<(abc)[de]f>" },   //  559
    { 6,  6,  7, ABC_CONST(0xFF00000070707070), "<(!(ab)c)(de)f>" },   //  560
    { 6,  6,  7, ABC_CONST(0xFF0000008F8F8F8F), "<!(!(ab)c)(de)f>" },   //  561
    { 6,  8,  8, ABC_CONST(0x00FFFF0070707070), "<(!(ab)c)[de]f>" },   //  562
    { 6,  8,  9, ABC_CONST(0xFF00000078787878), "<[(ab)c](de)f>" },   //  563
    { 6, 10, 10, ABC_CONST(0x00FFFF0078787878), "<[(ab)c][de]f>" },   //  564
    { 6,  8,  8, ABC_CONST(0xFF00000060606060), "<([ab]c)(de)f>" },   //  565
    { 6,  8,  8, ABC_CONST(0xFF0000009F9F9F9F), "<!([ab]c)(de)f>" },   //  566
    { 6, 10,  9, ABC_CONST(0x00FFFF0060606060), "<([ab]c)[de]f>" },   //  567
    { 6, 10, 11, ABC_CONST(0xFF00000096969696), "<[abc](de)f>" },   //  568
    { 6, 12, 12, ABC_CONST(0x00FFFF0096969696), "<[abc][de]f>" },   //  569
    { 6,  7,  7, ABC_CONST(0xFF000000CACACACA), "<<abc>(de)f>" },   //  570
    { 6,  9,  8, ABC_CONST(0x00FFFF00CACACACA), "<<abc>[de]f>" },   //  571
    { 6,  6,  7, ABC_CONST(0xFFFF000080008000), "<(abcd)ef>" },   //  572
    { 6,  6,  7, ABC_CONST(0xFFFF00007F007F00), "<(!(abc)d)ef>" },   //  573
    { 6,  8, 10, ABC_CONST(0xFFFF00007F807F80), "<[(abc)d]ef>" },   //  574
    { 6,  6,  7, ABC_CONST(0xFFFF000070007000), "<(!(ab)cd)ef>" },   //  575
    { 6,  6,  7, ABC_CONST(0xFFFF00008F008F00), "<(!(!(ab)c)d)ef>" },   //  576
    { 6,  8, 10, ABC_CONST(0xFFFF00008F708F70), "<[(!(ab)c)d]ef>" },   //  577
    { 6,  8,  9, ABC_CONST(0xFFFF000078007800), "<([(ab)c]d)ef>" },   //  578
    { 6, 10, 14, ABC_CONST(0xFFFF000087788778), "<[(ab)cd]ef>" },   //  579
    { 6,  8,  8, ABC_CONST(0xFFFF000060006000), "<([ab]cd)ef>" },   //  580
    { 6,  8,  8, ABC_CONST(0xFFFF00009F009F00), "<(!([ab]c)d)ef>" },   //  581
    { 6, 10, 12, ABC_CONST(0xFFFF00009F609F60), "<[([ab]c)d]ef>" },   //  582
    { 6, 10, 11, ABC_CONST(0xFFFF000096009600), "<([abc]d)ef>" },   //  583
    { 6, 12, 18, ABC_CONST(0xFFFF000069966996), "<[abcd]ef>" },   //  584
    { 6,  7,  7, ABC_CONST(0xFFFF0000CA00CA00), "<(<abc>d)ef>" },   //  585
    { 6,  9, 10, ABC_CONST(0xFFFF000035CA35CA), "<[<abc>d]ef>" },   //  586
    { 6,  6,  8, ABC_CONST(0xFFFF000007770777), "<(!(ab)!(cd))ef>" },   //  587
    { 6,  8, 11, ABC_CONST(0xFFFF000078887888), "<[(ab)(cd)]ef>" },   //  588
    { 6,  8,  9, ABC_CONST(0xFFFF000006660666), "<([ab]!(cd))ef>" },   //  589
    { 6, 10, 10, ABC_CONST(0xFFFF000006600660), "<([ab][cd])ef>" },   //  590
    { 6,  7,  8, ABC_CONST(0xFFFF0000CAAACAAA), "<<ab(cd)>ef>" },   //  591
    { 6,  9, 10, ABC_CONST(0xFFFF0000ACCAACCA), "<<ab[cd]>ef>" },   //  592
    { 6,  7,  7, ABC_CONST(0xFFFF0000F088F088), "<<(ab)cd>ef>" },   //  593
    { 6,  9,  8, ABC_CONST(0xFFFF0000F066F066), "<<[ab]cd>ef>" }    //  594
};

////////////////////////////////////////////////////////////////////////
///                     FUNCTION DEFINITIONS                         ///
////////////////////////////////////////////////////////////////////////

/**Function*************************************************************

  Synopsis    []

  Description []
               
  SideEffects []

  SeeAlso     []

***********************************************************************/
void Mpm_ManPrintDsdStats( Mpm_Man_t * p )
{
    int i, Absent = 0;
    for ( i = 0; i < 595; i++ )
    {
        if ( p->nCountDsd[i] == 0 )
        {
            Absent++;
            continue;
        }
        if ( p->pPars->fVeryVerbose )
        {
            printf( "%5d  :  ", i );
            printf( "%-20s   ", p->pDsd6[i].pStr );
            printf( "%8d ",     p->nCountDsd[i] );
            printf( "\n" );
        }
    }
    printf( "Unused classes = %d (%.2f %%).  ",  Absent, 100.0 * Absent / 595 );
    printf( "Non-DSD cuts = %d (%.2f %%).  ",   p->nNonDsd, 100.0 * p->nNonDsd / p->nCutsMergedAll );
    printf( "No-match cuts = %d (%.2f %%).\n",  p->nNoMatch, 100.0 * p->nNoMatch / p->nCutsMergedAll );
}

/**Function*************************************************************

  Synopsis    []

  Description []
               
  SideEffects []

  SeeAlso     []

***********************************************************************/
Hsh_IntMan_t * Mpm_ManBuildHashTable( Vec_Int_t ** pvConfgRes ) 
{
    FILE * pFile;
    char * pFileName = "dsdfuncs6.dat";
    int RetValue, size = Extra_FileSize( pFileName ) / 12;  // 2866420
    Vec_Wrd_t * vTruthRes = Vec_WrdAlloc( size );
    Vec_Int_t * vConfgRes = Vec_IntAlloc( size );
    Hsh_IntMan_t * pHash;

    pFile = fopen( pFileName, "rb" );
    RetValue = fread( Vec_WrdArray(vTruthRes), sizeof(word), size, pFile );
    RetValue = fread( Vec_IntArray(vConfgRes), sizeof(int), size, pFile );
    vTruthRes->nSize = size;
    vConfgRes->nSize = size;
    // create hash table
    pHash = Hsh_WrdManHashArrayStart( vTruthRes, 1 );
    // cleanup
    if ( pvConfgRes )
        *pvConfgRes = vConfgRes;
    else
        Vec_IntFree( vConfgRes );
    Vec_WrdFree( vTruthRes );
//    Hsh_IntManStop( pHash );
    return pHash;
}

/**Function*************************************************************

  Synopsis    []

  Description []
               
  SideEffects []

  SeeAlso     []

***********************************************************************/
void Mpm_ManPrintPerm( unsigned s )
{
    int i;
    for ( i = 0; i < 6; i++ )
        printf( "%d ", (s >> (3*i)) & 7 );
    printf( "  " );
}

/**Function*************************************************************

  Synopsis    []

  Description []
               
  SideEffects []

  SeeAlso     []

***********************************************************************/
void Mpm_ManPrecomputePerms( Mpm_Man_t * p )
{
    int nVars = 6;
    // 0(1:1) 1(2:1) 2(4:2) 3(10:6) 4(33:23) 5(131:98) 6(595:464)
    int nClasses[7] = { 1, 2, 4, 10, 33, 131, 595 };
    int nPerms = Extra_Factorial( nVars );
//    int nSwaps = (1 << nVars);
    int * pComp, * pPerm;
    int i, k, x, One, OneCopy, Num;
    Vec_Int_t * vVars;
    abctime clk = Abc_Clock();
    assert( p->pDsd6 == NULL );
    p->pDsd6 = s_DsdClass6;
    // precompute schedules
    pComp = Extra_GreyCodeSchedule( nVars );
    pPerm = Extra_PermSchedule( nVars );
    // map numbers into perms
    p->vMap2Perm = Vec_IntStartFull( (1<<(3*nVars)) );
    // store permutations
    One = 0;
    for ( x = 0; x < nVars; x++ )
    {
        p->Perm6[0][x] = (char)x;
        One |= (x << (3*x));
    }
//    Vec_IntWriteEntry( p->vMap2Perm, One, 0 );
    OneCopy = One;
    for ( k = 0; k < nPerms; k++ )
    {
        if ( k > 0 )
        for ( x = 0; x < nVars; x++ )
            p->Perm6[k][x] = p->Perm6[k-1][x];
        ABC_SWAP( char, p->Perm6[k][pPerm[k]], p->Perm6[k][pPerm[k]+1] );

        Num = ( (One >> (3*(pPerm[k]  ))) ^ (One >> (3*(pPerm[k]+1))) ) & 7;
        One ^=  (Num << (3*(pPerm[k]  )));
        One ^=  (Num << (3*(pPerm[k]+1)));

        Vec_IntWriteEntry( p->vMap2Perm, One, k );
        
//        Mpm_ManPrintPerm( One );
//        for ( x = 0; x < nVars; x++ )
//            printf( "%d ", p->Perm6[k][x] );
//        printf( "\n" );
    }
    assert( OneCopy == One );
    // fill in the gaps
    vVars = Vec_IntAlloc( 6 );
    Vec_IntForEachEntry( p->vMap2Perm, Num, i )
    {
        // mark used variables
        int Count = 0;
        One = i;
        Vec_IntFill( vVars, 6, 0 );
        for ( k = 0; k < nVars; k++ )
        {
            int iVar = ((One >> (3*k)) & 7);
            if ( iVar >= nVars && iVar < 7 )
                break;
            if ( iVar != 7 )
            {
                if ( Vec_IntEntry( vVars, iVar ) == 1 )
                    break;
                Vec_IntWriteEntry( vVars, iVar, 1 );
                Count++;
            }
        }
        // skip ones with dups and complete
        if ( k < nVars || Count == nVars )
            continue;
        // find unused variables
        for ( x = k = 0; k < 6; k++ )
            if ( Vec_IntEntry(vVars, k) == 0 )
                Vec_IntWriteEntry( vVars, x++, k );
        Vec_IntShrink( vVars, x );
        // fill in used variables
        x = 0;
        for ( k = 0; k < nVars; k++ )
        {
            int iVar = ((One >> (3*k)) & 7);
            if ( iVar == 7 )
                One ^= ((Vec_IntEntry(vVars, x++) ^ 7) << (3*k));
        }
        assert( x == Vec_IntSize(vVars) );
        // save this one
        assert( Vec_IntEntry( p->vMap2Perm, One ) != -1 );
        Vec_IntWriteEntry( p->vMap2Perm, i, Vec_IntEntry(p->vMap2Perm, One) );
/*
        // mapping
        Mpm_ManPrintPerm( i );
        printf( "->  " );
        Mpm_ManPrintPerm( One );
        printf( "\n" );
*/
    }
    Vec_IntFree( vVars );

    // store permuted truth tables
    assert( p->vPerm6 == NULL );
    p->vPerm6 = Vec_WrdAlloc( nPerms * 595 );
    for ( i = 0; i < nClasses[nVars]; i++ )
    {
        word uTruth = s_DsdClass6[i].uTruth;
        for ( k = 0; k < nPerms; k++ )
        {
            uTruth = Abc_Tt6SwapAdjacent( uTruth, pPerm[k] );
            Vec_WrdPush( p->vPerm6, uTruth );
        }
        assert( uTruth == s_DsdClass6[i].uTruth );
    }
    ABC_FREE( pPerm );
    ABC_FREE( pComp );
    // build hash table
    p->pHash = Mpm_ManBuildHashTable( &p->vConfgRes );
    Abc_PrintTime( 1, "Setting up DSD information", Abc_Clock() - clk );
}

/**Function*************************************************************

  Synopsis    []

  Description []
               
  SideEffects []

  SeeAlso     []

***********************************************************************/
word Mpm_CutTruthFromDsd( Mpm_Man_t * pMan, Mpm_Cut_t * pCut, int iClass )
{
    int i;
    word uTruth = pMan->pDsd6[iClass].uTruth;
    assert( pMan->pDsd6[iClass].nVars == (int)pCut->nLeaves );
    for ( i = 0; i < (int)pCut->nLeaves; i++ )
        if ( Abc_LitIsCompl(pCut->pLeaves[i]) )
            uTruth = Abc_Tt6Flip( uTruth, i ); 
    return uTruth;
}

/**Function*************************************************************

  Synopsis    [Checks hash table for DSD class.]

  Description []
               
  SideEffects []

  SeeAlso     []

***********************************************************************/
int Mpm_CutCheckDsd6( Mpm_Man_t * p, word t )
{
    int fCompl, Entry, Config;
    if ( (fCompl = (t & 1)) )
        t = ~t;
    Entry = *Hsh_IntManLookup( p->pHash, (unsigned *)&t );
    if ( Entry == -1 )
        return -1;
    Config = Vec_IntEntry( p->vConfgRes, Entry );
    if ( fCompl )
        Config ^= (1 << 16);
    return Config;
}

/**Function*************************************************************

  Synopsis    []

  Description []
               
  SideEffects []

  SeeAlso     []

***********************************************************************/
int Mpm_CutComputeDsd6( Mpm_Man_t * p, Mpm_Cut_t * pCut, Mpm_Cut_t * pCut0, Mpm_Cut_t * pCut1, Mpm_Cut_t * pCutC, int fCompl0, int fCompl1, int fComplC, int Type )
{
    int fVerbose = 0;
    int i, Config, iClass, fCompl;
    int pLeavesNew[6] = { -1, -1, -1, -1, -1, -1 };
    word t = 0;
    if ( pCutC == NULL )
    {
        word t0, t1;
        int iClass0  = Abc_Lit2Var(pCut0->iFunc);
        int iClass1  = Abc_Lit2Var(pCut1->iFunc);
        word Truth0  = p->pDsd6[iClass0].uTruth;
        int Perm1    = Vec_IntEntry( p->vMap2Perm, p->uPermMask[1] );
        word Truth1p = Vec_WrdEntry( p->vPerm6, iClass1 * 720 + Perm1 );
        if ( p->uComplMask[1] )
        {
            for ( i = 0; i < 6; i++ )
                if ( (p->uComplMask[1] >> i) & 1 )
                    Truth1p = Abc_Tt6Flip( Truth1p, i );            
        }
        t0 = (fCompl0 ^ pCut0->fCompl ^ Abc_LitIsCompl(pCut0->iFunc)) ? ~Truth0  : Truth0;
        t1 = (fCompl1 ^ pCut1->fCompl ^ Abc_LitIsCompl(pCut1->iFunc)) ? ~Truth1p : Truth1p;
        if ( Type == 1 )
            t = t0 & t1;
        else if ( Type == 2 )
            t = t0 ^ t1;
        else assert( 0 );

if ( fVerbose )
{
Mpm_ManPrintPerm( p->uPermMask[1] );               printf( "\n" );
Kit_DsdPrintFromTruth( (unsigned *)&Truth0, 6 );   printf( "\n" );
Kit_DsdPrintFromTruth( (unsigned *)&Truth1p, 6 );  printf( "\n" );
Kit_DsdPrintFromTruth( (unsigned *)&t, 6 );        printf( "\n" );
}
    }
    else
    {
        word t0, t1, tC;
        int iClass0  = Abc_Lit2Var(pCut0->iFunc);
        int iClass1  = Abc_Lit2Var(pCut1->iFunc);
        int iClassC  = Abc_Lit2Var(pCutC->iFunc);
        word Truth0  = p->pDsd6[iClass0].uTruth;
        int Perm1    = Vec_IntEntry( p->vMap2Perm, p->uPermMask[1] );
        int PermC    = Vec_IntEntry( p->vMap2Perm, p->uPermMask[2] );
        word Truth1p = Vec_WrdEntry( p->vPerm6, iClass1 * 720 + Perm1 );
        word TruthCp = Vec_WrdEntry( p->vPerm6, iClassC * 720 + PermC );
        if ( p->uComplMask[1] )
        {
            for ( i = 0; i < 6; i++ )
                if ( (p->uComplMask[1] >> i) & 1 )
                    Truth1p = Abc_Tt6Flip( Truth1p, i );            
        }
        if ( p->uComplMask[2] )
        {
            for ( i = 0; i < 6; i++ )
                if ( (p->uComplMask[2] >> i) & 1 )
                    TruthCp = Abc_Tt6Flip( TruthCp, i );            
        }
        t0 = (fCompl0 ^ pCut0->fCompl ^ Abc_LitIsCompl(pCut0->iFunc)) ? ~Truth0  : Truth0;
        t1 = (fCompl1 ^ pCut1->fCompl ^ Abc_LitIsCompl(pCut1->iFunc)) ? ~Truth1p : Truth1p;
        tC = (fComplC ^ pCutC->fCompl ^ Abc_LitIsCompl(pCutC->iFunc)) ? ~TruthCp : TruthCp;
        t = (tC & t1) | (~tC & t0);
    }

    // find configuration
    Config = Mpm_CutCheckDsd6( p, t );
    if ( Config == -1 )
    {
        p->nNonDsd++;
        return 0;
    }

    // get the class
    iClass = Config >> 17;
    fCompl = (Config >> 16) & 1;
    Config &= 0xFFFF;

    // check if the gate exists
    if ( p->pPars->fMap4Gates )
    {
        if ( Vec_IntSize(Vec_WecEntry(p->vNpnConfigs, iClass)) == 0 )
        {
            p->nNoMatch++;
            return 0;
        }
    }

    // set the function
    pCut->iFunc = Abc_Var2Lit( iClass, fCompl );

if ( fVerbose )
{
Mpm_CutPrint( pCut0 );
Mpm_CutPrint( pCut1 );
Mpm_CutPrint( pCut );
}

    // update cut
    assert( (Config >> 6) < 720 );
    for ( i = 0; i < (int)pCut->nLeaves; i++ )
        pLeavesNew[(int)(p->Perm6[Config >> 6][i])] = Abc_LitNotCond( pCut->pLeaves[i], (Config >> i) & 1 );
    pCut->nLeaves = p->pDsd6[iClass].nVars;
    for ( i = 0; i < (int)pCut->nLeaves; i++ )
        assert( pLeavesNew[i] != -1 );
    for ( i = 0; i < (int)pCut->nLeaves; i++ )
        pCut->pLeaves[i] = pLeavesNew[i];
    p->nCountDsd[iClass]++;
    p->nSmallSupp += (int)(pCut->nLeaves < 2);

if ( fVerbose )
{
printf( "Computed " );
Mpm_CutPrint( pCut );
printf( "\n" );
}
    return 1;
}

////////////////////////////////////////////////////////////////////////
///                       END OF FILE                                ///
////////////////////////////////////////////////////////////////////////


ABC_NAMESPACE_IMPL_END