最小表示法,模板。
果然权限号板子多啊。
背过吧2333
#include<bits/stdc++.h>
#define N 2000000
using namespace std;
char a[N+1],b[N+1];
char c[N+1],d[N+1];
int n,m1,m2;
inline int get_M(char *tmp,int len)
{
int i=0,j=1,k=0;
while(i<len&&j<len&&k<len)
{
int cmp=tmp[(i+k)%len]-tmp[(j+k)%len];
if(cmp==0)k++;
else
{
if(cmp>0)i+=k+1;
else j+=k+1;
if(i==j)j++;
k=0;
}
}
return min(i,j);
}
int main()
{
freopen("in.txt","r",stdin);
scanf("%s%s",a,b);
n=strlen(a);
m1=get_M(a,n);
m2=get_M(b,n);
for(int i=0;i<n;i++)c[i]=a[(i+m1)%n],d[i]=b[(i+m2)%n];
for(int i=0;i<n;i++)
if(c[i]!=d[i])return printf("No\n"),0;
printf("Yes\n");
for(int i=0;i<n;i++)printf("%c",c[i]);
printf("\n");
return 0;
}