//Made by syx
//Time: 2010年7月28日 16:55:39
//1010 Tempter of the Bone
//2013 蟠桃记
//2018 母牛的故事
//
//
//
//
//void qsort( void *buf, size_t num, size_t size, int (*compare)(const void *, const void *) );
//功能: 对buf 指向的数据(包含num 项,每项的大小为size)进行快速排序。如果函数compare 的第一个参数小于第二个参数,
//返回负值;如果等于返回零值;如果大于返回正值。函数对buf 指向的数据按升序排序
/*
//2018 母牛的故事
//递推:
//首先,假定我们要求第n年有多少只母牛,可以分两部分进行:
//一、在三年前,即n-3出生的母牛,必定都会在第n年生出牛来(之所以是三年前而不是四年前是因为一开始就算第1年而不是第0年),所以第n年的牛数必定有n-3年前的牛数的两倍以上
//二、算掉那两倍以上的牛数,剩下的牛是那些呢?就是在第n-3年到第n年之间所生的牛数了,也就是第n-1年的牛数减去第n-3年的牛数。
//得出递推式
//当n > 4 时f(n) = f(n-3)*2 + f(n-1) - f(n-3) = f(n-1) + f(n-3). 否则f(n) = n
//Accepted 2018 0MS 244K 222 B C++ syx_China
#include <iostream>
using namespace std;
int main()
{
int f[55] = {1,2,3,4,6};
int i = 0;
for(i=5; i<55; ++i)
f[i] = f[i-1] + f[i-3];
int n;
while(cin>>n&&n!=0)
{
cout<<f[n-1]<<endl;
}
return 0;
}
*/
/*
//2018 母牛的故事
//Accepted 2018 0MS 244K 263 B C++ syx_China
#include <iostream>
using namespace std;
int getCow(int n)
{
if(n<=3)
return n;
else
{
return getCow(n-1) + getCow(n-3);
}
}
int main()
{
int n;
while(cin>>n&&n!=0)
{
int result = getCow(n);
cout<<result<<endl;
}
return 0;
}
*/
/*
//2013 蟠桃记
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int reuslt = (3*pow(2,n-1) - 2);
cout<<reuslt<<endl;
}
return 0;
}
*/
/*
//2013 蟠桃记
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin>>n)
{
int result = 1;
while(--n)
{
result = 2*(result + 1);
}
cout<<result<<endl;
}
return 0;
}
*/
/*
//1010 Tempter of the Bone
#include <iostream>
using namespace std;
int flag = 0;//记录是否已经找到一条出路
int iDoor,jDoor;//记录门的位置
void mainFuntion(char (*b)[7],int iDog,int jDog,int T,int N,int M)
{
if(flag) return;
if(iDog>=1 && iDog<=N && jDog>=1 && jDog<=M)//判断位置是否在给定的范围内
{
if(b[iDog][jDog] == 'X') return ;
if(T == 0)//如果这是第T秒
{
if(b[iDog][jDog] == 'D')//且当前位置是D
{
flag++;
return ;
}
}
else if(abs(iDog-jDog)%2==abs(iDoor-jDoor)%2&&abs(T)%2==0||abs(iDog-jDog)%2!=abs(iDoor-jDoor)&&abs(T)%2==1)
{
b[iDog][jDog] = 'X';//当前位置已走过,向四周搜索!
mainFuntion(b,iDog+1,jDog,T-1,N,M);
mainFuntion(b,iDog-1,jDog,T-1,N,M);
mainFuntion(b,iDog,jDog+1,T-1,N,M);
mainFuntion(b,iDog,jDog-1,T-1,N,M);
b[iDog][jDog] = '.';
}
}
return;
}
int main()
{
char b[7][7] = {0};
int M,N,T;
while(cin>>N>>M>>T && (M && N && T))
{
int num = 0;//记录可走木板数
int i , j;
int iDog,jDog;
//int iDoor,jDoor;
iDoor = 0,jDoor = 0;
for(i=1; i<=N; ++i)
for(j=1; j<=M; ++j)
{
cin>>b[i][j];
if(b[i][j] == 'S')
{
iDog = i;
jDog = j;
}
else if(b[i][j] == 'D')
{
iDoor = i;
jDoor = j;
}
else
num++;
}
//if(num>=T)
//if(abs(jDog-iDog)%2==abs(jDoor-iDoor)%2&&T%2==0||abs(jDog-iDog)%2!=abs(jDoor-iDoor)&&T%2==1||M*N-num>=T)
if( ((abs(jDoor - jDog) + abs(iDoor - iDog)) % 2 == T % 2) && (num>=T))
mainFuntion(b,iDog,jDog,T,N,M);
if(flag) cout<<"YES"<<endl;
else cout<<"NO"<<endl;
//cout<<flag<<endl;
flag = 0;
}
return 0;
}
*/