"""simple docstring"""


def      __UpperCAmelCase       (      lowercase ,lowercase		):







  """simple docstring"""
  return int((input_a, input_a).count(1		) != 0		)






def      __UpperCAmelCase       (      ):







  """simple docstring"""
  assert or_gate(0 ,0		) == 0
  assert or_gate(0 ,1		) == 1
  assert or_gate(1 ,0		) == 1
  assert or_gate(1 ,1		) == 1


if __name__ == "__main__":
    print(or_gate(0, 1))
    print(or_gate(1, 0))
    print(or_gate(0, 0))
    print(or_gate(1, 1))

"""simple docstring"""


import heapq






def      __UpperCAmelCase       (      lowercase		):







  """simple docstring"""
  _UpperCAmelCase    			=   []

  # for each node and his adjacency list add them and the rank of the node to queue
  # using heapq module the queue will be filled like a Priority Queue
  # heapq works with a min priority queue, so I used -1*len(v) to build it
  for key, value in graph.items():
    # O(log(n))
    heapq.heappush(lowercase ,[-1 * len(lowercase		), (key, value)]		)

  # chosen_vertices = set of chosen vertices
  _UpperCAmelCase    			=   set()

  # while queue isn't empty and there are still edges
  #   (queue[0][0] is the rank of the node with max rank)
  while queue and queue[0][0] != 0:
    # extract vertex with max rank from queue and add it to chosen_vertices
    _UpperCAmelCase    			=   heapq.heappop(lowercase		)[1][0]
    chosen_vertices.add(lowercase		)

    # Remove all arcs adjacent to argmax
    for elem in queue:
      # if v haven't adjacent node, skip
      if elem[0] == 0:
        continue
      # if argmax is reachable from elem
      # remove argmax from elem's adjacent list and update his rank
      if argmax in elem[1][1]:
        _UpperCAmelCase    			=   elem[1][1].index(lowercase		)
        del elem[1][1][index]
        elem[0] += 1
        # re-order the queue
    heapq.heapify(lowercase		)
  return chosen_vertices


if __name__ == "__main__":
    import doctest

    doctest.testmod()

    UpperCAmelCase__			=    {0: [1, 3], 1: [0, 3], 2: [0, 3, 4], 3: [0, 1, 2], 4: [2, 3]}
    print(F'''Minimum vertex cover:\n{greedy_min_vertex_cover(graph)}''')
