/**
  * suggestion item
  * @param string $size
  * @param string $matrix
  * @param string $matrix_origin
  */
 public static function hwdoku_suggest_item($size, $matrix, $matrix_origin)
 {
     #$size = self::getSize();    //get sudoku size
     $i = $_GET['i'];
     $j = $_GET['j'];
     $matrix_origin = unserialize($matrix_origin);
     $matrix = unserialize($matrix);
     //compare with matrix original to get item
     $game1 = new HQ_Sudoku($size);
     $game1->grid = $matrix_origin;
     #var_dump($matrix_origin);
     $item_value = $game1->get_item($i, $j);
     echo $i . '-' . $j . '=>' . $item_value;
     $game1->grid = $matrix;
     $game1->set_item($i, $j, $item_value);
     $done = $game1->is_full_matrix() ? '*[DONE]' : '';
     echo '<textarea>' . $item_value . '*' . $game1->matrix_string() . $done . '</textarea>';
 }
        exit;
    }
} elseif ($_GET['do'] == 'suggest_item') {
    $i = $_GET['i'];
    $j = $_GET['j'];
    $matrix_origin = unserialize($_GET['matrix_origin']);
    $matrix = unserialize($_GET['matrix']);
    //compare with matrix original to get item
    $game1 = new HQ_Sudoku($size);
    $game1->grid = $matrix_origin;
    var_dump($matrix_origin);
    $item_value = $game1->get_item($i, $j);
    echo $i . '-' . $j . '=>' . $item_value;
    $game1->grid = $matrix;
    $game1->set_item($i, $j, $item_value);
    $done = $game1->is_full_matrix() ? '*[DONE]' : '';
    echo '<textarea>' . $item_value . '*' . $game1->matrix_string() . $done . '</textarea>';
} elseif ($_GET['do'] == 'valid_game') {
    $matrix = unserialize($_GET['matrix']);
    $items_string = $_GET['items_string'];
    $items = explode(',', $items_string);
    $game1 = new HQ_Sudoku($size);
    $game1->grid = $matrix;
    $valid = 1;
    foreach ($items as $v) {
        $item = explode(':', $v);
        $ij = explode('-', $item[0]);
        $game1->set_item($ij[0], $ij[1], $item[1]);
    }
    foreach ($items as $v) {
        $item = explode(':', $v);