struct Tree{ Tree(Tree *parent) {bla} Tree *parent; Tree *children[10]; char ch; int pos1;};Tree *root = new Tree; // корень дереваTree *current = root; // текущий элементint pos = 0; // начало числаfor(int i = 0; i < K; i++) { char c = str[i]; if (c != ' ') { int val = c - '0'; if (!current->children[val]) { current->children[val] = new Tree(current); current = current->children[val]; } } else { // дошли до конца числа, листовой нод current->pos1 = pos; // записываем начало числа current = root; // возвращаемся в корень дерева pos = i + 1; // новое число (допустим для простоты что пробел одинарный) }}for(int i = 0; i < N; i++) {тут похожий цикл, но новые ноды не создаем, а если получили лишнюю цифру, то просто скипаем это число до пробела (т.к. в дереве его уже нет)когда доходим до пробела, достаем из current pos1 и печатаем ее и текущую в строке 2}