#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

//#define PB push_back
#define PB emplace_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/

//
//debug
#ifdef mohaimin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif // mohaimin

int main()
{
	string s;
	getline(cin, s);
	int l = s.length();
	int pos = 1, neg = 0, ques = 0, n = 0;
	for( int i = 0; i < l; ++i )
	{
		if( s[i] == '+' ) ++pos;
		else if( s[i] == '-' ) ++neg;
		else if( s[i] == '?' ) ++ques;
		else if( s[i] == '=' )
		{
			i += 2;
			while( i < l )
			{
				n *= 10;
				n += s[i] - '0';
				++i;
			}
		}
	}
	dbg(pos - n*neg, n*pos - neg, n);
	if( (((pos - (n*neg)) <= n) && (n <= ((n*pos) - neg))) )
	{
	cout << "Possible" << endl;
	int sum = 0, sign;
	for( int i = 0; i < l; ++i )
	{
		if( s[i] == '=' )
		{
			cout << "= " << n;
			break;
		}
		if( i == 0 )
		{
			--pos;
			for( int j = 1; j <= n; ++j )
			{
				if( sum + j + pos - n*neg <= n && n <= sum + j + n*pos - neg )
				{
					sum += j;
					cout << j << " ";
					break;
				}
			}
		}
		else if( s[i] != '?' )
		{
			if( s[i] == '+' )
			{
				sign = 1;
				--pos;
				cout << "+" << " ";
			}
			else if( s[i] == '-' )
			{
				sign = -1;
				--neg;
				cout << "- ";
			}
		}
		else if( s[i] == '?' )
		{
			for( int j = 1; j <= n; ++j )
			{
				if( sum + sign*j + pos - n*neg <= n && n <= sum + sign*j + n*pos - neg )
				{
					sum += sign*j;
					cout << j << " ";
					break;
				}
			}
		}
	}
}
else
{
	cout << "Impossible";
}
}


#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

//#define PB push_back
#define PB emplace_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/

//
//debug
#ifdef mohaimin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif // mohaimin

int main()
{
	string s;
	getline(cin, s);
	int l = s.length();
	int pos = 1, neg = 0, ques = 0, n = 0;
	for( int i = 0; i < l; ++i )
	{
		if( s[i] == '+' ) ++pos;
		else if( s[i] == '-' ) ++neg;
		else if( s[i] == '?' ) ++ques;
		else if( s[i] == '=' )
		{
			i += 2;
			while( i < l )
			{
				n *= 10;
				n += s[i] - '0';
				++i;
			}
		}
	}
	if( !(((pos - (n*neg)) <= n) && ((n >= (n*pos)) - neg)) )
	{
		dbg(pos - n*neg, n*pos - neg, n);
		cout << "Impossible";
		return 0;
	}
	cout << "Possible" << endl;
	int sum = 0, sign;
	for( int i = 0; i < l; ++i )
	{
		if( s[i] == '=' )
		{
			cout << "= " << n;
			break;
		}
		if( i == 0 )
		{
			--pos;
			for( int j = 1; j <= n; ++j )
			{
				if( sum + j + pos - n*neg <= n && n <= sum + j + n*pos - neg )
				{
					sum += j;
					cout << j << " ";
					break;
				}
			}
		}
		else if( s[i] != '?' )
		{
			if( s[i] == '+' )
			{
				sign = 1;
				--pos;
				cout << "+" << " ";
			}
			else if( s[i] == '-' )
			{
				sign = -1;
				--neg;
				cout << "- ";
			}
		}
		else if( s[i] == '?' )
		{
			for( int j = 1; j <= n; ++j )
			{
				if( sum + sign*j + pos - n*neg <= n && n <= sum + sign*j + n*pos - neg )
				{
					sum += sign*j;
					cout << j << " ";
					break;
				}
			}
		}
	}
}


#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef pair<int,int> pii;
typedef pair<double, double> pdd;
typedef pair<ll, ll> pll;
typedef vector<pii> vii;
typedef vector<pll> vll;

//#define PB push_back
#define PB emplace_back
#define F first
#define S second
#define MP make_pair
#define endl '\n'

const double PI = acos(-1);
const double eps = 1e-9;
const int inf = 2000000000;
const ll infLL = 9000000000000000000;
#define MOD 1000000007
//#define harmonic(n) 0.57721566490153286l+log(n)

#define mem(a,b) memset(a, b, sizeof(a) )
#define gcd(a,b) __gcd(a,b)
#define lcm(a,b) (a*(b/gcd(a,b)))
#define sqr(a) ((a) * (a))

#define optimize() ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
#define fraction() cout.unsetf(ios::floatfield); cout.precision(10); cout.setf(ios::fixed,ios::floatfield);

typedef vector<int>::iterator vit;
typedef set<int>::iterator sit;

inline bool checkBit(ll n, int i) { return n&(1LL<<i); }
inline ll setBit(ll n, int i) { return n|(1LL<<i);; }
inline ll resetBit(ll n, int i) { return n&(~(1LL<<i)); }

int dx[] = {0, 0, +1, -1};
int dy[] = {+1, -1, 0, 0};
//int dx[] = {+1, 0, -1, 0, +1, +1, -1, -1};
//int dy[] = {0, +1, 0, -1, +1, -1, +1, -1};

inline bool EQ(double a, double b) { return fabs(a-b) < 1e-9; }
inline bool isLeapYear(ll year) { return (year%400==0) || (year%4==0 && year%100!=0); }
inline void normal(ll &a) { a %= MOD; (a < 0) && (a += MOD); }
inline ll modMul(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a*b)%MOD; }
inline ll modAdd(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); return (a+b)%MOD; }
inline ll modSub(ll a, ll b) { a %= MOD, b %= MOD; normal(a), normal(b); a -= b; normal(a); return a; }
inline ll modPow(ll b, ll p) { ll r = 1; while(p) { if(p&1) r = modMul(r, b); b = modMul(b, b); p >>= 1; } return r; }
inline ll modInverse(ll a) { return modPow(a, MOD-2); }
inline ll modDiv(ll a, ll b) { return modMul(a, modInverse(b)); }

/*
bool seive[1010000];
vi prime;

void seiveGen(int limit) {
    limit += 100;
    int sqrtn = sqrt(limit);
    for(int i = 3; i <= sqrtn; i += 2) {
            if(!seive[i>>1]) {
                    for(int j = i * i; j < limit; j += i + i) {
                            seive[j>>1] = 1;
                    }
            }
    }
    prime.PB(2);
    for(int i = 3; i < limit; i += 2) {
            if(!seive[i>>1]) prime.PB(i);
    }
}
*/

//
//debug
#ifdef mohaimin
template < typename F, typename S >
ostream& operator << ( ostream& os, const pair< F, S > & p ) {
            return os << "(" << p.first << ", " << p.second << ")";
}

template < typename T >
ostream &operator << ( ostream & os, const vector< T > &v ) {
            os << "{";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "}";
}

template < typename T >
ostream &operator << ( ostream & os, const set< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename T >
ostream &operator << ( ostream & os, const multiset< T > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << *it;
                                            }
                    return os << "]";
}

template < typename F, typename S >
ostream &operator << ( ostream & os, const map< F, S > &v ) {
            os << "[";
                for(auto it = v.begin(); it != v.end(); ++it) {
                                if( it != v.begin() ) os << ", ";
                                        os << it -> first << " = " << it -> second ;
                                            }
                    return os << "]";
}

#define dbg(args...) do {cerr << #args << " : "; faltu(args); } while(0)

clock_t tStart = clock();
#define timeStamp dbg("Execution Time: ", (double)(clock() - tStart)/CLOCKS_PER_SEC)

void faltu () {
            cerr << endl;
}

template <typename T>
void faltu( T a[], int n ) {
            for(int i = 0; i < n; ++i) cerr << a[i] << ' ';
                cerr << endl;
}

template <typename T, typename ... hello>
void faltu( T arg, const hello &... rest) {
            cerr << arg << ' ';
                faltu(rest...);
}
#else
#define dbg(args...)
#endif // mohaimin

int main()
{
	string s;
	getline(cin, s);
	int l = s.length();
	int pos = 1, neg = 0, ques = 0, n = 0;
	for( int i = 0; i < l; ++i )
	{
		if( s[i] == '+' ) ++pos;
		else if( s[i] == '-' ) ++neg;
		else if( s[i] == '?' ) ++ques;
		else if( s[i] == '=' )
		{
			i += 2;
			while( i < l )
			{
				n *= 10;
				n += s[i] - '0';
				++i;
			}
		}
	}
	if( !(((pos - (n*neg)) <= n) && ((n <= (n*pos)) - neg)) )
	{
		dbg(pos - n*neg, n*pos - neg, n);
		cout << "Impossible";
		return 0;
	}
	cout << "Possible" << endl;
	int sum = 0, sign;
	for( int i = 0; i < l; ++i )
	{
		if( s[i] == '=' )
		{
			cout << "= " << n;
			break;
		}
		if( i == 0 )
		{
			--pos;
			for( int j = 1; j <= n; ++j )
			{
				if( sum + j + pos - n*neg <= n && n <= sum + j + n*pos - neg )
				{
					sum += j;
					cout << j << " ";
					break;
				}
			}
		}
		else if( s[i] != '?' )
		{
			if( s[i] == '+' )
			{
				sign = 1;
				--pos;
				cout << "+" << " ";
			}
			else if( s[i] == '-' )
			{
				sign = -1;
				--neg;
				cout << "- ";
			}
		}
		else if( s[i] == '?' )
		{
			for( int j = 1; j <= n; ++j )
			{
				if( sum + sign*j + pos - n*neg <= n && n <= sum + sign*j + n*pos - neg )
				{
					sum += sign*j;
					cout << j << " ";
					break;
				}
			}
		}
	}
}


/*
          ,     \    /      ,
         / \    )\__/(     / \
        /   \  (_\  /_)   /   \
   ____/_____\__\@  @/___/_____\____
  |             |\../|              |
  |              \VV/               |
  |        ------hoi-------         |
  |_________________________________|
   |    /\ /      \\       \ /\    |
   |  /   V        ))       V   \  |
   |/     `       //        '     \|
   `              V                '
*/

#include <bits/stdc++.h>

#define ull unsigned long long
#define ll long long
#define pb push_back
#define f first
#define se second
#define mp make_pair
#define Speedforce boost();

using namespace std;

void boost(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

const int N = 1e6;
const int inf = 1e9 + 7;

string s;
int n, cnt1, cnt2;
bool was[N];
int a[N];

int main() {
    Speedforce
    getline(cin, s);
    for(int i = 0;i < s.size();i ++){
        if(s[i] == '-'){
            was[i + 2] = 1;
            cnt1 ++;
        }
        if(s[i] == '?'){
            cnt2 ++;
        }
        if(s[i] >= '0' && s[i] <= '9'){
            n = n * 10 + s[i] - '0';
        }
    }
    if(cnt2 == 1){
        cout << "Possible" << endl;
        cout << n << " = " << n;
        return 0;
    }
    if(n * (cnt2 - cnt1) - cnt1 < n){
        cout << "Impossible";
        return 0;
    }
    int sum = n * (cnt2 - cnt1) - cnt1;
    for(int i = 0;i < s.size();i ++){
        if(s[i] == '-'){
            a[i + 2] = 1;
        }
        if(s[i] == '?'){
            if(!was[i]){
                a[i] = n;
            }
        }
    }
    for(int i = 0;i < s.size();i ++){
        if(was[i]){
            continue;
        }
        while(sum > n && a[i] > 1){
            a[i]--;
            sum--;
        }
    }
    if(sum > n){
        cout << "Impossible";
        return 0;
    }
    cout << "Possible\n";
    for(int i = 0;i < s.size();i ++){
        if(s[i] == '?'){
            cout << a[i];
        }
        else{
            cout << s[i];
        }
    }
}


/*
          ,     \    /      ,
         / \    )\__/(     / \
        /   \  (_\  /_)   /   \
   ____/_____\__\@  @/___/_____\____
  |             |\../|              |
  |              \VV/               |
  |        ------hoi-------         |
  |_________________________________|
   |    /\ /      \\       \ /\    |
   |  /   V        ))       V   \  |
   |/     `       //        '     \|
   `              V                '
*/

#include <bits/stdc++.h>

#define ull unsigned long long
#define ll long long
#define pb push_back
#define f first
#define se second
#define mp make_pair
#define Speedforce boost();

using namespace std;

void boost(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
}

const int N = 1e6;
const int inf = 1e9 + 7;

string s;
int n, cnt1, cnt2;
bool was[N];
int a[N];

int main() {
    Speedforce
    getline(cin, s);
    for(int i = 0;i < s.size();i ++){
        if(s[i] == '-'){
            was[i + 2] = 1;
            cnt1 ++;
        }
        if(s[i] == '?'){
            cnt2 ++;
        }
        if(s[i] >= '0' && s[i] <= '9'){
            n = n * 10 + s[i] - '0';
        }
    }
    if(cnt2 == 1){
        cout << "Possible" << endl;
        cout << n << " = " << n;
        return 0;
    }
    if(n * (cnt2 - cnt1) - cnt1 < n){
        cout << "Impossible";
        return 0;
    }
    int sum = n * (cnt2 - cnt1) - cnt1;
    for(int i = 0;i < s.size();i ++){
        if(s[i] == '-'){
            a[i + 2] = 1;
        }
        if(s[i] == '?'){
            if(!was[i]){
                a[i] = n;
            }
        }
    }
    for(int i = 0;i < s.size();i ++){
        if(was[i]){
            continue;
        }
        while(sum > n && a[i] > 1){
            a[i]--;
            sum--;
        }
    }
    if(sum > n){
        for(int i = 0;i < s.size();i ++){
            if(!was[i]){
                continue;
            }
            while(sum > n && a[i] < n){
                a[i]++;
                sum--;
            }
        }
        if(sum > n){
            cout << "Impossible";
            return 0;
        }
    }
    cout << "Possible\n";
    for(int i = 0;i < s.size();i ++){
        if(s[i] == '?'){
            cout << a[i];
        }
        else{
            cout << s[i];
        }
    }
}


#include "bits/stdc++.h"
using namespace std;

int n;
vector<char> sign;

int main()
{
    int pos = 1;
    int neg = 0;
    sign.push_back('+');
    scanf("%*c ");
    while (true)
    {
        char c;
        scanf("%c ", &c);
        if (c == '=') break;
        if (c == '+') pos += 1;
        if (c == '-') neg += 1;
        sign.push_back(c);
        scanf("%*c ");
    }
    scanf("%d", &n);
    if (n < (pos * 1 - neg*n) || (pos*n - neg) < n)
    {
        printf("Impossible");
        return 0;
    }

    printf("Possible\n");
    int ext = (pos*n - neg) - n;
    bool first = true;

for (char c : sign)
    {
        if (first)
        {
            first = false;
        }
        else
        {
            printf("%c ", c);
        }
        if (c == '+') printf("%d ", max(1, n - ext));
        else printf("%d ", min(n, 1 + ext));
        ext = max(0, ext - n + 1);
    }
    printf("= %d", n);

    return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<map>
#include<istream>
#include<cassert>
#include<set>
#include<sstream>
#define DEBUG(x) cout<<#x<<" = "<<x<<endl
#define DEBUG2(x,y) cout<<#x<<" = "<<x<<" , "\
<<#y<<" = "<<y<<endl
using namespace std;
typedef long long ll;
char input[300];
int main()
{
//    freopen("in.txt","r",stdin);
    cin.getline(input,300);
    int pos=1,neg=0;
    int n;
    vector<int>sgn;
    sgn.push_back(1);
    for(int ii=0;input[ii]!='\0' ;ii++ ){
        if(input[ii]=='+')pos++,sgn.push_back(1);
        if(input[ii]=='-')neg++,sgn.push_back(-1);
        if(isdigit(input[ii])){sscanf(input+ii,"%d",&n);break;}
    }
    if(pos*n-neg<n)cout<<"Impossible"<<endl;
    else{
        for(auto &s:sgn)if(s>0)s*=n;
        int dif=pos*n-neg-n;
        for(int ii=0;ii<sgn.size()&&dif>0 ;ii++ ){
            if(sgn[ii]<0)continue;
            int t=sgn[ii]-1;
            if(t>=dif)sgn[ii]-=dif,dif=0;
            else sgn[ii]=1,dif-=t;
        }
        cout<<"Possible"<<endl;
        for(int ii=0;ii<sgn.size() ;ii++ ){
            if(ii==0)cout<<sgn[ii];
            else if(sgn[ii]>0)cout<<" + "<<sgn[ii];
            else cout<<" - "<<abs(sgn[ii]);
        }
        cout<<" = "<<n<<endl;
    }
}


#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<map>
#include<istream>
#include<cassert>
#include<set>
#include<sstream>
#define DEBUG(x) cout<<#x<<" = "<<x<<endl
#define DEBUG2(x,y) cout<<#x<<" = "<<x<<" , "\
<<#y<<" = "<<y<<endl
using namespace std;
typedef long long ll;
/// test 5
char input[1000];
int main()
{
//    freopen("in.txt","r",stdin);
    cin.getline(input,1000);
    int pos=1,neg=0;
    int n;
    vector<int>sgn;
    sgn.push_back(1);
    for(int ii=0;input[ii]!='\0' ;ii++ ){
        if(input[ii]=='+')pos++,sgn.push_back(1);
        if(input[ii]=='-')neg++,sgn.push_back(-1);
        if(isdigit(input[ii])){sscanf(input+ii,"%d",&n);break;}
    }
    ///test 4
    if(pos*n-neg<n||pos-neg*n>n)cout<<"Impossible"<<endl;
    else{
        for(auto &s:sgn)if(s>0)s*=n;
        int dif=pos*n-neg-n;
        for(int ii=0;ii<sgn.size()&&dif>0 ;ii++ ){
            if(sgn[ii]>0){
                int t=sgn[ii]-1;
                if(t>=dif)sgn[ii]-=dif,dif=0;
                else sgn[ii]=1,dif-=t;
            }
            ///test 4
            else {
                int t=sgn[ii]+n;
                if(t>=dif)sgn[ii]-=dif,dif=0;
                else sgn[ii]=-n,dif-=t;
            }
        }
        cout<<"Possible"<<endl;
        for(int ii=0;ii<sgn.size() ;ii++ ){
            if(ii==0)cout<<sgn[ii];
            else if(sgn[ii]>0)cout<<" + "<<sgn[ii];
            else cout<<" - "<<abs(sgn[ii]);
        }
        cout<<" = "<<n<<endl;
    }
}


#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<string>
#include<vector>
#include<cmath>
#include<map>
#include<istream>
#include<cassert>
#include<set>
#include<sstream>
#define DEBUG(x) cout<<#x<<" = "<<x<<endl
#define DEBUG2(x,y) cout<<#x<<" = "<<x<<" , "\
<<#y<<" = "<<y<<endl
using namespace std;
typedef long long ll;
char input[300];
int main()
{
//    freopen("in.txt","r",stdin);
    cin.getline(input,300);
    int pos=1,neg=0;
    int n;
    vector<int>sgn;
    sgn.push_back(1);
    for(int ii=0;input[ii]!='\0' ;ii++ ){
        if(input[ii]=='+')pos++,sgn.push_back(1);
        if(input[ii]=='-')neg++,sgn.push_back(-1);
        if(isdigit(input[ii])){sscanf(input+ii,"%d",&n);break;}
    }
    if(pos*n-neg<n||pos-neg*n>n)cout<<"Impossible"<<endl;
    else{
        for(auto &s:sgn)if(s>0)s*=n;
        int dif=pos*n-neg-n;
        for(int ii=0;ii<sgn.size()&&dif>0 ;ii++ ){
            if(sgn[ii]>0){
                int t=sgn[ii]-1;
                if(t>=dif)sgn[ii]-=dif,dif=0;
                else sgn[ii]=1,dif-=t;
            }
            else {
                int t=sgn[ii]+n;
                if(t>=dif)sgn[ii]-=dif,dif=0;
                else sgn[ii]=-n,dif-=t;
            }
        }
        cout<<"Possible"<<endl;
        for(int ii=0;ii<sgn.size() ;ii++ ){
            if(ii==0)cout<<sgn[ii];
            else if(sgn[ii]>0)cout<<" + "<<sgn[ii];
            else cout<<" - "<<abs(sgn[ii]);
        }
        cout<<" = "<<n<<endl;
    }
}


#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;

const int MAXL = 100*3 + 100;

char str[MAXL];
int main() {
	scanf("%[^\n]s", str);
	int sl = strlen(str);
	// printf("%d", sl);
	// printf("%s", str);

	int pcnt=0, ncnt=0;
	int n;
	for(int i=0;i<sl;i++) {
		if(str[i]=='+') pcnt++;
		else if(str[i]=='-') ncnt++;
		else if(str[i]=='=') {

			n = atoi(str+i+2);
			break;
		}
	}
	int xcnt = pcnt+ncnt+1;

	if(xcnt==1) {
		puts("Possible");
		printf("%d = %d", n, n);
		return 0;
	}

	int cn = n + ncnt;
	if(pcnt<=cn && cn<=n*pcnt) {
		int rem = cn;
		for(int i=0;i<sl;i++) {
			if(str[i]=='?') {
				if(i==0) {
					int sub = min(cn/pcnt, rem);
					rem -= sub;
					printf("%d", sub);
				}
				else {
					if(str[i-2]=='+') {
						int sub = min(cn/pcnt, rem);
						rem -= sub;
						printf("%d", sub);
					}
					else {
						printf("%d", 1);
					}
				}
			}
			else if(str[i]=='=') {
				printf("= %d", n);
				break;
			}
			else printf("%c", str[i]);
		}
	}
	else{
		puts("Impossible");
		return 0;
	}
	return 0;
}


#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;

const int MAXL = 5e5 + 10;

char str[MAXL];
int main() {
	scanf("%[^\n]s", str);
	int sl = strlen(str);
	// printf("%d", sl);
	// printf("%s", str);

	int pcnt = 1, ncnt = 0;
	int n;
	for (int i = 0; i < sl; i++) {
		if (str[i] == '+') pcnt++;
		else if (str[i] == '-') ncnt++;
		else if (str[i] == '=') {

			n = atoi(str + i + 2);
			break;
		}
	}
	int xcnt = pcnt + ncnt;

	if (xcnt == 1) {
		puts("Possible");
		printf("%d = %d", n, n);
		return 0;
	}

	int cn = n + ncnt;
	int rem = cn;
	if (pcnt <= cn && cn <= n * pcnt) {
		puts("Possible");
		int remp = pcnt;
		for (int i = 0; i < sl; i++) {
			if (str[i] == '?') {
				if (i == 0) {
					int sub;
					if (remp < rem)
						sub = min(n, rem - remp + 1);
					else sub = 1;

					printf("%d", sub);
					rem -= sub;
					remp--;
				}
				else {
					if (str[i - 2] == '+') {
						int sub;
						if (remp < rem)
							sub = min(n, rem - remp + 1);
						else sub = 1;

						printf("%d", sub);
						rem -= sub;
						remp--;
					}
					else {
						printf("%d", 1);
					}
				}
			}
			else if (str[i] == '=') {
				printf("= %d", n);
				break;
			}
			else printf("%c", str[i]);
		}
	}
	else {
		puts("Impossible");
		return 0;
	}
	return 0;
}


#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;

const int MAXL = 5e5+10;

char str[MAXL];
int main() {
	scanf("%[^\n]s", str);
	int sl = strlen(str);
	// printf("%d", sl);
	// printf("%s", str);

	int pcnt = 1, ncnt = 0;
	int n;
	for (int i = 0; i < sl; i++) {
		if (str[i] == '+') pcnt++;
		else if (str[i] == '-') ncnt++;
		else if (str[i] == '=') {

			n = atoi(str + i + 2);
			break;
		}
	}
	int xcnt = pcnt + ncnt + 1;

	if (xcnt == 1) {
		puts("Possible");
		printf("%d = %d", n, n);
		return 0;
	}

	int cn = n + ncnt;
	int rem = cn;
	if (pcnt <= cn && cn <= n * pcnt) {
		puts("Possible");

		int remp = pcnt;
		for (int i = 0; i < sl; i++) {
			if (str[i] == '?') {
				if (i == 0) {
					int sub = cn/pcnt;
					rem -= sub;

					printf("%d", sub);
					remp--;
				}
				else {
					if (str[i - 2] == '+') {
						int sub;
						if(remp==1)
							sub = rem;
						else
							sub = cn / pcnt;
						rem -= sub;

						printf("%d", sub);
						remp--;
					}
					else {
						printf("%d", 1);
					}
				}
			}
			else if (str[i] == '=') {
				printf("= %d", n);
				break;
			}
			else printf("%c", str[i]);
		}
	}
	else {
		puts("Impossible");
		return 0;
	}
	return 0;
}


#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;

const int MAXL = 100 * 3 + 100;

char str[MAXL];
int main() {
	scanf("%[^\n]s", str);
	int sl = strlen(str);
	// printf("%d", sl);
	// printf("%s", str);

	int pcnt = 1, ncnt = 0;
	int n;
	for (int i = 0; i < sl; i++) {
		if (str[i] == '+') pcnt++;
		else if (str[i] == '-') ncnt++;
		else if (str[i] == '=') {

			n = atoi(str + i + 2);
			break;
		}
	}
	int xcnt = pcnt + ncnt + 1;

	if (xcnt == 1) {
		puts("Possible");
		printf("%d = %d", n, n);
		return 0;
	}

	int cn = n + ncnt;
	if (pcnt <= cn && cn <= n * pcnt) {
		puts("Possible");
		int rem = cn;
		for (int i = 0; i < sl; i++) {
			if (str[i] == '?') {
				if (i == 0) {
					int sub = min(cn / pcnt, rem);
					rem -= sub;
					printf("%d", sub);
				}
				else {
					if (str[i - 2] == '+') {
						int sub = min(cn / pcnt, rem);
						rem -= sub;
						printf("%d", sub);
					}
					else {
						printf("%d", 1);
					}
				}
			}
			else if (str[i] == '=') {
				printf("= %d", n);
				break;
			}
			else printf("%c", str[i]);
		}
	}
	else {
		puts("Impossible");
		return 0;
	}
	return 0;
}


#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;

const int MAXL = 5e5 + 10;

char str[MAXL];
int sl;

int main() {
	scanf("%[^\n]s", str);
	int sl = strlen(str);
	// printf("%d", sl);
	// printf("%s", str);

	int pcnt = 1, ncnt = 0;
	int n;
	for (int i = 0; i < sl; i++) {
		if (str[i] == '+') pcnt++;
		else if (str[i] == '-') ncnt++;
		else if (str[i] == '=') {
			n = atoi(str + i + 2);
			break;
		}
	}

	int xcnt = pcnt + ncnt;

	if (xcnt == 1) {
		puts("Possible");
		printf("%d = %d", n, n);
		return 0;
	}

	if (pcnt - n * ncnt > n || n * pcnt - ncnt < n) {
		puts("Impossible");
		return 0;
	}

	puts("Possible");

	int sum = 0;
	for (int i = 0; i < sl; i++) {
		if (str[i] == '?') {
			int csign = -1;
			if (i == 0) {
				csign = 1;
				pcnt--;
			}
			else {
				if (str[i - 2] == '+') {
					csign = 1;
					pcnt--;
				}
				else
					ncnt--;
			}

			for (int x = 1; x <= n; x++) {
				if (sum + x * csign + pcnt - n * ncnt <= n
					&& sum + x * csign + n * pcnt - ncnt >= n) {
					printf("%d", x);

					sum += x * csign;
					break;
				}
			}
		}
		else if (str[i] == '=') {
			printf("= %d", n);
			return 0;
		}
		else printf("%c", str[i]);
	}

	return 0;
}


#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;

const int MAXL = 100*3 + 100;

char str[MAXL];
int main() {
	scanf("%[^\n]s", str);
	int sl = strlen(str);
	// printf("%d", sl);
	// printf("%s", str);

	int pcnt=0, ncnt=0;
	int n;
	for(int i=0;i<sl;i++) {
		if(str[i]=='+') pcnt++;
		else if(str[i]=='-') ncnt++;
		else if(str[i]=='=') {

			n = atoi(str+i+2);
			break;
		}
	}
	int xcnt = pcnt+ncnt+1;

	if(xcnt==1) {
		puts("Possible");
		printf("%d = %d", n, n);
		return 0;
	}

	int cn = n + ncnt;
	if(pcnt<=cn && cn<=n*pcnt) {
		puts("Possible");
		int rem = cn;
		for(int i=0;i<sl;i++) {
			if(str[i]=='?') {
				if(i==0) {
					int sub = min(cn/pcnt, rem);
					rem -= sub;
					printf("%d", sub);
				}
				else {
					if(str[i-2]=='+') {
						int sub = min(cn/pcnt, rem);
						rem -= sub;
						printf("%d", sub);
					}
					else {
						printf("%d", 1);
					}
				}
			}
			else if(str[i]=='=') {
				printf("= %d", n);
				break;
			}
			else printf("%c", str[i]);
		}
	}
	else{
		puts("Impossible");
		return 0;
	}
	return 0;
}


#include <cstdio>
#include <cstdlib>
#include <string.h>
#include <algorithm>
using namespace std;

const int MAXL = 100 * 3 + 100;

char str[MAXL];
int main() {
	scanf("%[^\n]s", str);
	int sl = strlen(str);
	// printf("%d", sl);
	// printf("%s", str);

	int pcnt = 1, ncnt = 0;
	int n;
	for (int i = 0; i < sl; i++) {
		if (str[i] == '+') pcnt++;
		else if (str[i] == '-') ncnt++;
		else if (str[i] == '=') {

			n = atoi(str + i + 2);
			break;
		}
	}
	int xcnt = pcnt + ncnt + 1;

	if (xcnt == 1) {
		puts("Possible");
		printf("%d = %d", n, n);
		return 0;
	}

	int cn = n + ncnt;
	int rem = cn;
	if (pcnt <= cn && cn <= n * pcnt) {
		puts("Possible");

		int remp = pcnt;
		for (int i = 0; i < sl; i++) {
			if (str[i] == '?') {
				if (i == 0) {
					int sub = cn/pcnt;
					rem -= sub;

					printf("%d", sub);
					remp--;
				}
				else {
					if (str[i - 2] == '+') {
						int sub;
						if(remp==1)
							sub = rem;
						else
							sub = cn / pcnt;
						rem -= sub;

						printf("%d", sub);
						remp--;
					}
					else {
						printf("%d", 1);
					}
				}
			}
			else if (str[i] == '=') {
				printf("= %d", n);
				break;
			}
			else printf("%c", str[i]);
		}
	}
	else {
		puts("Impossible");
		return 0;
	}
	return 0;
}


#include<bits/stdc++.h>
#define long long long
using namespace std;
const int N=1e6;
vector<int>make(int num,int n,int x)
{
  vector<int>v;
  for(int i=1;i<=n;i++)
  {
    int mx=(num-(n-i));
    int now=min(mx,x);
    v.push_back(now);num-=now;
  }
  return v;
}
int main()
{
  ios_base::sync_with_stdio(0);cin.tie(0);
  string s;getline(cin,s);
  int pl=1,mn=0;
  for(int i=0;i<s.size();i++)
  {
    char x=s[i];
    if(x=='+')pl++;
    if(x=='-')mn++;
  }
  stringstream str(s);string num;
  while(str>>num);
  stringstream srt(num);int n;srt>>n;

  int plo=pl,phi=pl*n;
  int mlo=mn+n,mhi=mn*n+n;

  if(phi<mlo||plo>mhi)cout<<"Impossible"<<endl,exit(0);

  int pt=max(plo,mlo);
  vector<int>v1=make(pt,pl,n);
  vector<int>v2=make(pt-n,mn,n);

  cout<<"Possible"<<endl;
  int pr=0,pt1=0,pt2=0;
  for(int i=0;i<s.size();i++)
  {
    char x=s[i];
    if(x=='?')
    {
      if(!pr)cout<<v1[pt1++];
      else cout<<v2[pt2++];
    }
    else
    {
      if(x=='+')pr=0;
      if(x=='-')pr=1;
      cout<<x;
    }
  }
  cout<<endl;
  return 0;
}


#include<bits/stdc++.h>
#define long long long
using namespace std;
const int N=1e6;
int main()
{
  ios_base::sync_with_stdio(0);cin.tie(0);
  string s;getline(cin,s);
  int pl=1,mn=0;
  for(auto x:s)
  {
    if(x=='+')pl++;
    if(x=='-')mn++;
  }
  stringstream str(s);string num;
  while(str>>num);
  stringstream srt(num);int n;srt>>n;

  vector<int>v;
  for(int i=1;i<=pl;i++)
  {
    int mx=(n+mn-(pl-i));
    int now=min(mx,n);
    if(now<=0)cout<<"Impossible"<<endl,exit(0);
    v.push_back(now);mn-=now;
  }
  if(n+mn!=0)cout<<"Impossible"<<endl,exit(0);
  cout<<"Possible"<<endl;
  int pr=0,pt=0;
  for(auto x:s)
  {
    if(x=='?')
    {
      if(!pr)cout<<v[pt++];
      else cout<<1;
    }
    else
    {
      if(x=='+')pr=0;
      if(x=='-')pr=1;
      cout<<x;
    }
  }
  cout<<endl;
  return 0;
}


#include<bits/stdc++.h>
#define long long long
using namespace std;
const int N=1e6;
int main()
{
  ios_base::sync_with_stdio(0);cin.tie(0);
  string s;getline(cin,s);
  int pl=1,mn=0;
  for(auto x:s)
  {
    if(x=='+')pl++;
    if(x=='-')mn++;
  }
  stringstream str(s);string num;
  while(str>>num);
  stringstream srt(num);int n;srt>>n;

  vector<int>v;
  for(int i=1;i<=pl;i++)
  {
    int mx=(n+mn-(pl-i));
    int now=min(mx,n);
    v.push_back(now);mn-=now;
  }
  if(n+mn!=0)cout<<"Impossible"<<endl,exit(0);
  cout<<"Possible"<<endl;
  int pr=0,pt=0;
  for(auto x:s)
  {
    if(x=='?')
    {
      if(!pr)cout<<v[pt++];
      else cout<<1;
    }
    else
    {
      if(x=='+')pr=0;
      if(x=='-')pr=1;
      cout<<x;
    }
  }
  cout<<endl;
  return 0;
}


#include <bits/stdc++.h>
#define AND &&
#define x1 fjewioafkjwaoi
#define y1 kfewpaofkaewpof
#define int long long
using namespace std;

const int nmax = 300010;

string s;
int n , a[200], b[200];

main() {
    //freopen("input.txt", "r", stdin);

    getline(cin, s);
    for (int posN = s.find("= ")+2; posN<s.size(); posN++) n = n*10+s[posN]-'0';
    int positive=1, negative=0;
    for (int i=0; i<s.size(); i++) {
        if (s[i]=='+') positive++; else
        if (s[i]=='-') negative++;
    }
    int sum = positive*n-negative*1;
    if (sum<n) return printf("Impossible")*0;

    for (int i=0; i<positive; i++) a[i]=n;
    for (int i=0; i<negative; i++) b[i]=1;

    for (int i=0; i<positive; i++) {
        int diff = sum - n;
        if (diff==0) continue;
        a[i]-=min(n-1, diff);
        sum-=n-a[i];
    }
    for (int i=0; i<negative; i++) {
        int diff = sum - n;
        if (diff==0) continue;
        b[i]=min(n, diff);
        sum = sum + 1 - b[i];
    }
    /*cout << "positivies" << endl;
    for (int i=0; i<positive; i++) cout << a[i] << " ";
    cout << endl;
    cout << "negatives" << endl;
    for (int i=0; i<negative; i++) cout << b[i] << " ";
    cout << endl;
*/
    if (sum!=n) return printf("Impossible")*0;
    printf("Possible");

    int na=0, nb=0;
    char op='+';
    for (int i=0; i<s.size(); i++){
        if (s[i]=='?'){
            if (i>0) cout << op << " ";
            if (op=='+') cout << a[na++] << " "; else
            cout << b[nb++] << " ";
        }
        if (s[i]=='+') op='+';
        if (s[i]=='-') op='-';

    }
    cout << "= " << sum << endl;

	return 0;
}


#include <bits/stdc++.h>
#define AND &&
#define x1 fjewioafkjwaoi
#define y1 kfewpaofkaewpof
#define int long long
using namespace std;

const int nmax = 300010;

string s;
int n , a[200], b[200];

main() {
    //freopen("input.txt", "r", stdin);

    getline(cin, s);
    for (int posN = s.find("= ")+2; posN<s.size(); posN++) n = n*10+s[posN]-'0';
    int positive=1, negative=0;
    for (int i=0; i<s.size(); i++) {
        if (s[i]=='+') positive++; else
        if (s[i]=='-') negative++;
    }
    int sum = positive*n-negative*1;
    if (sum<n) return printf("Impossible")*0;

    for (int i=0; i<positive; i++) a[i]=n;
    for (int i=0; i<negative; i++) b[i]=1;

    for (int i=0; i<positive; i++) {
        int diff = sum - n;
        if (diff==0) continue;
        a[i]-=min(n-1, diff);
        sum-=n-a[i];
    }
    for (int i=0; i<negative; i++) {
        int diff = sum - n;
        if (diff==0) continue;
        b[i]=min(n, diff);
        sum = sum + 1 - b[i];
    }
    /*cout << "positivies" << endl;
    for (int i=0; i<positive; i++) cout << a[i] << " ";
    cout << endl;
    cout << "negatives" << endl;
    for (int i=0; i<negative; i++) cout << b[i] << " ";
    cout << endl;
*/
    if (sum!=n) return printf("Impossible")*0;
    printf("Possible\n");

    int na=0, nb=0;
    char op='+';
    for (int i=0; i<s.size(); i++){
        if (s[i]=='?'){
            if (i>0) cout << op << " ";
            if (op=='+') cout << a[na++] << " "; else
            cout << b[nb++] << " ";
        }
        if (s[i]=='+') op='+';
        if (s[i]=='-') op='-';

    }
    cout << "= " << sum << endl;

	return 0;
}


#include <bits/stdc++.h>
#define AND &&
#define x1 fjewioafkjwaoi
#define y1 kfewpaofkaewpof
#define int long long
using namespace std;

const int nmax = 300010;

string s;
int n , a[200], b[200];

main() {
    #ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
#endif
    getline(cin, s);
    for (int posN = s.find("= ")+2; posN<s.size(); posN++) n = n*10+s[posN]-'0';
    int positive=1, negative=0;
    for (int i=0; i<s.size(); i++) {
        if (s[i]=='+') positive++; else
        if (s[i]=='-') negative++;
    }
    int sum = positive*n-negative*1;
    if (sum<n) return printf("Impossible")*0;

    for (int i=0; i<positive; i++) a[i]=n;
    for (int i=0; i<negative; i++) b[i]=1;

    for (int i=0; i<positive; i++) {
        int diff = sum - n;
        if (diff==0) continue;
        a[i]-=min(n-1, diff);
        sum-=n-a[i];
    }
    for (int i=0; i<negative; i++) {
        int diff = sum - n;
        if (diff==0) continue;
        b[i]+=min(n-1, diff);
        sum = sum - min(n-1, diff);
    }
    /*cout << "positivies" << endl;
    for (int i=0; i<positive; i++) cout << a[i] << " ";
    cout << endl;
    cout << "negatives" << endl;
    for (int i=0; i<negative; i++) cout << b[i] << " ";
    cout << endl;
*/
    if (sum!=n) return printf("Impossible")*0;
    printf("Possible\n");

    int na=0, nb=0;
    char op='+';
    for (int i=0; i<s.size(); i++){
        if (s[i]=='?'){
            if (i>0) cout << op << " ";
            if (op=='+') cout << a[na++] << " "; else
            cout << b[nb++] << " ";
        }
        if (s[i]=='+') op='+';
        if (s[i]=='-') op='-';

    }
    cout << "= " << sum << endl;

	return 0;
}


#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int main()
{
    ios::sync_with_stdio(false);
    int m = 0, p = 1;
    char t;
    vector<int> sgn{1};
    while (cin >> t, t != '=')
    {
        if (t == '+') ++p, sgn.push_back(1);
        else if (t == '-') ++m, sgn.push_back(-1);
    }
    int n; cin >> n; int nn = n;
    if (!(p - m*n <= n && n <= p*n - m)) return cout << "Impossible", 0;
    cout << "Possible\n";
    vector<int> ans;
    int sum = 0;
    for(int s : sgn)
    {
        if (s == 1) --p; else --m;
        int res;
        for(res = 1; !(sum+s*res+p-m*n <= n && n <= sum+s*res+p*n-m); ++res);
        sum += (s*res);
        ans.push_back(res);
    }
    for(int i = 0; i < ans.size(); ++i)
    {
        if (i) cout << (sgn[i] == 1 ? "+ " : "- ");
        cout << ans[i] << ' ';
    }
    cout << "= " << nn;
}


#include <bits/stdc++.h>

using namespace std;
using ll = long long;

int main()
{
    ios::sync_with_stdio(false);
    int m = 0, p = 1;
    char t;
    vector<int> sgn{1};
    while (cin >> t, t != '=')
    {
        if (t == '+') ++p, sgn.push_back(1);
        else if (t == '-') ++m, sgn.push_back(-1);
    }
    int n; cin >> n; int nn = n;
    if (!(p - m*n <= n && n <= p*n - m)) return cout << "Impossible", 0;
    cout << "Possible\n";
    vector<int> ans;
    for(int s : sgn)
    {
        if (s == 1) --p; else --m;
        int res;
        if (s == 1)
        {
            res = min((n+m*n-p)/(m+1), nn);
            n -= res;
        }
        else
        {
            res = max((n+m-p*n)/(p-1) + ((n+m-p*n)%(p-1) != 0), -nn);
            n -= res;
            res = -res;
        }
        ans.push_back(res);
    }
    for(int i = 0; i < ans.size(); ++i)
    {
        if (i) cout << (sgn[i] == 1 ? "+ " : "- ");
        cout << ans[i] << ' ';
    }
    cout << "= " << nn;
}


#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
#include <cassert>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MEM(a,b) memset((a),(b),sizeof(a))
const LL INF = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string str;
	getline(cin, str);
	int pos = 1;
	int neg = 0;
	int n = 0;
	for (auto &c : str)
	{
		if (c == '+') pos++;
		else if (c == '-') neg++;
		else if (isdigit(c)) n = n * 10 + c - '0';
	}
	if (pos - neg > n || pos * n - neg < n)
	{
		puts("Impossible");
		return 0;
	}
	int r = n + neg - pos;
	int sign = 1;
	puts("Possible");
	for (auto &c : str)
	{
		if (c != '?')
		{
			putchar(c);
			if (c == '+') sign = 1;
			else sign = -1;
		}
		else
		{
			if (c == -1) putchar('1');
			else
			{
				int o = min(n - 1, r);
				r -= o;
				int x = o + 1;
				printf("%d", x);
			}
		}
	}
	return 0;
}


#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
#include <cassert>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MEM(a,b) memset((a),(b),sizeof(a))
const LL INF = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string str;
	getline(cin, str);
	int pos = 1;
	int neg = 0;
	int n = 0;
	for (auto &c : str)
	{
		if (c == '+') pos++;
		else if (c == '-') neg++;
		else if (isdigit(c)) n = n * 10 + c - '0';
	}
	if (pos * n - neg < n)
	{
		puts("Impossible");
		return 0;
	}
	int r = n + neg - pos;
	int sign = 1;
	puts("Possible");
	for (auto &c : str)
	{
		if (c != '?')
		{
			putchar(c);
			if (c == '+') sign = 1;
			else sign = -1;
		}
		else
		{
			if (c == -1) putchar('1');
			else
			{
				int o = min(n - 1, r);
				r -= o;
				int x = o + 1;
				printf("%d", x);
			}
		}
	}
	return 0;
}


#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
#include <cassert>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MEM(a,b) memset((a),(b),sizeof(a))
const LL INF = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string str;
	getline(cin, str);
	int pos = 1;
	int neg = 0;
	int n = 0;
	for (auto &c : str)
	{
		if (c == '+') pos++;
		else if (c == '-') neg++;
		else if (isdigit(c)) n = n * 10 + c - '0';
	}
	if (pos - neg * n > n || pos * n - neg < n)
	{
		puts("Impossible");
		return 0;
	}
	int r = n + neg - pos;
	int sign = 1;
	puts("Possible");
	for (auto &c : str)
	{
		if (c != '?')
		{
			putchar(c);
			if (c == '+') sign = 1;
			else if(c == '-') sign = -1;
		}
		else
		{
			if (sign == -1) putchar('1');
			else
			{
				int o = min(n - 1, r);
				r -= o;
				int x = o + 1;
				printf("%d", x);
			}
		}
	}
	return 0;
}


#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
#include <cassert>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MEM(a,b) memset((a),(b),sizeof(a))
const LL INF = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string str;
	getline(cin, str);
	int pos = 1;
	int neg = 0;
	int n = 0;
	for (auto &c : str)
	{
		if (c == '+') pos++;
		else if (c == '-') neg++;
		else if (isdigit(c)) n = n * 10 + c - '0';
	}
	if (pos - neg > n || pos * n - neg < n)
	{
		puts("Impossible");
		return 0;
	}
	int r = n + neg - pos;
	int sign = 1;
	puts("Possible");
	for (auto &c : str)
	{
		if (c != '?')
		{
			putchar(c);
			if (c == '+') sign = 1;
			else if(c == '-') sign = -1;
		}
		else
		{
			if (sign == -1) putchar('1');
			else
			{
				int o = min(n - 1, r);
				r -= o;
				int x = o + 1;
				printf("%d", x);
			}
		}
	}
	return 0;
}


#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
#include <cassert>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MEM(a,b) memset((a),(b),sizeof(a))
const LL INF = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string str;
	getline(cin, str);
	int pos = 1;
	int neg = 0;
	int n = 0;
	for (auto &c : str)
	{
		if (c == '+') pos++;
		else if (c == '-') neg++;
		else if (isdigit(c)) n = n * 10 + c - '0';
	}
	if (pos - neg * n > n || pos * n - neg < n)
	{
		puts("Impossible");
		return 0;
	}
	int tot = pos*n - neg*n;
	int sign = 1;
	puts("Possible");
	for (auto &c : str)
	{
		if (c != '?')
		{
			putchar(c);
			if (c == '+') sign = 1;
			else if(c == '-') sign = -1;
		}
		else
		{
			if (sign == -1)
			{
				int o = 0;
				if (tot <= n)
				{
					o = min(n - 1, n - tot);
					tot += o;
				}
				printf("%d", n-o);
			}
			else
			{
				int o = 0;
				if (tot >= n)
				{
					o = min(n - 1, tot - n);
					tot -= o;
				}
				printf("%d", n - o);
			}
		}
	}
	return 0;
}


#include <cstdlib>
#include <cctype>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
#include <iostream>
#include <sstream>
#include <map>
#include <set>
#include <queue>
#include <stack>
#include <fstream>
#include <numeric>
#include <iomanip>
#include <bitset>
#include <list>
#include <stdexcept>
#include <functional>
#include <utility>
#include <ctime>
#include <cassert>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
#define MEM(a,b) memset((a),(b),sizeof(a))
const LL INF = 1e9 + 7;
const int N = 2e5 + 10;

int main()
{
	//freopen("input.txt", "r", stdin);
	//freopen("output.txt", "w", stdout);
	string str;
	getline(cin, str);
	int pos = 1;
	int neg = 0;
	int n = 0;
	for (auto &c : str)
	{
		if (c == '+') pos++;
		else if (c == '-') neg++;
		else if (isdigit(c)) n = n * 10 + c - '0';
	}
	if (pos - neg > n || pos * n - neg < n)
	{
		puts("Impossible");
		return 0;
	}
	int r = n + neg - pos;
	int sign = 1;
	puts("Possible");
	for (auto &c : str)
	{
		if (c != '?')
		{
			putchar(c);
			if (c == '+') sign = 1;
			else sign = -1;
		}
		else
		{
			if (sign == -1) putchar('1');
			else
			{
				int o = min(n - 1, r);
				r -= o;
				int x = o + 1;
				printf("%d", x);
			}
		}
	}
	return 0;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-')
            sign += s[i];
    }
    //cout<<p<<" "<<m<<"\n";
    if(p*n - m < n || (p - m * n) > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;
    int k = i - n;
    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }
    p--;
    for(int j = 0; j < sign.length(); j++)
    {
        cout<<sign[j]<<" ";

        if(sign[j] == '-')
        {
            m--;
            if(k - m >= n)
            {
                cout<<n<<" ";
                k -= n;
            }
            else if(k >= m)
            {
                cout<<k-m<<" ";
                k -= (k-m);
            }
            continue;
        }
        p--;

        if(i - p >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > p)
        {
            cout<<(i - p)<<" ";
            i = i - (i - p);
        }
        else
        {
            cout<<"1 ";
            i--;
        }
    }

    cout<<"= "<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-' || s[i] == '=')
            sign += s[i];
    }

    if(p*n - m < n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;

    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }
    cout<<sign[0]<<" ";
    for(int j = 1; j < sign.length(); j++)
    {
        if(s[i] == '-')
        {
            cout<<"1 "<<s[i]<<" ";
            continue;
        }

        if(i - (p - j - 1) >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > (p - j - 1))
        {
            cout<<(i - p + j + 1 )<<" ";
            i = i - (i - p + j + 1);
        }
        else
        {
            cout<<"1 ";
            i--;
        }

        cout<<sign[j]<<" ";
    }

    cout<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-')
            sign += s[i];
    }

    if(p*n - m < n || p - m > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;

    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }

    for(int j = 0; j < sign.length(); j++)
    {
        if(sign[j] == '-')
        {
            cout<<sign[j]<<" 1 ";
            continue;
        }

        cout<<sign[j]<<" ";
        if(i - (p - j - 1) >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > (p - j - 1))
        {
            cout<<(i - p + j + 1 )<<" ";
            i = i - (i - p + j + 1);
        }
        else
        {
            cout<<"1 ";
            i--;
        }
    }

    cout<<"= "<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-' || s[i] == '=')
            sign += s[i];
    }

    if(p*n - m < n || p - m > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;

    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }

    for(int j = 0; j < sign.length(); j++)
    {
        if(sign[j] == '-')
        {
            cout<<sign[j]<<" 1 ";
            continue;
        }

        cout<<sign[j]<<" ";
        if(i - (p - j - 1) >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > (p - j - 1))
        {
            cout<<(i - p + j + 1 )<<" ";
            i = i - (i - p + j + 1);
        }
        else
        {
            cout<<"1 ";
            i--;
        }
    }

    cout<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-')
            sign += s[i];
    }

    if(p*n - m < n || p - m > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;

    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }

    for(int j = 0; j < sign.length(); j++)
    {
        if(sign[j] == '-')
        {
            cout<<sign[j]<<" 1 ";
            continue;
        }
        p--;
        cout<<sign[j]<<" ";
        if(i - p >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > p)
        {
            cout<<(i - p)<<" ";
            i = i - (i - p);
        }
        else
        {
            cout<<"1 ";
            i--;
        }
    }

    cout<<"= "<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-' || s[i] == '=')
            sign += s[i];
    }

    if(p*n - m < n || p - m > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;

    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }

    for(int j = 0; j < sign.length(); j++)
    {
        if(sign[j] == '-')
        {
            cout<<sign[j]<<"1 ";
            continue;
        }

        cout<<sign[j]<<" ";
        if(i - (p - j - 1) >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > (p - j - 1))
        {
            cout<<(i - p + j + 1 )<<" ";
            i = i - (i - p + j + 1);
        }
        else
        {
            cout<<"1 ";
            i--;
        }
    }

    cout<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-')
            sign += s[i];
    }
    cout<<p<<" "<<m<<"\n";
    if(p*n - m < n || (p - m * n) > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;
    int k = i - n;
    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }
    p--;
    for(int j = 0; j < sign.length(); j++)
    {
        cout<<sign[j]<<" ";

        if(sign[j] == '-')
        {
            m--;
            if(k - m >= n)
            {
                cout<<n<<" ";
                k -= n;
            }
            else if(k >= m)
            {
                cout<<k-m<<" ";
                k -= (k-m);
            }
            continue;
        }
        p--;

        if(i - p >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > p)
        {
            cout<<(i - p)<<" ";
            i = i - (i - p);
        }
        else
        {
            cout<<"1 ";
            i--;
        }
    }

    cout<<"= "<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-')
            sign += s[i];
    }

    if(p*n - m < n || p - m > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;

    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }
    p--;
    for(int j = 0; j < sign.length(); j++)
    {
        if(sign[j] == '-')
        {
            cout<<sign[j]<<" 1 ";
            continue;
        }
        p--;
        cout<<sign[j]<<" ";
        if(i - p >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > p)
        {
            cout<<(i - p)<<" ";
            i = i - (i - p);
        }
        else
        {
            cout<<"1 ";
            i--;
        }
    }

    cout<<"= "<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-' || s[i] == '=')
            sign += s[i];
    }

    if(p*n - m < n || p - m > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;

    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }
    cout<<sign[0]<<" ";
    for(int j = 1; j < sign.length(); j++)
    {
        if(sign[j] == '-')
        {
            cout<<"1 "<<sign[j]<<" ";
            continue;
        }

        if(i - (p - j - 1) >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > (p - j - 1))
        {
            cout<<(i - p + j + 1 )<<" ";
            i = i - (i - p + j + 1);
        }
        else
        {
            cout<<"1 ";
            i--;
        }

        cout<<sign[j]<<" ";
    }

    cout<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-')
            sign += s[i];
    }
    cout<<p<<" "<<m<<"\n";
    if(p*n - m < n || (p - m * n) > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;
    int k = i - m;
    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }
    p--;
    for(int j = 0; j < sign.length(); j++)
    {
        cout<<sign[j]<<" ";

        if(sign[j] == '-')
        {
            m--;
            if(k - m >= n)
            {
                cout<<n<<" ";
                k -= n;
            }
            else if(k >= m)
            {
                cout<<k-m<<" ";
                k -= (k-m);
            }
            continue;
        }
        p--;

        if(i - p >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > p)
        {
            cout<<(i - p)<<" ";
            i = i - (i - p);
        }
        else
        {
            cout<<"1 ";
            i--;
        }
    }

    cout<<"= "<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-' || s[i] == '=')
            sign += s[i];
    }

    if(p*n - m < n || p - m > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;

    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }
    cout<<sign[0]<<" ";
    for(int j = 1; j < sign.length(); j++)
    {
        if(s[j] == '-')
        {
            cout<<"1 "<<s[i]<<" ";
            continue;
        }

        if(i - (p - j - 1) >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > (p - j - 1))
        {
            cout<<(i - p + j + 1 )<<" ";
            i = i - (i - p + j + 1);
        }
        else
        {
            cout<<"1 ";
            i--;
        }

        cout<<sign[j]<<" ";
    }

    cout<<n;
}


#include<bits/stdc++.h>
#define ll long long
using namespace std;

main()
{
    string s;
    getline(cin, s);

    int n;
//    cout<<s<<" ";
    int p = 1, m = 0;
    string sign = "";

    for(int i = 0; i < s.length(); i++)
    {
        if(s[i] == '+')
            p++;
        else if(s[i] == '-')
            m++;
        else if(s[i] == '=')
            n = stoi(s.substr(i+1, s.length()));

        if(s[i] == '+' || s[i] == '-' || s[i] == '=')
            sign += s[i];
    }

    if(p*n - m < n || p - m > n)
    {
        cout<<"Impossible";
        return 0;
    }
    cout<<"Possible"<<"\n";
    int i = p;
    while(i - m < n)
        i++;

    int j = 0;

    if(i - (p - j - 1) >= n)
    {
        cout<<n<<" ";
        i -= n;
    }
    else if(i > (p - j - 1))
    {
        cout<<(i - p + j + 1 )<<" ";
        i = i - (i - p + j + 1);
    }
    else
    {
        cout<<"1 ";
        i--;
    }
    cout<<sign[0]<<" ";
    for(int j = 1; j < sign.length(); j++)
    {
        if(s[i] == '-')
        {
            cout<<"1 "<<s[i]<<" ";
            continue;
        }

        if(i - (p - j - 1) >= n)
        {
            cout<<n<<" ";
            i -= n;
        }
        else if(i > (p - j - 1))
        {
            cout<<(i - p + j + 1 )<<" ";
            i = i - (i - p + j + 1);
        }
        else
        {
            cout<<"1 ";
            i--;
        }

        cout<<sign[j]<<" ";
    }

    cout<<n;
}


#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include <assert.h>
#include<sstream>
#include<typeinfo>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<stdio.h>
#include <functional>
#include<unordered_map>
#include <numeric>
#include<bitset>
#include<iomanip>
#include<tuple>
using namespace std;
#define ZERO(a)  memset(a,-1,sizeof(a))
#define ll  long long int
#define all(c) c.begin(), c.end()
#define FOR(i,x,n)  for(int i=x;i<n;i++)
#define FORc(i,x,n)  for(int i=x;i<=n;i++)
#define  pi           acos(-1.0)
#define  pii           pair<int,int>
#define ull                 unsigned long long
#define ll                  long long
#define pb                  push_back
#define mp                  make_pair

#define sorta(x) sort(x.begin(),x.end())
#define rev(x) reverse(x.begin(),x.end())
#define cl                  ios_base::sync_with_stdio(0);cin.tie(0);
#define pf printf
#define sf scanf
#define MOD (ll)1e15
//#define MAX                 1e9+7

typedef vector<int>   vi;

typedef double      db;
typedef vector<ll>   vll;

typedef vector<string>   vs;

typedef vector<ull>   vull;

typedef vector<vector<int>>   vvi;
typedef vector<vector<ll>>   vvll;

typedef vector<bool>   vbl;
typedef vector<pair<int, int>>   vpii;
typedef vector<pair<ll, ll>>   vpll;
typedef deque<ll> dell;
typedef deque<int> dei;
//const int INF = (int) (1e9+7);
const int N = 1000;
const double  eps = 1e-9;
ll INF = 1e9;
const int OO = 0x3f3f3f3f;

int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };

int dy[] = { 0, 0, 1, -1, 1, -1, -1, 1 };

/*bool comp(pair<int, int> a, pair<int, int> b) {
	if (a.first < b.first) return true;
	else if (a.first > b.first) return false;
	else return a.first < b.first;
}*/
/*struct compare
{
bool operator()(const ll& l, const ll& r)
{
return l > r;
}
//priority_queue<int,vector<int>,compare>deq;
};*/

void read(string str, int node)
{
	stringstream ss;
	int number;
	ss << str;
	while (ss >> number)
		cout << number << endl;
	//getlint(cin,string);

}

ll fp(ll b, ll p){
	if (p == 0) return 1;
	if (p % 2 == 0) return fp((b*b) % INF, p / 2);
	return (fp(b, p - 1)*b) % INF;
}
ull read_binary(string s){
	ull x = 0, tmp = 1;
	for (int i = s.size() - 1; i >= 0; i--){
		x = (x + tmp*(s[i] - '0')) % INF;
		tmp = (tmp * 2) % INF;
	}
	return x;
}

ll com(ll x, ll y)
{
	ll sum = 1;
	for (int i = 1; i <= y; i++)
	{
		sum *= x;
		x--;
		sum /= i;
	}
	return sum;
}

ll gcd(ll n1, ll n2)
{
	if (n2 != 0)
		return gcd(n2, n1 % n2);
	else
		return n1;
}

int setBit(int num, int idx, int val = 1){ return (val) ? (num | (1 << idx)) : (num&~(1 << idx)); }
int getBit(int num, int idx){ return ((num >> idx) & 1) == 1; }
int cntBit(int num){ int ret = 0; while (num){ if (num % 2)ret++; num /= 2; }return ret; }

bool sum[1500];

void sieve()
{
	sum[0] = sum[1] = 1;

	for (int i = 2; i*i<1002; i++)
	{
		if (!sum[i])
		{
			for (int j = 2 * i; j<1002; j += i)
			{
				sum[j] = 1;
			}
		}
	}
}

vvi adj, comps;

vi instack, lowlink, dfn, comp, parent;
bool points[1000];
stack<int>stk;
int ndfn;

void tarjan(int node)
{
	lowlink[node] = dfn[node] = ndfn++;
	instack[node] = 1;
	stk.push(node);

	FOR(i, 0, adj[node].size())
	{
		int ch = adj[node][i];
		if (dfn[ch] == -1)
		{
			tarjan(ch);

			lowlink[node] = min(lowlink[node], lowlink[ch]);
		}
		else if (instack[ch])
		{
			lowlink[node] = min(lowlink[node], dfn[ch]);
		}

	}
	if (lowlink[node] == dfn[node])
	{
		comps.pb(vi());
		int x = -1;
		while (x != node)
		{
			x = stk.top(); stk.pop();
			instack[x] = 0;
			comps.back().pb(x);
			comp[x] = comps.size() - 1;
		}
	}

}

int main()
{
	cl;

	string s;
	int lst = -1;
	ll n;

	char c;
	while (1)
	{
		cin >> c;
		if (c == '=')
		{
			cin >> n;
			break;
		}
		else
		{
			if (c == '+')
			{
				s += c;
				lst = s.size() - 1;
			}
			else
				s += c;
		}
	}

	string k;

	bool v = 0;
	FOR(i, 0, s.size())
	{
		if (i == lst)
		{
			v = 1;
			i+=2;
		}
		k += s[i];

	}

	if (s.size() == 1)
	{
		cout << "Possible\n";
		cout << n << endl;
		return 0;
	}
	if (lst == -1)
	{
		return cout << "Impossible\n",0;
	}

	if (v)
		k += '+', k += '?';

	ll sum = 1;
	cout << "Possible\n";
	string res;

	for (int i = 1; i <= k.size()-2; i += 2)
	{

		if (k[i] == '+')
		{
			sum++;
			res += '1';
			res += '+';
		}
		else if (k[i]=='-')
		{
			sum--;

			res += '1';
			res += '-';
		}
	}

	res += '1';
	res += '+';
	ll dif = n - sum;
	res += to_string(dif);
	FOR(i, 0, res.size())
	{
		cout << res[i] << ' ';
	}
	cout << "= ";
	cout << n << endl;

}


#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include <assert.h>
#include<sstream>
#include<typeinfo>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<stdio.h>
#include <functional>
#include<unordered_map>
#include <numeric>
#include<bitset>
#include<iomanip>
#include<tuple>
using namespace std;
#define ZERO(a)  memset(a,-1,sizeof(a))
#define ll  long long int
#define all(c) c.begin(), c.end()
#define FOR(i,x,n)  for(int i=x;i<n;i++)
#define FORc(i,x,n)  for(int i=x;i<=n;i++)
#define  pi           acos(-1.0)
#define  pii           pair<int,int>
#define ull                 unsigned long long
#define ll                  long long
#define pb                  push_back
#define mp                  make_pair

#define sorta(x) sort(x.begin(),x.end())
#define rev(x) reverse(x.begin(),x.end())
#define cl                  ios_base::sync_with_stdio(0);cin.tie(0);
#define pf printf
#define sf scanf
#define MOD (ll)1e15
//#define MAX                 1e9+7

typedef vector<int>   vi;

typedef double      db;
typedef vector<ll>   vll;

typedef vector<string>   vs;

typedef vector<ull>   vull;

typedef vector<vector<int>>   vvi;
typedef vector<vector<ll>>   vvll;

typedef vector<bool>   vbl;
typedef vector<pair<int, int>>   vpii;
typedef vector<pair<ll, ll>>   vpll;
typedef deque<ll> dell;
typedef deque<int> dei;
//const int INF = (int) (1e9+7);
const int N = 1000;
const double  eps = 1e-9;
ll INF = 1e9;
const int OO = 0x3f3f3f3f;

int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };

int dy[] = { 0, 0, 1, -1, 1, -1, -1, 1 };

/*bool comp(pair<int, int> a, pair<int, int> b) {
	if (a.first < b.first) return true;
	else if (a.first > b.first) return false;
	else return a.first < b.first;
}*/
/*struct compare
{
bool operator()(const ll& l, const ll& r)
{
return l > r;
}
//priority_queue<int,vector<int>,compare>deq;
};*/

void read(string str, int node)
{
	stringstream ss;
	int number;
	ss << str;
	while (ss >> number)
		cout << number << endl;
	//getlint(cin,string);

}

ll fp(ll b, ll p){
	if (p == 0) return 1;
	if (p % 2 == 0) return fp((b*b) % INF, p / 2);
	return (fp(b, p - 1)*b) % INF;
}
ull read_binary(string s){
	ull x = 0, tmp = 1;
	for (int i = s.size() - 1; i >= 0; i--){
		x = (x + tmp*(s[i] - '0')) % INF;
		tmp = (tmp * 2) % INF;
	}
	return x;
}

ll com(ll x, ll y)
{
	ll sum = 1;
	for (int i = 1; i <= y; i++)
	{
		sum *= x;
		x--;
		sum /= i;
	}
	return sum;
}

ll gcd(ll n1, ll n2)
{
	if (n2 != 0)
		return gcd(n2, n1 % n2);
	else
		return n1;
}

int setBit(int num, int idx, int val = 1){ return (val) ? (num | (1 << idx)) : (num&~(1 << idx)); }
int getBit(int num, int idx){ return ((num >> idx) & 1) == 1; }
int cntBit(int num){ int ret = 0; while (num){ if (num % 2)ret++; num /= 2; }return ret; }

bool sum[1500];

void sieve()
{
	sum[0] = sum[1] = 1;

	for (int i = 2; i*i<1002; i++)
	{
		if (!sum[i])
		{
			for (int j = 2 * i; j<1002; j += i)
			{
				sum[j] = 1;
			}
		}
	}
}

vvi adj, comps;

vi instack, lowlink, dfn, comp, parent;
bool points[1000];
stack<int>stk;
int ndfn;

void tarjan(int node)
{
	lowlink[node] = dfn[node] = ndfn++;
	instack[node] = 1;
	stk.push(node);

	FOR(i, 0, adj[node].size())
	{
		int ch = adj[node][i];
		if (dfn[ch] == -1)
		{
			tarjan(ch);

			lowlink[node] = min(lowlink[node], lowlink[ch]);
		}
		else if (instack[ch])
		{
			lowlink[node] = min(lowlink[node], dfn[ch]);
		}

	}
	if (lowlink[node] == dfn[node])
	{
		comps.pb(vi());
		int x = -1;
		while (x != node)
		{
			x = stk.top(); stk.pop();
			instack[x] = 0;
			comps.back().pb(x);
			comp[x] = comps.size() - 1;
		}
	}

}

int main()
{
	cl;

	string s;
	int lst = -1;
	ll n;

	char c;
	while (1)
	{
		cin >> c;
		if (c == '=')
		{
			cin >> n;
			break;
		}
		else
		{
			if (c == '+')
			{
				s += c;
				lst = s.size() - 1;
			}
			else
				s += c;
		}
	}

	string k;

	bool v = 0;
	FOR(i, 0, s.size())
	{
		if (i == lst)
		{
			v = 1;
			i+=2;
		}
		k += s[i];

	}

	if (s.size() == 1)
	{
		cout << "Possible\n";
		cout << n;
		cout << " = ";
		cout << n << endl;
		return 0;
	}
	if (lst == -1)
	{
		return cout << "Impossible\n",0;
	}

	if (v)
		k += '+', k += '?';

	ll sum = 1;

	string res;

	for (int i = 1; i <= k.size()-2; i += 2)
	{

		if (k[i] == '+')
		{
			sum++;
			res += '1';
			res += '+';
		}
		else if (k[i]=='-')
		{
			sum--;

			res += '1';
			res += '-';
		}
	}

	res += '1';
	res += '+';
	ll dif = n - sum;
	if (dif <= 0)
	{
		return cout << "Impossible\n", 0;
	}
	cout << "Possible\n";
	FOR(i, 0, res.size())
	{
		cout << res[i];
		cout << ' ';
	}
	cout<<dif<<' ';

	cout << "= ";
	cout << n << endl;

}


#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include <assert.h>
#include<sstream>
#include<typeinfo>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<stdio.h>
#include <functional>
#include<unordered_map>
#include <numeric>
#include<bitset>
#include<iomanip>
#include<tuple>
using namespace std;
#define ZERO(a)  memset(a,-1,sizeof(a))
#define ll  long long int
#define all(c) c.begin(), c.end()
#define FOR(i,x,n)  for(int i=x;i<n;i++)
#define FORc(i,x,n)  for(int i=x;i<=n;i++)
#define  pi           acos(-1.0)
#define  pii           pair<int,int>
#define ull                 unsigned long long
#define ll                  long long
#define pb                  push_back
#define mp                  make_pair

#define sorta(x) sort(x.begin(),x.end())
#define rev(x) reverse(x.begin(),x.end())
#define cl                  ios_base::sync_with_stdio(0);cin.tie(0);
#define pf printf
#define sf scanf
#define MOD (ll)1e15
//#define MAX                 1e9+7

typedef vector<int>   vi;

typedef double      db;
typedef vector<ll>   vll;

typedef vector<string>   vs;

typedef vector<ull>   vull;

typedef vector<vector<int>>   vvi;
typedef vector<vector<ll>>   vvll;

typedef vector<bool>   vbl;
typedef vector<pair<int, int>>   vpii;
typedef vector<pair<ll, ll>>   vpll;
typedef deque<ll> dell;
typedef deque<int> dei;
//const int INF = (int) (1e9+7);
const int N = 1000;
const double  eps = 1e-9;
ll INF = 1e9;
const int OO = 0x3f3f3f3f;

int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };

int dy[] = { 0, 0, 1, -1, 1, -1, -1, 1 };

/*bool comp(pair<int, int> a, pair<int, int> b) {
	if (a.first < b.first) return true;
	else if (a.first > b.first) return false;
	else return a.first < b.first;
}*/
/*struct compare
{
bool operator()(const ll& l, const ll& r)
{
return l > r;
}
//priority_queue<int,vector<int>,compare>deq;
};*/

void read(string str, int node)
{
	stringstream ss;
	int number;
	ss << str;
	while (ss >> number)
		cout << number << endl;
	//getlint(cin,string);

}

ll fp(ll b, ll p){
	if (p == 0) return 1;
	if (p % 2 == 0) return fp((b*b) % INF, p / 2);
	return (fp(b, p - 1)*b) % INF;
}
ull read_binary(string s){
	ull x = 0, tmp = 1;
	for (int i = s.size() - 1; i >= 0; i--){
		x = (x + tmp*(s[i] - '0')) % INF;
		tmp = (tmp * 2) % INF;
	}
	return x;
}

ll com(ll x, ll y)
{
	ll sum = 1;
	for (int i = 1; i <= y; i++)
	{
		sum *= x;
		x--;
		sum /= i;
	}
	return sum;
}

ll gcd(ll n1, ll n2)
{
	if (n2 != 0)
		return gcd(n2, n1 % n2);
	else
		return n1;
}

int setBit(int num, int idx, int val = 1){ return (val) ? (num | (1 << idx)) : (num&~(1 << idx)); }
int getBit(int num, int idx){ return ((num >> idx) & 1) == 1; }
int cntBit(int num){ int ret = 0; while (num){ if (num % 2)ret++; num /= 2; }return ret; }

bool sum[1500];

void sieve()
{
	sum[0] = sum[1] = 1;

	for (int i = 2; i*i<1002; i++)
	{
		if (!sum[i])
		{
			for (int j = 2 * i; j<1002; j += i)
			{
				sum[j] = 1;
			}
		}
	}
}

int main()
{
	cl;
	string s = "+";
	for (;;) {
		string buf;
		cin >> buf;
		if (buf == "=") break;
		if (buf != "?") s += buf;
	}
	int n;
	cin >> n;
	int pos = 0, neg = 0;
	for (char c : s) if (c == '+') ++pos; else ++neg;
	if (pos - n * neg <= n && n <= n * pos - neg) {
		cout << "Possible" << endl;
		vector<int> a;
		for (char c : s) if (c == '+') a.push_back(1); else a.push_back(-n);
		int m = n - (pos - n * neg);
		for (auto& x : a) {
			int y = min(n - 1, m);
			x += y;
			m -= y;
		}
		for (int i = 0; i < a.size(); ++i) {
			if (i == 0) {
				cout << a[i];
			}
			else {
				if (a[i] < 0) {
					cout << " - " << -a[i];
				}
				else {
					cout << " + " << a[i];
				}
			}
		}
		cout << " = " << n << endl;
	}
	else {
		cout << "Impossible" << endl;
	}

}


#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include <assert.h>
#include<sstream>
#include<typeinfo>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<stdio.h>
#include <functional>
#include<unordered_map>
#include <numeric>
#include<bitset>
#include<iomanip>
#include<tuple>
using namespace std;
#define ZERO(a)  memset(a,-1,sizeof(a))
#define ll  long long int
#define all(c) c.begin(), c.end()
#define FOR(i,x,n)  for(int i=x;i<n;i++)
#define FORc(i,x,n)  for(int i=x;i<=n;i++)
#define  pi           acos(-1.0)
#define  pii           pair<int,int>
#define ull                 unsigned long long
#define ll                  long long
#define pb                  push_back
#define mp                  make_pair

#define sorta(x) sort(x.begin(),x.end())
#define rev(x) reverse(x.begin(),x.end())
#define cl                  ios_base::sync_with_stdio(0);cin.tie(0);
#define pf printf
#define sf scanf
#define MOD (ll)1e15
//#define MAX                 1e9+7

typedef vector<int>   vi;

typedef double      db;
typedef vector<ll>   vll;

typedef vector<string>   vs;

typedef vector<ull>   vull;

typedef vector<vector<int>>   vvi;
typedef vector<vector<ll>>   vvll;

typedef vector<bool>   vbl;
typedef vector<pair<int, int>>   vpii;
typedef vector<pair<ll, ll>>   vpll;
typedef deque<ll> dell;
typedef deque<int> dei;
//const int INF = (int) (1e9+7);
const int N = 1000;
const double  eps = 1e-9;
ll INF = 1e9;
const int OO = 0x3f3f3f3f;

int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };

int dy[] = { 0, 0, 1, -1, 1, -1, -1, 1 };

/*bool comp(pair<int, int> a, pair<int, int> b) {
	if (a.first < b.first) return true;
	else if (a.first > b.first) return false;
	else return a.first < b.first;
}*/
/*struct compare
{
bool operator()(const ll& l, const ll& r)
{
return l > r;
}
//priority_queue<int,vector<int>,compare>deq;
};*/

void read(string str, int node)
{
	stringstream ss;
	int number;
	ss << str;
	while (ss >> number)
		cout << number << endl;
	//getlint(cin,string);

}

ll fp(ll b, ll p){
	if (p == 0) return 1;
	if (p % 2 == 0) return fp((b*b) % INF, p / 2);
	return (fp(b, p - 1)*b) % INF;
}
ull read_binary(string s){
	ull x = 0, tmp = 1;
	for (int i = s.size() - 1; i >= 0; i--){
		x = (x + tmp*(s[i] - '0')) % INF;
		tmp = (tmp * 2) % INF;
	}
	return x;
}

ll com(ll x, ll y)
{
	ll sum = 1;
	for (int i = 1; i <= y; i++)
	{
		sum *= x;
		x--;
		sum /= i;
	}
	return sum;
}

ll gcd(ll n1, ll n2)
{
	if (n2 != 0)
		return gcd(n2, n1 % n2);
	else
		return n1;
}

int setBit(int num, int idx, int val = 1){ return (val) ? (num | (1 << idx)) : (num&~(1 << idx)); }
int getBit(int num, int idx){ return ((num >> idx) & 1) == 1; }
int cntBit(int num){ int ret = 0; while (num){ if (num % 2)ret++; num /= 2; }return ret; }

bool sum[1500];

void sieve()
{
	sum[0] = sum[1] = 1;

	for (int i = 2; i*i<1002; i++)
	{
		if (!sum[i])
		{
			for (int j = 2 * i; j<1002; j += i)
			{
				sum[j] = 1;
			}
		}
	}
}

vvi adj, comps;

vi instack, lowlink, dfn, comp, parent;
bool points[1000];
stack<int>stk;
int ndfn;

void tarjan(int node)
{
	lowlink[node] = dfn[node] = ndfn++;
	instack[node] = 1;
	stk.push(node);

	FOR(i, 0, adj[node].size())
	{
		int ch = adj[node][i];
		if (dfn[ch] == -1)
		{
			tarjan(ch);

			lowlink[node] = min(lowlink[node], lowlink[ch]);
		}
		else if (instack[ch])
		{
			lowlink[node] = min(lowlink[node], dfn[ch]);
		}

	}
	if (lowlink[node] == dfn[node])
	{
		comps.pb(vi());
		int x = -1;
		while (x != node)
		{
			x = stk.top(); stk.pop();
			instack[x] = 0;
			comps.back().pb(x);
			comp[x] = comps.size() - 1;
		}
	}

}

int main()
{
	cl;

	string s;
	int lst = -1;
	ll n;

	char c;
	while (1)
	{
		cin >> c;
		if (c == '=')
		{
			cin >> n;
			break;
		}
		else
		{
			if (c == '+')
			{
				s += c;
				lst = s.size() - 1;
			}
			else
				s += c;
		}
	}

	string k;

	bool v = 0;
	FOR(i, 0, s.size())
	{
		if (i == lst)
		{
			v = 1;
			i+=2;
		}
		k += s[i];

	}

	if (s.size() == 1)
	{
		cout << "Possible\n";
		cout << n << endl;
		return 0;
	}
	if (lst == -1)
	{
		return cout << "Impossible\n",0;
	}

	if (v)
		k += '+', k += '?';

	ll sum = 1;
	cout << "Possible\n";
	string res;

	for (int i = 1; i <= k.size()-2; i += 2)
	{

		if (k[i] == '+')
		{
			sum++;
			res += '1';
			res += '+';
		}
		else if (k[i]=='-')
		{
			sum--;

			res += '1';
			res += '-';
		}
	}

	res += '1';
	res += '+';
	ll dif = n - sum;
	res += to_string(dif);
	FOR(i, 0, res.size())
	{
		cout << res[i];
		if ((i+1)<res.size())
		if (res[i + 1] == '0')
		{
			cout << res[i + 1];
			i++;
		}
		cout << ' ';
	}
	cout << "= ";
	cout << n << endl;

}


#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include <assert.h>
#include<sstream>
#include<typeinfo>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<stdio.h>
#include <functional>
#include<unordered_map>
#include <numeric>
#include<bitset>
#include<iomanip>
#include<tuple>
using namespace std;
#define ZERO(a)  memset(a,-1,sizeof(a))
#define ll  long long int
#define all(c) c.begin(), c.end()
#define FOR(i,x,n)  for(int i=x;i<n;i++)
#define FORc(i,x,n)  for(int i=x;i<=n;i++)
#define  pi           acos(-1.0)
#define  pii           pair<int,int>
#define ull                 unsigned long long
#define ll                  long long
#define pb                  push_back
#define mp                  make_pair

#define sorta(x) sort(x.begin(),x.end())
#define rev(x) reverse(x.begin(),x.end())
#define cl                  ios_base::sync_with_stdio(0);cin.tie(0);
#define pf printf
#define sf scanf
#define MOD (ll)1e15
//#define MAX                 1e9+7

typedef vector<int>   vi;

typedef double      db;
typedef vector<ll>   vll;

typedef vector<string>   vs;

typedef vector<ull>   vull;

typedef vector<vector<int>>   vvi;
typedef vector<vector<ll>>   vvll;

typedef vector<bool>   vbl;
typedef vector<pair<int, int>>   vpii;
typedef vector<pair<ll, ll>>   vpll;
typedef deque<ll> dell;
typedef deque<int> dei;
//const int INF = (int) (1e9+7);
const int N = 1000;
const double  eps = 1e-9;
ll INF = 1e9;
const int OO = 0x3f3f3f3f;

int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };

int dy[] = { 0, 0, 1, -1, 1, -1, -1, 1 };

/*bool comp(pair<int, int> a, pair<int, int> b) {
	if (a.first < b.first) return true;
	else if (a.first > b.first) return false;
	else return a.first < b.first;
}*/
/*struct compare
{
bool operator()(const ll& l, const ll& r)
{
return l > r;
}
//priority_queue<int,vector<int>,compare>deq;
};*/

void read(string str, int node)
{
	stringstream ss;
	int number;
	ss << str;
	while (ss >> number)
		cout << number << endl;
	//getlint(cin,string);

}

ll fp(ll b, ll p){
	if (p == 0) return 1;
	if (p % 2 == 0) return fp((b*b) % INF, p / 2);
	return (fp(b, p - 1)*b) % INF;
}
ull read_binary(string s){
	ull x = 0, tmp = 1;
	for (int i = s.size() - 1; i >= 0; i--){
		x = (x + tmp*(s[i] - '0')) % INF;
		tmp = (tmp * 2) % INF;
	}
	return x;
}

ll com(ll x, ll y)
{
	ll sum = 1;
	for (int i = 1; i <= y; i++)
	{
		sum *= x;
		x--;
		sum /= i;
	}
	return sum;
}

ll gcd(ll n1, ll n2)
{
	if (n2 != 0)
		return gcd(n2, n1 % n2);
	else
		return n1;
}

int setBit(int num, int idx, int val = 1){ return (val) ? (num | (1 << idx)) : (num&~(1 << idx)); }
int getBit(int num, int idx){ return ((num >> idx) & 1) == 1; }
int cntBit(int num){ int ret = 0; while (num){ if (num % 2)ret++; num /= 2; }return ret; }

bool sum[1500];

void sieve()
{
	sum[0] = sum[1] = 1;

	for (int i = 2; i*i<1002; i++)
	{
		if (!sum[i])
		{
			for (int j = 2 * i; j<1002; j += i)
			{
				sum[j] = 1;
			}
		}
	}
}

vvi adj, comps;

vi instack, lowlink, dfn, comp, parent;
bool points[1000];
stack<int>stk;
int ndfn;

void tarjan(int node)
{
	lowlink[node] = dfn[node] = ndfn++;
	instack[node] = 1;
	stk.push(node);

	FOR(i, 0, adj[node].size())
	{
		int ch = adj[node][i];
		if (dfn[ch] == -1)
		{
			tarjan(ch);

			lowlink[node] = min(lowlink[node], lowlink[ch]);
		}
		else if (instack[ch])
		{
			lowlink[node] = min(lowlink[node], dfn[ch]);
		}

	}
	if (lowlink[node] == dfn[node])
	{
		comps.pb(vi());
		int x = -1;
		while (x != node)
		{
			x = stk.top(); stk.pop();
			instack[x] = 0;
			comps.back().pb(x);
			comp[x] = comps.size() - 1;
		}
	}

}

int main()
{
	cl;

	string s;
	int lst = -1;
	ll n;

	char c;
	while (1)
	{
		cin >> c;
		if (c == '=')
		{
			cin >> n;
			break;
		}
		else
		{
			if (c == '+')
			{
				s += c;
				lst = s.size() - 1;
			}
			else
				s += c;
		}
	}

	string k;

	bool v = 0;
	FOR(i, 0, s.size())
	{
		if (i == lst)
		{
			v = 1;
			i+=2;
		}
		k += s[i];

	}

	if (s.size() == 1)
	{
		cout << "Possible\n";
		cout << n;
		cout << " = ";
		cout << n << endl;
		return 0;
	}
	if (lst == -1)
	{
		return cout << "Impossible\n",0;
	}

	if (v)
		k += '+', k += '?';

	ll sum = 1;

	string res;

	for (int i = 1; i <= k.size()-2; i += 2)
	{

		if (k[i] == '+')
		{
			sum++;
			res += '1';
			res += '+';
		}
		else if (k[i]=='-')
		{
			sum--;

			res += '1';
			res += '-';
		}
	}

	res += '1';
	res += '+';
	ll dif = n - sum;
	if (dif <= 0)
	{
		return cout << "Impossible\n", 0;
	}
	if (dif > n)
	{
		for (int i = 2; i < k.size(); i += 2)
		{
			if (res[i - 1] == '-')
				continue;
			if (dif <= n)
				break;
			ll di = res[i] - '0';
			while (di < dif)
			{
				if (dif <= n)
					break;
				di++;
				dif--;
			}
			res[i] = di + '0';

		}
	}
	cout << "Possible\n";
	FOR(i, 0, res.size())
	{
		cout << res[i];
		cout << ' ';
	}
	cout<<dif<<' ';

	cout << "= ";
	cout << n << endl;

}


#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<iostream>
#include<algorithm>
#include<set>
#include<vector>
#include <assert.h>
#include<sstream>
#include<typeinfo>
#include<fstream>
#include<queue>
#include<deque>
#include<stack>
#include<map>
#include<stdio.h>
#include <functional>
#include<unordered_map>
#include <numeric>
#include<bitset>
#include<iomanip>
#include<tuple>
using namespace std;
#define ZERO(a)  memset(a,-1,sizeof(a))
#define ll  long long int
#define all(c) c.begin(), c.end()
#define FOR(i,x,n)  for(int i=x;i<n;i++)
#define FORc(i,x,n)  for(int i=x;i<=n;i++)
#define  pi           acos(-1.0)
#define  pii           pair<int,int>
#define ull                 unsigned long long
#define ll                  long long
#define pb                  push_back
#define mp                  make_pair

#define sorta(x) sort(x.begin(),x.end())
#define rev(x) reverse(x.begin(),x.end())
#define cl                  ios_base::sync_with_stdio(0);cin.tie(0);
#define pf printf
#define sf scanf
#define MOD (ll)1e15
//#define MAX                 1e9+7

typedef vector<int>   vi;

typedef double      db;
typedef vector<ll>   vll;

typedef vector<string>   vs;

typedef vector<ull>   vull;

typedef vector<vector<int>>   vvi;
typedef vector<vector<ll>>   vvll;

typedef vector<bool>   vbl;
typedef vector<pair<int, int>>   vpii;
typedef vector<pair<ll, ll>>   vpll;
typedef deque<ll> dell;
typedef deque<int> dei;
//const int INF = (int) (1e9+7);
const int N = 1000;
const double  eps = 1e-9;
ll INF = 1e9;
const int OO = 0x3f3f3f3f;

int dx[] = { 1, -1, 0, 0, 1, -1, 1, -1 };

int dy[] = { 0, 0, 1, -1, 1, -1, -1, 1 };

/*bool comp(pair<int, int> a, pair<int, int> b) {
	if (a.first < b.first) return true;
	else if (a.first > b.first) return false;
	else return a.first < b.first;
}*/
/*struct compare
{
bool operator()(const ll& l, const ll& r)
{
return l > r;
}
//priority_queue<int,vector<int>,compare>deq;
};*/

void read(string str, int node)
{
	stringstream ss;
	int number;
	ss << str;
	while (ss >> number)
		cout << number << endl;
	//getlint(cin,string);

}

ll fp(ll b, ll p){
	if (p == 0) return 1;
	if (p % 2 == 0) return fp((b*b) % INF, p / 2);
	return (fp(b, p - 1)*b) % INF;
}
ull read_binary(string s){
	ull x = 0, tmp = 1;
	for (int i = s.size() - 1; i >= 0; i--){
		x = (x + tmp*(s[i] - '0')) % INF;
		tmp = (tmp * 2) % INF;
	}
	return x;
}

ll com(ll x, ll y)
{
	ll sum = 1;
	for (int i = 1; i <= y; i++)
	{
		sum *= x;
		x--;
		sum /= i;
	}
	return sum;
}

ll gcd(ll n1, ll n2)
{
	if (n2 != 0)
		return gcd(n2, n1 % n2);
	else
		return n1;
}

int setBit(int num, int idx, int val = 1){ return (val) ? (num | (1 << idx)) : (num&~(1 << idx)); }
int getBit(int num, int idx){ return ((num >> idx) & 1) == 1; }
int cntBit(int num){ int ret = 0; while (num){ if (num % 2)ret++; num /= 2; }return ret; }

bool sum[1500];

void sieve()
{
	sum[0] = sum[1] = 1;

	for (int i = 2; i*i<1002; i++)
	{
		if (!sum[i])
		{
			for (int j = 2 * i; j<1002; j += i)
			{
				sum[j] = 1;
			}
		}
	}
}

vvi adj, comps;

vi instack, lowlink, dfn, comp, parent;
bool points[1000];
stack<int>stk;
int ndfn;

void tarjan(int node)
{
	lowlink[node] = dfn[node] = ndfn++;
	instack[node] = 1;
	stk.push(node);

	FOR(i, 0, adj[node].size())
	{
		int ch = adj[node][i];
		if (dfn[ch] == -1)
		{
			tarjan(ch);

			lowlink[node] = min(lowlink[node], lowlink[ch]);
		}
		else if (instack[ch])
		{
			lowlink[node] = min(lowlink[node], dfn[ch]);
		}

	}
	if (lowlink[node] == dfn[node])
	{
		comps.pb(vi());
		int x = -1;
		while (x != node)
		{
			x = stk.top(); stk.pop();
			instack[x] = 0;
			comps.back().pb(x);
			comp[x] = comps.size() - 1;
		}
	}

}

int main()
{
	cl;

	string s;
	int lst = -1;
	ll n;

	char c;
	while (1)
	{
		cin >> c;
		if (c == '=')
		{
			cin >> n;
			break;
		}
		else
		{
			if (c == '+')
			{
				s += c;
				lst = s.size() - 1;
			}
			else
				s += c;
		}
	}

	string k;

	bool v = 0;
	FOR(i, 0, s.size())
	{
		if (i == lst)
		{
			v = 1;
			i+=2;
		}
		k += s[i];

	}

	if (s.size() == 1)
	{
		cout << "Possible\n";
		cout << n << endl;
		return 0;
	}
	if (lst == -1)
	{
		return cout << "Impossible\n",0;
	}

	if (v)
		k += '+', k += '?';

	ll sum = 1;
	cout << "Possible\n";
	string res;

	for (int i = 1; i <= k.size()-2; i += 2)
	{

		if (k[i] == '+')
		{
			sum++;
			res += '1';
			res += '+';
		}
		else if (k[i]=='-')
		{
			sum--;

			res += '1';
			res += '-';
		}
	}

	res += '1';
	res += '+';
	ll dif = n - sum;
	res += to_string(dif);
	cout << res << endl;
}