Go: package main

import (
	"bufio"
	"os"
	"strings"
	"strconv"
	"sort"
	"fmt"
)

var scanner = bufio.NewScanner(os.Stdin)

func main() {
	for scanner.Scan() {
		input := strings.Split(scanner.Text(), ",")
		cards := make([]int, 5)
		for i :=range input {
			cards[i], _ = strconv.Atoi(input[i])
		}
		sort.Sort(sort.IntSlice(cards))
		if cards[0] == cards[1] && cards[2] == cards[3] && cards[2] == cards[1] {
			fmt.Println("four card")
		} else if cards[1] == cards[2] && cards[3] == cards[4] && cards[3] == cards[2]{
			fmt.Println("four card")
		} else if cards[0] == cards[1] && cards[1] == cards[2] && cards[3] == cards[4] {
			fmt.Println("full house")
		} else if cards[0] == cards[1] && cards[2] == cards[3] && cards[3] == cards[4] {
			fmt.Println("full house")
		} else if cards[0] == 1 && cards[1] == 10 && cards[2] == 11 && cards[3] == 12 && cards[4] == 13 {
			fmt.Println("straight")
		} else if cards[0]+1 == cards[1] && cards[1]+1 == cards[2] && cards[2]+1 == cards[3] && cards[3]+1 == cards[4] {
			fmt.Println("straight")
		} else if (cards[0] == cards[1] && cards[1] == cards[2]) || (cards[1] == cards[2] && cards[2] == cards[3]) || (cards[2] == cards[3] && cards[3] == cards[4]) {
			fmt.Println("three card")
		} else if ((cards[0] == cards[1]) && ((cards[2] == cards[3]) || (cards[3] == cards[4]))) || ((cards[1] == cards[2]) && (cards[3] == cards[4])) {
			fmt.Println("two pair")
		} else if cards[0] == cards[1] || cards[1] == cards[2] || cards[2] == cards[3] || cards[3] == cards[4] {
			fmt.Println("one pair")
		} else {
			fmt.Println("null")
		}
	}
}

C++: #include <bits/stdc++.h>

#define SIZE 300005
#define MOD 1000000007LL
#define INF INT_MAX / 3
#define LLINF 1LL << 60
#define REP(i,n) for(int i=0;i<n;i++)
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define DOWN(i,b,a) for(int i=b;i>=a;i--)
#define SET(a,c) memset(a,c,sizeof a)
#define FORALL(i,c) for(__typeof((c).begin())i=(c).begin();i!=(c).end();++i)
#define FOREACH(i,c) for(auto (i) : (c))
#define BIT(i,j) ((i)>>(j))&1
#define ALL(o) (o).begin(), (o).end()
#define ERASE(o) (o).erase(unique((o).begin(),(o).end()), (o).end())
#define SQ(x) ((x)*(x))
using namespace std;
typedef long long ll;
typedef valarray<int> Array;
typedef pair<ll,ll> Pll;
typedef pair<int, int> Pii;
typedef pair<double, double> Pdd;
template<typename T> inline void priv(vector<T>a){REP(i,a.size()){cout<<a[i];if(i==a.size()-1)cout<<endl;else cout<<" ";}}
int gcd(int a,int b){int c=max(a,b);int d=min(a,b);return c==0||d==0?c:gcd(c%d,d);}
int lcm(int a,int b){return a==0||b==0?0:a*b/gcd(a,b);}

void solve(int a1, int a2, int a3, int a4, int a5)
{
  int a[13]; fill_n(a,13,0);
  a[--a1]++;a[--a2]++;a[--a3]++;a[--a4]++;a[--a5]++;
  int m = 0; bool f = false;
  vector<int> s;
  string ans;
  REP(i,13)
  {
    m = max(a[i],m);
    if(a[i]>0)
    {
      bool flag = true;
      s.push_back(a[i]);
      REP(j,5) if(a[(i+j)%13] == 0)
      {
        flag = false;
        break;
      }
      f = f || flag;
    }
  }
  if(m >= 4) ans = "four card";
  else if(s.size()==2) ans = "full house";
  else if(f) ans = "straight";
  else
  {
    int b[3]; fill_n(b,3,0);
    REP(i,s.size()) b[s[i]-1]++;
    if(b[2] > 0) ans = "three card";
    else if(b[1] > 1) ans = "two card";
    else if(b[1] > 0) ans = "one pair";
    else ans = "null";
  }
  printf("%s\n",ans.c_str());
}

int main()
{
  cin.tie(0);
  ios::sync_with_stdio(false);
  int a,b,c,d,e;
  while(~scanf("%d,%d,%d,%d,%d",&a,&b,&c,&d,&e))
    solve(a,b,c,d,e);
  return 0;
}

C++: #include<algorithm>
#include<iostream>
#include<vector>
#include<stdio.h>
#include<string.h>

int main()
{
	int card[5];
	
	while( scanf( "%d,%d,%d,%d,%d", &card[0], &card[1], &card[2], &card[3], &card[4] ) != EOF ){
	 	
		int a[20];
		memset( a, 0, sizeof( a ) );
		int c = 0;
		
		for( int i = 0; i < 5; i++ ) a[card[i]]++;
		
		for( int i = 0; i < 5; i++ ){
			 c = std::max( c, std::count( card, card + 5, card[i] ) );
		}
		
		bool f = false;
		int m;
		
		switch( c ){
			case 4:
		 		puts( "four card" );
				break;
			case 3:
				for( int i = 0; i < 5; i++ ){
			 		if( std::count( card, card + 5, card[i] ) == 2 ){
						f = true; 
						break;
					}
				}
				
				if( f ){
				 	puts( "full house" );
				}
				else{
				 	puts( "three card" );
				}
				break;
			case 2:
				for( int i = 0; i < 5; i++ ){
					if( std::count( card, card + 5, card[i] ) == 2 && !f ){
					 	m = card[i];
						f = true;
					}
					if( card[i] != m && std::count( card, card + 5, card[i] ) == 2 && f ){
						puts( "two pair" );
						goto end;
					}
				}
				puts( "one pair" );
				break;
			case 1:	
				for( int i = 1; i <= 10; i++ ){
					if( a[i] == 1 && a[i+1] == 1 && a[i+2] == 1 && a[i+3] == 1 && a[(i+4)%13] == 1 ) f = true;
				}
				
				if( f ){
				 	puts( "straight" );
				}
				else{
					puts( "null" );
				}
				
				break;
		}
		
	end:
	}

 	return 0;
}

C++: #define	_USE_MATH_DEFINES
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <functional>
#include <vector>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <cfloat>
#include <map>
#include <queue>
#include <stack>
#include <list>
#include <string>
#include <set>
#include <complex>
#define  rep(i,n) for(int i=0;i<(n);i++)
#define  REP(i,n) for(int i=1;i<(n);i++)
#define  rrep(i,n) for(int i=(n)-1;i>=0;i--)
#define  VI	vector<int>
#define	 VS vector<string>
#define  all(a) (a).begin(),(a).end()
#define  debug(x) cout<<#x<<": "<<x<<endl

using namespace std;
int main(){
	
	int a[5];
	
	while(~scanf("%d,%d,%d,%d,%d,",&a[0],&a[1],&a[2],&a[3],&a[4])){
		vector<int> p(15,0);
		bool f=false;
		rep(i,5){
			if(a[i]==1){
				p[14]++;
			}
			p[a[i]]++;
		}
		if(find(p.begin(),p.end()-1,4)!=p.end()-1){
			cout<<"four card"<<endl;
			f=true;
		}
		else if(find(p.begin(),p.end()-1,3)!=p.end()-1&&find(p.begin(),p.end()-1,2)!=p.end()-1){
			cout<<"full house"<<endl;
			f=true;
		}
		else{
			rep(i,5){
				if(a[i]>=1&&a[i]<=10){
					if(p[a[i]]==1&&p[a[i]+1]==1&&p[a[i]+2]==1&&p[a[i]+3]==1&&p[a[i]+4]==1){
						cout<<"straight"<<endl;
						f=true;
						break;
					}
				}
				
			}
		}
			if(!f){
				if(find(p.begin(),p.end()-1,3)!=p.end()-1)
					cout<<"three card"<<endl;
				else{
					int point =0;
				REP(i,14){
					if(p[i]==2)
						point++;
				}
					if(point>=2)
						cout<<"two pair"<<endl;
					else if(point==1)
						cout<<"one pair"<<endl;
					else
						cout<<"null"<<endl;
				}
			}
		
	}
	
}