private void trySearch(int k) {
		// loai bo cac o de bai
		while (k < SIZE * SIZE && matrix[k / SIZE][k % SIZE] != 0) {
			k++;
		}

		if (k == SIZE * SIZE)
			return;

		int row = k / SIZE, col = k % SIZE;

		for (int x = 1; x <= SIZE; x++) { // duyet cac TH
			if (isOK(row, col, x)) {
				matrix[row][col] = x;
				if (k == lastK) {
					int[][] rs = new int[SIZE][SIZE];
					// copy ket qua sang 1 array khac
					for (int i = 0; i < SIZE; i++) {
						for (int j = 0; j < SIZE; j++) {
							rs[i][j] = matrix[i][j];
						}
					}
					results.add(rs); // them vao list
				} else {
					trySearch(k + 1);
				}
				matrix[row][col] = 0;
			}
		}
	}