/*
I hate competitive programming.
- sfsdaf_Orz -
*/
#include <iostream>
#include <vector>
#include <map>
#include <set>
#include <unordered_map>
#include <unordered_set>
#include <cmath>
#include <cstring>
#include <numeric>
#include <queue>
#include <iomanip>
#include <climits>
#include <algorithm>
#include <deque>
using namespace std;
using ll = long long;
using db = double;
using pll = pair<ll, ll> ;
using pii = pair<int, int>;
using tpll = tuple<ll, ll, ll> ;
#define f(i, a, b) for(int i = (a); i <= (b); i++)
#define rf(i, a, b) for(int i = (a); i >= (b); i--)
#define af(i, a, b, x) for(int i = (a); i <= (b); i += x)
#define fr(i, a, b, x) for(int i = (a); i >= (b); i -= x)
#define test() int t; cin >> t; while(t--)
#define all(a) (a).begin(), (a).end()
#define rall(a) (a).rbegin(), (a).rend()
#define sz(a) (int)(a).size()
#define pb push_back
#define rv reverse
#define rs resize
#define fi first
#define se second
#define endl '\n'
#define yes "YES"
#define no "NO"
#define gcd __gcd
const ll maxn = 2001;
const ll mod = 1e9 + 7;
const int base = 31;
const int INF = 1e9;
string s, s1;
int dp[maxn][maxn];
void solve(){
cin >> s;
s1 = s;
rv(all(s1));
f(i, 1, sz(s)){
f(j, 1, sz(s)){
if(s[i - 1] == s1[j - 1]) dp[i][j] = dp[i - 1][j - 1] + 1;
else dp[i][j] = max(dp[i - 1][j], dp[i][j - 1]);
}
}
cout << sz(s) - dp[sz(s)][sz(s)];
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
solve();
}
LyoKICAgIEkgaGF0ZSBjb21wZXRpdGl2ZSBwcm9ncmFtbWluZy4KICAgICAgICAgICAgICAgICAgICAtIHNmc2RhZl9PcnogLQoqLwojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDx2ZWN0b3I+CiNpbmNsdWRlIDxtYXA+CiNpbmNsdWRlIDxzZXQ+CiNpbmNsdWRlIDx1bm9yZGVyZWRfbWFwPgojaW5jbHVkZSA8dW5vcmRlcmVkX3NldD4KI2luY2x1ZGUgPGNtYXRoPgojaW5jbHVkZSA8Y3N0cmluZz4KI2luY2x1ZGUgPG51bWVyaWM+CiNpbmNsdWRlIDxxdWV1ZT4KI2luY2x1ZGUgPGlvbWFuaXA+CiNpbmNsdWRlIDxjbGltaXRzPgojaW5jbHVkZSA8YWxnb3JpdGhtPgojaW5jbHVkZSA8ZGVxdWU+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp1c2luZyBsbCA9IGxvbmcgbG9uZzsKdXNpbmcgZGIgPSBkb3VibGU7CnVzaW5nIHBsbCA9IHBhaXI8bGwsIGxsPiA7CnVzaW5nIHBpaSA9IHBhaXI8aW50LCBpbnQ+Owp1c2luZyB0cGxsID0gdHVwbGU8bGwsIGxsLCBsbD4gOwojZGVmaW5lIGYoaSwgYSwgYikgZm9yKGludCBpID0gKGEpOyBpIDw9IChiKTsgaSsrKQojZGVmaW5lIHJmKGksIGEsIGIpIGZvcihpbnQgaSA9IChhKTsgaSA+PSAoYik7IGktLSkKI2RlZmluZSBhZihpLCBhLCBiLCB4KSBmb3IoaW50IGkgPSAoYSk7IGkgPD0gKGIpOyBpICs9IHgpCiNkZWZpbmUgZnIoaSwgYSwgYiwgeCkgZm9yKGludCBpID0gKGEpOyBpID49IChiKTsgaSAtPSB4KQojZGVmaW5lIHRlc3QoKSBpbnQgdDsgY2luID4+IHQ7IHdoaWxlKHQtLSkKI2RlZmluZSBhbGwoYSkgKGEpLmJlZ2luKCksIChhKS5lbmQoKQojZGVmaW5lIHJhbGwoYSkgKGEpLnJiZWdpbigpLCAoYSkucmVuZCgpCiNkZWZpbmUgc3ooYSkgKGludCkoYSkuc2l6ZSgpCiNkZWZpbmUgcGIgcHVzaF9iYWNrCiNkZWZpbmUgcnYgcmV2ZXJzZQojZGVmaW5lIHJzIHJlc2l6ZQojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2Ugc2Vjb25kCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgeWVzICJZRVMiCiNkZWZpbmUgbm8gIk5PIgojZGVmaW5lIGdjZCBfX2djZApjb25zdCBsbCBtYXhuID0gMjAwMTsKY29uc3QgbGwgbW9kID0gMWU5ICsgNzsKY29uc3QgaW50IGJhc2UgPSAzMTsKY29uc3QgaW50IElORiA9IDFlOTsKc3RyaW5nIHMsIHMxOwppbnQgZHBbbWF4bl1bbWF4bl07CnZvaWQgc29sdmUoKXsKICAgIGNpbiA+PiBzOwogICAgczEgPSBzOwogICAgcnYoYWxsKHMxKSk7CiAgICBmKGksIDEsIHN6KHMpKXsKICAgICAgICBmKGosIDEsIHN6KHMpKXsKICAgICAgICAgICAgaWYoc1tpIC0gMV0gPT0gczFbaiAtIDFdKSBkcFtpXVtqXSA9IGRwW2kgLSAxXVtqIC0gMV0gKyAxOwogICAgICAgICAgICBlbHNlIGRwW2ldW2pdID0gbWF4KGRwW2kgLSAxXVtqXSwgZHBbaV1baiAtIDFdKTsKICAgICAgICB9CiAgICB9CiAgICBjb3V0IDw8IHN6KHMpIC0gZHBbc3oocyldW3N6KHMpXTsKfQppbnQgbWFpbigpCnsKICAgIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZmFsc2UpOwogICAgY2luLnRpZShudWxscHRyKTsKICAgIGNvdXQudGllKG51bGxwdHIpOwogICAgc29sdmUoKTsKfQo=