<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def find_candidates(candidates):
 """ Find candidate addresses using LCS algorithm perform a scoring based on how often a candidate appears in a longer candidate Input is something like ['1b6033', '1b6033fd57', '701b603378e289', '20701b603378e289000c62', '1b603300', '78e289757e', '7078e2891b6033000000', '207078e2891b6033000000'] Output like {'1b6033': 18, '1b6033fd57': 1, '701b603378e289': 2, '207078e2891b6033000000': 1, '57': 1, '7078e2891b6033000000': 2, '78e289757e': 1, '20701b603378e289000c62': 1, '78e289': 4, '1b603300': 3} :type candidates: list of CommonRange :return: """


        result = defaultdict(int)
        for i, c_i in enumerate(candidates):
            for j in range(i, len(candidates)):
                lcs = util.longest_common_substring(c_i.hex_value, candidates[j].hex_value)
                if lcs:
                    result[lcs] += 1

        return result