#include <iostream>
#include <vector>
#include <algorithm>
struct vv{
    int c, num;
};
// Функция для сложения двух больших чисел
std::vector<int> add(const std::vector<int>& num1, const std::vector<int>& num2) {
    std::vector<int> result;
    int carry = 0;
    int i = num1.size() - 1;
    int j = num2.size() - 1;
    while (i >= 0 || j >= 0 || carry > 0) {
        int sum = carry;
        if (i >= 0) {
            sum += num1[i];
            i--;
        }
        if (j >= 0) {
            sum += num2[j];
            j--;
        }
        result.push_back(sum % 10);
        carry = sum / 10;
    }
    std::reverse(result.begin(), result.end());
    return result;
}
// Функция для вывода большого числа
void printBigNumber(const std::vector<int>& number) {
    int cnt = 0;
    std::vector<vv> kk;
    for (int k = 0; k < number.size(); ++k) {
        if (k + 1 < number.size()) {
            if (number[k] == number[k + 1]) {
                cnt++;
            } else {
                kk.push_back({cnt+1, number[k]});
                cnt = 0;
            }
        } else {
            kk.push_back({cnt+1, number[k]});
        }
    }
    std::cout << kk.size() << std::endl;
    for(auto j : kk){
        std::cout << j.c << ' ' << j.num <<'\n';
    }
}
int main() {
    int n;
    std::vector<int>num1;
    std::vector<int>num2;
    std::cin >> n;
    for(int i = 0; i < n; ++i){
        int q;
        int num;
        std::cin >> q >> num;
        for(int j =0; j < q; ++j){
            num1.push_back(num);
        }
    }
    std::cin >> n;
    for(int i = 0; i < n; ++i){
        int q;
        int num;
        std::cin >> q >> num;
        for(int j =0; j < q; ++j){
            num2.push_back(num);
        }
    }
    std::vector<int> sum = add(num1, num2);
    printBigNumber(sum);
    return 0;
}#include <iostream>
#include <vector>
#include <algorithm>
struct vv{
    int c, num;
};
// Функция для вывода большого числа
void printBigNumber(const std::vector<int>& number) {
    int cnt = 0;
    std::vector<vv> kk;
    for (int k = 0; k < number.size(); ++k) {
        if (k + 1 < number.size()) {
            if (number[k] == number[k + 1]) {
                cnt++;
            } else {
                kk.push_back({cnt+1, number[k]});
                cnt = 0;
            }
        } else {
            kk.push_back({cnt+1, number[k]});
        }
    }
    std::cout << kk.size() << std::endl;
    for(auto j : kk){
        std::cout << j.c << ' ' << j.num <<'\n';
    }
}
int main() {
    int n;
    std::vector<int>num1;
    std::vector<int>num2;
    std::cin >> n;
    for(int i = 0; i < n; ++i){
        int q;
        int num;
        std::cin >> q >> num;
        for(int j =0; j < q; ++j){
            num1.push_back(num);
        }
    }
    std::cin >> n;
    for(int i = 0; i < n; ++i){
        int q;
        int num;
        std::cin >> q >> num;
        for(int j =0; j < q; ++j){
            num2.push_back(num);
        }
    }
    if(num1.size() > num2.size()){
        int len = num1.size() - 1;
        for(int j = num2.size(); j > -1;j--){
            int pr = num1[len]+num2[j];
            if(pr > 9) {
                int ost = pr%10;
                num1[len] = num1[len] + ost;
                num1[len - 1]++;
            }
            else{
                num1[j] += pr;
            }
            len--;
        }
    }
    for(int h = num1.size(); h > -1; h){
        if(num1[h] > 9){
            num1[h-1]++;
            num1[h] = 0;
        }
        h--;
    }
    printBigNumber(num1);
    return 0;
}num1.size() <= num2.size(). Во-вторых, в конце, где вы нормализуете число, если там окажется 11, где-то, то вы оставите в этом разряде 0, а не 1, как надо. Правда, при сумме двух чисел там 11 получится за длиной максимального числа не может появиться, ибо туда может прийти только +1 от переноса. Но код все-равно логически неверен.