#include <bits/stdc++.h>
using namespace std;
#define int long long
vector<string> sol(int n,int m)
{
vector<string> v;
for (int i=0;i<n/2;i++)
{
string s(m/2+1,'+'),s1(m/2,'-');
s+=s1;
v.push_back(s);
}
string wh(m,'-');
v.push_back(wh);
for (int i=0;i<n/2;i++)
{
string s(m/2+1,'+'),s1(m/2,'-');
s1+=s;
v.push_back(s1);
}
return v;
}
bool check(int n,int m)
{
if (n%2)
{
int cnt1[m]={};
string ans[n];
for (int i=0;i<n;i++)
{
if (i<n-2)
{
string s(m,'+');ans[i]=s;
}
else
{
string s(m,'-');ans[i]=s;
}
}
for (int i=0;i<m;i++)
cnt1[i]-=2,cnt1[i]+=n-2;
int x=m/2-1;
for (int i=0;i<n-2;i++)
{
for (int j=i*x;j<i*x+x;j++)
cnt1[j%m]-=2,ans[i][j%m]='-';
}
for (int i=0;i<m;i++)
if (cnt1[i]>=0)
return 0;
cout<<n+m-2<<endl;
for (int i=0;i<n;i++)
cout<<ans[i]<<endl;
return 1;
}
else if(m%2)
{
int cnt1[n]={};
string ans[n];
for (int i=0;i<n;i++)
{
string s(m,'-');
s[m-2]=s[m-1]='+';
ans[i]=s;
}
for (int i=0;i<n;i++)
cnt1[i]-=2,cnt1[i]+=m-2;
int x=n/2-1;
for (int i=0;i<m-2;i++)
{
for (int j=i*x;j<i*x+x;j++)
cnt1[j%n]-=2,ans[j%n][i]='+';
}
for (int i=0;i<n;i++)
if (cnt1[i]>=0)
return 0;
cout<<n+m-2<<endl;
for (int i=0;i<n;i++)
cout<<ans[i]<<endl;
return 1;
}
return 0;
}
bool check1(int n,int m)
{
if (n<=m)
{
int cnt1[m]={};
string ans[n];
for (int i=0;i<n;i++)
{
if (i<n-3)
{
string s(m,'+');ans[i]=s;
}
else
{
string s(m,'-');ans[i]=s;
}
}
for (int i=0;i<m;i++)
cnt1[i]-=3,cnt1[i]+=n-3;
int x=m/2-1;
for (int i=0;i<n-2;i++)
{
for (int j=i*x;j<i*x+x;j++)
cnt1[j%m]-=2,ans[i][j%m]='-';
}
for (int i=0;i<m;i++)
if (cnt1[i]>=0)
return 0;
cout<<n+m-3<<endl;
for (int i=0;i<n;i++)
cout<<ans[i]<<endl;
return 1;
}
else
{
int cnt1[n]={};
string ans[n];
for (int i=0;i<n;i++)
{
string s(m,'-');
s[m-3]=s[m-2]=s[m-1]='+';
ans[i]=s;
}
for (int i=0;i<n;i++)
cnt1[i]-=2,cnt1[i]+=m-2;
int x=n/2-1;
for (int i=0;i<m-2;i++)
{
for (int j=i*x;j<i*x+x;j++)
cnt1[j%n]-=2,ans[j%n][i]='+';
}
for (int i=0;i<n;i++)
if (cnt1[i]>=0)
return 0;
cout<<n+m-3<<endl;
for (int i=0;i<n;i++)
cout<<ans[i]<<endl;
return 1;
}
}
signed main()
{
int t;
cin>>t;
while (t--)
{
int n,m;
cin>>n>>m;
if (min(n,m)<=2)
{
cout<<max(n,m)<<endl;
char c='+';
if (min(n,m)==n)
c='-';
for (int i=0;i<n;i++)
{
string s(m,c);
cout<<s<<endl;
}
}
else if (n%2 && m%2)
{
cout<<n+m-2<<endl;
vector<string> v=sol(n,m);
for (auto i:v)
cout<<i<<endl;
}
else if(check(n,m))
continue;
else if (n%2)
{
cout<<n+m-3<<endl;
vector<string> v=sol(n,m-1);
for (auto i:v)
cout<<i<<'+'<<endl;
}
else if(m%2)
{
cout<<n+m-3<<endl;
vector<string> v=sol(n-1,m);
for (auto i:v)
cout<<i<<endl;
string s(m,'-');
cout<<s<<endl;
}
else if(check1(n,m))
continue;
else
{
cout<<n+m-4<<endl;
vector<string> v=sol(n-1,m-1);
for (auto i:v)
cout<<i<<'+'<<endl;
string s(m,'-');
cout<<s<<endl;
}
}
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |