Problem Statement
This problem is about three programmers who work together on a project. The programmers' names are Alice, Bob, and Charles. We will use 'A', 'B', and 'C' to denote them.
Each day exactly one of the three programmers works on the project. The code history is a string that specifies who worked on which day. For example, the string "AAC" means that Alice worked on the project for two days in a row and then Charles worked for a day.
Alice is always able to work on the project. Each time Bob spends a day working, he needs to take at least one day off before he is able to work again. Each time Charles spends a day working, he needs to take at least two days off.
The above information means that not all strings are valid code histories. For example, the string "BB" is not a valid code history because Bob cannot work two days in a row.
You are given a
Definition
- Class:
- ThreeProgrammers
- Method:
- validCodeHistory
- Parameters:
- String
- Returns:
- String
- Method signature:
- String validCodeHistory(String code)
- (be sure your method is public)
Constraints
- code will contain between 1 and 50 characters, inclusive.
- Each character in code will be one of 'A', 'B', and 'C'.
Examples
"CAB"
Returns: "BCA"
The input is a valid code history. In fact, any permutation of this input is a valid code history, and you may return any of them.
"CBB"
Returns: "BCB"
Bob cannot work on two consecutive days. Hence, "BCB" is the only valid code history that is a permutation of the given input.
"BB"
Returns: "impossible"
"BBA"
Returns: "BAB"
"CAC"
Returns: "impossible"
"ACAC"
Returns: "CAAC"
"ACABC"
Returns: "ACABC"
"BAABCABBCCACBAACABAABABBCCAACABCCAACCABCACACCBABAB"
Returns: "BACBABCAACBACABCBACBACABCBACBACABCABCAACBACAACABCA"
"C"
Returns: "C"
"CC"
Returns: "impossible"
"CCC"
Returns: "impossible"
"B"
Returns: "B"
"CB"
Returns: "BC"
"CBC"
Returns: "impossible"
"CCBC"
Returns: "impossible"
"BB"
Returns: "impossible"
"CBB"
Returns: "BCB"
"CBCB"
Returns: "impossible"
"CCBCB"
Returns: "impossible"
"BBB"
Returns: "impossible"
"BBCB"
Returns: "impossible"
"CBBBC"
Returns: "impossible"
"BCCBCB"
Returns: "impossible"
"A"
Returns: "A"
"CA"
Returns: "CA"
"CCA"
Returns: "impossible"
"CACC"
Returns: "impossible"
"BA"
Returns: "BA"
"BCA"
Returns: "BCA"
"BCAC"
Returns: "CBAC"
"CACBC"
Returns: "impossible"
"BBA"
Returns: "BAB"
"CBAB"
Returns: "BCBA"
"BCBAC"
Returns: "CBABC"
"CACCBB"
Returns: "impossible"
"BBAB"
Returns: "impossible"
"CBABB"
Returns: "BCBAB"
"BBACCB"
Returns: "BCBABC"
"CBBCACB"
Returns: "impossible"
"AA"
Returns: "AA"
"CAA"
Returns: "CAA"
"ACCA"
Returns: "CAAC"
"CACCA"
Returns: "impossible"
"BAA"
Returns: "BAA"
"CBAA"
Returns: "BCAA"
"CCAAB"
Returns: "CBACA"
"CCCAAB"
Returns: "impossible"
"BBAA"
Returns: "BABA"
"ACBAB"
Returns: "BCBAA"
"ACABCB"
Returns: "CBABCA"
"CCBCABA"
Returns: "CBACBAC"
"BBABA"
Returns: "BABAB"
"BBABCA"
Returns: "BCBABA"
"BCABCBA"
Returns: "BCBABCA"
"BCCCABBA"
Returns: "CBABCBAC"
"AAA"
Returns: "AAA"
"AACA"
Returns: "CAAA"
"CACAA"
Returns: "CAACA"
"CCAAAC"
Returns: "impossible"
"ABAA"
Returns: "BAAA"
"CBAAA"
Returns: "BCAAA"
"CCAABA"
Returns: "CBACAA"
"CCACBAA"
Returns: "CBACAAC"
"ABABA"
Returns: "BABAA"
"BCBAAA"
Returns: "BCBAAA"
"BABACAC"
Returns: "CBABCAA"
"ACABCACB"
Returns: "CBACBACA"
"BABAAB"
Returns: "BABABA"
"BBABCAA"
Returns: "BCBABAA"
"BAACCABB"
Returns: "BCBABCAA"
"CBBAACCBA"
Returns: "CBABCBACA"
"CAAAAABAACAABBCBCCBABACBBAACCBBBCCBCCBBCACC"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"ACBCBAACCBCCCBBACBACAAACBABACABABBABCCCCBACB"
Returns: "impossible"
"AACACCBCBBACBCBCBCAACBBCAAAAABACBBCACCCBACCBB"
Returns: "impossible"
"CCABAACABACCBBCCABBCCBACCABBCBAABABBBAACCBA"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACA"
"CCACCACABAABABBBBBAACCCCABBCBCAABCBBBCBAACAC"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"BCAACBCBBCCBBBCACABCACCAACBAAABBBACACCCABCBBA"
Returns: "impossible"
"ABBBCBACCCCCCBBCAABBACBABCAACABBBACBCCBCACAACA"
Returns: "impossible"
"CACACCACAABBAAABBCBCBBBAABACBBCBCACBCBBAACCB"
Returns: "CBABCBABCBABCBACBACBACBACBACBACBACBACBACBACA"
"ABCBCBBACBAAAAABACBABBBCBCABCBABCACCCCCACCBAB"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACBAC"
"BBABBCCBABCAACCABCCACCABABBBCABBBBCBCACCACAAAC"
Returns: "impossible"
"ABCCAAAABCAACBCCCBACBBAAABBCBBCCCCCAABCCABBBCBB"
Returns: "impossible"
"CBCACBBCABBCBCABBBAACBACCBBABABCACBCABAAACBAC"
Returns: "CBABCBABCBABCBABCBACBACBACBACBACBACBACBACBACA"
"ACABAABCCBCBAAABCCBCCABACBACBBACBACABBBACCCBBB"
Returns: "CBABCBABCBABCBACBACBACBACBACBACBACBACBACBACBAC"
"BBCABBABBBACBBBBCCCBBAABCCCCBCCCAACAAAAAAABCCBC"
Returns: "impossible"
"BABBACAABCBBBCACCABAACABBBCBACCCAABCBCBCCBCAACCB"
Returns: "impossible"
"ABBBABCCBCCACACCACAACCBBABAAAABBBAACBBCCACB"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACAA"
"ABABCBBCAABACBCACCCABCAACCBCBCAABCABACCBBABA"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACA"
"CCAAABBABBABCBACBABCCBCACACAACCABCCCCCAABABBB"
Returns: "impossible"
"CCCCABAAACAABCABABCBCBAAABCBBCCBCCCCBCBCBAAABA"
Returns: "impossible"
"ABBBACBAAACCACBAAABBACCBCBBABBCCAAACCCCBABCB"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACAA"
"BBABCABBCABACCCAACCCACACBBCBBBBAACCCBACBABAAA"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACBACA"
"AACAACCBABCCCABBBACCCABCACAABBBBCBBAACBCBCACAB"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"BCCCBBAAACAACCACCABCBCABCACAABBABBABCACBCBACBBC"
Returns: "impossible"
"CABACACCCACBBACBBBACABAABACCBBBBACCAACBBBCABA"
Returns: "CBABCBABCBABCBACBACBACBACBACBACBACBACBACBACAA"
"BABCAAAAAACCCCABBBBCBBACCBBABCCBABAAABBCCCCACB"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACBACA"
"ABBBABBABACBACACACBACCCABBBCCABCACBBBCAACACCCAB"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"CCCACBCABCCCBBCACBBACACCBCABBBCABAAACABBBAAABABC"
Returns: "impossible"
"CAABBCBACBBCCBACBCACBCBCABBACBCACBBBCABABAAAAA"
Returns: "CBABCBABCBABCBABCBACBACBACBACBACBACBACBACBACAA"
"CCCCBCCBABBBCBBAABACBBCBBAAACACABACABCABAAACBCB"
Returns: "CBABCBABCBABCBACBACBACBACBACBACBACBACBACBACBACA"
"CBACCCBACCCBABCCBACABBABCACBCBBBABAAAABABCBBACAC"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"BACCBABABBBBBBAABAACBCBABAACCCCCACCBBCACACCCCAABB"
Returns: "impossible"
"ACBABCACBCBAABCCBBACCBCBAABBACABACCCAABAACBA"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACAAA"
"BACCBBAAAACABBACAAABBCBBCAACBBBCCACBAAABCCCCC"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACAA"
"ABCBABCABACCAACABCCBACBCBABBAACCCBACCAACBAABCB"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACAAC"
"ACACACACBCACACBBBBAAAABBACCCAACCBCBBCABCBACCBAB"
Returns: "impossible"
"BCBBABAACAACBBBACBBABCCACCAABCABBAABACCCACBCA"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACAAA"
"BCACABBABCABAABCCBBBCABCCACAAACABCBACBCBCABCAA"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACBACAA"
"ABACBBBBCCCBBCCCAACCACBCBBAACBCBAACCAAAABACBBAA"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACA"
"BCBBCAACCBABAACCBCCBAAACACCABBBBCAAACCAACBBBACCB"
Returns: "impossible"
"AABBBCCBCCBABACCAAACCBBBBAAACCCBBCABAABABACBAC"
Returns: "CBABCBABCBABCBACBACBACBACBACBACBACBACBACBACAAA"
"BAAABACCBBACCCCACACACAABBCBBCCBBCABABABACBBAACB"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACBACAA"
"AABCBABAACCCCAABBCCABBACBBCCBCBABBAAABCCBBCAAACC"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACBACBACA"
"CBBABAAACCCCCACBACABAACBCBABBCCBABBBAABABCCCCABAC"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"BBAACACBCABCABABAACCABACBCBCBBCAABACABBCBBCCABA"
Returns: "CBABCBABCBABCBABCBACBACBACBACBACBACBACBACBACAAA"
"BCBBAACCBAABCCBACAABBCACBCCACCCBBAAABBBCBABACABA"
Returns: "CBABCBABCBABCBACBACBACBACBACBACBACBACBACBACBACAA"
"AABCCABBBCBCCACCCBAACBABBAACBCAABAAACABCABBCCBBBC"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACBACBACA"
"AAABAABCAABABBCCCACACBBCAACBCBBCCCACCBBCBAACBCBABB"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"ABBABBABACABCACACABACABAABBACCAABBCCBBACCCCCA"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACAAAA"
"BBABAACBABBCABBACCAABCABBBABCCAACACCCBCCAAACCA"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACAAA"
"CAACBABBBAAAAAABCBCABCCBABCCBCAACCACACBBBABCACC"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACAACA"
"BBCAAACACCACCAAACCABCBCACCBBAAABBCABCBBACCBABACB"
Returns: "impossible"
"BBBCCACACBABACACACABBCAABCCBBABBCCBAABCBACAAAA"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACAAAA"
"CBCCCACCBAABCABAACCBABABAABAACCBBCCBAAABABCCBAB"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACBACAAA"
"BBBCACCCBCABABABBABCCABCBCACCBCCCCAAABAABABAAACA"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACAA"
"CAACCCBABAABCCBCCBAACBBCCCBABACBBACACAAAABACBBBCA"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACAAC"
"BBBCAABACCBBBACBCCACACBCBBCACABAAABABAACCCBBAAA"
Returns: "CBABCBABCBABCBACBACBACBACBACBACBACBACBACBACAAAA"
"ABAACCCCBBBAACCBBBCBCCABAAACBACCBBBCAABABACCABAA"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACBACAAA"
"BBCBBBCACABCACCBCABBCBAAABAACAAABBBCCCCACCAABBACA"
Returns: "CBABCBACBACBACBACBACBACBACBACBACBACBACBACBACBACAA"
"CBBACBAACCACCCBCCBCCBAAABBCCCACCAABAABCBBBABAAAABB"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACA"
"BABBCBACACABBCBAAAAACCCBBABBACCACCBBACAAAACBCBBB"
Returns: "CBABCBABCBABCBABCBACBACBACBACBACBACBACBACBACAAAA"
"BAAAABBACABACCCABBBBAABACCAAABBCCBBCAABCBCCBCCACB"
Returns: "CBABCBABCBABCBACBACBACBACBACBACBACBACBACBACBACAAA"
"BCCCBCCBABBACABABAAABBACBCCCAACCBACBBCBABACAABCABA"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACBACBACAA"
"BABBABABBABABBBAAABAAAABBAAAAABBABBBABBBBAAABAA"
Returns: "BABABABABABABABABABABABABABABABABABABABABABABAA"
"BAAABABBBAAAABABAAABAAABABBBAAABBBBABBBBAABBBBAA"
Returns: "BABABABABABABABABABABABABABABABABABABABABABABABA"
"ABAABABABBBBABBABAABABBAAABBABBBBBBAABBABBAABAAAAA"
Returns: "impossible"
"CBCBBCCBBAABAABBCABABCBBCCCCCAAABBABCBBBBBABB"
Returns: "CBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABC"
"ABBACCCBBCCCBBBCABABBAAABBCBCAABBCCABBBBBBBBCA"
Returns: "BCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABC"
"CBAAABBABBBBBABCACCBBAABCBBBACBBCCCBBBBBBCAACCB"
Returns: "BCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCB"
"BABCBBBBCABAAACABBBCBBBCCCCBCACBBBAABABABBCCBBBB"
Returns: "impossible"
"AABBBBBBCCC"
Returns: "BCBABCBABCB"
"BBBACCB"
Returns: "BCBABCB"
"BABBCCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABABBA"
Returns: "BCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABABAB"
"AAABBBBBCCCC"
Returns: "CBABCBABCBAC"
"AAACCCCBBBBBBBB"
Returns: "BCBABCBABCBABCB"
"BCBABCBABCBABCB"
Returns: "BCBABCBABCBABCB"
"BCBCBABAB"
Returns: "BCBABCBAB"
"BBBBACC"
Returns: "BCBABCB"
"CAAC"
Returns: "CAAC"
"ABBBBCC"
Returns: "BCBABCB"
"AAABBBCCCC"
Returns: "CBACBACBAC"
"CCBBB"
Returns: "impossible"
"BBBCC"
Returns: "impossible"
"BAB"
Returns: "BAB"
"BABCBABCB"
Returns: "BCBABCBAB"
"BBBBCCA"
Returns: "BCBABCB"
"BCBABCBABCB"
Returns: "BCBABCBABCB"
"BCBABCB"
Returns: "BCBABCB"
"CBBABBAAACBBAAACCBBCAABCBCABBABBBBBACBBBBCBCBBBCCC"
Returns: "BCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABC"
"BBC"
Returns: "BCB"
"BABB"
Returns: "impossible"
"BCCA"
Returns: "CBAC"
"AAABBBBBBCCCC"
Returns: "CBABCBABCBABC"
"ABCBABCACBABCBABCACBABCBABCACBABCBABCACBABCBABCACB"
Returns: "CBABCBABCBABCBABCBABCBABCBACBACBACBACBACBACBACBACA"
"CCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA"
Returns: "impossible"
"BCCBCCBBCCCCBCACCBCCBCBBCCACCCBCCCCACCBCCCCCCBCBCB"
Returns: "impossible"
"BBBCA"
Returns: "BCBAB"
"BCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABC"
Returns: "BCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABC"
"BCBABCBA"
Returns: "BCBABCBA"
"CBBCBAC"
Returns: "impossible"
"CBAC"
Returns: "CBAC"
"BCBABCBABCBAB"
Returns: "BCBABCBABCBAB"
"CCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAA"
Returns: "CBABCBABCBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"BCBAB"
Returns: "BCBAB"
"CCBBBA"
Returns: "BCBABC"
"ABBBC"
Returns: "BCBAB"
"CCCCBBBBAAAB"
Returns: "CBABCBABCBAC"
"AAAAAAAAAAAAAAABBBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCCC"
Returns: "impossible"
"AABBBBBCCC"
Returns: "BCBABCBABC"
"CBCA"
Returns: "CBAC"
"CCCCCCCCCCCCCCCCCBBBBBBBBBBBBBBBBAAAAAAAAAAAAAAAA"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"CBABCB"
Returns: "BCBABC"
"CCCCCCCCBBBBBBBBBBBAAAAAAA"
Returns: "CBABCBABCBABCBABCBACBACBAC"
"CBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCB"
Returns: "BCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABCBABC"
"ABCACBABCCABBBCAACCBAACBABBCCBBBBBCBCBCBAACCAABBBA"
Returns: "CBABCBABCBABCBABCBABCBABCBABCBACBACBACBACBACBACBAC"
"CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACBAC"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"BCBABCBAB"
Returns: "BCBABCBAB"
"ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCC"
Returns: "CBACBACBACBACBACBACBACBACBACBACBACBACBACBACBACBAC"
"BABACCBABBAAABCCBBCBBACAACBBABBBBCCACACC"
Returns: "CBABCBABCBABCBABCBABCBACBACBACBACBACBACA"
"ABCABCABCABCABCABCABCABCABCABCABCABCABCABCABCACC"
Returns: "impossible"
"BBCC"
Returns: "impossible"
"BCBACBABBC"
Returns: "BCBABCBABC"
"BCBC"
Returns: "impossible"
"BCBABCBABCBABCBABCBABCB"
Returns: "BCBABCBABCBABCBABCBABCB"
"CBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCBCB"
Returns: "impossible"
"CBBCAB"
Returns: "BCBABC"
"BBBBBBBBCCCCAAA"
Returns: "BCBABCBABCBABCB"
"BBBBBBBBBBBBBBBBBCCCCCCCCCCCCCCCAAAAAAAAAAAAAAAAA"
Returns: "CBABCBABCBABCBACBACBACBACBACBACBACBACBACBACBACAAA"
"CCCCCCBBBBBBBAAAAA"
Returns: "CBABCBABCBACBACBAC"
"BBBBBBBBBBBBBAAAAAACCCCCC"
Returns: "BCBABCBABCBABCBABCBABCBAB"