#include <iostream>
#include <vector>
#include  <utility>
using namespace std;
 
void myfUNC(std::vector<std::pair<unsigned int,unsigned int>>& smallGateBucketList)
{
    unsigned int idx = 0;
    unsigned int lastIdx = smallGateBucketList.size() - 1;
    while(idx < lastIdx){
        unsigned int& pSubGateBucket = smallGateBucketList[idx].first;
        unsigned int& remSubBucketSize = smallGateBucketList[idx].second;
        unsigned int& pLastSubGateBucket = smallGateBucketList[lastIdx].first;
        if(remSubBucketSize >= pLastSubGateBucket) {
            smallGateBucketList[idx].second -= pLastSubGateBucket;
            std::cout<<"\n Merged : data 1 : "<<pSubGateBucket<<" , "<<remSubBucketSize;
            std::cout<<" : data 2 : "<<pLastSubGateBucket<<" , "<<smallGateBucketList[lastIdx].second;
            pSubGateBucket += pLastSubGateBucket;
            smallGateBucketList[lastIdx].second += pLastSubGateBucket;
            lastIdx--;
            pLastSubGateBucket = 0;
        }
        else{
            ++idx;
        }
    }
}
 
int main() {
    cout << "Hello Geek!";
    //std::vector<std::pair<int,int>> kk;
    //kk.push_back(make_pair(2,2));
    std::vector<std::pair<unsigned int,unsigned int>> smallGateBucketList;
    smallGateBucketList.push_back(make_pair(7, 3));
    smallGateBucketList.push_back(make_pair(6, 4));
    smallGateBucketList.push_back(make_pair(3, 7));
    smallGateBucketList.push_back(make_pair(3, 7));
    smallGateBucketList.push_back(make_pair(2, 8));
    smallGateBucketList.push_back(make_pair(2, 8));
    smallGateBucketList.push_back(make_pair(2, 8));
    smallGateBucketList.push_back(make_pair(2, 8));
    smallGateBucketList.push_back(make_pair(2, 8));
 
    myfUNC(smallGateBucketList);
    for(auto& data : smallGateBucketList){
        std::cout<<"\n data : "<<data.first<<" , "<<data.second;
    }
    return 0;
}