/* 先判不可行的情况:n/2的是单一字符 判只切割一次能不能组成回文 枚举每个切割点,交换两个串的位置 剩下就是割两次 */ #include<bits/stdc++.h> #include<vector> using namespace std; #define maxn 5005 char s[maxn]; int n; int judge(int pos){ vector<char>v; v.clear(); for(int i=pos+1;i<=n;i++) v.push_back(s[i]); for(int i=1;i<=pos;i++) v.push_back(s[i]); int flag=0;//判是否和原串一样 for(int i=0;i<n;i++) if(s[i+1]!=v[i])flag=1; if(!flag)return 0; int i=0,j=n-1; while(i<j){ if(v[i]!=v[j])return 0; i++,j--; } return 1; } int main(){ cin>>s+1;n=strlen(s+1); int flag=0; for(int i=2;i<=n/2;i++) if(s[i]!=s[1])flag=1; if(!flag){ puts("Impossible"); return 0; } for(int i=1;i<=n-1;i++){ if(judge(i)){ cout<<1<<endl; return 0; } } cout<<2<<endl; }