value = {
        '2s': 1, '2h': 2, '2d': 3, '2c': 4,
        '3s': 5, '3h': 6, '3d': 7, '3c': 8,
        '4s': 9, '4h': 10, '4d': 11, '4c': 12,
        '5s': 13, '5h': 14, '5d': 15, '5c': 16,
        '6s': 17, '6h': 18, '6d': 19, '6c': 20,
        '7s': 21, '7h': 22, '7d': 23, '7c': 24,
        '8s': 25, '8h': 26, '8d': 27, '8c': 28,
        '9s': 29, '9h': 30, '9d': 31, '9c': 32,
        'Ts': 33, 'Th': 34, 'Td': 35, 'Tc': 36,
        'Js': 37, 'Jh': 38, 'Jd': 39, 'Jc': 40,
        'Qs': 41, 'Qh': 42, 'Qd': 43, 'Qc': 44,
        'Ks': 45, 'Kh': 46, 'Kd': 47, 'Kc': 48,
        'As': 49, 'Ah': 50, 'Ad': 51, 'Ac': 52
        }


def find_cut_index(deck: list[str]):
    """Returns the cut index"""

    for i in range(1, len(deck), 2):
        try:
            if value[deck[i - 1]] > value[deck[i]]:
                return i
            if value[deck[i]] > value[deck[i + 1]]:
                return i + 1
        except IndexError:
            return 'same'
    return 'same'


def findCard(deck: list[str], card: str) -> int:
    """
    Returns the card index.
    If the card is not found, it will return -1
    """

    left, right = 0, len(deck) - 1
    mid = find_cut_index(deck)
    if mid == 'same':
        return 0

    if value[deck[left]] <= value[card] <= value[deck[mid-1]]:
        right = mid
    else:
        left = mid

    while left <= right:
        mid = (left + right) // 2
        if deck[mid] == card:
            if deck[mid-1] != card:
                return mid
            if deck[left] == card:
                return left
            right = mid - 1
            left += 1
        elif value[deck[mid]] < value[card]:
            left = mid + 1
        else:
            right = mid - 1

    return -1
