I'm having trouble in solving the problem as the attached image show.

I only use "basic" rules to get there:

1. if ONE unit in a row / column / square has ONE fixed value, other unites in the same row / column / square can not have this value;

2. if ONE unit in a row / column / square has a possbile value and no other units in the same row / column / square has this possbile value, this value is fixed for this row;

3. if two units in a row / column / square have the same two possible values, other units in the same row / column / square can not have these two values;

4. if two units in a row / column has a same possible value and no other units in the same row / column has this value and these two units are contained in one square, other units of the square can not have this value.

Similarly, if two units in a square has a same possible value and no other units in the same square has this value and these two units are contained in one row / column, other units of the row / column can not have this value.

I know there are more advanced techniques to apply. My intention is to implement real hardware solver and the above four rules are more feasible than those advanced rules.

Interestedly, applying the above 4 rules iteratively is able to solve quite some "hard problems". However, there are some problems I can not solve.

For the attached puzzle, anybody can give me some suggestion that what other techniques I must apply to solve the problem?