from collections import OrderedDict

def part1(crabs):
    moves = OrderedDict()
    for pos in range(min(crabs), max(crabs) + 1):
        # calculate total fuel required to move to pos:
        for crab in crabs:
            fuel_cost = abs(pos - crab)
            moves[pos] = moves.get(pos, 0) + fuel_cost

    min_move = min(moves, key=moves.get)
    print(f"Part 1, min move {min_move}, cost {moves[min_move]}")

def part2(crabs):
    moves = OrderedDict()
    for pos in range(min(crabs), max(crabs) + 1):
        # calculate total fuel required to move to pos:
        for crab in crabs:
            dx = abs(pos - crab)
            # S = (n+1)(u0 + un)/2
            fuel_cost = dx * (dx+1)//2
            moves[pos] = moves.get(pos, 0) + fuel_cost

    min_move = min(moves, key=moves.get)
    print(f"Part 1, min move {min_move}, cost {moves[min_move]}")


if __name__ == "__main__":
    with open("input.txt") as infile:
        crabs = [int(x) for x in infile.readline().split(",")]
    part1(crabs)
    part2(crabs)