# your code goes here
from timeit import timeit
print(timeit(stmt='''
us, cs = np.unique(a, return_counts = True)
ui = np.searchsorted(us, a)
af = cs[ui]
if desc:
ix = np.argsort(-af, kind = 'stable') # Descending sort
else:
ix = np.argsort(af, kind = 'stable') # Ascending sort
''', setup='''
import numpy as np
a = np.array(['g', 'g', 'c', 'f', 'd', 'd', 'g', 'a', 'a', 'a', 'f', 'f', 'f',
'g', 'f', 'c', 'f', 'a', 'e', 'b', 'g', 'd', 'c', 'b', 'f' ])
desc=True
''', number=1000))
print(timeit(stmt='''
counts = Counter(a)
t = [(counts[v], i) for i, v in enumerate(a)]
t.sort(key = lambda x:(-x[0],x[1]))
''', setup='''
from collections import Counter
a = ['g', 'g', 'c', 'f', 'd', 'd', 'g', 'a', 'a', 'a', 'f', 'f', 'f',
'g', 'f', 'c', 'f', 'a', 'e', 'b', 'g', 'd', 'c', 'b', 'f' ]
''', number=1000))
IyB5b3VyIGNvZGUgZ29lcyBoZXJlCmZyb20gdGltZWl0IGltcG9ydCB0aW1laXQKCnByaW50KHRpbWVpdChzdG10PScnJwp1cywgY3MgPSBucC51bmlxdWUoYSwgcmV0dXJuX2NvdW50cyA9IFRydWUpCnVpID0gbnAuc2VhcmNoc29ydGVkKHVzLCBhKQphZiA9IGNzW3VpXQppZiBkZXNjOgogICAgaXggPSBucC5hcmdzb3J0KC1hZiwga2luZCA9ICdzdGFibGUnKSAjIERlc2NlbmRpbmcgc29ydAplbHNlOgogICAgaXggPSBucC5hcmdzb3J0KGFmLCBraW5kID0gJ3N0YWJsZScpICMgQXNjZW5kaW5nIHNvcnQKJycnLCBzZXR1cD0nJycKaW1wb3J0IG51bXB5IGFzIG5wCmEgPSBucC5hcnJheShbJ2cnLCAgJ2cnLCAgJ2MnLCAgJ2YnLCAgJ2QnLCAgJ2QnLCAgJ2cnLCAgJ2EnLCAgJ2EnLCAgJ2EnLCAgJ2YnLCAgJ2YnLCAgJ2YnLAogICAgICdnJywgICdmJywgICdjJywgICdmJywgICdhJywgICdlJywgICdiJywgICdnJywgICdkJywgICdjJywgICdiJywgICdmJyBdKQpkZXNjPVRydWUKJycnLCBudW1iZXI9MTAwMCkpCgpwcmludCh0aW1laXQoc3RtdD0nJycKY291bnRzID0gQ291bnRlcihhKQp0ID0gWyhjb3VudHNbdl0sIGkpIGZvciBpLCB2IGluIGVudW1lcmF0ZShhKV0KdC5zb3J0KGtleSA9IGxhbWJkYSB4OigteFswXSx4WzFdKSkKJycnLCBzZXR1cD0nJycKZnJvbSBjb2xsZWN0aW9ucyBpbXBvcnQgQ291bnRlcgphID0gWydnJywgICdnJywgICdjJywgICdmJywgICdkJywgICdkJywgICdnJywgICdhJywgICdhJywgICdhJywgICdmJywgICdmJywgICdmJywKICAgICAnZycsICAnZicsICAnYycsICAnZicsICAnYScsICAnZScsICAnYicsICAnZycsICAnZCcsICAnYycsICAnYicsICAnZicgXQonJycsIG51bWJlcj0xMDAwKSk=