// Slower C++ solution:
/***

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 *      百年修得同船渡，千年修得代码重.

 */

#include <iostream>

#include <queue>

#include <cstdio>

#include <cstdlib>

#include <algorithm>

#include <cstring>

#include <string>

#include <stack>

using namespace std;

//int n,m,x,y;

//char a[1010][1010];

//int vis[1010][1010];

//void dfs()

//{

//

//}

//int main()

//{

//    while(~scanf("%d%d",&n,&m))

//    {

//        for(int i=0;i<n;i++)

//        scanf("%s",a[i]);

//        for(int i=0;i<n;i++)

//            for(int j=0;j<m;j++)

//        {

//            if(a[i][j]=='*')

//                vis[i][j]=2;

//                if(a[i][j]=='+')

//                    vis[i][j]=1;

//                if(a[i][j]=='F')

//                    vis[i][j]=3;

//                if(a[i][j]=='G')

//                {

//                    x=i;

//                    y=j;

//                }

//                if(i==0&&a[i][j]=='+')

//                    vis[i][j]=4;

//                if(i==n&&a[i][j]=='+')

//                    vis[i][j]=4;

//                if(j==0&&a[i][j]=='+')

//                    vis[i][j]=4;

//                if(j==m&&a[i][j]=='+')

//                    vis[i][j]=4;

//

//        }

//

//     for(int i=0;i<n;i++)

//            {

//                for(int j=0;j<m;j++)

//                printf("%d ",vis[i][j]);

//                printf("\n");

//            }

// }

//    return 0;

//}

long long a[100000];

int main()

{

    long long n;

   for(int i=1;i<=100000;i++)

   a[i]=i*i;

   while(~scanf("%lld",&n))

   {int flag=0;

       for(int i=1;i<100000;i++)

       {

           if(a[i]==n)

           {

               printf("%lld\n",a[i]);

               break;

           }

           if(a[i]>n)

           {

               printf("%lld\n",a[i-1]);

               break;

           }

       }

   }



    return 0;

}

// Faster C++ solution for the same problem (measured speedup: 1.763889568455428x):
#include <bits/stdc++.h>

#include <algorithm>

#include <climits>

#include <iostream>

using namespace std;

#define ll long long

#define vll vector<ll>

#define ot cout 

#define nl endl

#define fr(a,b) for(auto i=a;i<b;i++)

#define in cin 

#define pll pair<ll,ll>

#define f first

#define s second

#define vpll vector<pll>

#define ump unordered_map

#define YES cout << "YES" << endl

#define NO cout << "NO" << endl

#define IN(a,b) ((a).find(b)!=(a).end())

#define pb push_back

#define mkp make_pair

#define PI 3.14159265

#define INF 1e18

#define deb(x) if(ON) cout << #x <<" : " << x << endl

#define fast ios_base::sync_with_stdio(false)

#define io cin.tie(NULL),cout.tie(NULL)

#define ON !false

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

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

const ll mod=1e9+7;

ll i,j;

ll add(ll a,ll b){

    return  ((a%mod)+(b%mod)+mod)%mod;

}

ll mul(ll a,ll b){

    return ((a%mod)*(b%mod)+mod)%mod;

}

void pause(ll id){

    cout << "Waiting " << id << endl;

    cin >> id;

}





signed main(){

    fast;

    io;

    if(!true){

        freopen("in.txt","r",stdin);

        freopen("out.txt","w",stdout);

    }

    ll n;

    cin >> n;

    ll mx=0;

    for(i=1;(i*i)<=n;i++){

        if((i*i)<=n){

            mx=max(mx,(i*i));

        }

    }

    cout << mx << endl;



   

    return 0;

}