// Two-dimensional array types
class TwoDim<region R> {
// Default RPL
int[][] defaultRPL;
// Root bound to RPL, first only
int[]<Root>[] rootFirst;
// Root bound to RPL, second only
int[][]<Root> rootSecond;
// Root bound to both
int[]<Root>[]<Root> rootBoth;
// Index-parameterized RPL first
int[]<[i]>#i[] indexParamRPLFirst;
// Index-parameterized RPL second
int[][]<[i]>#i indexParamRPLSecond;
// Index-parameterized RPL both
int[]<[i]>#i[]<[i]> indexParamRPLBoth;
// Index-parameterized type first
TwoDim<[i]>[]#i[] indexParamTypeFirst;
// Index-parameterized type second
TwoDim<[i]>[][]#i indexParamTypeSecond;
// Two indices
TwoDim<[i]:[j]>[]<[i]>#i[]<[i]:[j]>#j twoIndices;
}