Write an algorithm BIPAR to determine if a given graph is bipartite. At each call to BIPAR a new edge (i,j) is given in no particular order. BIPAR must accept or reject (i, j) depending on whether the graph so far constructed (including (i, j)) is bipartite or not. Assume n = |V| is initialized before the first call to BIPAR. BIPAR must test m edges in time O(m+n) plus the time required to execute a sequence of no more than 2m FIND's and max(m, n-2) UNION's.