Python (with explanation)
\nclass Solution(object):\n    def strWithout3a3b(self, A, B):\n        """\n        :type A: int\n        :type B: int\n        :rtype: str\n        """\n     
```\nclass Solution(object):\n    def strWithout3a3b(self, A, B):\n        """\n        :type A: int\n        :type B: int\n        :rtype: str\n        """\n        # greedy strategy\n        # differ by 2 - take (2,1)\n        # differ by 1 - still take(2,1)\n        # same - take 1 of each\n        \n        # we\'ll remove it later\n        result = \'a\'\n        while A > 0 and B > 0:\n            a_part = \'\'\n            b_part = \'\'\n            if A > B:\n                a_part = \'aa\'\n                b_part = \'b\'\n            elif B > A:\n                a_part = \'a\'\n                b_part = \'bb\'\n            else:\n                a_part = \'a\'\n                b_part = \'b\'\n                \n            if result[-1] == \'a\':\n                result += b_part + a_part\n            else:\n                result += a_part + b_part\n            \n            A -= len(a_part)\n            B -= len(b_part)\n        \n        result = result[1:]\n        if A != \'\':  \n            result = result + A*\'a\' if result[0] == \'a\' else A*\'a\' + result\n        if B != \'\':\n            result = result + B*\'b\' if result[0] == \'b\' else B*\'b\' + result\n            \n        return result\n\n```\n\nsince the maximal difference is 3, doing (2,1) will guarantee that A,B will eventually be even
[]