#include <iostream>
#include <iomanip>
using namespace std;
const int Tgt = 110;
const int I = Tgt;
int m[7][7]={
{3,4,5,4,3,9,7},
{1,I,6,I,5,I,8},
{2,3,7,6,9,4,1},
{7,I,8,I,1,I,3},
{5,5,9,8,7,2,6},
{1,I,4,I,6,I,3},
{3,4,2,5,5,4,3}
};
bool path[7][7] = { false };
bool step(int x, int y, int sum)
{
sum += m[x][y];
if (sum > Tgt) return false;
if (x == 6 && y == 6)
{
if (sum != Tgt) return false;
path[x][y] = true;
for(int i = 0; i < 7; ++i)
{
for(int j = 0; j < 7; ++j)
{
cout << (path[i][j] ? '*' : ' ');
}
cout << endl;
}
return true;
}
path[x][y] = true;
// Up
if (y > 0 && !path[x][y-1])
{
if (step(x,y-1,sum)) return true;
}
// Dn
if (y < 6 && !path[x][y+1])
{
if (step(x,y+1,sum)) return true;
}
// Lt
if (x > 0 && !path[x-1][y])
{
if (step(x-1,y,sum)) return true;
}
// Rt
if (x < 6 && !path[x+1][y])
{
if (step(x+1,y,sum)) return true;
}
path[x][y] = false;
return false;
}
int main(int argc, const char * argv[])
{
step(0,0,0);
}
ICAgICNpbmNsdWRlIDxpb3N0cmVhbT4KICAgICNpbmNsdWRlIDxpb21hbmlwPgogICAgCiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgCiAgICBjb25zdCBpbnQgVGd0ID0gMTEwOwogICAgY29uc3QgaW50IEkgICA9IFRndDsKICAgIAogICAgaW50IG1bN11bN109ewogICAgICAgIHszLDQsNSw0LDMsOSw3fSwKICAgICAgICB7MSxJLDYsSSw1LEksOH0sCiAgICAgICAgezIsMyw3LDYsOSw0LDF9LAogICAgICAgIHs3LEksOCxJLDEsSSwzfSwKICAgICAgICB7NSw1LDksOCw3LDIsNn0sCiAgICAgICAgezEsSSw0LEksNixJLDN9LAogICAgICAgIHszLDQsMiw1LDUsNCwzfQogICAgfTsKICAgIAogICAgYm9vbCBwYXRoWzddWzddID0geyBmYWxzZSB9OwogICAgCiAgICBib29sIHN0ZXAoaW50IHgsIGludCB5LCBpbnQgc3VtKQogICAgewogICAgICAgIHN1bSArPSBtW3hdW3ldOwogICAgICAgIGlmIChzdW0gPiBUZ3QpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAoeCA9PSA2ICYmIHkgPT0gNikKICAgICAgICB7CiAgICAgICAgICAgIGlmIChzdW0gIT0gVGd0KSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIHBhdGhbeF1beV0gPSB0cnVlOwogICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgNzsgKytpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDwgNzsgKytqKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGNvdXQgPDwgKHBhdGhbaV1bal0gPyAnKicgOiAnICcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY291dCA8PCBlbmRsOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgIAogICAgICAgIHBhdGhbeF1beV0gPSB0cnVlOwogICAgCiAgICAgICAgLy8gVXAKICAgICAgICBpZiAoeSA+IDAgJiYgIXBhdGhbeF1beS0xXSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChzdGVwKHgseS0xLHN1bSkpIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvLyBEbgogICAgICAgIGlmICh5IDwgNiAmJiAhcGF0aFt4XVt5KzFdKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKHN0ZXAoeCx5KzEsc3VtKSkgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIC8vIEx0CiAgICAgICAgaWYgKHggPiAwICYmICFwYXRoW3gtMV1beV0pCiAgICAgICAgewogICAgICAgICAgICBpZiAoc3RlcCh4LTEseSxzdW0pKSByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLy8gUnQKICAgICAgICBpZiAoeCA8IDYgJiYgIXBhdGhbeCsxXVt5XSkKICAgICAgICB7CiAgICAgICAgICAgIGlmIChzdGVwKHgrMSx5LHN1bSkpIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBwYXRoW3hdW3ldID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgCiAgICBpbnQgbWFpbihpbnQgYXJnYywgY29uc3QgY2hhciAqIGFyZ3ZbXSkKICAgIHsKICAgICAgICBzdGVwKDAsMCwwKTsKICAgIH0KCg==