#include <iostream>
#include <map>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
map<int,int> kol[2'007];
map<int,int> rze[2'007];
vector<pair<char,pair<int,char> > > rozkaz;
int tab[2'007][2'007];
queue<pair<int,int> > kolej;
int main()
{
    ios_base::sync_with_stdio(0);
    cout.tie(0);
    cin.tie(0);
    string s;
    int n, m, p;
    cin>>n>>m;
    for(int a=0; a<n; a++)
    {
        cin>>s;
        for(int i=0; i<m; i++)
            tab[a][i]=(s[i]-'A'+1);
    }
    for(int a=0; a<n; a++){
        for(int i=0; i<m; i++)
            rze[a][tab[a][i]]++;
    }
    for(int a=0; a<m; a++){
        for(int i=0; i<n; i++)
            kol[a][tab[i][a]]++;
    }
    /*for(int a=0; a<n; a++)
        cout<<rze[a].size()<<" ";
    cout<<endl;
    for(int a=0; a<m; a++)
        cout<<kol[a].size()<<" ";*/
    for(int a=0; a<n; a++){
        if(rze[a].size()==1){
            kolej.push({0,a});
            rozkaz.push_back({'R',{a+1,char((rze[a].begin()->first)+'A'-1)}});
            rze[a].clear();
        }
    }
    for(int a=0; a<m; a++){
        if(kol[a].size()==1){
            kolej.push({1,a});
            rozkaz.push_back({'K',{a+1,char((kol[a].begin()->first)+'A'-1)}});
            kol[a].clear();
        }
    }
    while(!kolej.empty())
    {
        p=kolej.front().second;
        if(kolej.front().first==0)
        {
            kolej.pop();
            for(int a=0; a<m; a++)
            {
                kol[a][tab[p][a]]--;
                if(kol[a][tab[p][a]]<1)
                    kol[a].erase(tab[p][a]);
                if(kol[a].size()==1){
                    kolej.push({1,a});
                    rozkaz.push_back({'K',{a+1,char((kol[a].begin()->first)+'A'-1)}});
                    kol[a].clear();
                }
            }
        }
        else
        {
            kolej.pop();
            for(int a=0; a<n; a++)
            {
                rze[a][tab[a][p]]--;
                if(rze[a][tab[a][p]]<1)
                    rze[a].erase(tab[a][p]);
                if(rze[a].size()==1){
                    kolej.push({0,a});
                    rozkaz.push_back({'R',{a+1,char((rze[a].begin()->first)+'A'-1)}});
                    rze[a].clear();
                }
            }
        }
    }
    reverse(rozkaz.begin() , rozkaz.end());
    cout<<rozkaz.size()<<"\n";
    for(int a=0; a<rozkaz.size(); a++)
        cout<<rozkaz[a].first<<" "<<rozkaz[a].second.first<<" "<<rozkaz[a].second.second<<"\n";
}
        1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97  | #include <iostream> #include <map> #include <vector> #include <queue> #include <algorithm> using namespace std; map<int,int> kol[2'007]; map<int,int> rze[2'007]; vector<pair<char,pair<int,char> > > rozkaz; int tab[2'007][2'007]; queue<pair<int,int> > kolej; int main() { ios_base::sync_with_stdio(0); cout.tie(0); cin.tie(0); string s; int n, m, p; cin>>n>>m; for(int a=0; a<n; a++) { cin>>s; for(int i=0; i<m; i++) tab[a][i]=(s[i]-'A'+1); } for(int a=0; a<n; a++){ for(int i=0; i<m; i++) rze[a][tab[a][i]]++; } for(int a=0; a<m; a++){ for(int i=0; i<n; i++) kol[a][tab[i][a]]++; } /*for(int a=0; a<n; a++) cout<<rze[a].size()<<" "; cout<<endl; for(int a=0; a<m; a++) cout<<kol[a].size()<<" ";*/ for(int a=0; a<n; a++){ if(rze[a].size()==1){ kolej.push({0,a}); rozkaz.push_back({'R',{a+1,char((rze[a].begin()->first)+'A'-1)}}); rze[a].clear(); } } for(int a=0; a<m; a++){ if(kol[a].size()==1){ kolej.push({1,a}); rozkaz.push_back({'K',{a+1,char((kol[a].begin()->first)+'A'-1)}}); kol[a].clear(); } } while(!kolej.empty()) { p=kolej.front().second; if(kolej.front().first==0) { kolej.pop(); for(int a=0; a<m; a++) { kol[a][tab[p][a]]--; if(kol[a][tab[p][a]]<1) kol[a].erase(tab[p][a]); if(kol[a].size()==1){ kolej.push({1,a}); rozkaz.push_back({'K',{a+1,char((kol[a].begin()->first)+'A'-1)}}); kol[a].clear(); } } } else { kolej.pop(); for(int a=0; a<n; a++) { rze[a][tab[a][p]]--; if(rze[a][tab[a][p]]<1) rze[a].erase(tab[a][p]); if(rze[a].size()==1){ kolej.push({0,a}); rozkaz.push_back({'R',{a+1,char((rze[a].begin()->first)+'A'-1)}}); rze[a].clear(); } } } } reverse(rozkaz.begin() , rozkaz.end()); cout<<rozkaz.size()<<"\n"; for(int a=0; a<rozkaz.size(); a++) cout<<rozkaz[a].first<<" "<<rozkaz[a].second.first<<" "<<rozkaz[a].second.second<<"\n"; }  | 
            
        
                    English