传送门

两个字符串 a a a b b b,把 a a a看成比较短的那个,长度分别为 n 1 , n 2 n_1,n_2 n1,n2

那么毫无疑问,答案必然是 x a xa xa,其中 x x x未知

因为只有这样能被 a a a整除

而且有 x ∗ n 1 < = n 1 ∗ n 2 x*n_1<=n_1*n_2 xn1<=n1n2

如果 n 1 ∗ n 2 n_1*n_2 n1n2凑不成就不可能凑成

因为每次添加一个 a a a都相当于循环节往后移动一位, n 1 ∗ n 2 n_1*n_2 n1n2移动了 n 2 n_2 n2

再移动下去,就又变成最开始的情况,所以无解。

所以暴力枚举 x x x判断即可

#include <bits/stdc++.h>
using namespace std;
int id,n1,n2;
string a,b;
char c[10009];
bool isok()
{
	if( id%n2!=0 )	return false;
	int now = 0;
	for(int i=1;i<=id;i++)
	{
		if( b[now]!=c[i] )	return false;
		now++;
		if( now==n2 )	now = 0;
	}
	return true;
}
int main()
{
	int t; cin >> t;
	while( t-- )
	{
		cin >> a >> b;
		if( a.length()>b.length() )	swap(a,b);
		n1 = a.length(), n2 = b.length();
		id = 0; int flag = 0;
		while( id<=n1*n2 )
		{
			for(int i=0;i<n1;i++)	c[++id] = a[i];
			if( isok() )	{ flag = 1; break; }
		}
		if( flag==0 )	{ printf("-1\n"); continue; }
		for(int i=1;i<=id;i++)	printf("%c",c[i]);
		printf("\n");
	}
}