Ограничение MQL или как правильно представить такие данные?

[Удален]  

Есть набор валют, допустим :

EURUSD,AUDUSD,USDCHF,GBPUSD,EURGBP

Пытаюсь сформировать из них все возможные наборы, например : 

1. EURUSD, EURUSD + AUDUSD, EURUSD + AUDUSD + USDCHF, EURUSD + AUDUSD + USDCHF + GBPUSD, EURUSD + AUDUSD + USDCHF + GBPUSD + EURGBP
2. AUDUSD, AUDUSD + EURUSD, AUDUSD + EURUSD + USDCHF, AUDUSD + EURUSD + USDCHF + GBPUSD, AUDUSD + EURUSD + USDCHF + GBPUSD + EURGBP
3. USDCHF ...

Всего пар 39, т.е. наборов может получится 39 * 39 = 1521

Сначала попытался сделать рекурсией, заполняя массив структур groups, точный код, если надо скину, чуть позже, сейчас по памяти :

GetGroups(SPairs &pairs[], SGroups &groups, const int level = 0)
{
    int groupsCount = ArraySize(groups);
    int pairsCount = ArraySize(pairs);

    if (level + 1 > groupsCount)
    {
        ArrayResize(groups, level + 1); 
    }

    for (int k = 0; k < pairsCount; k++)
    {
        groups[level].mName += pairs[k].mName;

        if (level < pairsCount)
        {
            GetGroups(pairs, groups, level + 1)
        }
    }
}

В результате скрипт подвисает, я так понимаю, это ограничение размера стека вызовов сказывается?

Попробовал без рекурсии, через создание матрицы строк : 

EURUSD EURUSD:AUDUSD EURUSD:AUDUSD:USDCHF EURUSD:AUDUSD:USDCHF:GBPUSD EURUSD:AUDUSD:USDCHF:GBPUSD:EURGBP
AUDUSD AUDUSD:EURUSD AUDUSD:EURUSD:USDCHF AUDUSD:EURUSD:USDCHF:GBPUSD AUDUSD:EURUSD:USDCHF:GBPUSD:EURGBP
USDCHF ...

При выделении памяти ошибка "Too low memory ..."

Вопрос : как можно представить вышеупомянутые данные?

 
Вообще-то полный набор это не 39^2 а (2^39)-1