package day18

import java.io.File
import kotlin.math.max
import kotlin.math.min

fun main() {
    val lavas = File("src/day18/input.txt").readLines().map { it.split(',') }.map { Triple(it[0].toInt(), it[1].toInt(), it[2].toInt()) }
    val deltas = listOf(
        Triple(1, 0, 0), Triple(-1, 0, 0),
        Triple(0, 1, 0), Triple(0, -1, 0),
        Triple(0, 0, 1), Triple(0, 0, -1)
    )
    println(lavas.sumOf { lava -> deltas.map { delta -> lava + delta }.count { other -> other !in lavas } })

    val min = lavas.reduce { t1, t2 -> Triple(min(t1.first, t2.first), min(t1.second, t2.second), min(t1.third, t2.third))}
    val max = lavas.reduce { t1, t2 -> Triple(max(t1.first, t2.first), max(t1.second, t2.second), max(t1.third, t2.third))}

    val pockets = mutableListOf<Triple<Int, Int, Int>>()
    val nonPockets = mutableListOf<Triple<Int, Int, Int>>()

    for (x in min.first .. max.first) {
        for (y in min.second .. max.second) {
            loop@ for (z in min.third .. max.third) {
                val start = Triple(x, y, z)
                if (start in lavas || start in pockets || start in nonPockets) continue
                val potentialPocket = mutableListOf(start)
                val stack = mutableListOf(start)
                while (stack.isNotEmpty()) {
                    val next = stack.removeAt(0)
                    val surrounding =
                        deltas.map { delta -> next + delta }.filter { it !in lavas }.filter { it !in potentialPocket }
                    val reachedEdge =
                        surrounding.any { it.first <= min.first || it.second <= min.second || it.third <= min.third
                                || it.first >= max.first || it.second >= max.second || it.third >= max.third }
                    if (reachedEdge) {
                        nonPockets.addAll(potentialPocket)
                        continue@loop
                    }
                    stack.addAll(surrounding)
                    potentialPocket.addAll(surrounding)
                }
                pockets.addAll(potentialPocket) // it is a pocket!
            }
        }
    }

    println(lavas.sumOf { lava -> deltas.map { delta -> lava + delta }.count { other -> other !in lavas && other !in pockets } })
}

private operator fun Triple<Int, Int, Int>.plus(other: Triple<Int, Int, Int>)
    = Triple(first + other.first, second + other.second, third + other.third)

Compiled from "Day18.kt"
public final class day18.Day18Kt {
  public static final void main();
    Code:
       0: new           #8                  // class java/io/File
       3: dup
       4: ldc           #10                 // String src/day18/input.txt
       6: invokespecial #14                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #20                 // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: checkcast     #22                 // class java/lang/Iterable
      18: astore_1
      19: iconst_0
      20: istore_2
      21: aload_1
      22: astore_3
      23: new           #24                 // class java/util/ArrayList
      26: dup
      27: aload_1
      28: bipush        10
      30: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      33: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
      36: checkcast     #35                 // class java/util/Collection
      39: astore        4
      41: iconst_0
      42: istore        5
      44: aload_3
      45: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      50: astore        6
      52: aload         6
      54: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      59: ifeq          123
      62: aload         6
      64: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      69: astore        7
      71: aload         4
      73: aload         7
      75: checkcast     #51                 // class java/lang/String
      78: astore        8
      80: astore        26
      82: iconst_0
      83: istore        9
      85: aload         8
      87: checkcast     #53                 // class java/lang/CharSequence
      90: iconst_1
      91: newarray       char
      93: astore        10
      95: aload         10
      97: iconst_0
      98: bipush        44
     100: castore
     101: aload         10
     103: iconst_0
     104: iconst_0
     105: bipush        6
     107: aconst_null
     108: invokestatic  #59                 // Method kotlin/text/StringsKt.split$default:(Ljava/lang/CharSequence;[CZIILjava/lang/Object;)Ljava/util/List;
     111: aload         26
     113: swap
     114: invokeinterface #63,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     119: pop
     120: goto          52
     123: aload         4
     125: checkcast     #65                 // class java/util/List
     128: nop
     129: checkcast     #22                 // class java/lang/Iterable
     132: astore_1
     133: nop
     134: iconst_0
     135: istore_2
     136: aload_1
     137: astore_3
     138: new           #24                 // class java/util/ArrayList
     141: dup
     142: aload_1
     143: bipush        10
     145: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     148: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
     151: checkcast     #35                 // class java/util/Collection
     154: astore        4
     156: iconst_0
     157: istore        5
     159: aload_3
     160: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     165: astore        6
     167: aload         6
     169: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     174: ifeq          270
     177: aload         6
     179: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     184: astore        7
     186: aload         4
     188: aload         7
     190: checkcast     #65                 // class java/util/List
     193: astore        8
     195: astore        26
     197: iconst_0
     198: istore        9
     200: new           #67                 // class kotlin/Triple
     203: dup
     204: aload         8
     206: iconst_0
     207: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     212: checkcast     #51                 // class java/lang/String
     215: invokestatic  #77                 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     218: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     221: aload         8
     223: iconst_1
     224: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     229: checkcast     #51                 // class java/lang/String
     232: invokestatic  #77                 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     235: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     238: aload         8
     240: iconst_2
     241: invokeinterface #71,  2           // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     246: checkcast     #51                 // class java/lang/String
     249: invokestatic  #77                 // Method java/lang/Integer.parseInt:(Ljava/lang/String;)I
     252: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     255: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
     258: aload         26
     260: swap
     261: invokeinterface #63,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     266: pop
     267: goto          167
     270: aload         4
     272: checkcast     #65                 // class java/util/List
     275: nop
     276: astore_0
     277: bipush        6
     279: anewarray     #67                 // class kotlin/Triple
     282: astore_2
     283: aload_2
     284: iconst_0
     285: new           #67                 // class kotlin/Triple
     288: dup
     289: iconst_1
     290: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     293: iconst_0
     294: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     297: iconst_0
     298: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     301: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
     304: aastore
     305: aload_2
     306: iconst_1
     307: new           #67                 // class kotlin/Triple
     310: dup
     311: iconst_m1
     312: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     315: iconst_0
     316: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     319: iconst_0
     320: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     323: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
     326: aastore
     327: aload_2
     328: iconst_2
     329: new           #67                 // class kotlin/Triple
     332: dup
     333: iconst_0
     334: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     337: iconst_1
     338: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     341: iconst_0
     342: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     345: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
     348: aastore
     349: aload_2
     350: iconst_3
     351: new           #67                 // class kotlin/Triple
     354: dup
     355: iconst_0
     356: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     359: iconst_m1
     360: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     363: iconst_0
     364: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     367: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
     370: aastore
     371: aload_2
     372: iconst_4
     373: new           #67                 // class kotlin/Triple
     376: dup
     377: iconst_0
     378: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     381: iconst_0
     382: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     385: iconst_1
     386: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     389: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
     392: aastore
     393: aload_2
     394: iconst_5
     395: new           #67                 // class kotlin/Triple
     398: dup
     399: iconst_0
     400: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     403: iconst_0
     404: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     407: iconst_m1
     408: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     411: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
     414: aastore
     415: aload_2
     416: invokestatic  #88                 // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
     419: astore_1
     420: aload_0
     421: checkcast     #22                 // class java/lang/Iterable
     424: astore_2
     425: iconst_0
     426: istore_3
     427: aload_2
     428: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     433: astore        4
     435: aload         4
     437: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     442: ifeq          691
     445: aload         4
     447: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     452: astore        5
     454: iload_3
     455: aload         5
     457: checkcast     #67                 // class kotlin/Triple
     460: astore        6
     462: istore        26
     464: iconst_0
     465: istore        7
     467: aload_1
     468: checkcast     #22                 // class java/lang/Iterable
     471: astore        8
     473: iconst_0
     474: istore        9
     476: aload         8
     478: astore        10
     480: new           #24                 // class java/util/ArrayList
     483: dup
     484: aload         8
     486: bipush        10
     488: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     491: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
     494: checkcast     #35                 // class java/util/Collection
     497: astore        11
     499: iconst_0
     500: istore        12
     502: aload         10
     504: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     509: astore        13
     511: aload         13
     513: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     518: ifeq          563
     521: aload         13
     523: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     528: astore        14
     530: aload         11
     532: aload         14
     534: checkcast     #67                 // class kotlin/Triple
     537: astore        15
     539: astore        16
     541: iconst_0
     542: istore        17
     544: aload         6
     546: aload         15
     548: invokestatic  #92                 // Method plus:(Lkotlin/Triple;Lkotlin/Triple;)Lkotlin/Triple;
     551: aload         16
     553: swap
     554: invokeinterface #63,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     559: pop
     560: goto          511
     563: aload         11
     565: checkcast     #65                 // class java/util/List
     568: nop
     569: checkcast     #22                 // class java/lang/Iterable
     572: astore        8
     574: nop
     575: iconst_0
     576: istore        9
     578: aload         8
     580: instanceof    #35                 // class java/util/Collection
     583: ifeq          603
     586: aload         8
     588: checkcast     #35                 // class java/util/Collection
     591: invokeinterface #95,  1           // InterfaceMethod java/util/Collection.isEmpty:()Z
     596: ifeq          603
     599: iconst_0
     600: goto          679
     603: iconst_0
     604: istore        10
     606: aload         8
     608: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     613: astore        11
     615: aload         11
     617: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     622: ifeq          677
     625: aload         11
     627: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     632: astore        12
     634: aload         12
     636: checkcast     #67                 // class kotlin/Triple
     639: astore        13
     641: iconst_0
     642: istore        14
     644: aload_0
     645: aload         13
     647: invokeinterface #98,  2           // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
     652: ifne          659
     655: iconst_1
     656: goto          660
     659: iconst_0
     660: ifeq          615
     663: iinc          10, 1
     666: iload         10
     668: ifge          615
     671: invokestatic  #101                // Method kotlin/collections/CollectionsKt.throwCountOverflow:()V
     674: goto          615
     677: iload         10
     679: nop
     680: istore        27
     682: iload         26
     684: iload         27
     686: iadd
     687: istore_3
     688: goto          435
     691: iload_3
     692: istore_2
     693: getstatic     #107                // Field java/lang/System.out:Ljava/io/PrintStream;
     696: iload_2
     697: invokevirtual #112                // Method java/io/PrintStream.println:(I)V
     700: aload_0
     701: checkcast     #22                 // class java/lang/Iterable
     704: astore_3
     705: iconst_0
     706: istore        4
     708: aload_3
     709: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     714: astore        5
     716: aload         5
     718: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     723: ifne          736
     726: new           #114                // class java/lang/UnsupportedOperationException
     729: dup
     730: ldc           #116                // String Empty collection can\'t be reduced.
     732: invokespecial #117                // Method java/lang/UnsupportedOperationException."<init>":(Ljava/lang/String;)V
     735: athrow
     736: aload         5
     738: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     743: astore        6
     745: aload         5
     747: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     752: ifeq          873
     755: aload         6
     757: aload         5
     759: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     764: checkcast     #67                 // class kotlin/Triple
     767: astore        7
     769: checkcast     #67                 // class kotlin/Triple
     772: astore        8
     774: iconst_0
     775: istore        9
     777: new           #67                 // class kotlin/Triple
     780: dup
     781: aload         8
     783: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
     786: checkcast     #122                // class java/lang/Number
     789: invokevirtual #126                // Method java/lang/Number.intValue:()I
     792: aload         7
     794: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
     797: checkcast     #122                // class java/lang/Number
     800: invokevirtual #126                // Method java/lang/Number.intValue:()I
     803: invokestatic  #132                // Method java/lang/Math.min:(II)I
     806: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     809: aload         8
     811: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
     814: checkcast     #122                // class java/lang/Number
     817: invokevirtual #126                // Method java/lang/Number.intValue:()I
     820: aload         7
     822: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
     825: checkcast     #122                // class java/lang/Number
     828: invokevirtual #126                // Method java/lang/Number.intValue:()I
     831: invokestatic  #132                // Method java/lang/Math.min:(II)I
     834: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     837: aload         8
     839: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
     842: checkcast     #122                // class java/lang/Number
     845: invokevirtual #126                // Method java/lang/Number.intValue:()I
     848: aload         7
     850: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
     853: checkcast     #122                // class java/lang/Number
     856: invokevirtual #126                // Method java/lang/Number.intValue:()I
     859: invokestatic  #132                // Method java/lang/Math.min:(II)I
     862: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     865: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
     868: astore        6
     870: goto          745
     873: aload         6
     875: checkcast     #67                 // class kotlin/Triple
     878: astore_2
     879: aload_0
     880: checkcast     #22                 // class java/lang/Iterable
     883: astore        4
     885: iconst_0
     886: istore        5
     888: aload         4
     890: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     895: astore        6
     897: aload         6
     899: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     904: ifne          917
     907: new           #114                // class java/lang/UnsupportedOperationException
     910: dup
     911: ldc           #116                // String Empty collection can\'t be reduced.
     913: invokespecial #117                // Method java/lang/UnsupportedOperationException."<init>":(Ljava/lang/String;)V
     916: athrow
     917: aload         6
     919: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     924: astore        7
     926: aload         6
     928: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     933: ifeq          1054
     936: aload         7
     938: aload         6
     940: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     945: checkcast     #67                 // class kotlin/Triple
     948: astore        8
     950: checkcast     #67                 // class kotlin/Triple
     953: astore        9
     955: iconst_0
     956: istore        10
     958: new           #67                 // class kotlin/Triple
     961: dup
     962: aload         9
     964: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
     967: checkcast     #122                // class java/lang/Number
     970: invokevirtual #126                // Method java/lang/Number.intValue:()I
     973: aload         8
     975: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
     978: checkcast     #122                // class java/lang/Number
     981: invokevirtual #126                // Method java/lang/Number.intValue:()I
     984: invokestatic  #141                // Method java/lang/Math.max:(II)I
     987: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     990: aload         9
     992: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
     995: checkcast     #122                // class java/lang/Number
     998: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1001: aload         8
    1003: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
    1006: checkcast     #122                // class java/lang/Number
    1009: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1012: invokestatic  #141                // Method java/lang/Math.max:(II)I
    1015: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1018: aload         9
    1020: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
    1023: checkcast     #122                // class java/lang/Number
    1026: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1029: aload         8
    1031: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
    1034: checkcast     #122                // class java/lang/Number
    1037: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1040: invokestatic  #141                // Method java/lang/Math.max:(II)I
    1043: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1046: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
    1049: astore        7
    1051: goto          926
    1054: aload         7
    1056: checkcast     #67                 // class kotlin/Triple
    1059: astore_3
    1060: new           #24                 // class java/util/ArrayList
    1063: dup
    1064: invokespecial #143                // Method java/util/ArrayList."<init>":()V
    1067: checkcast     #65                 // class java/util/List
    1070: astore        4
    1072: new           #24                 // class java/util/ArrayList
    1075: dup
    1076: invokespecial #143                // Method java/util/ArrayList."<init>":()V
    1079: checkcast     #65                 // class java/util/List
    1082: astore        5
    1084: aload_2
    1085: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
    1088: checkcast     #122                // class java/lang/Number
    1091: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1094: istore        6
    1096: aload_3
    1097: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
    1100: checkcast     #122                // class java/lang/Number
    1103: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1106: istore        7
    1108: iload         6
    1110: iload         7
    1112: if_icmpgt     1958
    1115: aload_2
    1116: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
    1119: checkcast     #122                // class java/lang/Number
    1122: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1125: istore        8
    1127: aload_3
    1128: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
    1131: checkcast     #122                // class java/lang/Number
    1134: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1137: istore        9
    1139: iload         8
    1141: iload         9
    1143: if_icmpgt     1945
    1146: aload_2
    1147: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
    1150: checkcast     #122                // class java/lang/Number
    1153: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1156: istore        10
    1158: aload_3
    1159: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
    1162: checkcast     #122                // class java/lang/Number
    1165: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1168: istore        11
    1170: iload         10
    1172: iload         11
    1174: if_icmpgt     1932
    1177: new           #67                 // class kotlin/Triple
    1180: dup
    1181: iload         6
    1183: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1186: iload         8
    1188: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1191: iload         10
    1193: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
    1196: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
    1199: astore        12
    1201: aload_0
    1202: aload         12
    1204: invokeinterface #98,  2           // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
    1209: ifne          1919
    1212: aload         4
    1214: aload         12
    1216: invokeinterface #98,  2           // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
    1221: ifne          1919
    1224: aload         5
    1226: aload         12
    1228: invokeinterface #98,  2           // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
    1233: ifeq          1239
    1236: goto          1919
    1239: iconst_1
    1240: anewarray     #67                 // class kotlin/Triple
    1243: astore        14
    1245: aload         14
    1247: iconst_0
    1248: aload         12
    1250: aastore
    1251: aload         14
    1253: invokestatic  #146                // Method kotlin/collections/CollectionsKt.mutableListOf:([Ljava/lang/Object;)Ljava/util/List;
    1256: astore        13
    1258: iconst_1
    1259: anewarray     #67                 // class kotlin/Triple
    1262: astore        15
    1264: aload         15
    1266: iconst_0
    1267: aload         12
    1269: aastore
    1270: aload         15
    1272: invokestatic  #146                // Method kotlin/collections/CollectionsKt.mutableListOf:([Ljava/lang/Object;)Ljava/util/List;
    1275: astore        14
    1277: aload         14
    1279: checkcast     #35                 // class java/util/Collection
    1282: invokeinterface #95,  1           // InterfaceMethod java/util/Collection.isEmpty:()Z
    1287: ifne          1294
    1290: iconst_1
    1291: goto          1295
    1294: iconst_0
    1295: ifeq          1906
    1298: aload         14
    1300: iconst_0
    1301: invokeinterface #149,  2          // InterfaceMethod java/util/List.remove:(I)Ljava/lang/Object;
    1306: checkcast     #67                 // class kotlin/Triple
    1309: astore        15
    1311: aload_1
    1312: checkcast     #22                 // class java/lang/Iterable
    1315: astore        17
    1317: iconst_0
    1318: istore        18
    1320: aload         17
    1322: astore        19
    1324: new           #24                 // class java/util/ArrayList
    1327: dup
    1328: aload         17
    1330: bipush        10
    1332: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
    1335: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
    1338: checkcast     #35                 // class java/util/Collection
    1341: astore        20
    1343: iconst_0
    1344: istore        21
    1346: aload         19
    1348: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1353: astore        22
    1355: aload         22
    1357: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1362: ifeq          1407
    1365: aload         22
    1367: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1372: astore        23
    1374: aload         20
    1376: aload         23
    1378: checkcast     #67                 // class kotlin/Triple
    1381: astore        24
    1383: astore        26
    1385: iconst_0
    1386: istore        25
    1388: aload         15
    1390: aload         24
    1392: invokestatic  #92                 // Method plus:(Lkotlin/Triple;Lkotlin/Triple;)Lkotlin/Triple;
    1395: aload         26
    1397: swap
    1398: invokeinterface #63,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1403: pop
    1404: goto          1355
    1407: aload         20
    1409: checkcast     #65                 // class java/util/List
    1412: nop
    1413: checkcast     #22                 // class java/lang/Iterable
    1416: astore        17
    1418: nop
    1419: iconst_0
    1420: istore        18
    1422: aload         17
    1424: astore        19
    1426: new           #24                 // class java/util/ArrayList
    1429: dup
    1430: invokespecial #143                // Method java/util/ArrayList."<init>":()V
    1433: checkcast     #35                 // class java/util/Collection
    1436: astore        20
    1438: iconst_0
    1439: istore        21
    1441: aload         19
    1443: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1448: astore        22
    1450: aload         22
    1452: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1457: ifeq          1511
    1460: aload         22
    1462: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1467: astore        23
    1469: aload         23
    1471: checkcast     #67                 // class kotlin/Triple
    1474: astore        24
    1476: iconst_0
    1477: istore        25
    1479: aload_0
    1480: aload         24
    1482: invokeinterface #98,  2           // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
    1487: ifne          1494
    1490: iconst_1
    1491: goto          1495
    1494: iconst_0
    1495: ifeq          1450
    1498: aload         20
    1500: aload         23
    1502: invokeinterface #63,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1507: pop
    1508: goto          1450
    1511: aload         20
    1513: checkcast     #65                 // class java/util/List
    1516: nop
    1517: checkcast     #22                 // class java/lang/Iterable
    1520: astore        17
    1522: nop
    1523: iconst_0
    1524: istore        18
    1526: aload         17
    1528: astore        19
    1530: new           #24                 // class java/util/ArrayList
    1533: dup
    1534: invokespecial #143                // Method java/util/ArrayList."<init>":()V
    1537: checkcast     #35                 // class java/util/Collection
    1540: astore        20
    1542: iconst_0
    1543: istore        21
    1545: aload         19
    1547: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1552: astore        22
    1554: aload         22
    1556: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1561: ifeq          1616
    1564: aload         22
    1566: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1571: astore        23
    1573: aload         23
    1575: checkcast     #67                 // class kotlin/Triple
    1578: astore        24
    1580: iconst_0
    1581: istore        25
    1583: aload         13
    1585: aload         24
    1587: invokeinterface #98,  2           // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
    1592: ifne          1599
    1595: iconst_1
    1596: goto          1600
    1599: iconst_0
    1600: ifeq          1554
    1603: aload         20
    1605: aload         23
    1607: invokeinterface #63,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    1612: pop
    1613: goto          1554
    1616: aload         20
    1618: checkcast     #65                 // class java/util/List
    1621: nop
    1622: astore        16
    1624: aload         16
    1626: checkcast     #22                 // class java/lang/Iterable
    1629: astore        18
    1631: iconst_0
    1632: istore        19
    1634: aload         18
    1636: instanceof    #35                 // class java/util/Collection
    1639: ifeq          1659
    1642: aload         18
    1644: checkcast     #35                 // class java/util/Collection
    1647: invokeinterface #95,  1           // InterfaceMethod java/util/Collection.isEmpty:()Z
    1652: ifeq          1659
    1655: iconst_0
    1656: goto          1854
    1659: aload         18
    1661: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1666: astore        20
    1668: aload         20
    1670: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1675: ifeq          1853
    1678: aload         20
    1680: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1685: astore        21
    1687: aload         21
    1689: checkcast     #67                 // class kotlin/Triple
    1692: astore        22
    1694: iconst_0
    1695: istore        23
    1697: aload         22
    1699: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
    1702: checkcast     #122                // class java/lang/Number
    1705: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1708: aload_2
    1709: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
    1712: checkcast     #122                // class java/lang/Number
    1715: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1718: if_icmple     1841
    1721: aload         22
    1723: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
    1726: checkcast     #122                // class java/lang/Number
    1729: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1732: aload_2
    1733: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
    1736: checkcast     #122                // class java/lang/Number
    1739: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1742: if_icmple     1841
    1745: aload         22
    1747: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
    1750: checkcast     #122                // class java/lang/Number
    1753: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1756: aload_2
    1757: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
    1760: checkcast     #122                // class java/lang/Number
    1763: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1766: if_icmple     1841
    1769: aload         22
    1771: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
    1774: checkcast     #122                // class java/lang/Number
    1777: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1780: aload_3
    1781: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
    1784: checkcast     #122                // class java/lang/Number
    1787: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1790: if_icmpge     1841
    1793: aload         22
    1795: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
    1798: checkcast     #122                // class java/lang/Number
    1801: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1804: aload_3
    1805: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
    1808: checkcast     #122                // class java/lang/Number
    1811: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1814: if_icmpge     1841
    1817: aload         22
    1819: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
    1822: checkcast     #122                // class java/lang/Number
    1825: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1828: aload_3
    1829: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
    1832: checkcast     #122                // class java/lang/Number
    1835: invokevirtual #126                // Method java/lang/Number.intValue:()I
    1838: if_icmplt     1845
    1841: iconst_1
    1842: goto          1846
    1845: iconst_0
    1846: ifeq          1668
    1849: iconst_1
    1850: goto          1854
    1853: iconst_0
    1854: istore        17
    1856: iload         17
    1858: ifeq          1877
    1861: aload         5
    1863: aload         13
    1865: checkcast     #35                 // class java/util/Collection
    1868: invokeinterface #153,  2          // InterfaceMethod java/util/List.addAll:(Ljava/util/Collection;)Z
    1873: pop
    1874: goto          1919
    1877: aload         14
    1879: aload         16
    1881: checkcast     #35                 // class java/util/Collection
    1884: invokeinterface #153,  2          // InterfaceMethod java/util/List.addAll:(Ljava/util/Collection;)Z
    1889: pop
    1890: aload         13
    1892: aload         16
    1894: checkcast     #35                 // class java/util/Collection
    1897: invokeinterface #153,  2          // InterfaceMethod java/util/List.addAll:(Ljava/util/Collection;)Z
    1902: pop
    1903: goto          1277
    1906: aload         4
    1908: aload         13
    1910: checkcast     #35                 // class java/util/Collection
    1913: invokeinterface #153,  2          // InterfaceMethod java/util/List.addAll:(Ljava/util/Collection;)Z
    1918: pop
    1919: iload         10
    1921: iload         11
    1923: if_icmpeq     1932
    1926: iinc          10, 1
    1929: goto          1177
    1932: iload         8
    1934: iload         9
    1936: if_icmpeq     1945
    1939: iinc          8, 1
    1942: goto          1146
    1945: iload         6
    1947: iload         7
    1949: if_icmpeq     1958
    1952: iinc          6, 1
    1955: goto          1115
    1958: aload_0
    1959: checkcast     #22                 // class java/lang/Iterable
    1962: astore        6
    1964: iconst_0
    1965: istore        7
    1967: aload         6
    1969: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    1974: astore        8
    1976: aload         8
    1978: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    1983: ifeq          2246
    1986: aload         8
    1988: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    1993: astore        9
    1995: iload         7
    1997: aload         9
    1999: checkcast     #67                 // class kotlin/Triple
    2002: astore        10
    2004: istore        26
    2006: iconst_0
    2007: istore        11
    2009: aload_1
    2010: checkcast     #22                 // class java/lang/Iterable
    2013: astore        12
    2015: iconst_0
    2016: istore        13
    2018: aload         12
    2020: astore        14
    2022: new           #24                 // class java/util/ArrayList
    2025: dup
    2026: aload         12
    2028: bipush        10
    2030: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
    2033: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
    2036: checkcast     #35                 // class java/util/Collection
    2039: astore        15
    2041: iconst_0
    2042: istore        16
    2044: aload         14
    2046: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    2051: astore        17
    2053: aload         17
    2055: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    2060: ifeq          2105
    2063: aload         17
    2065: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    2070: astore        18
    2072: aload         15
    2074: aload         18
    2076: checkcast     #67                 // class kotlin/Triple
    2079: astore        19
    2081: astore        20
    2083: iconst_0
    2084: istore        21
    2086: aload         10
    2088: aload         19
    2090: invokestatic  #92                 // Method plus:(Lkotlin/Triple;Lkotlin/Triple;)Lkotlin/Triple;
    2093: aload         20
    2095: swap
    2096: invokeinterface #63,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
    2101: pop
    2102: goto          2053
    2105: aload         15
    2107: checkcast     #65                 // class java/util/List
    2110: nop
    2111: checkcast     #22                 // class java/lang/Iterable
    2114: astore        12
    2116: nop
    2117: iconst_0
    2118: istore        13
    2120: aload         12
    2122: instanceof    #35                 // class java/util/Collection
    2125: ifeq          2145
    2128: aload         12
    2130: checkcast     #35                 // class java/util/Collection
    2133: invokeinterface #95,  1           // InterfaceMethod java/util/Collection.isEmpty:()Z
    2138: ifeq          2145
    2141: iconst_0
    2142: goto          2233
    2145: iconst_0
    2146: istore        14
    2148: aload         12
    2150: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
    2155: astore        15
    2157: aload         15
    2159: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
    2164: ifeq          2231
    2167: aload         15
    2169: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
    2174: astore        16
    2176: aload         16
    2178: checkcast     #67                 // class kotlin/Triple
    2181: astore        17
    2183: iconst_0
    2184: istore        18
    2186: aload_0
    2187: aload         17
    2189: invokeinterface #98,  2           // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
    2194: ifne          2213
    2197: aload         4
    2199: aload         17
    2201: invokeinterface #98,  2           // InterfaceMethod java/util/List.contains:(Ljava/lang/Object;)Z
    2206: ifne          2213
    2209: iconst_1
    2210: goto          2214
    2213: iconst_0
    2214: ifeq          2157
    2217: iinc          14, 1
    2220: iload         14
    2222: ifge          2157
    2225: invokestatic  #101                // Method kotlin/collections/CollectionsKt.throwCountOverflow:()V
    2228: goto          2157
    2231: iload         14
    2233: nop
    2234: istore        27
    2236: iload         26
    2238: iload         27
    2240: iadd
    2241: istore        7
    2243: goto          1976
    2246: iload         7
    2248: istore        6
    2250: getstatic     #107                // Field java/lang/System.out:Ljava/io/PrintStream;
    2253: iload         6
    2255: invokevirtual #112                // Method java/io/PrintStream.println:(I)V
    2258: return

  private static final kotlin.Triple<java.lang.Integer, java.lang.Integer, java.lang.Integer> plus(kotlin.Triple<java.lang.Integer, java.lang.Integer, java.lang.Integer>, kotlin.Triple<java.lang.Integer, java.lang.Integer, java.lang.Integer>);
    Code:
       0: aload_0
       1: ldc           #218                // String <this>
       3: invokestatic  #224                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: new           #67                 // class kotlin/Triple
       9: dup
      10: aload_0
      11: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
      14: checkcast     #122                // class java/lang/Number
      17: invokevirtual #126                // Method java/lang/Number.intValue:()I
      20: aload_1
      21: invokevirtual #120                // Method kotlin/Triple.getFirst:()Ljava/lang/Object;
      24: checkcast     #122                // class java/lang/Number
      27: invokevirtual #126                // Method java/lang/Number.intValue:()I
      30: iadd
      31: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      34: aload_0
      35: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
      38: checkcast     #122                // class java/lang/Number
      41: invokevirtual #126                // Method java/lang/Number.intValue:()I
      44: aload_1
      45: invokevirtual #135                // Method kotlin/Triple.getSecond:()Ljava/lang/Object;
      48: checkcast     #122                // class java/lang/Number
      51: invokevirtual #126                // Method java/lang/Number.intValue:()I
      54: iadd
      55: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      58: aload_0
      59: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
      62: checkcast     #122                // class java/lang/Number
      65: invokevirtual #126                // Method java/lang/Number.intValue:()I
      68: aload_1
      69: invokevirtual #138                // Method kotlin/Triple.getThird:()Ljava/lang/Object;
      72: checkcast     #122                // class java/lang/Number
      75: invokevirtual #126                // Method java/lang/Number.intValue:()I
      78: iadd
      79: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
      82: invokespecial #84                 // Method kotlin/Triple."<init>":(Ljava/lang/Object;Ljava/lang/Object;Ljava/lang/Object;)V
      85: areturn

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #228                // Method main:()V
       3: return
}


package day20

import java.io.File

fun main() {
    val input = File("src/day20/input.txt").readLines().map { it.toLong() }

    println(grove(mix(input.mapIndexed { index, delta -> index to delta }.toMutableList())))
    println(grove((1..10).fold(input.mapIndexed { index, delta -> index to delta * 811589153L }
        .toMutableList()) { positions, _ -> mix(positions) }))
}

fun mix(positions: MutableList<Pair<Int, Long>>): MutableList<Pair<Int, Long>> {
    positions.indices.forEach { index ->
        val from = positions.indexOfFirst { (initialIndex) -> initialIndex == index }
        val value = positions[from]
        val delta = value.second
        if (delta != 0L) {
            positions.removeAt(from)
            val to = (from + delta).mod(positions.size)
            positions.add(to, value)
        }
    }
    return positions
}

fun grove(positions: List<Pair<Int, Long>>): Long {
    val zeroPosition = positions.indexOfFirst { (_, delta) -> delta == 0L }
    return listOf(1000, 2000, 3000).sumOf { positions[(zeroPosition + it).mod(positions.size)].second }
}

Compiled from "Day20.kt"
public final class day20.Day20Kt {
  public static final void main();
    Code:
       0: new           #8                  // class java/io/File
       3: dup
       4: ldc           #10                 // String src/day20/input.txt
       6: invokespecial #14                 // Method java/io/File."<init>":(Ljava/lang/String;)V
       9: aconst_null
      10: iconst_1
      11: aconst_null
      12: invokestatic  #20                 // Method kotlin/io/FilesKt.readLines$default:(Ljava/io/File;Ljava/nio/charset/Charset;ILjava/lang/Object;)Ljava/util/List;
      15: checkcast     #22                 // class java/lang/Iterable
      18: astore_1
      19: iconst_0
      20: istore_2
      21: aload_1
      22: astore_3
      23: new           #24                 // class java/util/ArrayList
      26: dup
      27: aload_1
      28: bipush        10
      30: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
      33: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
      36: checkcast     #35                 // class java/util/Collection
      39: astore        4
      41: iconst_0
      42: istore        5
      44: aload_3
      45: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      50: astore        6
      52: aload         6
      54: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      59: ifeq          106
      62: aload         6
      64: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      69: astore        7
      71: aload         4
      73: aload         7
      75: checkcast     #51                 // class java/lang/String
      78: astore        8
      80: astore        15
      82: iconst_0
      83: istore        9
      85: aload         8
      87: invokestatic  #57                 // Method java/lang/Long.parseLong:(Ljava/lang/String;)J
      90: nop
      91: invokestatic  #61                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
      94: aload         15
      96: swap
      97: invokeinterface #65,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     102: pop
     103: goto          52
     106: aload         4
     108: checkcast     #67                 // class java/util/List
     111: nop
     112: astore_0
     113: aload_0
     114: checkcast     #22                 // class java/lang/Iterable
     117: astore_1
     118: iconst_0
     119: istore_2
     120: aload_1
     121: astore_3
     122: new           #24                 // class java/util/ArrayList
     125: dup
     126: aload_1
     127: bipush        10
     129: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     132: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
     135: checkcast     #35                 // class java/util/Collection
     138: astore        4
     140: iconst_0
     141: istore        5
     143: iconst_0
     144: istore        6
     146: aload_3
     147: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     152: astore        7
     154: aload         7
     156: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     161: ifeq          234
     164: aload         7
     166: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     171: astore        8
     173: aload         4
     175: iload         6
     177: iinc          6, 1
     180: istore        9
     182: iload         9
     184: ifge          190
     187: invokestatic  #70                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     190: iload         9
     192: aload         8
     194: checkcast     #72                 // class java/lang/Number
     197: invokevirtual #76                 // Method java/lang/Number.longValue:()J
     200: lstore        10
     202: istore        12
     204: astore        15
     206: iconst_0
     207: istore        13
     209: iload         12
     211: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     214: lload         10
     216: invokestatic  #61                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     219: invokestatic  #87                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     222: aload         15
     224: swap
     225: invokeinterface #65,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     230: pop
     231: goto          154
     234: aload         4
     236: checkcast     #67                 // class java/util/List
     239: nop
     240: checkcast     #35                 // class java/util/Collection
     243: invokestatic  #91                 // Method kotlin/collections/CollectionsKt.toMutableList:(Ljava/util/Collection;)Ljava/util/List;
     246: invokestatic  #95                 // Method mix:(Ljava/util/List;)Ljava/util/List;
     249: invokestatic  #99                 // Method grove:(Ljava/util/List;)J
     252: lstore_1
     253: getstatic     #105                // Field java/lang/System.out:Ljava/io/PrintStream;
     256: lload_1
     257: invokevirtual #111                // Method java/io/PrintStream.println:(J)V
     260: new           #113                // class kotlin/ranges/IntRange
     263: dup
     264: iconst_1
     265: bipush        10
     267: invokespecial #116                // Method kotlin/ranges/IntRange."<init>":(II)V
     270: checkcast     #22                 // class java/lang/Iterable
     273: astore_1
     274: aload_0
     275: checkcast     #22                 // class java/lang/Iterable
     278: astore_2
     279: iconst_0
     280: istore_3
     281: aload_2
     282: astore        4
     284: new           #24                 // class java/util/ArrayList
     287: dup
     288: aload_2
     289: bipush        10
     291: invokestatic  #30                 // Method kotlin/collections/CollectionsKt.collectionSizeOrDefault:(Ljava/lang/Iterable;I)I
     294: invokespecial #33                 // Method java/util/ArrayList."<init>":(I)V
     297: checkcast     #35                 // class java/util/Collection
     300: astore        5
     302: iconst_0
     303: istore        6
     305: iconst_0
     306: istore        7
     308: aload         4
     310: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     315: astore        8
     317: aload         8
     319: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     324: ifeq          401
     327: aload         8
     329: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     334: astore        9
     336: aload         5
     338: iload         7
     340: iinc          7, 1
     343: istore        10
     345: iload         10
     347: ifge          353
     350: invokestatic  #70                 // Method kotlin/collections/CollectionsKt.throwIndexOverflow:()V
     353: iload         10
     355: aload         9
     357: checkcast     #72                 // class java/lang/Number
     360: invokevirtual #76                 // Method java/lang/Number.longValue:()J
     363: lstore        11
     365: istore        13
     367: astore        15
     369: iconst_0
     370: istore        14
     372: iload         13
     374: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     377: lload         11
     379: ldc2_w        #117                // long 811589153l
     382: lmul
     383: invokestatic  #61                 // Method java/lang/Long.valueOf:(J)Ljava/lang/Long;
     386: invokestatic  #87                 // Method kotlin/TuplesKt.to:(Ljava/lang/Object;Ljava/lang/Object;)Lkotlin/Pair;
     389: aload         15
     391: swap
     392: invokeinterface #65,  2           // InterfaceMethod java/util/Collection.add:(Ljava/lang/Object;)Z
     397: pop
     398: goto          317
     401: aload         5
     403: checkcast     #67                 // class java/util/List
     406: nop
     407: checkcast     #35                 // class java/util/Collection
     410: invokestatic  #91                 // Method kotlin/collections/CollectionsKt.toMutableList:(Ljava/util/Collection;)Ljava/util/List;
     413: astore_2
     414: nop
     415: iconst_0
     416: istore_3
     417: aload_2
     418: astore        4
     420: aload_1
     421: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     426: astore        5
     428: aload         5
     430: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     435: ifeq          465
     438: aload         5
     440: checkcast     #120                // class kotlin/collections/IntIterator
     443: invokevirtual #124                // Method kotlin/collections/IntIterator.nextInt:()I
     446: istore        6
     448: aload         4
     450: astore        8
     452: iconst_0
     453: istore        9
     455: aload         8
     457: invokestatic  #95                 // Method mix:(Ljava/util/List;)Ljava/util/List;
     460: astore        4
     462: goto          428
     465: aload         4
     467: invokestatic  #99                 // Method grove:(Ljava/util/List;)J
     470: lstore_1
     471: getstatic     #105                // Field java/lang/System.out:Ljava/io/PrintStream;
     474: lload_1
     475: invokevirtual #111                // Method java/io/PrintStream.println:(J)V
     478: return

  public static final java.util.List<kotlin.Pair<java.lang.Integer, java.lang.Long>> mix(java.util.List<kotlin.Pair<java.lang.Integer, java.lang.Long>>);
    Code:
       0: aload_0
       1: ldc           #159                // String positions
       3: invokestatic  #165                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: checkcast     #35                 // class java/util/Collection
      10: invokestatic  #169                // Method kotlin/collections/CollectionsKt.getIndices:(Ljava/util/Collection;)Lkotlin/ranges/IntRange;
      13: checkcast     #22                 // class java/lang/Iterable
      16: astore_1
      17: iconst_0
      18: istore_2
      19: aload_1
      20: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
      25: astore_3
      26: aload_3
      27: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      32: ifeq          245
      35: aload_3
      36: checkcast     #120                // class kotlin/collections/IntIterator
      39: invokevirtual #124                // Method kotlin/collections/IntIterator.nextInt:()I
      42: istore        4
      44: iload         4
      46: istore        5
      48: iconst_0
      49: istore        6
      51: aload_0
      52: astore        7
      54: iconst_0
      55: istore        8
      57: iconst_0
      58: istore        9
      60: aload         7
      62: invokeinterface #170,  1          // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
      67: astore        10
      69: aload         10
      71: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      76: ifeq          137
      79: aload         10
      81: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      86: astore        11
      88: aload         11
      90: checkcast     #172                // class kotlin/Pair
      93: astore        12
      95: iconst_0
      96: istore        13
      98: aload         12
     100: invokevirtual #175                // Method kotlin/Pair.component1:()Ljava/lang/Object;
     103: checkcast     #72                 // class java/lang/Number
     106: invokevirtual #178                // Method java/lang/Number.intValue:()I
     109: istore        14
     111: iload         14
     113: iload         5
     115: if_icmpne     122
     118: iconst_1
     119: goto          123
     122: iconst_0
     123: ifeq          131
     126: iload         9
     128: goto          138
     131: iinc          9, 1
     134: goto          69
     137: iconst_m1
     138: istore        15
     140: aload_0
     141: iload         15
     143: invokeinterface #182,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     148: checkcast     #172                // class kotlin/Pair
     151: astore        7
     153: aload         7
     155: invokevirtual #185                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     158: checkcast     #72                 // class java/lang/Number
     161: invokevirtual #76                 // Method java/lang/Number.longValue:()J
     164: lstore        16
     166: lload         16
     168: lconst_0
     169: lcmp
     170: ifeq          240
     173: aload_0
     174: iload         15
     176: invokeinterface #188,  2          // InterfaceMethod java/util/List.remove:(I)Ljava/lang/Object;
     181: pop
     182: iload         15
     184: i2l
     185: lload         16
     187: ladd
     188: lstore        18
     190: aload_0
     191: invokeinterface #191,  1          // InterfaceMethod java/util/List.size:()I
     196: i2l
     197: lstore        20
     199: lload         18
     201: lload         20
     203: lrem
     204: lstore        22
     206: lload         22
     208: lload         20
     210: lload         22
     212: lload         20
     214: lxor
     215: lload         22
     217: lload         22
     219: lneg
     220: lor
     221: land
     222: bipush        63
     224: lshr
     225: land
     226: ladd
     227: l2i
     228: istore        10
     230: aload_0
     231: iload         10
     233: aload         7
     235: invokeinterface #194,  3          // InterfaceMethod java/util/List.add:(ILjava/lang/Object;)V
     240: nop
     241: nop
     242: goto          26
     245: nop
     246: aload_0
     247: areturn

  public static final long grove(java.util.List<kotlin.Pair<java.lang.Integer, java.lang.Long>>);
    Code:
       0: aload_0
       1: ldc           #159                // String positions
       3: invokestatic  #165                // Method kotlin/jvm/internal/Intrinsics.checkNotNullParameter:(Ljava/lang/Object;Ljava/lang/String;)V
       6: aload_0
       7: astore_2
       8: iconst_0
       9: istore_3
      10: iconst_0
      11: istore        4
      13: aload_2
      14: invokeinterface #170,  1          // InterfaceMethod java/util/List.iterator:()Ljava/util/Iterator;
      19: astore        5
      21: aload         5
      23: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
      28: ifeq          89
      31: aload         5
      33: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
      38: astore        6
      40: aload         6
      42: checkcast     #172                // class kotlin/Pair
      45: astore        7
      47: iconst_0
      48: istore        8
      50: aload         7
      52: invokevirtual #210                // Method kotlin/Pair.component2:()Ljava/lang/Object;
      55: checkcast     #72                 // class java/lang/Number
      58: invokevirtual #76                 // Method java/lang/Number.longValue:()J
      61: lstore        9
      63: lload         9
      65: lconst_0
      66: lcmp
      67: ifne          74
      70: iconst_1
      71: goto          75
      74: iconst_0
      75: ifeq          83
      78: iload         4
      80: goto          90
      83: iinc          4, 1
      86: goto          21
      89: iconst_m1
      90: istore_1
      91: iconst_3
      92: anewarray     #78                 // class java/lang/Integer
      95: astore_2
      96: aload_2
      97: iconst_0
      98: sipush        1000
     101: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     104: aastore
     105: aload_2
     106: iconst_1
     107: sipush        2000
     110: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     113: aastore
     114: aload_2
     115: iconst_2
     116: sipush        3000
     119: invokestatic  #81                 // Method java/lang/Integer.valueOf:(I)Ljava/lang/Integer;
     122: aastore
     123: aload_2
     124: invokestatic  #214                // Method kotlin/collections/CollectionsKt.listOf:([Ljava/lang/Object;)Ljava/util/List;
     127: checkcast     #22                 // class java/lang/Iterable
     130: astore_2
     131: lconst_0
     132: lstore_3
     133: aload_2
     134: invokeinterface #39,  1           // InterfaceMethod java/lang/Iterable.iterator:()Ljava/util/Iterator;
     139: astore        5
     141: aload         5
     143: invokeinterface #45,  1           // InterfaceMethod java/util/Iterator.hasNext:()Z
     148: ifeq          247
     151: aload         5
     153: invokeinterface #49,  1           // InterfaceMethod java/util/Iterator.next:()Ljava/lang/Object;
     158: astore        6
     160: lload_3
     161: aload         6
     163: checkcast     #72                 // class java/lang/Number
     166: invokevirtual #178                // Method java/lang/Number.intValue:()I
     169: istore        7
     171: lstore        12
     173: iconst_0
     174: istore        8
     176: aload_0
     177: iload_1
     178: iload         7
     180: iadd
     181: istore        9
     183: aload_0
     184: invokeinterface #191,  1          // InterfaceMethod java/util/List.size:()I
     189: istore        10
     191: iload         9
     193: iload         10
     195: irem
     196: istore        11
     198: iload         11
     200: iload         10
     202: iload         11
     204: iload         10
     206: ixor
     207: iload         11
     209: iload         11
     211: ineg
     212: ior
     213: iand
     214: bipush        31
     216: ishr
     217: iand
     218: iadd
     219: invokeinterface #182,  2          // InterfaceMethod java/util/List.get:(I)Ljava/lang/Object;
     224: checkcast     #172                // class kotlin/Pair
     227: invokevirtual #185                // Method kotlin/Pair.getSecond:()Ljava/lang/Object;
     230: checkcast     #72                 // class java/lang/Number
     233: invokevirtual #76                 // Method java/lang/Number.longValue:()J
     236: lstore        14
     238: lload         12
     240: lload         14
     242: ladd
     243: lstore_3
     244: goto          141
     247: lload_3
     248: lreturn

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #220                // Method main:()V
       3: return
}