Description: From Pattern Finding. Update: silly me. It works now.
sub find_pat {
  use re 'eval';

  my $n = shift;
  my $re = qq{
(?{ local (@{[ map "\$c$_,", 1 .. $n ]}) = (0) x $n })
^ 
  };
  $re .= qq{
(.+?)
(?:
@{[ join " |\n", map "  \\$_ (?{ local \$c$_ = \$c$_ + 1 })", 1 .. $_ 
+]}
)*
  } for 1 .. $n;
  $re .= qq{
(?(?{ @{[ join ' && ', map "\$c$_", 1 .. $n ]} })|(?!))
\$
};

  return qr/$re/x;
}