#include <bits/stdc++.h>
using namespace std;
bool verif(string s){
    int l,r;
    l=0;
    r=s.size()-1;
    while(l<r){

        if(s[l]!=s[r])
            return false;
        r--;
        l++;
    }
    return true;

}

int main(){

    string s;
    cin>>s;
    if(verif(s)){
        cout<<"First"<<endl;
        return 0;
    }

    else if(s.size()%2==0)
        cout<<"Second"<<endl;
    else
        cout<<"First"<<endl;

}


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

int main(){

    string s;
    int l,r,nb,test=0;
    nb=1;
    cin>>s;
    l=0;

    while(!test){
            l=0;
                r=s.size()-1;

        while(l<r){
            if(s[l]!=s[r]){
                s.erase(l);
                break;
            }
            l++;
            r--;

        }
        if(l==r)
            test=1;
        else if(nb==1)
            nb=2;
        else
            nb=1;
    }
    if(nb==1)
        cout<<"first"<<endl;
    else{
        cout<<"second"<<endl;
    }

}


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

int main(){

    string s;
    int l,r,nb,test=0;
    nb=1;
    cin>>s;
    l=0;

    while(!test){
            l=0;
            r=s.size()-1;

        while(l<r){
            if(s[l]!=s[r]){
                if(r-1>l&&s[r-1]==s[l])
                    s.erase(r,1);
                else
                    s.erase(l,1);
                break;
            }
            l++;
            r--;

        }
        if(l>=r){
            test=1;
        }
        else if(nb==1)
            nb=2;
        else
            nb=1;
    }
    if(nb==1)
        cout<<"First"<<endl;
    else{
        cout<<"Second"<<endl;
    }

}


#include <bits/stdc++.h>
using namespace std;
bool verif(string s){
    int l,r;
    l=0;
    r=s.size()-1;
    while(l<r){

        if(s[l]!=s[r])
            return false;
        r--;
        l++;
    }
    return true;

}

int main(){

    int test=0;
    map<char,long> mp;
    string s;
    set<long> se;
    cin>>s;
    for(int i=0;i<s.size();i++){
        mp[s[i]]++;

    }
    long mi=1e9;
    long long so=0;
    for(auto it=mp.begin();it!=mp.end();it++){
        if(it->second%2!=0){
            mi=min(it->second,mi);
            so+=it->second;
        }
        se.insert(it->second);

    }
    int test1=0;
    if(se.size()<3){
        for(auto it=se.begin();it!=se.end();it++){
            if(*it%2==0)
                test=1;
            if(test1==0&&*it%2!=0)
                test1=1;
            if(test1==1&&*it%2!=0){
                test=0;
                break;
            }

        }
    }
    if(test){
        cout<<"First"<<endl;

    }
    else{
        if((so-mi+1)%2==0)
            cout<<"Second"<<endl;
        else
            cout<<"First"<<endl;
    }

}


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

int main() {

ios_base :: sync_with_stdio(0);
cin.tie(0);
cout.tie(0);

int m,n,s,i,j,k,a,b,f;
string str;
cin>>str;
int frr[27]={0};
for(i=0;str[i];i++){
    frr[str[i]-'a']++;
}
int c=0;
for(i=0;i<26;i++){
    frr[i]%=2;
    if(frr[i]==1)
        c++;
}
if(c%2==1)
    cout<<"First";
else
    cout<<"Second";

return 0;
}


#include<bits/stdc++.h>
using namespace std;
int main()
{
    string ch;
    int amt[27]={0},count_odd=0;
    scanf("%s",&ch);
    int L = ch.length();
    for (int i=0;i<L;i++)
    {
        amt[ch[i]-'a']++;
    }
    for (int i=0;i<26;i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd == 1)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd % 2 == 0)
    {
        printf("Second\n");
        return 0;
    }
    printf("First\n");
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
int main()
{
    string ch;
    int amt[27]={0},count_odd=0;
    scanf("%s",&ch);
    int L = strlen(ch);
    for (int i=0;i<L;i++)
    {
        amt[ch[i]-'a']++;
    }
    for (int i=0;i<26;i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd == 1)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd % 2 == 0)
    {
        printf("Second\n");
        return 0;
    }
    printf("First\n");
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
int main()
{
    char ch;
    int amt[27]={0},count_odd=0;
    scanf("%s",&ch);
    int L = strlen(ch);
    for (int i=0;i<L;i++)
    {
        amt[ch[i]-'a']++;
    }
    for (int i=0;i<26;i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd == 1)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd % 2 == 0)
    {
        printf("Second\n");
        return 0;
    }
    printf("First\n");
    return 0;
}


#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <complex>
using namespace std;
typedef long long lld;

char ch[10001];

int amt[30];
int tot;
int count_odd = 0;

int main()
{
    scanf("%s",&ch);
    int L = strlen(ch);
    for (int i=0;i<L;i++)
    {
        amt[ch[i]-'a']++;
    }
    for (int i=0;i<26;i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd == 1)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd % 2 == 0)
    {
        printf("Second\n");
        return 0;
    }
    printf("First\n");
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ff                first
#define ss                second
#define int               long long
#define pb                push_back
#define mp                make_pair
#define li                list<int>
#define pii               pair<int,int>
#define vi                vector<int>
#define mii               map<int ,int>
#define setbits(x)        _builtin_popcountll(x)
#define zrobits(x)        _builtin_ctzll(x)
#define mod               1000000007
#define inf               1e18
#define ps(x,y)           fixed<<setprecision(y)<<x
#define mk(arr,n,type)    type *arr=new type(n);
#define w(x)              int x; cin>>x; while(x--)
#define all(x)            (x).begin(), (x).end()
#define PI                3.14159265358979
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());

void c_p_c()
{
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
	freopen("ii.txt", "r", stdin);
	freopen("ni.txt", "w", stdout);
#endif
}
void solve()
{
	string s; cin >> s;
	int counter = 0;
	if ((s.length() & 1))
	{
		int j = s.length() - 1;
		for (int i = 0; i < s.length() / 2; i++)
		{
			if (s[i] != s[j])counter++;
			j--;

		}
		counter = counter * 2;
		if (counter & 1)cout << "Second";
		else
			cout << "First";

	}
	else
	{
		int j = s.length() - 1;
		for (int i = 0; i < s.length() / 2; i++)
		{
			if (s[i] != s[j])counter++;
			j--;

		}
		if (counter & 1)cout << "Second";
		else
			cout << "First";

	}

}

int32_t main()
{
	c_p_c();

	solve();

}

// 10
// 1
// 20
// 18


#include<bits/stdc++.h>
using namespace std;
#define ff                first
#define ss                second
#define int               long long
#define pb                push_back
#define mp                make_pair
#define li                list<int>
#define pii               pair<int,int>
#define vi                vector<int>
#define mii               map<int ,int>
#define setbits(x)        _builtin_popcountll(x)
#define zrobits(x)        _builtin_ctzll(x)
#define mod               1000000007
#define inf               1e18
#define ps(x,y)           fixed<<setprecision(y)<<x
#define mk(arr,n,type)    type *arr=new type(n);
#define w(x)              int x; cin>>x; while(x--)
#define all(x)            (x).begin(), (x).end()
#define PI                3.14159265358979
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());

void c_p_c()
{
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
	freopen("ii.txt", "r", stdin);
	freopen("ni.txt", "w", stdout);
#endif
}
void solve()
{
	string s; cin >> s;
	int counter = 0;
	if ((s.length() & 1))
	{
		int j = s.length() - 1;
		for (int i = 0; i < s.length() / 2; i++)
		{
			if (s[i] != s[j])counter++;
			j--;

		}
		counter = counter * 2;
		if (counter & 1)cout << "second";
		else
			cout << "First";

	}
	else
	{
		int j = s.length() - 1;
		for (int i = 0; i < s.length() / 2; i++)
		{
			if (s[i] != s[j])counter++;
			j--;

		}
		if (counter & 1)cout << "second";
		else
			cout << "First";

	}

}

int32_t main()
{
	c_p_c();

	solve();

}

// 10
// 1
// 20
// 18


#include<bits/stdc++.h>
using namespace std;
#define ff                first
#define ss                second
#define ll              long long
#define pb                push_back
#define mp                make_pair
#define pair              pair<int,int>
#define vi                vector<int>
#define mii               map<int ,int>
#define setbits(x)        _builtin_popcountll(x)
#define zrobits(x)        _builtin_ctzll(x)
#define mod               1000000007
#define inf               1e18
#define ps(x,y)           fixed<<setprecision(y)<<x
#define mk(arr,n,type)    type *arr=new type(n);
#define w(x)              int x; cin>>x; while(x--)
void c_p_c()
{
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
	freopen("input.txt", "r+", stdin);
	freopen("output.txt", "w+", stdout);
#endif
}
int32_t main()
{
	c_p_c();
	string s;
	cin >> s;
	string t;
	t = s;
	int counter = 0;
	reverse(s.begin(), s.end());
	for (int i = 0; i < s.length(); i++)
	{
		if (s[i] != t[i])counter++;
	}
	if (counter == 0)
		cout << "First";
	else
	{
		if (((counter) / 2) & 1)
			cout << "Second";
		else
			cout << "First";
	}
}


#include <iostream>
#include <string>
#include <string.h>

using namespace std;
string s;
int cnt[30];
int main()
{

	cin>>s;
	for (int i=0; i<s.size(); ++i)
		cnt[s[i]-'a']++;
	int odd=0;
	for (int i=0; i<26; ++i)
		if (cnt[i]&1)
			odd++;
	if ((odd==0) || (odd&1))
		cout<<"First"<<endl;
	else
		cout<<"Second"<<endl;
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ff                first
#define ss                second
#define int               long long
#define pb                push_back
#define mp                make_pair
#define li                list<int>
#define pii               pair<int,int>
#define vi                vector<int>
#define mii               map<int ,int>
#define setbits(x)        _builtin_popcountll(x)
#define zrobits(x)        _builtin_ctzll(x)
#define mod               1000000007
#define inf               1e18
#define ps(x,y)           fixed<<setprecision(y)<<x
#define mk(arr,n,type)    type *arr=new type(n);
#define w(x)              int x; cin>>x; while(x--)
#define all(x)            (x).begin(), (x).end()
#define PI                3.14159265358979
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());

void c_p_c()
{
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
	freopen("ii.txt", "r", stdin);
	freopen("ni.txt", "w", stdout);
#endif
}
void solve()
{
	string s; cin >> s;
	int counter = 0;
	if ((s.length() & 1))
	{
		int j = s.length() - 1;
		for (int i = 0; i < s.length() / 2; i++)
		{
			if (s[i] != s[j])counter++;
			j--;

		}
		counter = counter * 2;
		if (counter & 1)cout << "Second";
		else
			cout << "First";

	}
	else
	{
		int j = s.length() - 1;
		for (int i = 0; i < s.length() / 2; i++)
		{
			if (s[i] != s[j])counter++;
			j--;

		}
		counter = counter * 2 - 1;
		if (counter & 1)cout << "Second";
		else
			cout << "First";

	}

}

int32_t main()
{
	c_p_c();

	solve();

}

// 10
// 1
// 20
// 18


#include<bits/stdc++.h>
using namespace std;
#define ff                first
#define ss                second
#define int               long long
#define pb                push_back
#define mp                make_pair
#define li                list<int>
#define pii               pair<int,int>
#define vi                vector<int>
#define mii               map<int ,int>
#define setbits(x)        _builtin_popcountll(x)
#define zrobits(x)        _builtin_ctzll(x)
#define mod               1000000007
#define inf               1e18
#define ps(x,y)           fixed<<setprecision(y)<<x
#define mk(arr,n,type)    type *arr=new type(n);
#define w(x)              int x; cin>>x; while(x--)
#define all(x)            (x).begin(), (x).end()
#define PI                3.14159265358979
mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());

void c_p_c()
{
	ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#ifndef ONLINE_JUDGE
	freopen("ii.txt", "r", stdin);
	freopen("ni.txt", "w", stdout);
#endif
}
void solve()
{
	string s; cin >> s;
	int counter = 0;
	if ((s.length() & 1))
	{
		int j = s.length() - 1;
		for (int i = 0; i < s.length() / 2; i++)
		{
			if (s[i] != s[j])counter++;
			j--;

		}
		counter = counter * 2;
		if (counter & 1)cout << "Second";
		else
			cout << "First";

	}
	else
	{
		int j = s.length() - 1;
		for (int i = 0; i < s.length() / 2; i++)
		{
			if (s[i] != s[j])counter++;
			j--;

		}
		if (counter & 1)cout << "second";
		else
			cout << "First";

	}

}

int32_t main()
{
	c_p_c();

	solve();

}

// 10
// 1
// 20
// 18


#include<bits/stdc++.h>
#define ll long long int
using namespace std;
int main()
{
    string s;
    cin>>s;
    ll a[26]={0};
    bool f=false,ok=true;
    for(int i=0;i<s.length();i++)
    a[s[i]-97]++;
    ll su=0;
    for(int i=0;i<26;i++)
    {
        if(a[i]==1)
        su++;
        if(a[i]==s.length())
        f=true;
        if(a[i]%2!=0&&a[i]!=0)
        ok=false
    }
    if(f||su%2!=0||ok)
    cout<<"First\n";
    else
    cout<<"Second\n";
    return 0;
}


#include<bits/stdc++.h>
#define ll long long int
using namespace std;
int main()
{
    string s;
    cin>>s;
    ll a[26]={0};
    bool f=false;
    for(int i=0;i<s.length();i++)
    a[s[i]-97]++;
    ll su=0;
    for(int i=0;i<26;i++)
    {
        if(a[i]==1)
        su++;
        if(a[i]==s.length())
        f=true;
    }
    if(f||su%2!=0)
    cout<<"First\n";
    else
    cout<<"Second\n";
    return 0;
}


#include<bits/stdc++.h>
#define ll long long int
using namespace std;
int main()
{
    string s;
    cin>>s;
    ll a[26]={0};
    bool f=false,ok=true;
    for(int i=0;i<s.length();i++)
    a[s[i]-97]++;
    ll su=0;
    for(int i=0;i<26;i++)
    {
        if(a[i]==1)
        su++;
        if(a[i]==s.length())
        f=true;
        if(a[i]%2!=0&&a[i]!=0)
        ok=false;
    }
    if(f||su%2!=0||ok)
    cout<<"First\n";
    else
    cout<<"Second\n";
    return 0;
}


#include<bits/stdc++.h>
#define ll long long int
using namespace std;
int main()
{
    string s;
    cin>>s;
    ll a[26]={0};
    bool f=false;
    for(int i=0;i<26;i++)
    a[s[i]-97]++;
    ll s=0;
    for(int i=0;i<n;i++)
    {
        if(a[i]==1)
        s++;
        if(a[i]==s.length())
        f=true;
    }
    if(f||s%2!=0)
    cout<<"First\n";
    else
    cout<<"Second\n";
    return 0;
}


#include<bits/stdc++.h>
#define ll long long int
using namespace std;
int main()
{
    string s;
    cin>>s;
    ll a[26]={0};
    for(int i=0;i<s.length();i++)
    a[s[i]-97]++;
    ll su=0;
    for(int i=0;i<26;i++)
    {
        if(a[i]%2==1)
        su++;
    }
    if(su==0||su%2!=0)
    cout<<"First\n";
    else
    cout<<"Second\n";
    return 0;
}


#include<bits/stdc++.h>
#define ll long long int
using namespace std;
int main()
{
    string s;
    cin>>s;
    ll a[26]={0};
    bool f=false;
    for(int i=0;i<26;i++)
    a[s[i]-97]++;
    ll su=0;
    for(int i=0;i<s.length();i++)
    {
        if(a[i]==1)
        su++;
        if(a[i]==s.length())
        f=true;
    }
    if(f||su%2!=0)
    cout<<"First\n";
    else
    cout<<"Second\n";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int,int> pi;
typedef list<int> li;

#define all(x) x.begin(),x.end()
#define YES out("YES")
#define NO out("NO")
#define out(x){cout << x << "\n"; return;}
#define FAST     ios_base::sync_with_stdio(false); cin.tie(NULL)
#define print(x){for(auto i:x) cout << i << " "; cout << "\n";}

const ll LLINF=1e18;
const int INF=INT_MAX;
const ld PI=acos(-1);//3.1415926535897932384626433
const ld E=2.71828183;
const int MOD=1e9+7;
template <typename T>
struct segment_tree{

    vector<T>tree;
    int size;
    T DEF;
    void init(int n){
        size=1;
        DEF=INF;
        while(size<n)size*=2;
        tree=vector<T>(2*size,0);
    }

    T merge(T a,T b){return a+b;}

    void set(int i,int x,T v,int lx, int rx){
        if(rx-lx==1){
            tree[x]=v;
            return;
        }
        int m=(rx+lx)/2;
        if(i<m){
            set(i,2*x+1,v,lx,m);
        }
        else{
            set(i,2*x+2,v,m,rx);
        }
        tree[x]=merge(tree[2*x+1],tree[2*x+2]);
    }
    void set(int i,T v){
        set(i,0,v,0,size);
    }
    T sum(int l,int r,int x,int lx,int rx){
        if(r<=lx || rx<=l) return 0;//change
        else if(l<=lx && rx<=r)return tree[x];
        int m=(lx+rx)/2;
        return merge(sum(l,r,2*x+1,lx,m),sum(l,r,2*x+2,m,rx));
    }
    T sum(int l,int r){
        return sum(l,r+1,0,0,size);
    }
    void print_tree(){
        for(int i=0; i<tree.size(); i++)
            cout << to_string(tree[i]) << " ";
        cout << "\n";
    }
};
vi bfs(vector<vi>adj, int src){
    queue<int>q;
    vi d(adj.size(),INF);
    q.push(src);
    d[src]=0;
    while(!q.empty()){
        int c=q.front();
        q.pop();
        for(int nbr:adj[c]){
            if(d[nbr]==INF)
                q.push(nbr);
            d[nbr]=min(d[nbr],d[c]+1);
        }
    }
    return d;
}
template<typename T>
void read(vector<T>& v){
    int n=v.size();
    for(int i=0; i<n; i++)
        cin >> v[i];
}
ld log (ld a,ld b){return log(b)/log(a);}
ll power(ll base, ll exp,ll M=LLONG_MAX){//(base^exp)%M
    ll res=1;
    while(exp){
        if(exp%2==1)res=((res%M)*(base%M))%M;
        base=((base%M)*(base%M))%M;
        exp/=2;
    }
    return res;
}
string to_base(int n,int new_base){
    string s;
    int nn=n;
    while(nn){
        s+=to_string(nn%new_base);
        nn/=new_base;
    }
    reverse(all(s));
    return s;
}
ll gcd(ll a,ll b){
    if(a%b==0)return b;
    else return gcd(b,a%b);
}
ll lcm(ll a,ll b){
    return (a/gcd(a,b))*b;
}
bitset<(const int)(5e5)>sieve(){
    bitset<(const int)(5e5)>ans;
    for(int i=2; i<5e5; i++)
        ans[i]=1;
    for(int i=2; i*i<5e5; i++){
        if(ans[i])
            for(int j=2*i; j<5e5; j+=i)
                ans[j]=0;
    }
    return ans;
}
void solve();
int main() {
    FAST;
    int t = 1;
    //cin >> t;
    while (t--)
        solve();
    return 0;
}

void solve(){
    string s;
    cin >> s;
    int n=s.size();
    vi cnt(26);
    for(char c:s)
        cnt[c-'a']++;
    int o=0,e=0;
    for(int i=0; i<26;i++)
        if(cnt[i]!=0 && cnt[i]%2)o++;
        else if(cnt[i]!=0 && cnt[i]%2==0)e++;
    int l=2*e+o;
    if(l%2)out("First")
    else out("Second")
}


#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int,int> pi;
typedef list<int> li;

#define all(x) x.begin(),x.end()
#define YES out("YES")
#define NO out("NO")
#define out(x){cout << x << "\n"; return;}
#define FAST     ios_base::sync_with_stdio(false); cin.tie(NULL)
#define print(x){for(auto i:x) cout << i << " "; cout << "\n";}

const ll LLINF=1e18;
const int INF=INT_MAX;
const ld PI=acos(-1);//3.1415926535897932384626433
const ld E=2.71828183;
const int MOD=1e9+7;
template <typename T>
struct segment_tree{

    vector<T>tree;
    int size;
    T DEF;
    void init(int n){
        size=1;
        DEF=INF;
        while(size<n)size*=2;
        tree=vector<T>(2*size,0);
    }

    T merge(T a,T b){return a+b;}

    void set(int i,int x,T v,int lx, int rx){
        if(rx-lx==1){
            tree[x]=v;
            return;
        }
        int m=(rx+lx)/2;
        if(i<m){
            set(i,2*x+1,v,lx,m);
        }
        else{
            set(i,2*x+2,v,m,rx);
        }
        tree[x]=merge(tree[2*x+1],tree[2*x+2]);
    }
    void set(int i,T v){
        set(i,0,v,0,size);
    }
    T sum(int l,int r,int x,int lx,int rx){
        if(r<=lx || rx<=l) return 0;//change
        else if(l<=lx && rx<=r)return tree[x];
        int m=(lx+rx)/2;
        return merge(sum(l,r,2*x+1,lx,m),sum(l,r,2*x+2,m,rx));
    }
    T sum(int l,int r){
        return sum(l,r+1,0,0,size);
    }
    void print_tree(){
        for(int i=0; i<tree.size(); i++)
            cout << to_string(tree[i]) << " ";
        cout << "\n";
    }
};
vi bfs(vector<vi>adj, int src){
    queue<int>q;
    vi d(adj.size(),INF);
    q.push(src);
    d[src]=0;
    while(!q.empty()){
        int c=q.front();
        q.pop();
        for(int nbr:adj[c]){
            if(d[nbr]==INF)
                q.push(nbr);
            d[nbr]=min(d[nbr],d[c]+1);
        }
    }
    return d;
}
template<typename T>
void read(vector<T>& v){
    int n=v.size();
    for(int i=0; i<n; i++)
        cin >> v[i];
}
ld log (ld a,ld b){return log(b)/log(a);}
ll power(ll base, ll exp,ll M=LLONG_MAX){//(base^exp)%M
    ll res=1;
    while(exp){
        if(exp%2==1)res=((res%M)*(base%M))%M;
        base=((base%M)*(base%M))%M;
        exp/=2;
    }
    return res;
}
string to_base(int n,int new_base){
    string s;
    int nn=n;
    while(nn){
        s+=to_string(nn%new_base);
        nn/=new_base;
    }
    reverse(all(s));
    return s;
}
ll gcd(ll a,ll b){
    if(a%b==0)return b;
    else return gcd(b,a%b);
}
ll lcm(ll a,ll b){
    return (a/gcd(a,b))*b;
}
bitset<(const int)(5e5)>sieve(){
    bitset<(const int)(5e5)>ans;
    for(int i=2; i<5e5; i++)
        ans[i]=1;
    for(int i=2; i*i<5e5; i++){
        if(ans[i])
            for(int j=2*i; j<5e5; j+=i)
                ans[j]=0;
    }
    return ans;
}
void solve();
int main() {
    FAST;
    int t = 1;
    //cin >> t;
    while (t--)
        solve();
    return 0;
}

void solve(){
    string s;
    cin >> s;
    int n=s.size();
    vi cnt(26);
    for(char c:s)
        cnt[c-'a']++;
    int o=0,e=0;
    for(int i=0; i<26;i++)
        if(cnt[i]!=0 && cnt[i]%2)o++;
        else if(cnt[i]!=0 && cnt[i]%2==0)e++;
    int l=2*e+o;
    if(o%2)out("First")
    else out("Second")
}


#include <bits/stdc++.h>
//#include <ext/pb_ds/assoc_container.hpp>
//#include <ext/pb_ds/tree_policy.hpp>

using namespace std;
//using namespace __gnu_pbds;

typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int,int> pi;
typedef list<int> li;
typedef vector<ll>vl;

#define all(x) x.begin(),x.end()
#define YES out("YES")
#define NO out("NO")
#define out(x){cout << x << "\n"; return;}
#define FAST     ios_base::sync_with_stdio(false); cin.tie(NULL)
#define print(x){for(auto i:x) cout << i << " "; cout << "\n";}

const ll INF64=1e18;
const int INF=1e9;
const ld PI=acos(-1);//3.1415926535897932384626433

template<typename T>
void read(vector<T>& v){
    int n=v.size();
    for(int i=0; i<n; i++)
        cin >> v[i];
}
ll ceil(ll a,ll b){
    ll ans=a/b;
    if(a%b)ans++;
    return ans;
}
ld log (ld a,ld b){return log(b)/log(a);}
ll power(ll base, ll exp,ll M=LLONG_MAX){//(base^exp)%M
    ll res=1;
    while(exp){
        if(exp%2==1)res=((res%M)*(base%M))%M;
        base=((base%M)*(base%M))%M;
        exp/=2;
    }
    return res;
}
string to_base(int n,int new_base){
    string s;
    int nn=n;
    while(nn){
        s+=to_string(nn%new_base);
        nn/=new_base;
    }
    reverse(all(s));
    return s;
}
ll gcd(ll a,ll b){
    if(a%b==0)return b;
    else return gcd(b,a%b);
}
ll lcm(ll a,ll b){
    ll x= (a/gcd(a,b));
    return b*x;
}
vector<bool>sieve(int n){
    vector<bool>ans(n+1);
    for(int i=2; i<=n; i++)
        ans[i]=1;
    for(int i=2; i*i<=n; i++){
        if(ans[i])
            for(int j=2*i; j<=n; j+=i)
                ans[j]=0;
    }
    return ans;
}
void solve();

int main() {
    FAST;
    int t = 1;
    //cin >> t;
    while(t--)
        solve();
}

void solve(){
    string s;
    cin >> s;
    vi cnt(26);
    for(char c:s)
        cnt[c-'a']++;
    int o=0;
    for(int i=0; i<26; i++)
        if(cnt[i]%2)o++;
    if(o<=1)out("First")
    else if(o%2==0)out("Second")
    else out("First")
}


#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int,int> pi;
typedef list<int> li;

#define all(x) x.begin(),x.end()
#define YES out("YES")
#define NO out("NO")
#define out(x){cout << x << "\n"; return;}
#define FAST     ios_base::sync_with_stdio(false); cin.tie(NULL)
#define print(x){for(auto i:x) cout << i << " "; cout << "\n";}

const ll LLINF=1e18;
const int INF=INT_MAX;
const ld PI=acos(-1);//3.1415926535897932384626433
const ld E=2.71828183;
const int MOD=1e9+7;
template <typename T>
struct segment_tree{

    vector<T>tree;
    int size;
    T DEF;
    void init(int n){
        size=1;
        DEF=INF;
        while(size<n)size*=2;
        tree=vector<T>(2*size,0);
    }

    T merge(T a,T b){return a+b;}

    void set(int i,int x,T v,int lx, int rx){
        if(rx-lx==1){
            tree[x]=v;
            return;
        }
        int m=(rx+lx)/2;
        if(i<m){
            set(i,2*x+1,v,lx,m);
        }
        else{
            set(i,2*x+2,v,m,rx);
        }
        tree[x]=merge(tree[2*x+1],tree[2*x+2]);
    }
    void set(int i,T v){
        set(i,0,v,0,size);
    }
    T sum(int l,int r,int x,int lx,int rx){
        if(r<=lx || rx<=l) return 0;//change
        else if(l<=lx && rx<=r)return tree[x];
        int m=(lx+rx)/2;
        return merge(sum(l,r,2*x+1,lx,m),sum(l,r,2*x+2,m,rx));
    }
    T sum(int l,int r){
        return sum(l,r+1,0,0,size);
    }
    void print_tree(){
        for(int i=0; i<tree.size(); i++)
            cout << to_string(tree[i]) << " ";
        cout << "\n";
    }
};
vi bfs(vector<vi>adj, int src){
    queue<int>q;
    vi d(adj.size(),INF);
    q.push(src);
    d[src]=0;
    while(!q.empty()){
        int c=q.front();
        q.pop();
        for(int nbr:adj[c]){
            if(d[nbr]==INF)
                q.push(nbr);
            d[nbr]=min(d[nbr],d[c]+1);
        }
    }
    return d;
}
template<typename T>
void read(vector<T>& v){
    int n=v.size();
    for(int i=0; i<n; i++)
        cin >> v[i];
}
ld log (ld a,ld b){return log(b)/log(a);}
ll power(ll base, ll exp,ll M=LLONG_MAX){//(base^exp)%M
    ll res=1;
    while(exp){
        if(exp%2==1)res=((res%M)*(base%M))%M;
        base=((base%M)*(base%M))%M;
        exp/=2;
    }
    return res;
}
string to_base(int n,int new_base){
    string s;
    int nn=n;
    while(nn){
        s+=to_string(nn%new_base);
        nn/=new_base;
    }
    reverse(all(s));
    return s;
}
ll gcd(ll a,ll b){
    if(a%b==0)return b;
    else return gcd(b,a%b);
}
ll lcm(ll a,ll b){
    return (a/gcd(a,b))*b;
}
bitset<(const int)(5e5)>sieve(){
    bitset<(const int)(5e5)>ans;
    for(int i=2; i<5e5; i++)
        ans[i]=1;
    for(int i=2; i*i<5e5; i++){
        if(ans[i])
            for(int j=2*i; j<5e5; j+=i)
                ans[j]=0;
    }
    return ans;
}
void solve();
int main() {
    FAST;
    int t = 1;
    //cin >> t;
    while (t--)
        solve();
    return 0;
}

void solve(){
    string s;
    cin >> s;
    int n=s.size();
    vi cnt(26);
    for(char c:s)
        cnt[c-'a']++;
    int o=0,cnto=0;
    for(int i=0; i<26;i++){
        if(cnt[i]%2){
            o+=cnt[i];
            cnto++;
        }
    }
    if(cnto==1)out("First")
    else if(o%2==1)out("First")
    else out("Second")

}


#include <bits/stdc++.h>
using namespace std;
typedef long double ld;
typedef long long ll;
typedef unsigned long long ull;
typedef vector<int> vi;
typedef pair<int,int> pi;
typedef list<int> li;

#define all(x) x.begin(),x.end()
#define YES out("YES")
#define NO out("NO")
#define out(x){cout << x << "\n"; return;}
#define FAST     ios_base::sync_with_stdio(false); cin.tie(NULL)
#define print(x){for(auto i:x) cout << i << " "; cout << "\n";}

const ll LLINF=1e18;
const int INF=INT_MAX;
const ld PI=acos(-1);//3.1415926535897932384626433
const ld E=2.71828183;
const int MOD=1e9+7;
template <typename T>
struct segment_tree{

    vector<T>tree;
    int size;
    T DEF;
    void init(int n){
        size=1;
        DEF=INF;
        while(size<n)size*=2;
        tree=vector<T>(2*size,0);
    }

    T merge(T a,T b){return a+b;}

    void set(int i,int x,T v,int lx, int rx){
        if(rx-lx==1){
            tree[x]=v;
            return;
        }
        int m=(rx+lx)/2;
        if(i<m){
            set(i,2*x+1,v,lx,m);
        }
        else{
            set(i,2*x+2,v,m,rx);
        }
        tree[x]=merge(tree[2*x+1],tree[2*x+2]);
    }
    void set(int i,T v){
        set(i,0,v,0,size);
    }
    T sum(int l,int r,int x,int lx,int rx){
        if(r<=lx || rx<=l) return 0;//change
        else if(l<=lx && rx<=r)return tree[x];
        int m=(lx+rx)/2;
        return merge(sum(l,r,2*x+1,lx,m),sum(l,r,2*x+2,m,rx));
    }
    T sum(int l,int r){
        return sum(l,r+1,0,0,size);
    }
    void print_tree(){
        for(int i=0; i<tree.size(); i++)
            cout << to_string(tree[i]) << " ";
        cout << "\n";
    }
};
vi bfs(vector<vi>adj, int src){
    queue<int>q;
    vi d(adj.size(),INF);
    q.push(src);
    d[src]=0;
    while(!q.empty()){
        int c=q.front();
        q.pop();
        for(int nbr:adj[c]){
            if(d[nbr]==INF)
                q.push(nbr);
            d[nbr]=min(d[nbr],d[c]+1);
        }
    }
    return d;
}
template<typename T>
void read(vector<T>& v){
    int n=v.size();
    for(int i=0; i<n; i++)
        cin >> v[i];
}
ld log (ld a,ld b){return log(b)/log(a);}
ll power(ll base, ll exp,ll M=LLONG_MAX){//(base^exp)%M
    ll res=1;
    while(exp){
        if(exp%2==1)res=((res%M)*(base%M))%M;
        base=((base%M)*(base%M))%M;
        exp/=2;
    }
    return res;
}
string to_base(int n,int new_base){
    string s;
    int nn=n;
    while(nn){
        s+=to_string(nn%new_base);
        nn/=new_base;
    }
    reverse(all(s));
    return s;
}
ll gcd(ll a,ll b){
    if(a%b==0)return b;
    else return gcd(b,a%b);
}
ll lcm(ll a,ll b){
    return (a/gcd(a,b))*b;
}
bitset<(const int)(5e5)>sieve(){
    bitset<(const int)(5e5)>ans;
    for(int i=2; i<5e5; i++)
        ans[i]=1;
    for(int i=2; i*i<5e5; i++){
        if(ans[i])
            for(int j=2*i; j<5e5; j+=i)
                ans[j]=0;
    }
    return ans;
}
void solve();
int main() {
    FAST;
    int t = 1;
    //cin >> t;
    while (t--)
        solve();
    return 0;
}

void solve(){
    string s;
    cin >> s;
    int n=s.size();
    vi cnt(26);
    for(char c:s)
        cnt[c-'a']++;
    int o=0,cnto=0;
    for(int i=0; i<26;i++){
        if(cnt[i]%2){
            o+=cnt[i];
            cnto++;
        }
    }
    if(cnto<=1)out("First")
    else if(o%2==1)out("First")
    else out("Second")

}


#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fir first
#define sec second
#define MOD 1000000007
#define vvi vector<vector<int> >
#define vvs vector<vector<string> >
#define ss string
#define pa pair<int, int>
#define pp pair<int, pa>
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define vb vector<bool>
#define vs vector<string>
#define vvl vector<vl>
#define loopin(i, n) for(int i = 0; i < (n); i++)
#define loopa(i, a, n) for(int i = a; i <= (n); i++)
#define loopdec(i, n) for(int i = n-1; i >= 0; i--)
const int mod=1e9+7;
int n,m,k,l,r,x,y,q,res,ans,t;
string s1,s2;
int cou=0;

void solve(){
cin>>s1;
int cou1=0;
int i1=0;
int i2=0;
int y=0;
int mini=INT_MAX;
while(i1<s1.length()-2){
	y=s1.length()-1;
	i2=i1;
	while(i2<y){
		if(s1[i2]!=s1[y]){
			cou++;
			y--;
		}else{
			i2++;
			y--;
		}
	}
mini=min(mini,cou);
cou1++;
cou=cou1;

i1++;

}

if(mini%2==0){
	cout<<"First"<<endl;
}else{

cout<<"Second"<<endl;
}
}
int main(){

        solve();

return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fir first
#define sec second
#define MOD 1000000007
#define vvi vector<vector<int> >
#define vvs vector<vector<string> >
#define ss string
#define pa pair<int, int>
#define pp pair<int, pa>
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define vb vector<bool>
#define vs vector<string>
#define vvl vector<vl>
#define loopin(i, n) for(int i = 0; i < (n); i++)
#define loopa(i, a, n) for(int i = a; i <= (n); i++)
#define loopdec(i, n) for(int i = n-1; i >= 0; i--)
const int mod=1e9+7;
int n,m,k,l,r,x,y,q,res,ans,t;
string s1,s2;
int cou=0;

void solve(){
cin>>s1;
int i1=0;
int i2=0;
int y=0;
int mini=INT_MAX;
while(i1<s1.length()-1){
	y=s1.length()-1;
	i2=i1;
	while(i1<y){
		if(s1[i2]!=s1[y]){
			cou++;
			y--;
		}else{
			i2++;
			y--;
		}
	}
mini=min(mini,cou);
cou=0;

i1++;

}
if(mini%2==0){
	cout<<"First"<<endl;
}else{

cout<<"Second"<<endl;
}
}
int main(){

        solve();

return 0;
}


#include <stdio.h>
#include <math.h>
#include <string.h>
#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <complex>
using namespace std;
typedef long long lld;

char ch[10001];

int amt[30];
int tot;
int count_odd = 0;

int main()
{
    scanf("%s",&ch);
    int L = strlen(ch);
    for (int i=0;i<L;i++)
    {
        amt[ch[i]-'a']++;
    }
    for (int i=0;i<26;i++)
    {
        if (amt[i] % 2 == 1) count_odd++;
    }
    if (count_odd == 0)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd == 1)
    {
        printf("First\n");
        return 0;
    }
    if (count_odd % 2 == 0)
    {
        printf("Second\n");
        return 0;
    }
    printf("First\n");
    return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fir first
#define sec second
#define MOD 1000000007
#define vvi vector<vector<int> >
#define vvs vector<vector<string> >
#define ss string
#define pa pair<int, int>
#define pp pair<int, pa>
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define vb vector<bool>
#define vs vector<string>
#define vvl vector<vl>
#define loopin(i, n) for(int i = 0; i < (n); i++)
#define loopa(i, a, n) for(int i = a; i <= (n); i++)
#define loopdec(i, n) for(int i = n-1; i >= 0; i--)
const int mod=1e9+7;
int n,m,k,l,r,x,y,q,res,ans,t;
string s1,s2;
int cou=0;

void solve(){
cin>>s1;
int mini=INT_MAX;
if(s1.length()<2){
mini=0;
}else{

int cou1=0;
int i1=0;
int i2=0;
int y=0;

while(i1<=s1.length()-2){
	y=s1.length()-1;
	i2=i1;
	while(i2<y){
		if(s1[i2]!=s1[y]){
			cou++;
			y--;
		}else{
			i2++;
			y--;
		}
	}
mini=min(mini,cou);
cou1++;
cou=cou1;

i1++;

}}

if(mini%2==0){
	cout<<"First"<<endl;
}else{

cout<<"Second"<<endl;
}
}
int main(){

        solve();

return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fir first
#define sec second
#define MOD 1000000007
#define vvi vector<vector<int> >
#define vvs vector<vector<string> >
#define ss string
#define pa pair<int, int>
#define pp pair<int, pa>
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define vb vector<bool>
#define vs vector<string>
#define vvl vector<vl>
#define loopin(i, n) for(int i = 0; i < (n); i++)
#define loopa(i, a, n) for(int i = a; i <= (n); i++)
#define loopdec(i, n) for(int i = n-1; i >= 0; i--)
const int mod=1e9+7;
int n,m,k,l,r,x,y,q,res,ans,t;
string s1,s2;
int cou=0;

void solve(){
cin>>s1;
int mini=INT_MAX;
if(s1.length()<2){
mini=0;
}else{

int cou1=0;
int i1=0;
int i2=0;
int y=0;

while(i1<s1.length()-2){
	y=s1.length()-1;
	i2=i1;
	while(i2<y){
		if(s1[i2]!=s1[y]){
			cou++;
			y--;
		}else{
			i2++;
			y--;
		}
	}
mini=min(mini,cou);
cou1++;
cou=cou1;

i1++;

}}

if(mini%2==0){
	cout<<"First"<<endl;
}else{

cout<<"Second"<<endl;
}
}
int main(){

        solve();

return 0;
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long int
#define fir first
#define sec second
#define MOD 1000000007
#define vvi vector<vector<int> >
#define vvs vector<vector<string> >
#define ss string
#define pa pair<int, int>
#define pp pair<int, pa>
#define pb push_back
#define vi vector<int>
#define vl vector<ll>
#define vb vector<bool>
#define vs vector<string>
#define vvl vector<vl>
#define loopin(i, n) for(int i = 0; i < (n); i++)
#define loopa(i, a, n) for(int i = a; i <= (n); i++)
#define loopdec(i, n) for(int i = n-1; i >= 0; i--)
const int mod=1e9+7;
int n,m,k,l,r,x,y,q,res,ans,t;
string s1,s2;
int cou=0;

void solve(){
cin>>s1;
int i1=0;
int i2=0;
int y=0;
int mini=INT_MAX;
while(i1<s1.length()-1){
	y=s1.length()-1;
	i2=i1;
	while(i1<y){
		if(s1[i2]!=s1[y]){
			cou++;
			y--;
		}else{
			i2++;
			y--;
		}
	}
mini=min(mini,cou);
cou=0;

i1++;

}
if(mini%2==0){
	cout<<"FIRST"<<endl;
}else{

cout<<"SECOND"<<endl;
}
}
int main(){

        solve();

return 0;
}


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

typedef long long int lli;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<lli> vlli;
typedef pair<lli,lli> plli;

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	string fir="",sec="";
	sort(s.begin(),s.end());
	//cout<<s<<"\n";
	int quite=0;
	for(int i=0;i<s.size();i++){
		fir+=s[i++];
		if(i==s.size()) break;
		sec+=s[i];
	}
	int i=0,j=0;
	while(i<fir.size()&&j<sec.size()){
		if(fir.compare(sec)==0||((abs(((int)fir.size()-i)-((int)sec.size()-j))==1)&&(fir.size()-i-1==1||sec.size()-j-1==1))){
			//cout<<i<<" "<<j<<"\n";
			break;
		}
		if(fir[i]==sec[j]){
			i++;
			j++;
		}
		else{
			if(fir[i]<sec[i]){
				quite++;
				i++;
			}
			else{
				j++;
				quite++;
			}
		}
	}

	if(quite%2==0){
		cout<<"First\n";
	}
	else{
		cout<<"Second\n";
	}

	return 0;
}


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

typedef long long int lli;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<lli> vlli;
typedef pair<lli,lli> plli;

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	string fir="",sec="";
	sort(s.begin(),s.end());
	int quite=0;
	for(int i=0;i<s.size();i++){
		fir+=s[i++];
		if(i==s.size()) break;
		sec+=s[i];
	}
	int i=0,j=0;
	while(i<fir.size()&&j<sec.size()){
		if(fir.compare(sec)==0||(abs((int)fir.size()-(int)sec.size())==1)){
			break;
		}
		if(fir[i]==sec[j]){
			i++;
			j++;
		}
		else{
			if(fir[i]<sec[i]){
				quite++;
				i++;
			}
			else{
				j++;
				quite++;
			}
		}
	}
	if(quite%2==0){
		cout<<"First\n";
	}
	else{
		cout<<"Second\n";
	}

	return 0;
}


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

typedef long long int lli;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<lli> vlli;
typedef pair<lli,lli> plli;

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	string fir="",sec="";
	sort(s.begin(),s.end());
	int times=0,ind=0,act=s[ind],odd=0;
	while(ind<s.size()){
		if(s[ind]==act){
			times++;
		}
		else{
			if(times%2==1){
				odd++;
			}
			times=1;
			act=s[ind];
		}
		ind++;
	}
	if(times%2==1){
		odd++;
	}
	//cout<<odd<<"\n";
	if(odd<=1){
		cout<<"First\n";
	}
	else{
		if((odd-1)%2==0){
			cout<<"First\n";
		}
		else{
			cout<<"Second\n";
		}
	}

	return 0;
}


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

typedef long long int lli;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<lli> vlli;
typedef pair<lli,lli> plli;

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	string fir="",sec="";
	sort(s.begin(),s.end());
	int quite=0;
	for(int i=0;i<s.size();i++){
		fir+=s[i++];
		if(i==s.size()) break;
		sec+=s[i];
	}
	int i=0,j=0;
	while(i<fir.size()&&j<sec.size()){
		if(fir.compare(sec)==0||(abs(fir.size()-sec.size())==1)){
			break;
		}
		if(fir[i]==sec[j]){
			i++;
			j++;
		}
		else{
			if(fir[i]<sec[i]){
				quite++;
				i++;
			}
			else{
				j++;
				quite++;
			}
		}
	}
	if(quite%2==0){
		cout<<"First\n";
	}
	else{
		cout<<"Second\n";
	}

	return 0;
}


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

typedef long long int lli;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<lli> vlli;
typedef pair<lli,lli> plli;

int main(){
	ios_base::sync_with_stdio(0);
	cin.tie(0);
	string s;
	cin>>s;
	string fir="",sec="";
	sort(s.begin(),s.end());
	cout<<s<<"\n";
	int quite=0;
	for(int i=0;i<s.size();i++){
		fir+=s[i++];
		if(i==s.size()) break;
		sec+=s[i];
	}
	int i=0,j=0;
	while(i<fir.size()&&j<sec.size()){
		if(fir.compare(sec)==0||((abs(((int)fir.size()-i)-((int)sec.size()-j))==1)&&(fir.size()-i-1==1||sec.size()-j-1==1))){
			cout<<i<<" "<<j<<"\n";
			break;
		}
		if(fir[i]==sec[j]){
			i++;
			j++;
		}
		else{
			if(fir[i]<sec[i]){
				quite++;
				i++;
			}
			else{
				j++;
				quite++;
			}
		}
	}

	if(quite%2==0){
		cout<<"First\n";
	}
	else{
		cout<<"Second\n";
	}

	return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define dtype  int
#define endl "\n"

int main() {
    ios_base::sync_with_stdio(false), cin.tie(nullptr);
    string str;
    int odd = 0, even = 0;
    cin >> str;
    vector<int> alpha(26, 0);
    for (auto i:str)
        alpha[i - 'a']++;
    for (auto i:alpha) {
        if (i & 1)odd++;
        else if (i > 0)even++;
    }
    if(odd<=1)
        return  cout<<"First"<<endl,0;
    string ans[] = {"First", "Second"};
    int turn = even % 2;
    odd += even;
    cout << (odd & 1 ? ans[turn] : ans[!turn]) << endl;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define dtype  int
#define endl "\n"

template<typename T>
class mydata {
public:
    T a;

    mydata(T b) {
        a = b;
    }

    bool operator<(const class mydata &other) const {
        if (a % 2 == other.a % 2)
            return a < other.a;
        return (a & 1);
    }

    friend ostream &operator<<(ostream &out, const mydata &hmm) {
        out << hmm.a;
        return out;
    }
};

int main() {
    string str;
    cin >> str;
    unordered_map<char, int> prefix;
    int odd=0,even=0;
    for (auto &i:str) {
        prefix[i]++;
    }
    priority_queue<mydata<int>, vector<mydata<int>>> pq;
    for (auto i:prefix)
    {
        if(i.second&1)
            odd++;
        else
            even++;
        pq.push(mydata(i.second));
    }
    if(odd<=1)
        return  cout<<"First"<<endl,0;
    dtype win = -1, turn = 0;
    while (pq.size()) {
        int x = pq.top().a - 1;
        pq.pop();
        if (x)
            pq.push(x);
        turn ^= 1;
    }
    string ans[] = {"First", "Second"};
    cout << ans[turn ^ 1] << endl;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define dtype  int
#define endl "\n"

template<typename T>
class mydata {
public:
    T a;

    mydata(T b) {
        a = b;
    }

    bool operator<(const class mydata &other) const {
        if (a % 2 == other.a % 2)
            return a < other.a;
        return (a & 1);
    }

    friend ostream &operator<<(ostream &out, const mydata &hmm) {
        out << hmm.a;
        return out;
    }
};

int main() {
    string str;
    cin >> str;
    unordered_map<char, int> prefix;
    for (auto &i:str) {
        prefix[i]++;
    }
    priority_queue<mydata<int>, vector<mydata<int>>> pq;
    for (auto i:prefix)
        pq.push(mydata(i.second));
    dtype win = -1, turn = 0;
    while (pq.size()) {
        int x = pq.top().a - 1;
        pq.pop();
        if (x)
            pq.push(x);
        turn ^= 1;
    }

    string ans[] = {"First", "Second"};
    cout << ans[turn ^ 1] << endl;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define dtype  int
#define endl "\n"

int main() {
    ios_base::sync_with_stdio(false), cin.tie(nullptr);
    string str;
    int odd = 0, even = 0;
    cin >> str;
    vector<int> alpha(26, 0);
    for (auto i:str)
        alpha[i - 'a']++;
    for (auto i:alpha) {
        if (i & 1)odd++;
        else if (i > 0)even++;
    }
    string ans[] = {"First", "Second"};
    int turn = even % 2;
    odd += even;
    cout << (odd & 1 ? ans[turn] : ans[!turn]) << endl;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define dtype  int
#define endl "\n"

template<typename T>
class mydata {
public:
    T a;

    mydata(T b) {
        a = b;
    }

    bool operator<(const class mydata &other) const {
        if (a % 2 == other.a % 2)
            return a < other.a;
        return (a & 1);
    }

    friend ostream &operator<<(ostream &out, const mydata &hmm) {
        out << hmm.a;
        return out;
    }
};

int main() {
    ios_base::sync_with_stdio(false), cin.tie(nullptr);
    string str;
    cin >> str;
    unordered_map<char, int> prefix;
    int odd = 0, even = 0;
    for (auto &i:str) {
        prefix[i]++;
    }
    priority_queue<mydata<int>, vector<mydata<int>>> pq;
    for (auto i:prefix) {
        if (i.second & 1)
            odd++;
        else
            even++;
        pq.push(mydata(i.second));
    }
    if (odd <= 1)
        return cout << "First" << endl, 0;
    dtype win = -1, turn = 0;
    while (pq.size()) {
        int x = pq.top().a - 1;
        pq.pop();
        if (x)
            pq.push(x);
        turn ^= 1;
    }
    string ans[] = {"First", "Second"};
    cout << ans[turn ^ 1] << endl;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define dtype  int
#define endl "\n"

int main() {
    ios_base::sync_with_stdio(false), cin.tie(nullptr);
    string str;int odd=0;
    cin >> str;
    vector<int>alpha(26,0);
    for(auto i:str)
        alpha[i-'a']++;
    for(auto i:alpha)
        if(i&1)odd++;
    cout<<(odd&1?"First":"Second")<<endl;

    return 0;
}


#include <bits/stdc++.h>

using namespace std;
#define dtype  int
#define endl "\n"

int main() {
    ios_base::sync_with_stdio(false), cin.tie(nullptr);
    string str;int odd=0;
    cin >> str;
    vector<int>alpha(26,0);
    for(auto i:str)
        alpha[i-'a']++;
    for(auto i:alpha)
        if(i&1)odd++;

    cout<<((odd&1 || odd==0)?"First":"Second")<<endl;

    return 0;
}


#include <iostream>
#include <string>

typedef long long ll;

using namespace std;
int arr[26];
int main()
{
    string s;
    cin >> s;
    fill (arr,arr+26,0);
    for (int i=0; i<s.length();i++){
        arr[s[i]-'a'] += 1;
    }
    int odds=0;
    for (int i=0; i<26;i++){
        if (arr[i] %2 ==1){
            odds ++;
        }
    }
    int count =0;
    if (odds == 1){
        cout <<"First" << endl;
    }
    else if (odds -1 %2 == 0){
        cout << "First";
    }
    else{
        cout << "Second";
    }
    return 0;
}


#include <iostream>
#include <string>

typedef long long ll;

using namespace std;
int arr[26];
int main()
{
    string s;
    cin >> s;
    fill (arr,arr+26,0);
    for (int i=0; i<s.length();i++){
        arr[s[i]-'a'] += 1;
    }
    int odds=0;
    for (int i=0; i<26;i++){
        if (arr[i] %2 ==1){
            odds ++;
        }
    }
    int count =0;
    if (odds == 1 || odds == 0){
        cout <<"First" << endl;
    }
    else if ((odds -1) %2 == 0){
        cout << "First";
    }
    else{
        cout << "Second";
    }
    return 0;
}


#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

struct Teams
{
    int index, strength;
}A[1000];

int n, arr[1000][1000], br, num, ans[1000];
bool used[1000];

bool cmp(Teams a, Teams b) {return a.strength > b.strength;}

int main()
{
    scanf("%d", &n);
    for (int i = 2; i <= 2*n; i++)
    {
        for (int j = 1; j <= i - 1; j++)
        {
            scanf("%d", &num);
            arr[i][j] = num;
            arr[j][i] = num;
        }
    }
    for (int i = 1; i <= 2*n; i++)
    {
        if (!used[i])
        {
            br = 0;
            for (int j = 1; j <= 2*n; j++)
                if (i != j and !used[j])
                {
                    A[br].index = j;
                    A[br].strength = arr[i][j];
                    br++;
                }
            sort(A, A + br, cmp);
            for (int j = 0; j < br; j++)
            {
                int curr = arr[i][A[j].index];
                bool f = true;
                for (int k = 1; k <= 2*n; k++)
                    if (!used[k] and k != A[j].index and arr[A[j].index][k] > curr) {f = false; break;}
                if (f)
                {
                    used[A[j].index] = 1;
                    used[i] = 1;
                    ans[i] = A[j].index;
                    ans[A[j].index] = i;
                    break;
                }
            }
        }
    }
    for (int i = 1; i <= 2*n; i++)
        printf("%d ", ans[i]);
    printf("\n");
}


#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

struct Teams
{
    int index, strength;
}A[1000];

int n, arr[1000][1000], br, num, ans[1000];
bool used[1000], f;

bool cmp(Teams a, Teams b) {return a.strength > b.strength;}

int main()
{
    scanf("%d", &n);
    for (int i = 2; i <= 2*n; i++)
    {
        for (int j = 1; j <= i - 1; j++)
        {
            scanf("%d", &num);
            arr[i][j] = num;
            arr[j][i] = num;
        }
    }
    for (int i = 1; i <= 2*n; i++)
    {
        if (!used[i])
        {
            br = 0;
            for (int j = 1; j <= 2*n; j++)
                if (i != j and !used[j])
                {
                    A[br].index = j;
                    A[br].strength = arr[i][j];
                    br++;
                }
            sort(A, A + br, cmp);
            for (int j = 0; j < br; j++)
            {
                int curr = arr[i][A[j].index];
                f = true;
                for (int k = 1; k <= 2*n; k++)
                    if (!used[k] and arr[A[j].index][k] > curr) {f = false; break;}
                //cout <<i << " " << A[j].index << " " << f << endl;
                if (f)
                {
                    used[A[j].index] = 1;
                    used[i] = 1;
                    ans[i] = A[j].index;
                    ans[A[j].index] = i;
                    break;
                }
            }
            if (!f)
            {
                used[A[br - 1].index] = 1;
                used[i] = 1;
                ans[i] = A[br - 1].index;
                ans[A[br - 1].index] = i;
            }
        }
    }
    for (int i = 1; i <= 2*n; i++)
        printf("%d ", ans[i]);
    printf("\n");
}


#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

struct Teams
{
    int index, strength;
}A[401];

int n, arr[401][401], br, num, ans[401];
bool used[401];

bool cmp(Teams a, Teams b) {return a.strength > b.strength;}

int main()
{
    scanf("%d", &n);
    for (int i = 2; i <= 2*n; i++)
    {
        for (int j = 1; j <= i - 1; j++)
        {
            scanf("%d", &num);
            arr[i][j] = num;
            arr[j][i] = num;
        }
    }
    for (int i = 1; i <= 2*n; i++)
    {
        if (!used[i])
        {
            br = 0;
            for (int j = 1; j <= 2*n; j++)
                if (i != j and !used[j])
                {
                    A[br].index = j;
                    A[br].strength = arr[i][j];
                    br++;
                }
            sort(A, A + br, cmp);
            for (int j = 0; j < br; j++)
            {
                int curr = arr[i][A[j].index];
                bool f = true;
                for (int k = 1; k <= 2*n; k++)
                    if (!used[k] and k != A[j].index and arr[A[j].index][k] > curr) {f = false; break;}
                if (f)
                {
                    used[A[j].index] = 1;
                    used[i] = 1;
                    ans[i] = A[j].index;
                    ans[A[j].index] = i;
                    break;
                }
            }
        }
    }
    for (int i = 1; i <= 2*n; i++)
        printf("%d ", ans[i]);
    printf("\n");
}


#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

struct Teams
{
    int fp, sp, strength;
}arr[400000];

int n, br, num, ans[1000];
bool used[1000];

bool cmp(Teams a, Teams b) {return a.strength > b.strength;}

int main()
{
    scanf("%d", &n);
    for (int i = 2; i <= 2*n; i++)
    {
        for (int j = 1; j <= i - 1; j++)
        {
            scanf("%d", &num);
            arr[br].fp = j;
            arr[br].sp = i;
            arr[br].strength = num;
            br++;
        }
    }
    sort(arr, arr + br, cmp);
    for (int i = 0; i < br; i++)
        if (!used[arr[i].fp] and !used[arr[i].sp])
        {
            ans[arr[i].fp] = arr[i].sp;
            ans[arr[i].sp] = arr[i].fp;
            used[arr[i].fp] = 1;
            used[arr[i].sp] = 1;
        }
    for (int i = 1; i <= 2*n; i++)
        printf("%d ", ans[i]);
    printf("\n");
}


#include <iostream>
using namespace std;
int main()
{
    int n, ans = 0;
    cin >> n;
    while (n > 0)
    {
        if (n % 2 == 0) n /= 2;
        else
        {
            n--;
            ans++;
        }
    }
    cout << ans << endl;
}


#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

struct Teams
{
    int fp, sp, strength;
}arr[100000];

int n, br, num, ans[1000];
bool used[1000];

bool cmp(Teams a, Teams b) {return a.strength > b.strength;}

int main()
{
    scanf("%d", &n);
    for (int i = 2; i <= 2*n; i++)
    {
        for (int j = 1; j <= i - 1; j++)
        {
            scanf("%d", &num);
            arr[br].fp = j;
            arr[br].sp = i;
            arr[br].strength = num;
            br++;
        }
    }
    sort(arr, arr + br, cmp);
    for (int i = 0; i < br; i++)
        if (!used[arr[i].fp] and !used[arr[i].sp])
        {
            ans[arr[i].fp] = arr[i].sp;
            ans[arr[i].sp] = arr[i].fp;
            used[arr[i].fp] = 1;
            used[arr[i].sp] = 1;
        }
    for (int i = 1; i <= 2*n; i++)
        printf("%d ", ans[i]);
    printf("\n");
}


#include <iostream>
#include <stdio.h>
#include <algorithm>

using namespace std;

struct Teams
{
    int fp, sp, strength;
}arr[1000];

int n, br, num, ans[1000];
bool used[1000];

bool cmp(Teams a, Teams b) {return a.strength > b.strength;}

int main()
{
    scanf("%d", &n);
    for (int i = 2; i <= 2*n; i++)
    {
        for (int j = 1; j <= i - 1; j++)
        {
            scanf("%d", &num);
            arr[br].fp = j;
            arr[br].sp = i;
            arr[br].strength = num;
            br++;
        }
    }
    sort(arr, arr + br, cmp);
    for (int i = 0; i < br; i++)
        if (!used[arr[i].fp] and !used[arr[i].sp])
        {
            ans[arr[i].fp] = arr[i].sp;
            ans[arr[i].sp] = arr[i].fp;
            used[arr[i].fp] = 1;
            used[arr[i].sp] = 1;
        }
    for (int i = 1; i <= 2*n; i++)
        printf("%d ", ans[i]);
    printf("\n");
}


#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long int
#define MOD 1000000007
#define N 15
#define INF 0x3f3f3f3f
#define seed 31
#define ULL unsigned long long int
#define lson now*2,l,l+(r-l)/2
#define rson now*2+1,l+(r-l)/2+1,r
int n,m;
struct node
{
    int a;
    int b;
    int len;
}arr[405][405];
node arr2[405];
int vis[405];
int num[405];

bool cmp(node a,node b)
{
    return a.len>b.len;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(scanf("%d",&n)==1)
    {
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        for(int i=2;i<=n*2;++i)
            for(int j=1;j<=i-1;++j)
                scanf("%d",&arr[i][j].len),
                arr[i][j].b=j,
                arr[i][j].a=i;
        for(int i=1;i<=n*2;++i)
        {
            if(vis[i]) continue;
            int cnt=0;
            for(int k=1;k<i;++k)
            {
//                if(vis[k]) continue;
                arr2[cnt++]=arr[i][k];
            }
            for(int k=i+1;k<=n*2;++k)
            {
//                if(vis[k]) continue;
                arr2[cnt++]=arr[k][i];
            }
            sort(arr2,arr2+cnt,cmp);
            for(int k=0;k<cnt;++k)
            {
                int tmp;
                for(int l=0;l<=1;++l){
                if(l==0)
                     tmp=arr2[k].a;
                if(l==1)
                     tmp=arr2[k].b;
//                printf("%d ",tmp);
                if(vis[tmp]) continue;
                if(tmp==i) continue;
                int Max=arr2[k].len;
                int tmp2=i;
                for(int j=1;j<tmp;++j)
                {
                    if(vis[j]) continue;
                    Max=max(Max,arr[tmp][j].len);
                    if(Max==arr[tmp][j].len) tmp2=j;
                }
                for(int j=tmp+1;j<=n*2;++j)
                {
                    if(vis[j]) continue;
                    Max=max(Max,arr[j][tmp].len);
                    if(Max==arr[j][tmp].len) tmp2=j;
                }
//                printf("%d %d\n",i,tmp2);
                if(tmp2!=i) continue;
                else if(tmp2==i)
                {
                    vis[i]=1;
                    vis[tmp]=1;
                    num[i]=tmp;
                    num[tmp]=i;
//                    printf("%d %d\n",i,tmp);
                    goto there;
                }
            }
//            if(vis[i]==0)
//            {
//
//            }
            }
            there:;
        }
        for(int i=1;i<=n*2;++i)
        {
            printf("%d",num[i]);
            if(i==n*2)
                printf("\n");
            else
                printf(" ");
        }

    }
    return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long int
#define MOD 1000000007
#define N 15
#define INF 0x3f3f3f3f
#define seed 31
#define ULL unsigned long long int
#define lson now*2,l,l+(r-l)/2
#define rson now*2+1,l+(r-l)/2+1,r
int n,m;
struct node
{
    int b;
    int len;
};
vector<node> arr[405*2];
node arr2[405*2];
int vis[405*2];
int num[405*2];

bool cmp(node a,node b)
{
    return a.len>b.len;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(scanf("%d",&n)==1)
    {
//        for(int i=0;i<=405*2;++i)
//            arr[i].clear();
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
//        for(int i=0;i<=405*2;++i)
//            arr2[i]={0,0};
        for(int i=2;i<=n*2;++i)
            for(int j=1;j<=i-1;++j)
             {
                 int a;
                 scanf("%d",&a);
                 node tmp1={i,a};
                 node tmp2={j,a};
                 arr[j].push_back(tmp1);
                 arr[i].push_back(tmp2);
             }
        for(int i=1;i<=n*2;++i)
        {
            if(vis[i]) continue;
            int len=arr[i].size();
            for(int j=0;j<len;++j)
                arr2[j]=arr[i][j];
            sort(arr2,arr2+len,cmp);
            for(int j=0;j<len;++j)
            {
                int t=arr2[j].b;
                if(vis[t]) continue;
                int len2=arr[t].size();
                int Max=0;
                int tmp=0;
                for(int k=0;k<len2;k++)
                {
                    if(vis[arr[t][k].b]) continue;
                    Max=max(Max,arr[t][k].len);
                    if(Max==arr[t][k].len) tmp=arr[t][k].b;
                }
                if(tmp==i)
                {
                    vis[i]=1;
                    vis[t]=1;
                    num[i]=t;
                    num[t]=i;
                    break;
                }
                else
                    continue;
            }
        }
        for(int i=1;i<=n*2;++i)
        {
            printf("%d",num[i]);
            if(i==n*2)
                printf("\n");
            else
                printf(" ");
        }

    }
    return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long int
#define MOD 1000000007
#define N 15
#define INF 0x3f3f3f3f
#define seed 31
#define ULL unsigned long long int
#define lson now*2,l,l+(r-l)/2
#define rson now*2+1,l+(r-l)/2+1,r
int n,m;
struct node
{
    int a;
    int b;
    int len;
}arr[405*2][405*2];
node arr2[405*2];
int vis[405*2];
int num[405*2];

bool cmp(node a,node b)
{
    return a.len>b.len;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(scanf("%d",&n)==1)
    {
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        for(int i=2;i<=n*2;++i)
            for(int j=1;j<=i-1;++j)
                scanf("%d",&arr[i][j].len),
                arr[i][j].b=j,
                arr[i][j].a=i;
        for(int i=1;i<=n*2;++i)
        {
            if(vis[i]) continue;
            int cnt=0;
            for(int k=1;k<i;++k)
            {
//                if(vis[k]) continue;
                arr2[cnt++]=arr[i][k];
            }
            for(int k=i+1;k<=n*2;++k)
            {
//                if(vis[k]) continue;
                arr2[cnt++]=arr[k][i];
            }
            sort(arr2,arr2+cnt,cmp);
            for(int k=0;k<cnt;++k)
            {
                int tmp;
                for(int l=0;l<=1;++l){
                if(l==0)
                     tmp=arr2[k].a;
                if(l==1)
                     tmp=arr2[k].b;
//                printf("%d ",tmp);
                if(tmp==arr2[k].b&&arr2[k].b>=i) continue;
                if(vis[tmp]) continue;
                if(tmp==i) continue;
                int Max=arr2[k].len;
                int tmp2=i;
                for(int j=1;j<tmp;++j)
                {
                    if(vis[j]) continue;
                    Max=max(Max,arr[tmp][j].len);
                    if(Max==arr[tmp][j].len) tmp2=j;
                }
                for(int j=tmp+1;j<=n*2;++j)
                {
                    if(vis[j]) continue;
                    Max=max(Max,arr[j][tmp].len);
                    if(Max==arr[j][tmp].len) tmp2=j;
                }
//                printf("%d %d\n",i,tmp2);
                if(tmp2!=i) continue;
                else if(tmp2==i)
                {
                    vis[i]=1;
                    vis[tmp]=1;
                    num[i]=tmp;
                    num[tmp]=i;
//                    printf("%d %d\n",i,tmp);
                    goto there;
                }
            }
//            if(vis[i]==0)
//            {
//
//            }
            }
            there:;
        }
        for(int i=1;i<=n*2;++i)
        {
            printf("%d",num[i]);
            if(i==n*2)
                printf("\n");
            else
                printf(" ");
        }

    }
    return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long int
#define MOD 1000000007
#define N 15
#define INF 0x3f3f3f3f
#define seed 31
#define ULL unsigned long long int
#define lson now*2,l,l+(r-l)/2
#define rson now*2+1,l+(r-l)/2+1,r
int n,m;
struct node
{
    int b;
    int len;
};
vector<node> arr[405*2];
node arr2[405*2];
int vis[405*2];
int num[405*2];

bool cmp(node a,node b)
{
    return a.len>b.len;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(scanf("%d",&n)==1)
    {
        for(int i=0;i<405*2;++i)
            arr[i].clear();
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        for(int i=0;i<=405*2;++i)
            arr2[i]={0,0};
        for(int i=2;i<=n*2;++i)
            for(int j=1;j<=i-1;++j)
             {
                 int a;
                 scanf("%d",&a);
                 node tmp1={i,a};
                 node tmp2={j,a};
                 arr[j].push_back(tmp1);
                 arr[i].push_back(tmp2);
             }
        for(int i=1;i<=n*2;++i)
        {
            if(vis[i]) continue;
            int len=arr[i].size();
            for(int j=0;j<len;++j)
                arr2[j]=arr[i][j];
            sort(arr2,arr2+len,cmp);
            for(int j=0;j<len;++j)
            {
                int t=arr2[j].b;
                if(vis[t]) continue;
                int len2=arr[t].size();
                int Max=0;
                int tmp=0;
                for(int k=0;k<len2;k++)
                {
                    if(vis[arr[t][k].b]) continue;
                    Max=max(Max,arr[t][k].len);
                    if(Max==arr[t][k].len) tmp=arr[t][k].b;
                }
                if(tmp==i)
                {
                    vis[i]=1;
                    vis[t]=1;
                    num[i]=t;
                    num[t]=i;
                    break;
                }
                else
                    continue;
            }
        }
        for(int i=1;i<=n*2;++i)
        {
            printf("%d",num[i]);
            if(i==n*2)
                printf("\n");
            else
                printf(" ");
        }

    }
    return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long int
#define MOD 1000000007
#define N 15
#define INF 0x3f3f3f3f
#define seed 31
#define ULL unsigned long long int
#define lson now*2,l,l+(r-l)/2
#define rson now*2+1,l+(r-l)/2+1,r
int n,m;
struct node
{
    int b;
    int len;
};
vector<node> arr[405*2];
node arr2[405*2];
int vis[405*2];
int num[405*2];

bool cmp(node a,node b)
{
    return a.len>b.len;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(scanf("%d",&n)==1)
    {
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        for(int i=2;i<=n*2;++i)
            for(int j=1;j<=i-1;++j)
             {
                 int a;
                 scanf("%d",&a);
                 node tmp1={i,a};
                 node tmp2={j,a};
                 arr[j].push_back(tmp1);
                 arr[i].push_back(tmp2);
             }
        for(int i=1;i<=n*2;++i)
        {
            if(vis[i]) continue;
            int len=arr[i].size();
            for(int j=0;j<len;++j)
                arr2[j]=arr[i][j];
            sort(arr2,arr2+len,cmp);
            for(int j=0;j<len;++j)
            {
                int t=arr2[j].b;
                if(vis[t]) continue;
                int len2=arr[t].size();
                int Max=0;
                int tmp=0;
                for(int k=0;k<len2;k++)
                {
                    if(vis[arr[t][k].b]) continue;
                    Max=max(Max,arr[t][k].len);
                    if(Max==arr[t][k].len) tmp=arr[t][k].b;
                }
                if(tmp==i)
                {
                    vis[i]=1;
                    vis[t]=1;
                    num[i]=t;
                    num[t]=i;
                    break;
                }
                else
                    continue;
            }
        }
        for(int i=1;i<=n*2;++i)
        {
            printf("%d",num[i]);
            if(i==n*2)
                printf("\n");
            else
                printf(" ");
        }

    }
    return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long int
#define MOD 1000000007
#define N 15
#define INF 0x3f3f3f3f
#define seed 31
#define ULL unsigned long long int
#define lson now*2,l,l+(r-l)/2
#define rson now*2+1,l+(r-l)/2+1,r
int n,m;

struct node
{
    int a;
    int b;
    int len;
    node():b(0),a(0),len(0){};
};

vector<node> arr;
node arr2[405*2];
int vis[405*2];
int num[405*2];

bool cmp(node a,node b)
{
    return a.len>b.len;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(scanf("%d",&n)==1)
    {
        arr.clear();
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        for(int i=2;i<=n*2;++i)
            for(int j=1;j<=i-1;++j)
             {
                 int a;
                 scanf("%d",&a);
                 node tmp1;
                 tmp1.a=i;
                 tmp1.b=j;
                 tmp1.len=a;
                 arr.push_back(tmp1);
             }
        sort(arr.begin(),arr.end(),cmp);
//        for(int i=0;i<arr.size();++i)
//            printf("%d ",arr[i].len);
        for(int i=0;i<arr.size();++i)
        {
            if(vis[arr[i].a]||vis[arr[i].b])
                continue;
            vis[arr[i].a]=vis[arr[i].b]=1;
            num[arr[i].a]=arr[i].b;
            num[arr[i].b]=arr[i].a;
        }
        for(int i=1;i<=n*2;++i)
        {
            printf("%d",num[i]);
            if(i==n*2) printf("\n");
            else printf(" ");
        }
    }
    return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long int
#define MOD 1000000007
#define N 15
#define INF 0x3f3f3f3f
#define seed 31
#define ULL unsigned long long int
#define lson now*2,l,l+(r-l)/2
#define rson now*2+1,l+(r-l)/2+1,r
int n,m;
struct node
{
    int a;
    int b;
    int len;
}arr[405][405];
node arr2[405];
int vis[405];
int num[405];

bool cmp(node a,node b)
{
    return a.len>b.len;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(scanf("%d",&n)==1)
    {
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        for(int i=2;i<=n*2;++i)
            for(int j=1;j<=i-1;++j)
                scanf("%d",&arr[i][j].len),
                arr[i][j].b=j,
                arr[i][j].a=i;
        for(int i=1;i<=n*2;++i)
        {
            if(vis[i]) continue;
            int cnt=0;
            for(int k=1;k<i;++k)
            {
//                if(vis[k]) continue;
                arr2[cnt++]=arr[i][k];
            }
            for(int k=i+1;k<=n*2;++k)
            {
//                if(vis[k]) continue;
                arr2[cnt++]=arr[k][i];
            }
            sort(arr2,arr2+cnt,cmp);
            for(int k=0;k<cnt;++k)
            {
                int tmp;
                for(int l=0;l<=1;++l){
                if(l==0)
                     tmp=arr2[k].a;
                if(l==1)
                     tmp=arr2[k].b;
//                printf("%d ",tmp);
                if(tmp==arr2[k].b&&arr2[k].b>=i) continue;
                if(vis[tmp]) continue;
                if(tmp==i) continue;
                int Max=arr2[k].len;
                int tmp2=i;
                for(int j=1;j<tmp;++j)
                {
                    if(vis[j]) continue;
                    Max=max(Max,arr[tmp][j].len);
                    if(Max==arr[tmp][j].len) tmp2=j;
                }
                for(int j=tmp+1;j<=n*2;++j)
                {
                    if(vis[j]) continue;
                    Max=max(Max,arr[j][tmp].len);
                    if(Max==arr[j][tmp].len) tmp2=j;
                }
//                printf("%d %d\n",i,tmp2);
                if(tmp2!=i) continue;
                else if(tmp2==i)
                {
                    vis[i]=1;
                    vis[tmp]=1;
                    num[i]=tmp;
                    num[tmp]=i;
//                    printf("%d %d\n",i,tmp);
                    goto there;
                }
            }
//            if(vis[i]==0)
//            {
//
//            }
            }
            there:;
        }
        for(int i=1;i<=n*2;++i)
        {
            printf("%d",num[i]);
            if(i==n*2)
                printf("\n");
            else
                printf(" ");
        }

    }
    return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long int
#define MOD 1000000007
#define N 15
#define INF 0x3f3f3f3f
#define seed 31
#define ULL unsigned long long int
#define lson now*2,l,l+(r-l)/2
#define rson now*2+1,l+(r-l)/2+1,r
int n,m;
struct node
{
    int b;
    int len;
};
vector<node> arr[405*2];
node arr2[405*2];
int vis[405*2];
int num[405*2];

bool cmp(node a,node b)
{
    return a.len>b.len;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(scanf("%d",&n)==1)
    {
        for(int i=0;i<=405*2;++i)
            arr[i].clear();
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
//        for(int i=0;i<=405*2;++i)
//            arr2[i]={0,0};
        for(int i=2;i<=n*2;++i)
            for(int j=1;j<=i-1;++j)
             {
                 int a;
                 scanf("%d",&a);
                 node tmp1={i,a};
                 node tmp2={j,a};
                 arr[j].push_back(tmp1);
                 arr[i].push_back(tmp2);
             }
        for(int i=1;i<=n*2;++i)
        {
            if(vis[i]) continue;
            int len=arr[i].size();
            for(int j=0;j<len;++j)
                arr2[j]=arr[i][j];
            sort(arr2,arr2+len,cmp);
            for(int j=0;j<len;++j)
            {
                int t=arr2[j].b;
                if(vis[t]) continue;
                int len2=arr[t].size();
                int Max=0;
                int tmp=0;
                for(int k=0;k<len2;k++)
                {
                    if(vis[arr[t][k].b]) continue;
                    Max=max(Max,arr[t][k].len);
                    if(Max==arr[t][k].len) tmp=arr[t][k].b;
                }
                if(tmp==i)
                {
                    vis[i]=1;
                    vis[t]=1;
                    num[i]=t;
                    num[t]=i;
                    break;
                }
                else
                    continue;
            }
        }
        for(int i=1;i<=n*2;++i)
        {
            printf("%d",num[i]);
            if(i==n*2)
                printf("\n");
            else
                printf(" ");
        }

    }
    return 0;
}


#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<cstring>
#include<string>
#include<iostream>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long int
#define MOD 1000000007
#define N 15
#define INF 0x3f3f3f3f
#define seed 31
#define ULL unsigned long long int
#define lson now*2,l,l+(r-l)/2
#define rson now*2+1,l+(r-l)/2+1,r
int n,m;
struct node
{
    int b;
    int len;
};
vector<node> arr[405*2];
node arr2[405*2];
int vis[405*2];
int num[405*2];

bool cmp(node a,node b)
{
    return a.len>b.len;
}
int main()
{
    #ifndef ONLINE_JUDGE
        freopen("input.txt","r",stdin);
    #endif // ONLINE_JUDGE
    while(scanf("%d",&n)==1)
    {
        for(int i=0;i<=405*2;++i)
            arr[i].clear();
        memset(vis,0,sizeof(vis));
        memset(num,0,sizeof(num));
        for(int i=0;i<=405*2;++i)
        arr2[i]={0,0};
        for(int i=2;i<=n*2;++i)
            for(int j=1;j<=i-1;++j)
             {
                 int a;
                 scanf("%d",&a);
                 node tmp1={i,a};
                 node tmp2={j,a};
                 arr[j].push_back(tmp1);
                 arr[i].push_back(tmp2);
             }
        for(int i=1;i<=n*2;++i)
        {
            if(vis[i]) continue;
            int len=arr[i].size();
            for(int j=0;j<len;++j)
                arr2[j]=arr[i][j];
            sort(arr2,arr2+len,cmp);
            for(int j=0;j<len;++j)
            {
                int t=arr2[j].b;
                if(vis[t]) continue;
                int len2=arr[t].size();
                int Max=0;
                int tmp=0;
                for(int k=0;k<len2;k++)
                {
                    if(vis[arr[t][k].b]) continue;
                    Max=max(Max,arr[t][k].len);
                    if(Max==arr[t][k].len) tmp=arr[t][k].b;
                }
                if(tmp==i)
                {
                    vis[i]=1;
                    vis[t]=1;
                    num[i]=t;
                    num[t]=i;
                    break;
                }
                else
                    continue;
            }
        }
        for(int i=1;i<=n*2;++i)
        {
            printf("%d",num[i]);
            if(i==n*2)
                printf("\n");
            else
                printf(" ");
        }

    }
    return 0;
}


#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
    int x,y,dis;
}a[640004];
bool cmp(node a,node b)
{
    return a.dis > b.dis;
}
int vis[401] = {0},b[802]= {0};
int main()
{
    int n;
    scanf("%d",&n);
    int k = 0;
    for(int i = 2 ; i <= 2*n ; i ++ )
    {
        for(int j = 1 ; j <= i - 1 ; j ++ )
        {
            a[k].x = i;
            a[k].y = j;
            scanf("%d",&a[k++].dis);
        }
    }
    sort(a,a+k,cmp);
    int flag = 0;
    for(int i = 0 ; i < k ; i ++ )
    {
        if(!vis[a[i].x] && !vis[a[i].y])
        {
            vis[a[i].x] = 1;
            vis[a[i].y] = 1;
            b[a[i].x] = a[i].y;
            b[a[i].y] = a[i].x;
        }
    }
    for(int i = 1 ; i <= 2*n ; i ++ )
    {
        if(vis[i] == 1)
        if(!flag)
        {
            flag = 1;
            printf("%d",b[i]);
        }
        else
            printf(" %d",b[i]);
    }
    printf("\n");
    return 0;
}


#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
    int x,y,dis;
}a[160004];
bool cmp(node a,node b)
{
    return a.dis > b.dis;
}
int vis[401] = {0},b[802]= {0};
int main()
{
    int n;
    scanf("%d",&n);
    int k = 0;
    for(int i = 2 ; i <= 2*n ; i ++ )
    {
        for(int j = 1 ; j <= i - 1 ; j ++ )
        {
            a[k].x = i;
            a[k].y = j;
            scanf("%d",&a[k++].dis);
        }
    }
    sort(a,a+k,cmp);
    int flag = 0;
    for(int i = 0 ; i < k ; i ++ )
    {
        if(!vis[a[i].x] && !vis[a[i].y])
        {
            vis[a[i].x] = 1;
            vis[a[i].y] = 1;
            b[a[i].x] = a[i].y;
            b[a[i].y] = a[i].x;
        }
    }
    for(int i = 1 ; i <= 2*n ; i ++ )
    {
        if(vis[i] == 1)
        if(!flag)
        {
            flag = 1;
            printf("%d",b[i]);
        }
        else
            printf(" %d",b[i]);
    }
    printf("\n");
    return 0;
}


#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
using namespace std;
struct node
{
    int x,y,dis;
}a[640004];
bool cmp(node a,node b)
{
    return a.dis > b.dis;
}
int vis[802],b[802]= {0};
int main()
{
    int n;
    scanf("%d",&n);
    int k = 0;
    for(int i = 2 ; i <= 2*n ; i ++ )
    {
        for(int j = 1 ; j <= i - 1 ; j ++ )
        {
            a[k].x = i;
            a[k].y = j;
            scanf("%d",&a[k++].dis);
        }
    }
    sort(a,a+k,cmp);
    int flag = 0;
    memset(vis,0 , sizeof(vis));
    for(int i = 0 ; i < k ; i ++ )
    {
        if(!vis[a[i].x] && !vis[a[i].y])
        {
            vis[a[i].x] = 1;
            vis[a[i].y] = 1;
            b[a[i].x] = a[i].y;
            b[a[i].y] = a[i].x;
        }
    }
    for(int i = 1 ; i <= 2*n ; i ++ )
    {
        if(!flag)
        {
            flag = 1;
            printf("%d",b[i]);
        }
        else
            printf(" %d",b[i]);
    }
    printf("\n");
    return 0;
}


#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
    int x,y,dis;
}a[802];
bool cmp(node a,node b)
{
    return a.dis > b.dis;
}
int vis[401] = {0},b[802]= {0};
int main()
{
    int n;
    scanf("%d",&n);
    int k = 0;
    for(int i = 2 ; i <= 2*n ; i ++ )
    {
        for(int j = 1 ; j <= i - 1 ; j ++ )
        {
            a[k].x = i;
            a[k].y = j;
            scanf("%d",&a[k++].dis);
        }
    }
    sort(a,a+k,cmp);
    int flag = 0;
    for(int i = 0 ; i < k ; i ++ )
    {
        if(!vis[a[i].x] && !vis[a[i].y])
        {
            vis[a[i].x] = 1;
            vis[a[i].y] = 1;
            b[a[i].x] = a[i].y;
            b[a[i].y] = a[i].x;
        }
    }
    for(int i = 1 ; i <= 2*n ; i ++ )
    {
        if(vis[i] == 1)
        if(!flag)
        {
            flag = 1;
            printf("%d",b[i]);
        }
        else
            printf(" %d",b[i]);
    }
    printf("\n");
    return 0;
}


#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
    int x,y,dis;
}a[640004];
bool cmp(node a,node b)
{
    return a.dis > b.dis;
}
int vis[401] = {0},b[802]= {0};
int main()
{
    int n;
    scanf("%d",&n);
    int k = 0;
    for(int i = 2 ; i <= 2*n ; i ++ )
    {
        for(int j = 1 ; j <= i - 1 ; j ++ )
        {
            a[k].x = i;
            a[k].y = j;
            scanf("%d",&a[k++].dis);
        }
    }
    sort(a,a+k,cmp);
    int flag = 0;
    for(int i = 0 ; i < k ; i ++ )
    {
        if(!vis[a[i].x] && !vis[a[i].y])
        {
            vis[a[i].x] = 1;
            vis[a[i].y] = 1;
            b[a[i].x] = a[i].y;
            b[a[i].y] = a[i].x;
        }
    }
    for(int i = 1 ; i <= 2*n ; i ++ )
    {
        if(!flag)
        {
            flag = 1;
            printf("%d",b[i]);
        }
        else
            printf(" %d",b[i]);
    }
    printf("\n");
    return 0;
}


#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
    int x,y,dis;
}a[802];
bool cmp(node a,node b)
{
    return a.dis > b.dis;
}
int vis[401] = {0};
int main()
{
    int n;
    scanf("%d",&n);
    int k = 0;
    for(int i = 2 ; i <= 2*n ; i ++ )
    {
        for(int j = 1 ; j <= i - 1 ; j ++ )
        {
            a[k].x = i;
            a[k].y = j;
            scanf("%d",&a[k++].dis);
        }
    }
    sort(a,a+k,cmp);
    int flag = 0;
    for(int i = 0 ; i < k ; i ++ )
    {
        if(!vis[a[i].x] && !vis[a[i].y])
        {
            vis[a[i].x] = 1;
            vis[a[i].y] = 1;
            if(!flag)
            {
                printf("%d %d",a[i].x,a[i].y);
                flag = 1;
            }
            else printf(" %d %d",a[i].x,a[i].y);
        }
    }
    printf("\n");
    return 0;
}


#include<cstdio>
#define MAX (int)1e7
#define MAXN 805
int person[MAX][2],an[MAXN];
bool used[MAXN];

int main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    #endif
    int n;
    scanf("%d",&n);
    n*=2;
    for(int i=1;i<=n;i++)
        for(int j=1;j<i;j++){
            int x;
            scanf("%d",&x);
            person[x][0]=i;
            person[x][1]=j;
        }
    used[0]=1;
    for(int i=MAX;i>0;i--){
        if(!used[person[i][0]]&&!used[person[i][1]]){
            used[person[i][0]]=1;
            used[person[i][1]]=1;
            an[person[i][0]]=person[i][1];
            an[person[i][1]]=person[i][0];
        }
    }
    for(int i=1;i<=n;i++){
        if(i>1) printf(" ");
        printf("%d",an[i]);
    }
    return 0;
}


#include<cstdio>
#include<algorithm>
using namespace std;
#define MAX (int)1e7
#define MAXN 805
int person[MAX][2],an[MAXN];
bool used[MAXN];

int main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    #endif
    int n, best=0;
    scanf("%d",&n);
    n*=2;
    for(int i=1;i<=n;i++)
        for(int j=1;j<i;j++){
            int x;
            scanf("%d",&x);
            person[x][0]=i;
            person[x][1]=j;
            best=max(best, x);
        }
    used[0]=1;
    for(int i=best;i>0;i--){
        if(!used[person[i][0]]&&!used[person[i][1]]){
            used[person[i][0]]=1;
            used[person[i][1]]=1;
            an[person[i][0]]=person[i][1];
            an[person[i][1]]=person[i][0];
        }
    }
    for(int i=1;i<=n;i++){
        if(i>1) printf(" ");
        printf("%d",an[i]);
    }
    return 0;
}


#include<cstdio>
#define MAX (int)1e7
#define MAXN 805
int person[MAX][2],an[MAXN];
bool used[MAXN];

int main(){
    #define ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    #endif
    int n;
    scanf("%d",&n);
    n*=2;
    for(int i=1;i<=n;i++)
        for(int j=1;j<i;j++){
            int x;
            scanf("%d",&x);
            person[x][0]=i;
            person[x][1]=j;
        }
    used[0]=1;
    for(int i=MAX;i>0;i--){
        if(!used[person[i][0]]&&!used[person[i][1]]){
            used[person[i][0]]=1;
            used[person[i][1]]=1;
            an[person[i][0]]=person[i][1];
            an[person[i][1]]=person[i][0];
        }
    }
    for(int i=1;i<=n;i++){
        if(i>1) printf(" ");
        printf("%d",an[i]);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define MAXN 805
#define Pair pair<int, int>
#define valoare first
#define index second
Pair ans[MAXN], aux[MAXN];

int main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    #endif
    int n, i, j, k, nAux;
    cin>>n;
    for(i=2;i<=2*n;++i)
        for(j=1; j<=i-1; ++j){
            cin>>k;
            if(ans[i].valoare<k && ans[j].valoare<k){
                if(ans[j].valoare){
                    aux[j].valoare=ans[j].valoare, aux[j].index=ans[j].index;
                    ans[aux[j].index].valoare=aux[aux[j].index].valoare;
                    ans[aux[j].index].index=aux[aux[j].index].index;
                }
                if(ans[i].valoare){
                    aux[i].valoare=ans[i].valoare, aux[i].index=ans[i].index;
                    ans[aux[i].index].valoare=aux[aux[i].index].valoare;
                    ans[aux[i].index].index=aux[aux[i].index].index;
                }
                ans[i].valoare=k, ans[j].valoare=k;
                ans[i].index=j, ans[j].index=i;
            }
        }
    for(i=1; i<=2*n; ++i){
        if(!ans[i].index)
            for(j=1; j<=2*n; ++j)
                if(j!=i && ans[j].index==i)
                    ans[i].index=j;
        cout<<ans[i].index<<" ";
    }
    return 0;
}


#include<cstdio>
#define MAX (int)1e7
#define MAXN 805
int person[MAX][2],an[MAXN];
bool used[MAXN];

int main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    #endif
    int n;
    int64_t best=0;
    scanf("%d",&n);
    n*=2;
    for(int i=1;i<=n;i++)
        for(int j=1;j<i;j++){
            int x;
            scanf("%d",&x);
            person[x][0]=i;
            person[x][1]=j;
            best=max(best, x);
        }
    used[0]=1;
    for(int i=best;i>0;i--){
        if(!used[person[i][0]]&&!used[person[i][1]]){
            used[person[i][0]]=1;
            used[person[i][1]]=1;
            an[person[i][0]]=person[i][1];
            an[person[i][1]]=person[i][0];
        }
    }
    for(int i=1;i<=n;i++){
        if(i>1) printf(" ");
        printf("%d",an[i]);
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define MAXN 805
#define Pair pair<int, int>
#define valoare first
#define index second
Pair ans[MAXN];

int main(){
    #ifndef ONLINE_JUDGE
    freopen("in.txt","r",stdin);
    #endif
    int n, i, j, k, nAux;
    cin>>n;
    for(i=2;i<=2*n;++i)
        for(j=1; j<=i-1; ++j){
            cin>>k;
            if(ans[i].valoare<k && ans[j].valoare<k){
                ans[ans[i].index].valoare=0;
                ans[ans[i].index].index=0;
                ans[i].index=j;
                ans[i].valoare=k;
                ans[ans[j].index].valoare=0;
                ans[ans[j].index].index=0;
                ans[j].index=i;
                ans[j].valoare=k;
            }
        }
    for(i=1; i<=2*n; ++i){
        if(ans[i].index==0)
            for(j=1; j<=2*n; ++j)
                if(i!=j && ans[j].index==0)
                    ans[i].index=j, ans[j].index=i;
        cout<<ans[i].index<<" ";
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N (10000)
ll n,p,ans[N];
pair <ll,pair <ll,ll> > a[N];
bool mark[N];
int main()
{
	ios_base::sync_with_stdio(0);
    cin>>n;
    for(int i=1;i<=2*n;i++)
		for(int j=1;j<i;j++)
		{
			cin>>a[p].first;
			a[p].second.first=i,a[p++].second.second=j;
		}
	sort(a,a+p);
	for(int i=p-1;i>=0;i--)
		if(!mark[a[i].second.second] && !mark[a[i].second.first])
			ans[a[i].second.first]=a[i].second.second,ans[a[i].second.second]=a[i].second.first,mark[a[i].second.second]=mark[a[i].second.first]=1;
	for(int i=1;i<=2*n;i++)
		cout<<ans[i]<<" ";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N (1100)
ll n,p,ans[N];
pair <ll,pair <ll,ll> > a[N];
bool mark[N];
int main()
{
    cin>>n;
    for(int i=1;i<=2*n;i++)
		for(int j=1;j<i;j++)
		{
			cin>>a[p].first;
			a[p].second.first=i,a[p++].second.second=j;
		}
	sort(a,a+p);
	for(int i=p-1;i>=0;i--)
		if(!mark[a[i].second.second] && !mark[a[i].second.first])
			ans[a[i].second.first]=a[i].second.second,ans[a[i].second.second]=a[i].second.first,mark[a[i].second.second]=mark[a[i].second.first]=1;
	for(int i=1;i<=2*n;i++)cout<<ans[i]<<" ";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef int ll;
#define N (10000)
ll n,p,ans[N];
pair <ll,pair <ll,ll> > a[N];
bool mark[N];
int main()
{
	ios_base::sync_with_stdio(0);
    cin>>n;
    for(int i=1;i<=2*n;i++)
		for(int j=1;j<i;j++)
		{
			cin>>a[p].first;
			a[p].second.first=i,a[p++].second.second=j;
		}
	sort(a,a+p);
	for(int i=p-1;i>=0;i--)
	{
		if(!mark[a[i].second.second] && !mark[a[i].second.first])
			ans[a[i].second.first]=a[i].second.second,ans[a[i].second.second]=a[i].second.first,mark[a[i].second.second]=mark[a[i].second.first]=1;
	}

	for(int i=1;i<=2*n;i++)
		cout<<ans[i]<<" ";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define N (101*1000)
int n,p,ans[N];
pair <int,pair <int,int> > a[N];
bool mark[N];
int main()
{
    cin>>n;
    for(int i=1;i<=2*n;i++)
		for(int j=1;j<i;j++)
		{
			cin>>a[p].first;
			a[p].second.first=i,a[p++].second.second=j;
		}
	sort(a,a+p);
	for(int i=p-1;i>=0;i--)
	{
		if(!mark[a[i].second.second] && !mark[a[i].second.first])
			ans[a[i].second.first]=a[i].second.second,ans[a[i].second.second]=a[i].second.first,mark[a[i].second.second]=mark[a[i].second.first]=1;
	}

	for(int i=1;i<=2*n;i++)
		cout<<ans[i]<<" ";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define N (1001*1000)
#define ll long long
ll n,p,ans[N];
pair <ll,pair <ll,ll> > a[N];
bool mark[N];
int main()
{
    cin>>n;
    for(ll i=0;i<2*n;i++)
		for(ll j=0;j<i;j++)
		{
			cin>>a[p].first;
			a[p].second.first=i,a[p].second.second=j;
			p++;
		}
	sort(a,a+p);
	for(ll i=p-1;i>=0;i--)
	{
		if(!mark[a[i].second.second] && !mark[a[i].second.first])
			ans[a[i].second.first]=a[i].second.second,ans[a[i].second.second]=a[i].second.first,mark[a[i].second.second]=mark[a[i].second.first]=1;
	}

	for(ll i=0;i<2*n;i++)
		cout<<ans[i]+1<<" ";
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define N (10000)
ll n,p,ans[N];
pair <ll,pair <ll,ll> > a[N];
bool mark[N];
int main()
{
    cin>>n;
    for(int i=1;i<=2*n;i++)
		for(int j=1;j<i;j++)
		{
			cin>>a[p].first;
			a[p].second.first=i,a[p++].second.second=j;
		}
	sort(a,a+p);
	for(int i=p-1;i>=0;i--)
		if(!mark[a[i].second.second] && !mark[a[i].second.first])
			ans[a[i].second.first]=a[i].second.second,ans[a[i].second.second]=a[i].second.first,mark[a[i].second.second]=mark[a[i].second.first]=1;
	for(int i=1;i<=2*n;i++)cout<<ans[i]<<" ";
    return 0;
}


/*#include <bits/stdc++.h>
using namespace std;
struct mystr
{
    int p,q;
    int val;
};
int cmp(const void *a, const void *b)
{
      mystr *a1=(mystr *)a;
      mystr *b1=(mystr *)b;
      if((a1->val)<(b1->val))   return -1;
      if((a1->val)>(b1->val))   return 1;
}
int main()
{
    int i,j,n,x,vis[850],z,m,in=0;
    mystr *ptr;
    cin>>n;
    z=(n<<1)-1;
    m=(z*(z+1))/2;
    ptr=new mystr[m+5];
    memset(vis,0,sizeof(vis));
    for(i=2;i<=(z+1);++i)
    {
        for(j=1;j<=i-1;++j)
        {
            cin>>x;
            ptr[in].p=i;
            ptr[in].q=j;
            ptr[in].val=x;
            in++;
        }
    }
    qsort(ptr,m,sizeof(ptr[0]),cmp);
    for(i=m-1;i>=0;--i)
    {
        if((!vis[ptr[i].p]) && (!vis[ptr[i].q]))
        {
            vis[ptr[i].p]=ptr[i].q;
            vis[ptr[i].q]=ptr[i].p;
        }
    }
    for(i=1;i<=(z+1);++i)
    {
        cout<<vis[i]<<" ";
    }
    return 0;
}
*//*
#include <vector>
#include <queue>
#include <map>
#include <set>
#include <algorithm>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cstring>
#include <limits>*/
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector <int> vi;
typedef pair<int, int> pii;
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define mm(a) memset(a,0,sizeof(a))
#define mn(a) memset(a,-1,sizeof(a))
#define lli long long int
#define fs(i,a,n) for(int i=a;i<=n;i++)
#define fl(i,n,a) for(int i=n;i>=a;i--)
#define all(a)  a.begin(),a.end()
#define i(n) scanf("%d",&n)
#define il(n) scanf("%lld",&n)
#define o(n) printf("%d",n)
#define ol(n) printf("%lld",n)
#define os printf(" ")
#define on printf("\n")
pii b;
vector<pair<int, pii> >v;
int main()
{
    int n,i,j,x,z,sz,vis[840];
    i(n);
    z=n<<1;
    mm(vis);
    fs(i,2,z)
    {
        fs(j,1,i-1)
        {
            cin>>x;
            v.pb(mp(x,mp(i,j)));
        }
    }
    sz=v.size()-1;
    sort(all(v));
    fl(i,sz,0)
    {
        if((!vis[v[i].second.first]) && (!vis[v[i].second.second]))
        {
            vis[v[i].second.first]=v[i].second.second;
            vis[v[i].second.second]=v[i].second.first;
        }
    }
    fs(i,1,z)
    {
        o(vis[i]);os;
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector <int> vi;
typedef pair<int, int> pii;
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define mm(a) memset(a,0,sizeof(a))
#define mn(a) memset(a,-1,sizeof(a))
#define lli long long int
#define fs(i,a,n) for(int i=a;i<=n;i++)
#define fl(i,n,a) for(int i=n;i>=a;i--)
#define all(a)  a.begin(),a.end()
#define i(n) scanf("%d",&n)
#define il(n) scanf("%lld",&n)
#define o(n) printf("%d",n)
#define ol(n) printf("%lld",n)
#define os printf(" ")
#define on printf("\n")
pii b;
vector<pair<int, pii> >v;
int main()
{
    int n,i,j,x,z,sz,vis[840];
    i(n);
    z=n<<1;
    mm(vis);
    fs(i,2,z)
    {
        fs(j,1,i-1)
        {
            cin>>x;
            v.pb(mp(x,mp(i,j)));
        }
    }
    sz=v.size()-1;
    fl(i,sz,0)
    {
        if((!vis[v[i].second.first]) && (!vis[v[i].second.second]))
        {
            vis[v[i].second.first]=v[i].second.second;
            vis[v[i].second.second]=v[i].second.first;
        }
    }
    fs(i,1,z)
    {
        o(vis[i]);os;
    }
    return 0;
}


#include <bits/stdc++.h>

using namespace std;
struct mystr
{
    int p,q;
    int val;
};
int cmp(const void *a, const void *b)
{
      mystr *a1=(mystr *)a;
      mystr *b1=(mystr *)b;
      if((a1->val)<(b1->val))   return -1;
      if((a1->val)>(b1->val))   return 1;
}
int main()
{
    int a[405][405],i,j,n,x,vis[402];
    mystr *ptr;
    cin>>n;
    int z=(n<<1)-1;
    int m=(z*(z+1))/2;
    ptr=new mystr[m+2];
    memset(vis,0,sizeof(vis));
    int in=0;
    for(i=2;i<=(z+1);++i)
    {
        for(j=1;j<=i-1;++j)
        {
            cin>>x;
            ptr[in].p=i;
            ptr[in].q=j;
            ptr[in].val=x;
            in++;
        }
    }
    qsort(ptr,m,sizeof(ptr[0]),cmp);
    for(i=m-1;i>=0;--i)
    {
        if((!vis[ptr[i].p]) &&(!vis[ptr[i].q]))
        {
            vis[ptr[i].p]=ptr[i].q;
            vis[ptr[i].q]=ptr[i].p;
        }
    }
    for(i=1;i<=(z+1);++i)
    {
        cout<<vis[i]<<" ";
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
struct mystr
{
    int p,q;
    int val;
};
int cmp(const void *a, const void *b)
{
      mystr *a1=(mystr *)a;
      mystr *b1=(mystr *)b;
      if((a1->val)<(b1->val))   return -1;
      if((a1->val)>(b1->val))   return 1;
}
int main()
{
    int i,j,n,x,vis[850],z,m,in=0;
    mystr *ptr;
    cin>>n;
    z=(n<<1)-1;
    m=(z*(z+1))/2;
    ptr=new mystr[m+5];
    memset(vis,0,sizeof(vis));
    for(i=2;i<=(z+1);++i)
    {
        for(j=1;j<=i-1;++j)
        {
            cin>>x;
            ptr[in].p=i;
            ptr[in].q=j;
            ptr[in].val=x;
            in++;
        }
    }
    qsort(ptr,m,sizeof(ptr[0]),cmp);
    for(i=m-1;i>=0;--i)
    {
        if((!vis[ptr[i].p]) && (!vis[ptr[i].q]))
        {
            vis[ptr[i].p]=ptr[i].q;
            vis[ptr[i].q]=ptr[i].p;
        }
    }
    for(i=1;i<=(z+1);++i)
    {
        cout<<vis[i]<<" ";
    }
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef vector <int> vi;
typedef pair<int, int> pii;
#define pb push_back
#define mp make_pair
#define ff first
#define ss second
#define mm(a) memset(a,0,sizeof(a))
#define mn(a) memset(a,-1,sizeof(a))
#define lli long long int
#define fs(i,a,n) for(int i=a;i<=n;i++)
#define fl(i,n,a) for(int i=n;i>=a;i--)
#define all(a)  a.begin(),a.end()
#define i(n) scanf("%d",&n)
#define il(n) scanf("%lld",&n)
#define o(n) printf("%d",n)
#define ol(n) printf("%lld",n)
#define os printf(" ")
#define on printf("\n")
pii b;
vector<pair<int, pii> >v;
int main()
{
    int n,i,j,x,z,sz,vis[840];
    i(n);
    z=n<<1;
    mm(vis);
    fs(i,2,z)
    {
        fs(j,1,i-1)
        {
            cin>>x;
            v.pb(mp(x,mp(i,j)));
        }
    }
    sz=v.size()-1;
    sort(all(v));
    fl(i,sz,0)
    {
        if((!vis[v[i].second.first]) && (!vis[v[i].second.second]))
        {
            vis[v[i].second.first]=v[i].second.second;
            vis[v[i].second.second]=v[i].second.first;
        }
    }
    fs(i,1,z)
    {
        o(vis[i]);os;
    }
    return 0;
}