Advertisement
Riz1Ahmed

CodeChef - Convert the String (CONVSTR)

May 30th, 2020
862
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.06 KB | None | 0 0
  1.   /****Bismillahir*Rahmanir*Rahim*******
  2.  *         Riz1 Ahmed, CSE, LU.        *
  3.  *          fb.com/riz1ahmed           *
  4.  *  Code Start Time: 2020-05-30-20.52  *
  5.  *************************************/
  6. #include<bits/stdc++.h>
  7. #define ll long long int
  8. #define Fast ios_base::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  9. #define PrintV(v) for(auto i:v)cout<<i<<" ";puts("");
  10. #define FOR(i,l,r) for(ll i=l;i<=r;i++)
  11. using namespace std;
  12. const ll Mod=1e9+7,MX=1e7,MN=LLONG_MIN;
  13. void Print(ll a,ll b=MN,ll c=MN,ll d=MN) {
  14.     printf("%lld",a);
  15.     if (b!=MN) printf(" %lld",b);
  16.     if (c!=MN) printf(" %lld",c);
  17.     if (d!=MN) printf(" %lld",d);
  18.     puts("");
  19. }
  20.  
  21. int main(){
  22.     ll n;
  23.     char a[1005],b[1005];
  24.     scanf("%*d");
  25.     while(~scanf("%lld %s %s",&n,a,b)){
  26.         ll pos[123], f=1 ,i;
  27.         for (i=0;i<n && f;i++) if (a[i]<b[i]) f=0;
  28.         for (i='a';i<='z' && f;i++) pos[i]=-1;
  29.         for (i=0;i<n && f;i++) pos[a[i]]=i;
  30.  
  31.         vector< vector<ll> > v;
  32.         vector<ll> let[123];
  33.         for (i=0;i<n && f;i++)
  34.             if (a[i]!=b[i]) let[b[i]].push_back(i);
  35.  
  36.         ///Comment it
  37. //        for (i='a';i<='z' && f;i++)
  38. //            if (let[i].size()){
  39. //                printf("%c=",i);
  40. //                for (auto it:let[i]) printf("%lld ",it);puts("");
  41. //            }puts("");
  42.  
  43.         for (i='z';i>='a' && f;i--){
  44.             if (let[i].size()){
  45.                 if (pos[i]==-1) {f=0;break;}
  46.                 ll x=pos[i];
  47.                 v.push_back(let[i]);
  48.  
  49.                 for (auto it:let[i])
  50.                     if (it==x){ x=-1; break;}
  51.                 if (x!=-1) v[v.size()-1].push_back(x);
  52.  
  53. //                for (auto it:let[i]) a[it]=i;
  54. //                puts(a);
  55.             }
  56.         }
  57.         if (!f) puts("-1");
  58.         else{
  59. //            printf("Ans is\n");
  60.             printf("%d\n",v.size());
  61.             for (i=0;i<v.size();i++){
  62.                 printf("%d ",v[i].size());
  63.                 for (auto it:v[i]) printf("%lld ",it);
  64.                 puts("");
  65.             }
  66.         }
  67.     }
  68.     return 0;
  69. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement