def solve():
    input_capacities = [
        ('S', 'A', 10),
        ('S', 'B', 5),
        ('A', 'B', 15),
        ('A', 'T', 10),
        ('B', 'T', 10)
    ]
    print("Input Capacities:")
    print(input_capacities)

    adj = {}
    for u, v, cap in input_capacities:
        if u not in adj:
            adj[u] = {}
        if v not in adj:
            adj[v] = {}
        
        adj[u][v] = cap
        if u not in adj[v]:
            adj[v][u] = 0

    source = 'S'
    sink = 'T'

    def dfs(u, flow, visited):
        if u == sink:
            return flow
        
        visited.add(u)
        
        neighbors = adj.get(u, {})
        for v in neighbors:
            cap = neighbors[v]
            if v not in visited and cap > 0:
                pushed = dfs(v, min(flow, cap), visited)
                if pushed > 0:
                    adj[u][v] -= pushed
                    adj[v][u] += pushed
                    return pushed
        return 0

    max_flow = 0
    while True:
        visited = set()
        pushed = dfs(source, float('inf'), visited)
        if pushed == 0:
            break
        max_flow += pushed

    print(f"Maximum Flow = {max_flow}")

if __name__ == "__main__":
    solve()