diff --git a/Sources/SwiftGraph/Arbok/Data Structures/ActiveForest.swift b/Sources/SwiftGraph/Arbok/Data Structures/ActiveForest.swift new file mode 100644 index 0000000..5ca5a55 --- /dev/null +++ b/Sources/SwiftGraph/Arbok/Data Structures/ActiveForest.swift @@ -0,0 +1,223 @@ +import Foundation + +internal final class ActiveForest where T: AdditiveArithmetic & Comparable { + internal let co: CompressedTree + internal var activeEdge: [FibonacciHeapNode?] // for each node the active outgoing edge + internal var activeSets: [LinkedList>] // for each node on path the active set heap represented by the root list + + init(co: CompressedTree) { + self.co = co + self.activeEdge = .init(repeating: nil, count: co.size()) + self.activeSets = [] + + // activeSets.reserveCapacity(co.size()) + + for _ in 0..()) + } + } + + // MARK: - ACTIVE FORESTS METHODS + + /// - Complexity: O(activeSets.count) + internal func mergeHeaps(_ lhs: Int, _ rhs: Int) { + + let rhsList = self.activeSets[rhs] + + self.activeSets[lhs].append(rhsList) + rhsList.removeAll() + } + + + /// - Complexity: O(α(n) · `self.activeEdge[edge].count` + Cost(`removeFromCurrentList(self.activeEdge[edge])` , + /// where α(n) is the inverse Ackermann function. Approximately linear + internal func deleteActiveEdge(_ edge: Int) { + guard let vertex = self.activeEdge[edge] else { fatalError() } + + vertex.children.forEach { child in + self.moveHome(child) + } + + vertex.children.removeAll() + + self.removeFromCurrentList(vertex) + + self.activeEdge[edge] = nil + + // delete v + } + + + internal func getMin(_ index: Int) -> Int { + var orderRep = [FibonacciHeapNode?].init() + + activeSets[index].forEach { v in + var vertex = v + + vertex.isLoser = false + + // vertex.children.count changes during the while loop + let _ = vertex.children.count() // Refresh vertex.children.underestimatedCount + + while orderRep.count > vertex.children.underestimatedCount && orderRep[vertex.children.underestimatedCount] != nil { + + guard var other = orderRep[vertex.children.underestimatedCount] else { fatalError() } + + orderRep[vertex.children.underestimatedCount] = nil + + if self.currentWeight(of: other) < self.currentWeight(of: vertex) { + swap(&vertex, &other) + } + + #if DEBUG + assert(other.parent == nil) + #endif + + + other.list_it = vertex.children.append(other) + other.parent = vertex + + #if DEBUG + assert(vertex !== other) + assert(other.list_it?.getOwner() === vertex.children) + #endif + } + + orderRep.append(contentsOf: [FibonacciHeapNode?].init( + repeating: nil, + count: max(0, vertex.children.underestimatedCount+1 - orderRep.count) + )) + + orderRep[vertex.children.underestimatedCount] = vertex + } + + activeSets[index].removeAll() + + orderRep.forEach { vertex in + if let vertex = vertex { + vertex.list_it = activeSets[index].append(vertex) + } + } + + #if DEBUG + assert(!activeSets[index].isEmpty) + #endif + + let vMin = activeSets[index].min { lhs, rhs in + return self.currentWeight(of: lhs) < self.currentWeight(of: rhs) + } + + #if DEBUG + assert(vMin != nil) + assert(co.find(vMin!.to) == index, "\(vMin!.to) expected in home heap \(index), found in \(co.find(vMin!.to)) instead") + assert(activeEdge[co.find(vMin!.from)] != nil) + assert(vMin! === activeEdge[co.find(vMin!.from)], "edge must be active!") // FIXME: It happened that activeEdge[co.find(vMin!.from)] == nil + #endif + + return vMin!.id + } + + + internal func makeActive(from: Int, to: Int, weight: T, id: Int) { + let fromRep = co.find(from) + + if activeEdge[fromRep] == nil { + activeEdge[fromRep] = FibonacciHeapNode(from: from, to: to, weight: weight, id: id) + moveHome(activeEdge[fromRep]!) + return + } + + guard let vertex = activeEdge[fromRep] else { fatalError() } + + #if DEBUG + assert( + weight + self.co.findValue(to) < self.currentWeight(of: vertex) || + co.find(to) != co.find(vertex.to) + ) + #endif + + self.removeFromCurrentList(vertex) + vertex.to = to + vertex.weight = weight + vertex.id = id + vertex.from = from + + self.moveHome(vertex) + } + + + // MARK: - FIBONACCI HEAP METHODS + + /// - Complexity: O(α(n)), where α(n) is the inverse Ackermann function + internal func homeHeap(_ vertex: FibonacciHeapNode) -> LinkedList> { + return activeSets[co.find(vertex.to)] + } + + /// - Complexity: O(α(n)), where α(n) is the inverse Ackermann function + internal func moveHome(_ vertex: FibonacciHeapNode) { + let home = self.homeHeap(vertex) + + + #if DEBUG + assert(!home.find(where: { node in + return node === vertex + })) + #endif + + vertex.list_it = home.append(vertex) + vertex.parent = nil + } + + + /// - Complexity: O(α(n))·Cost(`loseChild(vertex.parent)`), where α(n) is the inverse Ackermann function + internal func loseChild(_ vertex: FibonacciHeapNode) { + guard let parent = vertex.parent else { return } + + if vertex.isLoser { + self.loseChild(parent) + + #if DEBUG + assert(vertex.list_it?.getOwner() === vertex.parent?.children) + #endif + + vertex.list_it?.removeFromOwnerList() + self.moveHome(vertex) + } + + vertex.isLoser.toggle() + } + + + /// - Complexity: O( α(n) + n + m ) where `n = vertex.parent?.children.count` and `m = self.homeHeap(vertex).count`, and + /// α(n) is the inverse Ackermann function + internal func removeFromCurrentList(_ vertex: FibonacciHeapNode) { + let list = vertex.parent != nil ? vertex.parent?.children : self.homeHeap(vertex) + + #if DEBUG + // Assert that `list` contains the parameter `vertex` + assert(list != nil) + assert(vertex.list_it != nil) + assert(vertex.list_it?.getNode() != nil) + + assert(list?.find { node in + return node === vertex + } ?? false) + #endif + + list?.removeAll { edge in + return edge.id == vertex.id + } + + if let parent = vertex.parent { + self.loseChild(parent) + vertex.parent = nil + } + } + + /// - Complexity: O(α(n)), where α(n) is the inverse Ackermann function + internal func currentWeight(of vertex: FibonacciHeapNode) -> T { + let retval = vertex.weight + self.co.findValue(vertex.to) + + return retval + } +} diff --git a/Sources/SwiftGraph/Arbok/Data Structures/CompressedTree.swift b/Sources/SwiftGraph/Arbok/Data Structures/CompressedTree.swift new file mode 100644 index 0000000..11c2686 --- /dev/null +++ b/Sources/SwiftGraph/Arbok/Data Structures/CompressedTree.swift @@ -0,0 +1,108 @@ +import Foundation + +internal final class CompressedTree where T: AdditiveArithmetic { + internal var parent: [Int] + internal var value: [T] + + init(initialSize: Int) { + self.parent = [Int].init(repeating: -1, count: initialSize) + self.value = [T].init(repeating: T.zero, count: initialSize) + } + + + /// Finds the representative (alias, root) of the set that contains the element `element`. + /// + /// - Parameter element: The index of the element to find the representative for. + /// - Returns: The index of the element that represents the set that contains `element`. + /// + /// - Complexity: O(α(n)), where α(n) is the inverse Ackermann function + func find(_ element: Int) -> Int { + assert(element < parent.count) + + if parent[element] < 0 { + return element + } else { + let root = find(parent[element]) + + if parent[element] != root { + value[element] += value[parent[element]] + } + + parent[element] = root + + return root + } + } + + /// Increments the value of `element` by `T`. + /// + /// - Parameter element: The index of the element to increment + /// - Parameter increment: The delta to increment the value of element of. + func addValue(_ element: Int, increment: T) { + value[find(element)] += increment + } + + + /// Determines the sum of the values associated with all the elements in the path from `root` of the set that contains `element` and `element` itself. + /// + /// - Parameter element: The index of the element to find the path compression value for. + /// - Returns: Sum of the values from `find(element)` to `element`. + /// + /// - Complexity: O(α(n)), where α(n) is the inverse Ackermann function + func findValue(_ element: Int) -> T { + let root = self.find(element) + + return value[element] + (element != root ? value[root] : T.zero) + } + + + /// Performs the union by rank with path compression of the sets that contain `lhs` and `rhs` respectively, if they're not already in the same set. + /// + /// - Parameter lhs: The index of an element in the first set to join. + /// - Parameter rhs: The index of an element in the second set to join. + /// + /// - Returns `false` if `lhs` and `rhs` already belonged to the same set and the union didn't produce any effect, `true` otherwise. + /// - Complexity: O(α(n)), where α(n) is the inverse Ackermann function + @discardableResult func join(_ lhs: Int, _ rhs: Int) -> Bool { + var lhsRoot = self.find(lhs) + var rhsRoot = self.find(rhs) + + if lhsRoot == rhsRoot { + return false + } else { + if parent[lhsRoot] > parent[rhsRoot] { + swap(&lhsRoot, &rhsRoot) + } + + parent[lhsRoot] += parent[rhsRoot] + parent[rhsRoot] = lhsRoot + value[rhsRoot] -= value[lhsRoot] + + return true + } + } + + + /// Tests wheter or not `lhs` and `rhs` belong to the same set. + /// + /// - Parameter lhs: The index of the first element. + /// - Parameter rhs: The index of the second element. + /// + /// - Returns `true` if `lhs` and `rhs` are part of the same set, `false` otherwise. + func same(_ lhs: Int, _ rhs: Int) -> Bool { + return find(lhs) == find(rhs) + } + + + /// Computes the size of the subset that contains `element`. + /// + /// - Parameter element: The index of an element contained in the set to find the size for. + func size(_ element: Int) -> Int { + return -parent[find(element)] + } + + /// Computes the size of this Disjoint Set Union, that is, the number of subsets. + func size() -> Int { + return self.parent.count + } +} diff --git a/Sources/SwiftGraph/Arbok/Data Structures/FibonacciHeapNode.swift b/Sources/SwiftGraph/Arbok/Data Structures/FibonacciHeapNode.swift new file mode 100644 index 0000000..a0244f9 --- /dev/null +++ b/Sources/SwiftGraph/Arbok/Data Structures/FibonacciHeapNode.swift @@ -0,0 +1,36 @@ +import Foundation + +internal final class Weak where T: AnyObject { + internal weak var wrappedValue: T? + + init(wrappedValue: T? = nil) { + self.wrappedValue = wrappedValue + } +} + +internal final class FibonacciHeapNode where T: AdditiveArithmetic { + internal var from: Int + internal var to: Int + internal var weight: T + internal var id: Int + + internal var parent: FibonacciHeapNode? = nil + internal var children: LinkedList = LinkedList() + internal var isLoser: Bool = false + internal var list_it: LinkedList.LinkedListIndex? + internal var superlists: [Weak>] = [] + + init(from: Int, to: Int, weight: T, id: Int) { + self.from = from + self.to = to + self.weight = weight + self.id = id + } +} + + +extension FibonacciHeapNode: CustomStringConvertible { + var description: String { + return "[\(from) ---\(weight)---> \(to)]" + } +} diff --git a/Sources/SwiftGraph/Arbok/Data Structures/LinkedList.swift b/Sources/SwiftGraph/Arbok/Data Structures/LinkedList.swift new file mode 100644 index 0000000..9b960eb --- /dev/null +++ b/Sources/SwiftGraph/Arbok/Data Structures/LinkedList.swift @@ -0,0 +1,764 @@ +/// Adjusted interface fot LinkedList from https://github.com/kodecocodes/swift-algorithm-club to +/// achieve O(1) insertion and removal (except at `index > 0` and `index < list.count() - 1` ), and always O(1) +/// when the node is passed directly as an argument. +import os + +internal final class LinkedList { + + /// Linked List's Node Class Declaration + public class LinkedListNode { + + var value: T + var next: LinkedListNode? + weak var previous: LinkedListNode? + + public init(value: T) { + self.value = value + } + } + + + /// Typealiasing the node class to increase readability of code + public typealias Node = LinkedListNode + + /// The head of the Linked List + private(set) var head: Node? + private(set) weak var tail: Node? + internal var underestimatedCount: Int = 0 + + /// Computed property to check if the linked list is empty + public var isEmpty: Bool { + return head == nil + } + + /// Default initializer + public init() {} + + + /// Subscript function to return the node at a specific index + /// + /// - Parameter index: Integer value of the requested value's index + /// - Complexity: ϴ( min(index, count) ), O(count) + public subscript(index: Int) -> LinkedListNode { + return self.node(at: index) + } + + /// Function to return the node at a specific index. Crashes if index is out of bounds (0...self.count) + /// + /// - Parameter index: Integer value of the node's index to be returned + /// - Returns: LinkedListNode + /// - Complexity: ϴ( min(index, count) ), O(count) + public func node(at index: Int) -> Node { + assert(head != nil, "List is empty") + assert(index >= 0, "index must be greater or equal to 0") + + if index == 0 { + return head! + } else { + var node = head!.next + for _ in 1.. LinkedListIndex { + let newNode = Node(value: value) + + return append(newNode) + } + + /// Append a copy of a LinkedListNode to the end of the list. + /// + /// - Parameter node: The node containing the value to be appended + /// - Returns: An iterator to the added node, whose tag is the number of elements after the insertion, minus one. + /// - Complexity: O(1) + @discardableResult public func append(_ node: Node) -> LinkedListIndex { + let newNode = node + + if let tail = self.tail { + newNode.previous = tail + self.tail?.next = newNode + self.tail = newNode + } else { + head = newNode + self.tail = newNode + } + + self.underestimatedCount += 1 + + return LinkedListIndex( + owner: self, + node: newNode, + tag: self.underestimatedCount - 1 + ) + } + + + /// Append a copy of a LinkedList to the end of the list. + /// + /// - Note: This implementation performs a shallow copy, the referenced objects in the new list are the same as those in `list` parameter. + /// + /// - Parameter list: The list to be copied and appended. + /// - Returns: An iterator to the head of the appended list, whose tag is the number of elements of this list before the insertion, minus one. + /// + /// - Complexity: O(count + list.count) + @discardableResult public func append( + _ list: LinkedList, + didCopy: ( + (_ from: LinkedList, + _ to: LinkedList, + _ of: T + ) -> Void)? = nil + ) -> LinkedListIndex { + let initialCount = self.underestimatedCount + + if list === self { + + let clonedList = LinkedList() + self.forEach { value in + clonedList.append(value) + } + + return self.append(clonedList) + } else { + list.forEach { valueToClone in + self.append(valueToClone) + didCopy?(list, self, valueToClone) + } + + return LinkedListIndex( + owner: self, + node: list.head, + tag: initialCount - 1 + ) + } + } + + + + + /// Insert a value at a specific index. Crashes if index is out of bounds (0...self.count) + /// + /// - Parameters: + /// - value: The data value to be inserted + /// - index: Integer value of the index to be insterted at + /// - Returns: An iterator to the head of the appended list, whose tag is the 0-based position of the head of the new list after the insertion. + /// - Complexity: O(count) + @discardableResult public func insert(_ value: T, at index: Int) -> LinkedListIndex { + let newNode = Node(value: value) + return insert(newNode, at: index) + } + + /// Insert a copy of a node at a specific index. Crashes if index is out of bounds (0...self.count) + /// + /// - Parameters: + /// - node: The node containing the value to be inserted + /// - index: Integer value of the index to be inserted at + /// - Returns: An iterator to the added node, whose tag is the parameter `index`. + /// - Complexity: O(count) + @discardableResult public func insert(_ newNode: Node, at index: Int) -> LinkedListIndex { + assert(index >= 0, "in function \(#function), parameter `index` is expected to satisfy (index >= 0)") + assert(index <= self.count, "in function \(#function), parameter `index` is expected to satisfy (index <= \(self.count)") + + if index == 0 { + newNode.next = head + head?.previous = newNode + head = newNode + } else { + if index == self.count { + newNode.previous = self.tail + self.tail?.next = newNode + self.tail = newNode + } else { + let prev = node(at: index - 1) + let next = prev.next + newNode.previous = prev + newNode.next = next + next?.previous = newNode + prev.next = newNode + } + } + + self.underestimatedCount += 1 + + return LinkedListIndex(owner: self, node: newNode, tag: index) + } + + /// Insert a copy of a LinkedList at a specific index. Crashes if index is out of bounds (0...self.count) + /// + /// - Parameters: + /// - list: The LinkedList to be copied and inserted + /// - index: Integer value of the index to be inserted at + /// - Returns: An iterator to the head of the appended list, whose tag is the 0-based position of the head of the new list after the insertion. + /// - Complexity: O(count + list.count) + public func insert(_ list: LinkedList, at index: Int) -> LinkedListIndex { + guard !list.isEmpty else { return LinkedListIndex(owner: self, node: nil, tag: -1)} + + if index == 0 { + list.tail?.next = head + head = list.head + } else { + let prev = index == self.count ? self.tail : node(at: index - 1) + let next = prev?.next + + prev?.next = list.head + list.head?.previous = prev + + list.tail?.next = next + next?.previous = list.tail + } + + self.underestimatedCount += list.underestimatedCount + + return LinkedListIndex(owner: self, node: list.head, tag: index) + } + + + // FIXME: As for C++ docs: All iterators, references and pointers related to this container are invalidated, except the end iterators. + + /// Function to remove all nodes/value from the list + /// + /// - Complexity: O(1) + public func removeAll() { + guard self.head != nil else { return } + + /* + var current = self.head + var previous = self.head + + while current != nil { + previous = current + + current = current?.next + previous?.next = nil + previous?.previous = nil + } + + #if DEBUG + assert(self.count() == 1, "count: \(self.count()) after removing all the elements in the list. 1 expected.") + #endif + */ + head = nil + tail = nil + + self.underestimatedCount = 0 + } + + + public func removeAll(where predicate: (T) -> Bool, safe: Bool = false) { + var nodesToRemove = [LinkedList.LinkedListNode].init() + + self.forEachNode { node in + if predicate(node.value) { + nodesToRemove.append(node) + } + } + + for i in 0.. T? { + if safe { + if !self.find(node) { + return nil + } + } + + if node === head { + if head === tail { + self.head = self.head?.next + self.tail = self.head + } else { + self.head = self.head?.next + } + } else { + if node === tail { + self.tail = node.previous + self.tail?.next = nil + } else { + let prev = node.previous + let next = node.next + + if let prev = prev { + prev.next = next + } else { + head = next + } + next?.previous = prev + } + } + + self.underestimatedCount -= 1 + + node.previous = nil + node.next = nil + + + return node.value + } + + + /// Function to test whether or not some node is contained in this list. Two nodes in the list are considered to be the same if and only if they point to the same object in memory. + /// + /// - Parameter node: The node to find in this list. + /// - Returns: `true` if `node` is included in this list, `false` otherwise. + /// + /// - Complexity: O(self.count) + internal func find(_ node: Node) -> Bool { + var current = self.head + + while current != nil { + if node === current { + return true + } + + current = current?.next + } + + return false + } + + + /// Tests whether or not an element satisfying the given predicate exists in the linkedlist. + /// + /// - Parameter where: A function that takes as input a value and returns a boolean + /// - Returns: `true` if at least one element satisfying the predicate exists in the list, `false` otherwise. + /// + /// - Complexity: O(self.count) + internal func find(where test: @escaping (T) -> Bool ) -> Bool { + var current = self.head + + while current != nil { + guard let currentListItem = current else { return false } + if test(currentListItem.value) { + return true + } + + current = currentListItem.next + } + + return false + } + + /// Finds the first element in the list satisfying the given predicate in the linkedlist, if it exists. + /// + /// - Parameter where: A function that takes as input a value and returns a boolean + /// - Returns: A `LinkedListIndex` to the found element, whose tag is the current position of the item in the list, + /// if at least one element satisfying the `where` predicate exists. `nil` otherwise. + /// + /// - Complexity: O(self.count) + internal func findFirst(where test: @escaping (T) -> Bool ) -> LinkedListIndex? { + var current = self.head + var count: Int = 0 + + while current != nil { + guard let currentListItem = current else { return nil } + count += 1 + + if test(currentListItem.value) { + return LinkedListIndex( + owner: self, + node: current, + tag: count + ) + } + + current = currentListItem.next + } + + return nil + } + + + /// Function to remove the last node/value in the list. Crashes if the list is empty + /// + /// - Returns: The data value contained in the deleted node. + /// - Complexity: O(1) + @discardableResult public func removeLast() -> T { + assert(!isEmpty, "In function \(#function), attempted to remove last element from an empty list. Aborting.") + guard let tail = self.tail else { + #if DEBUG + fatalError("In function \(#function), attempted to remove last element from an empty list. Aborting.") + #endif + } + + let removedValue = remove(node: tail) + + assert(removedValue != nil) + return removedValue! + } + + /// Function to remove a node/value at a specific index. Crashes if index is out of bounds (0...self.count) + /// + /// - Parameter index: Integer value of the index of the node to be removed + /// - Returns: The data value contained in the deleted node + /// - Complexity: O(count) + @discardableResult public func remove(at index: Int) -> T { + let node = self.node(at: index) + let removedValue = remove(node: node) + + assert(removedValue != nil) + return removedValue! + } + + /// Counts the actual number of elements in the list. It refreshes underestimated count to the correct value. + /// + /// - Complexity: O(count) + public func count() -> Int { + var count = 0 + var current = self.head + + while current != nil { + count += 1 + current = current?.next + } + + self.underestimatedCount = count + + return count + } +} + +//: End of the base class declarations & beginning of extensions' declarations: + +// MARK: - Extension to enable the standard conversion of a list to String +extension LinkedList: CustomStringConvertible { + public var description: String { + var s = "[" + var node = head + while let nd = node { + s += "\(nd.value)" + node = nd.next + if node != nil { s += ", " } + } + return s + "]" + } +} + +// MARK: - Extension to add a 'reverse' function to the list +extension LinkedList { + public func reverse() { + var node = head + while let currentNode = node { + node = currentNode.next + swap(¤tNode.next, ¤tNode.previous) + head = currentNode + } + } +} + +// MARK: - An extension with an implementation of 'map' & 'filter' functions +extension LinkedList { + public func map(transform: (T) -> U) -> LinkedList { + let result = LinkedList() + var node = head + while let nd = node { + result.append(transform(nd.value)) + node = nd.next + } + return result + } + + public func filter(predicate: (T) -> Bool) -> LinkedList { + let result = LinkedList() + var node = head + while let nd = node { + if predicate(nd.value) { + result.append(nd.value) + } + node = nd.next + } + return result + } +} + +// MARK: - Extension to enable initialization from an Array +extension LinkedList { + convenience init(array: Array) { + self.init() + + array.forEach { append($0) } + } +} + +// MARK: - Extension to enable initialization from an Array Literal +extension LinkedList: ExpressibleByArrayLiteral { + public convenience init(arrayLiteral elements: T...) { + self.init() + + elements.forEach { append($0) } + } +} + +// MARK: - Collection +extension LinkedList: Collection { + + public typealias Index = LinkedListIndex + + /// The position of the first element in a nonempty collection. + /// + /// If the collection is empty, `startIndex` is equal to `endIndex`. + /// - Complexity: O(1) + public var startIndex: Index { + get { + return LinkedListIndex(owner: self, node: head, tag: 0) + } + } + + /// The collection's "past the end" position---that is, the position one + /// greater than the last valid subscript argument. + /// - Complexity: O(1), where n is the number of elements in the list. This can be improved by keeping a reference + /// to the last node in the collection. + public var endIndex: Index { + get { + return LinkedListIndex(node: self.tail, tag: self.underestimatedCount) + } + } + + public subscript(position: Index) -> T { + get { + return position.node!.value + } + } + + public func index(after idx: Index) -> Index { + return LinkedListIndex(owner: self, node: idx.node?.next, tag: idx.tag + 1) + } + + + /// Converts the list to an array of T. + /// + /// - Complexity: O(count) + internal func toArray() -> [T] { + var current = self.head + var array = [T].init() + + while current != nil { + if let value = current?.value { + array.append(value) + } + + current = current?.next + } + + return array + } + + /// Makes an iterator to the list, pointing to the head element of the list + internal func iterator() -> LinkedListIndex { + return LinkedListIndex( + owner: self, + node: self.head, + tag: 0 + ) + } + + internal func endListIndex() -> LinkedListIndex { + return LinkedListIndex( + owner: self, + node: self.tail, + tag: self.underestimatedCount - 1 + ) + } + + + // MARK: - Collection Index + /// Custom index type that contains a reference to the node at index 'tag' + public struct LinkedListIndex: Comparable { + fileprivate weak var owner: LinkedList? + fileprivate var node: LinkedList.LinkedListNode? + fileprivate let tag: Int + + internal init(owner: LinkedList? = nil, node: LinkedList.LinkedListNode? = nil, tag: Int) { + self.owner = owner + self.node = node + self.tag = tag + } + + public static func==(lhs: LinkedListIndex, rhs: LinkedListIndex) -> Bool { + return (lhs.tag == rhs.tag) + } + + public static func< (lhs: LinkedListIndex, rhs: LinkedListIndex) -> Bool { + return (lhs.tag < rhs.tag) + } + + internal func getNode() -> LinkedList.LinkedListNode? { + return self.node + } + + internal func getValue() -> T? { + return self.node?.value + } + + internal mutating func updateOwner(_ to: LinkedList) { + self.owner = to + } + + internal func getTag() -> Int { + return self.tag + } + + internal func removeFromOwnerList() { + + guard let owner = self.owner else { + fatalError() + } + + guard let node = self.node else { + fatalError() + } + + #if DEBUG + owner.remove(node: node, safe: true) + #else + owner.remove(node: node) + #endif + } + + internal func next() -> LinkedListIndex { + return LinkedListIndex( + owner: self.owner, + node: self.node?.next, + tag: self.tag + 1 + ) + } + + internal func previous() -> LinkedListIndex { + return LinkedListIndex( + owner: self.owner, + node: self.node?.previous, + tag: self.tag - 1 + ) + } + + internal func getOwner() -> LinkedList? { + return self.owner + } + + mutating internal func movedToList(_ theList: LinkedList) { + self.owner = theList + } + + /// - Returns: `true` if this index has the same as the right-hand side index, + /// and the referenced nodes by the two index are the same objects in memory. + /// + /// - Complexity: O(1) + internal func isSame(as other: LinkedListIndex?) -> Bool { + guard let other = other else { return false } + return self.node === other.node && self.owner === other.owner + } + } +} + + + +extension LinkedList { + /// Calls the given closure on each element in the sequence in the same order + /// as a `for`-`in` loop. + /// + /// The two loops in the following example produce the same output: + /// + /// let numberWords = ["one", "two", "three"] + /// for word in numberWords { + /// print(word) + /// } + /// // Prints "one" + /// // Prints "two" + /// // Prints "three" + /// + /// numberWords.forEach { word in + /// print(word) + /// } + /// // Same as above + /// + /// Using the `forEach` method is distinct from a `for`-`in` loop in two + /// important ways: + /// + /// 1. You cannot use a `break` or `continue` statement to exit the current + /// call of the `body` closure or skip subsequent calls. + /// 2. Using the `return` statement in the `body` closure will exit only from + /// the current call to `body`, not from any outer scope, and won't skip + /// subsequent calls. + /// + /// - Parameter body: A closure that takes an element of the sequence as a + /// parameter. + @inlinable public func forEach(_ body: (T) throws -> Void) rethrows { + var current = head + + while let currentNode = current { + try body(currentNode.value) + + current = current?.next + } + } + + + + /// Calls the given closure on each element in the sequence in the same order + /// as a `for`-`in` loop. + /// + /// The two loops in the following example produce the same output: + /// + /// let numberWords = ["one", "two", "three"] + /// for word in numberWords { + /// print(word) + /// } + /// // Prints "one" + /// // Prints "two" + /// // Prints "three" + /// + /// numberWords.forEach { word in + /// print(word) + /// } + /// // Same as above + /// + /// Using the `forEach` method is distinct from a `for`-`in` loop in two + /// important ways: + /// + /// 1. You cannot use a `break` or `continue` statement to exit the current + /// call of the `body` closure or skip subsequent calls. + /// 2. Using the `return` statement in the `body` closure will exit only from + /// the current call to `body`, not from any outer scope, and won't skip + /// subsequent calls. + /// + /// - Parameter body: A closure that takes an element of the sequence as a + /// parameter. + @inlinable public func forEachNode(_ body: (LinkedListNode) throws -> Void) rethrows { + var current = head + + while current != nil { + if let current = current { + try body(current) + } + + current = current?.next + } + } +} + +extension LinkedList.LinkedListNode where T: CustomStringConvertible { + var description: String { + return "current: \(self.value), previous: \(self.previous != nil ? String(describing: self.previous!.value) : "none"), next: \(self.next != nil ? String(describing: self.next!.value) : "none")" + } +} diff --git a/Sources/SwiftGraph/Arbok/Gabow/Gabow.swift b/Sources/SwiftGraph/Arbok/Gabow/Gabow.swift new file mode 100644 index 0000000..4730237 --- /dev/null +++ b/Sources/SwiftGraph/Arbok/Gabow/Gabow.swift @@ -0,0 +1,372 @@ +import Foundation + +internal final class Gabow where T: AdditiveArithmetic & Comparable & Numeric { + private let verticesCount: Int + private let co: CompressedTree + private var edges: [Gabow.Edge] + private var incomingEdges: [[Int]] + private var growthPath: [Int] + private var pathEdges: [Int] + private var exitList: [[Int]] + private var passiveSet: [[Int]] + private let activeForest: ActiveForest + + + // forest over chosen edges as outlined in reconstruction paper + private var chosen: [Int] + private var forest: [Int] // forest[i]: parent in reconstruction forest of edge edges[chosen[i]] (as ids into chosen) + + private var contractions: Int = 0 + + internal init(verticesCount: Int) { + self.verticesCount = verticesCount + + self.incomingEdges = [[Int]].init() + self.exitList = [[Int]].init() + self.passiveSet = [[Int]].init() + + for _ in 0..(initialSize: verticesCount) + + self.co = compressedTree + self.activeForest = ActiveForest(co: compressedTree) + + self.growthPath = [Int].init() + self.pathEdges = [Int].init() + + self.chosen = [Int].init() + self.forest = [Int].init() + self.edges = [Gabow.Edge].init() + } + + + @inlinable internal func currentWeight(for edge: Edge) -> T { + return edge.weight + co.findValue(edge.to) + } + + // MARK: - INTERNAL METHODS: + internal func createEdge(from: Int, to: Int, weight: T) { + + assert(from >= 0 && from < self.verticesCount) + assert(to >= 0 && to < self.verticesCount) + + if from != to { + self.incomingEdges[to].append(edges.count) + } + + // we save even self loops to keep edge ids consistent with the outside + edges.append(Gabow.Edge(from: from, to: to, weight: weight)) + } + + + internal func createEdge(_ from: Int, _ to: Int, _ weight: T) { + self.createEdge(from: from, to: to, weight: weight) + } + + + internal func run(root: Int) -> T { + var answer = T.zero + + var seen = [Int].init(repeating: -1, count: self.verticesCount) + + for vertex in 0.. \(edge.to)") + answer += self.currentWeight(for: edge) + + let forestID = self.chosen.count + self.chosen.append(edgeID) + self.forest.append(forestID) // new edge initially has no parent + self.pathEdges.append(forestID) + + u = co.find(edge.from) + } + + self.contractCompletePath(root: root) + } + } + return answer + } + + + internal func getEdges() -> [Gabow.Edge] { + return self.edges + } + + // MARK: - PRIVATE METHODS + private func contractPathPrefix(_ root: Int) -> Int { + self.contractions += 1 + + #if DEBUG + assert(co.find(root) == root); + assert(growthPath.count == pathEdges.count); + #endif + + var prefix: [Int] = [Int].init() + + repeat { + guard let vi = self.growthPath.last else { + fatalError("In function \(#function), `growthPath` is unexpectedly empty") + } + + guard let lastPathEdge = self.pathEdges.last else { + fatalError("In function \(#function), `lastPathEdge` is unexpectedly empty") + } + + #if DEBUG + // all nodes on growth path are representatives + assert(co.find(vi) == vi) + + // synced with growthPath edges + assert(co.find(edges[chosen[lastPathEdge]].to) == vi) + #endif + + prefix.append(vi) + self.co.addValue( + vi, + increment: self.currentWeight( + for: edges[ self.chosen[lastPathEdge] ] + )*(-1) + ) + + // next iteration in run will find an incoming edge into the here contracted prefix; this edge will be the next in chosen + self.forest[lastPathEdge] = self.chosen.count + + self.growthPath.removeLast() + self.pathEdges.removeLast() + + } while prefix.last != root + + // delete outgoing edges + prefix.forEach { prefixVertex in + if !self.exitList[prefixVertex].isEmpty { + self.exitList[prefixVertex].removeAll() // FIXME: removeAll has linear performance. Replace with new allocation of empty vector + self.activeForest.deleteActiveEdge(prefixVertex) + } + } + + // merge dsu + prefix.forEach { prefixVertex in + co.join(prefixVertex, root) + } + + let newRep = co.find(root) + self.growthPath.append(newRep) + + + // merge in active forest + prefix.forEach { prefixVertex in + if prefixVertex != newRep { + self.activeForest.mergeHeaps(newRep, prefixVertex) + } + } + + + // condense all edges into the prefix to at most 1 per origin + prefix.forEach { prefixVertex in + // if we are here then there are no passive edges to any node earlier in prefix than prefixVertex + self.passiveSet[prefixVertex].reverse() + + passiveSet[prefixVertex].forEach { edgeID in + let edge = edges[edgeID] + let from = co.find(edge.from) + + if from == newRep { + return + } + + if let lastFromExitListEdge = self.exitList[from].last { + let firstEdgeID = lastFromExitListEdge + let firstEdge = self.edges[firstEdgeID] + + #if DEBUG + // the exit list of 'from' should have 'edge' as the first passive edge (just after the active 'first_edge') + // since all passive edges from nodes v0...v_{i-1} were deleted + // with multi-edges this depends on the fact that edge order in exit_list[from] has edges to vi in same order as they are in passive_set[prefixVertex] + let reversedFromExitList = self.exitList[from].reversed() + + assert(self.exitList[from].count >= 2) // namely first_edge and edge + assert(reversedFromExitList.first { exitListEdge in + return exitListEdge == edgeID + } == self.exitList[from][self.exitList[from].count - 2]) + #endif + + self.exitList[from].removeLast() + + if self.currentWeight(for: firstEdge) > self.currentWeight(for: edge) { + self.activeForest.makeActive( + from: edge.from, + to: edge.to, + weight: edge.weight, + id: edgeID + ) + } else { + self.exitList[from][self.exitList[from].count - 1] = firstEdgeID + } + } + } + + self.passiveSet[prefixVertex].removeAll() // FIXME: Replace with empty allocated vector for performance reasons + } + + return newRep + } + + + private func contractCompletePath(root: Int) { + let rootRep = self.co.find(root) + + self.growthPath.forEach { vertex in + self.co.join(vertex, rootRep) + } + + // merge all into old rootRep + self.growthPath.forEach { vertex in + self.activeForest.mergeHeaps(rootRep, vertex) + } + + // then move to new root_rep + if rootRep != self.co.find(rootRep) { + self.activeForest.mergeHeaps(self.co.find(rootRep), rootRep) + } + + self.growthPath.removeAll() // FIXME: Replace with empty allocated vector for performance + self.pathEdges.removeAll() // FIXME: Replace with empty allocated vector for performance + } + + + internal func reconstruct(root: Int) -> [Gabow.Edge] { + let n = self.chosen.count + + // build leafs arary (first chosen edge for each node) + var leaf = [Int].init(repeating: -1, count: self.verticesCount) + + for i in 0.. larger index first results in top-to-bottom traversal + + let reversedRange = (0.. Int { + if parent[x] != x { + parent[x] = find(parent[x]) // Path compression + } + return parent[x] + } + + func union(_ x: Int, _ y: Int) { + let xRoot = find(x) + let yRoot = find(y) + + if xRoot == yRoot { + return + } + + if rank[xRoot] < rank[yRoot] { + parent[xRoot] = yRoot + } else if rank[xRoot] > rank[yRoot] { + parent[yRoot] = xRoot + } else { + parent[yRoot] = xRoot + rank[xRoot] += 1 + } + } +} + + +extension Graph { + /// If this graph is a valid tree, this algorihtm finds and returns the index of the root vertex in `self.vertices`. + /// + /// May require further testing. + /// + /// - Returns: The index of of the root of the tree, if this `self` is a tree, `nil` otherwise. If the graph is a degenerate tree, + /// i.e. an empty tree, this function returns nil. + /// + /// - Complexity: **Time:** O(V + E⋅α(V)) where α(V) is the inverse Ackermann function, that grows extremely slowly (it is considered + /// constant for any common practical application). **Memory:** O(V) to create the sets for Union-Find by rank with path compression. + public func findTreeRoot() -> Int? { + let unionFind = UnionFind(elements: [Int](self.vertices.indices)) + + for vertex in 0..() + for vertex in 0.. V? { + guard let root = findTreeRoot() else { + return nil + } + + return self.vertices[root] + } +} diff --git a/Sources/SwiftGraph/Info.plist b/Sources/SwiftGraph/Info.plist new file mode 100644 index 0000000..5814524 --- /dev/null +++ b/Sources/SwiftGraph/Info.plist @@ -0,0 +1,26 @@ + + + + + CFBundleDevelopmentRegion + en + CFBundleExecutable + $(EXECUTABLE_NAME) + CFBundleIdentifier + $(PRODUCT_BUNDLE_IDENTIFIER) + CFBundleInfoDictionaryVersion + 6.0 + CFBundleName + $(PRODUCT_NAME) + CFBundlePackageType + FMWK + CFBundleShortVersionString + 1.0 + CFBundleVersion + $(CURRENT_PROJECT_VERSION) + NSHumanReadableCopyright + Copyright © 2017 Oak Snow Consulting. All rights reserved. + NSPrincipalClass + + + diff --git a/Sources/SwiftGraph/MSA.swift b/Sources/SwiftGraph/MSA.swift new file mode 100644 index 0000000..e51254f --- /dev/null +++ b/Sources/SwiftGraph/MSA.swift @@ -0,0 +1,104 @@ +public extension WeightedGraph where V: Hashable, W: Comparable & Numeric { + + /// Computes the minimum-cost spanning arborescence of the graph, starting from the specified root. + /// + /// - The algorithm does not modify the graph object it is called on, and will return a new graph object that only contains the vertices reachable + /// from the specified root, and the edges that constitute the MSA. + /// + /// - Note: It is not guaranteed that the indices of vertices in the result graph are the same as the original graph. Though, + /// the references of vertices are the same (no copy or cloning of any vertex is performed). Specifically, if all the vertices of the original graph + /// were reachable from `root`, then the indices of all vertices are preserved, otherwise they're altered to accomodate for the underlying + /// implementation of Gabow's algorithm. + /// + /// - Parameter root: The index of the vertex in `self.vertices` that will be the root of the MSA. + /// - Returns: A pair `(msa: WeightedGraph, minCost: W)`, under the type of `MSAResult`, composed of a new graph + /// that is the minimum cost spanning arborescence of the graph this method was called on, and the corresponding minimum cost. + /// + /// - Throws: `MSAError.graphFormatError(reason: String)`, if the graph this method is called on has at least one undirected edge. + /// + /// - Complexity: Time: O(E + V·log(V)), Space: O(E+V) + func msa(root: Int) throws -> [WeightedGraph.E] { + assert(root >= 0 && root < self.vertexCount) + + var reachable = Set() + var directMap = [V: Int].init() // directMap[K] = V means that the vertex K from `self` is found at index V in `reachableGraph` + var inverseMap: [Int: Int] = .init() // inverseMap[K] = V means that the edge at index K from `reachableGraph` is found at index V in `self` + var inverseVerticesMap: [Int: Int] = .init() // inverseMap[K] = V means that the vertex at index K from `reachableGraph` is found at index V in `self` + + let _ = self.ivBfs(fromIndex: root) { vertexIndex, vertex in + reachable.insert(vertex) + return false + } + + let allEdges = self.edgeList() + + if reachable.count != self.vertexCount { + assert(reachable.contains(self.vertices[root])) // O(1) + + let reachableGraph = WeightedGraph() + + reachable.enumerated().forEach { i, vertex in + directMap[vertex] = i + let newIndexOfV = reachableGraph.addVertex(vertex) + + assert(reachableGraph.indexOfVertex(vertex) == directMap[vertex]) + inverseVerticesMap[newIndexOfV] = self.indexOfVertex(vertex) + + assert(self[inverseVerticesMap[newIndexOfV]!] == vertex) + } + + allEdges.enumerated().forEach { i, edge in + if reachable.contains(self.vertices[edge.u]) && reachable.contains(self.vertices[edge.v]) { + guard let u = directMap[self.vertices[edge.u]], + let v = directMap[self.vertices[edge.v]] else { fatalError() } + + reachableGraph.addEdge( + fromIndex: u, + toIndex: v, + weight: edge.weight, + directed: true + ) + } + } + + return try reachableGraph.msaFromConnectedRoot( + directMap[self.vertices[root]]! + ).map { edge in + return WeightedEdge( + u: inverseVerticesMap[edge.u]!, + v: inverseVerticesMap[edge.v]!, + directed: true, + weight: edge.weight + ) + } + } else { + return try msaFromConnectedRoot(root) + } + } + + private func msaFromConnectedRoot(_ root: Int) throws -> [WeightedGraph.E] { + let gabow = Gabow(verticesCount: self.vertexCount) + + try self.edgeList().forEach { edge in + if !edge.directed { + throw MSAError.graphFormatError(reason: "Graph must be directed") + } + + gabow.createEdge(edge.u, edge.v, edge.weight) + } + + _ = gabow.run(root: root) + let edges = gabow.reconstruct(root: root) + + assert(edges.count == self.vertexCount - 1) + + return edges.map { gabowEdge in + return WeightedEdge(u: gabowEdge.from, v: gabowEdge.to, directed: true, weight: gabowEdge.weight) + } + } + +} + +public enum MSAError: Error { + case graphFormatError(reason: String) +} diff --git a/Sources/SwiftGraph/Search.swift b/Sources/SwiftGraph/Search.swift index 4847c97..a404124 100644 --- a/Sources/SwiftGraph/Search.swift +++ b/Sources/SwiftGraph/Search.swift @@ -405,6 +405,38 @@ public extension Graph { return [] } + + /// Find a route from a vertex to the first that satisfies goalTest() + /// using a breadth-first search. + /// + /// - parameter fromIndex: The index of the starting vertex. + /// - parameter goalTest: Returns true if a given vertex is a goal. + /// - returns: An array of Edges containing the entire route, or an empty array if no route could be found + internal func ivBfs(fromIndex: Int, goalTest: (Int, V) -> Bool) -> [E] { + // pretty standard bfs that doesn't visit anywhere twice; pathDict tracks route + var visited: [Bool] = [Bool](repeating: false, count: vertexCount) + let queue: Queue = Queue() + var pathDict: [Int: Edge] = [Int: Edge]() + queue.push(fromIndex) + while !queue.isEmpty { + let v: Int = queue.pop() + if goalTest(v, vertexAtIndex(v)) { + // figure out route of edges based on pathDict + return pathDictToPath(from: fromIndex, to: v, pathDict: pathDict) as! [Self.E] + } + + for e in edgesForIndex(v) { + if !visited[e.v] { + visited[e.v] = true + queue.push(e.v) + pathDict[e.v] = e + } + } + } + return [] // no path found + } + + /// Find a route from one vertex to another using a breadth-first search. /// /// - parameter fromIndex: The index of the starting vertex. diff --git a/Sources/SwiftGraph/SwiftGraphFramework.h b/Sources/SwiftGraph/SwiftGraphFramework.h new file mode 100644 index 0000000..8f42965 --- /dev/null +++ b/Sources/SwiftGraph/SwiftGraphFramework.h @@ -0,0 +1,19 @@ +// +// SwiftGraphFramework.h +// SwiftGraphFramework +// +// Created by Kevin Lundberg on 2/19/17. +// Copyright © 2017 Oak Snow Consulting. All rights reserved. +// + +#import + +//! Project version number for SwiftGraphFramework. +FOUNDATION_EXPORT double SwiftGraphFrameworkVersionNumber; + +//! Project version string for SwiftGraphFramework. +FOUNDATION_EXPORT const unsigned char SwiftGraphFrameworkVersionString[]; + +// In this header, you should import all the public headers of your framework using statements like #import + + diff --git a/SwiftGraph.xcodeproj/project.pbxproj b/SwiftGraph.xcodeproj/project.pbxproj index 39c19e9..a88de35 100644 --- a/SwiftGraph.xcodeproj/project.pbxproj +++ b/SwiftGraph.xcodeproj/project.pbxproj @@ -36,6 +36,13 @@ 7985B9291E5A503200C100E7 /* Sort.swift in Sources */ = {isa = PBXBuildFile; fileRef = 553746441DA56CC500C0E0F6 /* Sort.swift */; }; 7985B92A1E5A503200C100E7 /* Stack.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5589B4771C0E759800D6664E /* Stack.swift */; }; 7985B92B1E5A503200C100E7 /* Queue.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5589B47A1C0E75A700D6664E /* Queue.swift */; }; + 84BE1EA52C1DD6590024C229 /* FibonacciHeapNode.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BE1E9C2C1DD6590024C229 /* FibonacciHeapNode.swift */; }; + 84BE1EA62C1DD6590024C229 /* ActiveForest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BE1E9D2C1DD6590024C229 /* ActiveForest.swift */; }; + 84BE1EA72C1DD6590024C229 /* CompressedTree.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BE1E9E2C1DD6590024C229 /* CompressedTree.swift */; }; + 84BE1EA82C1DD6590024C229 /* LinkedList.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BE1E9F2C1DD6590024C229 /* LinkedList.swift */; }; + 84BE1EA92C1DD6590024C229 /* Gabow.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BE1EA12C1DD6590024C229 /* Gabow.swift */; }; + 84BE1EAA2C1DD6590024C229 /* MSA.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BE1EA22C1DD6590024C229 /* MSA.swift */; }; + 84BE1EAF2C1DD8350024C229 /* MSATests.swift in Sources */ = {isa = PBXBuildFile; fileRef = 84BE1EAD2C1DD80E0024C229 /* MSATests.swift */; }; B5100A4D208B97AA00C7A73A /* UnweightedGraphTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B5100A4B208B97A800C7A73A /* UnweightedGraphTests.swift */; }; B518BAB72232E8A40059DCB8 /* WeightedUniqueElementsGraphTests.swift in Sources */ = {isa = PBXBuildFile; fileRef = B518BAB62232E8A40059DCB8 /* WeightedUniqueElementsGraphTests.swift */; }; B51B460B2083E14200CD0463 /* Union.swift in Sources */ = {isa = PBXBuildFile; fileRef = B51B460A2083E14200CD0463 /* Union.swift */; }; @@ -127,6 +134,13 @@ 7985B91A1E5A4FCB00C100E7 /* SwiftGraphSearchTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftGraphSearchTests.swift; sourceTree = ""; }; 7985B91B1E5A4FCB00C100E7 /* SwiftGraphSortTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftGraphSortTests.swift; sourceTree = ""; }; 7985B91C1E5A4FCB00C100E7 /* SwiftGraphTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = SwiftGraphTests.swift; sourceTree = ""; }; + 84BE1E9C2C1DD6590024C229 /* FibonacciHeapNode.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = FibonacciHeapNode.swift; sourceTree = ""; }; + 84BE1E9D2C1DD6590024C229 /* ActiveForest.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = ActiveForest.swift; sourceTree = ""; }; + 84BE1E9E2C1DD6590024C229 /* CompressedTree.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = CompressedTree.swift; sourceTree = ""; }; + 84BE1E9F2C1DD6590024C229 /* LinkedList.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = LinkedList.swift; sourceTree = ""; }; + 84BE1EA12C1DD6590024C229 /* Gabow.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = Gabow.swift; sourceTree = ""; }; + 84BE1EA22C1DD6590024C229 /* MSA.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; name = MSA.swift; path = ../Sources/SwiftGraph/MSA.swift; sourceTree = ""; }; + 84BE1EAD2C1DD80E0024C229 /* MSATests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = MSATests.swift; sourceTree = ""; }; B5100A4B208B97A800C7A73A /* UnweightedGraphTests.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnweightedGraphTests.swift; sourceTree = ""; }; B518BAB62232E8A40059DCB8 /* WeightedUniqueElementsGraphTests.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = WeightedUniqueElementsGraphTests.swift; sourceTree = ""; }; B51B460A2083E14200CD0463 /* Union.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = Union.swift; path = ../Sources/SwiftGraph/Union.swift; sourceTree = ""; }; @@ -210,6 +224,7 @@ children = ( 55FB2D651CE25E0800C2B876 /* SwiftPriorityQueue.swift */, 55E784251ED2127D003899D0 /* MST.swift */, + 84BE1EA22C1DD6590024C229 /* MSA.swift */, 55DCCBF51F8ADA12001913F7 /* Cycle.swift */, 5589B4741C0E758500D6664E /* Search.swift */, 553746441DA56CC500C0E0F6 /* Sort.swift */, @@ -264,13 +279,13 @@ 7985B8FC1E5A4FB800C100E7 /* SwiftGraph */ = { isa = PBXGroup; children = ( + 7985B8FE1E5A4FB800C100E7 /* Info.plist */, + 7985B8FD1E5A4FB800C100E7 /* SwiftGraphFramework.h */, 5589B4811C0E774300D6664E /* Edges */, 5589B4821C0E774F00D6664E /* Graphs */, B58B0D732083DEC400A0E1AB /* Operations */, 5589B4831C0E775800D6664E /* Search */, B54FDA6D21729EFF00057C51 /* Constructors.swift */, - 7985B8FD1E5A4FB800C100E7 /* SwiftGraphFramework.h */, - 7985B8FE1E5A4FB800C100E7 /* Info.plist */, ); path = SwiftGraph; sourceTree = ""; @@ -282,6 +297,7 @@ B54FDA6F2172A30600057C51 /* Constructors */, B523F2E82094F0A1006587ED /* UniqueElementsGraph */, 557F55E91F8AB247002AF0BF /* Info.plist */, + 84BE1EAD2C1DD80E0024C229 /* MSATests.swift */, 7985B9191E5A4FCB00C100E7 /* DijkstraGraphTests.swift */, 55DCCBF71F8AE2F1001913F7 /* CycleTests.swift */, 55E784271ED2971E003899D0 /* MSTTests.swift */, @@ -299,6 +315,43 @@ path = Tests/SwiftGraphTests; sourceTree = ""; }; + 84BE1E992C1DD62D0024C229 /* MSA */ = { + isa = PBXGroup; + children = ( + 84BE1E9A2C1DD6590024C229 /* Arbok */, + ); + name = MSA; + sourceTree = ""; + }; + 84BE1E9A2C1DD6590024C229 /* Arbok */ = { + isa = PBXGroup; + children = ( + 84BE1E9B2C1DD6590024C229 /* Data Structures */, + 84BE1EA02C1DD6590024C229 /* Gabow */, + ); + name = Arbok; + path = ../Sources/SwiftGraph/Arbok; + sourceTree = ""; + }; + 84BE1E9B2C1DD6590024C229 /* Data Structures */ = { + isa = PBXGroup; + children = ( + 84BE1E9C2C1DD6590024C229 /* FibonacciHeapNode.swift */, + 84BE1E9D2C1DD6590024C229 /* ActiveForest.swift */, + 84BE1E9E2C1DD6590024C229 /* CompressedTree.swift */, + 84BE1E9F2C1DD6590024C229 /* LinkedList.swift */, + ); + path = "Data Structures"; + sourceTree = ""; + }; + 84BE1EA02C1DD6590024C229 /* Gabow */ = { + isa = PBXGroup; + children = ( + 84BE1EA12C1DD6590024C229 /* Gabow.swift */, + ); + path = Gabow; + sourceTree = ""; + }; B523F2E82094F0A1006587ED /* UniqueElementsGraph */ = { isa = PBXGroup; children = ( @@ -322,6 +375,7 @@ B58B0D732083DEC400A0E1AB /* Operations */ = { isa = PBXGroup; children = ( + 84BE1E992C1DD62D0024C229 /* MSA */, B51B460A2083E14200CD0463 /* Union.swift */, 343882F825DF04E7007D2401 /* Reversed.swift */, ); @@ -528,12 +582,17 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( + 84BE1EA72C1DD6590024C229 /* CompressedTree.swift in Sources */, B5D229BC207BF30100151820 /* UniqueElementsGraph.swift in Sources */, 7985B9241E5A503200C100E7 /* Graph.swift in Sources */, 7985B9251E5A503200C100E7 /* UnweightedGraph.swift in Sources */, 7985B9291E5A503200C100E7 /* Sort.swift in Sources */, + 84BE1EA52C1DD6590024C229 /* FibonacciHeapNode.swift in Sources */, + 84BE1EA82C1DD6590024C229 /* LinkedList.swift in Sources */, B51B460B2083E14200CD0463 /* Union.swift in Sources */, + 84BE1EA62C1DD6590024C229 /* ActiveForest.swift in Sources */, 7985B92B1E5A503200C100E7 /* Queue.swift in Sources */, + 84BE1EA92C1DD6590024C229 /* Gabow.swift in Sources */, B54FDA6E21729EFF00057C51 /* Constructors.swift in Sources */, 55E784261ED2127D003899D0 /* MST.swift in Sources */, 7985B9231E5A503200C100E7 /* WeightedEdge.swift in Sources */, @@ -543,6 +602,7 @@ 7985B9281E5A503200C100E7 /* Search.swift in Sources */, 7985B9211E5A503200C100E7 /* Edge.swift in Sources */, 7985B9271E5A503200C100E7 /* SwiftPriorityQueue.swift in Sources */, + 84BE1EAA2C1DD6590024C229 /* MSA.swift in Sources */, 55DCCBF61F8ADA12001913F7 /* Cycle.swift in Sources */, 343882F925DF04E7007D2401 /* Reversed.swift in Sources */, ); @@ -557,6 +617,7 @@ 7985B9201E5A4FCB00C100E7 /* SwiftGraphTests.swift in Sources */, 7985B91E1E5A4FCB00C100E7 /* SwiftGraphSearchTests.swift in Sources */, 55DCCBF81F8AE2F1001913F7 /* CycleTests.swift in Sources */, + 84BE1EAF2C1DD8350024C229 /* MSATests.swift in Sources */, B52ABD39208955BD00FBF10C /* UnionTests.swift in Sources */, B518BAB72232E8A40059DCB8 /* WeightedUniqueElementsGraphTests.swift in Sources */, 55E784281ED2971E003899D0 /* MSTTests.swift in Sources */, diff --git a/Tests/SwiftGraphTests/MSATests.swift b/Tests/SwiftGraphTests/MSATests.swift new file mode 100644 index 0000000..4c1c293 --- /dev/null +++ b/Tests/SwiftGraphTests/MSATests.swift @@ -0,0 +1,7369 @@ +import XCTest +@testable import SwiftGraph + +final class MSATests: XCTestCase { + + func testAppendListIntoEmptyList() throws { + let list = LinkedList() + let other = LinkedList() + + for i in 0..<5 { + other.append(i) + } + + list.append(other) + + print(list.underestimatedCount) + XCTAssertEqual(list.count(), other.count()) + + var list1Current = list.head + var list2Current = other.head + + while (list1Current != nil && list2Current != nil) { + XCTAssertFalse(list1Current === list2Current) + XCTAssertTrue(list1Current?.value == list2Current?.value) + + list1Current = list1Current?.next + list2Current = list2Current?.next + } + } + + // MARK: - UNION FIND BY RANK WITH PATH COMPRESSION + fileprivate struct MT19937: RandomNumberGenerator { + // Implementation of the RandomNumberGenerator protocol + mutating func next() -> UInt64 { + // Your implementation of the MT19937 algorithm here + // For the sake of simplicity, a basic implementation is shown + return UInt64.random(in: UInt64.min...UInt64.max) + } + } + + func testCorrectFind() throws { + let n = 1000 + var gen = MT19937() + var perm = Array(repeating: 0, count: n-1) + + for i in 0..(initialSize: n) + for testElement in perm { + dsu.join(testElement, n-1) + } + + let root = dsu.find(0) + + for element in 0.. 0.5 ? .addValue : p > 0.3 ? .find : .join, + lhs: Int.random(in: 0..(initialSize: n) + + for operation in ops { + if operation.operation == .join { + let joined = dsu.join(operation.lhs, operation.rhs) + XCTAssertEqual(joined, parent[operation.lhs] != parent[operation.rhs]) + + let root1 = parent[operation.lhs] + let root2 = parent[operation.rhs] + + for i in 0..(verticesCount: verticesCount) + + // Test edge creation + gabow.createEdge(from: 0, to: 1, weight: 10) + gabow.createEdge(from: 1, to: 2, weight: 20) + + let edges = gabow.getEdges() + + XCTAssertEqual(edges.count, 2) + XCTAssertEqual(edges[0].from, 0) + XCTAssertEqual(edges[0].to, 1) + XCTAssertEqual(edges[0].weight, 10) + XCTAssertEqual(edges[1].from, 1) + XCTAssertEqual(edges[1].to, 2) + XCTAssertEqual(edges[1].weight, 20) + } + + func testRunAlgorithm() { + let verticesCount = 2000 + let gabow = Gabow(verticesCount: verticesCount) + + // Define edges of the graph + + gabow.createEdge(0, 1, 59) + gabow.createEdge(0, 2, 50) + gabow.createEdge(2, 3, 98) + gabow.createEdge(2, 4, 99) + gabow.createEdge(4, 5, 66) + gabow.createEdge(2, 6, 83) + gabow.createEdge(2, 7, 70) + gabow.createEdge(4, 8, 34) + gabow.createEdge(7, 9, 91) + gabow.createEdge(5, 10, 80) + gabow.createEdge(4, 11, 32) + gabow.createEdge(3, 12, 31) + gabow.createEdge(12, 13, 22) + gabow.createEdge(6, 14, 86) + gabow.createEdge(11, 15, 43) + gabow.createEdge(7, 16, 27) + gabow.createEdge(11, 17, 86) + gabow.createEdge(17, 18, 92) + gabow.createEdge(10, 19, 33) + gabow.createEdge(0, 20, 17) + gabow.createEdge(6, 21, 54) + gabow.createEdge(21, 22, 49) + gabow.createEdge(3, 23, 95) + gabow.createEdge(9, 24, 12) + gabow.createEdge(15, 25, 63) + gabow.createEdge(19, 26, 47) + gabow.createEdge(1, 27, 90) + gabow.createEdge(7, 28, 100) + gabow.createEdge(4, 29, 96) + gabow.createEdge(17, 30, 3) + gabow.createEdge(5, 31, 42) + gabow.createEdge(6, 32, 19) + gabow.createEdge(19, 33, 67) + gabow.createEdge(13, 34, 47) + gabow.createEdge(15, 35, 99) + gabow.createEdge(10, 36, 89) + gabow.createEdge(15, 37, 97) + gabow.createEdge(0, 38, 44) + gabow.createEdge(33, 39, 89) + gabow.createEdge(7, 40, 40) + gabow.createEdge(20, 41, 86) + gabow.createEdge(18, 42, 40) + gabow.createEdge(28, 43, 13) + gabow.createEdge(24, 44, 59) + gabow.createEdge(13, 45, 14) + gabow.createEdge(24, 46, 68) + gabow.createEdge(7, 47, 46) + gabow.createEdge(9, 48, 25) + gabow.createEdge(45, 49, 81) + gabow.createEdge(48, 50, 23) + gabow.createEdge(7, 51, 90) + gabow.createEdge(14, 52, 17) + gabow.createEdge(2, 53, 70) + gabow.createEdge(9, 54, 19) + gabow.createEdge(14, 55, 16) + gabow.createEdge(3, 56, 15) + gabow.createEdge(32, 57, 35) + gabow.createEdge(51, 58, 91) + gabow.createEdge(4, 59, 81) + gabow.createEdge(21, 60, 14) + gabow.createEdge(37, 61, 80) + gabow.createEdge(48, 62, 71) + gabow.createEdge(39, 63, 50) + gabow.createEdge(20, 64, 46) + gabow.createEdge(48, 65, 21) + gabow.createEdge(54, 66, 24) + gabow.createEdge(43, 67, 60) + gabow.createEdge(67, 68, 75) + gabow.createEdge(60, 69, 27) + gabow.createEdge(34, 70, 77) + gabow.createEdge(27, 71, 21) + gabow.createEdge(66, 72, 78) + gabow.createEdge(28, 73, 68) + gabow.createEdge(1, 74, 61) + gabow.createEdge(20, 75, 96) + gabow.createEdge(51, 76, 32) + gabow.createEdge(64, 77, 73) + gabow.createEdge(10, 78, 86) + gabow.createEdge(12, 79, 36) + gabow.createEdge(25, 80, 21) + gabow.createEdge(10, 81, 39) + gabow.createEdge(78, 82, 100) + gabow.createEdge(64, 83, 37) + gabow.createEdge(38, 84, 54) + gabow.createEdge(60, 85, 89) + gabow.createEdge(69, 86, 28) + gabow.createEdge(18, 87, 53) + gabow.createEdge(30, 88, 40) + gabow.createEdge(76, 89, 66) + gabow.createEdge(48, 90, 34) + gabow.createEdge(58, 91, 76) + gabow.createEdge(4, 92, 98) + gabow.createEdge(53, 93, 67) + gabow.createEdge(76, 94, 73) + gabow.createEdge(64, 95, 65) + gabow.createEdge(11, 96, 11) + gabow.createEdge(21, 97, 75) + gabow.createEdge(28, 98, 65) + gabow.createEdge(57, 99, 96) + gabow.createEdge(46, 100, 70) + gabow.createEdge(22, 101, 43) + gabow.createEdge(18, 102, 50) + gabow.createEdge(68, 103, 47) + gabow.createEdge(21, 104, 62) + gabow.createEdge(53, 105, 26) + gabow.createEdge(62, 106, 67) + gabow.createEdge(71, 107, 38) + gabow.createEdge(68, 108, 55) + gabow.createEdge(81, 109, 10) + gabow.createEdge(60, 110, 15) + gabow.createEdge(79, 111, 78) + gabow.createEdge(96, 112, 69) + gabow.createEdge(41, 113, 16) + gabow.createEdge(72, 114, 73) + gabow.createEdge(1, 115, 51) + gabow.createEdge(46, 116, 22) + gabow.createEdge(81, 117, 7) + gabow.createEdge(10, 118, 99) + gabow.createEdge(55, 119, 2) + gabow.createEdge(8, 120, 83) + gabow.createEdge(7, 121, 81) + gabow.createEdge(85, 122, 89) + gabow.createEdge(38, 123, 88) + gabow.createEdge(116, 124, 85) + gabow.createEdge(115, 125, 61) + gabow.createEdge(95, 126, 9) + gabow.createEdge(124, 127, 71) + gabow.createEdge(24, 128, 92) + gabow.createEdge(120, 129, 56) + gabow.createEdge(90, 130, 10) + gabow.createEdge(41, 131, 57) + gabow.createEdge(79, 132, 98) + gabow.createEdge(124, 133, 70) + gabow.createEdge(5, 134, 85) + gabow.createEdge(19, 135, 42) + gabow.createEdge(81, 136, 67) + gabow.createEdge(24, 137, 98) + gabow.createEdge(128, 138, 47) + gabow.createEdge(34, 139, 60) + gabow.createEdge(44, 140, 95) + gabow.createEdge(78, 141, 97) + gabow.createEdge(113, 142, 38) + gabow.createEdge(118, 143, 1) + gabow.createEdge(20, 144, 30) + gabow.createEdge(69, 145, 81) + gabow.createEdge(143, 146, 84) + gabow.createEdge(50, 147, 53) + gabow.createEdge(41, 148, 26) + gabow.createEdge(25, 149, 50) + gabow.createEdge(144, 150, 25) + gabow.createEdge(45, 151, 74) + gabow.createEdge(77, 152, 35) + gabow.createEdge(19, 153, 25) + gabow.createEdge(16, 154, 24) + gabow.createEdge(0, 155, 13) + gabow.createEdge(56, 156, 44) + gabow.createEdge(106, 157, 18) + gabow.createEdge(114, 158, 46) + gabow.createEdge(13, 159, 75) + gabow.createEdge(15, 160, 73) + gabow.createEdge(52, 161, 85) + gabow.createEdge(36, 162, 22) + gabow.createEdge(123, 163, 55) + gabow.createEdge(23, 164, 28) + gabow.createEdge(26, 165, 31) + gabow.createEdge(144, 166, 50) + gabow.createEdge(121, 167, 42) + gabow.createEdge(155, 168, 37) + gabow.createEdge(115, 169, 50) + gabow.createEdge(68, 170, 38) + gabow.createEdge(95, 171, 69) + gabow.createEdge(15, 172, 73) + gabow.createEdge(5, 173, 96) + gabow.createEdge(132, 174, 79) + gabow.createEdge(97, 175, 17) + gabow.createEdge(155, 176, 98) + gabow.createEdge(115, 177, 97) + gabow.createEdge(173, 178, 59) + gabow.createEdge(138, 179, 44) + gabow.createEdge(139, 180, 37) + gabow.createEdge(179, 181, 33) + gabow.createEdge(53, 182, 6) + gabow.createEdge(29, 183, 80) + gabow.createEdge(122, 184, 81) + gabow.createEdge(34, 185, 17) + gabow.createEdge(20, 186, 23) + gabow.createEdge(186, 187, 86) + gabow.createEdge(32, 188, 97) + gabow.createEdge(147, 189, 65) + gabow.createEdge(150, 190, 40) + gabow.createEdge(138, 191, 73) + gabow.createEdge(65, 192, 64) + gabow.createEdge(148, 193, 92) + gabow.createEdge(106, 194, 54) + gabow.createEdge(4, 195, 90) + gabow.createEdge(8, 196, 41) + gabow.createEdge(195, 197, 7) + gabow.createEdge(42, 198, 33) + gabow.createEdge(70, 199, 25) + gabow.createEdge(4, 200, 91) + gabow.createEdge(193, 201, 52) + gabow.createEdge(163, 202, 66) + gabow.createEdge(117, 203, 81) + gabow.createEdge(187, 204, 94) + gabow.createEdge(184, 205, 89) + gabow.createEdge(23, 206, 98) + gabow.createEdge(23, 207, 70) + gabow.createEdge(137, 208, 66) + gabow.createEdge(82, 209, 78) + gabow.createEdge(29, 210, 70) + gabow.createEdge(104, 211, 81) + gabow.createEdge(121, 212, 34) + gabow.createEdge(160, 213, 90) + gabow.createEdge(178, 214, 56) + gabow.createEdge(159, 215, 67) + gabow.createEdge(17, 216, 21) + gabow.createEdge(173, 217, 16) + gabow.createEdge(108, 218, 81) + gabow.createEdge(83, 219, 79) + gabow.createEdge(29, 220, 34) + gabow.createEdge(169, 221, 10) + gabow.createEdge(178, 222, 60) + gabow.createEdge(106, 223, 27) + gabow.createEdge(56, 224, 86) + gabow.createEdge(175, 225, 5) + gabow.createEdge(163, 226, 9) + gabow.createEdge(167, 227, 41) + gabow.createEdge(24, 228, 71) + gabow.createEdge(163, 229, 9) + gabow.createEdge(92, 230, 2) + gabow.createEdge(4, 231, 66) + gabow.createEdge(39, 232, 68) + gabow.createEdge(57, 233, 36) + gabow.createEdge(182, 234, 100) + gabow.createEdge(159, 235, 49) + gabow.createEdge(28, 236, 78) + gabow.createEdge(95, 237, 96) + gabow.createEdge(33, 238, 47) + gabow.createEdge(76, 239, 32) + gabow.createEdge(171, 240, 87) + gabow.createEdge(100, 241, 23) + gabow.createEdge(51, 242, 77) + gabow.createEdge(195, 243, 30) + gabow.createEdge(144, 244, 62) + gabow.createEdge(61, 245, 3) + gabow.createEdge(62, 246, 93) + gabow.createEdge(99, 247, 16) + gabow.createEdge(78, 248, 98) + gabow.createEdge(149, 249, 33) + gabow.createEdge(33, 250, 38) + gabow.createEdge(50, 251, 26) + gabow.createEdge(144, 252, 49) + gabow.createEdge(67, 253, 13) + gabow.createEdge(15, 254, 94) + gabow.createEdge(167, 255, 68) + gabow.createEdge(195, 256, 25) + gabow.createEdge(199, 257, 58) + gabow.createEdge(61, 258, 10) + gabow.createEdge(184, 259, 83) + gabow.createEdge(140, 260, 19) + gabow.createEdge(139, 261, 54) + gabow.createEdge(126, 262, 95) + gabow.createEdge(167, 263, 4) + gabow.createEdge(63, 264, 26) + gabow.createEdge(4, 265, 60) + gabow.createEdge(97, 266, 26) + gabow.createEdge(153, 267, 79) + gabow.createEdge(169, 268, 70) + gabow.createEdge(225, 269, 75) + gabow.createEdge(230, 270, 63) + gabow.createEdge(174, 271, 84) + gabow.createEdge(63, 272, 82) + gabow.createEdge(190, 273, 51) + gabow.createEdge(98, 274, 23) + gabow.createEdge(71, 275, 22) + gabow.createEdge(269, 276, 86) + gabow.createEdge(40, 277, 59) + gabow.createEdge(15, 278, 24) + gabow.createEdge(61, 279, 81) + gabow.createEdge(264, 280, 36) + gabow.createEdge(17, 281, 27) + gabow.createEdge(103, 282, 12) + gabow.createEdge(55, 283, 8) + gabow.createEdge(278, 284, 39) + gabow.createEdge(139, 285, 30) + gabow.createEdge(131, 286, 36) + gabow.createEdge(103, 287, 81) + gabow.createEdge(8, 288, 12) + gabow.createEdge(94, 289, 63) + gabow.createEdge(161, 290, 16) + gabow.createEdge(189, 291, 53) + gabow.createEdge(73, 292, 95) + gabow.createEdge(141, 293, 16) + gabow.createEdge(72, 294, 99) + gabow.createEdge(218, 295, 5) + gabow.createEdge(104, 296, 39) + gabow.createEdge(39, 297, 23) + gabow.createEdge(294, 298, 84) + gabow.createEdge(234, 299, 85) + gabow.createEdge(105, 300, 48) + gabow.createEdge(276, 301, 59) + gabow.createEdge(24, 302, 93) + gabow.createEdge(13, 303, 84) + gabow.createEdge(179, 304, 66) + gabow.createEdge(56, 305, 53) + gabow.createEdge(223, 306, 7) + gabow.createEdge(24, 307, 30) + gabow.createEdge(156, 308, 18) + gabow.createEdge(20, 309, 9) + gabow.createEdge(297, 310, 30) + gabow.createEdge(99, 311, 70) + gabow.createEdge(308, 312, 41) + gabow.createEdge(212, 313, 55) + gabow.createEdge(105, 314, 94) + gabow.createEdge(276, 315, 26) + gabow.createEdge(1, 316, 98) + gabow.createEdge(77, 317, 17) + gabow.createEdge(174, 318, 29) + gabow.createEdge(55, 319, 85) + gabow.createEdge(277, 320, 65) + gabow.createEdge(0, 321, 84) + gabow.createEdge(269, 322, 43) + gabow.createEdge(154, 323, 56) + gabow.createEdge(224, 324, 11) + gabow.createEdge(34, 325, 16) + gabow.createEdge(304, 326, 98) + gabow.createEdge(89, 327, 5) + gabow.createEdge(105, 328, 63) + gabow.createEdge(35, 329, 58) + gabow.createEdge(291, 330, 51) + gabow.createEdge(207, 331, 89) + gabow.createEdge(214, 332, 62) + gabow.createEdge(210, 333, 9) + gabow.createEdge(109, 334, 39) + gabow.createEdge(6, 335, 90) + gabow.createEdge(178, 336, 11) + gabow.createEdge(118, 337, 12) + gabow.createEdge(333, 338, 95) + gabow.createEdge(112, 339, 27) + gabow.createEdge(310, 340, 60) + gabow.createEdge(238, 341, 51) + gabow.createEdge(209, 342, 40) + gabow.createEdge(156, 343, 20) + gabow.createEdge(59, 344, 32) + gabow.createEdge(233, 345, 47) + gabow.createEdge(159, 346, 50) + gabow.createEdge(59, 347, 93) + gabow.createEdge(336, 348, 69) + gabow.createEdge(292, 349, 30) + gabow.createEdge(87, 350, 22) + gabow.createEdge(141, 351, 66) + gabow.createEdge(263, 352, 83) + gabow.createEdge(79, 353, 61) + gabow.createEdge(21, 354, 22) + gabow.createEdge(258, 355, 59) + gabow.createEdge(300, 356, 99) + gabow.createEdge(332, 357, 77) + gabow.createEdge(152, 358, 52) + gabow.createEdge(3, 359, 79) + gabow.createEdge(5, 360, 71) + gabow.createEdge(275, 361, 70) + gabow.createEdge(234, 362, 71) + gabow.createEdge(330, 363, 32) + gabow.createEdge(98, 364, 68) + gabow.createEdge(311, 365, 39) + gabow.createEdge(28, 366, 41) + gabow.createEdge(220, 367, 82) + gabow.createEdge(321, 368, 91) + gabow.createEdge(15, 369, 47) + gabow.createEdge(334, 370, 70) + gabow.createEdge(267, 371, 73) + gabow.createEdge(231, 372, 8) + gabow.createEdge(210, 373, 69) + gabow.createEdge(313, 374, 17) + gabow.createEdge(301, 375, 31) + gabow.createEdge(67, 376, 60) + gabow.createEdge(272, 377, 13) + gabow.createEdge(144, 378, 92) + gabow.createEdge(200, 379, 17) + gabow.createEdge(9, 380, 97) + gabow.createEdge(372, 381, 55) + gabow.createEdge(326, 382, 11) + gabow.createEdge(287, 383, 77) + gabow.createEdge(39, 384, 29) + gabow.createEdge(120, 385, 45) + gabow.createEdge(375, 386, 77) + gabow.createEdge(268, 387, 81) + gabow.createEdge(175, 388, 57) + gabow.createEdge(245, 389, 68) + gabow.createEdge(106, 390, 65) + gabow.createEdge(150, 391, 34) + gabow.createEdge(167, 392, 93) + gabow.createEdge(319, 393, 82) + gabow.createEdge(82, 394, 56) + gabow.createEdge(321, 395, 24) + gabow.createEdge(239, 396, 84) + gabow.createEdge(229, 397, 35) + gabow.createEdge(31, 398, 82) + gabow.createEdge(68, 399, 56) + gabow.createEdge(40, 400, 63) + gabow.createEdge(140, 401, 3) + gabow.createEdge(339, 402, 13) + gabow.createEdge(92, 403, 44) + gabow.createEdge(394, 404, 13) + gabow.createEdge(234, 405, 13) + gabow.createEdge(158, 406, 39) + gabow.createEdge(241, 407, 4) + gabow.createEdge(112, 408, 97) + gabow.createEdge(139, 409, 80) + gabow.createEdge(330, 410, 67) + gabow.createEdge(282, 411, 3) + gabow.createEdge(35, 412, 72) + gabow.createEdge(204, 413, 87) + gabow.createEdge(126, 414, 40) + gabow.createEdge(397, 415, 86) + gabow.createEdge(26, 416, 83) + gabow.createEdge(301, 417, 67) + gabow.createEdge(6, 418, 99) + gabow.createEdge(408, 419, 94) + gabow.createEdge(57, 420, 72) + gabow.createEdge(392, 421, 74) + gabow.createEdge(145, 422, 63) + gabow.createEdge(217, 423, 82) + gabow.createEdge(241, 424, 90) + gabow.createEdge(96, 425, 83) + gabow.createEdge(163, 426, 27) + gabow.createEdge(272, 427, 80) + gabow.createEdge(345, 428, 40) + gabow.createEdge(399, 429, 58) + gabow.createEdge(67, 430, 14) + gabow.createEdge(398, 431, 89) + gabow.createEdge(301, 432, 73) + gabow.createEdge(184, 433, 43) + gabow.createEdge(104, 434, 62) + gabow.createEdge(174, 435, 14) + gabow.createEdge(7, 436, 1) + gabow.createEdge(423, 437, 96) + gabow.createEdge(202, 438, 79) + gabow.createEdge(3, 439, 80) + gabow.createEdge(332, 440, 7) + gabow.createEdge(10, 441, 15) + gabow.createEdge(65, 442, 10) + gabow.createEdge(391, 443, 15) + gabow.createEdge(285, 444, 10) + gabow.createEdge(19, 445, 91) + gabow.createEdge(87, 446, 67) + gabow.createEdge(242, 447, 1) + gabow.createEdge(362, 448, 35) + gabow.createEdge(274, 449, 26) + gabow.createEdge(245, 450, 57) + gabow.createEdge(138, 451, 12) + gabow.createEdge(146, 452, 60) + gabow.createEdge(93, 453, 7) + gabow.createEdge(156, 454, 7) + gabow.createEdge(359, 455, 30) + gabow.createEdge(442, 456, 43) + gabow.createEdge(139, 457, 50) + gabow.createEdge(330, 458, 73) + gabow.createEdge(221, 459, 9) + gabow.createEdge(321, 460, 82) + gabow.createEdge(269, 461, 11) + gabow.createEdge(376, 462, 33) + gabow.createEdge(168, 463, 25) + gabow.createEdge(436, 464, 72) + gabow.createEdge(435, 465, 52) + gabow.createEdge(222, 466, 45) + gabow.createEdge(386, 467, 4) + gabow.createEdge(220, 468, 6) + gabow.createEdge(205, 469, 59) + gabow.createEdge(466, 470, 43) + gabow.createEdge(250, 471, 20) + gabow.createEdge(466, 472, 86) + gabow.createEdge(269, 473, 65) + gabow.createEdge(111, 474, 42) + gabow.createEdge(325, 475, 36) + gabow.createEdge(92, 476, 74) + gabow.createEdge(131, 477, 95) + gabow.createEdge(20, 478, 94) + gabow.createEdge(367, 479, 19) + gabow.createEdge(388, 480, 27) + gabow.createEdge(297, 481, 15) + gabow.createEdge(69, 482, 35) + gabow.createEdge(253, 483, 79) + gabow.createEdge(108, 484, 76) + gabow.createEdge(123, 485, 25) + gabow.createEdge(328, 486, 35) + gabow.createEdge(187, 487, 75) + gabow.createEdge(222, 488, 42) + gabow.createEdge(250, 489, 93) + gabow.createEdge(172, 490, 16) + gabow.createEdge(158, 491, 46) + gabow.createEdge(32, 492, 93) + gabow.createEdge(34, 493, 45) + gabow.createEdge(351, 494, 47) + gabow.createEdge(183, 495, 10) + gabow.createEdge(415, 496, 15) + gabow.createEdge(418, 497, 95) + gabow.createEdge(224, 498, 83) + gabow.createEdge(121, 499, 72) + gabow.createEdge(240, 500, 76) + gabow.createEdge(111, 501, 79) + gabow.createEdge(341, 502, 92) + gabow.createEdge(465, 503, 62) + gabow.createEdge(110, 504, 66) + gabow.createEdge(321, 505, 78) + gabow.createEdge(21, 506, 84) + gabow.createEdge(483, 507, 47) + gabow.createEdge(445, 508, 87) + gabow.createEdge(324, 509, 71) + gabow.createEdge(224, 510, 59) + gabow.createEdge(420, 511, 75) + gabow.createEdge(476, 512, 96) + gabow.createEdge(216, 513, 40) + gabow.createEdge(145, 514, 75) + gabow.createEdge(509, 515, 90) + gabow.createEdge(316, 516, 63) + gabow.createEdge(472, 517, 12) + gabow.createEdge(504, 518, 33) + gabow.createEdge(128, 519, 48) + gabow.createEdge(202, 520, 41) + gabow.createEdge(427, 521, 95) + gabow.createEdge(509, 522, 74) + gabow.createEdge(202, 523, 72) + gabow.createEdge(42, 524, 55) + gabow.createEdge(115, 525, 63) + gabow.createEdge(223, 526, 83) + gabow.createEdge(305, 527, 76) + gabow.createEdge(430, 528, 49) + gabow.createEdge(182, 529, 25) + gabow.createEdge(88, 530, 59) + gabow.createEdge(116, 531, 50) + gabow.createEdge(213, 532, 52) + gabow.createEdge(512, 533, 100) + gabow.createEdge(270, 534, 28) + gabow.createEdge(246, 535, 17) + gabow.createEdge(420, 536, 69) + gabow.createEdge(41, 537, 16) + gabow.createEdge(239, 538, 66) + gabow.createEdge(359, 539, 90) + gabow.createEdge(280, 540, 46) + gabow.createEdge(300, 541, 29) + gabow.createEdge(236, 542, 30) + gabow.createEdge(341, 543, 40) + gabow.createEdge(122, 544, 24) + gabow.createEdge(488, 545, 56) + gabow.createEdge(324, 546, 26) + gabow.createEdge(239, 547, 69) + gabow.createEdge(313, 548, 68) + gabow.createEdge(74, 549, 77) + gabow.createEdge(458, 550, 12) + gabow.createEdge(5, 551, 31) + gabow.createEdge(506, 552, 97) + gabow.createEdge(445, 553, 12) + gabow.createEdge(314, 554, 84) + gabow.createEdge(114, 555, 88) + gabow.createEdge(380, 556, 40) + gabow.createEdge(509, 557, 26) + gabow.createEdge(397, 558, 98) + gabow.createEdge(451, 559, 60) + gabow.createEdge(543, 560, 71) + gabow.createEdge(433, 561, 37) + gabow.createEdge(31, 562, 8) + gabow.createEdge(222, 563, 21) + gabow.createEdge(236, 564, 4) + gabow.createEdge(369, 565, 79) + gabow.createEdge(139, 566, 1) + gabow.createEdge(298, 567, 33) + gabow.createEdge(368, 568, 2) + gabow.createEdge(384, 569, 33) + gabow.createEdge(4, 570, 78) + gabow.createEdge(337, 571, 36) + gabow.createEdge(203, 572, 97) + gabow.createEdge(19, 573, 12) + gabow.createEdge(460, 574, 81) + gabow.createEdge(535, 575, 14) + gabow.createEdge(32, 576, 5) + gabow.createEdge(551, 577, 83) + gabow.createEdge(45, 578, 97) + gabow.createEdge(325, 579, 20) + gabow.createEdge(556, 580, 22) + gabow.createEdge(445, 581, 64) + gabow.createEdge(114, 582, 74) + gabow.createEdge(402, 583, 15) + gabow.createEdge(426, 584, 23) + gabow.createEdge(443, 585, 24) + gabow.createEdge(399, 586, 42) + gabow.createEdge(443, 587, 68) + gabow.createEdge(554, 588, 78) + gabow.createEdge(284, 589, 52) + gabow.createEdge(565, 590, 73) + gabow.createEdge(87, 591, 48) + gabow.createEdge(11, 592, 54) + gabow.createEdge(35, 593, 27) + gabow.createEdge(111, 594, 89) + gabow.createEdge(294, 595, 42) + gabow.createEdge(106, 596, 53) + gabow.createEdge(402, 597, 48) + gabow.createEdge(597, 598, 68) + gabow.createEdge(319, 599, 79) + gabow.createEdge(47, 600, 19) + gabow.createEdge(266, 601, 79) + gabow.createEdge(214, 602, 94) + gabow.createEdge(405, 603, 92) + gabow.createEdge(358, 604, 35) + gabow.createEdge(94, 605, 75) + gabow.createEdge(16, 606, 56) + gabow.createEdge(119, 607, 19) + gabow.createEdge(131, 608, 96) + gabow.createEdge(75, 609, 46) + gabow.createEdge(14, 610, 36) + gabow.createEdge(201, 611, 68) + gabow.createEdge(337, 612, 49) + gabow.createEdge(128, 613, 82) + gabow.createEdge(18, 614, 10) + gabow.createEdge(48, 615, 90) + gabow.createEdge(182, 616, 94) + gabow.createEdge(107, 617, 55) + gabow.createEdge(70, 618, 10) + gabow.createEdge(125, 619, 94) + gabow.createEdge(484, 620, 23) + gabow.createEdge(133, 621, 65) + gabow.createEdge(49, 622, 36) + gabow.createEdge(358, 623, 71) + gabow.createEdge(330, 624, 50) + gabow.createEdge(285, 625, 72) + gabow.createEdge(481, 626, 70) + gabow.createEdge(193, 627, 40) + gabow.createEdge(394, 628, 14) + gabow.createEdge(11, 629, 21) + gabow.createEdge(549, 630, 87) + gabow.createEdge(418, 631, 92) + gabow.createEdge(576, 632, 11) + gabow.createEdge(491, 633, 72) + gabow.createEdge(251, 634, 43) + gabow.createEdge(528, 635, 57) + gabow.createEdge(138, 636, 93) + gabow.createEdge(121, 637, 66) + gabow.createEdge(573, 638, 64) + gabow.createEdge(9, 639, 32) + gabow.createEdge(507, 640, 42) + gabow.createEdge(521, 641, 80) + gabow.createEdge(197, 642, 24) + gabow.createEdge(255, 643, 20) + gabow.createEdge(259, 644, 68) + gabow.createEdge(477, 645, 57) + gabow.createEdge(101, 646, 40) + gabow.createEdge(555, 647, 17) + gabow.createEdge(14, 648, 67) + gabow.createEdge(355, 649, 78) + gabow.createEdge(230, 650, 93) + gabow.createEdge(510, 651, 73) + gabow.createEdge(17, 652, 36) + gabow.createEdge(26, 653, 88) + gabow.createEdge(442, 654, 49) + gabow.createEdge(201, 655, 67) + gabow.createEdge(450, 656, 98) + gabow.createEdge(617, 657, 25) + gabow.createEdge(353, 658, 62) + gabow.createEdge(249, 659, 91) + gabow.createEdge(201, 660, 46) + gabow.createEdge(416, 661, 73) + gabow.createEdge(545, 662, 66) + gabow.createEdge(314, 663, 74) + gabow.createEdge(155, 664, 19) + gabow.createEdge(426, 665, 79) + gabow.createEdge(71, 666, 72) + gabow.createEdge(506, 667, 35) + gabow.createEdge(512, 668, 71) + gabow.createEdge(315, 669, 94) + gabow.createEdge(157, 670, 70) + gabow.createEdge(210, 671, 16) + gabow.createEdge(94, 672, 84) + gabow.createEdge(634, 673, 20) + gabow.createEdge(631, 674, 21) + gabow.createEdge(343, 675, 48) + gabow.createEdge(75, 676, 19) + gabow.createEdge(290, 677, 51) + gabow.createEdge(137, 678, 28) + gabow.createEdge(469, 679, 93) + gabow.createEdge(573, 680, 14) + gabow.createEdge(622, 681, 68) + gabow.createEdge(538, 682, 69) + gabow.createEdge(472, 683, 89) + gabow.createEdge(658, 684, 87) + gabow.createEdge(410, 685, 54) + gabow.createEdge(422, 686, 73) + gabow.createEdge(564, 687, 65) + gabow.createEdge(475, 688, 49) + gabow.createEdge(627, 689, 8) + gabow.createEdge(22, 690, 39) + gabow.createEdge(230, 691, 51) + gabow.createEdge(558, 692, 56) + gabow.createEdge(251, 693, 17) + gabow.createEdge(342, 694, 51) + gabow.createEdge(296, 695, 37) + gabow.createEdge(531, 696, 25) + gabow.createEdge(47, 697, 2) + gabow.createEdge(201, 698, 48) + gabow.createEdge(322, 699, 11) + gabow.createEdge(291, 700, 70) + gabow.createEdge(39, 701, 92) + gabow.createEdge(264, 702, 67) + gabow.createEdge(239, 703, 93) + gabow.createEdge(300, 704, 88) + gabow.createEdge(358, 705, 63) + gabow.createEdge(106, 706, 1) + gabow.createEdge(390, 707, 53) + gabow.createEdge(531, 708, 62) + gabow.createEdge(453, 709, 78) + gabow.createEdge(497, 710, 37) + gabow.createEdge(414, 711, 7) + gabow.createEdge(33, 712, 27) + gabow.createEdge(608, 713, 48) + gabow.createEdge(370, 714, 44) + gabow.createEdge(595, 715, 76) + gabow.createEdge(699, 716, 36) + gabow.createEdge(169, 717, 93) + gabow.createEdge(464, 718, 33) + gabow.createEdge(368, 719, 92) + gabow.createEdge(78, 720, 38) + gabow.createEdge(225, 721, 53) + gabow.createEdge(110, 722, 33) + gabow.createEdge(595, 723, 4) + gabow.createEdge(262, 724, 53) + gabow.createEdge(714, 725, 40) + gabow.createEdge(93, 726, 78) + gabow.createEdge(485, 727, 26) + gabow.createEdge(281, 728, 95) + gabow.createEdge(567, 729, 86) + gabow.createEdge(120, 730, 73) + gabow.createEdge(265, 731, 18) + gabow.createEdge(359, 732, 89) + gabow.createEdge(432, 733, 47) + gabow.createEdge(450, 734, 8) + gabow.createEdge(206, 735, 18) + gabow.createEdge(166, 736, 88) + gabow.createEdge(509, 737, 60) + gabow.createEdge(467, 738, 72) + gabow.createEdge(212, 739, 73) + gabow.createEdge(592, 740, 74) + gabow.createEdge(622, 741, 57) + gabow.createEdge(589, 742, 29) + gabow.createEdge(673, 743, 55) + gabow.createEdge(440, 744, 20) + gabow.createEdge(215, 745, 19) + gabow.createEdge(707, 746, 74) + gabow.createEdge(337, 747, 76) + gabow.createEdge(178, 748, 85) + gabow.createEdge(258, 749, 49) + gabow.createEdge(382, 750, 87) + gabow.createEdge(336, 751, 71) + gabow.createEdge(237, 752, 46) + gabow.createEdge(607, 753, 68) + gabow.createEdge(478, 754, 88) + gabow.createEdge(710, 755, 94) + gabow.createEdge(364, 756, 66) + gabow.createEdge(85, 757, 11) + gabow.createEdge(396, 758, 87) + gabow.createEdge(692, 759, 27) + gabow.createEdge(118, 760, 30) + gabow.createEdge(246, 761, 23) + gabow.createEdge(343, 762, 93) + gabow.createEdge(646, 763, 71) + gabow.createEdge(743, 764, 97) + gabow.createEdge(494, 765, 50) + gabow.createEdge(705, 766, 57) + gabow.createEdge(561, 767, 32) + gabow.createEdge(413, 768, 88) + gabow.createEdge(598, 769, 66) + gabow.createEdge(191, 770, 39) + gabow.createEdge(249, 771, 54) + gabow.createEdge(12, 772, 51) + gabow.createEdge(38, 773, 77) + gabow.createEdge(272, 774, 52) + gabow.createEdge(106, 775, 41) + gabow.createEdge(77, 776, 9) + gabow.createEdge(273, 777, 22) + gabow.createEdge(473, 778, 37) + gabow.createEdge(180, 779, 54) + gabow.createEdge(506, 780, 1) + gabow.createEdge(335, 781, 11) + gabow.createEdge(731, 782, 53) + gabow.createEdge(313, 783, 32) + gabow.createEdge(736, 784, 70) + gabow.createEdge(195, 785, 94) + gabow.createEdge(19, 786, 39) + gabow.createEdge(570, 787, 49) + gabow.createEdge(240, 788, 90) + gabow.createEdge(21, 789, 76) + gabow.createEdge(671, 790, 63) + gabow.createEdge(198, 791, 73) + gabow.createEdge(32, 792, 58) + gabow.createEdge(363, 793, 56) + gabow.createEdge(363, 794, 35) + gabow.createEdge(755, 795, 42) + gabow.createEdge(6, 796, 59) + gabow.createEdge(172, 797, 34) + gabow.createEdge(536, 798, 80) + gabow.createEdge(413, 799, 41) + gabow.createEdge(792, 800, 83) + gabow.createEdge(180, 801, 38) + gabow.createEdge(317, 802, 75) + gabow.createEdge(303, 803, 24) + gabow.createEdge(40, 804, 51) + gabow.createEdge(16, 805, 83) + gabow.createEdge(109, 806, 12) + gabow.createEdge(629, 807, 52) + gabow.createEdge(519, 808, 62) + gabow.createEdge(299, 809, 62) + gabow.createEdge(335, 810, 4) + gabow.createEdge(488, 811, 9) + gabow.createEdge(140, 812, 80) + gabow.createEdge(219, 813, 9) + gabow.createEdge(318, 814, 64) + gabow.createEdge(122, 815, 48) + gabow.createEdge(782, 816, 92) + gabow.createEdge(736, 817, 37) + gabow.createEdge(178, 818, 19) + gabow.createEdge(49, 819, 71) + gabow.createEdge(296, 820, 60) + gabow.createEdge(729, 821, 62) + gabow.createEdge(25, 822, 62) + gabow.createEdge(709, 823, 26) + gabow.createEdge(42, 824, 53) + gabow.createEdge(191, 825, 50) + gabow.createEdge(481, 826, 37) + gabow.createEdge(593, 827, 55) + gabow.createEdge(409, 828, 65) + gabow.createEdge(86, 829, 56) + gabow.createEdge(73, 830, 88) + gabow.createEdge(658, 831, 65) + gabow.createEdge(301, 832, 72) + gabow.createEdge(8, 833, 63) + gabow.createEdge(498, 834, 91) + gabow.createEdge(106, 835, 13) + gabow.createEdge(36, 836, 25) + gabow.createEdge(642, 837, 19) + gabow.createEdge(767, 838, 49) + gabow.createEdge(795, 839, 66) + gabow.createEdge(835, 840, 65) + gabow.createEdge(531, 841, 12) + gabow.createEdge(686, 842, 54) + gabow.createEdge(270, 843, 3) + gabow.createEdge(728, 844, 42) + gabow.createEdge(30, 845, 33) + gabow.createEdge(282, 846, 11) + gabow.createEdge(2, 847, 22) + gabow.createEdge(49, 848, 39) + gabow.createEdge(105, 849, 62) + gabow.createEdge(621, 850, 23) + gabow.createEdge(100, 851, 13) + gabow.createEdge(774, 852, 63) + gabow.createEdge(626, 853, 52) + gabow.createEdge(526, 854, 1) + gabow.createEdge(481, 855, 80) + gabow.createEdge(90, 856, 7) + gabow.createEdge(460, 857, 75) + gabow.createEdge(554, 858, 22) + gabow.createEdge(495, 859, 10) + gabow.createEdge(811, 860, 90) + gabow.createEdge(184, 861, 73) + gabow.createEdge(208, 862, 88) + gabow.createEdge(388, 863, 22) + gabow.createEdge(421, 864, 4) + gabow.createEdge(380, 865, 84) + gabow.createEdge(762, 866, 100) + gabow.createEdge(809, 867, 98) + gabow.createEdge(782, 868, 44) + gabow.createEdge(520, 869, 13) + gabow.createEdge(163, 870, 48) + gabow.createEdge(428, 871, 75) + gabow.createEdge(221, 872, 30) + gabow.createEdge(47, 873, 47) + gabow.createEdge(30, 874, 4) + gabow.createEdge(104, 875, 42) + gabow.createEdge(127, 876, 30) + gabow.createEdge(90, 877, 11) + gabow.createEdge(306, 878, 68) + gabow.createEdge(422, 879, 89) + gabow.createEdge(591, 880, 82) + gabow.createEdge(66, 881, 15) + gabow.createEdge(248, 882, 17) + gabow.createEdge(275, 883, 93) + gabow.createEdge(52, 884, 10) + gabow.createEdge(189, 885, 35) + gabow.createEdge(420, 886, 21) + gabow.createEdge(645, 887, 47) + gabow.createEdge(834, 888, 11) + gabow.createEdge(71, 889, 40) + gabow.createEdge(524, 890, 41) + gabow.createEdge(157, 891, 10) + gabow.createEdge(721, 892, 79) + gabow.createEdge(538, 893, 50) + gabow.createEdge(125, 894, 99) + gabow.createEdge(39, 895, 7) + gabow.createEdge(566, 896, 4) + gabow.createEdge(1, 897, 52) + gabow.createEdge(99, 898, 84) + gabow.createEdge(773, 899, 69) + gabow.createEdge(622, 900, 81) + gabow.createEdge(132, 901, 63) + gabow.createEdge(770, 902, 86) + gabow.createEdge(209, 903, 77) + gabow.createEdge(680, 904, 29) + gabow.createEdge(440, 905, 57) + gabow.createEdge(181, 906, 42) + gabow.createEdge(350, 907, 9) + gabow.createEdge(368, 908, 99) + gabow.createEdge(823, 909, 38) + gabow.createEdge(57, 910, 71) + gabow.createEdge(73, 911, 48) + gabow.createEdge(83, 912, 22) + gabow.createEdge(473, 913, 2) + gabow.createEdge(731, 914, 4) + gabow.createEdge(623, 915, 72) + gabow.createEdge(830, 916, 91) + gabow.createEdge(445, 917, 38) + gabow.createEdge(572, 918, 76) + gabow.createEdge(164, 919, 58) + gabow.createEdge(404, 920, 96) + gabow.createEdge(68, 921, 71) + gabow.createEdge(270, 922, 70) + gabow.createEdge(890, 923, 21) + gabow.createEdge(47, 924, 90) + gabow.createEdge(415, 925, 63) + gabow.createEdge(687, 926, 65) + gabow.createEdge(17, 927, 95) + gabow.createEdge(769, 928, 70) + gabow.createEdge(235, 929, 22) + gabow.createEdge(498, 930, 74) + gabow.createEdge(49, 931, 61) + gabow.createEdge(311, 932, 75) + gabow.createEdge(727, 933, 72) + gabow.createEdge(748, 934, 3) + gabow.createEdge(239, 935, 100) + gabow.createEdge(875, 936, 94) + gabow.createEdge(267, 937, 41) + gabow.createEdge(216, 938, 60) + gabow.createEdge(696, 939, 58) + gabow.createEdge(120, 940, 3) + gabow.createEdge(404, 941, 19) + gabow.createEdge(38, 942, 9) + gabow.createEdge(589, 943, 45) + gabow.createEdge(93, 944, 59) + gabow.createEdge(304, 945, 95) + gabow.createEdge(87, 946, 44) + gabow.createEdge(921, 947, 51) + gabow.createEdge(495, 948, 23) + gabow.createEdge(824, 949, 29) + gabow.createEdge(940, 950, 29) + gabow.createEdge(428, 951, 12) + gabow.createEdge(102, 952, 78) + gabow.createEdge(605, 953, 13) + gabow.createEdge(602, 954, 12) + gabow.createEdge(846, 955, 24) + gabow.createEdge(579, 956, 45) + gabow.createEdge(718, 957, 82) + gabow.createEdge(905, 958, 48) + gabow.createEdge(658, 959, 11) + gabow.createEdge(477, 960, 100) + gabow.createEdge(701, 961, 9) + gabow.createEdge(920, 962, 70) + gabow.createEdge(799, 963, 40) + gabow.createEdge(787, 964, 53) + gabow.createEdge(361, 965, 91) + gabow.createEdge(869, 966, 8) + gabow.createEdge(306, 967, 80) + gabow.createEdge(779, 968, 26) + gabow.createEdge(686, 969, 85) + gabow.createEdge(640, 970, 71) + gabow.createEdge(299, 971, 15) + gabow.createEdge(371, 972, 8) + gabow.createEdge(703, 973, 20) + gabow.createEdge(105, 974, 93) + gabow.createEdge(240, 975, 70) + gabow.createEdge(241, 976, 50) + gabow.createEdge(940, 977, 11) + gabow.createEdge(161, 978, 74) + gabow.createEdge(306, 979, 67) + gabow.createEdge(147, 980, 11) + gabow.createEdge(846, 981, 29) + gabow.createEdge(545, 982, 21) + gabow.createEdge(797, 983, 75) + gabow.createEdge(566, 984, 58) + gabow.createEdge(468, 985, 97) + gabow.createEdge(784, 986, 61) + gabow.createEdge(14, 987, 14) + gabow.createEdge(371, 988, 58) + gabow.createEdge(792, 989, 5) + gabow.createEdge(14, 990, 26) + gabow.createEdge(443, 991, 95) + gabow.createEdge(403, 992, 58) + gabow.createEdge(2, 993, 99) + gabow.createEdge(438, 994, 100) + gabow.createEdge(362, 995, 82) + gabow.createEdge(134, 996, 95) + gabow.createEdge(658, 997, 53) + gabow.createEdge(418, 998, 51) + gabow.createEdge(968, 999, 5) + gabow.createEdge(616, 1000, 20) + gabow.createEdge(220, 1001, 19) + gabow.createEdge(595, 1002, 45) + gabow.createEdge(238, 1003, 9) + gabow.createEdge(945, 1004, 89) + gabow.createEdge(941, 1005, 42) + gabow.createEdge(366, 1006, 3) + gabow.createEdge(890, 1007, 95) + gabow.createEdge(405, 1008, 1) + gabow.createEdge(210, 1009, 49) + gabow.createEdge(1002, 1010, 30) + gabow.createEdge(488, 1011, 95) + gabow.createEdge(278, 1012, 77) + gabow.createEdge(801, 1013, 2) + gabow.createEdge(42, 1014, 50) + gabow.createEdge(395, 1015, 57) + gabow.createEdge(691, 1016, 61) + gabow.createEdge(308, 1017, 53) + gabow.createEdge(431, 1018, 76) + gabow.createEdge(805, 1019, 41) + gabow.createEdge(370, 1020, 33) + gabow.createEdge(26, 1021, 63) + gabow.createEdge(141, 1022, 100) + gabow.createEdge(992, 1023, 29) + gabow.createEdge(694, 1024, 10) + gabow.createEdge(446, 1025, 42) + gabow.createEdge(447, 1026, 16) + gabow.createEdge(826, 1027, 27) + gabow.createEdge(455, 1028, 52) + gabow.createEdge(1019, 1029, 2) + gabow.createEdge(418, 1030, 3) + gabow.createEdge(305, 1031, 65) + gabow.createEdge(294, 1032, 89) + gabow.createEdge(660, 1033, 100) + gabow.createEdge(312, 1034, 22) + gabow.createEdge(194, 1035, 26) + gabow.createEdge(838, 1036, 19) + gabow.createEdge(880, 1037, 92) + gabow.createEdge(59, 1038, 68) + gabow.createEdge(261, 1039, 17) + gabow.createEdge(795, 1040, 31) + gabow.createEdge(7, 1041, 33) + gabow.createEdge(171, 1042, 13) + gabow.createEdge(400, 1043, 60) + gabow.createEdge(100, 1044, 64) + gabow.createEdge(163, 1045, 52) + gabow.createEdge(885, 1046, 55) + gabow.createEdge(753, 1047, 58) + gabow.createEdge(423, 1048, 98) + gabow.createEdge(207, 1049, 93) + gabow.createEdge(138, 1050, 70) + gabow.createEdge(988, 1051, 77) + gabow.createEdge(120, 1052, 95) + gabow.createEdge(446, 1053, 7) + gabow.createEdge(814, 1054, 11) + gabow.createEdge(559, 1055, 86) + gabow.createEdge(127, 1056, 62) + gabow.createEdge(681, 1057, 59) + gabow.createEdge(62, 1058, 55) + gabow.createEdge(680, 1059, 59) + gabow.createEdge(465, 1060, 96) + gabow.createEdge(761, 1061, 67) + gabow.createEdge(812, 1062, 69) + gabow.createEdge(83, 1063, 74) + gabow.createEdge(489, 1064, 81) + gabow.createEdge(656, 1065, 42) + gabow.createEdge(644, 1066, 94) + gabow.createEdge(445, 1067, 26) + gabow.createEdge(649, 1068, 86) + gabow.createEdge(751, 1069, 60) + gabow.createEdge(567, 1070, 51) + gabow.createEdge(383, 1071, 60) + gabow.createEdge(237, 1072, 23) + gabow.createEdge(203, 1073, 71) + gabow.createEdge(902, 1074, 42) + gabow.createEdge(779, 1075, 45) + gabow.createEdge(716, 1076, 52) + gabow.createEdge(476, 1077, 99) + gabow.createEdge(323, 1078, 69) + gabow.createEdge(743, 1079, 100) + gabow.createEdge(537, 1080, 69) + gabow.createEdge(527, 1081, 8) + gabow.createEdge(500, 1082, 10) + gabow.createEdge(128, 1083, 54) + gabow.createEdge(943, 1084, 20) + gabow.createEdge(524, 1085, 35) + gabow.createEdge(743, 1086, 85) + gabow.createEdge(408, 1087, 60) + gabow.createEdge(555, 1088, 28) + gabow.createEdge(584, 1089, 76) + gabow.createEdge(124, 1090, 7) + gabow.createEdge(523, 1091, 34) + gabow.createEdge(1031, 1092, 82) + gabow.createEdge(597, 1093, 49) + gabow.createEdge(549, 1094, 94) + gabow.createEdge(430, 1095, 34) + gabow.createEdge(522, 1096, 34) + gabow.createEdge(129, 1097, 40) + gabow.createEdge(413, 1098, 27) + gabow.createEdge(995, 1099, 93) + gabow.createEdge(1053, 1100, 39) + gabow.createEdge(610, 1101, 90) + gabow.createEdge(501, 1102, 8) + gabow.createEdge(141, 1103, 15) + gabow.createEdge(814, 1104, 52) + gabow.createEdge(379, 1105, 92) + gabow.createEdge(722, 1106, 1) + gabow.createEdge(256, 1107, 40) + gabow.createEdge(101, 1108, 82) + gabow.createEdge(795, 1109, 79) + gabow.createEdge(28, 1110, 95) + gabow.createEdge(936, 1111, 77) + gabow.createEdge(955, 1112, 96) + gabow.createEdge(991, 1113, 55) + gabow.createEdge(369, 1114, 22) + gabow.createEdge(1001, 1115, 18) + gabow.createEdge(331, 1116, 67) + gabow.createEdge(647, 1117, 90) + gabow.createEdge(179, 1118, 32) + gabow.createEdge(872, 1119, 33) + gabow.createEdge(37, 1120, 11) + gabow.createEdge(792, 1121, 30) + gabow.createEdge(1078, 1122, 56) + gabow.createEdge(761, 1123, 62) + gabow.createEdge(87, 1124, 90) + gabow.createEdge(489, 1125, 65) + gabow.createEdge(601, 1126, 49) + gabow.createEdge(347, 1127, 35) + gabow.createEdge(356, 1128, 11) + gabow.createEdge(493, 1129, 51) + gabow.createEdge(673, 1130, 54) + gabow.createEdge(903, 1131, 55) + gabow.createEdge(488, 1132, 33) + gabow.createEdge(855, 1133, 84) + gabow.createEdge(903, 1134, 1) + gabow.createEdge(502, 1135, 74) + gabow.createEdge(1020, 1136, 14) + gabow.createEdge(1033, 1137, 67) + gabow.createEdge(510, 1138, 28) + gabow.createEdge(982, 1139, 59) + gabow.createEdge(779, 1140, 45) + gabow.createEdge(724, 1141, 83) + gabow.createEdge(675, 1142, 64) + gabow.createEdge(603, 1143, 8) + gabow.createEdge(142, 1144, 54) + gabow.createEdge(846, 1145, 58) + gabow.createEdge(275, 1146, 92) + gabow.createEdge(628, 1147, 20) + gabow.createEdge(810, 1148, 12) + gabow.createEdge(119, 1149, 92) + gabow.createEdge(975, 1150, 13) + gabow.createEdge(781, 1151, 74) + gabow.createEdge(541, 1152, 57) + gabow.createEdge(646, 1153, 22) + gabow.createEdge(433, 1154, 4) + gabow.createEdge(845, 1155, 1) + gabow.createEdge(660, 1156, 2) + gabow.createEdge(859, 1157, 82) + gabow.createEdge(1057, 1158, 81) + gabow.createEdge(868, 1159, 54) + gabow.createEdge(107, 1160, 1) + gabow.createEdge(130, 1161, 19) + gabow.createEdge(182, 1162, 22) + gabow.createEdge(1120, 1163, 40) + gabow.createEdge(92, 1164, 78) + gabow.createEdge(1127, 1165, 45) + gabow.createEdge(395, 1166, 38) + gabow.createEdge(1025, 1167, 93) + gabow.createEdge(569, 1168, 76) + gabow.createEdge(161, 1169, 71) + gabow.createEdge(75, 1170, 26) + gabow.createEdge(376, 1171, 69) + gabow.createEdge(470, 1172, 7) + gabow.createEdge(1030, 1173, 77) + gabow.createEdge(872, 1174, 11) + gabow.createEdge(24, 1175, 31) + gabow.createEdge(707, 1176, 16) + gabow.createEdge(616, 1177, 35) + gabow.createEdge(321, 1178, 96) + gabow.createEdge(504, 1179, 73) + gabow.createEdge(286, 1180, 36) + gabow.createEdge(224, 1181, 82) + gabow.createEdge(148, 1182, 41) + gabow.createEdge(579, 1183, 72) + gabow.createEdge(800, 1184, 75) + gabow.createEdge(1019, 1185, 2) + gabow.createEdge(285, 1186, 76) + gabow.createEdge(995, 1187, 74) + gabow.createEdge(127, 1188, 10) + gabow.createEdge(1120, 1189, 50) + gabow.createEdge(493, 1190, 87) + gabow.createEdge(179, 1191, 99) + gabow.createEdge(991, 1192, 19) + gabow.createEdge(1176, 1193, 72) + gabow.createEdge(1024, 1194, 5) + gabow.createEdge(556, 1195, 14) + gabow.createEdge(82, 1196, 52) + gabow.createEdge(686, 1197, 74) + gabow.createEdge(312, 1198, 60) + gabow.createEdge(291, 1199, 18) + gabow.createEdge(881, 1200, 54) + gabow.createEdge(852, 1201, 32) + gabow.createEdge(580, 1202, 67) + gabow.createEdge(881, 1203, 39) + gabow.createEdge(841, 1204, 14) + gabow.createEdge(376, 1205, 89) + gabow.createEdge(162, 1206, 64) + gabow.createEdge(1151, 1207, 32) + gabow.createEdge(291, 1208, 4) + gabow.createEdge(267, 1209, 54) + gabow.createEdge(593, 1210, 9) + gabow.createEdge(960, 1211, 37) + gabow.createEdge(358, 1212, 20) + gabow.createEdge(74, 1213, 89) + gabow.createEdge(1129, 1214, 37) + gabow.createEdge(767, 1215, 95) + gabow.createEdge(724, 1216, 62) + gabow.createEdge(1034, 1217, 23) + gabow.createEdge(1015, 1218, 75) + gabow.createEdge(719, 1219, 50) + gabow.createEdge(897, 1220, 55) + gabow.createEdge(795, 1221, 83) + gabow.createEdge(1057, 1222, 92) + gabow.createEdge(1088, 1223, 42) + gabow.createEdge(283, 1224, 88) + gabow.createEdge(752, 1225, 54) + gabow.createEdge(340, 1226, 89) + gabow.createEdge(689, 1227, 55) + gabow.createEdge(534, 1228, 44) + gabow.createEdge(788, 1229, 62) + gabow.createEdge(720, 1230, 54) + gabow.createEdge(687, 1231, 79) + gabow.createEdge(1075, 1232, 67) + gabow.createEdge(487, 1233, 43) + gabow.createEdge(981, 1234, 38) + gabow.createEdge(998, 1235, 36) + gabow.createEdge(892, 1236, 55) + gabow.createEdge(84, 1237, 1) + gabow.createEdge(1080, 1238, 69) + gabow.createEdge(748, 1239, 61) + gabow.createEdge(220, 1240, 33) + gabow.createEdge(1102, 1241, 58) + gabow.createEdge(943, 1242, 41) + gabow.createEdge(658, 1243, 17) + gabow.createEdge(214, 1244, 42) + gabow.createEdge(119, 1245, 14) + gabow.createEdge(1171, 1246, 30) + gabow.createEdge(727, 1247, 6) + gabow.createEdge(991, 1248, 1) + gabow.createEdge(932, 1249, 24) + gabow.createEdge(320, 1250, 37) + gabow.createEdge(642, 1251, 71) + gabow.createEdge(634, 1252, 57) + gabow.createEdge(420, 1253, 68) + gabow.createEdge(536, 1254, 20) + gabow.createEdge(1217, 1255, 94) + gabow.createEdge(965, 1256, 25) + gabow.createEdge(1190, 1257, 81) + gabow.createEdge(67, 1258, 39) + gabow.createEdge(1191, 1259, 16) + gabow.createEdge(778, 1260, 56) + gabow.createEdge(262, 1261, 32) + gabow.createEdge(1076, 1262, 51) + gabow.createEdge(542, 1263, 48) + gabow.createEdge(1009, 1264, 14) + gabow.createEdge(1177, 1265, 85) + gabow.createEdge(534, 1266, 38) + gabow.createEdge(1263, 1267, 31) + gabow.createEdge(959, 1268, 32) + gabow.createEdge(265, 1269, 89) + gabow.createEdge(1065, 1270, 1) + gabow.createEdge(1051, 1271, 75) + gabow.createEdge(681, 1272, 38) + gabow.createEdge(609, 1273, 63) + gabow.createEdge(820, 1274, 83) + gabow.createEdge(398, 1275, 31) + gabow.createEdge(118, 1276, 30) + gabow.createEdge(581, 1277, 3) + gabow.createEdge(809, 1278, 38) + gabow.createEdge(415, 1279, 72) + gabow.createEdge(228, 1280, 18) + gabow.createEdge(1266, 1281, 78) + gabow.createEdge(1230, 1282, 78) + gabow.createEdge(578, 1283, 14) + gabow.createEdge(1235, 1284, 37) + gabow.createEdge(912, 1285, 1) + gabow.createEdge(246, 1286, 69) + gabow.createEdge(22, 1287, 24) + gabow.createEdge(483, 1288, 5) + gabow.createEdge(1264, 1289, 78) + gabow.createEdge(638, 1290, 21) + gabow.createEdge(543, 1291, 37) + gabow.createEdge(1143, 1292, 5) + gabow.createEdge(1114, 1293, 42) + gabow.createEdge(789, 1294, 89) + gabow.createEdge(221, 1295, 85) + gabow.createEdge(606, 1296, 26) + gabow.createEdge(974, 1297, 7) + gabow.createEdge(1200, 1298, 16) + gabow.createEdge(1039, 1299, 57) + gabow.createEdge(108, 1300, 63) + gabow.createEdge(826, 1301, 100) + gabow.createEdge(377, 1302, 6) + gabow.createEdge(144, 1303, 91) + gabow.createEdge(793, 1304, 15) + gabow.createEdge(648, 1305, 78) + gabow.createEdge(92, 1306, 14) + gabow.createEdge(513, 1307, 8) + gabow.createEdge(362, 1308, 25) + gabow.createEdge(676, 1309, 95) + gabow.createEdge(13, 1310, 14) + gabow.createEdge(1256, 1311, 27) + gabow.createEdge(9, 1312, 75) + gabow.createEdge(887, 1313, 24) + gabow.createEdge(967, 1314, 77) + gabow.createEdge(778, 1315, 81) + gabow.createEdge(176, 1316, 54) + gabow.createEdge(423, 1317, 27) + gabow.createEdge(93, 1318, 78) + gabow.createEdge(1222, 1319, 91) + gabow.createEdge(1168, 1320, 99) + gabow.createEdge(901, 1321, 72) + gabow.createEdge(1288, 1322, 73) + gabow.createEdge(39, 1323, 94) + gabow.createEdge(66, 1324, 19) + gabow.createEdge(1239, 1325, 30) + gabow.createEdge(1068, 1326, 83) + gabow.createEdge(778, 1327, 55) + gabow.createEdge(823, 1328, 41) + gabow.createEdge(405, 1329, 74) + gabow.createEdge(523, 1330, 46) + gabow.createEdge(699, 1331, 9) + gabow.createEdge(1172, 1332, 48) + gabow.createEdge(1098, 1333, 27) + gabow.createEdge(1122, 1334, 19) + gabow.createEdge(551, 1335, 83) + gabow.createEdge(23, 1336, 65) + gabow.createEdge(1170, 1337, 22) + gabow.createEdge(279, 1338, 84) + gabow.createEdge(9, 1339, 8) + gabow.createEdge(293, 1340, 46) + gabow.createEdge(718, 1341, 78) + gabow.createEdge(120, 1342, 1) + gabow.createEdge(219, 1343, 42) + gabow.createEdge(1101, 1344, 47) + gabow.createEdge(943, 1345, 9) + gabow.createEdge(398, 1346, 80) + gabow.createEdge(147, 1347, 46) + gabow.createEdge(683, 1348, 3) + gabow.createEdge(764, 1349, 13) + gabow.createEdge(1000, 1350, 83) + gabow.createEdge(1269, 1351, 86) + gabow.createEdge(62, 1352, 63) + gabow.createEdge(970, 1353, 40) + gabow.createEdge(760, 1354, 81) + gabow.createEdge(853, 1355, 41) + gabow.createEdge(603, 1356, 25) + gabow.createEdge(91, 1357, 16) + gabow.createEdge(373, 1358, 64) + gabow.createEdge(1005, 1359, 38) + gabow.createEdge(1056, 1360, 24) + gabow.createEdge(329, 1361, 6) + gabow.createEdge(840, 1362, 65) + gabow.createEdge(560, 1363, 18) + gabow.createEdge(19, 1364, 17) + gabow.createEdge(908, 1365, 34) + gabow.createEdge(671, 1366, 91) + gabow.createEdge(316, 1367, 56) + gabow.createEdge(856, 1368, 9) + gabow.createEdge(143, 1369, 72) + gabow.createEdge(1327, 1370, 13) + gabow.createEdge(457, 1371, 8) + gabow.createEdge(1207, 1372, 16) + gabow.createEdge(723, 1373, 12) + gabow.createEdge(242, 1374, 96) + gabow.createEdge(1175, 1375, 5) + gabow.createEdge(524, 1376, 57) + gabow.createEdge(248, 1377, 69) + gabow.createEdge(1187, 1378, 98) + gabow.createEdge(978, 1379, 91) + gabow.createEdge(269, 1380, 96) + gabow.createEdge(743, 1381, 45) + gabow.createEdge(538, 1382, 8) + gabow.createEdge(1117, 1383, 19) + gabow.createEdge(1068, 1384, 18) + gabow.createEdge(565, 1385, 30) + gabow.createEdge(482, 1386, 17) + gabow.createEdge(541, 1387, 81) + gabow.createEdge(82, 1388, 5) + gabow.createEdge(1009, 1389, 16) + gabow.createEdge(75, 1390, 23) + gabow.createEdge(909, 1391, 56) + gabow.createEdge(1076, 1392, 65) + gabow.createEdge(1288, 1393, 43) + gabow.createEdge(1275, 1394, 82) + gabow.createEdge(767, 1395, 66) + gabow.createEdge(1266, 1396, 36) + gabow.createEdge(677, 1397, 52) + gabow.createEdge(1359, 1398, 47) + gabow.createEdge(43, 1399, 84) + gabow.createEdge(989, 1400, 93) + gabow.createEdge(1040, 1401, 22) + gabow.createEdge(434, 1402, 36) + gabow.createEdge(634, 1403, 19) + gabow.createEdge(476, 1404, 20) + gabow.createEdge(460, 1405, 70) + gabow.createEdge(844, 1406, 47) + gabow.createEdge(1300, 1407, 39) + gabow.createEdge(653, 1408, 16) + gabow.createEdge(1140, 1409, 58) + gabow.createEdge(1198, 1410, 58) + gabow.createEdge(314, 1411, 30) + gabow.createEdge(520, 1412, 3) + gabow.createEdge(513, 1413, 81) + gabow.createEdge(210, 1414, 62) + gabow.createEdge(227, 1415, 19) + gabow.createEdge(1162, 1416, 81) + gabow.createEdge(1217, 1417, 31) + gabow.createEdge(1316, 1418, 80) + gabow.createEdge(307, 1419, 76) + gabow.createEdge(89, 1420, 68) + gabow.createEdge(642, 1421, 13) + gabow.createEdge(872, 1422, 91) + gabow.createEdge(219, 1423, 41) + gabow.createEdge(1402, 1424, 24) + gabow.createEdge(1339, 1425, 47) + gabow.createEdge(837, 1426, 6) + gabow.createEdge(992, 1427, 18) + gabow.createEdge(654, 1428, 40) + gabow.createEdge(828, 1429, 78) + gabow.createEdge(473, 1430, 9) + gabow.createEdge(1151, 1431, 74) + gabow.createEdge(872, 1432, 71) + gabow.createEdge(1067, 1433, 79) + gabow.createEdge(1087, 1434, 57) + gabow.createEdge(1431, 1435, 67) + gabow.createEdge(1294, 1436, 98) + gabow.createEdge(319, 1437, 3) + gabow.createEdge(873, 1438, 51) + gabow.createEdge(966, 1439, 82) + gabow.createEdge(643, 1440, 11) + gabow.createEdge(708, 1441, 21) + gabow.createEdge(1433, 1442, 16) + gabow.createEdge(205, 1443, 83) + gabow.createEdge(91, 1444, 30) + gabow.createEdge(965, 1445, 67) + gabow.createEdge(15, 1446, 76) + gabow.createEdge(909, 1447, 63) + gabow.createEdge(660, 1448, 70) + gabow.createEdge(760, 1449, 71) + gabow.createEdge(1432, 1450, 62) + gabow.createEdge(1317, 1451, 91) + gabow.createEdge(511, 1452, 75) + gabow.createEdge(1398, 1453, 41) + gabow.createEdge(207, 1454, 74) + gabow.createEdge(942, 1455, 34) + gabow.createEdge(135, 1456, 41) + gabow.createEdge(566, 1457, 98) + gabow.createEdge(379, 1458, 10) + gabow.createEdge(628, 1459, 25) + gabow.createEdge(521, 1460, 77) + gabow.createEdge(1353, 1461, 97) + gabow.createEdge(897, 1462, 43) + gabow.createEdge(559, 1463, 85) + gabow.createEdge(147, 1464, 81) + gabow.createEdge(518, 1465, 33) + gabow.createEdge(249, 1466, 71) + gabow.createEdge(334, 1467, 87) + gabow.createEdge(630, 1468, 77) + gabow.createEdge(158, 1469, 19) + gabow.createEdge(237, 1470, 91) + gabow.createEdge(1010, 1471, 22) + gabow.createEdge(543, 1472, 95) + gabow.createEdge(1244, 1473, 14) + gabow.createEdge(848, 1474, 46) + gabow.createEdge(1094, 1475, 56) + gabow.createEdge(1072, 1476, 56) + gabow.createEdge(206, 1477, 73) + gabow.createEdge(356, 1478, 92) + gabow.createEdge(903, 1479, 59) + gabow.createEdge(923, 1480, 63) + gabow.createEdge(1247, 1481, 51) + gabow.createEdge(639, 1482, 75) + gabow.createEdge(243, 1483, 71) + gabow.createEdge(437, 1484, 68) + gabow.createEdge(930, 1485, 75) + gabow.createEdge(534, 1486, 3) + gabow.createEdge(340, 1487, 93) + gabow.createEdge(103, 1488, 47) + gabow.createEdge(984, 1489, 3) + gabow.createEdge(1213, 1490, 67) + gabow.createEdge(805, 1491, 81) + gabow.createEdge(321, 1492, 5) + gabow.createEdge(502, 1493, 67) + gabow.createEdge(777, 1494, 78) + gabow.createEdge(1275, 1495, 63) + gabow.createEdge(188, 1496, 75) + gabow.createEdge(9, 1497, 66) + gabow.createEdge(1223, 1498, 41) + gabow.createEdge(1056, 1499, 92) + gabow.createEdge(622, 1500, 6) + gabow.createEdge(579, 1501, 34) + gabow.createEdge(1276, 1502, 71) + gabow.createEdge(1224, 1503, 60) + gabow.createEdge(1010, 1504, 42) + gabow.createEdge(139, 1505, 90) + gabow.createEdge(59, 1506, 31) + gabow.createEdge(761, 1507, 41) + gabow.createEdge(971, 1508, 36) + gabow.createEdge(1348, 1509, 22) + gabow.createEdge(797, 1510, 30) + gabow.createEdge(75, 1511, 62) + gabow.createEdge(927, 1512, 36) + gabow.createEdge(19, 1513, 49) + gabow.createEdge(266, 1514, 62) + gabow.createEdge(565, 1515, 10) + gabow.createEdge(1447, 1516, 33) + gabow.createEdge(879, 1517, 64) + gabow.createEdge(1488, 1518, 98) + gabow.createEdge(117, 1519, 68) + gabow.createEdge(575, 1520, 21) + gabow.createEdge(1021, 1521, 48) + gabow.createEdge(685, 1522, 36) + gabow.createEdge(1099, 1523, 33) + gabow.createEdge(1141, 1524, 45) + gabow.createEdge(627, 1525, 77) + gabow.createEdge(460, 1526, 35) + gabow.createEdge(588, 1527, 41) + gabow.createEdge(682, 1528, 51) + gabow.createEdge(468, 1529, 74) + gabow.createEdge(910, 1530, 51) + gabow.createEdge(1278, 1531, 46) + gabow.createEdge(1201, 1532, 29) + gabow.createEdge(598, 1533, 57) + gabow.createEdge(1448, 1534, 89) + gabow.createEdge(607, 1535, 20) + gabow.createEdge(523, 1536, 71) + gabow.createEdge(1257, 1537, 84) + gabow.createEdge(686, 1538, 72) + gabow.createEdge(41, 1539, 48) + gabow.createEdge(1202, 1540, 26) + gabow.createEdge(1076, 1541, 74) + gabow.createEdge(1412, 1542, 40) + gabow.createEdge(282, 1543, 7) + gabow.createEdge(1428, 1544, 33) + gabow.createEdge(1295, 1545, 39) + gabow.createEdge(662, 1546, 59) + gabow.createEdge(219, 1547, 99) + gabow.createEdge(1290, 1548, 48) + gabow.createEdge(500, 1549, 31) + gabow.createEdge(1040, 1550, 8) + gabow.createEdge(138, 1551, 50) + gabow.createEdge(888, 1552, 25) + gabow.createEdge(594, 1553, 5) + gabow.createEdge(523, 1554, 2) + gabow.createEdge(790, 1555, 62) + gabow.createEdge(277, 1556, 8) + gabow.createEdge(1447, 1557, 3) + gabow.createEdge(1349, 1558, 44) + gabow.createEdge(172, 1559, 99) + gabow.createEdge(677, 1560, 81) + gabow.createEdge(1285, 1561, 81) + gabow.createEdge(621, 1562, 60) + gabow.createEdge(1307, 1563, 59) + gabow.createEdge(1222, 1564, 56) + gabow.createEdge(1009, 1565, 97) + gabow.createEdge(575, 1566, 5) + gabow.createEdge(1308, 1567, 56) + gabow.createEdge(1151, 1568, 25) + gabow.createEdge(1418, 1569, 87) + gabow.createEdge(486, 1570, 11) + gabow.createEdge(651, 1571, 56) + gabow.createEdge(1564, 1572, 3) + gabow.createEdge(152, 1573, 11) + gabow.createEdge(570, 1574, 41) + gabow.createEdge(1392, 1575, 51) + gabow.createEdge(865, 1576, 58) + gabow.createEdge(304, 1577, 7) + gabow.createEdge(307, 1578, 35) + gabow.createEdge(34, 1579, 75) + gabow.createEdge(1045, 1580, 4) + gabow.createEdge(712, 1581, 95) + gabow.createEdge(781, 1582, 38) + gabow.createEdge(339, 1583, 13) + gabow.createEdge(1135, 1584, 83) + gabow.createEdge(680, 1585, 39) + gabow.createEdge(784, 1586, 19) + gabow.createEdge(354, 1587, 24) + gabow.createEdge(583, 1588, 45) + gabow.createEdge(207, 1589, 46) + gabow.createEdge(289, 1590, 36) + gabow.createEdge(217, 1591, 55) + gabow.createEdge(87, 1592, 56) + gabow.createEdge(1035, 1593, 86) + gabow.createEdge(1555, 1594, 41) + gabow.createEdge(665, 1595, 93) + gabow.createEdge(838, 1596, 15) + gabow.createEdge(45, 1597, 57) + gabow.createEdge(1226, 1598, 27) + gabow.createEdge(833, 1599, 61) + gabow.createEdge(302, 1600, 94) + gabow.createEdge(1382, 1601, 32) + gabow.createEdge(1442, 1602, 57) + gabow.createEdge(458, 1603, 72) + gabow.createEdge(554, 1604, 13) + gabow.createEdge(1019, 1605, 72) + gabow.createEdge(224, 1606, 36) + gabow.createEdge(598, 1607, 87) + gabow.createEdge(990, 1608, 11) + gabow.createEdge(1326, 1609, 68) + gabow.createEdge(849, 1610, 27) + gabow.createEdge(808, 1611, 68) + gabow.createEdge(659, 1612, 87) + gabow.createEdge(677, 1613, 19) + gabow.createEdge(316, 1614, 56) + gabow.createEdge(353, 1615, 83) + gabow.createEdge(1384, 1616, 95) + gabow.createEdge(862, 1617, 35) + gabow.createEdge(1226, 1618, 94) + gabow.createEdge(49, 1619, 53) + gabow.createEdge(190, 1620, 75) + gabow.createEdge(808, 1621, 10) + gabow.createEdge(749, 1622, 61) + gabow.createEdge(1390, 1623, 5) + gabow.createEdge(3, 1624, 55) + gabow.createEdge(442, 1625, 100) + gabow.createEdge(1207, 1626, 56) + gabow.createEdge(557, 1627, 81) + gabow.createEdge(629, 1628, 89) + gabow.createEdge(435, 1629, 69) + gabow.createEdge(56, 1630, 34) + gabow.createEdge(335, 1631, 48) + gabow.createEdge(468, 1632, 29) + gabow.createEdge(1250, 1633, 11) + gabow.createEdge(1401, 1634, 80) + gabow.createEdge(628, 1635, 59) + gabow.createEdge(489, 1636, 44) + gabow.createEdge(1269, 1637, 84) + gabow.createEdge(1551, 1638, 93) + gabow.createEdge(143, 1639, 9) + gabow.createEdge(140, 1640, 41) + gabow.createEdge(271, 1641, 36) + gabow.createEdge(1271, 1642, 64) + gabow.createEdge(951, 1643, 87) + gabow.createEdge(1300, 1644, 47) + gabow.createEdge(1483, 1645, 64) + gabow.createEdge(568, 1646, 20) + gabow.createEdge(1252, 1647, 100) + gabow.createEdge(1452, 1648, 41) + gabow.createEdge(526, 1649, 62) + gabow.createEdge(721, 1650, 3) + gabow.createEdge(355, 1651, 47) + gabow.createEdge(630, 1652, 93) + gabow.createEdge(806, 1653, 76) + gabow.createEdge(900, 1654, 95) + gabow.createEdge(1371, 1655, 62) + gabow.createEdge(826, 1656, 49) + gabow.createEdge(1503, 1657, 61) + gabow.createEdge(1009, 1658, 4) + gabow.createEdge(836, 1659, 11) + gabow.createEdge(107, 1660, 100) + gabow.createEdge(1500, 1661, 32) + gabow.createEdge(884, 1662, 24) + gabow.createEdge(878, 1663, 46) + gabow.createEdge(666, 1664, 63) + gabow.createEdge(1157, 1665, 35) + gabow.createEdge(1326, 1666, 57) + gabow.createEdge(190, 1667, 1) + gabow.createEdge(680, 1668, 88) + gabow.createEdge(818, 1669, 17) + gabow.createEdge(1130, 1670, 48) + gabow.createEdge(1192, 1671, 57) + gabow.createEdge(1545, 1672, 84) + gabow.createEdge(958, 1673, 57) + gabow.createEdge(758, 1674, 70) + gabow.createEdge(1413, 1675, 95) + gabow.createEdge(810, 1676, 13) + gabow.createEdge(723, 1677, 76) + gabow.createEdge(1486, 1678, 1) + gabow.createEdge(1151, 1679, 88) + gabow.createEdge(1606, 1680, 96) + gabow.createEdge(104, 1681, 99) + gabow.createEdge(371, 1682, 49) + gabow.createEdge(1244, 1683, 61) + gabow.createEdge(65, 1684, 16) + gabow.createEdge(339, 1685, 43) + gabow.createEdge(19, 1686, 63) + gabow.createEdge(1032, 1687, 52) + gabow.createEdge(893, 1688, 47) + gabow.createEdge(1114, 1689, 1) + gabow.createEdge(1199, 1690, 94) + gabow.createEdge(175, 1691, 83) + gabow.createEdge(82, 1692, 95) + gabow.createEdge(1049, 1693, 38) + gabow.createEdge(1428, 1694, 74) + gabow.createEdge(1249, 1695, 99) + gabow.createEdge(284, 1696, 40) + gabow.createEdge(863, 1697, 22) + gabow.createEdge(976, 1698, 20) + gabow.createEdge(995, 1699, 53) + gabow.createEdge(678, 1700, 89) + gabow.createEdge(1414, 1701, 12) + gabow.createEdge(1523, 1702, 55) + gabow.createEdge(1115, 1703, 76) + gabow.createEdge(512, 1704, 10) + gabow.createEdge(1431, 1705, 16) + gabow.createEdge(924, 1706, 18) + gabow.createEdge(100, 1707, 80) + gabow.createEdge(275, 1708, 76) + gabow.createEdge(308, 1709, 52) + gabow.createEdge(444, 1710, 47) + gabow.createEdge(454, 1711, 78) + gabow.createEdge(1703, 1712, 32) + gabow.createEdge(269, 1713, 88) + gabow.createEdge(294, 1714, 4) + gabow.createEdge(1293, 1715, 70) + gabow.createEdge(1344, 1716, 29) + gabow.createEdge(1490, 1717, 71) + gabow.createEdge(755, 1718, 8) + gabow.createEdge(317, 1719, 93) + gabow.createEdge(147, 1720, 60) + gabow.createEdge(1403, 1721, 53) + gabow.createEdge(432, 1722, 68) + gabow.createEdge(1238, 1723, 11) + gabow.createEdge(1337, 1724, 60) + gabow.createEdge(1580, 1725, 70) + gabow.createEdge(1067, 1726, 26) + gabow.createEdge(646, 1727, 68) + gabow.createEdge(1349, 1728, 73) + gabow.createEdge(1055, 1729, 60) + gabow.createEdge(108, 1730, 13) + gabow.createEdge(1191, 1731, 37) + gabow.createEdge(1389, 1732, 1) + gabow.createEdge(613, 1733, 82) + gabow.createEdge(1389, 1734, 24) + gabow.createEdge(1545, 1735, 34) + gabow.createEdge(769, 1736, 39) + gabow.createEdge(1661, 1737, 3) + gabow.createEdge(1359, 1738, 65) + gabow.createEdge(235, 1739, 90) + gabow.createEdge(508, 1740, 33) + gabow.createEdge(1366, 1741, 47) + gabow.createEdge(168, 1742, 69) + gabow.createEdge(1288, 1743, 51) + gabow.createEdge(551, 1744, 14) + gabow.createEdge(365, 1745, 20) + gabow.createEdge(1661, 1746, 74) + gabow.createEdge(58, 1747, 29) + gabow.createEdge(1573, 1748, 66) + gabow.createEdge(1631, 1749, 40) + gabow.createEdge(77, 1750, 81) + gabow.createEdge(1488, 1751, 60) + gabow.createEdge(586, 1752, 90) + gabow.createEdge(1451, 1753, 27) + gabow.createEdge(167, 1754, 72) + gabow.createEdge(323, 1755, 18) + gabow.createEdge(1121, 1756, 87) + gabow.createEdge(1749, 1757, 24) + gabow.createEdge(950, 1758, 20) + gabow.createEdge(688, 1759, 11) + gabow.createEdge(1040, 1760, 58) + gabow.createEdge(252, 1761, 20) + gabow.createEdge(126, 1762, 81) + gabow.createEdge(795, 1763, 89) + gabow.createEdge(1138, 1764, 1) + gabow.createEdge(1701, 1765, 35) + gabow.createEdge(482, 1766, 57) + gabow.createEdge(1267, 1767, 30) + gabow.createEdge(631, 1768, 91) + gabow.createEdge(131, 1769, 37) + gabow.createEdge(340, 1770, 94) + gabow.createEdge(493, 1771, 31) + gabow.createEdge(572, 1772, 48) + gabow.createEdge(416, 1773, 57) + gabow.createEdge(1297, 1774, 77) + gabow.createEdge(1284, 1775, 87) + gabow.createEdge(330, 1776, 79) + gabow.createEdge(1583, 1777, 42) + gabow.createEdge(1589, 1778, 97) + gabow.createEdge(1249, 1779, 94) + gabow.createEdge(1388, 1780, 52) + gabow.createEdge(731, 1781, 6) + gabow.createEdge(1425, 1782, 63) + gabow.createEdge(710, 1783, 64) + gabow.createEdge(309, 1784, 83) + gabow.createEdge(525, 1785, 25) + gabow.createEdge(126, 1786, 32) + gabow.createEdge(1362, 1787, 17) + gabow.createEdge(1117, 1788, 48) + gabow.createEdge(1112, 1789, 86) + gabow.createEdge(611, 1790, 5) + gabow.createEdge(1455, 1791, 38) + gabow.createEdge(540, 1792, 1) + gabow.createEdge(919, 1793, 76) + gabow.createEdge(380, 1794, 85) + gabow.createEdge(230, 1795, 32) + gabow.createEdge(116, 1796, 42) + gabow.createEdge(790, 1797, 49) + gabow.createEdge(929, 1798, 85) + gabow.createEdge(1166, 1799, 47) + gabow.createEdge(1452, 1800, 12) + gabow.createEdge(705, 1801, 93) + gabow.createEdge(622, 1802, 95) + gabow.createEdge(927, 1803, 34) + gabow.createEdge(571, 1804, 88) + gabow.createEdge(1497, 1805, 74) + gabow.createEdge(1124, 1806, 66) + gabow.createEdge(1681, 1807, 3) + gabow.createEdge(1284, 1808, 87) + gabow.createEdge(267, 1809, 32) + gabow.createEdge(1319, 1810, 88) + gabow.createEdge(1477, 1811, 27) + gabow.createEdge(673, 1812, 98) + gabow.createEdge(1183, 1813, 2) + gabow.createEdge(1255, 1814, 31) + gabow.createEdge(1426, 1815, 10) + gabow.createEdge(1506, 1816, 10) + gabow.createEdge(629, 1817, 73) + gabow.createEdge(1677, 1818, 75) + gabow.createEdge(29, 1819, 75) + gabow.createEdge(921, 1820, 57) + gabow.createEdge(1147, 1821, 81) + gabow.createEdge(1695, 1822, 30) + gabow.createEdge(758, 1823, 8) + gabow.createEdge(1651, 1824, 13) + gabow.createEdge(1775, 1825, 26) + gabow.createEdge(150, 1826, 98) + gabow.createEdge(140, 1827, 39) + gabow.createEdge(732, 1828, 99) + gabow.createEdge(1256, 1829, 28) + gabow.createEdge(841, 1830, 26) + gabow.createEdge(828, 1831, 10) + gabow.createEdge(449, 1832, 100) + gabow.createEdge(1397, 1833, 46) + gabow.createEdge(459, 1834, 65) + gabow.createEdge(876, 1835, 92) + gabow.createEdge(1603, 1836, 60) + gabow.createEdge(1242, 1837, 62) + gabow.createEdge(1252, 1838, 36) + gabow.createEdge(406, 1839, 31) + gabow.createEdge(161, 1840, 46) + gabow.createEdge(1647, 1841, 85) + gabow.createEdge(1819, 1842, 91) + gabow.createEdge(1453, 1843, 71) + gabow.createEdge(998, 1844, 82) + gabow.createEdge(34, 1845, 93) + gabow.createEdge(1110, 1846, 79) + gabow.createEdge(488, 1847, 24) + gabow.createEdge(506, 1848, 37) + gabow.createEdge(1031, 1849, 93) + gabow.createEdge(1583, 1850, 28) + gabow.createEdge(371, 1851, 8) + gabow.createEdge(120, 1852, 82) + gabow.createEdge(1076, 1853, 84) + gabow.createEdge(865, 1854, 8) + gabow.createEdge(1008, 1855, 14) + gabow.createEdge(1121, 1856, 77) + gabow.createEdge(559, 1857, 62) + gabow.createEdge(499, 1858, 14) + gabow.createEdge(132, 1859, 38) + gabow.createEdge(864, 1860, 97) + gabow.createEdge(1557, 1861, 49) + gabow.createEdge(999, 1862, 27) + gabow.createEdge(843, 1863, 81) + gabow.createEdge(37, 1864, 92) + gabow.createEdge(1272, 1865, 58) + gabow.createEdge(397, 1866, 56) + gabow.createEdge(971, 1867, 68) + gabow.createEdge(1502, 1868, 85) + gabow.createEdge(1450, 1869, 40) + gabow.createEdge(1029, 1870, 29) + gabow.createEdge(1664, 1871, 83) + gabow.createEdge(76, 1872, 73) + gabow.createEdge(1612, 1873, 22) + gabow.createEdge(513, 1874, 44) + gabow.createEdge(561, 1875, 16) + gabow.createEdge(1847, 1876, 7) + gabow.createEdge(236, 1877, 12) + gabow.createEdge(244, 1878, 87) + gabow.createEdge(1737, 1879, 5) + gabow.createEdge(3, 1880, 37) + gabow.createEdge(680, 1881, 26) + gabow.createEdge(231, 1882, 42) + gabow.createEdge(609, 1883, 15) + gabow.createEdge(235, 1884, 99) + gabow.createEdge(1422, 1885, 91) + gabow.createEdge(349, 1886, 35) + gabow.createEdge(481, 1887, 33) + gabow.createEdge(1858, 1888, 36) + gabow.createEdge(458, 1889, 50) + gabow.createEdge(173, 1890, 30) + gabow.createEdge(1769, 1891, 83) + gabow.createEdge(289, 1892, 9) + gabow.createEdge(905, 1893, 79) + gabow.createEdge(619, 1894, 80) + gabow.createEdge(1770, 1895, 11) + gabow.createEdge(1774, 1896, 73) + gabow.createEdge(79, 1897, 24) + gabow.createEdge(1455, 1898, 68) + gabow.createEdge(900, 1899, 73) + gabow.createEdge(234, 1900, 42) + gabow.createEdge(1486, 1901, 66) + gabow.createEdge(1671, 1902, 5) + gabow.createEdge(782, 1903, 64) + gabow.createEdge(148, 1904, 13) + gabow.createEdge(1749, 1905, 43) + gabow.createEdge(1660, 1906, 44) + gabow.createEdge(432, 1907, 51) + gabow.createEdge(1265, 1908, 56) + gabow.createEdge(497, 1909, 65) + gabow.createEdge(217, 1910, 1) + gabow.createEdge(797, 1911, 72) + gabow.createEdge(1552, 1912, 63) + gabow.createEdge(693, 1913, 88) + gabow.createEdge(458, 1914, 99) + gabow.createEdge(812, 1915, 80) + gabow.createEdge(142, 1916, 31) + gabow.createEdge(1478, 1917, 85) + gabow.createEdge(924, 1918, 38) + gabow.createEdge(1478, 1919, 12) + gabow.createEdge(1142, 1920, 73) + gabow.createEdge(326, 1921, 69) + gabow.createEdge(643, 1922, 47) + gabow.createEdge(1758, 1923, 84) + gabow.createEdge(1111, 1924, 57) + gabow.createEdge(1459, 1925, 64) + gabow.createEdge(94, 1926, 31) + gabow.createEdge(727, 1927, 41) + gabow.createEdge(1558, 1928, 86) + gabow.createEdge(1413, 1929, 58) + gabow.createEdge(253, 1930, 67) + gabow.createEdge(1106, 1931, 81) + gabow.createEdge(556, 1932, 18) + gabow.createEdge(727, 1933, 15) + gabow.createEdge(265, 1934, 92) + gabow.createEdge(1114, 1935, 31) + gabow.createEdge(219, 1936, 19) + gabow.createEdge(766, 1937, 66) + gabow.createEdge(1120, 1938, 60) + gabow.createEdge(527, 1939, 82) + gabow.createEdge(1313, 1940, 91) + gabow.createEdge(1509, 1941, 76) + gabow.createEdge(294, 1942, 66) + gabow.createEdge(1218, 1943, 86) + gabow.createEdge(1750, 1944, 74) + gabow.createEdge(1924, 1945, 39) + gabow.createEdge(467, 1946, 95) + gabow.createEdge(1467, 1947, 89) + gabow.createEdge(1206, 1948, 64) + gabow.createEdge(1621, 1949, 11) + gabow.createEdge(957, 1950, 55) + gabow.createEdge(1249, 1951, 73) + gabow.createEdge(693, 1952, 34) + gabow.createEdge(1207, 1953, 64) + gabow.createEdge(1449, 1954, 98) + gabow.createEdge(1347, 1955, 20) + gabow.createEdge(1824, 1956, 91) + gabow.createEdge(1252, 1957, 74) + gabow.createEdge(99, 1958, 40) + gabow.createEdge(1544, 1959, 15) + gabow.createEdge(375, 1960, 81) + gabow.createEdge(427, 1961, 87) + gabow.createEdge(1713, 1962, 41) + gabow.createEdge(732, 1963, 58) + gabow.createEdge(304, 1964, 57) + gabow.createEdge(1814, 1965, 98) + gabow.createEdge(767, 1966, 72) + gabow.createEdge(1849, 1967, 29) + gabow.createEdge(1146, 1968, 93) + gabow.createEdge(1113, 1969, 54) + gabow.createEdge(256, 1970, 30) + gabow.createEdge(1011, 1971, 81) + gabow.createEdge(215, 1972, 88) + gabow.createEdge(1183, 1973, 31) + gabow.createEdge(1249, 1974, 32) + gabow.createEdge(589, 1975, 84) + gabow.createEdge(1355, 1976, 55) + gabow.createEdge(524, 1977, 44) + gabow.createEdge(1651, 1978, 66) + gabow.createEdge(1948, 1979, 80) + gabow.createEdge(417, 1980, 77) + gabow.createEdge(1774, 1981, 11) + gabow.createEdge(411, 1982, 82) + gabow.createEdge(1383, 1983, 21) + gabow.createEdge(1134, 1984, 75) + gabow.createEdge(1847, 1985, 95) + gabow.createEdge(1215, 1986, 89) + gabow.createEdge(319, 1987, 33) + gabow.createEdge(1154, 1988, 92) + gabow.createEdge(344, 1989, 60) + gabow.createEdge(164, 1990, 81) + gabow.createEdge(1373, 1991, 56) + gabow.createEdge(654, 1992, 33) + gabow.createEdge(911, 1993, 15) + gabow.createEdge(142, 1994, 63) + gabow.createEdge(1506, 1995, 47) + gabow.createEdge(437, 1996, 28) + gabow.createEdge(1586, 1997, 73) + gabow.createEdge(1665, 1998, 31) + gabow.createEdge(1564, 1999, 54) + gabow.createEdge(352, 1149, 48) + gabow.createEdge(1593, 943, 68) + gabow.createEdge(827, 1203, 74) + gabow.createEdge(1412, 796, 8) + gabow.createEdge(1775, 966, 53) + gabow.createEdge(1051, 1590, 97) + gabow.createEdge(1077, 469, 35) + gabow.createEdge(321, 570, 90) + gabow.createEdge(1689, 278, 61) + gabow.createEdge(893, 206, 36) + gabow.createEdge(829, 1387, 5) + gabow.createEdge(1419, 1253, 69) + gabow.createEdge(1336, 1016, 86) + gabow.createEdge(1066, 1740, 66) + gabow.createEdge(1270, 1801, 55) + gabow.createEdge(1626, 851, 62) + gabow.createEdge(1825, 1268, 43) + gabow.createEdge(160, 1957, 1) + gabow.createEdge(351, 1197, 94) + gabow.createEdge(265, 1418, 67) + gabow.createEdge(688, 810, 45) + gabow.createEdge(155, 1509, 100) + gabow.createEdge(105, 826, 78) + gabow.createEdge(1540, 1019, 98) + gabow.createEdge(877, 262, 79) + gabow.createEdge(512, 258, 88) + gabow.createEdge(562, 650, 100) + gabow.createEdge(685, 152, 50) + gabow.createEdge(38, 774, 79) + gabow.createEdge(551, 781, 33) + gabow.createEdge(791, 1197, 4) + gabow.createEdge(1623, 145, 57) + gabow.createEdge(1050, 262, 71) + gabow.createEdge(1903, 1993, 67) + gabow.createEdge(160, 1161, 79) + gabow.createEdge(1219, 1017, 86) + gabow.createEdge(1519, 277, 13) + gabow.createEdge(339, 721, 40) + gabow.createEdge(889, 579, 21) + gabow.createEdge(553, 955, 14) + gabow.createEdge(1752, 925, 13) + gabow.createEdge(798, 1930, 63) + gabow.createEdge(340, 1455, 57) + gabow.createEdge(341, 577, 22) + gabow.createEdge(760, 1245, 67) + gabow.createEdge(1211, 1900, 28) + gabow.createEdge(1012, 1250, 97) + gabow.createEdge(1564, 1730, 11) + gabow.createEdge(1897, 817, 74) + gabow.createEdge(1267, 295, 51) + gabow.createEdge(1098, 67, 60) + gabow.createEdge(629, 397, 78) + gabow.createEdge(1564, 1052, 98) + gabow.createEdge(1640, 1252, 64) + gabow.createEdge(1834, 1372, 81) + gabow.createEdge(1235, 612, 86) + gabow.createEdge(606, 811, 96) + gabow.createEdge(1059, 1817, 18) + gabow.createEdge(1644, 509, 26) + gabow.createEdge(576, 1381, 84) + gabow.createEdge(230, 820, 96) + gabow.createEdge(1524, 234, 61) + gabow.createEdge(1319, 1310, 79) + gabow.createEdge(1674, 1332, 74) + gabow.createEdge(188, 398, 41) + gabow.createEdge(657, 83, 82) + gabow.createEdge(1588, 1118, 10) + gabow.createEdge(1457, 1490, 5) + gabow.createEdge(1317, 1132, 39) + gabow.createEdge(604, 800, 13) + gabow.createEdge(731, 1726, 1) + gabow.createEdge(830, 1193, 68) + gabow.createEdge(769, 637, 39) + gabow.createEdge(568, 395, 87) + gabow.createEdge(670, 848, 13) + gabow.createEdge(6, 1220, 82) + gabow.createEdge(1420, 1581, 26) + gabow.createEdge(1762, 1659, 17) + gabow.createEdge(299, 180, 50) + gabow.createEdge(126, 1479, 84) + gabow.createEdge(585, 1573, 69) + gabow.createEdge(1780, 1331, 89) + gabow.createEdge(1989, 1404, 36) + gabow.createEdge(1745, 1688, 7) + gabow.createEdge(1603, 327, 59) + gabow.createEdge(288, 949, 50) + gabow.createEdge(557, 84, 84) + gabow.createEdge(1234, 525, 79) + gabow.createEdge(1913, 290, 95) + gabow.createEdge(1388, 1076, 73) + gabow.createEdge(1018, 1758, 98) + gabow.createEdge(1120, 992, 97) + gabow.createEdge(108, 1584, 80) + gabow.createEdge(68, 1364, 15) + gabow.createEdge(201, 1933, 18) + gabow.createEdge(1530, 1795, 55) + gabow.createEdge(908, 1730, 11) + gabow.createEdge(1371, 1666, 53) + gabow.createEdge(711, 74, 81) + gabow.createEdge(797, 9, 87) + gabow.createEdge(1325, 4, 64) + gabow.createEdge(1447, 1273, 66) + gabow.createEdge(679, 252, 81) + gabow.createEdge(1998, 1794, 50) + gabow.createEdge(1685, 296, 34) + gabow.createEdge(421, 1798, 75) + gabow.createEdge(824, 246, 44) + gabow.createEdge(887, 1575, 13) + gabow.createEdge(1372, 314, 66) + gabow.createEdge(264, 793, 84) + gabow.createEdge(295, 686, 84) + gabow.createEdge(1039, 1487, 55) + gabow.createEdge(1, 1832, 77) + gabow.createEdge(1437, 1331, 53) + gabow.createEdge(30, 1919, 74) + gabow.createEdge(1599, 1374, 61) + gabow.createEdge(450, 927, 32) + gabow.createEdge(705, 1488, 51) + gabow.createEdge(1203, 754, 33) + gabow.createEdge(1215, 913, 44) + gabow.createEdge(1340, 480, 31) + gabow.createEdge(1864, 403, 95) + gabow.createEdge(1802, 483, 27) + gabow.createEdge(1437, 1336, 72) + gabow.createEdge(1861, 197, 21) + gabow.createEdge(1653, 1618, 87) + gabow.createEdge(1395, 267, 65) + gabow.createEdge(166, 972, 69) + gabow.createEdge(1305, 1783, 46) + gabow.createEdge(1456, 618, 78) + gabow.createEdge(332, 341, 93) + gabow.createEdge(344, 1782, 92) + gabow.createEdge(1590, 410, 23) + gabow.createEdge(534, 1192, 49) + gabow.createEdge(1764, 49, 85) + gabow.createEdge(741, 257, 25) + gabow.createEdge(575, 78, 38) + gabow.createEdge(568, 173, 26) + gabow.createEdge(1903, 302, 83) + gabow.createEdge(1002, 1162, 83) + gabow.createEdge(47, 1830, 39) + gabow.createEdge(1864, 1997, 73) + gabow.createEdge(25, 231, 37) + gabow.createEdge(575, 1833, 99) + gabow.createEdge(1965, 262, 19) + gabow.createEdge(1351, 872, 27) + gabow.createEdge(1059, 711, 16) + gabow.createEdge(810, 551, 24) + gabow.createEdge(1053, 712, 66) + gabow.createEdge(1762, 827, 22) + gabow.createEdge(337, 377, 30) + gabow.createEdge(872, 463, 34) + gabow.createEdge(95, 1462, 77) + gabow.createEdge(273, 689, 20) + gabow.createEdge(945, 521, 95) + gabow.createEdge(1134, 175, 13) + gabow.createEdge(1256, 469, 98) + gabow.createEdge(452, 707, 9) + gabow.createEdge(1987, 1431, 36) + gabow.createEdge(831, 1999, 66) + gabow.createEdge(973, 911, 94) + gabow.createEdge(741, 1860, 97) + gabow.createEdge(1969, 932, 6) + gabow.createEdge(961, 1882, 16) + gabow.createEdge(1015, 22, 18) + gabow.createEdge(769, 622, 81) + gabow.createEdge(502, 905, 60) + gabow.createEdge(1554, 262, 24) + gabow.createEdge(1829, 1209, 3) + gabow.createEdge(898, 221, 79) + gabow.createEdge(249, 998, 57) + gabow.createEdge(1294, 1319, 40) + gabow.createEdge(115, 1683, 46) + gabow.createEdge(205, 1167, 39) + gabow.createEdge(1443, 1285, 31) + gabow.createEdge(223, 505, 77) + gabow.createEdge(1277, 244, 22) + gabow.createEdge(679, 1616, 73) + gabow.createEdge(1102, 1451, 88) + gabow.createEdge(1331, 1029, 73) + gabow.createEdge(1764, 1077, 58) + gabow.createEdge(810, 1533, 2) + gabow.createEdge(1145, 1619, 7) + gabow.createEdge(1846, 1182, 54) + gabow.createEdge(1507, 1828, 80) + gabow.createEdge(63, 1711, 55) + gabow.createEdge(1197, 208, 59) + gabow.createEdge(1309, 766, 57) + gabow.createEdge(144, 1464, 43) + gabow.createEdge(1715, 1577, 80) + gabow.createEdge(1850, 1431, 52) + gabow.createEdge(774, 1491, 18) + gabow.createEdge(717, 841, 91) + gabow.createEdge(99, 1572, 73) + gabow.createEdge(1285, 216, 86) + gabow.createEdge(1497, 1200, 70) + gabow.createEdge(129, 1424, 12) + gabow.createEdge(1305, 1076, 99) + gabow.createEdge(919, 1786, 57) + gabow.createEdge(758, 840, 61) + gabow.createEdge(837, 1028, 2) + gabow.createEdge(370, 1487, 83) + gabow.createEdge(286, 165, 40) + gabow.createEdge(1713, 1751, 96) + gabow.createEdge(1703, 810, 77) + gabow.createEdge(1162, 621, 51) + gabow.createEdge(1440, 1616, 49) + gabow.createEdge(489, 1137, 28) + gabow.createEdge(68, 261, 20) + gabow.createEdge(1378, 754, 53) + gabow.createEdge(653, 1767, 36) + gabow.createEdge(587, 1729, 53) + gabow.createEdge(1191, 622, 68) + gabow.createEdge(268, 634, 3) + gabow.createEdge(617, 1147, 66) + gabow.createEdge(646, 257, 57) + gabow.createEdge(309, 826, 6) + gabow.createEdge(1759, 1997, 52) + gabow.createEdge(791, 1115, 30) + gabow.createEdge(997, 1438, 37) + gabow.createEdge(1304, 924, 22) + gabow.createEdge(70, 1832, 37) + gabow.createEdge(986, 824, 100) + gabow.createEdge(853, 676, 31) + gabow.createEdge(49, 1106, 57) + gabow.createEdge(276, 1014, 4) + gabow.createEdge(1149, 1082, 1) + gabow.createEdge(1184, 1305, 100) + gabow.createEdge(1246, 1729, 95) + gabow.createEdge(985, 1029, 22) + gabow.createEdge(379, 1826, 51) + gabow.createEdge(690, 655, 40) + gabow.createEdge(1780, 810, 36) + gabow.createEdge(370, 1689, 23) + gabow.createEdge(266, 1028, 52) + gabow.createEdge(1662, 52, 26) + gabow.createEdge(1946, 1869, 17) + gabow.createEdge(1698, 1772, 74) + gabow.createEdge(38, 1561, 53) + gabow.createEdge(1939, 1257, 53) + gabow.createEdge(345, 923, 22) + gabow.createEdge(1017, 382, 6) + gabow.createEdge(487, 442, 88) + gabow.createEdge(1841, 453, 68) + gabow.createEdge(1128, 1101, 90) + gabow.createEdge(264, 908, 8) + gabow.createEdge(878, 286, 44) + gabow.createEdge(799, 1389, 40) + gabow.createEdge(1301, 179, 88) + gabow.createEdge(1489, 1380, 57) + gabow.createEdge(375, 338, 8) + gabow.createEdge(91, 1503, 26) + gabow.createEdge(1198, 811, 43) + gabow.createEdge(955, 70, 84) + gabow.createEdge(1845, 181, 48) + gabow.createEdge(1902, 1429, 91) + gabow.createEdge(403, 1877, 94) + gabow.createEdge(1310, 1719, 12) + gabow.createEdge(1710, 1867, 77) + gabow.createEdge(611, 816, 28) + gabow.createEdge(2, 1493, 69) + gabow.createEdge(1341, 154, 56) + gabow.createEdge(558, 1735, 16) + gabow.createEdge(934, 918, 69) + gabow.createEdge(567, 492, 40) + gabow.createEdge(1110, 1638, 17) + gabow.createEdge(1563, 904, 86) + gabow.createEdge(1135, 814, 47) + gabow.createEdge(1026, 765, 73) + gabow.createEdge(169, 907, 32) + gabow.createEdge(228, 564, 72) + gabow.createEdge(1793, 1540, 84) + gabow.createEdge(1199, 1038, 88) + gabow.createEdge(1537, 671, 93) + gabow.createEdge(227, 576, 59) + gabow.createEdge(239, 511, 74) + gabow.createEdge(1743, 1324, 43) + gabow.createEdge(1705, 316, 84) + gabow.createEdge(1228, 618, 56) + gabow.createEdge(178, 936, 100) + gabow.createEdge(1138, 963, 89) + gabow.createEdge(27, 1430, 21) + gabow.createEdge(1709, 598, 83) + gabow.createEdge(635, 243, 25) + gabow.createEdge(1528, 1446, 81) + gabow.createEdge(1350, 1412, 93) + gabow.createEdge(929, 1649, 89) + gabow.createEdge(603, 924, 90) + gabow.createEdge(287, 264, 90) + gabow.createEdge(1171, 1226, 5) + gabow.createEdge(912, 291, 60) + gabow.createEdge(30, 1654, 26) + gabow.createEdge(720, 1402, 51) + gabow.createEdge(997, 547, 89) + gabow.createEdge(1005, 594, 92) + gabow.createEdge(1521, 1285, 84) + gabow.createEdge(1562, 187, 17) + gabow.createEdge(1282, 1952, 71) + gabow.createEdge(1095, 1957, 57) + gabow.createEdge(831, 1504, 32) + gabow.createEdge(1975, 38, 11) + gabow.createEdge(52, 109, 8) + gabow.createEdge(1886, 1946, 83) + gabow.createEdge(601, 45, 36) + gabow.createEdge(335, 1501, 68) + gabow.createEdge(1829, 669, 14) + gabow.createEdge(1654, 131, 12) + gabow.createEdge(1990, 937, 73) + gabow.createEdge(1814, 821, 22) + gabow.createEdge(149, 765, 95) + gabow.createEdge(111, 1098, 35) + gabow.createEdge(688, 1624, 1) + gabow.createEdge(1569, 1267, 55) + gabow.createEdge(64, 862, 6) + gabow.createEdge(1412, 1975, 27) + gabow.createEdge(870, 388, 69) + gabow.createEdge(62, 499, 89) + gabow.createEdge(1021, 988, 54) + gabow.createEdge(1212, 1668, 73) + gabow.createEdge(1289, 1406, 16) + gabow.createEdge(1621, 1044, 74) + gabow.createEdge(375, 1427, 63) + gabow.createEdge(511, 1216, 77) + gabow.createEdge(1962, 1785, 38) + gabow.createEdge(1261, 58, 35) + gabow.createEdge(153, 1342, 44) + gabow.createEdge(478, 586, 16) + gabow.createEdge(1687, 1068, 91) + gabow.createEdge(555, 1680, 90) + gabow.createEdge(1394, 1154, 51) + gabow.createEdge(378, 1957, 54) + gabow.createEdge(709, 1669, 28) + gabow.createEdge(132, 365, 51) + gabow.createEdge(847, 121, 8) + gabow.createEdge(1499, 1361, 38) + gabow.createEdge(1326, 173, 15) + gabow.createEdge(447, 1233, 71) + gabow.createEdge(1409, 948, 6) + gabow.createEdge(1841, 1969, 81) + gabow.createEdge(85, 501, 70) + gabow.createEdge(1214, 239, 67) + gabow.createEdge(1601, 1420, 12) + gabow.createEdge(796, 840, 57) + gabow.createEdge(766, 102, 79) + gabow.createEdge(619, 1308, 51) + gabow.createEdge(592, 823, 78) + gabow.createEdge(1963, 1105, 28) + gabow.createEdge(424, 722, 46) + gabow.createEdge(912, 1807, 29) + gabow.createEdge(524, 1945, 73) + gabow.createEdge(1303, 514, 79) + gabow.createEdge(882, 258, 1) + gabow.createEdge(20, 379, 62) + gabow.createEdge(1164, 1569, 53) + gabow.createEdge(1556, 1210, 59) + gabow.createEdge(925, 1778, 85) + gabow.createEdge(1092, 1780, 24) + gabow.createEdge(1307, 5, 13) + gabow.createEdge(1264, 1773, 92) + gabow.createEdge(1778, 1886, 78) + gabow.createEdge(944, 816, 65) + gabow.createEdge(418, 537, 29) + gabow.createEdge(1448, 1681, 93) + gabow.createEdge(1846, 1951, 94) + gabow.createEdge(1399, 879, 49) + gabow.createEdge(1003, 1800, 31) + gabow.createEdge(1517, 648, 3) + gabow.createEdge(252, 1124, 59) + gabow.createEdge(1371, 1716, 56) + gabow.createEdge(436, 1700, 61) + gabow.createEdge(1646, 1675, 67) + gabow.createEdge(963, 1131, 57) + gabow.createEdge(1157, 155, 14) + gabow.createEdge(1559, 825, 39) + gabow.createEdge(235, 1354, 29) + gabow.createEdge(366, 1695, 85) + gabow.createEdge(283, 66, 6) + gabow.createEdge(1919, 220, 36) + gabow.createEdge(744, 222, 100) + gabow.createEdge(1420, 1920, 64) + gabow.createEdge(731, 1158, 6) + gabow.createEdge(1803, 1854, 3) + gabow.createEdge(188, 190, 55) + gabow.createEdge(1841, 1033, 14) + gabow.createEdge(1204, 1392, 12) + gabow.createEdge(419, 1165, 46) + gabow.createEdge(519, 325, 62) + gabow.createEdge(728, 10, 63) + gabow.createEdge(1236, 725, 19) + gabow.createEdge(281, 1399, 32) + gabow.createEdge(1489, 33, 66) + gabow.createEdge(322, 602, 66) + gabow.createEdge(1979, 1744, 70) + gabow.createEdge(1085, 938, 5) + gabow.createEdge(604, 376, 42) + gabow.createEdge(288, 1921, 69) + gabow.createEdge(990, 302, 4) + gabow.createEdge(1567, 1159, 85) + gabow.createEdge(1880, 1170, 23) + gabow.createEdge(6, 660, 23) + gabow.createEdge(173, 1501, 74) + gabow.createEdge(1797, 983, 81) + gabow.createEdge(825, 852, 41) + gabow.createEdge(1105, 1488, 30) + gabow.createEdge(986, 1073, 63) + gabow.createEdge(1488, 1392, 64) + gabow.createEdge(232, 1236, 38) + gabow.createEdge(806, 132, 83) + gabow.createEdge(1127, 907, 45) + gabow.createEdge(1895, 886, 99) + gabow.createEdge(1443, 1565, 59) + gabow.createEdge(393, 549, 3) + gabow.createEdge(158, 1694, 75) + gabow.createEdge(1748, 19, 99) + gabow.createEdge(151, 203, 48) + gabow.createEdge(534, 1943, 96) + gabow.createEdge(53, 984, 93) + gabow.createEdge(756, 1015, 25) + gabow.createEdge(106, 1921, 3) + gabow.createEdge(619, 1542, 44) + gabow.createEdge(828, 1453, 12) + gabow.createEdge(1740, 1757, 13) + gabow.createEdge(1356, 1868, 33) + gabow.createEdge(533, 540, 30) + gabow.createEdge(8, 553, 26) + gabow.createEdge(1921, 1729, 9) + gabow.createEdge(1955, 1534, 76) + gabow.createEdge(996, 1230, 79) + gabow.createEdge(1706, 1078, 10) + gabow.createEdge(556, 268, 21) + gabow.createEdge(1383, 855, 8) + gabow.createEdge(1753, 941, 87) + gabow.createEdge(1221, 788, 56) + gabow.createEdge(1201, 146, 66) + gabow.createEdge(1091, 1933, 23) + gabow.createEdge(218, 1804, 25) + gabow.createEdge(1455, 602, 83) + gabow.createEdge(9, 4, 36) + gabow.createEdge(1571, 713, 48) + gabow.createEdge(452, 1920, 13) + gabow.createEdge(568, 872, 23) + gabow.createEdge(262, 1570, 68) + gabow.createEdge(1910, 1111, 72) + gabow.createEdge(1149, 746, 35) + gabow.createEdge(601, 1563, 89) + gabow.createEdge(713, 1053, 23) + gabow.createEdge(173, 807, 87) + gabow.createEdge(691, 606, 87) + gabow.createEdge(944, 1008, 78) + gabow.createEdge(1357, 537, 84) + gabow.createEdge(328, 535, 17) + gabow.createEdge(968, 1217, 77) + gabow.createEdge(575, 61, 95) + gabow.createEdge(337, 781, 99) + gabow.createEdge(404, 1319, 63) + gabow.createEdge(1484, 1527, 8) + gabow.createEdge(181, 1943, 53) + gabow.createEdge(1525, 1365, 32) + gabow.createEdge(487, 1078, 50) + gabow.createEdge(1024, 1153, 4) + gabow.createEdge(1437, 1721, 90) + gabow.createEdge(80, 1885, 73) + gabow.createEdge(1117, 1303, 70) + gabow.createEdge(3, 636, 82) + gabow.createEdge(1028, 908, 67) + gabow.createEdge(283, 1916, 3) + gabow.createEdge(1279, 1591, 75) + gabow.createEdge(336, 874, 65) + gabow.createEdge(367, 498, 20) + gabow.createEdge(1158, 1582, 75) + gabow.createEdge(291, 1936, 60) + gabow.createEdge(396, 1369, 73) + gabow.createEdge(676, 46, 95) + gabow.createEdge(345, 74, 3) + gabow.createEdge(1272, 825, 55) + gabow.createEdge(788, 1159, 88) + gabow.createEdge(479, 148, 38) + gabow.createEdge(626, 1883, 62) + gabow.createEdge(1644, 87, 78) + gabow.createEdge(1287, 937, 98) + gabow.createEdge(1702, 1074, 87) + gabow.createEdge(1566, 467, 20) + gabow.createEdge(1635, 298, 17) + gabow.createEdge(69, 317, 74) + gabow.createEdge(1352, 193, 15) + gabow.createEdge(236, 1669, 17) + gabow.createEdge(763, 145, 84) + gabow.createEdge(1531, 1195, 85) + gabow.createEdge(931, 570, 59) + gabow.createEdge(708, 1397, 10) + gabow.createEdge(498, 1009, 86) + gabow.createEdge(859, 1732, 57) + gabow.createEdge(1683, 1510, 8) + gabow.createEdge(910, 1164, 30) + gabow.createEdge(533, 1406, 13) + gabow.createEdge(318, 1040, 41) + gabow.createEdge(1282, 1948, 10) + gabow.createEdge(1584, 1457, 25) + gabow.createEdge(446, 923, 50) + gabow.createEdge(680, 911, 74) + gabow.createEdge(1365, 1602, 7) + gabow.createEdge(1679, 1849, 29) + gabow.createEdge(685, 1371, 60) + gabow.createEdge(172, 1086, 70) + gabow.createEdge(313, 744, 51) + gabow.createEdge(61, 1388, 29) + gabow.createEdge(14, 962, 68) + gabow.createEdge(1571, 663, 75) + gabow.createEdge(228, 1819, 32) + gabow.createEdge(1379, 1612, 75) + gabow.createEdge(413, 49, 52) + gabow.createEdge(1212, 381, 15) + gabow.createEdge(1351, 316, 11) + gabow.createEdge(291, 781, 35) + gabow.createEdge(1807, 349, 64) + gabow.createEdge(455, 1004, 73) + gabow.createEdge(10, 700, 29) + gabow.createEdge(122, 280, 42) + gabow.createEdge(680, 1088, 21) + gabow.createEdge(370, 204, 63) + gabow.createEdge(412, 1520, 88) + gabow.createEdge(1902, 90, 38) + gabow.createEdge(988, 1029, 84) + gabow.createEdge(38, 1192, 85) + gabow.createEdge(1214, 942, 45) + gabow.createEdge(337, 1907, 65) + gabow.createEdge(1071, 1728, 39) + gabow.createEdge(1645, 1544, 37) + gabow.createEdge(1855, 531, 55) + gabow.createEdge(1569, 388, 77) + gabow.createEdge(1217, 31, 70) + gabow.createEdge(143, 1408, 83) + gabow.createEdge(24, 1862, 38) + gabow.createEdge(1068, 519, 48) + gabow.createEdge(419, 971, 18) + gabow.createEdge(1703, 1898, 13) + gabow.createEdge(1991, 543, 87) + gabow.createEdge(1355, 417, 15) + gabow.createEdge(1570, 855, 71) + gabow.createEdge(1826, 1521, 19) + gabow.createEdge(1074, 1518, 21) + gabow.createEdge(1783, 1866, 48) + gabow.createEdge(1371, 1422, 70) + gabow.createEdge(11, 48, 8) + gabow.createEdge(778, 1556, 18) + gabow.createEdge(1617, 542, 31) + gabow.createEdge(1093, 1098, 83) + gabow.createEdge(488, 1740, 78) + gabow.createEdge(1834, 1102, 56) + gabow.createEdge(1005, 1174, 46) + gabow.createEdge(964, 1992, 65) + gabow.createEdge(1044, 201, 65) + gabow.createEdge(1134, 1773, 85) + gabow.createEdge(166, 1660, 98) + gabow.createEdge(123, 1735, 19) + gabow.createEdge(1213, 1454, 14) + gabow.createEdge(1036, 1472, 95) + gabow.createEdge(1191, 1773, 57) + gabow.createEdge(1765, 350, 81) + gabow.createEdge(1275, 1071, 9) + gabow.createEdge(886, 602, 100) + gabow.createEdge(105, 541, 31) + gabow.createEdge(338, 1584, 49) + gabow.createEdge(1912, 698, 60) + gabow.createEdge(656, 273, 30) + gabow.createEdge(1484, 503, 36) + gabow.createEdge(1899, 1795, 41) + gabow.createEdge(970, 1786, 82) + gabow.createEdge(1041, 1262, 49) + gabow.createEdge(1840, 966, 8) + gabow.createEdge(1852, 508, 38) + gabow.createEdge(539, 1149, 95) + gabow.createEdge(1807, 275, 72) + gabow.createEdge(1836, 335, 19) + gabow.createEdge(1368, 1833, 75) + gabow.createEdge(606, 1454, 71) + gabow.createEdge(1136, 222, 69) + gabow.createEdge(453, 233, 32) + gabow.createEdge(1322, 1655, 61) + gabow.createEdge(72, 1167, 100) + gabow.createEdge(744, 1572, 72) + gabow.createEdge(1299, 1597, 97) + gabow.createEdge(644, 932, 87) + gabow.createEdge(1950, 306, 69) + gabow.createEdge(632, 847, 16) + gabow.createEdge(1323, 1125, 9) + gabow.createEdge(275, 1536, 93) + gabow.createEdge(810, 740, 6) + gabow.createEdge(759, 715, 38) + gabow.createEdge(686, 1682, 40) + gabow.createEdge(1286, 1945, 2) + gabow.createEdge(1045, 1478, 37) + gabow.createEdge(419, 1473, 52) + gabow.createEdge(1479, 1720, 29) + gabow.createEdge(1839, 449, 18) + gabow.createEdge(318, 1570, 69) + gabow.createEdge(1371, 1528, 98) + gabow.createEdge(1917, 1522, 96) + gabow.createEdge(1092, 1922, 60) + gabow.createEdge(674, 976, 47) + gabow.createEdge(319, 1326, 40) + gabow.createEdge(888, 1419, 73) + gabow.createEdge(176, 1721, 87) + gabow.createEdge(820, 254, 66) + gabow.createEdge(519, 1038, 48) + gabow.createEdge(546, 230, 13) + gabow.createEdge(134, 1256, 46) + gabow.createEdge(900, 1612, 80) + gabow.createEdge(1922, 507, 82) + gabow.createEdge(1263, 489, 98) + gabow.createEdge(1189, 497, 40) + gabow.createEdge(600, 1322, 91) + gabow.createEdge(37, 1947, 82) + gabow.createEdge(428, 1011, 13) + gabow.createEdge(665, 1596, 46) + gabow.createEdge(697, 906, 92) + gabow.createEdge(937, 1016, 67) + gabow.createEdge(1626, 319, 26) + gabow.createEdge(972, 532, 63) + gabow.createEdge(1688, 1261, 44) + gabow.createEdge(1064, 165, 83) + gabow.createEdge(166, 252, 16) + gabow.createEdge(1631, 800, 26) + gabow.createEdge(793, 14, 47) + gabow.createEdge(1209, 1311, 48) + gabow.createEdge(1585, 441, 40) + gabow.createEdge(1237, 662, 49) + gabow.createEdge(783, 177, 41) + gabow.createEdge(161, 320, 80) + gabow.createEdge(387, 749, 53) + gabow.createEdge(185, 567, 83) + gabow.createEdge(241, 508, 88) + gabow.createEdge(223, 1880, 5) + gabow.createEdge(1203, 826, 28) + gabow.createEdge(624, 1909, 13) + gabow.createEdge(1469, 4, 22) + gabow.createEdge(368, 873, 73) + gabow.createEdge(771, 1846, 16) + gabow.createEdge(951, 137, 60) + gabow.createEdge(725, 110, 30) + gabow.createEdge(1264, 1157, 50) + gabow.createEdge(1492, 1734, 55) + gabow.createEdge(871, 1021, 26) + gabow.createEdge(569, 1253, 23) + gabow.createEdge(713, 143, 17) + gabow.createEdge(1556, 1428, 68) + gabow.createEdge(322, 527, 35) + gabow.createEdge(1659, 327, 53) + gabow.createEdge(1189, 1901, 99) + gabow.createEdge(1932, 1422, 88) + gabow.createEdge(17, 863, 59) + gabow.createEdge(427, 668, 85) + gabow.createEdge(1100, 1296, 22) + gabow.createEdge(1295, 481, 39) + gabow.createEdge(404, 809, 27) + gabow.createEdge(1602, 1699, 100) + gabow.createEdge(1635, 130, 22) + gabow.createEdge(513, 1510, 79) + gabow.createEdge(1233, 1320, 52) + gabow.createEdge(962, 550, 97) + gabow.createEdge(1177, 477, 66) + gabow.createEdge(1783, 1877, 75) + gabow.createEdge(1322, 1046, 72) + gabow.createEdge(821, 231, 55) + gabow.createEdge(496, 1012, 58) + gabow.createEdge(463, 719, 2) + gabow.createEdge(126, 1406, 19) + gabow.createEdge(1112, 1910, 63) + gabow.createEdge(564, 1529, 57) + gabow.createEdge(1536, 1212, 26) + gabow.createEdge(142, 1851, 78) + gabow.createEdge(1583, 1852, 79) + gabow.createEdge(345, 1705, 34) + gabow.createEdge(1969, 805, 98) + gabow.createEdge(412, 107, 63) + gabow.createEdge(1200, 1856, 80) + gabow.createEdge(863, 588, 90) + gabow.createEdge(257, 558, 96) + gabow.createEdge(432, 854, 47) + gabow.createEdge(593, 1736, 65) + gabow.createEdge(1161, 1343, 71) + gabow.createEdge(82, 1808, 99) + gabow.createEdge(1411, 1518, 15) + gabow.createEdge(204, 482, 24) + gabow.createEdge(42, 1371, 48) + gabow.createEdge(792, 1685, 23) + gabow.createEdge(277, 708, 78) + gabow.createEdge(857, 1143, 86) + gabow.createEdge(1790, 719, 9) + gabow.createEdge(1377, 1108, 85) + gabow.createEdge(1903, 644, 24) + gabow.createEdge(272, 341, 33) + gabow.createEdge(1358, 1084, 19) + gabow.createEdge(1308, 66, 72) + gabow.createEdge(1133, 1175, 2) + gabow.createEdge(7, 1523, 89) + gabow.createEdge(1685, 1890, 95) + gabow.createEdge(803, 1836, 32) + gabow.createEdge(1428, 1286, 26) + gabow.createEdge(166, 1844, 94) + gabow.createEdge(1935, 720, 76) + gabow.createEdge(172, 1719, 11) + gabow.createEdge(1312, 799, 36) + gabow.createEdge(1436, 512, 52) + gabow.createEdge(1391, 828, 90) + gabow.createEdge(473, 567, 89) + gabow.createEdge(1947, 525, 5) + gabow.createEdge(576, 236, 62) + gabow.createEdge(22, 1054, 8) + gabow.createEdge(1128, 518, 56) + gabow.createEdge(1142, 61, 3) + gabow.createEdge(743, 80, 73) + gabow.createEdge(251, 369, 85) + gabow.createEdge(1669, 242, 48) + gabow.createEdge(668, 1739, 44) + gabow.createEdge(327, 1175, 26) + gabow.createEdge(546, 1981, 22) + gabow.createEdge(273, 537, 53) + gabow.createEdge(1672, 1917, 95) + gabow.createEdge(1421, 904, 72) + gabow.createEdge(347, 1773, 7) + gabow.createEdge(224, 1257, 13) + gabow.createEdge(1406, 818, 78) + gabow.createEdge(1926, 1258, 48) + gabow.createEdge(1350, 185, 54) + gabow.createEdge(356, 731, 60) + gabow.createEdge(339, 1889, 74) + gabow.createEdge(952, 1776, 4) + gabow.createEdge(1372, 1724, 9) + gabow.createEdge(862, 1973, 3) + gabow.createEdge(320, 22, 54) + gabow.createEdge(70, 108, 44) + gabow.createEdge(1048, 963, 7) + gabow.createEdge(1041, 432, 48) + gabow.createEdge(399, 668, 72) + gabow.createEdge(1053, 1011, 65) + gabow.createEdge(621, 1084, 35) + gabow.createEdge(1814, 898, 34) + gabow.createEdge(260, 1039, 53) + gabow.createEdge(1759, 145, 29) + gabow.createEdge(1445, 773, 27) + gabow.createEdge(1198, 683, 68) + gabow.createEdge(1824, 1423, 38) + gabow.createEdge(1237, 1281, 92) + gabow.createEdge(966, 955, 69) + gabow.createEdge(1897, 1818, 14) + gabow.createEdge(1846, 959, 86) + gabow.createEdge(1274, 1295, 63) + gabow.createEdge(1503, 1154, 66) + gabow.createEdge(957, 1239, 66) + gabow.createEdge(1178, 709, 60) + gabow.createEdge(1053, 321, 28) + gabow.createEdge(877, 399, 80) + gabow.createEdge(1481, 1112, 51) + gabow.createEdge(1779, 1435, 77) + gabow.createEdge(382, 836, 36) + gabow.createEdge(1234, 1558, 75) + gabow.createEdge(1054, 123, 40) + gabow.createEdge(1471, 1992, 76) + gabow.createEdge(1561, 1711, 10) + gabow.createEdge(1751, 1284, 72) + gabow.createEdge(1645, 802, 56) + gabow.createEdge(1569, 1445, 44) + gabow.createEdge(1010, 1215, 87) + gabow.createEdge(349, 1154, 33) + gabow.createEdge(661, 788, 81) + gabow.createEdge(125, 1490, 77) + gabow.createEdge(46, 1819, 8) + gabow.createEdge(1537, 1728, 46) + gabow.createEdge(257, 1517, 75) + gabow.createEdge(360, 578, 22) + gabow.createEdge(1006, 1159, 62) + gabow.createEdge(1856, 940, 61) + gabow.createEdge(789, 1842, 66) + gabow.createEdge(1070, 1769, 97) + gabow.createEdge(1680, 379, 32) + gabow.createEdge(1578, 749, 73) + gabow.createEdge(1183, 1597, 69) + gabow.createEdge(1068, 1872, 42) + gabow.createEdge(1711, 1641, 21) + gabow.createEdge(764, 1973, 53) + gabow.createEdge(1023, 543, 47) + gabow.createEdge(1456, 1949, 55) + gabow.createEdge(475, 497, 78) + gabow.createEdge(449, 1328, 82) + gabow.createEdge(790, 675, 79) + gabow.createEdge(366, 923, 51) + gabow.createEdge(66, 858, 20) + gabow.createEdge(1449, 650, 3) + gabow.createEdge(409, 293, 35) + gabow.createEdge(881, 1047, 21) + gabow.createEdge(312, 0, 66) + gabow.createEdge(663, 596, 11) + gabow.createEdge(922, 887, 47) + gabow.createEdge(865, 750, 76) + gabow.createEdge(1647, 217, 83) + gabow.createEdge(1467, 1802, 46) + gabow.createEdge(396, 999, 1) + gabow.createEdge(1833, 477, 47) + gabow.createEdge(1028, 54, 25) + gabow.createEdge(1605, 1799, 66) + gabow.createEdge(1618, 864, 72) + gabow.createEdge(507, 1953, 92) + gabow.createEdge(426, 1837, 57) + gabow.createEdge(1156, 1412, 35) + gabow.createEdge(1176, 1482, 24) + gabow.createEdge(13, 1792, 32) + gabow.createEdge(1289, 1383, 16) + gabow.createEdge(1231, 509, 37) + gabow.createEdge(1356, 1607, 57) + gabow.createEdge(1319, 857, 79) + gabow.createEdge(234, 135, 8) + gabow.createEdge(281, 827, 5) + gabow.createEdge(1795, 1540, 55) + gabow.createEdge(856, 207, 86) + gabow.createEdge(1474, 518, 71) + gabow.createEdge(763, 1995, 77) + gabow.createEdge(266, 817, 13) + gabow.createEdge(1773, 739, 37) + gabow.createEdge(1019, 615, 69) + gabow.createEdge(70, 1519, 80) + gabow.createEdge(1785, 1175, 67) + gabow.createEdge(624, 1199, 64) + gabow.createEdge(1595, 1804, 53) + gabow.createEdge(623, 1592, 58) + gabow.createEdge(1700, 13, 11) + gabow.createEdge(48, 1087, 74) + gabow.createEdge(1125, 1477, 53) + gabow.createEdge(389, 1870, 63) + gabow.createEdge(155, 1111, 52) + gabow.createEdge(232, 42, 13) + gabow.createEdge(1596, 1405, 31) + gabow.createEdge(1583, 1918, 6) + gabow.createEdge(1350, 1572, 5) + gabow.createEdge(1071, 1739, 16) + gabow.createEdge(1884, 80, 28) + gabow.createEdge(1029, 871, 86) + gabow.createEdge(1661, 105, 6) + gabow.createEdge(291, 167, 72) + gabow.createEdge(249, 590, 8) + gabow.createEdge(43, 69, 62) + gabow.createEdge(1709, 1284, 79) + gabow.createEdge(402, 106, 48) + gabow.createEdge(644, 1940, 70) + gabow.createEdge(659, 762, 43) + gabow.createEdge(1483, 1212, 87) + gabow.createEdge(1756, 718, 4) + gabow.createEdge(1080, 895, 16) + gabow.createEdge(897, 1215, 24) + gabow.createEdge(1290, 898, 96) + gabow.createEdge(1773, 198, 83) + gabow.createEdge(54, 1874, 93) + gabow.createEdge(1359, 297, 79) + gabow.createEdge(731, 1908, 84) + gabow.createEdge(1719, 1637, 64) + gabow.createEdge(111, 1404, 19) + gabow.createEdge(1560, 1774, 80) + gabow.createEdge(983, 1967, 57) + gabow.createEdge(1036, 1579, 74) + gabow.createEdge(930, 1462, 75) + gabow.createEdge(1670, 219, 5) + gabow.createEdge(275, 1796, 80) + gabow.createEdge(1938, 412, 21) + gabow.createEdge(1037, 1529, 92) + gabow.createEdge(500, 160, 1) + gabow.createEdge(788, 471, 76) + gabow.createEdge(1981, 209, 48) + gabow.createEdge(1082, 1271, 91) + gabow.createEdge(575, 1338, 2) + gabow.createEdge(1174, 1983, 60) + gabow.createEdge(1631, 665, 51) + gabow.createEdge(1725, 1827, 95) + gabow.createEdge(1836, 602, 85) + gabow.createEdge(1444, 1959, 92) + gabow.createEdge(1170, 1198, 81) + gabow.createEdge(1880, 1020, 20) + gabow.createEdge(1202, 1112, 11) + gabow.createEdge(1366, 731, 6) + gabow.createEdge(1528, 1777, 52) + gabow.createEdge(1970, 720, 11) + gabow.createEdge(70, 726, 14) + gabow.createEdge(771, 1156, 16) + gabow.createEdge(1485, 1184, 95) + gabow.createEdge(1886, 185, 9) + gabow.createEdge(1216, 1444, 4) + gabow.createEdge(526, 1175, 11) + gabow.createEdge(402, 1714, 73) + gabow.createEdge(1780, 982, 66) + gabow.createEdge(1708, 277, 81) + gabow.createEdge(1042, 1089, 84) + gabow.createEdge(521, 1211, 72) + gabow.createEdge(60, 1073, 78) + gabow.createEdge(1043, 231, 11) + gabow.createEdge(943, 342, 73) + gabow.createEdge(1428, 1566, 41) + gabow.createEdge(667, 189, 17) + gabow.createEdge(1831, 1148, 59) + gabow.createEdge(1298, 1388, 94) + gabow.createEdge(78, 1676, 19) + gabow.createEdge(686, 456, 25) + gabow.createEdge(589, 331, 54) + gabow.createEdge(1930, 1339, 21) + gabow.createEdge(1288, 1696, 34) + gabow.createEdge(39, 916, 65) + gabow.createEdge(858, 1619, 28) + gabow.createEdge(1705, 1040, 77) + gabow.createEdge(1828, 73, 2) + gabow.createEdge(789, 947, 95) + gabow.createEdge(54, 599, 85) + gabow.createEdge(1661, 78, 39) + gabow.createEdge(786, 698, 15) + gabow.createEdge(286, 1260, 74) + gabow.createEdge(704, 1306, 14) + gabow.createEdge(187, 188, 60) + gabow.createEdge(1903, 1023, 45) + gabow.createEdge(1443, 70, 98) + gabow.createEdge(366, 387, 34) + gabow.createEdge(33, 540, 57) + gabow.createEdge(1680, 1172, 4) + gabow.createEdge(1207, 414, 90) + gabow.createEdge(334, 65, 69) + gabow.createEdge(1128, 1027, 2) + gabow.createEdge(970, 544, 87) + gabow.createEdge(664, 1466, 60) + gabow.createEdge(862, 39, 57) + gabow.createEdge(1200, 1147, 17) + gabow.createEdge(1788, 1617, 7) + gabow.createEdge(800, 1640, 27) + gabow.createEdge(951, 1305, 71) + gabow.createEdge(578, 1422, 6) + gabow.createEdge(1271, 877, 44) + gabow.createEdge(1126, 809, 98) + gabow.createEdge(472, 1345, 71) + gabow.createEdge(553, 57, 50) + gabow.createEdge(1893, 1671, 32) + gabow.createEdge(771, 890, 44) + gabow.createEdge(1172, 20, 68) + gabow.createEdge(924, 645, 41) + gabow.createEdge(1054, 1563, 82) + gabow.createEdge(1978, 249, 9) + gabow.createEdge(505, 805, 56) + gabow.createEdge(113, 1155, 11) + gabow.createEdge(1606, 990, 62) + gabow.createEdge(1413, 877, 89) + gabow.createEdge(1292, 1945, 59) + gabow.createEdge(1864, 595, 86) + gabow.createEdge(1763, 84, 79) + gabow.createEdge(1448, 711, 41) + gabow.createEdge(700, 828, 59) + gabow.createEdge(1417, 1500, 11) + gabow.createEdge(1020, 365, 4) + gabow.createEdge(1150, 471, 8) + gabow.createEdge(1887, 1666, 41) + gabow.createEdge(1521, 1071, 18) + gabow.createEdge(71, 1013, 66) + gabow.createEdge(1484, 1366, 43) + gabow.createEdge(1500, 1831, 52) + gabow.createEdge(1005, 444, 44) + gabow.createEdge(1212, 1227, 53) + gabow.createEdge(1344, 1875, 33) + gabow.createEdge(1029, 1571, 38) + gabow.createEdge(712, 138, 6) + gabow.createEdge(1789, 452, 82) + gabow.createEdge(1034, 270, 45) + gabow.createEdge(721, 395, 85) + gabow.createEdge(1480, 1157, 74) + gabow.createEdge(177, 1184, 84) + gabow.createEdge(1118, 664, 28) + gabow.createEdge(1662, 1294, 40) + gabow.createEdge(1054, 250, 60) + gabow.createEdge(1930, 709, 66) + gabow.createEdge(1989, 287, 94) + gabow.createEdge(1874, 0, 75) + gabow.createEdge(905, 319, 17) + gabow.createEdge(1361, 730, 50) + gabow.createEdge(295, 1316, 96) + gabow.createEdge(1589, 1990, 15) + gabow.createEdge(1594, 1778, 52) + gabow.createEdge(700, 1503, 58) + gabow.createEdge(1584, 94, 41) + gabow.createEdge(1459, 1568, 77) + gabow.createEdge(241, 967, 16) + gabow.createEdge(550, 217, 54) + gabow.createEdge(557, 373, 91) + gabow.createEdge(796, 78, 92) + gabow.createEdge(1549, 1054, 57) + gabow.createEdge(1540, 89, 66) + gabow.createEdge(31, 503, 24) + gabow.createEdge(1649, 118, 86) + gabow.createEdge(1149, 157, 49) + gabow.createEdge(798, 1021, 56) + gabow.createEdge(1646, 349, 97) + gabow.createEdge(877, 1980, 13) + gabow.createEdge(645, 1268, 25) + gabow.createEdge(614, 1272, 64) + gabow.createEdge(1776, 384, 75) + gabow.createEdge(1727, 1692, 29) + gabow.createEdge(1512, 1464, 56) + gabow.createEdge(574, 1983, 3) + gabow.createEdge(1972, 845, 57) + gabow.createEdge(51, 865, 28) + gabow.createEdge(567, 1982, 2) + gabow.createEdge(598, 951, 76) + gabow.createEdge(193, 456, 5) + gabow.createEdge(143, 285, 84) + gabow.createEdge(1703, 3, 9) + gabow.createEdge(1114, 995, 28) + gabow.createEdge(1453, 1012, 14) + gabow.createEdge(1507, 823, 47) + gabow.createEdge(1499, 1750, 91) + gabow.createEdge(1563, 1194, 50) + gabow.createEdge(482, 1431, 30) + gabow.createEdge(1487, 637, 38) + gabow.createEdge(1696, 1428, 62) + gabow.createEdge(1775, 1365, 52) + gabow.createEdge(5, 987, 74) + gabow.createEdge(1709, 834, 97) + gabow.createEdge(1133, 1292, 11) + gabow.createEdge(1406, 66, 55) + gabow.createEdge(945, 1001, 25) + gabow.createEdge(983, 836, 55) + gabow.createEdge(1939, 885, 100) + gabow.createEdge(1175, 1585, 55) + gabow.createEdge(898, 542, 56) + gabow.createEdge(1630, 1406, 6) + gabow.createEdge(38, 391, 38) + gabow.createEdge(1246, 892, 56) + gabow.createEdge(1487, 625, 90) + gabow.createEdge(516, 1860, 65) + gabow.createEdge(1102, 1865, 1) + gabow.createEdge(457, 959, 87) + gabow.createEdge(221, 334, 1) + gabow.createEdge(726, 1605, 57) + gabow.createEdge(1180, 1000, 22) + gabow.createEdge(463, 1928, 81) + gabow.createEdge(603, 1181, 4) + gabow.createEdge(985, 469, 43) + gabow.createEdge(1405, 1730, 37) + gabow.createEdge(665, 801, 55) + gabow.createEdge(856, 1527, 100) + gabow.createEdge(919, 499, 24) + gabow.createEdge(1647, 357, 73) + gabow.createEdge(1991, 98, 39) + gabow.createEdge(1878, 1904, 28) + gabow.createEdge(76, 1681, 81) + gabow.createEdge(141, 106, 27) + gabow.createEdge(494, 1855, 73) + gabow.createEdge(7, 1723, 68) + gabow.createEdge(1747, 312, 55) + gabow.createEdge(1433, 1771, 47) + gabow.createEdge(1884, 350, 30) + gabow.createEdge(1838, 1849, 21) + gabow.createEdge(485, 1267, 15) + gabow.createEdge(159, 844, 65) + gabow.createEdge(883, 213, 78) + gabow.createEdge(31, 1356, 94) + gabow.createEdge(1967, 731, 15) + gabow.createEdge(853, 1559, 76) + gabow.createEdge(1809, 1069, 25) + gabow.createEdge(1960, 985, 94) + gabow.createEdge(1048, 582, 6) + gabow.createEdge(1116, 1873, 100) + gabow.createEdge(259, 1993, 66) + gabow.createEdge(1044, 381, 24) + gabow.createEdge(1751, 1037, 74) + gabow.createEdge(969, 1727, 92) + gabow.createEdge(960, 1404, 23) + gabow.createEdge(1926, 835, 82) + gabow.createEdge(1984, 774, 35) + gabow.createEdge(1185, 702, 76) + gabow.createEdge(1796, 1452, 33) + gabow.createEdge(122, 662, 98) + gabow.createEdge(1866, 1648, 10) + gabow.createEdge(882, 1101, 59) + gabow.createEdge(1880, 119, 33) + gabow.createEdge(1530, 1912, 23) + gabow.createEdge(1365, 225, 36) + gabow.createEdge(1589, 1369, 3) + gabow.createEdge(1993, 1262, 25) + gabow.createEdge(935, 1970, 31) + gabow.createEdge(1111, 708, 55) + gabow.createEdge(1437, 1420, 77) + gabow.createEdge(1473, 1189, 11) + gabow.createEdge(1525, 499, 17) + gabow.createEdge(1765, 1953, 9) + gabow.createEdge(1546, 202, 6) + gabow.createEdge(790, 970, 21) + gabow.createEdge(1689, 813, 63) + gabow.createEdge(672, 585, 25) + gabow.createEdge(743, 1952, 97) + gabow.createEdge(1933, 1828, 42) + gabow.createEdge(320, 380, 22) + gabow.createEdge(312, 473, 40) + gabow.createEdge(260, 961, 61) + gabow.createEdge(1011, 774, 8) + gabow.createEdge(110, 309, 3) + gabow.createEdge(1112, 213, 2) + gabow.createEdge(1329, 1969, 99) + gabow.createEdge(1992, 1172, 94) + gabow.createEdge(1664, 1623, 10) + gabow.createEdge(214, 165, 14) + gabow.createEdge(1433, 8, 98) + gabow.createEdge(224, 256, 8) + gabow.createEdge(1518, 1699, 61) + gabow.createEdge(829, 246, 26) + gabow.createEdge(747, 956, 53) + gabow.createEdge(998, 276, 89) + gabow.createEdge(341, 143, 54) + gabow.createEdge(1960, 1880, 93) + gabow.createEdge(223, 822, 47) + gabow.createEdge(1496, 647, 45) + gabow.createEdge(860, 751, 12) + gabow.createEdge(1089, 1912, 1) + gabow.createEdge(1487, 837, 88) + gabow.createEdge(596, 679, 99) + gabow.createEdge(1254, 25, 95) + gabow.createEdge(1270, 1748, 26) + gabow.createEdge(1776, 1987, 40) + gabow.createEdge(1307, 461, 44) + gabow.createEdge(1581, 1073, 32) + gabow.createEdge(1489, 1795, 50) + gabow.createEdge(1991, 622, 17) + gabow.createEdge(1553, 1793, 40) + gabow.createEdge(907, 924, 28) + gabow.createEdge(670, 1477, 19) + gabow.createEdge(1384, 806, 26) + gabow.createEdge(713, 1581, 37) + gabow.createEdge(1651, 1615, 24) + gabow.createEdge(1095, 1245, 51) + gabow.createEdge(1230, 1713, 66) + gabow.createEdge(1930, 544, 34) + gabow.createEdge(1844, 1781, 27) + gabow.createEdge(1011, 650, 1) + gabow.createEdge(320, 1720, 40) + gabow.createEdge(1905, 1611, 95) + gabow.createEdge(706, 1832, 94) + gabow.createEdge(488, 1626, 72) + gabow.createEdge(1559, 11, 47) + gabow.createEdge(1718, 1978, 44) + gabow.createEdge(463, 330, 55) + gabow.createEdge(513, 1469, 34) + gabow.createEdge(787, 328, 21) + gabow.createEdge(1234, 1178, 39) + gabow.createEdge(34, 26, 33) + gabow.createEdge(1417, 1188, 93) + gabow.createEdge(98, 1398, 25) + gabow.createEdge(1026, 669, 70) + gabow.createEdge(1689, 1203, 15) + gabow.createEdge(412, 23, 34) + gabow.createEdge(952, 1054, 30) + gabow.createEdge(1611, 431, 45) + gabow.createEdge(725, 615, 87) + gabow.createEdge(916, 594, 35) + gabow.createEdge(39, 223, 2) + gabow.createEdge(1766, 1440, 93) + gabow.createEdge(886, 872, 37) + gabow.createEdge(521, 1545, 25) + gabow.createEdge(932, 1908, 56) + gabow.createEdge(1866, 1710, 87) + gabow.createEdge(694, 758, 68) + gabow.createEdge(1639, 1130, 21) + gabow.createEdge(1101, 1009, 68) + gabow.createEdge(1306, 1144, 65) + gabow.createEdge(1982, 705, 24) + gabow.createEdge(1979, 1779, 48) + gabow.createEdge(565, 1385, 60) + gabow.createEdge(584, 1657, 44) + gabow.createEdge(229, 762, 35) + gabow.createEdge(394, 1743, 90) + gabow.createEdge(787, 142, 80) + gabow.createEdge(1040, 896, 22) + gabow.createEdge(945, 578, 48) + gabow.createEdge(29, 213, 4) + gabow.createEdge(1240, 1136, 47) + gabow.createEdge(883, 623, 25) + gabow.createEdge(662, 272, 52) + gabow.createEdge(1322, 192, 70) + gabow.createEdge(1460, 1605, 68) + gabow.createEdge(919, 1083, 100) + gabow.createEdge(1324, 227, 42) + gabow.createEdge(1395, 1723, 42) + gabow.createEdge(66, 617, 73) + gabow.createEdge(499, 1035, 66) + gabow.createEdge(1173, 929, 82) + gabow.createEdge(1452, 1729, 62) + gabow.createEdge(319, 1545, 71) + gabow.createEdge(1123, 406, 42) + gabow.createEdge(652, 504, 42) + gabow.createEdge(910, 1886, 40) + gabow.createEdge(1330, 1250, 30) + gabow.createEdge(1638, 403, 85) + gabow.createEdge(278, 1725, 14) + gabow.createEdge(1541, 75, 48) + gabow.createEdge(1479, 1241, 63) + gabow.createEdge(1971, 1234, 80) + gabow.createEdge(743, 727, 62) + gabow.createEdge(728, 1540, 13) + gabow.createEdge(1015, 1577, 36) + gabow.createEdge(1103, 1045, 53) + gabow.createEdge(271, 939, 56) + gabow.createEdge(1056, 1303, 27) + gabow.createEdge(1774, 1911, 62) + gabow.createEdge(1144, 639, 97) + gabow.createEdge(1700, 1612, 28) + gabow.createEdge(1319, 1383, 77) + gabow.createEdge(1513, 54, 87) + gabow.createEdge(940, 1933, 36) + gabow.createEdge(476, 233, 87) + gabow.createEdge(343, 867, 6) + gabow.createEdge(680, 42, 22) + gabow.createEdge(1468, 529, 31) + gabow.createEdge(1590, 565, 51) + gabow.createEdge(577, 1974, 55) + gabow.createEdge(1829, 1927, 83) + gabow.createEdge(1977, 244, 31) + gabow.createEdge(1260, 1176, 39) + gabow.createEdge(638, 1428, 59) + gabow.createEdge(1206, 1103, 67) + gabow.createEdge(73, 943, 3) + gabow.createEdge(972, 1199, 5) + gabow.createEdge(1624, 1324, 75) + gabow.createEdge(1424, 480, 29) + gabow.createEdge(850, 1232, 29) + gabow.createEdge(746, 1289, 71) + gabow.createEdge(591, 1257, 49) + gabow.createEdge(1594, 1054, 50) + gabow.createEdge(1383, 580, 85) + gabow.createEdge(1783, 738, 37) + gabow.createEdge(21, 1102, 83) + gabow.createEdge(1238, 669, 38) + gabow.createEdge(1148, 1649, 32) + gabow.createEdge(1560, 165, 90) + gabow.createEdge(824, 654, 62) + gabow.createEdge(345, 63, 1) + gabow.createEdge(358, 1293, 56) + gabow.createEdge(980, 576, 78) + gabow.createEdge(302, 1615, 76) + gabow.createEdge(131, 922, 54) + gabow.createEdge(241, 1925, 52) + gabow.createEdge(1763, 1721, 18) + gabow.createEdge(1243, 102, 92) + gabow.createEdge(1154, 1128, 91) + gabow.createEdge(730, 1368, 82) + gabow.createEdge(1341, 610, 10) + gabow.createEdge(15, 312, 64) + gabow.createEdge(236, 1792, 9) + gabow.createEdge(1997, 1411, 71) + gabow.createEdge(709, 977, 76) + gabow.createEdge(1725, 1830, 22) + gabow.createEdge(261, 1990, 28) + gabow.createEdge(957, 239, 73) + gabow.createEdge(1545, 434, 2) + gabow.createEdge(1089, 1905, 20) + gabow.createEdge(704, 1812, 54) + gabow.createEdge(1602, 1524, 79) + gabow.createEdge(894, 174, 44) + gabow.createEdge(1186, 1417, 100) + gabow.createEdge(1724, 44, 46) + gabow.createEdge(992, 960, 4) + gabow.createEdge(1123, 329, 62) + gabow.createEdge(1338, 476, 12) + gabow.createEdge(1048, 326, 52) + gabow.createEdge(179, 1608, 71) + gabow.createEdge(934, 1536, 50) + gabow.createEdge(806, 1659, 29) + gabow.createEdge(1895, 1129, 22) + gabow.createEdge(1762, 659, 48) + gabow.createEdge(781, 1155, 35) + gabow.createEdge(993, 710, 99) + gabow.createEdge(1896, 1452, 53) + gabow.createEdge(1874, 951, 74) + gabow.createEdge(1509, 1947, 14) + gabow.createEdge(497, 1740, 41) + gabow.createEdge(983, 624, 43) + gabow.createEdge(853, 1226, 46) + gabow.createEdge(1053, 839, 86) + gabow.createEdge(664, 781, 1) + gabow.createEdge(824, 664, 19) + gabow.createEdge(552, 1941, 66) + gabow.createEdge(549, 30, 25) + gabow.createEdge(862, 878, 54) + gabow.createEdge(904, 187, 88) + gabow.createEdge(933, 440, 25) + gabow.createEdge(348, 538, 3) + gabow.createEdge(123, 208, 41) + gabow.createEdge(1755, 653, 78) + gabow.createEdge(231, 728, 92) + gabow.createEdge(1916, 321, 37) + gabow.createEdge(1896, 1181, 37) + gabow.createEdge(1822, 1363, 27) + gabow.createEdge(1031, 1863, 34) + gabow.createEdge(318, 1610, 53) + gabow.createEdge(1771, 1370, 20) + gabow.createEdge(971, 582, 66) + gabow.createEdge(1492, 960, 89) + gabow.createEdge(1019, 162, 58) + gabow.createEdge(687, 526, 95) + gabow.createEdge(508, 995, 97) + gabow.createEdge(281, 1772, 67) + gabow.createEdge(1489, 259, 12) + gabow.createEdge(1521, 955, 61) + gabow.createEdge(1352, 1876, 41) + gabow.createEdge(859, 1543, 75) + gabow.createEdge(1094, 1407, 85) + gabow.createEdge(1212, 1674, 45) + gabow.createEdge(927, 124, 96) + gabow.createEdge(1789, 248, 64) + gabow.createEdge(929, 1070, 70) + gabow.createEdge(359, 1966, 95) + gabow.createEdge(965, 1986, 37) + gabow.createEdge(1184, 1180, 65) + gabow.createEdge(920, 1777, 72) + gabow.createEdge(701, 941, 49) + gabow.createEdge(434, 1002, 16) + gabow.createEdge(1412, 895, 33) + gabow.createEdge(1950, 431, 29) + gabow.createEdge(948, 1222, 89) + gabow.createEdge(1358, 1620, 35) + gabow.createEdge(575, 758, 6) + gabow.createEdge(1912, 1906, 22) + gabow.createEdge(1052, 259, 33) + gabow.createEdge(687, 1355, 45) + gabow.createEdge(285, 374, 11) + gabow.createEdge(1912, 1721, 20) + gabow.createEdge(743, 910, 59) + gabow.createEdge(702, 1979, 87) + gabow.createEdge(1964, 50, 15) + gabow.createEdge(28, 1672, 70) + gabow.createEdge(96, 980, 66) + gabow.createEdge(1379, 302, 1) + gabow.createEdge(1504, 656, 48) + gabow.createEdge(354, 1880, 12) + gabow.createEdge(827, 87, 98) + gabow.createEdge(841, 921, 50) + gabow.createEdge(1703, 1254, 64) + gabow.createEdge(1007, 69, 87) + gabow.createEdge(1658, 1227, 69) + gabow.createEdge(366, 450, 22) + gabow.createEdge(699, 849, 58) + gabow.createEdge(1040, 635, 72) + gabow.createEdge(727, 1737, 88) + gabow.createEdge(1778, 1806, 100) + gabow.createEdge(1633, 461, 35) + gabow.createEdge(1304, 550, 8) + gabow.createEdge(1397, 868, 40) + gabow.createEdge(459, 18, 60) + gabow.createEdge(114, 1059, 88) + gabow.createEdge(326, 1337, 49) + gabow.createEdge(562, 1109, 56) + gabow.createEdge(1531, 146, 13) + gabow.createEdge(1270, 1813, 6) + gabow.createEdge(1669, 993, 66) + gabow.createEdge(24, 1876, 7) + gabow.createEdge(229, 1094, 93) + gabow.createEdge(545, 676, 2) + gabow.createEdge(1951, 167, 14) + gabow.createEdge(850, 1828, 27) + gabow.createEdge(900, 274, 82) + gabow.createEdge(1092, 1842, 62) + gabow.createEdge(235, 1176, 19) + gabow.createEdge(146, 1559, 48) + gabow.createEdge(1522, 644, 73) + gabow.createEdge(54, 1657, 32) + gabow.createEdge(523, 1097, 38) + gabow.createEdge(103, 1630, 51) + gabow.createEdge(729, 410, 55) + gabow.createEdge(852, 349, 37) + gabow.createEdge(1043, 1929, 23) + gabow.createEdge(1794, 1264, 91) + gabow.createEdge(1617, 1183, 60) + gabow.createEdge(999, 936, 46) + gabow.createEdge(986, 779, 20) + gabow.createEdge(847, 1423, 27) + gabow.createEdge(328, 1160, 34) + gabow.createEdge(1410, 1572, 1) + gabow.createEdge(1850, 1056, 36) + gabow.createEdge(143, 1354, 47) + gabow.createEdge(479, 1316, 4) + gabow.createEdge(152, 1135, 77) + gabow.createEdge(1361, 1534, 45) + gabow.createEdge(446, 450, 25) + gabow.createEdge(1136, 293, 98) + gabow.createEdge(1466, 197, 55) + gabow.createEdge(746, 350, 29) + gabow.createEdge(1418, 1385, 48) + gabow.createEdge(130, 1334, 86) + gabow.createEdge(285, 959, 67) + gabow.createEdge(1458, 34, 19) + gabow.createEdge(1089, 1842, 44) + gabow.createEdge(760, 1606, 41) + gabow.createEdge(1506, 609, 83) + gabow.createEdge(1534, 1064, 99) + gabow.createEdge(1959, 1166, 11) + gabow.createEdge(1192, 794, 55) + gabow.createEdge(139, 304, 86) + gabow.createEdge(662, 1896, 52) + gabow.createEdge(218, 1852, 26) + gabow.createEdge(1805, 1807, 92) + gabow.createEdge(1573, 1177, 19) + gabow.createEdge(1605, 1700, 95) + gabow.createEdge(1411, 206, 49) + gabow.createEdge(1753, 911, 36) + gabow.createEdge(206, 1066, 22) + gabow.createEdge(1166, 560, 4) + gabow.createEdge(1918, 720, 48) + gabow.createEdge(550, 465, 93) + gabow.createEdge(1609, 435, 8) + gabow.createEdge(1471, 948, 66) + gabow.createEdge(637, 1312, 20) + gabow.createEdge(801, 1359, 66) + gabow.createEdge(1663, 1792, 2) + gabow.createEdge(1480, 1740, 100) + gabow.createEdge(559, 773, 8) + gabow.createEdge(650, 1803, 52) + gabow.createEdge(1864, 1686, 48) + gabow.createEdge(778, 1566, 9) + gabow.createEdge(544, 1926, 40) + gabow.createEdge(366, 1598, 71) + gabow.createEdge(1421, 1634, 100) + gabow.createEdge(602, 1660, 83) + gabow.createEdge(1863, 216, 13) + gabow.createEdge(1942, 113, 69) + gabow.createEdge(569, 1205, 78) + gabow.createEdge(1244, 1186, 69) + gabow.createEdge(1685, 1443, 4) + gabow.createEdge(1693, 782, 57) + gabow.createEdge(35, 1707, 99) + gabow.createEdge(1938, 1862, 33) + gabow.createEdge(297, 1998, 3) + gabow.createEdge(1064, 956, 97) + gabow.createEdge(1834, 1033, 82) + gabow.createEdge(932, 220, 36) + gabow.createEdge(1588, 327, 42) + gabow.createEdge(678, 200, 91) + gabow.createEdge(1969, 108, 2) + gabow.createEdge(726, 1695, 94) + gabow.createEdge(1472, 1946, 4) + gabow.createEdge(1285, 790, 64) + gabow.createEdge(91, 58, 31) + gabow.createEdge(237, 893, 34) + gabow.createEdge(1656, 469, 69) + gabow.createEdge(1837, 1246, 81) + gabow.createEdge(513, 950, 22) + gabow.createEdge(1058, 274, 74) + gabow.createEdge(1149, 2, 16) + gabow.createEdge(822, 220, 71) + gabow.createEdge(1314, 101, 91) + gabow.createEdge(1968, 150, 99) + gabow.createEdge(839, 1218, 44) + gabow.createEdge(735, 1325, 41) + gabow.createEdge(1385, 613, 51) + gabow.createEdge(1558, 336, 11) + gabow.createEdge(1042, 1071, 87) + gabow.createEdge(979, 1461, 16) + gabow.createEdge(1215, 903, 13) + gabow.createEdge(1684, 799, 45) + gabow.createEdge(755, 266, 12) + gabow.createEdge(542, 872, 63) + gabow.createEdge(1990, 1356, 22) + gabow.createEdge(422, 1739, 20) + gabow.createEdge(1759, 1831, 50) + gabow.createEdge(425, 699, 76) + gabow.createEdge(1496, 1885, 44) + gabow.createEdge(1546, 1721, 99) + gabow.createEdge(1816, 904, 16) + gabow.createEdge(73, 1973, 30) + gabow.createEdge(942, 1352, 87) + gabow.createEdge(696, 819, 20) + gabow.createEdge(923, 1655, 55) + gabow.createEdge(1120, 937, 25) + gabow.createEdge(1683, 423, 60) + gabow.createEdge(954, 736, 73) + gabow.createEdge(1325, 1484, 28) + gabow.createEdge(1278, 285, 28) + gabow.createEdge(349, 1173, 51) + gabow.createEdge(423, 513, 97) + gabow.createEdge(927, 783, 19) + gabow.createEdge(24, 864, 52) + gabow.createEdge(1939, 117, 17) + gabow.createEdge(1276, 350, 13) + gabow.createEdge(449, 379, 60) + gabow.createEdge(201, 276, 62) + gabow.createEdge(1643, 1584, 38) + gabow.createEdge(651, 266, 14) + gabow.createEdge(546, 2, 40) + gabow.createEdge(833, 25, 28) + gabow.createEdge(785, 1845, 20) + gabow.createEdge(1194, 84, 56) + gabow.createEdge(762, 1114, 99) + gabow.createEdge(264, 1333, 90) + gabow.createEdge(1656, 1953, 33) + gabow.createEdge(1998, 749, 69) + gabow.createEdge(1101, 6, 80) + gabow.createEdge(1812, 306, 32) + gabow.createEdge(507, 264, 1) + gabow.createEdge(1222, 1943, 57) + gabow.createEdge(817, 1897, 14) + gabow.createEdge(1822, 1339, 11) + gabow.createEdge(1845, 103, 11) + gabow.createEdge(1566, 873, 10) + gabow.createEdge(737, 337, 32) + gabow.createEdge(1498, 604, 62) + gabow.createEdge(1507, 1569, 41) + gabow.createEdge(290, 1482, 2) + gabow.createEdge(1910, 612, 66) + gabow.createEdge(193, 1898, 60) + gabow.createEdge(1319, 550, 78) + gabow.createEdge(1378, 859, 19) + gabow.createEdge(889, 214, 49) + gabow.createEdge(651, 906, 64) + gabow.createEdge(713, 1044, 8) + gabow.createEdge(219, 1353, 47) + gabow.createEdge(1583, 1579, 85) + gabow.createEdge(1577, 1985, 45) + gabow.createEdge(31, 428, 31) + gabow.createEdge(1980, 1416, 50) + gabow.createEdge(1498, 586, 88) + gabow.createEdge(355, 730, 51) + gabow.createEdge(459, 834, 78) + gabow.createEdge(992, 794, 88) + gabow.createEdge(450, 955, 75) + gabow.createEdge(1778, 711, 45) + gabow.createEdge(973, 1096, 14) + gabow.createEdge(816, 66, 46) + gabow.createEdge(1518, 660, 63) + gabow.createEdge(530, 1264, 27) + gabow.createEdge(1653, 1294, 68) + gabow.createEdge(1460, 1539, 54) + gabow.createEdge(1776, 1909, 5) + gabow.createEdge(1110, 68, 80) + gabow.createEdge(266, 1904, 89) + gabow.createEdge(1503, 1154, 45) + gabow.createEdge(1709, 1546, 86) + gabow.createEdge(888, 566, 98) + gabow.createEdge(1500, 209, 84) + gabow.createEdge(1734, 1991, 50) + gabow.createEdge(1698, 1203, 62) + gabow.createEdge(1057, 763, 53) + gabow.createEdge(404, 136, 48) + gabow.createEdge(625, 1001, 89) + gabow.createEdge(1923, 1777, 84) + gabow.createEdge(1663, 827, 73) + gabow.createEdge(1187, 97, 13) + gabow.createEdge(871, 1228, 17) + gabow.createEdge(713, 534, 30) + gabow.createEdge(236, 1871, 16) + gabow.createEdge(1734, 1337, 27) + gabow.createEdge(995, 1903, 38) + gabow.createEdge(1026, 1971, 28) + gabow.createEdge(1620, 1966, 99) + gabow.createEdge(1428, 288, 70) + gabow.createEdge(1768, 1314, 11) + gabow.createEdge(238, 1382, 6) + gabow.createEdge(900, 720, 63) + gabow.createEdge(798, 1590, 82) + gabow.createEdge(365, 152, 24) + gabow.createEdge(1036, 990, 89) + gabow.createEdge(1207, 1463, 1) + gabow.createEdge(1743, 215, 14) + gabow.createEdge(234, 1107, 54) + gabow.createEdge(829, 1701, 36) + gabow.createEdge(278, 1597, 84) + gabow.createEdge(259, 967, 2) + gabow.createEdge(638, 343, 17) + gabow.createEdge(751, 0, 46) + gabow.createEdge(185, 1304, 33) + gabow.createEdge(322, 393, 54) + gabow.createEdge(1528, 913, 39) + gabow.createEdge(664, 969, 48) + gabow.createEdge(1441, 340, 69) + gabow.createEdge(792, 293, 63) + gabow.createEdge(85, 1387, 33) + gabow.createEdge(326, 1304, 57) + gabow.createEdge(1448, 912, 31) + gabow.createEdge(1996, 362, 20) + gabow.createEdge(1114, 1356, 100) + gabow.createEdge(350, 1799, 98) + gabow.createEdge(418, 1708, 37) + gabow.createEdge(171, 1411, 98) + gabow.createEdge(1904, 261, 85) + gabow.createEdge(1196, 816, 77) + gabow.createEdge(1497, 1488, 7) + gabow.createEdge(309, 1423, 7) + gabow.createEdge(1765, 74, 64) + gabow.createEdge(492, 1714, 69) + gabow.createEdge(1603, 1635, 65) + gabow.createEdge(1897, 968, 67) + gabow.createEdge(369, 1004, 50) + gabow.createEdge(1127, 485, 7) + gabow.createEdge(170, 211, 20) + gabow.createEdge(1268, 961, 54) + gabow.createEdge(436, 748, 17) + gabow.createEdge(1369, 1271, 37) + gabow.createEdge(1394, 1981, 7) + gabow.createEdge(1811, 637, 12) + gabow.createEdge(1011, 1645, 31) + gabow.createEdge(813, 511, 31) + gabow.createEdge(771, 1488, 21) + gabow.createEdge(349, 1359, 74) + gabow.createEdge(1360, 748, 7) + gabow.createEdge(1955, 1848, 28) + gabow.createEdge(1998, 683, 85) + gabow.createEdge(1000, 1072, 50) + gabow.createEdge(995, 363, 57) + gabow.createEdge(1461, 1488, 47) + gabow.createEdge(173, 1126, 80) + gabow.createEdge(1014, 177, 53) + gabow.createEdge(1441, 1746, 64) + gabow.createEdge(234, 1988, 88) + gabow.createEdge(1822, 1074, 1) + gabow.createEdge(1862, 1961, 19) + gabow.createEdge(812, 1932, 4) + gabow.createEdge(755, 519, 43) + gabow.createEdge(1682, 1755, 28) + gabow.createEdge(391, 129, 51) + gabow.createEdge(974, 351, 67) + gabow.createEdge(672, 511, 38) + gabow.createEdge(1115, 1338, 77) + gabow.createEdge(530, 24, 46) + gabow.createEdge(1806, 568, 70) + gabow.createEdge(707, 256, 37) + gabow.createEdge(714, 602, 47) + gabow.createEdge(1102, 1749, 14) + gabow.createEdge(1816, 1159, 90) + gabow.createEdge(1691, 525, 36) + gabow.createEdge(304, 62, 12) + gabow.createEdge(1540, 1177, 71) + gabow.createEdge(18, 798, 29) + gabow.createEdge(988, 714, 99) + gabow.createEdge(619, 908, 10) + gabow.createEdge(867, 1134, 36) + gabow.createEdge(367, 102, 9) + gabow.createEdge(803, 965, 32) + gabow.createEdge(1592, 1518, 64) + gabow.createEdge(84, 1463, 86) + gabow.createEdge(555, 993, 11) + gabow.createEdge(141, 1311, 58) + gabow.createEdge(1372, 440, 15) + gabow.createEdge(1196, 1260, 40) + gabow.createEdge(1840, 1477, 49) + gabow.createEdge(1949, 564, 98) + gabow.createEdge(817, 1674, 33) + gabow.createEdge(811, 1496, 83) + gabow.createEdge(1865, 1749, 53) + gabow.createEdge(623, 342, 80) + gabow.createEdge(1425, 205, 1) + gabow.createEdge(1978, 220, 64) + gabow.createEdge(1075, 1718, 100) + gabow.createEdge(1954, 1055, 62) + gabow.createEdge(615, 230, 60) + gabow.createEdge(275, 1741, 97) + gabow.createEdge(261, 1469, 36) + gabow.createEdge(855, 397, 76) + gabow.createEdge(1239, 345, 80) + gabow.createEdge(1503, 1869, 1) + gabow.createEdge(1890, 653, 20) + gabow.createEdge(1794, 237, 41) + gabow.createEdge(656, 1536, 64) + gabow.createEdge(1936, 259, 16) + gabow.createEdge(583, 1292, 25) + gabow.createEdge(1827, 790, 21) + gabow.createEdge(1515, 1389, 19) + gabow.createEdge(1962, 182, 78) + gabow.createEdge(49, 888, 99) + gabow.createEdge(303, 1779, 91) + gabow.createEdge(1300, 929, 60) + gabow.createEdge(1189, 524, 98) + gabow.createEdge(1598, 681, 58) + gabow.createEdge(905, 1716, 45) + gabow.createEdge(304, 1186, 81) + gabow.createEdge(388, 1240, 76) + gabow.createEdge(473, 154, 35) + gabow.createEdge(282, 904, 65) + gabow.createEdge(149, 488, 99) + gabow.createEdge(1101, 131, 28) + gabow.createEdge(1589, 1663, 30) + gabow.createEdge(1076, 704, 93) + gabow.createEdge(1746, 1459, 18) + gabow.createEdge(1675, 524, 26) + gabow.createEdge(360, 97, 5) + gabow.createEdge(325, 68, 29) + gabow.createEdge(1391, 1571, 79) + gabow.createEdge(80, 321, 67) + gabow.createEdge(1974, 1863, 27) + gabow.createEdge(1678, 340, 49) + gabow.createEdge(255, 1839, 76) + gabow.createEdge(515, 814, 89) + gabow.createEdge(75, 1717, 4) + gabow.createEdge(324, 302, 88) + gabow.createEdge(989, 1071, 40) + gabow.createEdge(382, 523, 52) + gabow.createEdge(238, 1926, 90) + gabow.createEdge(476, 616, 13) + gabow.createEdge(780, 1096, 57) + gabow.createEdge(391, 761, 31) + gabow.createEdge(603, 1564, 95) + gabow.createEdge(1310, 554, 35) + gabow.createEdge(1656, 1810, 47) + gabow.createEdge(1326, 1299, 97) + gabow.createEdge(1586, 1802, 50) + gabow.createEdge(1996, 1648, 96) + gabow.createEdge(770, 1772, 50) + gabow.createEdge(639, 1438, 6) + gabow.createEdge(1799, 33, 68) + gabow.createEdge(908, 1955, 16) + gabow.createEdge(1382, 1353, 98) + gabow.createEdge(550, 1487, 39) + gabow.createEdge(110, 1251, 58) + gabow.createEdge(194, 1363, 100) + gabow.createEdge(1140, 368, 14) + gabow.createEdge(171, 1046, 23) + gabow.createEdge(1269, 227, 6) + gabow.createEdge(1420, 1783, 13) + gabow.createEdge(946, 1224, 4) + gabow.createEdge(1537, 1272, 37) + gabow.createEdge(178, 1633, 47) + gabow.createEdge(829, 1636, 97) + gabow.createEdge(253, 216, 40) + gabow.createEdge(1033, 1444, 85) + gabow.createEdge(449, 1654, 9) + gabow.createEdge(1003, 852, 65) + gabow.createEdge(1215, 1047, 28) + gabow.createEdge(884, 1286, 80) + gabow.createEdge(76, 1700, 58) + gabow.createEdge(1191, 1315, 53) + gabow.createEdge(1251, 869, 31) + gabow.createEdge(1248, 537, 19) + gabow.createEdge(1912, 1928, 7) + gabow.createEdge(1070, 1553, 5) + gabow.createEdge(1693, 1842, 71) + gabow.createEdge(765, 895, 73) + gabow.createEdge(1466, 1663, 71) + gabow.createEdge(997, 1704, 17) + gabow.createEdge(611, 1222, 6) + gabow.createEdge(1104, 1411, 60) + gabow.createEdge(499, 1378, 89) + gabow.createEdge(505, 874, 64) + gabow.createEdge(1675, 409, 17) + gabow.createEdge(1640, 786, 55) + gabow.createEdge(407, 978, 50) + gabow.createEdge(401, 1130, 88) + gabow.createEdge(729, 675, 86) + gabow.createEdge(429, 1374, 2) + gabow.createEdge(1194, 394, 56) + gabow.createEdge(401, 1611, 97) + gabow.createEdge(1055, 435, 12) + gabow.createEdge(955, 1169, 62) + gabow.createEdge(1908, 45, 51) + gabow.createEdge(1430, 1338, 51) + gabow.createEdge(1383, 719, 64) + gabow.createEdge(1603, 1469, 87) + gabow.createEdge(105, 1112, 88) + gabow.createEdge(307, 1457, 72) + gabow.createEdge(1780, 586, 21) + gabow.createEdge(461, 183, 72) + gabow.createEdge(1676, 1004, 87) + gabow.createEdge(1621, 1243, 20) + gabow.createEdge(1963, 1674, 17) + gabow.createEdge(1696, 1589, 35) + gabow.createEdge(510, 367, 28) + gabow.createEdge(1483, 1036, 93) + gabow.createEdge(24, 356, 22) + gabow.createEdge(1769, 1566, 10) + gabow.createEdge(512, 570, 58) + gabow.createEdge(29, 848, 30) + gabow.createEdge(351, 221, 82) + gabow.createEdge(219, 1971, 29) + gabow.createEdge(284, 1169, 43) + gabow.createEdge(358, 310, 21) + gabow.createEdge(1761, 1175, 63) + gabow.createEdge(388, 1137, 99) + gabow.createEdge(859, 1746, 25) + gabow.createEdge(402, 1665, 50) + gabow.createEdge(1550, 939, 30) + gabow.createEdge(1158, 228, 78) + gabow.createEdge(1693, 132, 13) + gabow.createEdge(1975, 1142, 80) + gabow.createEdge(299, 466, 29) + gabow.createEdge(1332, 1303, 27) + gabow.createEdge(1335, 1747, 49) + gabow.createEdge(1277, 148, 100) + gabow.createEdge(27, 1273, 100) + gabow.createEdge(355, 798, 81) + gabow.createEdge(538, 1303, 88) + gabow.createEdge(1931, 1946, 92) + gabow.createEdge(846, 327, 1) + gabow.createEdge(534, 1388, 33) + gabow.createEdge(1325, 1762, 10) + gabow.createEdge(1977, 1963, 60) + gabow.createEdge(658, 568, 61) + gabow.createEdge(508, 1331, 89) + gabow.createEdge(973, 1437, 27) + gabow.createEdge(1693, 404, 51) + gabow.createEdge(1766, 1064, 80) + gabow.createEdge(289, 752, 10) + gabow.createEdge(1832, 1251, 43) + gabow.createEdge(1704, 1907, 51) + gabow.createEdge(1275, 882, 67) + gabow.createEdge(281, 478, 81) + gabow.createEdge(657, 1999, 50) + gabow.createEdge(1113, 1155, 50) + gabow.createEdge(1689, 539, 86) + gabow.createEdge(1512, 1895, 48) + gabow.createEdge(1238, 391, 59) + gabow.createEdge(178, 1932, 68) + gabow.createEdge(1944, 1632, 75) + gabow.createEdge(1555, 1649, 85) + gabow.createEdge(1639, 99, 24) + gabow.createEdge(1678, 223, 10) + gabow.createEdge(1842, 1665, 22) + gabow.createEdge(1805, 1093, 84) + gabow.createEdge(1414, 1884, 99) + gabow.createEdge(653, 1359, 30) + gabow.createEdge(569, 325, 48) + gabow.createEdge(1495, 380, 61) + gabow.createEdge(466, 514, 2) + gabow.createEdge(1547, 1583, 11) + gabow.createEdge(1473, 86, 64) + gabow.createEdge(693, 892, 86) + gabow.createEdge(574, 975, 52) + gabow.createEdge(384, 810, 7) + gabow.createEdge(1918, 973, 15) + gabow.createEdge(31, 965, 67) + gabow.createEdge(1678, 1205, 55) + gabow.createEdge(646, 449, 96) + gabow.createEdge(239, 1610, 58) + gabow.createEdge(936, 1464, 33) + gabow.createEdge(312, 1340, 25) + gabow.createEdge(1335, 1356, 32) + gabow.createEdge(1077, 1235, 42) + gabow.createEdge(416, 1821, 7) + gabow.createEdge(1121, 355, 64) + gabow.createEdge(1989, 1495, 99) + gabow.createEdge(1590, 926, 97) + gabow.createEdge(9, 454, 85) + gabow.createEdge(1788, 1326, 69) + gabow.createEdge(1773, 1873, 91) + gabow.createEdge(716, 199, 26) + gabow.createEdge(1175, 441, 31) + gabow.createEdge(727, 1234, 67) + gabow.createEdge(422, 1790, 68) + gabow.createEdge(1394, 591, 4) + gabow.createEdge(1048, 1431, 13) + gabow.createEdge(792, 849, 29) + gabow.createEdge(1188, 38, 73) + gabow.createEdge(911, 1494, 94) + gabow.createEdge(73, 204, 40) + gabow.createEdge(979, 1529, 84) + gabow.createEdge(114, 1458, 4) + gabow.createEdge(189, 1341, 70) + gabow.createEdge(1850, 942, 31) + gabow.createEdge(1853, 1032, 51) + gabow.createEdge(1671, 653, 37) + gabow.createEdge(1431, 774, 43) + gabow.createEdge(1953, 744, 69) + gabow.createEdge(809, 1028, 91) + gabow.createEdge(805, 1497, 43) + gabow.createEdge(1041, 1748, 86) + gabow.createEdge(1649, 1721, 56) + gabow.createEdge(1021, 1872, 76) + gabow.createEdge(1089, 76, 23) + gabow.createEdge(80, 642, 37) + gabow.createEdge(754, 615, 70) + gabow.createEdge(1969, 1625, 10) + gabow.createEdge(1862, 559, 4) + gabow.createEdge(1357, 1291, 24) + gabow.createEdge(1068, 426, 74) + gabow.createEdge(766, 340, 1) + gabow.createEdge(40, 163, 55) + gabow.createEdge(359, 1301, 94) + gabow.createEdge(444, 1677, 73) + gabow.createEdge(742, 281, 73) + gabow.createEdge(328, 444, 24) + gabow.createEdge(475, 1798, 52) + gabow.createEdge(760, 1397, 60) + gabow.createEdge(1095, 312, 79) + gabow.createEdge(1230, 498, 93) + gabow.createEdge(618, 595, 47) + gabow.createEdge(1732, 1872, 54) + gabow.createEdge(995, 801, 63) + gabow.createEdge(1495, 1387, 38) + gabow.createEdge(1994, 523, 41) + gabow.createEdge(454, 774, 73) + gabow.createEdge(357, 1241, 81) + gabow.createEdge(468, 1083, 72) + gabow.createEdge(1925, 19, 24) + gabow.createEdge(1835, 254, 15) + gabow.createEdge(1464, 1585, 63) + gabow.createEdge(804, 722, 18) + gabow.createEdge(1037, 494, 87) + gabow.createEdge(1728, 1489, 67) + gabow.createEdge(843, 1565, 38) + gabow.createEdge(834, 1278, 46) + gabow.createEdge(1347, 1839, 61) + gabow.createEdge(1444, 1771, 50) + gabow.createEdge(1512, 1357, 94) + gabow.createEdge(716, 1319, 66) + gabow.createEdge(1135, 808, 7) + gabow.createEdge(1940, 1696, 85) + gabow.createEdge(769, 896, 8) + gabow.createEdge(1767, 1692, 97) + gabow.createEdge(719, 1203, 12) + gabow.createEdge(1734, 725, 74) + gabow.createEdge(243, 1171, 55) + gabow.createEdge(1047, 280, 100) + gabow.createEdge(295, 51, 22) + gabow.createEdge(1113, 1192, 7) + gabow.createEdge(269, 1935, 16) + gabow.createEdge(978, 1448, 30) + gabow.createEdge(656, 893, 28) + gabow.createEdge(1912, 1964, 1) + gabow.createEdge(1176, 1070, 22) + gabow.createEdge(146, 466, 18) + gabow.createEdge(1, 1146, 2) + gabow.createEdge(449, 1785, 96) + gabow.createEdge(1611, 1355, 42) + gabow.createEdge(189, 512, 3) + gabow.createEdge(909, 1561, 86) + gabow.createEdge(1232, 1905, 79) + gabow.createEdge(1145, 1603, 17) + gabow.createEdge(939, 1264, 52) + gabow.createEdge(1120, 502, 52) + gabow.createEdge(1699, 213, 36) + gabow.createEdge(911, 74, 24) + gabow.createEdge(300, 1101, 31) + gabow.createEdge(533, 148, 32) + gabow.createEdge(1391, 360, 80) + gabow.createEdge(375, 1396, 68) + gabow.createEdge(334, 1351, 36) + gabow.createEdge(1736, 1635, 28) + gabow.createEdge(1420, 1770, 24) + gabow.createEdge(702, 1645, 38) + gabow.createEdge(319, 942, 15) + gabow.createEdge(1366, 674, 6) + gabow.createEdge(182, 243, 68) + gabow.createEdge(979, 776, 7) + gabow.createEdge(790, 752, 38) + gabow.createEdge(391, 330, 74) + gabow.createEdge(832, 946, 65) + gabow.createEdge(237, 1264, 83) + gabow.createEdge(792, 437, 3) + gabow.createEdge(567, 1573, 85) + gabow.createEdge(489, 1819, 10) + gabow.createEdge(82, 1124, 68) + gabow.createEdge(1674, 241, 81) + gabow.createEdge(1150, 1819, 52) + gabow.createEdge(262, 1093, 65) + gabow.createEdge(746, 1786, 47) + gabow.createEdge(897, 166, 93) + gabow.createEdge(1646, 1450, 87) + gabow.createEdge(1310, 234, 19) + gabow.createEdge(291, 1161, 54) + gabow.createEdge(1710, 1460, 24) + gabow.createEdge(340, 376, 10) + gabow.createEdge(1649, 839, 47) + gabow.createEdge(166, 653, 62) + gabow.createEdge(576, 731, 68) + gabow.createEdge(121, 1464, 11) + gabow.createEdge(1975, 1599, 39) + gabow.createEdge(1662, 424, 16) + gabow.createEdge(1812, 1197, 75) + gabow.createEdge(1536, 1916, 60) + gabow.createEdge(420, 154, 82) + gabow.createEdge(1403, 632, 5) + gabow.createEdge(1084, 755, 53) + gabow.createEdge(171, 842, 40) + gabow.createEdge(456, 1687, 5) + gabow.createEdge(1491, 776, 44) + gabow.createEdge(685, 909, 30) + gabow.createEdge(492, 996, 85) + gabow.createEdge(1815, 193, 90) + gabow.createEdge(153, 1655, 32) + gabow.createEdge(1433, 816, 17) + gabow.createEdge(106, 1966, 30) + gabow.createEdge(1534, 1552, 81) + gabow.createEdge(1570, 1079, 69) + gabow.createEdge(1848, 998, 25) + gabow.createEdge(1924, 238, 71) + gabow.createEdge(872, 1931, 58) + gabow.createEdge(1051, 464, 73) + gabow.createEdge(1716, 333, 53) + gabow.createEdge(1078, 602, 88) + gabow.createEdge(1114, 183, 57) + gabow.createEdge(1783, 1732, 15) + gabow.createEdge(1290, 929, 45) + gabow.createEdge(1548, 1100, 48) + gabow.createEdge(788, 1711, 75) + gabow.createEdge(1987, 81, 78) + gabow.createEdge(1081, 1938, 14) + gabow.createEdge(1876, 1505, 36) + gabow.createEdge(608, 263, 85) + gabow.createEdge(1005, 1293, 97) + gabow.createEdge(1172, 1463, 1) + gabow.createEdge(1087, 1359, 89) + gabow.createEdge(726, 1755, 29) + gabow.createEdge(81, 142, 12) + gabow.createEdge(1986, 896, 93) + gabow.createEdge(1879, 899, 67) + gabow.createEdge(1914, 235, 95) + gabow.createEdge(997, 1743, 100) + gabow.createEdge(1115, 989, 83) + gabow.createEdge(1384, 1941, 94) + gabow.createEdge(463, 1014, 91) + gabow.createEdge(356, 1500, 72) + gabow.createEdge(1336, 198, 29) + gabow.createEdge(137, 592, 5) + gabow.createEdge(1362, 109, 65) + gabow.createEdge(605, 1361, 47) + gabow.createEdge(1072, 1023, 48) + gabow.createEdge(1545, 1647, 28) + gabow.createEdge(649, 938, 58) + gabow.createEdge(568, 460, 98) + gabow.createEdge(411, 455, 5) + gabow.createEdge(1387, 1583, 38) + gabow.createEdge(1098, 310, 91) + gabow.createEdge(229, 1888, 52) + gabow.createEdge(1683, 1847, 87) + gabow.createEdge(996, 1313, 40) + gabow.createEdge(681, 1155, 61) + gabow.createEdge(1551, 1126, 97) + gabow.createEdge(1468, 403, 83) + gabow.createEdge(489, 1251, 55) + gabow.createEdge(1949, 1930, 52) + gabow.createEdge(413, 886, 43) + gabow.createEdge(1016, 1799, 49) + gabow.createEdge(106, 632, 66) + gabow.createEdge(1038, 1580, 2) + gabow.createEdge(1345, 1075, 95) + gabow.createEdge(441, 1028, 100) + gabow.createEdge(1348, 1740, 44) + gabow.createEdge(1776, 502, 31) + gabow.createEdge(1599, 790, 25) + gabow.createEdge(555, 1952, 18) + gabow.createEdge(1253, 1567, 93) + gabow.createEdge(318, 1377, 92) + gabow.createEdge(1825, 779, 31) + gabow.createEdge(1104, 670, 52) + gabow.createEdge(218, 1652, 91) + gabow.createEdge(1588, 554, 32) + gabow.createEdge(517, 1228, 74) + gabow.createEdge(1113, 751, 32) + gabow.createEdge(724, 612, 53) + gabow.createEdge(1058, 658, 71) + gabow.createEdge(1383, 537, 68) + gabow.createEdge(1651, 742, 7) + gabow.createEdge(1604, 1830, 24) + gabow.createEdge(97, 1605, 12) + gabow.createEdge(1096, 577, 86) + gabow.createEdge(1902, 1524, 19) + gabow.createEdge(859, 1629, 29) + gabow.createEdge(1564, 510, 75) + gabow.createEdge(1627, 1672, 26) + gabow.createEdge(1550, 1575, 85) + gabow.createEdge(494, 567, 50) + gabow.createEdge(1689, 643, 88) + gabow.createEdge(988, 134, 20) + gabow.createEdge(1514, 792, 87) + gabow.createEdge(614, 1689, 7) + gabow.createEdge(1182, 1813, 23) + gabow.createEdge(651, 805, 54) + gabow.createEdge(1845, 1497, 63) + gabow.createEdge(737, 768, 98) + gabow.createEdge(425, 542, 82) + gabow.createEdge(524, 1783, 84) + gabow.createEdge(967, 260, 5) + gabow.createEdge(1518, 1196, 54) + gabow.createEdge(823, 844, 72) + gabow.createEdge(1665, 494, 8) + gabow.createEdge(1731, 497, 25) + gabow.createEdge(1060, 516, 20) + gabow.createEdge(117, 1238, 3) + gabow.createEdge(1317, 1651, 24) + gabow.createEdge(1805, 241, 26) + gabow.createEdge(708, 1040, 100) + gabow.createEdge(575, 1714, 7) + gabow.createEdge(831, 360, 39) + gabow.createEdge(1130, 306, 27) + gabow.createEdge(1007, 343, 79) + gabow.createEdge(634, 1445, 76) + gabow.createEdge(503, 1179, 48) + gabow.createEdge(156, 460, 61) + gabow.createEdge(181, 449, 14) + gabow.createEdge(502, 277, 69) + gabow.createEdge(935, 1934, 50) + gabow.createEdge(362, 28, 13) + gabow.createEdge(1916, 1317, 27) + gabow.createEdge(522, 956, 94) + gabow.createEdge(818, 226, 42) + gabow.createEdge(1759, 400, 8) + gabow.createEdge(11, 1223, 40) + gabow.createEdge(1212, 1344, 86) + gabow.createEdge(1490, 1783, 79) + gabow.createEdge(769, 1866, 46) + gabow.createEdge(753, 917, 77) + gabow.createEdge(1691, 1715, 28) + gabow.createEdge(397, 30, 65) + gabow.createEdge(919, 901, 11) + gabow.createEdge(1047, 228, 78) + gabow.createEdge(631, 1560, 18) + gabow.createEdge(1898, 1318, 69) + gabow.createEdge(534, 1741, 24) + gabow.createEdge(917, 1996, 83) + gabow.createEdge(1761, 1584, 11) + gabow.createEdge(1405, 270, 12) + gabow.createEdge(1291, 1865, 98) + gabow.createEdge(1951, 105, 93) + gabow.createEdge(705, 645, 94) + gabow.createEdge(1424, 1944, 55) + gabow.createEdge(1172, 1746, 79) + gabow.createEdge(1739, 1296, 28) + gabow.createEdge(1280, 995, 78) + gabow.createEdge(1329, 215, 15) + gabow.createEdge(662, 654, 90) + gabow.createEdge(705, 1841, 11) + gabow.createEdge(1961, 843, 42) + gabow.createEdge(1050, 154, 83) + gabow.createEdge(898, 752, 99) + gabow.createEdge(1595, 28, 42) + gabow.createEdge(1318, 535, 15) + gabow.createEdge(669, 581, 60) + gabow.createEdge(1891, 675, 82) + gabow.createEdge(1419, 1254, 40) + gabow.createEdge(1407, 1540, 65) + gabow.createEdge(1254, 1454, 84) + gabow.createEdge(984, 221, 9) + gabow.createEdge(1611, 612, 2) + gabow.createEdge(170, 1751, 80) + gabow.createEdge(215, 1325, 80) + gabow.createEdge(985, 998, 85) + gabow.createEdge(1855, 1543, 74) + gabow.createEdge(1637, 1149, 66) + gabow.createEdge(572, 456, 27) + gabow.createEdge(1247, 186, 65) + gabow.createEdge(1671, 1632, 31) + gabow.createEdge(786, 1417, 87) + gabow.createEdge(982, 641, 40) + gabow.createEdge(1944, 908, 93) + gabow.createEdge(563, 1501, 23) + gabow.createEdge(289, 545, 65) + gabow.createEdge(435, 59, 18) + gabow.createEdge(1558, 857, 12) + gabow.createEdge(221, 719, 58) + gabow.createEdge(1935, 372, 69) + gabow.createEdge(203, 854, 53) + gabow.createEdge(1543, 49, 32) + gabow.createEdge(1110, 1719, 6) + gabow.createEdge(1559, 487, 66) + gabow.createEdge(547, 1745, 4) + gabow.createEdge(1805, 1125, 75) + gabow.createEdge(366, 926, 49) + gabow.createEdge(863, 677, 67) + gabow.createEdge(1395, 1943, 68) + gabow.createEdge(1065, 519, 94) + gabow.createEdge(1733, 680, 63) + gabow.createEdge(430, 1292, 60) + gabow.createEdge(1468, 1958, 55) + gabow.createEdge(830, 171, 51) + gabow.createEdge(21, 555, 20) + gabow.createEdge(1614, 1086, 33) + gabow.createEdge(1678, 1074, 93) + gabow.createEdge(1438, 959, 13) + gabow.createEdge(25, 202, 40) + gabow.createEdge(1554, 1237, 4) + gabow.createEdge(122, 968, 6) + gabow.createEdge(970, 634, 21) + gabow.createEdge(401, 1168, 1) + gabow.createEdge(1976, 1785, 84) + gabow.createEdge(1224, 581, 33) + gabow.createEdge(551, 667, 5) + gabow.createEdge(1546, 618, 73) + gabow.createEdge(22, 1835, 44) + gabow.createEdge(30, 341, 12) + gabow.createEdge(601, 520, 19) + gabow.createEdge(466, 1279, 70) + gabow.createEdge(385, 158, 32) + gabow.createEdge(180, 379, 100) + gabow.createEdge(1161, 1945, 19) + gabow.createEdge(1672, 281, 70) + gabow.createEdge(1832, 426, 20) + gabow.createEdge(617, 963, 38) + gabow.createEdge(1016, 715, 79) + gabow.createEdge(1566, 832, 42) + gabow.createEdge(2, 1014, 63) + gabow.createEdge(87, 730, 15) + gabow.createEdge(1349, 311, 91) + gabow.createEdge(145, 1908, 47) + gabow.createEdge(1755, 1983, 95) + gabow.createEdge(1912, 1120, 27) + gabow.createEdge(487, 557, 5) + gabow.createEdge(844, 364, 12) + gabow.createEdge(468, 481, 1) + gabow.createEdge(1449, 205, 37) + gabow.createEdge(177, 162, 72) + gabow.createEdge(1733, 1703, 68) + gabow.createEdge(298, 746, 18) + gabow.createEdge(181, 1993, 97) + gabow.createEdge(1574, 1764, 17) + gabow.createEdge(1702, 875, 23) + gabow.createEdge(1095, 1109, 33) + gabow.createEdge(1913, 1043, 49) + gabow.createEdge(1784, 387, 75) + gabow.createEdge(895, 720, 14) + gabow.createEdge(1880, 278, 83) + gabow.createEdge(703, 1592, 46) + gabow.createEdge(735, 250, 60) + gabow.createEdge(61, 1146, 13) + gabow.createEdge(423, 1660, 26) + gabow.createEdge(1014, 1771, 63) + gabow.createEdge(682, 1100, 59) + gabow.createEdge(478, 1520, 63) + gabow.createEdge(715, 1290, 82) + gabow.createEdge(222, 1309, 78) + gabow.createEdge(50, 1064, 7) + gabow.createEdge(416, 395, 87) + gabow.createEdge(1213, 1056, 50) + gabow.createEdge(267, 773, 26) + gabow.createEdge(453, 45, 100) + gabow.createEdge(756, 1438, 74) + gabow.createEdge(1033, 1060, 48) + gabow.createEdge(1550, 1374, 47) + gabow.createEdge(640, 207, 83) + gabow.createEdge(1145, 1727, 53) + gabow.createEdge(684, 1310, 71) + gabow.createEdge(522, 184, 70) + gabow.createEdge(1466, 5, 42) + gabow.createEdge(1631, 1822, 89) + gabow.createEdge(992, 762, 43) + gabow.createEdge(384, 1665, 26) + gabow.createEdge(1009, 1270, 63) + gabow.createEdge(1814, 860, 37) + gabow.createEdge(1638, 1290, 45) + gabow.createEdge(1696, 676, 100) + gabow.createEdge(241, 243, 37) + gabow.createEdge(1617, 208, 24) + gabow.createEdge(1024, 1812, 5) + gabow.createEdge(64, 465, 48) + gabow.createEdge(1110, 749, 100) + gabow.createEdge(249, 175, 82) + gabow.createEdge(1023, 340, 74) + gabow.createEdge(1108, 1626, 73) + gabow.createEdge(1089, 101, 26) + gabow.createEdge(1399, 1157, 74) + gabow.createEdge(274, 1946, 25) + gabow.createEdge(1064, 1615, 78) + gabow.createEdge(741, 1451, 41) + gabow.createEdge(1752, 638, 74) + gabow.createEdge(144, 1223, 60) + gabow.createEdge(165, 460, 27) + gabow.createEdge(736, 394, 96) + gabow.createEdge(512, 202, 67) + gabow.createEdge(1382, 484, 91) + gabow.createEdge(1711, 930, 99) + gabow.createEdge(533, 1089, 42) + gabow.createEdge(394, 1051, 18) + gabow.createEdge(808, 697, 21) + gabow.createEdge(1758, 268, 57) + gabow.createEdge(334, 1882, 63) + gabow.createEdge(1637, 649, 14) + gabow.createEdge(871, 1480, 79) + gabow.createEdge(238, 1057, 15) + gabow.createEdge(162, 690, 84) + gabow.createEdge(1987, 1388, 19) + gabow.createEdge(54, 1239, 98) + gabow.createEdge(818, 1311, 89) + gabow.createEdge(1524, 1180, 5) + gabow.createEdge(5, 807, 22) + gabow.createEdge(716, 1069, 95) + gabow.createEdge(704, 1643, 85) + gabow.createEdge(767, 1601, 71) + gabow.createEdge(1328, 323, 98) + gabow.createEdge(819, 602, 61) + gabow.createEdge(155, 1412, 99) + gabow.createEdge(1400, 322, 42) + gabow.createEdge(1033, 1222, 2) + gabow.createEdge(850, 1899, 57) + gabow.createEdge(1043, 853, 33) + gabow.createEdge(45, 1409, 71) + gabow.createEdge(530, 1776, 70) + gabow.createEdge(1061, 748, 21) + gabow.createEdge(450, 1299, 59) + gabow.createEdge(12, 1838, 25) + gabow.createEdge(779, 137, 16) + gabow.createEdge(1535, 1786, 14) + gabow.createEdge(408, 503, 65) + gabow.createEdge(826, 703, 46) + gabow.createEdge(1049, 1894, 93) + gabow.createEdge(1321, 1078, 8) + gabow.createEdge(195, 1581, 43) + gabow.createEdge(248, 1339, 66) + gabow.createEdge(1725, 1803, 38) + gabow.createEdge(369, 61, 72) + gabow.createEdge(890, 1227, 46) + gabow.createEdge(570, 297, 24) + gabow.createEdge(519, 1293, 24) + gabow.createEdge(175, 1848, 41) + gabow.createEdge(1847, 1568, 57) + gabow.createEdge(1476, 1675, 35) + gabow.createEdge(281, 1705, 19) + gabow.createEdge(1295, 1955, 93) + gabow.createEdge(1066, 503, 70) + gabow.createEdge(8, 1288, 24) + gabow.createEdge(675, 636, 89) + gabow.createEdge(1810, 1097, 17) + gabow.createEdge(1989, 1835, 64) + gabow.createEdge(1229, 215, 78) + gabow.createEdge(381, 1918, 58) + gabow.createEdge(515, 648, 56) + gabow.createEdge(1381, 239, 28) + gabow.createEdge(1361, 582, 84) + gabow.createEdge(590, 169, 82) + gabow.createEdge(1675, 1483, 88) + gabow.createEdge(987, 1199, 66) + gabow.createEdge(1657, 1209, 63) + gabow.createEdge(1366, 472, 45) + gabow.createEdge(1356, 375, 98) + gabow.createEdge(86, 1502, 63) + gabow.createEdge(1852, 266, 19) + gabow.createEdge(529, 1458, 91) + gabow.createEdge(543, 167, 27) + gabow.createEdge(732, 1428, 65) + gabow.createEdge(216, 1266, 43) + gabow.createEdge(838, 1993, 14) + gabow.createEdge(1142, 1044, 61) + gabow.createEdge(406, 408, 88) + gabow.createEdge(572, 1678, 72) + gabow.createEdge(1963, 125, 51) + gabow.createEdge(215, 1487, 48) + gabow.createEdge(402, 1503, 87) + gabow.createEdge(513, 1521, 100) + gabow.createEdge(9, 402, 19) + gabow.createEdge(1887, 821, 83) + gabow.createEdge(384, 73, 4) + gabow.createEdge(1896, 886, 37) + gabow.createEdge(992, 1482, 73) + gabow.createEdge(647, 1574, 16) + gabow.createEdge(570, 965, 49) + gabow.createEdge(1384, 701, 47) + gabow.createEdge(738, 1859, 13) + gabow.createEdge(547, 121, 62) + gabow.createEdge(1819, 1976, 6) + gabow.createEdge(1081, 684, 13) + gabow.createEdge(920, 900, 30) + gabow.createEdge(1463, 1719, 20) + gabow.createEdge(1090, 719, 39) + gabow.createEdge(620, 1616, 91) + gabow.createEdge(419, 652, 85) + gabow.createEdge(38, 1433, 17) + gabow.createEdge(583, 375, 32) + gabow.createEdge(1224, 377, 44) + gabow.createEdge(1122, 837, 70) + gabow.createEdge(27, 78, 33) + gabow.createEdge(73, 998, 15) + gabow.createEdge(537, 402, 47) + gabow.createEdge(623, 1930, 92) + gabow.createEdge(1609, 168, 43) + gabow.createEdge(545, 1358, 72) + gabow.createEdge(351, 630, 4) + gabow.createEdge(116, 1585, 27) + gabow.createEdge(1009, 1914, 87) + gabow.createEdge(948, 1778, 82) + gabow.createEdge(1254, 1583, 79) + gabow.createEdge(150, 864, 69) + gabow.createEdge(652, 1038, 32) + gabow.createEdge(1752, 978, 70) + gabow.createEdge(983, 277, 7) + gabow.createEdge(851, 1845, 42) + gabow.createEdge(275, 926, 6) + gabow.createEdge(777, 1011, 65) + gabow.createEdge(981, 1318, 47) + gabow.createEdge(1380, 1049, 99) + gabow.createEdge(1730, 247, 66) + gabow.createEdge(42, 1730, 41) + gabow.createEdge(1527, 1888, 87) + gabow.createEdge(570, 1102, 33) + gabow.createEdge(25, 628, 42) + gabow.createEdge(17, 1453, 16) + gabow.createEdge(133, 250, 4) + gabow.createEdge(1704, 188, 57) + gabow.createEdge(790, 600, 9) + gabow.createEdge(1552, 1395, 62) + gabow.createEdge(1695, 1515, 92) + gabow.createEdge(736, 564, 88) + gabow.createEdge(1710, 1298, 23) + gabow.createEdge(497, 827, 51) + gabow.createEdge(1982, 1149, 98) + gabow.createEdge(645, 553, 1) + gabow.createEdge(619, 438, 72) + gabow.createEdge(1268, 1998, 91) + gabow.createEdge(1279, 1307, 89) + gabow.createEdge(721, 723, 9) + gabow.createEdge(530, 1214, 81) + gabow.createEdge(273, 1314, 71) + gabow.createEdge(5, 755, 31) + gabow.createEdge(1757, 933, 20) + gabow.createEdge(828, 397, 41) + gabow.createEdge(1358, 1252, 83) + gabow.createEdge(1252, 1307, 95) + gabow.createEdge(1873, 361, 46) + gabow.createEdge(676, 1470, 38) + gabow.createEdge(1465, 1093, 82) + gabow.createEdge(1666, 1983, 26) + gabow.createEdge(543, 223, 49) + gabow.createEdge(1860, 1855, 80) + gabow.createEdge(1329, 1856, 47) + gabow.createEdge(1100, 1308, 22) + gabow.createEdge(229, 212, 7) + gabow.createEdge(998, 1575, 16) + gabow.createEdge(490, 1046, 91) + gabow.createEdge(1494, 1216, 10) + gabow.createEdge(1250, 652, 54) + gabow.createEdge(898, 1636, 44) + gabow.createEdge(68, 647, 51) + gabow.createEdge(1284, 1281, 30) + gabow.createEdge(595, 289, 24) + gabow.createEdge(996, 47, 15) + gabow.createEdge(1478, 1829, 63) + gabow.createEdge(958, 262, 34) + gabow.createEdge(1400, 1108, 93) + gabow.createEdge(56, 135, 85) + gabow.createEdge(389, 1312, 93) + gabow.createEdge(790, 27, 62) + gabow.createEdge(634, 1213, 65) + gabow.createEdge(866, 1763, 59) + gabow.createEdge(904, 1088, 34) + gabow.createEdge(755, 1020, 46) + gabow.createEdge(189, 1472, 74) + gabow.createEdge(1447, 1, 47) + gabow.createEdge(266, 1432, 55) + gabow.createEdge(1563, 647, 95) + gabow.createEdge(395, 1703, 28) + gabow.createEdge(400, 913, 57) + gabow.createEdge(1646, 459, 86) + gabow.createEdge(1739, 591, 96) + gabow.createEdge(1664, 1487, 78) + gabow.createEdge(64, 309, 65) + gabow.createEdge(1503, 1578, 63) + gabow.createEdge(3, 1207, 24) + gabow.createEdge(1183, 981, 90) + gabow.createEdge(654, 1933, 7) + gabow.createEdge(1662, 1064, 62) + gabow.createEdge(795, 1502, 37) + gabow.createEdge(1609, 505, 3) + gabow.createEdge(1902, 1839, 31) + gabow.createEdge(1527, 1236, 16) + gabow.createEdge(1953, 1692, 37) + gabow.createEdge(15, 1642, 99) + gabow.createEdge(1547, 1828, 82) + gabow.createEdge(851, 1684, 55) + gabow.createEdge(446, 1229, 86) + gabow.createEdge(73, 319, 85) + gabow.createEdge(1064, 736, 94) + gabow.createEdge(1087, 1677, 3) + gabow.createEdge(923, 1247, 82) + gabow.createEdge(1886, 1767, 15) + gabow.createEdge(684, 1672, 96) + gabow.createEdge(759, 1928, 86) + gabow.createEdge(613, 277, 48) + gabow.createEdge(185, 1415, 31) + gabow.createEdge(1500, 1659, 85) + gabow.createEdge(1807, 707, 95) + gabow.createEdge(521, 1405, 30) + gabow.createEdge(803, 488, 70) + gabow.createEdge(1756, 1378, 14) + gabow.createEdge(1022, 683, 69) + gabow.createEdge(462, 684, 48) + gabow.createEdge(1564, 479, 77) + gabow.createEdge(1260, 1716, 89) + gabow.createEdge(1103, 721, 82) + gabow.createEdge(550, 1721, 42) + gabow.createEdge(788, 1894, 66) + gabow.createEdge(1245, 63, 86) + gabow.createEdge(1600, 1730, 68) + gabow.createEdge(331, 1782, 77) + gabow.createEdge(162, 788, 17) + gabow.createEdge(965, 1803, 67) + gabow.createEdge(1375, 1302, 57) + gabow.createEdge(682, 1502, 41) + gabow.createEdge(222, 827, 34) + gabow.createEdge(774, 697, 33) + gabow.createEdge(1237, 773, 51) + gabow.createEdge(1199, 500, 29) + gabow.createEdge(1231, 1779, 66) + gabow.createEdge(1427, 1423, 22) + gabow.createEdge(180, 91, 42) + gabow.createEdge(1724, 1118, 61) + gabow.createEdge(1130, 742, 9) + gabow.createEdge(1247, 188, 13) + gabow.createEdge(397, 1949, 52) + gabow.createEdge(1945, 1121, 90) + gabow.createEdge(380, 405, 97) + gabow.createEdge(938, 1937, 11) + gabow.createEdge(1978, 467, 25) + gabow.createEdge(770, 1966, 47) + gabow.createEdge(1207, 1286, 62) + gabow.createEdge(1545, 571, 83) + gabow.createEdge(828, 411, 45) + gabow.createEdge(806, 1689, 73) + gabow.createEdge(1762, 1310, 68) + gabow.createEdge(104, 417, 11) + gabow.createEdge(1587, 1939, 37) + gabow.createEdge(504, 240, 85) + gabow.createEdge(1774, 1863, 80) + gabow.createEdge(1858, 1200, 11) + gabow.createEdge(1835, 28, 63) + gabow.createEdge(102, 728, 19) + gabow.createEdge(240, 1792, 76) + gabow.createEdge(169, 819, 49) + gabow.createEdge(1875, 286, 24) + gabow.createEdge(392, 641, 58) + gabow.createEdge(430, 1105, 17) + gabow.createEdge(1230, 1331, 53) + gabow.createEdge(1859, 76, 55) + gabow.createEdge(1533, 1002, 58) + gabow.createEdge(104, 78, 25) + gabow.createEdge(152, 74, 3) + gabow.createEdge(487, 1261, 59) + gabow.createEdge(1426, 1314, 61) + gabow.createEdge(1657, 1803, 59) + gabow.createEdge(1149, 474, 50) + gabow.createEdge(63, 130, 32) + gabow.createEdge(576, 1514, 62) + gabow.createEdge(1727, 1030, 38) + gabow.createEdge(188, 661, 85) + gabow.createEdge(1325, 1224, 19) + gabow.createEdge(440, 504, 37) + gabow.createEdge(874, 995, 79) + gabow.createEdge(691, 492, 75) + gabow.createEdge(509, 1109, 30) + gabow.createEdge(1657, 504, 44) + gabow.createEdge(1356, 1308, 44) + gabow.createEdge(1384, 1022, 44) + gabow.createEdge(944, 129, 16) + gabow.createEdge(492, 1379, 97) + gabow.createEdge(329, 1494, 58) + gabow.createEdge(367, 1064, 80) + gabow.createEdge(1249, 458, 54) + gabow.createEdge(1556, 301, 12) + gabow.createEdge(1143, 15, 55) + gabow.createEdge(828, 1742, 29) + gabow.createEdge(745, 884, 42) + gabow.createEdge(1656, 1269, 71) + gabow.createEdge(1267, 592, 93) + gabow.createEdge(909, 1595, 52) + gabow.createEdge(674, 1777, 44) + gabow.createEdge(1470, 680, 11) + gabow.createEdge(136, 866, 9) + gabow.createEdge(1765, 505, 25) + gabow.createEdge(692, 522, 2) + gabow.createEdge(1237, 1630, 6) + gabow.createEdge(769, 1215, 28) + gabow.createEdge(1613, 928, 13) + gabow.createEdge(211, 895, 95) + gabow.createEdge(453, 392, 2) + gabow.createEdge(1107, 954, 45) + gabow.createEdge(1385, 1098, 60) + gabow.createEdge(1980, 1056, 30) + gabow.createEdge(1862, 1044, 23) + gabow.createEdge(1839, 1476, 22) + gabow.createEdge(1916, 424, 82) + gabow.createEdge(1180, 1248, 76) + gabow.createEdge(1736, 1796, 55) + gabow.createEdge(741, 1447, 24) + gabow.createEdge(887, 496, 80) + gabow.createEdge(376, 299, 100) + gabow.createEdge(1191, 755, 28) + gabow.createEdge(1882, 833, 90) + gabow.createEdge(375, 1816, 18) + gabow.createEdge(222, 306, 64) + gabow.createEdge(1284, 983, 21) + gabow.createEdge(359, 1084, 14) + gabow.createEdge(1630, 1211, 80) + gabow.createEdge(1540, 847, 64) + gabow.createEdge(101, 1101, 64) + gabow.createEdge(1414, 1403, 72) + gabow.createEdge(1610, 262, 39) + gabow.createEdge(621, 216, 45) + gabow.createEdge(625, 909, 7) + gabow.createEdge(1643, 1150, 60) + gabow.createEdge(489, 1652, 34) + gabow.createEdge(1107, 354, 52) + gabow.createEdge(644, 1189, 93) + gabow.createEdge(180, 727, 12) + gabow.createEdge(1311, 415, 79) + gabow.createEdge(1524, 1863, 16) + gabow.createEdge(1582, 339, 43) + gabow.createEdge(1639, 1166, 28) + gabow.createEdge(54, 1494, 79) + gabow.createEdge(729, 1488, 96) + gabow.createEdge(1256, 1242, 11) + gabow.createEdge(1944, 1285, 94) + gabow.createEdge(228, 1607, 97) + gabow.createEdge(1138, 1335, 33) + gabow.createEdge(1476, 791, 66) + gabow.createEdge(521, 1605, 55) + gabow.createEdge(1178, 301, 6) + gabow.createEdge(1543, 1243, 36) + gabow.createEdge(1933, 1270, 98) + gabow.createEdge(1646, 690, 81) + gabow.createEdge(1658, 890, 70) + gabow.createEdge(1528, 81, 8) + gabow.createEdge(1530, 837, 85) + gabow.createEdge(502, 188, 76) + gabow.createEdge(1648, 1165, 93) + gabow.createEdge(592, 158, 74) + gabow.createEdge(1754, 664, 47) + gabow.createEdge(1904, 788, 71) + gabow.createEdge(464, 168, 7) + gabow.createEdge(258, 1970, 39) + gabow.createEdge(821, 85, 27) + gabow.createEdge(1515, 977, 66) + gabow.createEdge(1602, 1542, 49) + gabow.createEdge(778, 563, 24) + gabow.createEdge(847, 1720, 75) + gabow.createEdge(1834, 1356, 69) + gabow.createEdge(1991, 1894, 74) + gabow.createEdge(1861, 1439, 52) + gabow.createEdge(1207, 52, 20) + gabow.createEdge(673, 1044, 89) + gabow.createEdge(1163, 1859, 13) + gabow.createEdge(495, 1716, 65) + gabow.createEdge(338, 697, 67) + gabow.createEdge(1475, 902, 91) + gabow.createEdge(1120, 1666, 61) + gabow.createEdge(1956, 1278, 43) + gabow.createEdge(458, 1089, 38) + gabow.createEdge(208, 1766, 18) + gabow.createEdge(723, 303, 85) + gabow.createEdge(1554, 916, 63) + gabow.createEdge(628, 1545, 78) + gabow.createEdge(257, 1746, 58) + gabow.createEdge(66, 1650, 11) + gabow.createEdge(958, 1375, 96) + gabow.createEdge(1877, 1678, 13) + gabow.createEdge(662, 911, 61) + gabow.createEdge(49, 1217, 74) + gabow.createEdge(1274, 1131, 31) + gabow.createEdge(767, 581, 84) + gabow.createEdge(809, 1294, 60) + gabow.createEdge(163, 1545, 42) + gabow.createEdge(931, 1122, 71) + gabow.createEdge(977, 1672, 90) + gabow.createEdge(1004, 448, 95) + gabow.createEdge(1255, 1252, 19) + gabow.createEdge(1551, 648, 13) + gabow.createEdge(342, 1261, 46) + gabow.createEdge(477, 697, 37) + gabow.createEdge(1043, 1928, 45) + gabow.createEdge(673, 1771, 81) + gabow.createEdge(879, 1707, 23) + gabow.createEdge(1367, 528, 47) + gabow.createEdge(1623, 1547, 2) + gabow.createEdge(1453, 1229, 60) + gabow.createEdge(43, 652, 7) + gabow.createEdge(1640, 201, 93) + gabow.createEdge(1284, 1374, 91) + gabow.createEdge(1191, 1784, 96) + gabow.createEdge(196, 293, 76) + gabow.createEdge(824, 255, 22) + gabow.createEdge(601, 1753, 77) + gabow.createEdge(1634, 1543, 86) + gabow.createEdge(1316, 844, 83) + gabow.createEdge(986, 1494, 57) + gabow.createEdge(1129, 1530, 26) + gabow.createEdge(1499, 185, 9) + gabow.createEdge(1163, 1404, 30) + gabow.createEdge(1074, 668, 33) + gabow.createEdge(683, 575, 1) + gabow.createEdge(1512, 1186, 25) + gabow.createEdge(1421, 324, 63) + gabow.createEdge(301, 478, 78) + gabow.createEdge(1919, 1093, 94) + gabow.createEdge(201, 1767, 55) + gabow.createEdge(151, 1652, 38) + gabow.createEdge(816, 977, 27) + gabow.createEdge(424, 1604, 45) + gabow.createEdge(828, 1555, 41) + gabow.createEdge(352, 1724, 26) + gabow.createEdge(1067, 577, 90) + gabow.createEdge(1173, 1413, 68) + gabow.createEdge(1857, 1963, 83) + gabow.createEdge(543, 1444, 98) + gabow.createEdge(1068, 1726, 20) + gabow.createEdge(312, 1238, 34) + gabow.createEdge(632, 400, 8) + gabow.createEdge(1482, 721, 54) + gabow.createEdge(748, 254, 2) + gabow.createEdge(1531, 1041, 40) + gabow.createEdge(1481, 1674, 5) + gabow.createEdge(1224, 907, 52) + gabow.createEdge(781, 1297, 94) + gabow.createEdge(243, 524, 26) + gabow.createEdge(468, 75, 32) + gabow.createEdge(236, 1362, 28) + gabow.createEdge(119, 1453, 65) + gabow.createEdge(859, 1861, 81) + gabow.createEdge(805, 1047, 31) + gabow.createEdge(1755, 572, 71) + gabow.createEdge(705, 227, 81) + gabow.createEdge(1786, 921, 29) + gabow.createEdge(1875, 1217, 56) + gabow.createEdge(1188, 271, 21) + gabow.createEdge(150, 1577, 3) + gabow.createEdge(1961, 1936, 22) + gabow.createEdge(918, 1685, 19) + gabow.createEdge(431, 1948, 58) + gabow.createEdge(791, 104, 34) + gabow.createEdge(1077, 764, 27) + gabow.createEdge(1879, 1403, 3) + gabow.createEdge(1513, 1917, 47) + gabow.createEdge(14, 1437, 7) + gabow.createEdge(1117, 63, 81) + gabow.createEdge(941, 1059, 96) + gabow.createEdge(759, 784, 27) + gabow.createEdge(1341, 1864, 84) + gabow.createEdge(1375, 1660, 97) + gabow.createEdge(1042, 1689, 8) + gabow.createEdge(1977, 667, 97) + gabow.createEdge(572, 642, 38) + gabow.createEdge(1348, 1394, 59) + gabow.createEdge(845, 29, 48) + gabow.createEdge(1398, 1119, 91) + gabow.createEdge(160, 80, 91) + gabow.createEdge(1894, 1803, 91) + gabow.createEdge(293, 394, 18) + gabow.createEdge(1449, 755, 82) + gabow.createEdge(1449, 1608, 90) + gabow.createEdge(1234, 1839, 30) + gabow.createEdge(783, 435, 63) + gabow.createEdge(1775, 1824, 53) + gabow.createEdge(1876, 1699, 72) + gabow.createEdge(1773, 185, 99) + gabow.createEdge(1706, 1381, 74) + gabow.createEdge(1392, 1340, 90) + gabow.createEdge(1115, 560, 36) + gabow.createEdge(697, 249, 70) + gabow.createEdge(1460, 1118, 92) + gabow.createEdge(539, 1107, 14) + gabow.createEdge(940, 1491, 12) + gabow.createEdge(943, 1204, 85) + gabow.createEdge(919, 1357, 71) + gabow.createEdge(15, 859, 52) + gabow.createEdge(1339, 801, 87) + gabow.createEdge(1862, 1381, 38) + gabow.createEdge(1265, 596, 27) + gabow.createEdge(1462, 1579, 14) + gabow.createEdge(311, 431, 29) + gabow.createEdge(430, 902, 100) + gabow.createEdge(563, 1545, 85) + gabow.createEdge(1997, 464, 91) + gabow.createEdge(1093, 317, 10) + gabow.createEdge(895, 1518, 37) + gabow.createEdge(273, 266, 84) + gabow.createEdge(373, 994, 41) + gabow.createEdge(1479, 267, 57) + gabow.createEdge(275, 483, 28) + gabow.createEdge(1393, 535, 49) + gabow.createEdge(1608, 32, 1) + gabow.createEdge(1858, 695, 68) + gabow.createEdge(271, 618, 96) + gabow.createEdge(1082, 1747, 87) + gabow.createEdge(1318, 905, 13) + gabow.createEdge(1201, 620, 39) + gabow.createEdge(1397, 1963, 33) + gabow.createEdge(630, 1090, 71) + gabow.createEdge(1746, 420, 27) + gabow.createEdge(1006, 406, 49) + gabow.createEdge(182, 1993, 16) + gabow.createEdge(960, 398, 67) + gabow.createEdge(447, 1487, 9) + gabow.createEdge(1149, 717, 67) + gabow.createEdge(1555, 1775, 8) + gabow.createEdge(1766, 78, 57) + gabow.createEdge(977, 245, 2) + gabow.createEdge(1224, 754, 56) + gabow.createEdge(1532, 1411, 75) + gabow.createEdge(1713, 731, 39) + gabow.createEdge(333, 1278, 57) + gabow.createEdge(838, 113, 52) + gabow.createEdge(1569, 339, 16) + gabow.createEdge(1927, 1574, 71) + gabow.createEdge(1769, 409, 2) + gabow.createEdge(843, 566, 28) + gabow.createEdge(1396, 1212, 73) + gabow.createEdge(519, 1957, 26) + gabow.createEdge(554, 224, 59) + gabow.createEdge(1115, 886, 64) + gabow.createEdge(1888, 772, 73) + gabow.createEdge(1775, 1144, 78) + gabow.createEdge(390, 1243, 100) + gabow.createEdge(544, 1362, 29) + gabow.createEdge(1826, 493, 28) + gabow.createEdge(1515, 1019, 49) + gabow.createEdge(752, 170, 51) + gabow.createEdge(1840, 220, 45) + gabow.createEdge(1128, 559, 95) + gabow.createEdge(361, 1529, 72) + gabow.createEdge(1555, 989, 20) + gabow.createEdge(1573, 1806, 43) + gabow.createEdge(707, 103, 94) + gabow.createEdge(995, 123, 42) + gabow.createEdge(1644, 1930, 55) + gabow.createEdge(1293, 223, 42) + gabow.createEdge(1540, 1086, 24) + gabow.createEdge(74, 1281, 68) + gabow.createEdge(1497, 1607, 69) + gabow.createEdge(494, 629, 18) + gabow.createEdge(117, 325, 75) + gabow.createEdge(322, 1360, 88) + gabow.createEdge(1708, 1386, 57) + gabow.createEdge(1477, 1848, 73) + gabow.createEdge(576, 513, 33) + gabow.createEdge(825, 1853, 57) + gabow.createEdge(1908, 1772, 18) + gabow.createEdge(72, 853, 64) + gabow.createEdge(283, 297, 36) + gabow.createEdge(1530, 831, 77) + gabow.createEdge(1386, 1895, 19) + gabow.createEdge(1642, 1574, 56) + gabow.createEdge(707, 1166, 93) + gabow.createEdge(1135, 398, 30) + gabow.createEdge(245, 182, 57) + gabow.createEdge(1429, 1871, 6) + gabow.createEdge(804, 1086, 53) + gabow.createEdge(1397, 1529, 67) + gabow.createEdge(1905, 1866, 86) + gabow.createEdge(1400, 267, 76) + gabow.createEdge(1420, 918, 53) + gabow.createEdge(1931, 1634, 26) + gabow.createEdge(395, 88, 72) + gabow.createEdge(1098, 458, 39) + gabow.createEdge(1975, 1316, 65) + gabow.createEdge(101, 1851, 77) + gabow.createEdge(543, 1444, 63) + gabow.createEdge(958, 172, 20) + gabow.createEdge(44, 1218, 85) + gabow.createEdge(1284, 844, 29) + gabow.createEdge(1331, 1198, 50) + gabow.createEdge(1772, 1210, 9) + gabow.createEdge(1673, 189, 73) + gabow.createEdge(1885, 1037, 36) + gabow.createEdge(1437, 258, 38) + gabow.createEdge(128, 1065, 42) + gabow.createEdge(1245, 1311, 49) + gabow.createEdge(1735, 756, 89) + gabow.createEdge(617, 702, 23) + gabow.createEdge(759, 810, 39) + gabow.createEdge(147, 673, 26) + gabow.createEdge(1749, 1385, 75) + gabow.createEdge(85, 96, 69) + gabow.createEdge(1365, 756, 42) + gabow.createEdge(947, 432, 18) + gabow.createEdge(531, 79, 77) + gabow.createEdge(197, 271, 22) + gabow.createEdge(1128, 887, 9) + gabow.createEdge(264, 466, 69) + gabow.createEdge(1878, 231, 41) + gabow.createEdge(1730, 337, 79) + gabow.createEdge(1037, 1661, 47) + gabow.createEdge(136, 969, 18) + gabow.createEdge(1432, 1001, 9) + gabow.createEdge(906, 877, 61) + gabow.createEdge(1569, 192, 86) + gabow.createEdge(350, 963, 88) + gabow.createEdge(1960, 1826, 47) + gabow.createEdge(42, 808, 17) + gabow.createEdge(382, 1795, 82) + gabow.createEdge(381, 359, 31) + gabow.createEdge(487, 341, 69) + gabow.createEdge(674, 211, 65) + gabow.createEdge(689, 950, 27) + gabow.createEdge(1767, 1204, 37) + gabow.createEdge(284, 1445, 46) + gabow.createEdge(544, 1960, 23) + gabow.createEdge(1670, 98, 9) + gabow.createEdge(1490, 604, 56) + gabow.createEdge(142, 957, 78) + gabow.createEdge(1146, 417, 35) + gabow.createEdge(601, 1204, 60) + gabow.createEdge(1958, 1447, 97) + gabow.createEdge(1973, 766, 39) + gabow.createEdge(1307, 861, 100) + gabow.createEdge(154, 1316, 97) + gabow.createEdge(813, 1825, 97) + gabow.createEdge(1387, 212, 4) + gabow.createEdge(1312, 681, 59) + gabow.createEdge(1033, 1845, 68) + gabow.createEdge(804, 1005, 99) + gabow.createEdge(701, 73, 41) + gabow.createEdge(664, 618, 43) + gabow.createEdge(737, 1346, 86) + gabow.createEdge(219, 499, 11) + gabow.createEdge(728, 833, 19) + gabow.createEdge(144, 566, 70) + gabow.createEdge(1362, 1151, 12) + gabow.createEdge(1202, 1326, 20) + gabow.createEdge(95, 518, 90) + gabow.createEdge(920, 39, 42) + gabow.createEdge(61, 1088, 40) + gabow.createEdge(694, 1167, 79) + gabow.createEdge(1330, 1358, 76) + gabow.createEdge(1073, 787, 8) + gabow.createEdge(790, 1819, 48) + gabow.createEdge(223, 859, 66) + gabow.createEdge(1152, 1218, 23) + gabow.createEdge(1440, 109, 36) + gabow.createEdge(87, 1593, 66) + gabow.createEdge(1158, 215, 3) + gabow.createEdge(1871, 1854, 73) + gabow.createEdge(104, 386, 16) + gabow.createEdge(497, 599, 66) + gabow.createEdge(694, 1954, 45) + gabow.createEdge(1553, 617, 86) + gabow.createEdge(1107, 1064, 80) + gabow.createEdge(867, 1643, 31) + gabow.createEdge(1040, 735, 85) + gabow.createEdge(1697, 1893, 24) + gabow.createEdge(1553, 927, 56) + gabow.createEdge(1761, 25, 65) + gabow.createEdge(1870, 795, 96) + gabow.createEdge(782, 1847, 45) + gabow.createEdge(1028, 132, 7) + gabow.createEdge(1131, 971, 93) + gabow.createEdge(1337, 773, 73) + gabow.createEdge(181, 1410, 58) + gabow.createEdge(1388, 238, 39) + gabow.createEdge(92, 971, 85) + gabow.createEdge(1437, 1330, 56) + gabow.createEdge(813, 281, 50) + gabow.createEdge(611, 1585, 41) + gabow.createEdge(50, 89, 50) + gabow.createEdge(643, 969, 50) + gabow.createEdge(1962, 1289, 62) + gabow.createEdge(1164, 1507, 100) + gabow.createEdge(1337, 1348, 51) + gabow.createEdge(20, 183, 84) + gabow.createEdge(1507, 1560, 97) + gabow.createEdge(1151, 1089, 52) + gabow.createEdge(761, 1487, 67) + gabow.createEdge(1320, 170, 26) + gabow.createEdge(78, 1403, 48) + gabow.createEdge(1126, 1184, 98) + gabow.createEdge(1117, 566, 10) + gabow.createEdge(1685, 1073, 43) + gabow.createEdge(1658, 860, 18) + gabow.createEdge(1570, 632, 57) + gabow.createEdge(652, 1968, 65) + gabow.createEdge(873, 1544, 80) + gabow.createEdge(892, 402, 20) + gabow.createEdge(338, 185, 70) + gabow.createEdge(1304, 1116, 47) + gabow.createEdge(1408, 1009, 62) + gabow.createEdge(822, 1684, 62) + gabow.createEdge(736, 947, 39) + gabow.createEdge(471, 1990, 46) + gabow.createEdge(444, 622, 81) + gabow.createEdge(517, 425, 96) + gabow.createEdge(389, 1717, 62) + gabow.createEdge(215, 1034, 77) + gabow.createEdge(362, 138, 9) + gabow.createEdge(507, 1346, 70) + gabow.createEdge(326, 293, 16) + gabow.createEdge(374, 1015, 31) + gabow.createEdge(1452, 1202, 39) + gabow.createEdge(1930, 1528, 30) + gabow.createEdge(1984, 793, 60) + gabow.createEdge(1420, 468, 73) + gabow.createEdge(537, 1016, 75) + gabow.createEdge(1121, 213, 87) + gabow.createEdge(1384, 1972, 17) + gabow.createEdge(1309, 230, 75) + gabow.createEdge(1572, 1015, 56) + gabow.createEdge(454, 30, 25) + gabow.createEdge(236, 811, 73) + gabow.createEdge(1527, 426, 33) + gabow.createEdge(349, 1868, 80) + gabow.createEdge(798, 1677, 93) + gabow.createEdge(1519, 457, 13) + gabow.createEdge(1744, 1321, 43) + gabow.createEdge(1159, 734, 81) + gabow.createEdge(311, 627, 13) + gabow.createEdge(1226, 611, 4) + gabow.createEdge(1146, 1121, 30) + gabow.createEdge(1212, 343, 85) + gabow.createEdge(596, 1788, 91) + gabow.createEdge(70, 795, 56) + gabow.createEdge(726, 628, 70) + gabow.createEdge(918, 1941, 76) + gabow.createEdge(247, 1797, 98) + gabow.createEdge(172, 1604, 85) + gabow.createEdge(1921, 1832, 20) + gabow.createEdge(35, 1067, 96) + gabow.createEdge(376, 740, 15) + gabow.createEdge(549, 217, 17) + gabow.createEdge(102, 347, 29) + gabow.createEdge(390, 1937, 73) + gabow.createEdge(1371, 1581, 81) + gabow.createEdge(1494, 876, 29) + gabow.createEdge(38, 1635, 85) + gabow.createEdge(116, 752, 54) + gabow.createEdge(1830, 626, 75) + gabow.createEdge(1719, 1675, 84) + gabow.createEdge(35, 1091, 4) + gabow.createEdge(1896, 1471, 5) + gabow.createEdge(1949, 874, 47) + gabow.createEdge(355, 466, 22) + gabow.createEdge(292, 824, 93) + gabow.createEdge(115, 566, 16) + gabow.createEdge(422, 1441, 67) + gabow.createEdge(15, 739, 19) + gabow.createEdge(1616, 284, 71) + gabow.createEdge(1621, 364, 28) + gabow.createEdge(1950, 838, 22) + gabow.createEdge(1999, 1456, 76) + gabow.createEdge(150, 492, 93) + gabow.createEdge(55, 1169, 81) + gabow.createEdge(1862, 1159, 78) + gabow.createEdge(1260, 1738, 76) + gabow.createEdge(322, 763, 49) + gabow.createEdge(2, 296, 26) + gabow.createEdge(1999, 738, 50) + gabow.createEdge(1806, 832, 37) + gabow.createEdge(1372, 60, 90) + gabow.createEdge(143, 697, 93) + gabow.createEdge(676, 1175, 27) + gabow.createEdge(1764, 556, 37) + gabow.createEdge(1023, 1125, 51) + gabow.createEdge(82, 1258, 37) + gabow.createEdge(1087, 355, 5) + gabow.createEdge(10, 1817, 61) + gabow.createEdge(1887, 329, 40) + gabow.createEdge(771, 1305, 25) + gabow.createEdge(173, 34, 53) + gabow.createEdge(1295, 1727, 4) + gabow.createEdge(248, 1397, 37) + gabow.createEdge(957, 310, 44) + gabow.createEdge(1748, 1781, 53) + gabow.createEdge(162, 698, 79) + gabow.createEdge(943, 1677, 15) + gabow.createEdge(1412, 1512, 15) + gabow.createEdge(1607, 401, 79) + gabow.createEdge(591, 1135, 13) + gabow.createEdge(1257, 368, 93) + gabow.createEdge(1805, 350, 8) + gabow.createEdge(198, 279, 77) + gabow.createEdge(1011, 1253, 5) + gabow.createEdge(339, 1832, 40) + gabow.createEdge(6, 243, 72) + gabow.createEdge(574, 925, 38) + gabow.createEdge(469, 1312, 80) + gabow.createEdge(1621, 564, 85) + gabow.createEdge(1281, 1954, 42) + gabow.createEdge(1163, 1302, 84) + gabow.createEdge(1078, 349, 45) + gabow.createEdge(165, 1890, 99) + gabow.createEdge(1055, 1534, 92) + gabow.createEdge(1998, 31, 35) + gabow.createEdge(1606, 1754, 99) + gabow.createEdge(205, 1948, 74) + gabow.createEdge(1411, 1382, 22) + gabow.createEdge(1614, 933, 4) + gabow.createEdge(1982, 1527, 35) + gabow.createEdge(408, 1766, 74) + gabow.createEdge(680, 697, 85) + gabow.createEdge(1789, 1688, 89) + gabow.createEdge(743, 155, 63) + gabow.createEdge(998, 889, 29) + gabow.createEdge(1239, 836, 56) + gabow.createEdge(318, 1953, 74) + gabow.createEdge(1938, 1248, 32) + gabow.createEdge(721, 1135, 12) + gabow.createEdge(1062, 1781, 25) + gabow.createEdge(99, 679, 80) + gabow.createEdge(384, 1072, 56) + gabow.createEdge(1052, 1271, 6) + gabow.createEdge(294, 532, 65) + gabow.createEdge(934, 670, 6) + gabow.createEdge(1832, 850, 94) + gabow.createEdge(370, 731, 7) + gabow.createEdge(757, 1189, 66) + gabow.createEdge(1144, 1920, 3) + gabow.createEdge(1294, 1863, 86) + gabow.createEdge(1360, 1780, 39) + gabow.createEdge(897, 236, 2) + gabow.createEdge(1925, 1910, 25) + gabow.createEdge(487, 516, 75) + gabow.createEdge(323, 352, 52) + gabow.createEdge(724, 491, 70) + gabow.createEdge(1755, 1115, 82) + gabow.createEdge(440, 1505, 66) + gabow.createEdge(456, 1604, 40) + gabow.createEdge(982, 1851, 13) + gabow.createEdge(1968, 378, 30) + gabow.createEdge(1387, 1270, 70) + gabow.createEdge(1806, 1625, 93) + gabow.createEdge(244, 1646, 98) + gabow.createEdge(1852, 1268, 59) + gabow.createEdge(1715, 1249, 14) + gabow.createEdge(1386, 749, 62) + gabow.createEdge(1876, 1907, 100) + gabow.createEdge(278, 1602, 68) + gabow.createEdge(1983, 1960, 30) + gabow.createEdge(1687, 548, 61) + gabow.createEdge(995, 93, 90) + gabow.createEdge(131, 1046, 94) + gabow.createEdge(1828, 1742, 43) + gabow.createEdge(272, 1368, 39) + gabow.createEdge(947, 1770, 68) + gabow.createEdge(701, 1217, 75) + gabow.createEdge(339, 917, 6) + gabow.createEdge(97, 806, 20) + gabow.createEdge(142, 530, 66) + gabow.createEdge(1396, 1750, 9) + gabow.createEdge(895, 375, 18) + gabow.createEdge(1035, 631, 96) + gabow.createEdge(130, 657, 99) + gabow.createEdge(1505, 812, 17) + gabow.createEdge(581, 186, 14) + gabow.createEdge(85, 407, 75) + gabow.createEdge(1147, 538, 71) + gabow.createEdge(1937, 520, 33) + gabow.createEdge(1455, 722, 29) + gabow.createEdge(689, 1821, 97) + gabow.createEdge(861, 374, 13) + gabow.createEdge(1670, 111, 32) + gabow.createEdge(150, 1030, 20) + gabow.createEdge(1938, 1100, 29) + gabow.createEdge(134, 1395, 51) + gabow.createEdge(1273, 1346, 20) + gabow.createEdge(72, 531, 56) + gabow.createEdge(1398, 366, 31) + gabow.createEdge(1818, 1235, 19) + gabow.createEdge(1531, 145, 57) + gabow.createEdge(615, 852, 78) + gabow.createEdge(268, 986, 74) + gabow.createEdge(1976, 315, 60) + gabow.createEdge(1271, 40, 36) + gabow.createEdge(181, 1771, 75) + gabow.createEdge(1469, 1918, 14) + gabow.createEdge(1132, 1626, 88) + gabow.createEdge(1678, 39, 85) + gabow.createEdge(555, 1828, 54) + gabow.createEdge(1669, 1751, 95) + gabow.createEdge(1813, 1446, 30) + gabow.createEdge(156, 1161, 3) + gabow.createEdge(719, 651, 32) + gabow.createEdge(243, 1374, 56) + gabow.createEdge(1851, 42, 80) + gabow.createEdge(206, 31, 40) + gabow.createEdge(888, 1158, 37) + gabow.createEdge(520, 960, 38) + gabow.createEdge(668, 260, 62) + gabow.createEdge(1713, 1500, 2) + gabow.createEdge(1505, 1382, 21) + gabow.createEdge(1203, 1730, 73) + gabow.createEdge(1400, 1437, 5) + gabow.createEdge(905, 1792, 51) + gabow.createEdge(1470, 1158, 27) + gabow.createEdge(457, 1946, 29) + gabow.createEdge(1944, 530, 87) + gabow.createEdge(1603, 1970, 26) + gabow.createEdge(1725, 1758, 5) + gabow.createEdge(1274, 762, 42) + gabow.createEdge(277, 1787, 25) + gabow.createEdge(1969, 650, 56) + gabow.createEdge(1824, 1765, 54) + gabow.createEdge(742, 1313, 64) + gabow.createEdge(821, 410, 8) + gabow.createEdge(1833, 559, 13) + gabow.createEdge(202, 1294, 76) + gabow.createEdge(101, 1963, 87) + gabow.createEdge(1418, 520, 3) + gabow.createEdge(1073, 326, 64) + gabow.createEdge(1353, 39, 87) + gabow.createEdge(113, 1294, 13) + gabow.createEdge(79, 382, 60) + gabow.createEdge(88, 74, 62) + gabow.createEdge(269, 1557, 8) + gabow.createEdge(1627, 941, 78) + gabow.createEdge(1054, 213, 52) + gabow.createEdge(204, 1409, 62) + gabow.createEdge(1924, 386, 60) + gabow.createEdge(1391, 809, 92) + gabow.createEdge(247, 1762, 73) + gabow.createEdge(1466, 1713, 76) + gabow.createEdge(1820, 429, 68) + gabow.createEdge(1366, 639, 2) + gabow.createEdge(306, 1190, 86) + gabow.createEdge(232, 721, 97) + gabow.createEdge(1396, 1817, 66) + gabow.createEdge(224, 838, 1) + gabow.createEdge(557, 424, 6) + gabow.createEdge(740, 1957, 69) + gabow.createEdge(218, 1139, 100) + gabow.createEdge(107, 1542, 58) + gabow.createEdge(390, 1829, 83) + gabow.createEdge(1259, 922, 6) + gabow.createEdge(1197, 739, 96) + gabow.createEdge(1234, 930, 71) + gabow.createEdge(342, 63, 73) + gabow.createEdge(367, 1026, 53) + gabow.createEdge(631, 726, 14) + gabow.createEdge(1491, 1016, 50) + gabow.createEdge(1408, 1431, 17) + gabow.createEdge(1836, 1208, 56) + gabow.createEdge(1691, 182, 64) + gabow.createEdge(1238, 1698, 76) + gabow.createEdge(34, 107, 3) + gabow.createEdge(193, 1592, 14) + gabow.createEdge(186, 1111, 69) + gabow.createEdge(1510, 1530, 69) + gabow.createEdge(1352, 675, 83) + gabow.createEdge(920, 1090, 92) + gabow.createEdge(484, 1496, 46) + gabow.createEdge(180, 65, 52) + gabow.createEdge(242, 518, 63) + gabow.createEdge(1351, 1177, 73) + gabow.createEdge(1952, 710, 57) + gabow.createEdge(1544, 1738, 30) + gabow.createEdge(149, 1820, 96) + gabow.createEdge(927, 949, 74) + gabow.createEdge(1075, 217, 21) + gabow.createEdge(464, 1283, 54) + gabow.createEdge(751, 293, 81) + gabow.createEdge(1430, 113, 37) + gabow.createEdge(898, 1008, 59) + gabow.createEdge(310, 511, 35) + gabow.createEdge(1732, 836, 99) + gabow.createEdge(1940, 440, 43) + gabow.createEdge(1345, 479, 32) + gabow.createEdge(974, 317, 15) + gabow.createEdge(595, 1559, 38) + gabow.createEdge(1351, 1228, 22) + gabow.createEdge(877, 1167, 21) + gabow.createEdge(373, 1685, 96) + gabow.createEdge(1328, 1852, 8) + gabow.createEdge(125, 1917, 11) + gabow.createEdge(1620, 1827, 44) + gabow.createEdge(1233, 763, 53) + gabow.createEdge(96, 875, 77) + gabow.createEdge(801, 1163, 75) + gabow.createEdge(1691, 1290, 86) + gabow.createEdge(75, 526, 3) + gabow.createEdge(1136, 1532, 95) + gabow.createEdge(1025, 261, 54) + gabow.createEdge(625, 1043, 19) + gabow.createEdge(832, 519, 14) + gabow.createEdge(485, 268, 47) + gabow.createEdge(1222, 1006, 85) + gabow.createEdge(1159, 66, 97) + gabow.createEdge(325, 376, 58) + gabow.createEdge(947, 1882, 50) + gabow.createEdge(613, 1272, 10) + gabow.createEdge(594, 916, 20) + gabow.createEdge(1532, 939, 79) + gabow.createEdge(678, 1148, 84) + gabow.createEdge(1108, 108, 71) + gabow.createEdge(1542, 561, 26) + gabow.createEdge(1498, 1470, 26) + gabow.createEdge(804, 1443, 44) + gabow.createEdge(96, 1269, 12) + gabow.createEdge(1001, 53, 85) + gabow.createEdge(339, 1453, 82) + gabow.createEdge(1421, 118, 26) + gabow.createEdge(489, 1827, 55) + gabow.createEdge(118, 953, 6) + gabow.createEdge(1258, 1154, 15) + gabow.createEdge(1170, 643, 18) + gabow.createEdge(1586, 1895, 8) + gabow.createEdge(815, 1887, 90) + gabow.createEdge(1653, 1469, 73) + gabow.createEdge(998, 1084, 16) + gabow.createEdge(1817, 803, 38) + gabow.createEdge(954, 1841, 19) + gabow.createEdge(1272, 179, 14) + gabow.createEdge(980, 33, 37) + gabow.createEdge(677, 303, 26) + gabow.createEdge(29, 1747, 52) + gabow.createEdge(777, 246, 24) + gabow.createEdge(223, 1166, 98) + gabow.createEdge(1020, 572, 68) + gabow.createEdge(1266, 1487, 52) + gabow.createEdge(16, 1769, 73) + gabow.createEdge(44, 938, 76) + gabow.createEdge(1490, 533, 28) + gabow.createEdge(345, 1028, 58) + gabow.createEdge(1234, 1, 88) + gabow.createEdge(1151, 676, 81) + gabow.createEdge(737, 226, 59) + gabow.createEdge(1095, 1343, 75) + gabow.createEdge(106, 778, 10) + gabow.createEdge(1327, 1235, 79) + gabow.createEdge(1314, 1595, 38) + gabow.createEdge(1552, 1087, 89) + gabow.createEdge(603, 365, 76) + gabow.createEdge(748, 773, 27) + gabow.createEdge(1086, 927, 23) + gabow.createEdge(1915, 634, 24) + gabow.createEdge(1430, 1626, 22) + gabow.createEdge(1060, 1816, 83) + gabow.createEdge(1706, 1714, 43) + gabow.createEdge(769, 1904, 99) + gabow.createEdge(994, 1273, 26) + gabow.createEdge(1018, 1640, 26) + gabow.createEdge(486, 1410, 64) + gabow.createEdge(1607, 1398, 15) + gabow.createEdge(238, 156, 88) + gabow.createEdge(326, 1125, 19) + gabow.createEdge(923, 1203, 80) + gabow.createEdge(189, 206, 24) + gabow.createEdge(1674, 1452, 40) + gabow.createEdge(1685, 1903, 3) + gabow.createEdge(1581, 1852, 31) + gabow.createEdge(421, 240, 80) + gabow.createEdge(1150, 321, 43) + gabow.createEdge(574, 1495, 17) + gabow.createEdge(1215, 1624, 4) + gabow.createEdge(513, 849, 46) + gabow.createEdge(883, 1499, 93) + gabow.createEdge(1488, 684, 53) + gabow.createEdge(1758, 299, 72) + gabow.createEdge(415, 1369, 19) + gabow.createEdge(1770, 419, 100) + gabow.createEdge(1175, 741, 12) + gabow.createEdge(1029, 174, 46) + gabow.createEdge(1084, 1574, 43) + gabow.createEdge(1258, 574, 53) + gabow.createEdge(1868, 1183, 36) + gabow.createEdge(1377, 1438, 48) + gabow.createEdge(1116, 1406, 8) + gabow.createEdge(1428, 513, 10) + gabow.createEdge(1298, 1865, 28) + gabow.createEdge(452, 1951, 38) + gabow.createEdge(385, 1153, 66) + gabow.createEdge(1293, 72, 77) + gabow.createEdge(960, 1781, 43) + gabow.createEdge(183, 447, 9) + gabow.createEdge(1691, 1087, 20) + gabow.createEdge(28, 749, 66) + gabow.createEdge(105, 912, 40) + gabow.createEdge(1402, 1810, 66) + gabow.createEdge(942, 359, 39) + gabow.createEdge(1583, 1595, 24) + gabow.createEdge(278, 1857, 67) + gabow.createEdge(90, 883, 42) + gabow.createEdge(1299, 1109, 59) + gabow.createEdge(404, 1934, 71) + gabow.createEdge(1878, 907, 89) + gabow.createEdge(1065, 201, 40) + gabow.createEdge(175, 1150, 42) + gabow.createEdge(1776, 157, 43) + gabow.createEdge(612, 161, 62) + gabow.createEdge(1925, 1984, 8) + gabow.createEdge(780, 1656, 99) + gabow.createEdge(1924, 1317, 86) + gabow.createEdge(391, 1035, 8) + gabow.createEdge(916, 1745, 88) + gabow.createEdge(1205, 119, 56) + gabow.createEdge(767, 255, 15) + gabow.createEdge(652, 117, 80) + gabow.createEdge(627, 298, 93) + gabow.createEdge(1051, 1241, 18) + gabow.createEdge(908, 1640, 15) + gabow.createEdge(456, 167, 33) + gabow.createEdge(707, 38, 61) + gabow.createEdge(489, 145, 26) + gabow.createEdge(1358, 1174, 100) + gabow.createEdge(436, 1133, 88) + gabow.createEdge(1280, 1722, 18) + gabow.createEdge(166, 1560, 68) + gabow.createEdge(581, 616, 9) + gabow.createEdge(1259, 1212, 25) + gabow.createEdge(1354, 1763, 87) + gabow.createEdge(1991, 369, 63) + gabow.createEdge(546, 422, 96) + gabow.createEdge(703, 1580, 13) + gabow.createEdge(1291, 906, 57) + gabow.createEdge(291, 1172, 92) + gabow.createEdge(139, 1857, 71) + gabow.createEdge(89, 947, 10) + gabow.createEdge(827, 246, 71) + gabow.createEdge(300, 1639, 23) + gabow.createEdge(132, 800, 32) + gabow.createEdge(634, 866, 92) + gabow.createEdge(1287, 914, 58) + gabow.createEdge(1704, 1987, 65) + gabow.createEdge(1413, 1217, 72) + gabow.createEdge(1479, 1025, 88) + gabow.createEdge(1590, 1357, 60) + gabow.createEdge(907, 782, 62) + gabow.createEdge(1011, 714, 28) + gabow.createEdge(1096, 371, 38) + gabow.createEdge(1084, 746, 8) + gabow.createEdge(1513, 1026, 48) + gabow.createEdge(915, 1559, 21) + gabow.createEdge(1351, 1025, 81) + gabow.createEdge(246, 1413, 94) + gabow.createEdge(836, 392, 62) + gabow.createEdge(1274, 1419, 3) + gabow.createEdge(1206, 1388, 55) + gabow.createEdge(1523, 656, 97) + gabow.createEdge(1751, 1707, 57) + gabow.createEdge(1139, 1618, 63) + gabow.createEdge(1297, 1768, 71) + gabow.createEdge(1006, 42, 77) + gabow.createEdge(220, 479, 13) + gabow.createEdge(341, 229, 8) + gabow.createEdge(502, 1161, 59) + gabow.createEdge(672, 590, 92) + gabow.createEdge(622, 1664, 7) + gabow.createEdge(1170, 1306, 83) + gabow.createEdge(422, 917, 49) + gabow.createEdge(995, 1314, 82) + gabow.createEdge(923, 1335, 57) + gabow.createEdge(1376, 1255, 94) + gabow.createEdge(375, 1001, 32) + gabow.createEdge(1060, 910, 91) + gabow.createEdge(1936, 1606, 72) + gabow.createEdge(1014, 1412, 81) + gabow.createEdge(1190, 1738, 45) + gabow.createEdge(932, 1605, 74) + gabow.createEdge(1792, 253, 71) + gabow.createEdge(430, 976, 49) + gabow.createEdge(168, 901, 28) + gabow.createEdge(1438, 759, 16) + gabow.createEdge(32, 924, 78) + gabow.createEdge(1988, 1303, 82) + gabow.createEdge(946, 132, 60) + gabow.createEdge(484, 1363, 53) + gabow.createEdge(1728, 725, 13) + gabow.createEdge(1248, 955, 63) + gabow.createEdge(1954, 638, 69) + gabow.createEdge(1427, 667, 34) + gabow.createEdge(137, 343, 57) + gabow.createEdge(950, 614, 77) + gabow.createEdge(1200, 470, 4) + gabow.createEdge(724, 1035, 61) + gabow.createEdge(532, 1478, 7) + gabow.createEdge(544, 632, 24) + gabow.createEdge(615, 1819, 45) + gabow.createEdge(217, 1931, 25) + gabow.createEdge(242, 1702, 56) + gabow.createEdge(1176, 1247, 37) + gabow.createEdge(1430, 1820, 17) + gabow.createEdge(1063, 956, 17) + gabow.createEdge(344, 1445, 38) + gabow.createEdge(1073, 569, 17) + gabow.createEdge(1601, 863, 75) + gabow.createEdge(1655, 1794, 86) + gabow.createEdge(394, 1759, 37) + gabow.createEdge(606, 441, 40) + gabow.createEdge(718, 1585, 64) + gabow.createEdge(1701, 1886, 35) + gabow.createEdge(732, 546, 78) + gabow.createEdge(458, 157, 11) + gabow.createEdge(659, 1540, 11) + gabow.createEdge(606, 1745, 31) + gabow.createEdge(148, 1437, 34) + gabow.createEdge(1997, 589, 75) + gabow.createEdge(718, 1225, 74) + gabow.createEdge(437, 1185, 68) + gabow.createEdge(818, 959, 94) + gabow.createEdge(524, 488, 96) + gabow.createEdge(1469, 1972, 68) + gabow.createEdge(1716, 1453, 9) + gabow.createEdge(536, 1531, 32) + gabow.createEdge(163, 112, 18) + gabow.createEdge(1476, 359, 42) + gabow.createEdge(246, 1492, 68) + gabow.createEdge(500, 1402, 90) + gabow.createEdge(986, 1178, 5) + gabow.createEdge(29, 665, 19) + gabow.createEdge(627, 1391, 9) + gabow.createEdge(1435, 1281, 87) + gabow.createEdge(1293, 1613, 72) + gabow.createEdge(448, 1513, 63) + gabow.createEdge(1353, 283, 96) + gabow.createEdge(148, 1797, 15) + gabow.createEdge(1558, 601, 49) + gabow.createEdge(308, 117, 25) + gabow.createEdge(1157, 320, 90) + gabow.createEdge(1183, 1668, 22) + gabow.createEdge(538, 1962, 100) + gabow.createEdge(1572, 1231, 78) + gabow.createEdge(47, 1987, 66) + gabow.createEdge(1403, 148, 20) + gabow.createEdge(364, 1863, 76) + gabow.createEdge(1933, 1220, 21) + gabow.createEdge(1965, 1899, 64) + gabow.createEdge(1873, 1890, 14) + gabow.createEdge(814, 827, 20) + gabow.createEdge(1848, 873, 17) + gabow.createEdge(951, 651, 81) + gabow.createEdge(921, 1512, 46) + gabow.createEdge(964, 671, 6) + gabow.createEdge(1946, 1058, 4) + gabow.createEdge(50, 656, 99) + gabow.createEdge(1783, 492, 75) + gabow.createEdge(1742, 1069, 44) + gabow.createEdge(1139, 646, 89) + gabow.createEdge(1996, 15, 1) + gabow.createEdge(239, 399, 89) + gabow.createEdge(427, 996, 50) + gabow.createEdge(1316, 900, 5) + gabow.createEdge(54, 813, 76) + gabow.createEdge(1202, 1501, 3) + gabow.createEdge(1857, 1954, 36) + gabow.createEdge(11, 994, 80) + gabow.createEdge(1746, 731, 53) + gabow.createEdge(53, 1625, 90) + gabow.createEdge(1911, 1107, 72) + gabow.createEdge(8, 1770, 97) + gabow.createEdge(1082, 505, 15) + gabow.createEdge(1500, 392, 65) + gabow.createEdge(963, 219, 86) + gabow.createEdge(1295, 1827, 75) + gabow.createEdge(93, 898, 20) + gabow.createEdge(1476, 730, 20) + gabow.createEdge(205, 1812, 4) + gabow.createEdge(130, 1549, 83) + gabow.createEdge(1392, 1077, 56) + gabow.createEdge(1543, 1188, 77) + gabow.createEdge(473, 1493, 11) + gabow.createEdge(1248, 1313, 67) + gabow.createEdge(120, 1594, 30) + gabow.createEdge(1113, 1495, 13) + gabow.createEdge(1041, 1782, 26) + gabow.createEdge(29, 1858, 37) + gabow.createEdge(1118, 1985, 90) + gabow.createEdge(569, 399, 47) + gabow.createEdge(241, 575, 83) + gabow.createEdge(872, 709, 56) + gabow.createEdge(693, 906, 63) + gabow.createEdge(1021, 365, 8) + gabow.createEdge(1265, 1245, 82) + gabow.createEdge(134, 907, 55) + gabow.createEdge(1677, 1914, 91) + gabow.createEdge(1655, 836, 86) + gabow.createEdge(105, 1888, 57) + gabow.createEdge(1128, 1940, 1) + gabow.createEdge(700, 513, 65) + gabow.createEdge(144, 341, 7) + gabow.createEdge(1386, 879, 69) + gabow.createEdge(1502, 1366, 41) + gabow.createEdge(1154, 1368, 74) + gabow.createEdge(1998, 1630, 34) + gabow.createEdge(771, 360, 16) + gabow.createEdge(1355, 1429, 17) + gabow.createEdge(1770, 1963, 83) + gabow.createEdge(1483, 1574, 63) + gabow.createEdge(998, 412, 38) + gabow.createEdge(1, 370, 71) + gabow.createEdge(193, 54, 4) + gabow.createEdge(1426, 1871, 56) + gabow.createEdge(306, 559, 71) + gabow.createEdge(1633, 415, 57) + gabow.createEdge(1784, 1172, 31) + gabow.createEdge(1197, 1306, 53) + gabow.createEdge(1956, 80, 93) + gabow.createEdge(1654, 466, 81) + gabow.createEdge(1273, 1278, 82) + gabow.createEdge(57, 1004, 48) + gabow.createEdge(1378, 991, 36) + gabow.createEdge(871, 995, 26) + gabow.createEdge(1988, 1156, 95) + gabow.createEdge(471, 974, 75) + gabow.createEdge(1766, 1767, 33) + gabow.createEdge(6, 1315, 32) + gabow.createEdge(124, 148, 88) + gabow.createEdge(913, 1558, 18) + gabow.createEdge(1133, 1331, 77) + gabow.createEdge(1058, 916, 35) + gabow.createEdge(1553, 702, 23) + gabow.createEdge(1728, 393, 42) + gabow.createEdge(562, 1626, 3) + gabow.createEdge(667, 233, 49) + gabow.createEdge(673, 772, 48) + gabow.createEdge(666, 279, 80) + gabow.createEdge(1969, 1079, 33) + gabow.createEdge(1518, 196, 65) + gabow.createEdge(460, 435, 86) + gabow.createEdge(454, 1191, 41) + gabow.createEdge(1675, 108, 15) + gabow.createEdge(1221, 496, 11) + gabow.createEdge(5, 729, 17) + gabow.createEdge(1368, 76, 7) + gabow.createEdge(1605, 1289, 75) + gabow.createEdge(1665, 404, 99) + gabow.createEdge(729, 1471, 8) + gabow.createEdge(1304, 619, 94) + gabow.createEdge(850, 851, 52) + gabow.createEdge(1892, 1504, 53) + gabow.createEdge(787, 1441, 56) + gabow.createEdge(651, 1607, 62) + gabow.createEdge(1724, 1585, 59) + gabow.createEdge(680, 444, 67) + gabow.createEdge(618, 275, 61) + gabow.createEdge(539, 524, 67) + gabow.createEdge(242, 1485, 8) + gabow.createEdge(1924, 1985, 97) + gabow.createEdge(1863, 272, 9) + gabow.createEdge(70, 1567, 44) + gabow.createEdge(223, 84, 73) + gabow.createEdge(306, 1183, 45) + gabow.createEdge(1341, 1653, 8) + gabow.createEdge(184, 0, 3) + gabow.createEdge(1661, 428, 70) + gabow.createEdge(582, 318, 100) + gabow.createEdge(1241, 1910, 25) + gabow.createEdge(1197, 1212, 66) + gabow.createEdge(1274, 1440, 37) + gabow.createEdge(509, 919, 49) + gabow.createEdge(1818, 1086, 35) + gabow.createEdge(1369, 968, 91) + gabow.createEdge(807, 1097, 59) + gabow.createEdge(1081, 695, 16) + gabow.createEdge(82, 322, 81) + gabow.createEdge(1060, 356, 16) + gabow.createEdge(1952, 1705, 55) + gabow.createEdge(860, 1039, 39) + gabow.createEdge(1439, 538, 62) + gabow.createEdge(629, 431, 100) + gabow.createEdge(744, 898, 17) + gabow.createEdge(910, 1725, 55) + gabow.createEdge(1215, 507, 70) + gabow.createEdge(49, 1076, 58) + gabow.createEdge(890, 1326, 1) + gabow.createEdge(561, 1580, 55) + gabow.createEdge(1223, 1919, 15) + gabow.createEdge(1301, 1122, 47) + gabow.createEdge(1823, 291, 63) + gabow.createEdge(1907, 542, 73) + gabow.createEdge(430, 1991, 97) + gabow.createEdge(456, 12, 72) + gabow.createEdge(1408, 1176, 3) + gabow.createEdge(984, 537, 82) + gabow.createEdge(1327, 977, 5) + gabow.createEdge(39, 1714, 96) + gabow.createEdge(1033, 1690, 81) + gabow.createEdge(448, 987, 39) + gabow.createEdge(735, 910, 42) + gabow.createEdge(1741, 442, 53) + gabow.createEdge(1210, 1450, 36) + gabow.createEdge(1707, 13, 27) + gabow.createEdge(486, 418, 64) + gabow.createEdge(729, 495, 1) + gabow.createEdge(565, 1012, 63) + gabow.createEdge(1478, 1322, 12) + gabow.createEdge(904, 558, 89) + gabow.createEdge(1146, 1244, 83) + gabow.createEdge(1717, 293, 28) + gabow.createEdge(1515, 139, 25) + gabow.createEdge(1859, 671, 71) + gabow.createEdge(1435, 1803, 6) + gabow.createEdge(1069, 815, 72) + gabow.createEdge(228, 1117, 36) + gabow.createEdge(1274, 1743, 58) + gabow.createEdge(181, 454, 57) + gabow.createEdge(1627, 638, 68) + gabow.createEdge(256, 13, 35) + gabow.createEdge(1747, 1501, 12) + gabow.createEdge(652, 1140, 85) + gabow.createEdge(103, 1857, 5) + gabow.createEdge(1528, 910, 7) + gabow.createEdge(1079, 1590, 49) + gabow.createEdge(1658, 1883, 84) + gabow.createEdge(1147, 925, 57) + gabow.createEdge(890, 654, 65) + gabow.createEdge(10, 1865, 29) + gabow.createEdge(701, 1995, 57) + gabow.createEdge(1584, 1776, 63) + gabow.createEdge(1542, 270, 75) + gabow.createEdge(1067, 1562, 64) + gabow.createEdge(300, 1155, 98) + gabow.createEdge(965, 1646, 2) + gabow.createEdge(1745, 1069, 35) + gabow.createEdge(1986, 1609, 93) + gabow.createEdge(522, 1802, 46) + gabow.createEdge(491, 483, 97) + gabow.createEdge(1758, 1317, 23) + gabow.createEdge(1108, 1777, 39) + gabow.createEdge(1001, 163, 78) + gabow.createEdge(1952, 531, 92) + gabow.createEdge(1051, 301, 81) + gabow.createEdge(1943, 1889, 33) + gabow.createEdge(413, 1077, 72) + gabow.createEdge(930, 1164, 82) + gabow.createEdge(727, 940, 20) + gabow.createEdge(1627, 289, 49) + gabow.createEdge(692, 549, 15) + gabow.createEdge(1599, 207, 42) + gabow.createEdge(1502, 688, 30) + gabow.createEdge(905, 481, 10) + gabow.createEdge(717, 127, 92) + gabow.createEdge(1007, 1112, 42) + gabow.createEdge(106, 1989, 83) + gabow.createEdge(510, 1053, 99) + gabow.createEdge(567, 1717, 72) + gabow.createEdge(315, 610, 10) + gabow.createEdge(1883, 972, 17) + gabow.createEdge(1401, 821, 79) + gabow.createEdge(1355, 1974, 33) + gabow.createEdge(210, 795, 99) + gabow.createEdge(1784, 523, 33) + gabow.createEdge(909, 407, 33) + gabow.createEdge(1258, 689, 95) + gabow.createEdge(75, 639, 95) + gabow.createEdge(322, 1135, 15) + gabow.createEdge(711, 96, 76) + gabow.createEdge(1327, 828, 74) + gabow.createEdge(1741, 1298, 1) + gabow.createEdge(1838, 334, 11) + gabow.createEdge(1858, 1053, 83) + gabow.createEdge(1436, 493, 82) + gabow.createEdge(795, 512, 92) + gabow.createEdge(1279, 119, 58) + gabow.createEdge(530, 498, 4) + gabow.createEdge(595, 1162, 83) + gabow.createEdge(1339, 806, 20) + gabow.createEdge(898, 877, 59) + gabow.createEdge(1696, 662, 28) + gabow.createEdge(1102, 972, 23) + gabow.createEdge(1403, 925, 78) + gabow.createEdge(363, 156, 67) + gabow.createEdge(868, 1138, 84) + gabow.createEdge(545, 1126, 37) + gabow.createEdge(180, 1880, 9) + gabow.createEdge(1591, 1474, 7) + gabow.createEdge(1607, 1624, 21) + gabow.createEdge(95, 1120, 88) + gabow.createEdge(1746, 333, 69) + gabow.createEdge(351, 636, 74) + gabow.createEdge(276, 1017, 83) + gabow.createEdge(292, 581, 21) + gabow.createEdge(1234, 377, 21) + gabow.createEdge(1529, 1949, 92) + gabow.createEdge(576, 1655, 71) + gabow.createEdge(1927, 933, 39) + gabow.createEdge(10, 1948, 21) + gabow.createEdge(1680, 1342, 34) + gabow.createEdge(1682, 1428, 94) + gabow.createEdge(1538, 1383, 9) + gabow.createEdge(379, 896, 13) + gabow.createEdge(460, 1223, 54) + gabow.createEdge(489, 221, 70) + gabow.createEdge(403, 1661, 21) + gabow.createEdge(581, 1832, 100) + gabow.createEdge(1750, 926, 83) + gabow.createEdge(313, 12, 50) + gabow.createEdge(1885, 516, 85) + gabow.createEdge(1444, 774, 89) + gabow.createEdge(173, 508, 1) + gabow.createEdge(1495, 414, 15) + gabow.createEdge(1986, 792, 22) + gabow.createEdge(138, 548, 18) + gabow.createEdge(1022, 1422, 50) + gabow.createEdge(932, 1565, 59) + gabow.createEdge(136, 536, 17) + gabow.createEdge(198, 193, 56) + gabow.createEdge(1435, 1939, 59) + gabow.createEdge(350, 866, 6) + gabow.createEdge(930, 263, 7) + gabow.createEdge(1824, 82, 54) + gabow.createEdge(1945, 1537, 97) + gabow.createEdge(840, 392, 8) + gabow.createEdge(1203, 121, 30) + gabow.createEdge(1781, 759, 53) + gabow.createEdge(1350, 19, 16) + gabow.createEdge(591, 330, 97) + gabow.createEdge(1025, 880, 38) + gabow.createEdge(95, 1427, 20) + gabow.createEdge(1447, 1160, 64) + gabow.createEdge(573, 482, 60) + gabow.createEdge(69, 78, 96) + gabow.createEdge(1264, 1292, 17) + gabow.createEdge(501, 489, 92) + gabow.createEdge(1123, 20, 45) + gabow.createEdge(404, 80, 65) + gabow.createEdge(1632, 543, 62) + gabow.createEdge(489, 161, 8) + gabow.createEdge(1257, 1453, 81) + gabow.createEdge(1472, 1329, 27) + gabow.createEdge(1777, 1348, 41) + gabow.createEdge(1988, 1509, 69) + gabow.createEdge(588, 1814, 36) + gabow.createEdge(1852, 1925, 21) + gabow.createEdge(1258, 1657, 84) + gabow.createEdge(1149, 1319, 3) + gabow.createEdge(487, 173, 31) + gabow.createEdge(991, 914, 42) + gabow.createEdge(1702, 1658, 98) + gabow.createEdge(1228, 772, 97) + gabow.createEdge(1603, 1409, 19) + gabow.createEdge(1703, 350, 7) + gabow.createEdge(1287, 1539, 73) + gabow.createEdge(1738, 1828, 94) + gabow.createEdge(442, 538, 91) + gabow.createEdge(67, 1785, 53) + gabow.createEdge(1928, 189, 58) + gabow.createEdge(577, 1910, 32) + gabow.createEdge(1443, 587, 44) + gabow.createEdge(994, 1450, 93) + gabow.createEdge(382, 1170, 8) + gabow.createEdge(25, 1751, 55) + gabow.createEdge(1758, 1003, 96) + gabow.createEdge(1684, 179, 98) + gabow.createEdge(808, 1345, 26) + gabow.createEdge(1488, 1828, 2) + gabow.createEdge(1302, 774, 82) + gabow.createEdge(279, 528, 14) + gabow.createEdge(1591, 322, 1) + gabow.createEdge(760, 1094, 50) + gabow.createEdge(1128, 1431, 77) + gabow.createEdge(1169, 8, 11) + gabow.createEdge(403, 592, 61) + gabow.createEdge(10, 819, 34) + gabow.createEdge(1786, 1617, 44) + gabow.createEdge(258, 108, 88) + gabow.createEdge(38, 1359, 30) + gabow.createEdge(578, 406, 65) + gabow.createEdge(38, 1213, 96) + gabow.createEdge(1545, 388, 57) + gabow.createEdge(1653, 430, 13) + gabow.createEdge(1847, 238, 72) + gabow.createEdge(421, 1391, 79) + gabow.createEdge(23, 1185, 87) + gabow.createEdge(1489, 99, 68) + gabow.createEdge(204, 1501, 80) + gabow.createEdge(1451, 1642, 30) + gabow.createEdge(634, 829, 48) + gabow.createEdge(1575, 382, 26) + gabow.createEdge(1543, 159, 69) + gabow.createEdge(616, 597, 18) + gabow.createEdge(606, 1266, 56) + gabow.createEdge(736, 61, 30) + gabow.createEdge(1932, 316, 78) + gabow.createEdge(1462, 65, 19) + gabow.createEdge(862, 543, 66) + gabow.createEdge(559, 1167, 72) + gabow.createEdge(557, 1704, 76) + gabow.createEdge(1455, 39, 53) + gabow.createEdge(1110, 1468, 22) + gabow.createEdge(425, 242, 51) + gabow.createEdge(149, 1169, 6) + gabow.createEdge(637, 678, 30) + gabow.createEdge(1814, 106, 24) + gabow.createEdge(516, 262, 39) + gabow.createEdge(1506, 1659, 2) + gabow.createEdge(1389, 561, 46) + gabow.createEdge(419, 330, 74) + gabow.createEdge(1680, 255, 66) + gabow.createEdge(252, 1706, 83) + gabow.createEdge(1190, 1525, 48) + gabow.createEdge(1855, 418, 19) + gabow.createEdge(1405, 1005, 16) + gabow.createEdge(872, 508, 30) + gabow.createEdge(981, 854, 82) + gabow.createEdge(1926, 1661, 8) + gabow.createEdge(1026, 1579, 1) + gabow.createEdge(121, 1756, 73) + gabow.createEdge(1462, 257, 36) + gabow.createEdge(1351, 54, 33) + gabow.createEdge(38, 1983, 42) + gabow.createEdge(1437, 1934, 60) + gabow.createEdge(964, 1901, 36) + gabow.createEdge(1198, 265, 62) + gabow.createEdge(875, 1897, 41) + gabow.createEdge(433, 1140, 53) + gabow.createEdge(1264, 136, 93) + gabow.createEdge(91, 1636, 46) + gabow.createEdge(373, 1424, 22) + gabow.createEdge(1370, 739, 72) + gabow.createEdge(1864, 457, 24) + gabow.createEdge(1293, 1614, 83) + gabow.createEdge(847, 1599, 77) + gabow.createEdge(519, 493, 11) + gabow.createEdge(589, 479, 74) + gabow.createEdge(1043, 472, 80) + gabow.createEdge(1583, 282, 31) + gabow.createEdge(771, 818, 70) + gabow.createEdge(588, 1982, 2) + gabow.createEdge(741, 1574, 10) + gabow.createEdge(712, 874, 97) + gabow.createEdge(971, 1454, 42) + gabow.createEdge(1129, 1681, 65) + gabow.createEdge(730, 370, 62) + gabow.createEdge(1944, 1143, 76) + gabow.createEdge(1421, 141, 78) + gabow.createEdge(1531, 1232, 23) + gabow.createEdge(1913, 1981, 37) + gabow.createEdge(1151, 725, 92) + gabow.createEdge(1191, 1835, 21) + gabow.createEdge(955, 45, 63) + gabow.createEdge(482, 915, 84) + gabow.createEdge(1166, 1323, 91) + gabow.createEdge(592, 1377, 9) + gabow.createEdge(440, 739, 65) + gabow.createEdge(147, 1363, 90) + gabow.createEdge(236, 1643, 62) + gabow.createEdge(1056, 960, 93) + gabow.createEdge(224, 1521, 100) + gabow.createEdge(991, 413, 21) + gabow.createEdge(1838, 1777, 4) + gabow.createEdge(1675, 131, 86) + gabow.createEdge(393, 291, 98) + gabow.createEdge(23, 790, 19) + gabow.createEdge(327, 1357, 56) + gabow.createEdge(1674, 1223, 7) + gabow.createEdge(48, 850, 61) + gabow.createEdge(1046, 1351, 78) + gabow.createEdge(1058, 1151, 80) + gabow.createEdge(778, 403, 64) + gabow.createEdge(1656, 780, 21) + gabow.createEdge(198, 989, 33) + gabow.createEdge(493, 43, 28) + gabow.createEdge(1304, 1351, 81) + gabow.createEdge(1354, 536, 1) + gabow.createEdge(733, 1056, 38) + gabow.createEdge(1559, 1337, 62) + gabow.createEdge(518, 141, 64) + gabow.createEdge(1333, 899, 33) + gabow.createEdge(958, 528, 96) + gabow.createEdge(338, 680, 50) + gabow.createEdge(1328, 380, 42) + gabow.createEdge(1861, 1889, 50) + gabow.createEdge(995, 1884, 47) + gabow.createEdge(164, 1593, 56) + gabow.createEdge(1510, 911, 42) + gabow.createEdge(1093, 905, 94) + gabow.createEdge(1437, 1604, 70) + gabow.createEdge(354, 1384, 63) + gabow.createEdge(559, 1140, 63) + gabow.createEdge(1809, 969, 1) + gabow.createEdge(359, 201, 85) + gabow.createEdge(180, 1625, 62) + gabow.createEdge(447, 408, 99) + gabow.createEdge(903, 478, 48) + gabow.createEdge(1272, 1563, 40) + gabow.createEdge(979, 599, 19) + gabow.createEdge(259, 421, 26) + gabow.createEdge(1359, 1627, 89) + gabow.createEdge(897, 1733, 99) + gabow.createEdge(1017, 958, 1) + gabow.createEdge(1924, 1704, 63) + gabow.createEdge(1239, 1870, 10) + gabow.createEdge(1774, 647, 30) + gabow.createEdge(793, 1150, 15) + gabow.createEdge(113, 412, 44) + gabow.createEdge(1312, 1633, 62) + gabow.createEdge(520, 647, 43) + gabow.createEdge(1787, 751, 14) + gabow.createEdge(1157, 27, 78) + gabow.createEdge(46, 1524, 18) + gabow.createEdge(910, 1525, 16) + gabow.createEdge(388, 860, 68) + gabow.createEdge(1781, 1707, 30) + gabow.createEdge(340, 9, 74) + gabow.createEdge(1112, 1824, 26) + gabow.createEdge(1927, 340, 9) + gabow.createEdge(1872, 68, 31) + gabow.createEdge(1321, 359, 1) + gabow.createEdge(844, 1181, 33) + gabow.createEdge(1376, 1480, 57) + gabow.createEdge(819, 652, 8) + gabow.createEdge(1828, 1484, 12) + gabow.createEdge(945, 1396, 66) + gabow.createEdge(1176, 1666, 94) + gabow.createEdge(1474, 228, 7) + gabow.createEdge(63, 1562, 22) + gabow.createEdge(1852, 1460, 81) + gabow.createEdge(1347, 1969, 67) + gabow.createEdge(1639, 746, 7) + gabow.createEdge(409, 795, 25) + gabow.createEdge(1753, 684, 64) + gabow.createEdge(1550, 1930, 75) + gabow.createEdge(1946, 1045, 93) + gabow.createEdge(410, 1175, 74) + gabow.createEdge(1591, 183, 92) + gabow.createEdge(913, 1011, 48) + gabow.createEdge(20, 336, 18) + gabow.createEdge(1452, 195, 69) + gabow.createEdge(673, 678, 32) + gabow.createEdge(617, 825, 87) + gabow.createEdge(1717, 1527, 64) + gabow.createEdge(944, 127, 9) + gabow.createEdge(1944, 795, 47) + gabow.createEdge(1439, 619, 100) + gabow.createEdge(1444, 1100, 39) + gabow.createEdge(1632, 15, 49) + gabow.createEdge(1243, 1370, 66) + gabow.createEdge(1297, 652, 18) + gabow.createEdge(1034, 835, 70) + gabow.createEdge(38, 978, 20) + gabow.createEdge(1407, 1443, 22) + gabow.createEdge(545, 1068, 4) + gabow.createEdge(1963, 849, 39) + gabow.createEdge(944, 172, 57) + gabow.createEdge(271, 538, 31) + gabow.createEdge(1852, 1980, 74) + gabow.createEdge(132, 448, 34) + gabow.createEdge(217, 291, 95) + gabow.createEdge(1583, 1889, 30) + gabow.createEdge(62, 349, 22) + gabow.createEdge(1472, 1966, 4) + gabow.createEdge(667, 1411, 56) + gabow.createEdge(837, 863, 39) + gabow.createEdge(1039, 1527, 81) + gabow.createEdge(1727, 892, 13) + gabow.createEdge(1883, 1842, 84) + gabow.createEdge(925, 160, 16) + gabow.createEdge(807, 1017, 80) + gabow.createEdge(834, 905, 18) + gabow.createEdge(1034, 1779, 70) + gabow.createEdge(1200, 1792, 89) + gabow.createEdge(1821, 1317, 89) + gabow.createEdge(786, 1638, 83) + gabow.createEdge(729, 250, 86) + gabow.createEdge(1536, 912, 77) + gabow.createEdge(1957, 1823, 62) + gabow.createEdge(5, 1025, 98) + gabow.createEdge(1904, 294, 16) + gabow.createEdge(981, 422, 68) + gabow.createEdge(1529, 1001, 72) + gabow.createEdge(145, 1421, 16) + gabow.createEdge(733, 663, 11) + gabow.createEdge(1858, 1264, 99) + gabow.createEdge(539, 32, 92) + gabow.createEdge(522, 1895, 82) + gabow.createEdge(191, 1179, 70) + gabow.createEdge(69, 1880, 91) + gabow.createEdge(1997, 179, 71) + gabow.createEdge(1770, 1289, 96) + gabow.createEdge(784, 1949, 79) + gabow.createEdge(1605, 730, 8) + gabow.createEdge(922, 1638, 57) + gabow.createEdge(1301, 1778, 41) + gabow.createEdge(1323, 1648, 58) + gabow.createEdge(280, 983, 82) + gabow.createEdge(499, 404, 2) + gabow.createEdge(934, 216, 69) + gabow.createEdge(1955, 1554, 9) + gabow.createEdge(1069, 603, 9) + gabow.createEdge(1014, 1989, 58) + gabow.createEdge(242, 1115, 44) + gabow.createEdge(786, 1648, 94) + gabow.createEdge(1719, 963, 7) + gabow.createEdge(958, 400, 40) + gabow.createEdge(1058, 76, 7) + gabow.createEdge(1527, 1769, 8) + gabow.createEdge(1972, 995, 33) + gabow.createEdge(721, 1861, 4) + gabow.createEdge(1100, 557, 92) + gabow.createEdge(1283, 1445, 15) + gabow.createEdge(1760, 532, 54) + gabow.createEdge(1476, 1748, 57) + gabow.createEdge(1294, 1826, 53) + gabow.createEdge(1158, 732, 83) + gabow.createEdge(220, 962, 33) + gabow.createEdge(1530, 1840, 87) + gabow.createEdge(774, 334, 51) + gabow.createEdge(215, 1513, 50) + gabow.createEdge(99, 1853, 23) + gabow.createEdge(1751, 894, 93) + gabow.createEdge(1786, 798, 54) + gabow.createEdge(1794, 1416, 84) + gabow.createEdge(1133, 554, 35) + gabow.createEdge(1487, 745, 55) + gabow.createEdge(501, 1459, 77) + gabow.createEdge(1386, 339, 20) + gabow.createEdge(991, 372, 41) + gabow.createEdge(1874, 1187, 97) + gabow.createEdge(164, 0, 25) + gabow.createEdge(243, 936, 73) + gabow.createEdge(1612, 1286, 74) + gabow.createEdge(271, 680, 22) + gabow.createEdge(1647, 914, 8) + gabow.createEdge(869, 1340, 49) + gabow.createEdge(1850, 1206, 42) + gabow.createEdge(541, 1322, 23) + gabow.createEdge(801, 756, 29) + gabow.createEdge(294, 533, 14) + gabow.createEdge(1003, 19, 94) + gabow.createEdge(751, 557, 17) + gabow.createEdge(926, 1551, 67) + gabow.createEdge(1271, 1992, 31) + gabow.createEdge(231, 724, 46) + gabow.createEdge(1512, 615, 99) + gabow.createEdge(589, 843, 94) + gabow.createEdge(1812, 89, 88) + gabow.createEdge(1887, 548, 7) + gabow.createEdge(1473, 968, 96) + gabow.createEdge(232, 344, 100) + gabow.createEdge(1031, 1215, 90) + gabow.createEdge(1815, 820, 47) + gabow.createEdge(1362, 1614, 22) + gabow.createEdge(1402, 0, 10) + gabow.createEdge(865, 633, 29) + gabow.createEdge(621, 126, 9) + gabow.createEdge(177, 1422, 10) + gabow.createEdge(1821, 1063, 62) + gabow.createEdge(1906, 1897, 45) + gabow.createEdge(1672, 368, 44) + gabow.createEdge(729, 800, 40) + gabow.createEdge(436, 1594, 68) + gabow.createEdge(1580, 96, 35) + gabow.createEdge(918, 1269, 64) + gabow.createEdge(1216, 1885, 57) + gabow.createEdge(1580, 1031, 77) + gabow.createEdge(827, 3, 43) + gabow.createEdge(1675, 840, 34) + gabow.createEdge(1487, 1923, 10) + gabow.createEdge(1763, 1756, 90) + gabow.createEdge(229, 1377, 11) + gabow.createEdge(93, 1575, 81) + gabow.createEdge(721, 1342, 4) + gabow.createEdge(1904, 330, 19) + gabow.createEdge(571, 859, 34) + gabow.createEdge(1962, 69, 65) + gabow.createEdge(987, 228, 44) + gabow.createEdge(167, 990, 55) + gabow.createEdge(1727, 882, 5) + gabow.createEdge(1899, 649, 35) + gabow.createEdge(892, 838, 80) + gabow.createEdge(1892, 1515, 57) + gabow.createEdge(1657, 480, 69) + gabow.createEdge(1319, 1891, 78) + gabow.createEdge(1919, 995, 8) + gabow.createEdge(635, 1275, 62) + gabow.createEdge(46, 1377, 37) + gabow.createEdge(1101, 1706, 1) + gabow.createEdge(430, 1517, 22) + gabow.createEdge(746, 1041, 43) + gabow.createEdge(1029, 1927, 20) + gabow.createEdge(562, 1386, 87) + gabow.createEdge(1210, 120, 68) + gabow.createEdge(1676, 402, 61) + gabow.createEdge(806, 703, 95) + gabow.createEdge(108, 1259, 79) + gabow.createEdge(245, 905, 72) + gabow.createEdge(1640, 1462, 65) + gabow.createEdge(1879, 123, 33) + gabow.createEdge(597, 950, 75) + gabow.createEdge(496, 267, 100) + gabow.createEdge(1565, 896, 63) + gabow.createEdge(58, 1933, 85) + gabow.createEdge(400, 1990, 4) + gabow.createEdge(1206, 470, 93) + gabow.createEdge(1271, 590, 18) + gabow.createEdge(1538, 1426, 62) + gabow.createEdge(618, 1844, 82) + gabow.createEdge(755, 871, 56) + gabow.createEdge(1855, 340, 31) + gabow.createEdge(1894, 201, 92) + gabow.createEdge(1535, 644, 80) + gabow.createEdge(1479, 829, 57) + gabow.createEdge(1486, 557, 10) + gabow.createEdge(1351, 811, 72) + gabow.createEdge(1022, 627, 4) + gabow.createEdge(1871, 1255, 74) + gabow.createEdge(1998, 468, 25) + gabow.createEdge(1532, 67, 11) + gabow.createEdge(872, 401, 37) + gabow.createEdge(430, 1573, 90) + gabow.createEdge(548, 1573, 1) + gabow.createEdge(1028, 1803, 18) + gabow.createEdge(246, 1166, 38) + gabow.createEdge(895, 570, 37) + gabow.createEdge(1202, 1266, 57) + gabow.createEdge(791, 1253, 29) + gabow.createEdge(1231, 1747, 85) + gabow.createEdge(35, 765, 54) + gabow.createEdge(637, 1226, 9) + gabow.createEdge(624, 1061, 68) + gabow.createEdge(1115, 1732, 71) + gabow.createEdge(828, 62, 5) + gabow.createEdge(1604, 1969, 56) + gabow.createEdge(1202, 752, 84) + gabow.createEdge(1104, 1110, 22) + gabow.createEdge(1344, 1356, 84) + gabow.createEdge(1815, 1422, 97) + gabow.createEdge(1952, 1217, 38) + gabow.createEdge(1929, 1691, 13) + gabow.createEdge(909, 307, 60) + gabow.createEdge(1129, 638, 60) + gabow.createEdge(951, 779, 75) + gabow.createEdge(522, 1784, 26) + gabow.createEdge(5, 1747, 93) + gabow.createEdge(1980, 1386, 50) + gabow.createEdge(678, 631, 23) + gabow.createEdge(1503, 1607, 3) + gabow.createEdge(1300, 878, 20) + gabow.createEdge(976, 590, 95) + gabow.createEdge(613, 781, 14) + gabow.createEdge(864, 411, 35) + gabow.createEdge(809, 600, 77) + gabow.createEdge(445, 1631, 7) + gabow.createEdge(1967, 278, 36) + gabow.createEdge(1794, 1635, 33) + gabow.createEdge(1775, 1669, 37) + gabow.createEdge(1551, 1110, 78) + gabow.createEdge(424, 963, 96) + gabow.createEdge(1349, 355, 46) + gabow.createEdge(922, 552, 36) + gabow.createEdge(1427, 1984, 86) + gabow.createEdge(1047, 893, 69) + gabow.createEdge(1659, 1685, 67) + gabow.createEdge(1396, 541, 53) + gabow.createEdge(1276, 1706, 6) + gabow.createEdge(588, 1031, 13) + gabow.createEdge(1673, 616, 10) + gabow.createEdge(43, 1235, 42) + gabow.createEdge(439, 1835, 23) + gabow.createEdge(1488, 1382, 2) + gabow.createEdge(500, 1569, 92) + gabow.createEdge(68, 1973, 35) + gabow.createEdge(132, 380, 36) + gabow.createEdge(1640, 1902, 37) + gabow.createEdge(845, 1353, 77) + gabow.createEdge(1163, 89, 33) + gabow.createEdge(1354, 1386, 14) + gabow.createEdge(643, 4, 89) + gabow.createEdge(441, 1406, 92) + gabow.createEdge(373, 1752, 61) + gabow.createEdge(1864, 1133, 66) + gabow.createEdge(1757, 716, 74) + gabow.createEdge(264, 1106, 37) + gabow.createEdge(1283, 1144, 54) + gabow.createEdge(674, 890, 46) + gabow.createEdge(389, 38, 45) + gabow.createEdge(1143, 1849, 28) + gabow.createEdge(999, 1163, 40) + gabow.createEdge(1532, 709, 77) + gabow.createEdge(1795, 1748, 63) + gabow.createEdge(286, 1063, 9) + gabow.createEdge(1068, 1478, 32) + gabow.createEdge(1306, 1867, 66) + gabow.createEdge(5, 161, 4) + gabow.createEdge(622, 970, 61) + gabow.createEdge(1115, 1885, 32) + gabow.createEdge(600, 1, 51) + gabow.createEdge(841, 77, 34) + gabow.createEdge(34, 1939, 49) + gabow.createEdge(878, 964, 25) + gabow.createEdge(651, 386, 86) + gabow.createEdge(118, 1574, 98) + gabow.createEdge(799, 233, 67) + gabow.createEdge(1034, 1168, 39) + gabow.createEdge(950, 1629, 19) + gabow.createEdge(109, 850, 66) + gabow.createEdge(392, 1982, 16) + gabow.createEdge(1262, 739, 38) + gabow.createEdge(902, 1461, 72) + gabow.createEdge(1085, 677, 7) + gabow.createEdge(1162, 585, 66) + gabow.createEdge(280, 901, 74) + gabow.createEdge(629, 1734, 42) + gabow.createEdge(468, 542, 95) + gabow.createEdge(1399, 223, 50) + gabow.createEdge(1294, 758, 48) + gabow.createEdge(1808, 88, 2) + gabow.createEdge(1966, 1207, 7) + gabow.createEdge(1737, 1931, 98) + gabow.createEdge(1813, 1542, 34) + gabow.createEdge(390, 1697, 50) + gabow.createEdge(226, 625, 38) + gabow.createEdge(1240, 885, 61) + gabow.createEdge(412, 382, 9) + gabow.createEdge(90, 53, 92) + gabow.createEdge(1399, 439, 3) + gabow.createEdge(392, 449, 8) + gabow.createEdge(1534, 1277, 16) + gabow.createEdge(763, 1417, 36) + gabow.createEdge(1594, 1365, 48) + gabow.createEdge(531, 1468, 33) + gabow.createEdge(1814, 1839, 85) + gabow.createEdge(135, 852, 35) + gabow.createEdge(1750, 45, 19) + gabow.createEdge(73, 29, 43) + gabow.createEdge(1533, 859, 95) + gabow.createEdge(1196, 1160, 43) + gabow.createEdge(918, 1335, 18) + gabow.createEdge(794, 1206, 24) + gabow.createEdge(1545, 1859, 35) + gabow.createEdge(1323, 1744, 12) + gabow.createEdge(1392, 537, 53) + gabow.createEdge(315, 1113, 93) + gabow.createEdge(688, 1638, 95) + gabow.createEdge(655, 1393, 41) + gabow.createEdge(1635, 383, 18) + gabow.createEdge(704, 972, 29) + gabow.createEdge(1708, 33, 28) + gabow.createEdge(307, 576, 7) + gabow.createEdge(312, 771, 19) + gabow.createEdge(786, 1337, 38) + gabow.createEdge(677, 1546, 30) + gabow.createEdge(1643, 670, 41) + gabow.createEdge(1003, 1231, 73) + gabow.createEdge(366, 501, 29) + gabow.createEdge(1629, 1122, 27) + gabow.createEdge(1675, 1163, 76) + gabow.createEdge(1312, 1282, 58) + gabow.createEdge(1499, 1978, 21) + gabow.createEdge(1747, 230, 96) + gabow.createEdge(418, 1129, 73) + gabow.createEdge(1154, 677, 86) + gabow.createEdge(406, 1715, 35) + gabow.createEdge(274, 261, 32) + gabow.createEdge(1887, 422, 74) + gabow.createEdge(1623, 1465, 73) + gabow.createEdge(786, 1158, 62) + gabow.createEdge(1534, 1401, 83) + gabow.createEdge(675, 324, 17) + gabow.createEdge(1614, 726, 14) + gabow.createEdge(771, 1007, 2) + gabow.createEdge(1065, 1655, 18) + gabow.createEdge(1308, 1290, 24) + gabow.createEdge(1800, 1090, 74) + gabow.createEdge(583, 1300, 86) + gabow.createEdge(412, 1842, 46) + gabow.createEdge(900, 1189, 24) + gabow.createEdge(1807, 221, 37) + gabow.createEdge(241, 941, 7) + gabow.createEdge(1413, 854, 93) + gabow.createEdge(1942, 581, 5) + gabow.createEdge(588, 1033, 65) + gabow.createEdge(1350, 1384, 35) + gabow.createEdge(89, 1214, 9) + gabow.createEdge(1963, 284, 46) + gabow.createEdge(1957, 701, 65) + gabow.createEdge(789, 1952, 28) + gabow.createEdge(1596, 1255, 17) + gabow.createEdge(1985, 1548, 13) + gabow.createEdge(1861, 845, 1) + gabow.createEdge(681, 1815, 66) + gabow.createEdge(1315, 1378, 60) + gabow.createEdge(1969, 772, 65) + gabow.createEdge(1150, 1324, 71) + gabow.createEdge(1306, 1188, 12) + gabow.createEdge(222, 157, 67) + gabow.createEdge(788, 888, 57) + gabow.createEdge(1367, 1479, 11) + gabow.createEdge(1072, 1338, 53) + gabow.createEdge(865, 772, 14) + gabow.createEdge(662, 1920, 55) + gabow.createEdge(442, 1568, 23) + gabow.createEdge(1937, 1596, 93) + gabow.createEdge(335, 148, 48) + gabow.createEdge(952, 1300, 38) + gabow.createEdge(1361, 574, 76) + gabow.createEdge(1689, 776, 64) + gabow.createEdge(634, 66, 85) + gabow.createEdge(12, 311, 75) + gabow.createEdge(1289, 1201, 96) + gabow.createEdge(1726, 1529, 65) + gabow.createEdge(1208, 1815, 42) + gabow.createEdge(98, 1229, 81) + gabow.createEdge(311, 834, 22) + gabow.createEdge(1371, 362, 98) + gabow.createEdge(1879, 1554, 66) + gabow.createEdge(1077, 688, 47) + gabow.createEdge(1837, 1564, 62) + gabow.createEdge(453, 1559, 4) + gabow.createEdge(1572, 1221, 59) + gabow.createEdge(249, 1183, 2) + gabow.createEdge(824, 325, 48) + gabow.createEdge(1491, 1819, 98) + gabow.createEdge(1813, 751, 78) + gabow.createEdge(1031, 676, 56) + gabow.createEdge(1208, 725, 45) + gabow.createEdge(1281, 1710, 15) + gabow.createEdge(203, 1912, 40) + gabow.createEdge(1278, 1732, 96) + gabow.createEdge(988, 514, 30) + gabow.createEdge(1579, 1895, 7) + gabow.createEdge(1575, 1903, 45) + gabow.createEdge(791, 1611, 9) + gabow.createEdge(1626, 1965, 63) + gabow.createEdge(516, 357, 36) + gabow.createEdge(11, 303, 25) + gabow.createEdge(573, 1969, 35) + gabow.createEdge(320, 715, 79) + gabow.createEdge(813, 1978, 26) + gabow.createEdge(1798, 331, 64) + gabow.createEdge(1636, 600, 33) + gabow.createEdge(1323, 430, 76) + gabow.createEdge(1779, 1090, 10) + gabow.createEdge(242, 594, 43) + gabow.createEdge(1276, 1361, 16) + gabow.createEdge(1239, 1242, 57) + gabow.createEdge(1377, 895, 95) + gabow.createEdge(228, 1203, 47) + gabow.createEdge(1712, 708, 63) + gabow.createEdge(978, 276, 13) + gabow.createEdge(304, 438, 96) + gabow.createEdge(1011, 751, 30) + gabow.createEdge(1871, 1563, 55) + gabow.createEdge(1215, 35, 65) + gabow.createEdge(403, 1848, 73) + gabow.createEdge(1441, 147, 75) + gabow.createEdge(605, 1376, 69) + gabow.createEdge(886, 791, 62) + gabow.createEdge(1140, 1628, 53) + gabow.createEdge(815, 980, 30) + gabow.createEdge(174, 879, 86) + gabow.createEdge(1294, 1547, 43) + gabow.createEdge(356, 1915, 79) + gabow.createEdge(834, 459, 39) + gabow.createEdge(269, 441, 40) + gabow.createEdge(1886, 431, 54) + gabow.createEdge(1063, 586, 87) + gabow.createEdge(1290, 1895, 54) + gabow.createEdge(203, 1974, 42) + gabow.createEdge(318, 1344, 46) + gabow.createEdge(762, 1313, 60) + gabow.createEdge(1931, 1763, 36) + gabow.createEdge(1234, 1972, 46) + gabow.createEdge(1073, 1032, 6) + gabow.createEdge(988, 398, 23) + gabow.createEdge(1851, 1116, 29) + gabow.createEdge(485, 1005, 11) + gabow.createEdge(416, 1265, 41) + gabow.createEdge(1254, 704, 55) + gabow.createEdge(1653, 965, 44) + gabow.createEdge(308, 350, 57) + gabow.createEdge(1001, 454, 68) + gabow.createEdge(858, 156, 9) + gabow.createEdge(27, 1093, 28) + gabow.createEdge(36, 754, 20) + gabow.createEdge(0, 1622, 28) + gabow.createEdge(1832, 1001, 31) + gabow.createEdge(1657, 1379, 91) + gabow.createEdge(1940, 105, 71) + gabow.createEdge(497, 595, 39) + gabow.createEdge(1373, 327, 1) + gabow.createEdge(1595, 656, 71) + gabow.createEdge(369, 593, 68) + gabow.createEdge(1916, 1607, 64) + gabow.createEdge(1440, 787, 90) + gabow.createEdge(326, 605, 31) + gabow.createEdge(286, 701, 31) + gabow.createEdge(6, 1071, 25) + gabow.createEdge(1516, 1636, 56) + gabow.createEdge(373, 1476, 83) + gabow.createEdge(1027, 192, 79) + gabow.createEdge(1855, 1641, 64) + gabow.createEdge(695, 1754, 48) + gabow.createEdge(1179, 328, 61) + gabow.createEdge(1231, 1306, 63) + gabow.createEdge(1344, 1943, 80) + gabow.createEdge(1405, 1580, 55) + gabow.createEdge(1882, 1329, 48) + gabow.createEdge(504, 759, 71) + gabow.createEdge(1885, 1965, 23) + gabow.createEdge(1779, 1637, 25) + gabow.createEdge(833, 1975, 13) + gabow.createEdge(1501, 1852, 63) + gabow.createEdge(254, 1752, 31) + gabow.createEdge(1094, 835, 61) + gabow.createEdge(1944, 1666, 100) + gabow.createEdge(778, 836, 67) + gabow.createEdge(1858, 116, 23) + gabow.createEdge(1881, 294, 68) + gabow.createEdge(1297, 324, 44) + gabow.createEdge(1979, 69, 83) + gabow.createEdge(457, 1595, 5) + gabow.createEdge(1226, 44, 8) + gabow.createEdge(1220, 1194, 11) + gabow.createEdge(1741, 1928, 52) + gabow.createEdge(1297, 47, 5) + gabow.createEdge(1994, 1114, 25) + gabow.createEdge(663, 1997, 73) + gabow.createEdge(1802, 682, 41) + gabow.createEdge(18, 321, 94) + gabow.createEdge(25, 404, 37) + gabow.createEdge(1, 170, 97) + gabow.createEdge(1017, 213, 66) + gabow.createEdge(1150, 271, 37) + gabow.createEdge(205, 1260, 59) + gabow.createEdge(1141, 1410, 34) + gabow.createEdge(1335, 1683, 26) + gabow.createEdge(400, 1014, 54) + gabow.createEdge(758, 1705, 46) + gabow.createEdge(1214, 1529, 85) + gabow.createEdge(300, 339, 11) + gabow.createEdge(1303, 137, 14) + gabow.createEdge(977, 1952, 94) + gabow.createEdge(1260, 139, 41) + gabow.createEdge(1060, 1710, 21) + gabow.createEdge(1627, 576, 72) + gabow.createEdge(1117, 1370, 33) + gabow.createEdge(825, 102, 83) + gabow.createEdge(1006, 315, 77) + gabow.createEdge(587, 388, 60) + gabow.createEdge(828, 527, 96) + gabow.createEdge(1417, 1077, 44) + gabow.createEdge(1191, 627, 96) + gabow.createEdge(1839, 1944, 67) + gabow.createEdge(271, 984, 72) + gabow.createEdge(1505, 306, 30) + gabow.createEdge(1818, 1486, 74) + gabow.createEdge(902, 1657, 76) + gabow.createEdge(1296, 273, 10) + gabow.createEdge(950, 789, 40) + gabow.createEdge(405, 1916, 44) + gabow.createEdge(60, 1817, 68) + gabow.createEdge(675, 1384, 13) + gabow.createEdge(1151, 1399, 2) + gabow.createEdge(1043, 1999, 39) + gabow.createEdge(1654, 326, 94) + gabow.createEdge(1558, 1087, 50) + gabow.createEdge(96, 260, 51) + gabow.createEdge(1139, 1351, 66) + gabow.createEdge(535, 1701, 96) + gabow.createEdge(1343, 127, 34) + gabow.createEdge(884, 896, 50) + gabow.createEdge(118, 731, 50) + gabow.createEdge(1349, 1961, 94) + gabow.createEdge(1574, 974, 33) + gabow.createEdge(38, 1741, 78) + gabow.createEdge(1908, 321, 62) + gabow.createEdge(1160, 871, 75) + gabow.createEdge(1316, 764, 11) + gabow.createEdge(1060, 703, 68) + gabow.createEdge(102, 1561, 14) + gabow.createEdge(639, 1546, 7) + gabow.createEdge(672, 1954, 55) + gabow.createEdge(438, 1657, 37) + gabow.createEdge(1811, 503, 79) + gabow.createEdge(748, 902, 59) + gabow.createEdge(1803, 1736, 4) + gabow.createEdge(1629, 935, 8) + gabow.createEdge(1941, 1439, 10) + gabow.createEdge(1046, 438, 76) + gabow.createEdge(1549, 1349, 84) + gabow.createEdge(1180, 1909, 37) + gabow.createEdge(237, 481, 57) + gabow.createEdge(785, 1661, 50) + gabow.createEdge(1588, 1408, 36) + gabow.createEdge(1429, 544, 87) + gabow.createEdge(1330, 1045, 73) + gabow.createEdge(60, 1797, 82) + gabow.createEdge(325, 516, 16) + gabow.createEdge(1450, 346, 59) + gabow.createEdge(997, 947, 33) + gabow.createEdge(977, 868, 23) + gabow.createEdge(260, 1948, 70) + gabow.createEdge(1299, 460, 63) + gabow.createEdge(1896, 767, 40) + gabow.createEdge(1040, 827, 76) + gabow.createEdge(594, 342, 40) + gabow.createEdge(1567, 961, 34) + gabow.createEdge(1449, 1779, 92) + gabow.createEdge(121, 1898, 48) + gabow.createEdge(1530, 1024, 88) + gabow.createEdge(1123, 237, 19) + gabow.createEdge(936, 996, 46) + gabow.createEdge(498, 1598, 55) + gabow.createEdge(459, 1494, 87) + gabow.createEdge(449, 1335, 25) + gabow.createEdge(1600, 1628, 32) + gabow.createEdge(812, 1151, 28) + gabow.createEdge(1207, 820, 35) + gabow.createEdge(1487, 867, 44) + gabow.createEdge(740, 612, 5) + gabow.createEdge(1552, 322, 37) + gabow.createEdge(1392, 862, 2) + gabow.createEdge(1571, 377, 31) + gabow.createEdge(1679, 1185, 98) + gabow.createEdge(1331, 1646, 40) + gabow.createEdge(1156, 1002, 15) + gabow.createEdge(1331, 1619, 61) + gabow.createEdge(1199, 1270, 60) + gabow.createEdge(902, 684, 76) + gabow.createEdge(1508, 1903, 3) + gabow.createEdge(1553, 1860, 97) + gabow.createEdge(1260, 1657, 2) + gabow.createEdge(1142, 1950, 55) + gabow.createEdge(38, 553, 2) + gabow.createEdge(1156, 307, 18) + gabow.createEdge(1758, 1199, 22) + gabow.createEdge(546, 687, 38) + gabow.createEdge(1985, 386, 91) + gabow.createEdge(1406, 1668, 61) + gabow.createEdge(1170, 593, 69) + gabow.createEdge(410, 260, 11) + gabow.createEdge(1050, 1219, 67) + gabow.createEdge(1908, 1440, 19) + gabow.createEdge(204, 12, 48) + gabow.createEdge(273, 1395, 11) + gabow.createEdge(1609, 1570, 52) + gabow.createEdge(266, 1209, 91) + gabow.createEdge(319, 312, 47) + gabow.createEdge(1137, 248, 70) + gabow.createEdge(1818, 1811, 99) + gabow.createEdge(1171, 1624, 47) + gabow.createEdge(1522, 126, 90) + gabow.createEdge(1876, 1200, 89) + gabow.createEdge(36, 1523, 48) + gabow.createEdge(1748, 1272, 80) + gabow.createEdge(346, 77, 60) + gabow.createEdge(1959, 1243, 71) + gabow.createEdge(324, 1040, 33) + gabow.createEdge(1040, 76, 20) + gabow.createEdge(605, 146, 9) + gabow.createEdge(694, 1877, 36) + gabow.createEdge(306, 1441, 68) + gabow.createEdge(226, 1920, 11) + gabow.createEdge(1282, 799, 32) + gabow.createEdge(170, 1086, 69) + gabow.createEdge(567, 38, 43) + gabow.createEdge(1009, 366, 24) + gabow.createEdge(907, 1856, 15) + gabow.createEdge(1555, 1533, 20) + gabow.createEdge(1481, 1376, 49) + gabow.createEdge(1147, 353, 100) + gabow.createEdge(24, 1330, 61) + gabow.createEdge(153, 267, 12) + gabow.createEdge(921, 260, 37) + gabow.createEdge(57, 1274, 32) + gabow.createEdge(1254, 697, 14) + gabow.createEdge(1562, 560, 20) + gabow.createEdge(1863, 923, 85) + gabow.createEdge(120, 1118, 22) + gabow.createEdge(265, 1632, 59) + gabow.createEdge(1820, 1617, 71) + gabow.createEdge(478, 844, 11) + gabow.createEdge(557, 562, 66) + gabow.createEdge(1506, 988, 50) + gabow.createEdge(1753, 1989, 79) + gabow.createEdge(1408, 1225, 31) + gabow.createEdge(1939, 1252, 48) + gabow.createEdge(418, 1075, 62) + gabow.createEdge(881, 664, 22) + gabow.createEdge(1281, 1701, 27) + gabow.createEdge(1963, 633, 51) + gabow.createEdge(89, 207, 95) + gabow.createEdge(390, 529, 73) + gabow.createEdge(1749, 1034, 7) + gabow.createEdge(391, 1624, 9) + gabow.createEdge(4, 940, 92) + gabow.createEdge(1391, 396, 65) + gabow.createEdge(632, 952, 50) + gabow.createEdge(545, 1207, 32) + gabow.createEdge(720, 1648, 33) + gabow.createEdge(1101, 1342, 38) + gabow.createEdge(1132, 1261, 100) + gabow.createEdge(928, 1412, 38) + gabow.createEdge(1860, 9, 52) + gabow.createEdge(1991, 1749, 33) + gabow.createEdge(161, 1182, 7) + gabow.createEdge(341, 1361, 18) + gabow.createEdge(1555, 649, 43) + gabow.createEdge(134, 1655, 73) + gabow.createEdge(1547, 528, 39) + gabow.createEdge(1760, 1869, 33) + gabow.createEdge(422, 1775, 64) + gabow.createEdge(1513, 980, 96) + gabow.createEdge(1939, 1811, 13) + gabow.createEdge(1315, 1343, 10) + gabow.createEdge(77, 1940, 32) + gabow.createEdge(1568, 809, 43) + gabow.createEdge(797, 859, 76) + gabow.createEdge(1774, 1398, 14) + gabow.createEdge(1799, 82, 96) + gabow.createEdge(204, 790, 27) + gabow.createEdge(8, 395, 19) + gabow.createEdge(1173, 774, 71) + gabow.createEdge(1845, 1601, 61) + gabow.createEdge(1373, 167, 55) + gabow.createEdge(1816, 508, 70) + gabow.createEdge(882, 446, 21) + gabow.createEdge(673, 369, 93) + gabow.createEdge(658, 140, 45) + gabow.createEdge(1977, 1408, 63) + gabow.createEdge(734, 807, 96) + gabow.createEdge(201, 504, 66) + gabow.createEdge(756, 206, 83) + gabow.createEdge(1662, 1048, 96) + gabow.createEdge(1203, 1689, 42) + gabow.createEdge(925, 1189, 98) + gabow.createEdge(789, 1115, 28) + gabow.createEdge(1052, 41, 92) + gabow.createEdge(1032, 1578, 35) + gabow.createEdge(1275, 1072, 8) + gabow.createEdge(421, 635, 4) + gabow.createEdge(1602, 1377, 27) + gabow.createEdge(1931, 389, 12) + gabow.createEdge(1385, 636, 86) + gabow.createEdge(465, 665, 4) + gabow.createEdge(1203, 1476, 96) + gabow.createEdge(1953, 1550, 10) + gabow.createEdge(1046, 1545, 16) + gabow.createEdge(245, 35, 60) + gabow.createEdge(479, 1182, 76) + gabow.createEdge(625, 1023, 65) + gabow.createEdge(1717, 386, 90) + gabow.createEdge(1516, 1894, 77) + gabow.createEdge(482, 1502, 93) + gabow.createEdge(1033, 281, 6) + gabow.createEdge(1969, 470, 68) + gabow.createEdge(676, 1448, 76) + gabow.createEdge(1264, 1631, 1) + gabow.createEdge(417, 99, 80) + gabow.createEdge(395, 657, 4) + gabow.createEdge(1496, 1134, 61) + gabow.createEdge(326, 769, 42) + gabow.createEdge(995, 1011, 63) + gabow.createEdge(278, 1250, 100) + gabow.createEdge(1271, 1742, 83) + gabow.createEdge(558, 1984, 21) + gabow.createEdge(347, 1901, 14) + gabow.createEdge(1396, 826, 81) + gabow.createEdge(1675, 597, 41) + gabow.createEdge(294, 1564, 12) + gabow.createEdge(1783, 1569, 2) + gabow.createEdge(1543, 820, 32) + gabow.createEdge(1334, 59, 88) + gabow.createEdge(56, 495, 95) + gabow.createEdge(1017, 692, 93) + gabow.createEdge(152, 943, 67) + gabow.createEdge(630, 792, 31) + gabow.createEdge(135, 260, 48) + gabow.createEdge(1160, 1962, 10) + gabow.createEdge(1954, 1470, 6) + gabow.createEdge(1760, 1288, 50) + gabow.createEdge(1774, 806, 99) + gabow.createEdge(1780, 917, 58) + gabow.createEdge(1334, 1990, 76) + gabow.createEdge(1041, 1867, 41) + gabow.createEdge(1008, 577, 9) + gabow.createEdge(1229, 532, 77) + gabow.createEdge(605, 1019, 31) + gabow.createEdge(472, 1642, 26) + gabow.createEdge(355, 801, 69) + gabow.createEdge(1788, 602, 65) + gabow.createEdge(1170, 1878, 16) + gabow.createEdge(861, 135, 51) + gabow.createEdge(1853, 705, 73) + gabow.createEdge(1648, 1503, 61) + gabow.createEdge(1810, 1324, 23) + gabow.createEdge(334, 1651, 13) + gabow.createEdge(376, 1390, 57) + gabow.createEdge(725, 1492, 46) + gabow.createEdge(698, 93, 14) + gabow.createEdge(133, 1899, 24) + gabow.createEdge(721, 322, 41) + gabow.createEdge(1171, 821, 37) + gabow.createEdge(1996, 1277, 6) + gabow.createEdge(1905, 1014, 87) + gabow.createEdge(1748, 1071, 18) + gabow.createEdge(499, 153, 65) + gabow.createEdge(374, 828, 25) + gabow.createEdge(1338, 17, 70) + gabow.createEdge(573, 667, 67) + gabow.createEdge(1476, 528, 72) + gabow.createEdge(1154, 910, 69) + gabow.createEdge(531, 1007, 23) + gabow.createEdge(59, 276, 88) + gabow.createEdge(600, 1958, 33) + gabow.createEdge(979, 1066, 48) + gabow.createEdge(1836, 1212, 16) + gabow.createEdge(716, 214, 69) + gabow.createEdge(1844, 66, 49) + gabow.createEdge(181, 1869, 81) + gabow.createEdge(94, 1474, 37) + gabow.createEdge(1982, 1497, 56) + gabow.createEdge(1604, 1838, 85) + gabow.createEdge(823, 938, 70) + gabow.createEdge(1133, 1986, 93) + gabow.createEdge(1057, 527, 71) + gabow.createEdge(890, 1674, 34) + gabow.createEdge(774, 842, 56) + gabow.createEdge(1996, 1044, 98) + gabow.createEdge(596, 468, 13) + gabow.createEdge(552, 23, 67) + gabow.createEdge(1411, 583, 66) + gabow.createEdge(617, 892, 90) + gabow.createEdge(1481, 1052, 57) + gabow.createEdge(306, 1162, 84) + gabow.createEdge(474, 622, 38) + gabow.createEdge(984, 102, 21) + gabow.createEdge(57, 300, 83) + gabow.createEdge(1430, 1327, 85) + gabow.createEdge(1625, 550, 48) + gabow.createEdge(1657, 522, 78) + gabow.createEdge(1013, 1042, 18) + gabow.createEdge(1953, 337, 18) + gabow.createEdge(1078, 1668, 32) + gabow.createEdge(1981, 359, 42) + gabow.createEdge(995, 46, 20) + gabow.createEdge(1228, 3, 53) + gabow.createEdge(98, 1593, 49) + gabow.createEdge(1465, 889, 15) + gabow.createEdge(484, 1747, 53) + gabow.createEdge(573, 617, 76) + gabow.createEdge(382, 1746, 64) + gabow.createEdge(1143, 1298, 71) + gabow.createEdge(1117, 588, 58) + gabow.createEdge(1334, 455, 52) + gabow.createEdge(358, 435, 76) + gabow.createEdge(307, 85, 38) + gabow.createEdge(1544, 96, 14) + gabow.createEdge(203, 1944, 56) + gabow.createEdge(1445, 1224, 11) + gabow.createEdge(1729, 1441, 83) + gabow.createEdge(784, 798, 71) + gabow.createEdge(346, 278, 26) + gabow.createEdge(830, 1863, 36) + gabow.createEdge(1104, 723, 2) + gabow.createEdge(1456, 1311, 16) + gabow.createEdge(1157, 616, 96) + gabow.createEdge(854, 58, 23) + gabow.createEdge(587, 1435, 50) + gabow.createEdge(1675, 1975, 82) + gabow.createEdge(1130, 1090, 58) + gabow.createEdge(1960, 1912, 31) + gabow.createEdge(220, 1636, 73) + gabow.createEdge(650, 1394, 33) + gabow.createEdge(823, 1844, 89) + gabow.createEdge(1726, 829, 40) + gabow.createEdge(1736, 160, 97) + gabow.createEdge(453, 1006, 29) + gabow.createEdge(1983, 1043, 7) + gabow.createEdge(181, 1194, 83) + gabow.createEdge(1256, 415, 24) + gabow.createEdge(1683, 899, 38) + gabow.createEdge(1894, 548, 3) + gabow.createEdge(915, 285, 74) + gabow.createEdge(310, 813, 44) + gabow.createEdge(1063, 1890, 23) + gabow.createEdge(1354, 859, 27) + gabow.createEdge(1729, 594, 37) + gabow.createEdge(968, 770, 75) + gabow.createEdge(1362, 1873, 18) + gabow.createEdge(1147, 1312, 25) + gabow.createEdge(1174, 1161, 24) + gabow.createEdge(1644, 1249, 9) + gabow.createEdge(325, 546, 19) + gabow.createEdge(315, 888, 9) + gabow.createEdge(593, 1328, 97) + gabow.createEdge(1738, 1449, 53) + gabow.createEdge(1908, 1010, 25) + gabow.createEdge(379, 791, 17) + gabow.createEdge(1196, 492, 49) + gabow.createEdge(360, 318, 71) + gabow.createEdge(1697, 160, 83) + gabow.createEdge(197, 326, 38) + gabow.createEdge(1156, 23, 29) + gabow.createEdge(1175, 339, 42) + gabow.createEdge(1123, 586, 51) + gabow.createEdge(1981, 142, 45) + gabow.createEdge(1746, 1652, 89) + gabow.createEdge(1445, 644, 95) + gabow.createEdge(1292, 475, 39) + gabow.createEdge(1576, 168, 24) + gabow.createEdge(567, 54, 32) + gabow.createEdge(1629, 1101, 18) + gabow.createEdge(269, 1748, 59) + gabow.createEdge(635, 506, 12) + gabow.createEdge(1063, 762, 26) + gabow.createEdge(502, 1007, 92) + gabow.createEdge(748, 1166, 83) + gabow.createEdge(96, 1985, 67) + gabow.createEdge(215, 1176, 92) + gabow.createEdge(370, 210, 49) + gabow.createEdge(1648, 1952, 7) + gabow.createEdge(1207, 627, 26) + gabow.createEdge(812, 1280, 22) + gabow.createEdge(1658, 306, 6) + gabow.createEdge(922, 1391, 93) + gabow.createEdge(1152, 1041, 35) + gabow.createEdge(1063, 1586, 14) + gabow.createEdge(735, 1816, 61) + gabow.createEdge(1681, 1665, 3) + gabow.createEdge(819, 265, 35) + gabow.createEdge(913, 1671, 56) + gabow.createEdge(1281, 1384, 86) + gabow.createEdge(377, 1568, 98) + gabow.createEdge(623, 795, 1) + gabow.createEdge(1138, 724, 14) + gabow.createEdge(661, 349, 23) + gabow.createEdge(1054, 858, 34) + gabow.createEdge(1432, 1058, 63) + gabow.createEdge(855, 609, 99) + gabow.createEdge(479, 62, 33) + gabow.createEdge(1743, 1431, 64) + gabow.createEdge(1432, 617, 32) + gabow.createEdge(1579, 190, 45) + gabow.createEdge(391, 265, 91) + gabow.createEdge(1213, 1552, 30) + gabow.createEdge(1952, 162, 81) + gabow.createEdge(869, 981, 33) + gabow.createEdge(1825, 1175, 77) + gabow.createEdge(205, 1862, 55) + gabow.createEdge(565, 693, 80) + gabow.createEdge(1010, 1011, 26) + gabow.createEdge(1252, 1466, 59) + gabow.createEdge(349, 734, 42) + gabow.createEdge(1544, 1967, 43) + gabow.createEdge(1261, 49, 2) + gabow.createEdge(1861, 1528, 39) + gabow.createEdge(1200, 1398, 1) + gabow.createEdge(993, 1990, 98) + gabow.createEdge(1882, 1718, 63) + gabow.createEdge(1006, 599, 34) + gabow.createEdge(882, 1721, 21) + gabow.createEdge(519, 1832, 66) + gabow.createEdge(412, 314, 7) + gabow.createEdge(207, 593, 31) + gabow.createEdge(846, 1574, 39) + gabow.createEdge(1633, 84, 11) + gabow.createEdge(932, 1694, 93) + gabow.createEdge(530, 1218, 67) + gabow.createEdge(1243, 1949, 43) + gabow.createEdge(809, 598, 96) + gabow.createEdge(1417, 132, 4) + gabow.createEdge(121, 657, 9) + gabow.createEdge(1417, 1259, 94) + gabow.createEdge(1554, 1110, 56) + gabow.createEdge(1726, 1799, 41) + gabow.createEdge(793, 1309, 92) + gabow.createEdge(761, 1730, 59) + gabow.createEdge(716, 1586, 10) + gabow.createEdge(1255, 1416, 82) + gabow.createEdge(1886, 1650, 96) + gabow.createEdge(1138, 1017, 99) + gabow.createEdge(1151, 211, 52) + gabow.createEdge(133, 1243, 57) + gabow.createEdge(476, 780, 53) + gabow.createEdge(882, 582, 56) + gabow.createEdge(365, 1659, 62) + gabow.createEdge(1590, 380, 11) + gabow.createEdge(1716, 1286, 88) + gabow.createEdge(222, 936, 90) + gabow.createEdge(996, 640, 77) + gabow.createEdge(409, 636, 32) + gabow.createEdge(639, 920, 53) + gabow.createEdge(687, 504, 99) + gabow.createEdge(1274, 427, 59) + gabow.createEdge(236, 1952, 3) + gabow.createEdge(1557, 1589, 78) + gabow.createEdge(1267, 884, 61) + gabow.createEdge(1260, 567, 36) + gabow.createEdge(402, 649, 39) + gabow.createEdge(1891, 600, 9) + gabow.createEdge(1354, 1407, 20) + gabow.createEdge(1067, 950, 51) + gabow.createEdge(1714, 668, 38) + gabow.createEdge(1603, 688, 96) + gabow.createEdge(391, 1530, 53) + gabow.createEdge(1145, 102, 38) + gabow.createEdge(1136, 683, 30) + gabow.createEdge(1743, 446, 4) + gabow.createEdge(487, 598, 97) + gabow.createEdge(1468, 588, 66) + gabow.createEdge(1057, 1402, 94) + gabow.createEdge(1302, 548, 61) + gabow.createEdge(1064, 987, 96) + gabow.createEdge(1853, 1786, 38) + gabow.createEdge(83, 267, 68) + gabow.createEdge(1232, 145, 31) + gabow.createEdge(385, 253, 9) + gabow.createEdge(1335, 1846, 39) + gabow.createEdge(620, 272, 96) + gabow.createEdge(121, 1646, 24) + gabow.createEdge(1201, 517, 80) + gabow.createEdge(434, 834, 20) + gabow.createEdge(1429, 463, 49) + gabow.createEdge(81, 1062, 83) + gabow.createEdge(593, 351, 47) + gabow.createEdge(775, 1010, 6) + gabow.createEdge(1590, 170, 88) + gabow.createEdge(28, 861, 84) + gabow.createEdge(516, 1823, 24) + gabow.createEdge(1840, 1839, 94) + gabow.createEdge(883, 227, 65) + gabow.createEdge(361, 1350, 33) + gabow.createEdge(1954, 1944, 91) + gabow.createEdge(1044, 1740, 48) + gabow.createEdge(965, 1709, 9) + gabow.createEdge(336, 1766, 88) + gabow.createEdge(276, 1914, 50) + gabow.createEdge(1758, 686, 17) + gabow.createEdge(680, 906, 19) + gabow.createEdge(491, 189, 81) + gabow.createEdge(241, 1925, 49) + gabow.createEdge(1056, 1449, 30) + gabow.createEdge(301, 340, 47) + gabow.createEdge(1214, 1995, 95) + gabow.createEdge(692, 837, 76) + gabow.createEdge(1479, 445, 63) + gabow.createEdge(360, 1377, 86) + gabow.createEdge(342, 453, 42) + gabow.createEdge(1487, 1188, 1) + gabow.createEdge(1038, 21, 47) + gabow.createEdge(268, 1479, 66) + gabow.createEdge(1850, 380, 94) + gabow.createEdge(223, 1316, 1) + gabow.createEdge(156, 564, 15) + gabow.createEdge(1894, 1088, 57) + gabow.createEdge(1149, 1177, 2) + + let root = 0 + + let answer = gabow.run(root: root) + XCTAssertEqual(answer, 53213) + + } + + func testReconstruct() { + let verticesCount = 7 + let gabow = Gabow(verticesCount: verticesCount) + + // Define edges of the graph + + + gabow.createEdge(from: 0, to: 1, weight: 12) + gabow.createEdge(from: 0, to: 2, weight: 29) + gabow.createEdge(from: 0, to: 3, weight: 50) + gabow.createEdge(from: 3, to: 4, weight: 46) + gabow.createEdge(from: 1, to: 5, weight: 19) + gabow.createEdge(from: 0, to: 6, weight: 28) + gabow.createEdge(from: 5, to: 3, weight: 43) + gabow.createEdge(from: 3, to: 4, weight: 98) + gabow.createEdge(from: 5, to: 2, weight: 72) + gabow.createEdge(from: 0, to: 3, weight: 78) + gabow.createEdge(from: 3, to: 0, weight: 25) + gabow.createEdge(from: 4, to: 3, weight: 24) + gabow.createEdge(from: 3, to: 1, weight: 2) + gabow.createEdge(from: 6, to: 0, weight: 4) + gabow.createEdge(from: 2, to: 3, weight: 98) + gabow.createEdge(from: 5, to: 6, weight: 52) + gabow.createEdge(from: 5, to: 3, weight: 75) + gabow.createEdge(from: 0, to: 2, weight: 58) + gabow.createEdge(from: 3, to: 1, weight: 77) + gabow.createEdge(from: 1, to: 5, weight: 84) + gabow.createEdge(from: 5, to: 3, weight: 89) + gabow.createEdge(from: 6, to: 0, weight: 68) + gabow.createEdge(from: 4, to: 0, weight: 52) + gabow.createEdge(from: 6, to: 3, weight: 40) + gabow.createEdge(from: 4, to: 1, weight: 12) + gabow.createEdge(from: 4, to: 3, weight: 64) + + let root = 0 + + let _ = gabow.run(root: root) + let msaEdges = gabow.reconstruct(root: root) + // Verify the number of edges in the result + XCTAssertEqual(msaEdges.count, verticesCount - 1) + + // Further checks can be made to verify the exact edges if expected results are known + } + + func testGenerateRandomGraph() throws { + let numNodes = 100 + + var edges: [(from: Int, to: Int, weight: Int)] = [] + + // Create a spanning tree to ensure all nodes are connected + for i in 1..create_edge(\(edge.from), \(edge.to), \(edge.weight));") + } + + print("Swift") + // Output the edges + for edge in edges { + print("gabow.createEdge(from: \(edge.from), to: \(edge.to), weight: \(edge.weight))") + } + } + + + func testMSAResult() throws { + let originalGraph = WeightedGraph() + + for component in ["topbar", "secondary topbar", "gallery", "toolbar", "captions"] { + let _ = originalGraph.addVertex(component) + } + + originalGraph.addEdge(fromIndex: 0, toIndex: 1, weight: 1.2, directed: true) + originalGraph.addEdge(fromIndex: 0, toIndex: 2, weight: 0.5, directed: true) + originalGraph.addEdge(fromIndex: 0, toIndex: 3, weight: 1.1, directed: true) + originalGraph.addEdge(fromIndex: 0, toIndex: 4, weight: 1.3, directed: true) + + originalGraph.addEdge(fromIndex: 1, toIndex: 0, weight: 1.1, directed: true) + originalGraph.addEdge(fromIndex: 1, toIndex: 2, weight: 0.5, directed: true) + originalGraph.addEdge(fromIndex: 1, toIndex: 3, weight: 1.5, directed: true) + originalGraph.addEdge(fromIndex: 1, toIndex: 4, weight: 2.2, directed: true) + + originalGraph.addEdge(fromIndex: 3, toIndex: 2, weight: 1.0, directed: true) + originalGraph.addEdge(fromIndex: 3, toIndex: 4, weight: 1.0, directed: true) + + let msa = try originalGraph.msa(root: 3) + + // XCTAssertEqual(msa.count, originalGraph.vertexCount - 1) + + msa.forEach { edge in + print("\(originalGraph.vertices[edge.u]) --\(edge.weight)--> \(originalGraph.vertices[edge.v])") + } + + let msaValue = msa.reduce(0) { partialResult, nextEdge in + return partialResult + nextEdge.weight + } + + print("MSA \(msaValue)") + } + + + func testMSAFromForest() throws { + let dependencyGraph = WeightedGraph() + + // MARK: FOREST 1 + let selectACharm = dependencyGraph.addVertex("Select a charm topbar") + let dbLoader = dependencyGraph.addVertex("db loader") + let viewModel = dependencyGraph.addVertex("Memory charms viewModel") + + dependencyGraph.addEdge(.init(u: selectACharm, v: dbLoader, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: dbLoader, v: selectACharm, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: dbLoader, v: viewModel, directed: true, weight: 1.0), directed: true) + + // MARK: FOREST 2 + let messHallBenchBinoculars = dependencyGraph.addVertex("mess.hall.bench.binoculars") + let recreationalAreaBinoculars = dependencyGraph.addVertex("recreational.area.crate.binoculars") + + let recreationalAreaBinocularsBottomBar = dependencyGraph.addVertex("recreational.area.crate.binoculars bottom bar") + let messHallBinocularsBottomBar = dependencyGraph.addVertex("mess.hall.bench.binoculars bottom bar") + + let recreationalAreaBinocularsOutline = dependencyGraph.addVertex("recreational.area.crate.binoculars outline") + let recreationalAreaBinocularsBoundingCircle = dependencyGraph.addVertex("recreational.area.crate.binoculars bounding circle") + + let messHallBinocularsOutline = dependencyGraph.addVertex("mess.hall.bench.binoculars outline") + let messHallBinocularsBoundingCircle = dependencyGraph.addVertex("mess.hall.bench.binoculars bounding circle") + + // "mess.hall.bench.binoculars bottom bar" -> { "recreational.area.crate.binoculars outline", "recreational.area.crate.binoculars bounding circle", "mess.hall.bench.binoculars bounding circle" }; + dependencyGraph.addEdge(.init(u: messHallBinocularsBottomBar, v: recreationalAreaBinocularsOutline, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: messHallBinocularsBottomBar, v: recreationalAreaBinocularsBoundingCircle, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: messHallBinocularsBottomBar, v: messHallBinocularsBoundingCircle, directed: true, weight: 1.0), directed: true) + + //"mess.hall.bench.binoculars" -> { "recreational.area.crate.binoculars outline", "recreational.area.crate.binoculars bounding circle", "mess.hall.bench.binoculars bounding circle" }; + dependencyGraph.addEdge(.init(u: messHallBenchBinoculars, v: recreationalAreaBinocularsOutline, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: messHallBenchBinoculars, v: recreationalAreaBinocularsBoundingCircle, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: messHallBenchBinoculars, v: messHallBinocularsBoundingCircle, directed: true, weight: 1.0), directed: true) + + //"recreational.area.crate.binoculars bottom bar" -> { "recreational.area.crate.binoculars outline", "recreational.area.crate.binoculars bounding circle", "mess.hall.bench.binoculars bounding circle" }; + dependencyGraph.addEdge(.init(u: recreationalAreaBinocularsBottomBar, v: recreationalAreaBinocularsOutline, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: recreationalAreaBinocularsBottomBar, v: recreationalAreaBinocularsBoundingCircle, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: recreationalAreaBinocularsBottomBar, v: messHallBinocularsBoundingCircle, directed: true, weight: 1.0), directed: true) + + //"recreational.area.crate.binoculars" -> { "recreational.area.crate.binoculars outline", "recreational.area.crate.binoculars bounding circle", "mess.hall.bench.binoculars bounding circle" }; + dependencyGraph.addEdge(.init(u: recreationalAreaBinoculars, v: recreationalAreaBinocularsOutline, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: recreationalAreaBinoculars, v: recreationalAreaBinocularsBoundingCircle, directed: true, weight: 1.0), directed: true) + dependencyGraph.addEdge(.init(u: recreationalAreaBinoculars, v: messHallBinocularsBoundingCircle, directed: true, weight: 1.0), directed: true) + + let msa = try? dependencyGraph.msa(root: selectACharm) + + var allMSAVertices: Set = .init() + + msa?.forEach { edge in + allMSAVertices.insert(dependencyGraph[edge.u]) + allMSAVertices.insert(dependencyGraph[edge.v]) + } + + let msaGraph = WeightedGraph(vertices: Array(allMSAVertices)) + msa?.forEach { msaEdge in + msaGraph.addEdge(from: dependencyGraph[msaEdge.u], to: dependencyGraph[msaEdge.v], weight: msaEdge.weight, directed: msaEdge.directed) + } + + msaGraph.edgeList().forEach { edge in + print("\(msaGraph[edge.u]) --> \(msaGraph[edge.v])") + } + + assert(msaGraph.isDAG) + + print("----------------------") + msa?.forEach { edge in + print("\(dependencyGraph[edge.u]) -> \(dependencyGraph[edge.v])") + } + } +} +