function bits = annas(n)
% anna's algorithm for generating long reversal-free strings.
% step 1:
% generate all members of A (assymmetrics / nonpalindromes)
bc = binaryCombinations(n);
bcr = bc(:,end:-1:1);

% 1.1 find palindromes
palindromeQ = binaryRowEqual(bc, bcr);

% 1.2 find lexicographically-lower half of assymetrics
valvec = getValvec(n);
bcv = bc*valvec;
bcrv = bcr*valvec;
lexicographicallyLower = bcv<bcrv;

% 1.3 separate out the chosen strings
assym = bc((~palindromeQ) & lexicographicallyLower, :);
assymv = assym*valvec;

% step 3:
% build a backwards-directed graph
backAdjMat = backedges(n, assym);

crossoverNodes = crossovers(n, assym, bcv, lexicographicallyLower, palindromeQ);

% step 4:
% dfs the graph from 0*1 to find the longest path
% (TODO: try everywhere)
nodeList = diameter(crossoverNodes, backAdjMat);

% reverse the nodeList, since it was discovered on a backwards adj mat
nodeList = nodeList(end:-1:1);

% step 5: extract bits
bits = [assym(nodeList(1),:), assym(nodeList(2:end),end)'];

checkString(n,bits);

% step 6: negate and reverse

%[(1:size(adjMat,1))', adjMat]
%assym(nodeList,:)
