//该题目的难点是容易忽略边界情况下的操作(栈满时的入栈,栈空时的出栈)
class SetOfStacks {
public:
    vector<vector<int> > setOfStacks(vector<vector<int> > ope, int size) {
        // write code here
        vector<vector<int>> set;
        vector<int> s;
        for(int i=0; i<ope.size();i++){
            if(ope[i][0]==1){
                if(s.size()<size)
                        s.push_back(ope[i][1]);                   
                //栈未满,则入栈
                else{
                    set.push_back(s);
                    s.clear();
                    s.push_back(ope[i][1]); 
                }//栈满,将其加入集合,然后清空该栈(等同于创了个新栈)
            }
            else{
                if(s.size()>0){
                    s.pop_back();
                }//栈非空,出栈
                else{
                    if(!set.empty()){
                        s=set[set.size()-1];
                        set.pop_back();
                        s.pop_back();
                    }
                }//栈空,若集合非空,则获取上个存满的栈,将其出栈
            }
            
        }
        if(!s.empty()) set.push_back(s);//由于满了的栈才会加入集合,所以最后可能剩下没满的栈还没加入
        return set;
    }  
};