niewiem gdzie jest blad
moj program dziala na zasadzie wyjecia obwodu i wklejeniu go obruconego
prosze o pomoc
#include<cstdio>
#include<cstring>
#include<string>
#include<cmath>
#include<algorithm>
#include<iostream>
using namespace std;
int tab[101][101];
int main(){
int d,n,m;
scanf("%d",&d);
for(int q=0;q<d;++q){
string g="";
scanf("%d%d\n",&n,&m);
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
tab[i][j]=0;
}
}
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(j==m-1&&i!=n-1)scanf("%d\n",&tab[i][j]);
else scanf("%d",&tab[i][j]);
}
}
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(i==0){
g+=tab[i][j]+'0';
}
}
}
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(j==m-1&&i!=0){
g+=tab[i][j]+'0';
}
}
}
for(int i=n-1;i>=0;--i){
for(int j=m-1;j>=0;--j){
if(i==n-1&&j!=m-1){
g+=tab[i][j]+'0';
}
}
}
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(j==0&&i!=0&&i!=n-1){
g+=tab[i][j]+'0';
}
}
}
int x=n*2+(m-2)*2;
char dx=g[0];
g.insert(x,1,dx);
g.erase(0,1);
int h=0;
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(i==0){
tab[i][j]=g[h];
h++;
}
}
}
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(j==m-1&&i!=0&&i!=n-1){
tab[i][j]=g[h];
h++;
}
}
}
for(int i=n-1;i>0;--i){
for(int j=m-1;j>0;--j){
if(i==n-1){
tab[i][j]=g[h];
h++;
}
}
}
for(int i=n-1;i>=0;--i){
for(int j=m-1;j>=0;--j){
if(j==0&&i!=0){
tab[i][j]=g[h];
h++;
}
}
}
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(j!=0&&i!=0&&i!=n-1&&j!=m-1){
tab[i][j]+='0';
}
}
}
for(int i=0;i<n;++i){
for(int j=0;j<m;++j){
if(j==m-1&&i!=n-1)printf("%d\n",tab[i][j]-'0');
else printf("%d ",tab[i][j]-'0');
}
}
printf("\n");
}
return 0;
}