#!/usr/bin/env python

'''
  Autoriai:
    Tumas Bajoras PS3
    Laurynas Grumbinas PS3
'''

""" user_memory - module that represent user memory. (256 block, each made up of 16 words. Each word consists of 4B)
"""

import sys
sys.path.append('.')
from configs import *

import processor
from kernel.helpers import logger

# real address is in hex:
#    0FFF

def fetch(real_address):
    """ fetch one word from user memory
     
     PARAMETERS:
      real_address - hex value in format ????
          0FFF - maximum possible value
    """
    global memory

    block = processor.to_int(real_address) / BLOCK_SIZE
    word = processor.to_int(real_address) % BLOCK_SIZE

    if processor.mode == 1:
        if block < PAGE_TABLE_ENDING_BLOCK:
            processor.pi = 1
            return 
    elif block > USER_ENDING_BLOCK:
        processor.pi = 1
        return 

    return memory[block][word]

def write(word_to_write, real_address):
    """ write word to the specified location 
    
    PARAMETERS:
      real_address - hex value in format ????
    """
    global memory

    block = processor.to_int(real_address) / BLOCK_SIZE
    word = processor.to_int(real_address) % BLOCK_SIZE

    if processor.mode == 1:
        if block <= PAGE_TABLE_ENDING_BLOCK:
            processor.pi = 1
            return 
    elif block > USER_ENDING_BLOCK:
        processor.pi = 1
        return 

    memory[block][word] = word_to_write[0:4]

def occupy_empty_area(number_of_words):
    ''' find given number of words in user memory and marks them read. 
          Returns None if occupation was not possible 
          Returns array of real addresses.
    '''
    addresses = []
    recov = []
    enough = True
    block = USER_STARTING_BLOCK
    word = 0
    i = 0

    while len(addresses) != number_of_words:
        if memory[block][word] == []:
            addresses.append(processor.to_hex(block * BLOCK_SIZE + word))
            memory[block][word] = 'X'
            recov.append([block, word])
        word += 1 
        if word == BLOCK_SIZE:
            block += 1
            word = 0
        if block == USER_ENDING_BLOCK:
            # recover occupied areas
            for addr in recov:
                memory[addr[0]][addr[1]] = []
            return None
        i += 1

    logger.log("Addreses occupied: " + str(addresses))
    return addresses

# write operation overwrites word elements from [] to "BLAH"
memory = [
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  #  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR 
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR 
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR 
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR    
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # PTR  
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH MEMORY
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # SH
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],  # VM ..
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
      [ [], [], [], [], [], [], [], [], [], [], [], [], [], [], [], [] ],
    ]
