import java.io.File

fun main(args: Array<String>) {
    day9part2()
}

fun day9part1() {
    var coordinates = mutableListOf<List<Int>>()
    val input = File("day9input.txt").bufferedReader().readLines()
    input.mapIndexed { index, line ->
        line.split("")
            .filterNot { it == "" }
            .map { it.toInt() }
            .let { coordinates.add(index, it) }
    }
    findLocalMinimas(coordinates).map { coordinates[it.first][it.second]+1 }.sum().also { println(it) }
}

fun day9part2() {
    var coordinates = mutableListOf<List<Int>>()
    val input = File("day9input.txt").bufferedReader().readLines()
    input.mapIndexed { index, line ->
        line.split("")
            .filterNot { it == "" }
            .map { it.toInt() }
            .let { coordinates.add(index, it) }
    }
    val limits = findBasinLimits(coordinates)
    println("Total size: ${coordinates.size * coordinates.first().size}")
    println("Nines: ${limits.size}")
    val score = clusterBaisins(coordinates, limits)
        .map { it.value.size }
        .sorted()
        .also { "Non-nines: ${println(it.sum())}" }
        .takeLast(3)
        .reduce { acc: Int, i: Int ->
            acc * i
        }
    println("Score $score")
}

fun clusterBaisins(map: MutableList<List<Int>>, basinLimits: Set<Pair<Int,Int>>): Map<Int, Set<Pair<Int,Int>>> {
    var nextCluster = 0
    val clusterMap = mutableMapOf<Int, Set<Pair<Int,Int>>>()
    val clusterIndex = mutableMapOf<Pair<Int,Int>, Int>()
    map.forEachIndexed { rowIndex, row ->
        row.forEachIndexed { index, point ->
            if (point == 9) return@forEachIndexed
            val columnNeighbours = when (rowIndex) {
                0 -> {
                    listOf(rowIndex+1 to index to clusterIndex.getOrDefault(rowIndex+1 to index, -1))
                }
                map.size - 1 -> {
                    listOf(rowIndex-1 to index to clusterIndex.getOrDefault(rowIndex-1 to index, -1))
                }
                else -> {
                    listOf(
                        rowIndex-1 to index to clusterIndex.getOrDefault(rowIndex-1 to index, -1),
                        rowIndex+1 to index to clusterIndex.getOrDefault(rowIndex+1 to index, -1)
                    )
                }
            }
            val rowNeighbours = when(index) {
                0 -> {
                    listOf(rowIndex to index + 1 to clusterIndex.getOrDefault(rowIndex to index + 1, -1))
                }
                row.size - 1 -> {
                    listOf(rowIndex to index - 1 to clusterIndex.getOrDefault(rowIndex to index - 1, -1))
                }
                else -> {
                    listOf(
                        rowIndex to index-1 to clusterIndex.getOrDefault(rowIndex to index-1, -1),
                        rowIndex to index+1 to clusterIndex.getOrDefault(rowIndex to index+1, -1)
                    )
                }
            }
            val neighbours = columnNeighbours + rowNeighbours
            if (neighbours.none { it.second != -1 }) {
                val neighbourhood = (neighbours.map { it.first } + (rowIndex to index))
                    .filter { map[it.first][it.second] != 9 }
                    .toSet()
                clusterMap[nextCluster] = neighbourhood
                neighbourhood.forEach {
                    clusterIndex[it] = nextCluster
                }
                nextCluster = nextCluster.inc()
            }
            else {
                val neighbourhood = (neighbours.map { it.first } + (rowIndex to index))
                    .filter { map[it.first][it.second] != 9 }
                    .toMutableSet()
                var cluster = -1
                neighbourhood.map {
                    if (cluster == -1) {
                        cluster = clusterIndex.getOrDefault(it, -1)
                    }
                    else {
                        val neighbourIndex = clusterIndex[it]
                        if (neighbourIndex != null && cluster != neighbourIndex) {
                            println("Cluster: $cluster, neighbour: ${neighbourIndex}, it: $it")
                            val newCluster = minOf(cluster, neighbourIndex)
                            val neighbourhood1 = clusterMap.getOrDefault(neighbourIndex, emptySet())
                            clusterMap.remove(neighbourIndex)
                            val neighbourhood2 = clusterMap.getOrDefault(cluster, emptySet())
                            clusterMap.remove(cluster)
                            val newNeighbourhood = neighbourhood1 + neighbourhood2
                            newNeighbourhood.forEach { clusterIndex[it] = newCluster }
                            clusterMap[newCluster] = newNeighbourhood
                        }
                    }
                }
                neighbourhood.forEach {
                    clusterIndex[it] = cluster
                }
                clusterMap[cluster]?.let { neighbourhood.addAll(it) }
                clusterMap[cluster] = neighbourhood
            }
        }
    }
    return clusterMap
}

fun findBasinLimits(map: MutableList<List<Int>>): Set<Pair<Int,Int>> {
    val limits = mutableSetOf<Pair<Int,Int>>()
    map.forEachIndexed { rowIndex, row ->
        row.forEachIndexed { index, point ->
            if (point == 9) limits.add(rowIndex to index)
        }
    }
    return limits
}

fun findLocalMinimas(map: MutableList<List<Int>>): List<Pair<Int,Int>> {
    val minimas = mutableListOf<Pair<Int,Int>>()
    map.forEachIndexed { rowIndex, row ->
        row.forEachIndexed { index, point ->
            val possibleMinima = when (index) {
                0 -> {
                    point < row[index+1]
                }
                row.size-1 -> {
                    point < row[index-1]
                }
                else -> {
                    (point < row[index-1]) && (point < row[index+1])
                }
            }
            //println("Row $rowIndex, column $index: $possibleMinima")
            if (!possibleMinima) {
                return@forEachIndexed
            }
            val localMinima = when (rowIndex) {
                0 -> {
                    point < map[rowIndex+1][index]
                }
                map.size-1 -> {
                    point < map[rowIndex-1][index]
                }
                else -> {
                    (point < map[rowIndex-1][index]) && (point < map[rowIndex+1][index])
                }
            }
            if (localMinima) {
                minimas.add(rowIndex to index)
            }
        }
    }
    return minimas
}

Compiled from "day9.kt"
public final class Day9Kt {
  public static final void main(java.lang.String[]);
    Code:
       0: aload_0
       1: ldc           #9                  // String args
       3: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: invokestatic  #19                 // Method day9part2:()V
       9: return

  public static final void day9part1();
    Code:
       0: aconst_null
       1: astore_0
       2: new           #23                 // class java/util/ArrayList
       5: dup
       6: invokespecial #26                 // Method java/util/ArrayList."<init>":()V
       9: checkcast     #28                 // class java/util/List
      12: astore_0
      13: new           #30                 // class java/io/File
      16: dup
      17: ldc           #32                 // String day9input.txt
      19: invokespecial #35                 // Method java/io/File."<init>":(Ljava/lang/String;)V
      22: astore_2
      23: getstatic     #41                 // Field kotlin/text/Charsets.UTF_8:Ljava/nio/charset/Charset;
      26: astore_3
      27: sipush        8192
      30: istore        4
      32: aload_2
      33: astore        5
      35: new           #43                 // class java/io/InputStreamReader
      38: dup
      39: new           #45                 // class java/io/FileInputStream
      42: dup
      43: aload         5
      45: invokespecial #48                 // Method java/io/FileInputStream."<init>":(Ljava/io/File;)V
      48: checkcast     #50                 // class java/io/InputStream
      51: aload_3
      52: invokespecial #53                 // Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
      55: checkcast     #55                 // class java/io/Reader
      58: astore        5
      60: aload         5
      62: instanceof    #57                 // class java/io/BufferedReader
      65: ifeq          76
      68: aload         5
      70: checkcast     #57                 // class java/io/BufferedReader
      73: goto          87
      76: new           #57                 // class java/io/BufferedReader
      79: dup
      80: aload         5
      82: iload         4
      84: invokespecial #60                 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;I)V
      87: checkcast     #55                 // class java/io/Reader
      90: invokestatic  #66                 // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
      93: astore_1
      94: aload_1
      95: checkcast     #68                 // class java/lang/Iterable
      98: astore_2
      99: iconst_0
     100: istore_3
     101: aload_2
     102: astore        4
     104: new           #23                 // class java/util/ArrayList
     107: dup
     108: aload_2
     109: bipush        10
     111: invokestatic  #74                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     114: invokespecial #77                 // Method java/util/ArrayList."<init>":(I)V
     117: checkcast     #79                 // class java/util/Collection
     120: astore        5
     122: iconst_0
     123: istore        6
     125: iconst_0
     126: istore        7
     128: aload         4
     130: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     135: astore        8
     137: aload         8
     139: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     144: ifeq          446
     147: aload         8
     149: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     154: astore        9
     156: aload         5
     158: iload         7
     160: iinc          7, 1
     163: istore        10
     165: iload         10
     167: ifge          173
     170: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     173: iload         10
     175: aload         9
     177: checkcast     #98                 // class java/lang/String
     180: astore        11
     182: istore        12
     184: astore        24
     186: iconst_0
     187: istore        13
     189: aload         11
     191: checkcast     #100                // class java/lang/CharSequence
     194: iconst_1
     195: anewarray     #98                 // class java/lang/String
     198: astore        14
     200: aload         14
     202: iconst_0
     203: ldc           #102                // String
     205: aastore
     206: aload         14
     208: iconst_0
     209: iconst_0
     210: bipush        6
     212: aconst_null
     213: invokestatic  #108                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     216: checkcast     #68                 // class java/lang/Iterable
     219: astore        14
     221: nop
     222: iconst_0
     223: istore        15
     225: aload         14
     227: astore        16
     229: new           #23                 // class java/util/ArrayList
     232: dup
     233: invokespecial #26                 // Method java/util/ArrayList."<init>":()V
     236: checkcast     #79                 // class java/util/Collection
     239: astore        17
     241: iconst_0
     242: istore        18
     244: aload         16
     246: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     251: astore        19
     253: aload         19
     255: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     260: ifeq          305
     263: aload         19
     265: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     270: astore        20
     272: aload         20
     274: checkcast     #98                 // class java/lang/String
     277: astore        21
     279: iconst_0
     280: istore        22
     282: aload         21
     284: ldc           #102                // String
     286: invokestatic  #112                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     289: ifne          253
     292: aload         17
     294: aload         20
     296: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     301: pop
     302: goto          253
     305: aload         17
     307: checkcast     #28                 // class java/util/List
     310: nop
     311: checkcast     #68                 // class java/lang/Iterable
     314: astore        14
     316: nop
     317: iconst_0
     318: istore        15
     320: aload         14
     322: astore        16
     324: new           #23                 // class java/util/ArrayList
     327: dup
     328: aload         14
     330: bipush        10
     332: invokestatic  #74                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     335: invokespecial #77                 // Method java/util/ArrayList."<init>":(I)V
     338: checkcast     #79                 // class java/util/Collection
     341: astore        17
     343: iconst_0
     344: istore        18
     346: aload         16
     348: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     353: astore        19
     355: aload         19
     357: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     362: ifeq          409
     365: aload         19
     367: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     372: astore        20
     374: aload         17
     376: aload         20
     378: checkcast     #98                 // class java/lang/String
     381: astore        21
     383: astore        23
     385: iconst_0
     386: istore        22
     388: aload         21
     390: invokestatic  #122                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     393: nop
     394: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     397: aload         23
     399: swap
     400: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     405: pop
     406: goto          355
     409: aload         17
     411: checkcast     #28                 // class java/util/List
     414: nop
     415: astore        15
     417: iconst_0
     418: istore        16
     420: aload_0
     421: iload         12
     423: aload         15
     425: invokeinterface #129,  3          // InterfaceMethod java/util/List.add:(ILjava/lang/Object;)V
     430: nop
     431: nop
     432: aload         24
     434: getstatic     #135                // Field kotlin/Unit.INSTANCE:Lkotlin/Unit;
     437: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     442: pop
     443: goto          137
     446: aload         5
     448: checkcast     #28                 // class java/util/List
     451: nop
     452: pop
     453: aload_0
     454: invokestatic  #139                // Method findLocalMinimas:(Ljava/util/List;)Ljava/util/List;
     457: checkcast     #68                 // class java/lang/Iterable
     460: astore_2
     461: iconst_0
     462: istore_3
     463: aload_2
     464: astore        4
     466: new           #23                 // class java/util/ArrayList
     469: dup
     470: aload_2
     471: bipush        10
     473: invokestatic  #74                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     476: invokespecial #77                 // Method java/util/ArrayList."<init>":(I)V
     479: checkcast     #79                 // class java/util/Collection
     482: astore        5
     484: iconst_0
     485: istore        6
     487: aload         4
     489: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     494: astore        7
     496: aload         7
     498: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     503: ifeq          588
     506: aload         7
     508: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     513: astore        8
     515: aload         5
     517: aload         8
     519: checkcast     #141                // class kotlin/Pair
     522: astore        9
     524: astore        24
     526: iconst_0
     527: istore        10
     529: aload_0
     530: aload         9
     532: invokevirtual #144                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     535: checkcast     #146                // class java/lang/Number
     538: invokevirtual #150                // Method java/lang/Number.intValue:()I
     541: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     546: checkcast     #28                 // class java/util/List
     549: aload         9
     551: invokevirtual #157                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     554: checkcast     #146                // class java/lang/Number
     557: invokevirtual #150                // Method java/lang/Number.intValue:()I
     560: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     565: checkcast     #146                // class java/lang/Number
     568: invokevirtual #150                // Method java/lang/Number.intValue:()I
     571: iconst_1
     572: iadd
     573: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     576: aload         24
     578: swap
     579: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     584: pop
     585: goto          496
     588: aload         5
     590: checkcast     #28                 // class java/util/List
     593: nop
     594: checkcast     #68                 // class java/lang/Iterable
     597: invokestatic  #161                // Method kotlin/collections/CollectionsKt.sumOfInt:(Ljava/lang/Iterable;)I
     600: istore_2
     601: iload_2
     602: istore_3
     603: iconst_0
     604: istore        4
     606: getstatic     #167                // Field java/lang/System.out:Ljava/io/PrintStream;
     609: iload_3
     610: invokevirtual #172                // Method java/io/PrintStream.println:(I)V
     613: nop
     614: nop
     615: return

  public static final void day9part2();
    Code:
       0: aconst_null
       1: astore_0
       2: new           #23                 // class java/util/ArrayList
       5: dup
       6: invokespecial #26                 // Method java/util/ArrayList."<init>":()V
       9: checkcast     #28                 // class java/util/List
      12: astore_0
      13: new           #30                 // class java/io/File
      16: dup
      17: ldc           #32                 // String day9input.txt
      19: invokespecial #35                 // Method java/io/File."<init>":(Ljava/lang/String;)V
      22: astore_2
      23: getstatic     #41                 // Field kotlin/text/Charsets.UTF_8:Ljava/nio/charset/Charset;
      26: astore_3
      27: sipush        8192
      30: istore        4
      32: aload_2
      33: astore        5
      35: new           #43                 // class java/io/InputStreamReader
      38: dup
      39: new           #45                 // class java/io/FileInputStream
      42: dup
      43: aload         5
      45: invokespecial #48                 // Method java/io/FileInputStream."<init>":(Ljava/io/File;)V
      48: checkcast     #50                 // class java/io/InputStream
      51: aload_3
      52: invokespecial #53                 // Method java/io/InputStreamReader."<init>":(Ljava/io/InputStream;Ljava/nio/charset/Charset;)V
      55: checkcast     #55                 // class java/io/Reader
      58: astore        5
      60: aload         5
      62: instanceof    #57                 // class java/io/BufferedReader
      65: ifeq          76
      68: aload         5
      70: checkcast     #57                 // class java/io/BufferedReader
      73: goto          87
      76: new           #57                 // class java/io/BufferedReader
      79: dup
      80: aload         5
      82: iload         4
      84: invokespecial #60                 // Method java/io/BufferedReader."<init>":(Ljava/io/Reader;I)V
      87: checkcast     #55                 // class java/io/Reader
      90: invokestatic  #66                 // Method kotlin/io/TextStreamsKt.readLines:(Ljava/io/Reader;)Ljava/util/List;
      93: astore_1
      94: aload_1
      95: checkcast     #68                 // class java/lang/Iterable
      98: astore_2
      99: iconst_0
     100: istore_3
     101: aload_2
     102: astore        4
     104: new           #23                 // class java/util/ArrayList
     107: dup
     108: aload_2
     109: bipush        10
     111: invokestatic  #74                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     114: invokespecial #77                 // Method java/util/ArrayList."<init>":(I)V
     117: checkcast     #79                 // class java/util/Collection
     120: astore        5
     122: iconst_0
     123: istore        6
     125: iconst_0
     126: istore        7
     128: aload         4
     130: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     135: astore        8
     137: aload         8
     139: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     144: ifeq          446
     147: aload         8
     149: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     154: astore        9
     156: aload         5
     158: iload         7
     160: iinc          7, 1
     163: istore        10
     165: iload         10
     167: ifge          173
     170: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     173: iload         10
     175: aload         9
     177: checkcast     #98                 // class java/lang/String
     180: astore        11
     182: istore        12
     184: astore        24
     186: iconst_0
     187: istore        13
     189: aload         11
     191: checkcast     #100                // class java/lang/CharSequence
     194: iconst_1
     195: anewarray     #98                 // class java/lang/String
     198: astore        14
     200: aload         14
     202: iconst_0
     203: ldc           #102                // String
     205: aastore
     206: aload         14
     208: iconst_0
     209: iconst_0
     210: bipush        6
     212: aconst_null
     213: invokestatic  #108                // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[Ljava/lang/String;ZIILjava/lang/Object;)Ljava/util/List;
     216: checkcast     #68                 // class java/lang/Iterable
     219: astore        14
     221: nop
     222: iconst_0
     223: istore        15
     225: aload         14
     227: astore        16
     229: new           #23                 // class java/util/ArrayList
     232: dup
     233: invokespecial #26                 // Method java/util/ArrayList."<init>":()V
     236: checkcast     #79                 // class java/util/Collection
     239: astore        17
     241: iconst_0
     242: istore        18
     244: aload         16
     246: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     251: astore        19
     253: aload         19
     255: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     260: ifeq          305
     263: aload         19
     265: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     270: astore        20
     272: aload         20
     274: checkcast     #98                 // class java/lang/String
     277: astore        21
     279: iconst_0
     280: istore        22
     282: aload         21
     284: ldc           #102                // String
     286: invokestatic  #112                // Method kotlin/jvm/internal/Intrinsics.areEqual:(Ljava/lang/Object;Ljava/lang/Object;)Z
     289: ifne          253
     292: aload         17
     294: aload         20
     296: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     301: pop
     302: goto          253
     305: aload         17
     307: checkcast     #28                 // class java/util/List
     310: nop
     311: checkcast     #68                 // class java/lang/Iterable
     314: astore        14
     316: nop
     317: iconst_0
     318: istore        15
     320: aload         14
     322: astore        16
     324: new           #23                 // class java/util/ArrayList
     327: dup
     328: aload         14
     330: bipush        10
     332: invokestatic  #74                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     335: invokespecial #77                 // Method java/util/ArrayList."<init>":(I)V
     338: checkcast     #79                 // class java/util/Collection
     341: astore        17
     343: iconst_0
     344: istore        18
     346: aload         16
     348: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     353: astore        19
     355: aload         19
     357: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     362: ifeq          409
     365: aload         19
     367: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     372: astore        20
     374: aload         17
     376: aload         20
     378: checkcast     #98                 // class java/lang/String
     381: astore        21
     383: astore        23
     385: iconst_0
     386: istore        22
     388: aload         21
     390: invokestatic  #122                // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     393: nop
     394: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     397: aload         23
     399: swap
     400: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     405: pop
     406: goto          355
     409: aload         17
     411: checkcast     #28                 // class java/util/List
     414: nop
     415: astore        15
     417: iconst_0
     418: istore        16
     420: aload_0
     421: iload         12
     423: aload         15
     425: invokeinterface #129,  3          // InterfaceMethod java/util/List.add:(ILjava/lang/Object;)V
     430: nop
     431: nop
     432: aload         24
     434: getstatic     #135                // Field kotlin/Unit.INSTANCE:Lkotlin/Unit;
     437: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     442: pop
     443: goto          137
     446: aload         5
     448: checkcast     #28                 // class java/util/List
     451: nop
     452: pop
     453: aload_0
     454: invokestatic  #212                // Method findBasinLimits:(Ljava/util/List;)Ljava/util/Set;
     457: astore_2
     458: new           #214                // class java/lang/StringBuilder
     461: dup
     462: invokespecial #215                // Method java/lang/StringBuilder."<init>":()V
     465: ldc           #217                // String Total size:
     467: invokevirtual #221                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     470: aload_0
     471: invokeinterface #224,  1          // InterfaceMethod java/util/List.size:()I
     476: aload_0
     477: invokestatic  #228                // Method kotlin/collections/CollectionsKt.first:(Ljava/util/List;)Ljava/lang/Object;
     480: checkcast     #28                 // class java/util/List
     483: invokeinterface #224,  1          // InterfaceMethod java/util/List.size:()I
     488: imul
     489: invokevirtual #231                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     492: invokevirtual #235                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     495: getstatic     #167                // Field java/lang/System.out:Ljava/io/PrintStream;
     498: swap
     499: invokevirtual #238                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     502: new           #214                // class java/lang/StringBuilder
     505: dup
     506: invokespecial #215                // Method java/lang/StringBuilder."<init>":()V
     509: ldc           #240                // String Nines:
     511: invokevirtual #221                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     514: aload_2
     515: invokeinterface #243,  1          // InterfaceMethod java/util/Set.size:()I
     520: invokevirtual #231                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     523: invokevirtual #235                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     526: getstatic     #167                // Field java/lang/System.out:Ljava/io/PrintStream;
     529: swap
     530: invokevirtual #238                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     533: aload_0
     534: aload_2
     535: invokestatic  #247                // Method clusterBaisins:(Ljava/util/List;Ljava/util/Set;)Ljava/util/Map;
     538: astore        4
     540: nop
     541: iconst_0
     542: istore        5
     544: aload         4
     546: astore        6
     548: new           #23                 // class java/util/ArrayList
     551: dup
     552: aload         4
     554: invokeinterface #250,  1          // InterfaceMethod java/util/Map.size:()I
     559: invokespecial #77                 // Method java/util/ArrayList."<init>":(I)V
     562: checkcast     #79                 // class java/util/Collection
     565: astore        7
     567: iconst_0
     568: istore        8
     570: aload         6
     572: invokeinterface #254,  1          // InterfaceMethod java/util/Map.entrySet:()Ljava/util/Set;
     577: invokeinterface #255,  1          // InterfaceMethod java/util/Set.iterator:()Ljava/util/Iterator;
     582: astore        9
     584: aload         9
     586: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     591: ifeq          647
     594: aload         9
     596: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     601: checkcast     #257                // class java/util/Map$Entry
     604: astore        10
     606: aload         7
     608: aload         10
     610: astore        11
     612: astore        24
     614: iconst_0
     615: istore        12
     617: aload         11
     619: invokeinterface #260,  1          // InterfaceMethod java/util/Map$Entry.getValue:()Ljava/lang/Object;
     624: checkcast     #242                // class java/util/Set
     627: invokeinterface #243,  1          // InterfaceMethod java/util/Set.size:()I
     632: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     635: aload         24
     637: swap
     638: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     643: pop
     644: goto          584
     647: aload         7
     649: checkcast     #28                 // class java/util/List
     652: nop
     653: checkcast     #68                 // class java/lang/Iterable
     656: invokestatic  #264                // Method kotlin/collections/CollectionsKt.sorted:(Ljava/lang/Iterable;)Ljava/util/List;
     659: astore        4
     661: aload         4
     663: astore        5
     665: iconst_0
     666: istore        6
     668: new           #214                // class java/lang/StringBuilder
     671: dup
     672: invokespecial #215                // Method java/lang/StringBuilder."<init>":()V
     675: ldc_w         #266                // String Non-nines:
     678: invokevirtual #221                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     681: aload         5
     683: checkcast     #68                 // class java/lang/Iterable
     686: invokestatic  #161                // Method kotlin/collections/CollectionsKt.sumOfInt:(Ljava/lang/Iterable;)I
     689: istore        7
     691: getstatic     #167                // Field java/lang/System.out:Ljava/io/PrintStream;
     694: iload         7
     696: invokevirtual #172                // Method java/io/PrintStream.println:(I)V
     699: getstatic     #135                // Field kotlin/Unit.INSTANCE:Lkotlin/Unit;
     702: invokevirtual #269                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
     705: invokevirtual #235                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     708: pop
     709: aload         4
     711: iconst_3
     712: invokestatic  #273                // Method kotlin/collections/CollectionsKt.takeLast:(Ljava/util/List;I)Ljava/util/List;
     715: checkcast     #68                 // class java/lang/Iterable
     718: astore        4
     720: nop
     721: iconst_0
     722: istore        5
     724: aload         4
     726: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     731: astore        6
     733: aload         6
     735: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     740: ifne          754
     743: new           #275                // class java/lang/UnsupportedOperationException
     746: dup
     747: ldc_w         #277                // String Empty collection can\'t be reduced.
     750: invokespecial #278                // Method java/lang/UnsupportedOperationException."<init>":(Ljava/lang/String;)V
     753: athrow
     754: aload         6
     756: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     761: astore        7
     763: aload         6
     765: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     770: ifeq          814
     773: aload         7
     775: aload         6
     777: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     782: checkcast     #146                // class java/lang/Number
     785: invokevirtual #150                // Method java/lang/Number.intValue:()I
     788: istore        8
     790: checkcast     #146                // class java/lang/Number
     793: invokevirtual #150                // Method java/lang/Number.intValue:()I
     796: istore        9
     798: iconst_0
     799: istore        10
     801: iload         9
     803: iload         8
     805: imul
     806: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     809: astore        7
     811: goto          763
     814: aload         7
     816: checkcast     #146                // class java/lang/Number
     819: invokevirtual #150                // Method java/lang/Number.intValue:()I
     822: istore_3
     823: new           #214                // class java/lang/StringBuilder
     826: dup
     827: invokespecial #215                // Method java/lang/StringBuilder."<init>":()V
     830: ldc_w         #280                // String Score
     833: invokevirtual #221                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
     836: iload_3
     837: invokevirtual #231                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
     840: invokevirtual #235                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
     843: getstatic     #167                // Field java/lang/System.out:Ljava/io/PrintStream;
     846: swap
     847: invokevirtual #238                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
     850: return

  public static final java.util.Map<java.lang.Integer, java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>>> clusterBaisins(java.util.List<java.util.List<java.lang.Integer>>, java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>>);
    Code:
       0: aload_0
       1: ldc_w         #302                // String map
       4: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: aload_1
       8: ldc_w         #304                // String basinLimits
      11: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
      14: iconst_0
      15: istore_2
      16: new           #306                // class java/util/LinkedHashMap
      19: dup
      20: invokespecial #307                // Method java/util/LinkedHashMap."<init>":()V
      23: checkcast     #249                // class java/util/Map
      26: astore_3
      27: new           #306                // class java/util/LinkedHashMap
      30: dup
      31: invokespecial #307                // Method java/util/LinkedHashMap."<init>":()V
      34: checkcast     #249                // class java/util/Map
      37: astore        4
      39: aload_0
      40: checkcast     #68                 // class java/lang/Iterable
      43: astore        5
      45: iconst_0
      46: istore        6
      48: iconst_0
      49: istore        7
      51: aload         5
      53: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      58: astore        8
      60: aload         8
      62: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      67: ifeq          1925
      70: aload         8
      72: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      77: astore        9
      79: iload         7
      81: iinc          7, 1
      84: istore        10
      86: iload         10
      88: ifge          94
      91: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
      94: iload         10
      96: aload         9
      98: checkcast     #28                 // class java/util/List
     101: astore        11
     103: istore        12
     105: iconst_0
     106: istore        13
     108: aload         11
     110: checkcast     #68                 // class java/lang/Iterable
     113: astore        14
     115: iconst_0
     116: istore        15
     118: iconst_0
     119: istore        16
     121: aload         14
     123: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     128: astore        17
     130: aload         17
     132: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     137: ifeq          1919
     140: aload         17
     142: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     147: astore        18
     149: iload         16
     151: iinc          16, 1
     154: istore        19
     156: iload         19
     158: ifge          164
     161: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     164: iload         19
     166: aload         18
     168: checkcast     #146                // class java/lang/Number
     171: invokevirtual #150                // Method java/lang/Number.intValue:()I
     174: istore        20
     176: istore        21
     178: iconst_0
     179: istore        22
     181: iload         20
     183: bipush        9
     185: if_icmpeq     1915
     188: iload         12
     190: istore        23
     192: iload         23
     194: ifne          247
     197: iload         12
     199: iconst_1
     200: iadd
     201: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     204: iload         21
     206: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     209: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     212: aload         4
     214: iload         12
     216: iconst_1
     217: iadd
     218: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     221: iload         21
     223: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     226: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     229: iconst_m1
     230: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     233: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     238: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     241: invokestatic  #321                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     244: goto          417
     247: iload         23
     249: aload_0
     250: invokeinterface #224,  1          // InterfaceMethod java/util/List.size:()I
     255: iconst_1
     256: isub
     257: if_icmpne     310
     260: iload         12
     262: iconst_1
     263: isub
     264: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     267: iload         21
     269: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     272: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     275: aload         4
     277: iload         12
     279: iconst_1
     280: isub
     281: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     284: iload         21
     286: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     289: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     292: iconst_m1
     293: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     296: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     301: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     304: invokestatic  #321                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     307: goto          417
     310: iconst_2
     311: anewarray     #141                // class kotlin/Pair
     314: astore        24
     316: aload         24
     318: iconst_0
     319: iload         12
     321: iconst_1
     322: isub
     323: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     326: iload         21
     328: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     331: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     334: aload         4
     336: iload         12
     338: iconst_1
     339: isub
     340: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     343: iload         21
     345: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     348: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     351: iconst_m1
     352: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     355: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     360: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     363: aastore
     364: aload         24
     366: iconst_1
     367: iload         12
     369: iconst_1
     370: iadd
     371: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     374: iload         21
     376: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     379: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     382: aload         4
     384: iload         12
     386: iconst_1
     387: iadd
     388: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     391: iload         21
     393: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     396: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     399: iconst_m1
     400: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     403: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     408: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     411: aastore
     412: aload         24
     414: invokestatic  #324                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
     417: astore        25
     419: iload         21
     421: istore        24
     423: iload         24
     425: ifne          478
     428: iload         12
     430: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     433: iload         21
     435: iconst_1
     436: iadd
     437: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     440: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     443: aload         4
     445: iload         12
     447: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     450: iload         21
     452: iconst_1
     453: iadd
     454: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     457: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     460: iconst_m1
     461: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     464: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     469: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     472: invokestatic  #321                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     475: goto          649
     478: iload         24
     480: aload         11
     482: invokeinterface #224,  1          // InterfaceMethod java/util/List.size:()I
     487: iconst_1
     488: isub
     489: if_icmpne     542
     492: iload         12
     494: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     497: iload         21
     499: iconst_1
     500: isub
     501: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     504: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     507: aload         4
     509: iload         12
     511: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     514: iload         21
     516: iconst_1
     517: isub
     518: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     521: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     524: iconst_m1
     525: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     528: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     533: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     536: invokestatic  #321                // Method kotlin/collections/CollectionsKt.listOf:(Ljava/lang/Object;)Ljava/util/List;
     539: goto          649
     542: iconst_2
     543: anewarray     #141                // class kotlin/Pair
     546: astore        26
     548: aload         26
     550: iconst_0
     551: iload         12
     553: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     556: iload         21
     558: iconst_1
     559: isub
     560: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     563: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     566: aload         4
     568: iload         12
     570: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     573: iload         21
     575: iconst_1
     576: isub
     577: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     580: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     583: iconst_m1
     584: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     587: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     592: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     595: aastore
     596: aload         26
     598: iconst_1
     599: iload         12
     601: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     604: iload         21
     606: iconst_1
     607: iadd
     608: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     611: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     614: aload         4
     616: iload         12
     618: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     621: iload         21
     623: iconst_1
     624: iadd
     625: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     628: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     631: iconst_m1
     632: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     635: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
     640: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     643: aastore
     644: aload         26
     646: invokestatic  #324                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
     649: astore        23
     651: aload         25
     653: checkcast     #79                 // class java/util/Collection
     656: aload         23
     658: checkcast     #68                 // class java/lang/Iterable
     661: invokestatic  #328                // Method kotlin/collections/CollectionsKt.plus:(Ljava/util/Collection;Ljava/lang/Iterable;)Ljava/util/List;
     664: astore        24
     666: aload         24
     668: checkcast     #68                 // class java/lang/Iterable
     671: astore        26
     673: iconst_0
     674: istore        27
     676: aload         26
     678: instanceof    #79                 // class java/util/Collection
     681: ifeq          701
     684: aload         26
     686: checkcast     #79                 // class java/util/Collection
     689: invokeinterface #331,  1          // InterfaceMethod java/util/Collection.isEmpty:()Z
     694: ifeq          701
     697: iconst_1
     698: goto          767
     701: aload         26
     703: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     708: astore        28
     710: aload         28
     712: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     717: ifeq          766
     720: aload         28
     722: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     727: astore        29
     729: aload         29
     731: checkcast     #141                // class kotlin/Pair
     734: astore        30
     736: iconst_0
     737: istore        31
     739: aload         30
     741: invokevirtual #157                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     744: checkcast     #146                // class java/lang/Number
     747: invokevirtual #150                // Method java/lang/Number.intValue:()I
     750: iconst_m1
     751: if_icmpeq     758
     754: iconst_1
     755: goto          759
     758: iconst_0
     759: ifeq          710
     762: iconst_0
     763: goto          767
     766: iconst_1
     767: ifeq          1129
     770: aload         24
     772: checkcast     #68                 // class java/lang/Iterable
     775: astore        27
     777: iconst_0
     778: istore        28
     780: aload         27
     782: astore        29
     784: new           #23                 // class java/util/ArrayList
     787: dup
     788: aload         27
     790: bipush        10
     792: invokestatic  #74                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     795: invokespecial #77                 // Method java/util/ArrayList."<init>":(I)V
     798: checkcast     #79                 // class java/util/Collection
     801: astore        30
     803: iconst_0
     804: istore        31
     806: aload         29
     808: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     813: astore        32
     815: aload         32
     817: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     822: ifeq          868
     825: aload         32
     827: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     832: astore        33
     834: aload         30
     836: aload         33
     838: checkcast     #141                // class kotlin/Pair
     841: astore        34
     843: astore        35
     845: iconst_0
     846: istore        36
     848: aload         34
     850: invokevirtual #144                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     853: checkcast     #141                // class kotlin/Pair
     856: aload         35
     858: swap
     859: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     864: pop
     865: goto          815
     868: aload         30
     870: checkcast     #28                 // class java/util/List
     873: nop
     874: checkcast     #79                 // class java/util/Collection
     877: iload         12
     879: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     882: iload         21
     884: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     887: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     890: invokestatic  #334                // Method kotlin/collections/CollectionsKt.plus:(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List;
     893: checkcast     #68                 // class java/lang/Iterable
     896: astore        27
     898: nop
     899: iconst_0
     900: istore        28
     902: aload         27
     904: astore        29
     906: new           #23                 // class java/util/ArrayList
     909: dup
     910: invokespecial #26                 // Method java/util/ArrayList."<init>":()V
     913: checkcast     #79                 // class java/util/Collection
     916: astore        30
     918: iconst_0
     919: istore        31
     921: aload         29
     923: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     928: astore        32
     930: aload         32
     932: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     937: ifeq          1027
     940: aload         32
     942: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     947: astore        33
     949: aload         33
     951: checkcast     #141                // class kotlin/Pair
     954: astore        34
     956: iconst_0
     957: istore        36
     959: aload_0
     960: aload         34
     962: invokevirtual #144                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
     965: checkcast     #146                // class java/lang/Number
     968: invokevirtual #150                // Method java/lang/Number.intValue:()I
     971: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     976: checkcast     #28                 // class java/util/List
     979: aload         34
     981: invokevirtual #157                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     984: checkcast     #146                // class java/lang/Number
     987: invokevirtual #150                // Method java/lang/Number.intValue:()I
     990: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     995: checkcast     #146                // class java/lang/Number
     998: invokevirtual #150                // Method java/lang/Number.intValue:()I
    1001: bipush        9
    1003: if_icmpeq     1010
    1006: iconst_1
    1007: goto          1011
    1010: iconst_0
    1011: ifeq          930
    1014: aload         30
    1016: aload         33
    1018: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1023: pop
    1024: goto          930
    1027: aload         30
    1029: checkcast     #28                 // class java/util/List
    1032: nop
    1033: checkcast     #68                 // class java/lang/Iterable
    1036: invokestatic  #338                // Method kotlin/collections/CollectionsKt.toSet:(Ljava/lang/Iterable;)Ljava/util/Set;
    1039: astore        26
    1041: aload_3
    1042: iload_2
    1043: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1046: aload         26
    1048: invokeinterface #341,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1053: pop
    1054: aload         26
    1056: checkcast     #68                 // class java/lang/Iterable
    1059: astore        27
    1061: iconst_0
    1062: istore        28
    1064: aload         27
    1066: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1071: astore        29
    1073: aload         29
    1075: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1080: ifeq          1121
    1083: aload         29
    1085: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1090: astore        30
    1092: aload         30
    1094: checkcast     #141                // class kotlin/Pair
    1097: astore        31
    1099: iconst_0
    1100: istore        32
    1102: aload         4
    1104: aload         31
    1106: iload_2
    1107: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1110: invokeinterface #341,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1115: pop
    1116: nop
    1117: nop
    1118: goto          1073
    1121: nop
    1122: iload_2
    1123: iconst_1
    1124: iadd
    1125: istore_2
    1126: goto          1914
    1129: aload         24
    1131: checkcast     #68                 // class java/lang/Iterable
    1134: astore        27
    1136: iconst_0
    1137: istore        28
    1139: aload         27
    1141: astore        29
    1143: new           #23                 // class java/util/ArrayList
    1146: dup
    1147: aload         27
    1149: bipush        10
    1151: invokestatic  #74                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
    1154: invokespecial #77                 // Method java/util/ArrayList."<init>":(I)V
    1157: checkcast     #79                 // class java/util/Collection
    1160: astore        30
    1162: iconst_0
    1163: istore        31
    1165: aload         29
    1167: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1172: astore        32
    1174: aload         32
    1176: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1181: ifeq          1227
    1184: aload         32
    1186: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1191: astore        33
    1193: aload         30
    1195: aload         33
    1197: checkcast     #141                // class kotlin/Pair
    1200: astore        34
    1202: astore        35
    1204: iconst_0
    1205: istore        36
    1207: aload         34
    1209: invokevirtual #144                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
    1212: checkcast     #141                // class kotlin/Pair
    1215: aload         35
    1217: swap
    1218: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1223: pop
    1224: goto          1174
    1227: aload         30
    1229: checkcast     #28                 // class java/util/List
    1232: nop
    1233: checkcast     #79                 // class java/util/Collection
    1236: iload         12
    1238: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1241: iload         21
    1243: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1246: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
    1249: invokestatic  #334                // Method kotlin/collections/CollectionsKt.plus:(Ljava/util/Collection;Ljava/lang/Object;)Ljava/util/List;
    1252: checkcast     #68                 // class java/lang/Iterable
    1255: astore        27
    1257: nop
    1258: iconst_0
    1259: istore        28
    1261: aload         27
    1263: astore        29
    1265: new           #23                 // class java/util/ArrayList
    1268: dup
    1269: invokespecial #26                 // Method java/util/ArrayList."<init>":()V
    1272: checkcast     #79                 // class java/util/Collection
    1275: astore        30
    1277: iconst_0
    1278: istore        31
    1280: aload         29
    1282: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1287: astore        32
    1289: aload         32
    1291: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1296: ifeq          1386
    1299: aload         32
    1301: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1306: astore        33
    1308: aload         33
    1310: checkcast     #141                // class kotlin/Pair
    1313: astore        34
    1315: iconst_0
    1316: istore        36
    1318: aload_0
    1319: aload         34
    1321: invokevirtual #144                // Method kotlin/Pair.getFirst:()Ljava/lang/Object;
    1324: checkcast     #146                // class java/lang/Number
    1327: invokevirtual #150                // Method java/lang/Number.intValue:()I
    1330: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
    1335: checkcast     #28                 // class java/util/List
    1338: aload         34
    1340: invokevirtual #157                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
    1343: checkcast     #146                // class java/lang/Number
    1346: invokevirtual #150                // Method java/lang/Number.intValue:()I
    1349: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
    1354: checkcast     #146                // class java/lang/Number
    1357: invokevirtual #150                // Method java/lang/Number.intValue:()I
    1360: bipush        9
    1362: if_icmpeq     1369
    1365: iconst_1
    1366: goto          1370
    1369: iconst_0
    1370: ifeq          1289
    1373: aload         30
    1375: aload         33
    1377: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1382: pop
    1383: goto          1289
    1386: aload         30
    1388: checkcast     #28                 // class java/util/List
    1391: nop
    1392: checkcast     #68                 // class java/lang/Iterable
    1395: invokestatic  #344                // Method kotlin/collections/CollectionsKt.toMutableSet:(Ljava/lang/Iterable;)Ljava/util/Set;
    1398: astore        26
    1400: iconst_0
    1401: istore        27
    1403: iconst_m1
    1404: istore        27
    1406: aload         26
    1408: checkcast     #68                 // class java/lang/Iterable
    1411: astore        28
    1413: iconst_0
    1414: istore        29
    1416: aload         28
    1418: astore        30
    1420: new           #23                 // class java/util/ArrayList
    1423: dup
    1424: aload         28
    1426: bipush        10
    1428: invokestatic  #74                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
    1431: invokespecial #77                 // Method java/util/ArrayList."<init>":(I)V
    1434: checkcast     #79                 // class java/util/Collection
    1437: astore        31
    1439: iconst_0
    1440: istore        32
    1442: aload         30
    1444: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1449: astore        33
    1451: aload         33
    1453: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1458: ifeq          1783
    1461: aload         33
    1463: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1468: astore        34
    1470: aload         31
    1472: aload         34
    1474: checkcast     #141                // class kotlin/Pair
    1477: astore        36
    1479: astore        35
    1481: iconst_0
    1482: istore        37
    1484: iload         27
    1486: iconst_m1
    1487: if_icmpne     1514
    1490: aload         4
    1492: aload         36
    1494: iconst_m1
    1495: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1498: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1503: checkcast     #146                // class java/lang/Number
    1506: invokevirtual #150                // Method java/lang/Number.intValue:()I
    1509: istore        27
    1511: goto          1768
    1514: aload         4
    1516: aload         36
    1518: invokeinterface #347,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
    1523: checkcast     #118                // class java/lang/Integer
    1526: astore        38
    1528: aload         38
    1530: ifnull        1768
    1533: iload         27
    1535: aload         38
    1537: invokevirtual #348                // Method java/lang/Integer.intValue:()I
    1540: if_icmpeq     1768
    1543: new           #214                // class java/lang/StringBuilder
    1546: dup
    1547: invokespecial #215                // Method java/lang/StringBuilder."<init>":()V
    1550: ldc_w         #350                // String Cluster:
    1553: invokevirtual #221                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
    1556: iload         27
    1558: invokevirtual #231                // Method java/lang/StringBuilder.append:(I)Ljava/lang/StringBuilder;
    1561: ldc_w         #352                // String , neighbour:
    1564: invokevirtual #221                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
    1567: aload         38
    1569: invokevirtual #269                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
    1572: ldc_w         #354                // String , it:
    1575: invokevirtual #221                // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
    1578: aload         36
    1580: invokevirtual #269                // Method java/lang/StringBuilder.append:(Ljava/lang/Object;)Ljava/lang/StringBuilder;
    1583: invokevirtual #235                // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
    1586: getstatic     #167                // Field java/lang/System.out:Ljava/io/PrintStream;
    1589: swap
    1590: invokevirtual #238                // Method java/io/PrintStream.println:(Ljava/lang/Object;)V
    1593: aload         38
    1595: invokevirtual #348                // Method java/lang/Integer.intValue:()I
    1598: istore        39
    1600: iload         27
    1602: iload         39
    1604: invokestatic  #360                // Method java/lang/Math.min:(II)I
    1607: istore        40
    1609: aload_3
    1610: aload         38
    1612: invokestatic  #365                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
    1615: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1620: checkcast     #242                // class java/util/Set
    1623: astore        41
    1625: aload_3
    1626: aload         38
    1628: invokeinterface #368,  2          // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
    1633: pop
    1634: aload_3
    1635: iload         27
    1637: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1640: invokestatic  #365                // Method kotlin/collections/SetsKt.emptySet:()Ljava/util/Set;
    1643: invokeinterface #317,  3          // InterfaceMethod java/util/Map.getOrDefault:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1648: checkcast     #242                // class java/util/Set
    1651: astore        39
    1653: aload_3
    1654: iload         27
    1656: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1659: invokeinterface #368,  2          // InterfaceMethod java/util/Map.remove:(Ljava/lang/Object;)Ljava/lang/Object;
    1664: pop
    1665: aload         41
    1667: aload         39
    1669: checkcast     #68                 // class java/lang/Iterable
    1672: invokestatic  #371                // Method kotlin/collections/SetsKt.plus:(Ljava/util/Set;Ljava/lang/Iterable;)Ljava/util/Set;
    1675: astore        42
    1677: aload         42
    1679: checkcast     #68                 // class java/lang/Iterable
    1682: astore        43
    1684: iconst_0
    1685: istore        44
    1687: aload         43
    1689: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1694: astore        45
    1696: aload         45
    1698: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1703: ifeq          1749
    1706: aload         45
    1708: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1713: astore        46
    1715: aload         46
    1717: checkcast     #141                // class kotlin/Pair
    1720: astore        47
    1722: iconst_0
    1723: istore        48
    1725: iload         40
    1727: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1730: astore        49
    1732: aload         4
    1734: aload         47
    1736: aload         49
    1738: invokeinterface #341,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1743: pop
    1744: nop
    1745: nop
    1746: goto          1696
    1749: nop
    1750: iload         40
    1752: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1755: astore        44
    1757: aload_3
    1758: aload         44
    1760: aload         42
    1762: invokeinterface #341,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1767: pop
    1768: nop
    1769: aload         35
    1771: getstatic     #135                // Field kotlin/Unit.INSTANCE:Lkotlin/Unit;
    1774: invokeinterface #116,  2          // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1779: pop
    1780: goto          1451
    1783: aload         31
    1785: checkcast     #28                 // class java/util/List
    1788: nop
    1789: pop
    1790: aload         26
    1792: checkcast     #68                 // class java/lang/Iterable
    1795: astore        28
    1797: iconst_0
    1798: istore        29
    1800: aload         28
    1802: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1807: astore        30
    1809: aload         30
    1811: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1816: ifeq          1858
    1819: aload         30
    1821: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1826: astore        31
    1828: aload         31
    1830: checkcast     #141                // class kotlin/Pair
    1833: astore        32
    1835: iconst_0
    1836: istore        33
    1838: aload         4
    1840: aload         32
    1842: iload         27
    1844: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1847: invokeinterface #341,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1852: pop
    1853: nop
    1854: nop
    1855: goto          1809
    1858: nop
    1859: aload_3
    1860: iload         27
    1862: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1865: invokeinterface #347,  2          // InterfaceMethod java/util/Map.get:(Ljava/lang/Object;)Ljava/lang/Object;
    1870: checkcast     #242                // class java/util/Set
    1873: dup
    1874: ifnull        1898
    1877: astore        30
    1879: iconst_0
    1880: istore        31
    1882: aload         26
    1884: aload         30
    1886: checkcast     #79                 // class java/util/Collection
    1889: invokeinterface #375,  2          // InterfaceMethod java/util/Set.addAll:(Ljava/util/Collection;)Z
    1894: pop
    1895: goto          1900
    1898: pop
    1899: nop
    1900: aload_3
    1901: iload         27
    1903: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1906: aload         26
    1908: invokeinterface #341,  3          // InterfaceMethod java/util/Map.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
    1913: pop
    1914: nop
    1915: nop
    1916: goto          130
    1919: nop
    1920: nop
    1921: nop
    1922: goto          60
    1925: nop
    1926: aload_3
    1927: areturn

  public static final java.util.Set<kotlin.Pair<java.lang.Integer, java.lang.Integer>> findBasinLimits(java.util.List<java.util.List<java.lang.Integer>>);
    Code:
       0: aload_0
       1: ldc_w         #302                // String map
       4: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: new           #420                // class java/util/LinkedHashSet
      10: dup
      11: invokespecial #421                // Method java/util/LinkedHashSet."<init>":()V
      14: checkcast     #242                // class java/util/Set
      17: astore_1
      18: aload_0
      19: checkcast     #68                 // class java/lang/Iterable
      22: astore_2
      23: iconst_0
      24: istore_3
      25: iconst_0
      26: istore        4
      28: aload_2
      29: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      34: astore        5
      36: aload         5
      38: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      43: ifeq          195
      46: aload         5
      48: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      53: astore        6
      55: iload         4
      57: iinc          4, 1
      60: istore        7
      62: iload         7
      64: ifge          70
      67: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
      70: iload         7
      72: aload         6
      74: checkcast     #28                 // class java/util/List
      77: astore        8
      79: istore        9
      81: iconst_0
      82: istore        10
      84: aload         8
      86: checkcast     #68                 // class java/lang/Iterable
      89: astore        11
      91: iconst_0
      92: istore        12
      94: iconst_0
      95: istore        13
      97: aload         11
      99: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     104: astore        14
     106: aload         14
     108: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     113: ifeq          189
     116: aload         14
     118: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     123: astore        15
     125: iload         13
     127: iinc          13, 1
     130: istore        16
     132: iload         16
     134: ifge          140
     137: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     140: iload         16
     142: aload         15
     144: checkcast     #146                // class java/lang/Number
     147: invokevirtual #150                // Method java/lang/Number.intValue:()I
     150: istore        17
     152: istore        18
     154: iconst_0
     155: istore        19
     157: iload         17
     159: bipush        9
     161: if_icmpne     184
     164: aload_1
     165: iload         9
     167: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     170: iload         18
     172: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     175: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     178: invokeinterface #422,  2          // InterfaceMethod java/util/Set.add:(Ljava/lang/Object;)Z
     183: pop
     184: nop
     185: nop
     186: goto          106
     189: nop
     190: nop
     191: nop
     192: goto          36
     195: nop
     196: aload_1
     197: areturn

  public static final java.util.List<kotlin.Pair<java.lang.Integer, java.lang.Integer>> findLocalMinimas(java.util.List<java.util.List<java.lang.Integer>>);
    Code:
       0: aload_0
       1: ldc_w         #302                // String map
       4: invokestatic  #15                 // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       7: new           #23                 // class java/util/ArrayList
      10: dup
      11: invokespecial #26                 // Method java/util/ArrayList."<init>":()V
      14: checkcast     #28                 // class java/util/List
      17: astore_1
      18: aload_0
      19: checkcast     #68                 // class java/lang/Iterable
      22: astore_2
      23: iconst_0
      24: istore_3
      25: iconst_0
      26: istore        4
      28: aload_2
      29: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      34: astore        5
      36: aload         5
      38: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      43: ifeq          504
      46: aload         5
      48: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      53: astore        6
      55: iload         4
      57: iinc          4, 1
      60: istore        7
      62: iload         7
      64: ifge          70
      67: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
      70: iload         7
      72: aload         6
      74: checkcast     #28                 // class java/util/List
      77: astore        8
      79: istore        9
      81: iconst_0
      82: istore        10
      84: aload         8
      86: checkcast     #68                 // class java/lang/Iterable
      89: astore        11
      91: iconst_0
      92: istore        12
      94: iconst_0
      95: istore        13
      97: aload         11
      99: invokeinterface #83,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     104: astore        14
     106: aload         14
     108: invokeinterface #89,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     113: ifeq          498
     116: aload         14
     118: invokeinterface #93,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     123: astore        15
     125: iload         13
     127: iinc          13, 1
     130: istore        16
     132: iload         16
     134: ifge          140
     137: invokestatic  #96                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     140: iload         16
     142: aload         15
     144: checkcast     #146                // class java/lang/Number
     147: invokevirtual #150                // Method java/lang/Number.intValue:()I
     150: istore        17
     152: istore        18
     154: iconst_0
     155: istore        19
     157: iload         18
     159: istore        20
     161: iload         20
     163: ifne          196
     166: iload         17
     168: aload         8
     170: iload         18
     172: iconst_1
     173: iadd
     174: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     179: checkcast     #146                // class java/lang/Number
     182: invokevirtual #150                // Method java/lang/Number.intValue:()I
     185: if_icmpge     192
     188: iconst_1
     189: goto          289
     192: iconst_0
     193: goto          289
     196: iload         20
     198: aload         8
     200: invokeinterface #224,  1          // InterfaceMethod java/util/List.size:()I
     205: iconst_1
     206: isub
     207: if_icmpne     240
     210: iload         17
     212: aload         8
     214: iload         18
     216: iconst_1
     217: isub
     218: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     223: checkcast     #146                // class java/lang/Number
     226: invokevirtual #150                // Method java/lang/Number.intValue:()I
     229: if_icmpge     236
     232: iconst_1
     233: goto          289
     236: iconst_0
     237: goto          289
     240: iload         17
     242: aload         8
     244: iload         18
     246: iconst_1
     247: isub
     248: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     253: checkcast     #146                // class java/lang/Number
     256: invokevirtual #150                // Method java/lang/Number.intValue:()I
     259: if_icmpge     288
     262: iload         17
     264: aload         8
     266: iload         18
     268: iconst_1
     269: iadd
     270: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     275: checkcast     #146                // class java/lang/Number
     278: invokevirtual #150                // Method java/lang/Number.intValue:()I
     281: if_icmpge     288
     284: iconst_1
     285: goto          289
     288: iconst_0
     289: istore        21
     291: iload         21
     293: ifne          299
     296: goto          494
     299: iload         9
     301: istore        22
     303: iload         22
     305: ifne          347
     308: iload         17
     310: aload_0
     311: iload         9
     313: iconst_1
     314: iadd
     315: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     320: checkcast     #28                 // class java/util/List
     323: iload         18
     325: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     330: checkcast     #146                // class java/lang/Number
     333: invokevirtual #150                // Method java/lang/Number.intValue:()I
     336: if_icmpge     343
     339: iconst_1
     340: goto          466
     343: iconst_0
     344: goto          466
     347: iload         22
     349: aload_0
     350: invokeinterface #224,  1          // InterfaceMethod java/util/List.size:()I
     355: iconst_1
     356: isub
     357: if_icmpne     399
     360: iload         17
     362: aload_0
     363: iload         9
     365: iconst_1
     366: isub
     367: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     372: checkcast     #28                 // class java/util/List
     375: iload         18
     377: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     382: checkcast     #146                // class java/lang/Number
     385: invokevirtual #150                // Method java/lang/Number.intValue:()I
     388: if_icmpge     395
     391: iconst_1
     392: goto          466
     395: iconst_0
     396: goto          466
     399: iload         17
     401: aload_0
     402: iload         9
     404: iconst_1
     405: isub
     406: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     411: checkcast     #28                 // class java/util/List
     414: iload         18
     416: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     421: checkcast     #146                // class java/lang/Number
     424: invokevirtual #150                // Method java/lang/Number.intValue:()I
     427: if_icmpge     465
     430: iload         17
     432: aload_0
     433: iload         9
     435: iconst_1
     436: iadd
     437: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     442: checkcast     #28                 // class java/util/List
     445: iload         18
     447: invokeinterface #154,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     452: checkcast     #146                // class java/lang/Number
     455: invokevirtual #150                // Method java/lang/Number.intValue:()I
     458: if_icmpge     465
     461: iconst_1
     462: goto          466
     465: iconst_0
     466: istore        20
     468: iload         20
     470: ifeq          493
     473: aload_1
     474: iload         9
     476: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     479: iload         18
     481: invokestatic  #126                // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     484: invokestatic  #313                // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     487: invokeinterface #426,  2          // InterfaceMethod java/util/List.add:(Ljava/lang/Object;)Z
     492: pop
     493: nop
     494: nop
     495: goto          106
     498: nop
     499: nop
     500: nop
     501: goto          36
     504: nop
     505: aload_1
     506: areturn
}