test((data)*|case*)+ testdata test((data)*|case*)+ testdataa test((data)*|case*)+ testdatacasedata test((data)*|case*)+ testdatacasedataa (recursion)*((test|tset)((data)*|case*)+)+ testdatacasedataa (recursion)*((test|tset)((data)*|case*)+)+ testdatacase (recursion)*((test|tset)((data)*|case*)+)+ recursiontestdatacase (recursion)*((test|tset)((data)*|case*)+)+ recursionntestdatacase (recursion)*((test|tset)((data)*|case*)+)+ recursiontsetdatacasecasecasecasecasecasecasecasecasedatadatadatadatadatacase (recursion)*((test|tset)((data)*|case*)+)+ recursiontsetdatacasecasecasecasecasecasecasecasecasedatadatadatadatadatacasea c*d*a*b*c*d*aba*b* aaaaaab a*b*aba*b* ab