I think it must be a constant array
unsigned char Duals[N][N]=
{
0, 0, 32, 48, 128, 48, 64, 16,
128, 0, 64, 16, 0, 0, 32, 48,
64, 16, 0, 0, 32, 48, 128, 48,
* * *
48, 64, 16, 0, 0, 32, 48, 0
};
keeping dual challenge weights. Sorry for my C.
N = number of single challenges.
0 = not compatible
non-0 = minimal rank
On first screen, all strings are active. On second screen, when line is selected, unlocked challenges from this line are active, locked ones are inactive and "zeroed" (such as AoMark + AoShot or anything + itself) are not even shown.
And I don't think Ao100 + AoLT is THAT difficult. Most inventory-restricted challenges such as AoMark and AoShot are less difficult with Ao100.