function rowsWithProperty = findLastTwoOccurrenes(M)

% Initialise rowsWithProperty to a 2x1 vector 
rowsWithProperty = zeros(2,1);

% Method: Scan from the last row and up
% If a row if the property is found
% - Increase numRowsFound (= a number to keep track of the number of rows 
%   with the property; initially set to 0)
% - Increase indexForRowsWithProperty (= an index to store row numbers
%   found in the answer rowsWithProperty; initially set to 1) 
%
% row is the row number to be checked. It's initialised to the number of
% rows in the matrix M. Decrease by 1 each time a row has been checked. 
numRowsFound = 0;
indexForRowsWithProperty = 1; 
row = size(M,1); 

% Iterate as long has 2 rows with the property has not been found and there
% are still rows to check 
while (numRowsFound < 2) & (row >= 1)  % Can use & or && 
    if isPropertySatisfied(M(row,:))
        % a row with the property has been found 
        rowsWithProperty(indexForRowsWithProperty) = row;
        indexForRowsWithProperty = indexForRowsWithProperty + 1;
        numRowsFound = numRowsFound + 1;
    end
    row = row - 1;
end

% Remove zero entries in rowsWithProprty 
if row == 0 
    rowsWithProperty = rowsWithProperty(1:numRowsFound);
end     
% Alternative Method:
% rowsWithProperty(rowsWithProperty == 0) = [];
