#!/usr/bin/perl use warnings; use strict; use re 'eval'; my $t0 = [ gettimeofday ]; $\ = $/; my $debug = 1; my $debug2 = 0; my $time = 0; my %regexes = ( '_' => 1 ); while( 1 ){ for my $i ( 0 .. @old_regexes - 1 ){ my $copy_of_index_i = $i; $i = $old_regexes[ $i ]; if( $i !~ /\*/ ){ for my $j ( $copy_of_index_i + 0 .. @old_regexes - 1 ){ $j = $old_regexes[ $j ]; next if $j =~ /\*/; $regexes{ "($i|$j)" } ++; # $regexes{ "($j|$i)" } ++; } } for my $j ( $copy_of_index_i + 0 .. @old_regexes - 1 ){ $j = $old_regexes[ $j ]; next if $i =~ /\*/ && $j =~ /\*/; $regexes{ "($i$j)" } ++; $regexes{ "($j$i)" } ++; } } } my %uniq; $re =~ / (\w) [(] (\w)(\w) [)] /x or next; $re =~ s/ (\w) [(] (\w)(\w) [)] /($1$2)$3/x; $regexes{ $re } ++; } $re =~ / (\w) [(] [(] (\w)(\w) [)] (\w) [)] /x or next; $re =~ s/ (\w) [(] [(] (\w)(\w) [)] (\w) [)] /(($1$2)$3)$4/x; $regexes{ $re } ++; } $re =~ / [(] (\w) (\w) [)] [(] (\w) (\w) [)] /x or next; $re =~ s/ [(] (\w) (\w) [)] [(] (\w) (\w) [)] /(($1$2)$3)$4/x; $regexes{ $re } ++; } $regexes{ "((((a|c)|g)|t)*)" } ++; y/_/./ for @regexes; my %HoR; my $cnt = () = $re =~ /\./g; for my $comb ( @{ $combinations[ $cnt - 1 ] } ){ $_ = $re; s/\./$letter/; } next if /\*/ and 4 == $cnt and /(\w).*\1/; next if / [(] (\w) \| (\w) [)] /x and $1 ge $2; next if / [(] [(] (\w) \| (\w) [)] \| (\w) [)] /x and $1 ge $2 || $1 ge $3 || $2 ge $3; } } if( $debug ){ my @c = ( 0 ) x 5; my $c = 0; my $cnt = () = $re =~ /\./g; $c[ $cnt - 1 ] += @{ $HoR{ $re } }; $c += @{ $HoR{ $re } }; } } ################ MAIN: <>; while( <> ){ s/\S+ // for @_; s/(.)\1{2,}/ $1 x 3 /ge for @_; s/(.{2,4})\1{2,}/ $1 x 2 /ge for @_; my %uniq; for my $str ( @_ ){ my @ok; for my $re ( @regexes ){ } @regexes = @ok; } my @real; for my $str ( @_ ){ my @ok; for my $re ( @regexes ){ } @regexes = @ok; } #^ map { s/^ \Q(?^:^\E //x, s/ \Q$)\E $//x } $shortest; # alternative: OK } ########## END MAIN sub combinations { my( $length, $min_set, @letters ) = @_; my %combs; $str =~ /$re (?{ $combs{ join '', grep defined, $1, $2, $3, $4, $5 } ++ }) (*FAIL)/x; # @combs = grep { !/(.)\1/ } @combs; # $debug2 and print "all combs: " . @combs; my %uniq; } @combs; }
* 2 1 a 3 gtc 1 0 3 1 g 2 gg 3 ggg 2 - tcac - gcac 2 - tac - gtc 2 - gag - tcag 2 - ga - ctca 2 - a - acaca 2 - aaa - cccc 3 - aaa - ccc - ttt 4 - a - c - g - t 4 - aaaaa - c - g - t 3 - acac - caca - g 1 - g 1 - gcgc 1 - gcgcg 1 - acacacacacacacacacac 1 - aaaaaaaaaaaaaaaaaaaaaaaaaac 1 - aaaaaaaaaacg 1 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac 1 - acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacac 1 - acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacg 1 - acacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacacgt 9 - a - aaaaaaaaaaaaaaaaaaaaaaa - aa - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacccc - aac - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac - ac - aaaaaac - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaac 32 - a - c - t - g - aa - cc - tt - gg - a - c - t - g - aa - cc - tt - gg - a - c - t - g - aa - cc - tt - gg - a - c - t - g - aa - cc - tt - gg 2 - acgtgca - 2 - acgt - 1 - aaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccctaaaaaaaaaaaaacccccccccccccct 1 - acggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgaacggcagcgagcgacgacgacgacgagcgacggacggacggacggagcggacggacggacgacgacgagcgacggagcgagcgacggacgagcgacgat 1 - acgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacg 1 - acgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgt 2 - - 2 - - c 3 - - c - t 3 - - ccc - t 2 - acgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgt - acgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacgacga 2 - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgcgcgcgcgcgcgcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa - aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaacgcgcgcgcgcgcgcgaaaaaaaaaaaaaaaaaaaaaaaaaaaaaat 8 - aaaacgcgaaaa - aaaacgcgaaaat - aaaacgcgaaaatttttt - aaaacgcgaaaatttt - aaaacgcgcgaaaatttttt - aaaaaaacgcgaaaatttttt - cgcgaaaatttttt - aaaacgcgaaaattttttcgcg 1 - acg
4
16
60
168
240
1
4
25
144
235
number of abstract regexes: 235
235
208
203
198
199
all regexes: 15264
8
76
960
3384
10836
candidate abstract regexes: 199
candidate abstract regexes: 60
abstract regexes which match: 45
candidate regexes: 2550
candidate regexes: 954
regexes which match: 292
(a|((gt)c))
--------------------
candidate abstract regexes: 199
abstract regexes which match: 27
candidate regexes: 746
regexes which match: 746
(t*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 60
candidate abstract regexes: 35
abstract regexes which match: 28
candidate regexes: 1194
candidate regexes: 528
candidate regexes: 318
regexes which match: 318
(g*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 114
abstract regexes which match: 114
candidate regexes: 6382
candidate regexes: 284
regexes which match: 249
((((g|t)c)a)c)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 136
abstract regexes which match: 136
candidate regexes: 9366
candidate regexes: 669
regexes which match: 249
(((gt)|(ta))c)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 136
abstract regexes which match: 76
candidate regexes: 3210
candidate regexes: 277
regexes which match: 245
((g|(tc))(ag))
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 114
abstract regexes which match: 67
candidate regexes: 2086
candidate regexes: 258
regexes which match: 246
((g|((ct)c))a)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 60
abstract regexes which match: 34
candidate regexes: 906
candidate regexes: 462
regexes which match: 261
((a|c)*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 136
abstract regexes which match: 136
candidate regexes: 9366
candidate regexes: 318
regexes which match: 255
((a|c)*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 136
candidate abstract regexes: 136
abstract regexes which match: 136
candidate regexes: 9366
candidate regexes: 318
candidate regexes: 255
regexes which match: 243
((a|(c|t))*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 60
candidate abstract regexes: 60
candidate abstract regexes: 60
abstract regexes which match: 60
candidate regexes: 3940
candidate regexes: 1444
candidate regexes: 466
candidate regexes: 306
regexes which match: 264
((a|t)|(c|g))
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 136
candidate abstract regexes: 45
candidate abstract regexes: 45
abstract regexes which match: 45
candidate regexes: 2550
candidate regexes: 318
candidate regexes: 257
candidate regexes: 243
regexes which match: 240
((((a|c)|g)|t)*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 114
candidate abstract regexes: 114
abstract regexes which match: 29
candidate regexes: 1002
candidate regexes: 268
candidate regexes: 255
regexes which match: 243
((a|(c|g))*)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 60
candidate regexes: 3940
regexes which match: 1444
g
--------------------
candidate abstract regexes: 199
abstract regexes which match: 114
candidate regexes: 6382
regexes which match: 293
((gc)*)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 82
candidate regexes: 2922
regexes which match: 261
((c|g)*)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 84
candidate regexes: 2062
regexes which match: 293
((ac)*)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 114
candidate regexes: 6382
regexes which match: 283
((a*)c)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 82
candidate regexes: 2922
regexes which match: 264
(((a*)c)g)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 114
candidate regexes: 6382
regexes which match: 283
((a*)c)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 85
candidate regexes: 2086
regexes which match: 293
((ac)*)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 78
candidate regexes: 1962
regexes which match: 260
(((ac)*)g)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 91
candidate regexes: 2194
regexes which match: 258
(((ac)*)(gt))
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 60
candidate abstract regexes: 35
candidate abstract regexes: 28
candidate abstract regexes: 26
candidate abstract regexes: 26
candidate abstract regexes: 26
abstract regexes which match: 26
candidate regexes: 714
candidate regexes: 408
candidate regexes: 318
candidate regexes: 318
candidate regexes: 258
candidate regexes: 256
candidate regexes: 256
regexes which match: 256
((a|c)*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 60
candidate abstract regexes: 35
candidate abstract regexes: 35
candidate abstract regexes: 35
candidate abstract regexes: 35
candidate abstract regexes: 35
candidate abstract regexes: 35
abstract regexes which match: 35
candidate regexes: 2118
candidate regexes: 813
candidate regexes: 318
candidate regexes: 257
candidate regexes: 255
candidate regexes: 243
candidate regexes: 243
candidate regexes: 240
regexes which match: 240
((((a|c)|g)|t)*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 27
abstract regexes which match: 12
candidate regexes: 466
candidate regexes: 466
regexes which match: 240
((((a|c)|g)|t)*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 27
abstract regexes which match: 20
candidate regexes: 614
candidate regexes: 614
regexes which match: 256
((((ac)g)t)*)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 86
candidate regexes: 2110
regexes which match: 243
((a|(c|t))*)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 80
candidate regexes: 2010
regexes which match: 243
(((g|(a|c))*)t)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 90
candidate regexes: 2170
regexes which match: 265
(((ac)g)*)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 80
candidate regexes: 2010
regexes which match: 253
((((ac)g)*)t)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 27
candidate regexes: 746
regexes which match: 746
(t*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 27
abstract regexes which match: 10
candidate regexes: 418
candidate regexes: 418
regexes which match: 304
(c*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 27
candidate abstract regexes: 10
abstract regexes which match: 10
candidate regexes: 418
candidate regexes: 418
candidate regexes: 304
regexes which match: 255
((c|t)*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 27
candidate abstract regexes: 19
abstract regexes which match: 10
candidate regexes: 418
candidate regexes: 418
candidate regexes: 304
regexes which match: 255
((c|t)*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 80
abstract regexes which match: 80
candidate regexes: 2010
candidate regexes: 249
regexes which match: 243
((a|(t|(cg)))*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 83
abstract regexes which match: 70
candidate regexes: 1770
candidate regexes: 249
regexes which match: 243
((a|(t|(cg)))*)
--------------------
candidate abstract regexes: 199
candidate abstract regexes: 85
candidate abstract regexes: 70
candidate abstract regexes: 70
candidate abstract regexes: 70
abstract regexes which match: 70
candidate regexes: 1770
candidate regexes: 249
candidate regexes: 243
candidate regexes: 243
candidate regexes: 243
regexes which match: 243
((a|(t|(cg)))*)
--------------------
candidate abstract regexes: 199
abstract regexes which match: 136
candidate regexes: 9366
regexes which match: 669
((ac)g)
--------------------