<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def guess_saves(zone, data):
 """Return types with guessed DST saves"""

    saves = {}
    details = {}
    for (time0, type0), (time1, type1) in pairs(data.times):
        is_dst0 = bool(data.types[type0][1])
        is_dst1 = bool(data.types[type1][1])
        if (is_dst0, is_dst1) == (False, True):
            shift = data.types[type1][0] - data.types[type0][0]
            if shift:
                saves.setdefault(type1, set()).add(shift)
                details[type1, shift] = (time0, time1)
        elif (is_dst0, is_dst1) == (True, False):
            shift = data.types[type0][0] - data.types[type1][0]
            if shift:
                saves.setdefault(type0, set()).add(shift)
                details[type0, shift] = (time0, time1)

    types = data.types[:]
    for i, (offset, save, abbr) in enumerate(data.types):
        if save:
            guesses = saves.get(i, set())
            if not guesses:
                print("No save value guesses for type %d (%r) in zone %s." %
                      (i, types[i][-1], zone))
                guess = timedelta(hours=1)
            elif len(guesses) == 1:
                guess = guesses.pop()
            else:
                print("Multiple save value guesses for type %d in zone %s." %
                      (i, zone))
                for g in guesses:
                    d = details[i, g]
                    print("   ", g, *d)
                guess = min(g for g in guesses if g)
            types[i] = (offset, guess, abbr)
    return types