siva.sai.2020
BAN USER- 0of 0 votes
AnswersFace to Face
- siva.sai.2020 in United States
Q4) two arrays given to you. First array contains number s. Second array contains key values.
We need to find smallest window in first array which covers all second array elements.
e.g:
Input= {6,7,1,3,2,4,5,2,3,1,2,5}
Keys = {2,5,1}
answer: from 9th index to 11th index is the smallest window.| Report Duplicate | Flag | PURGE
Amazon SDE-2 Algorithm - 1of 1 vote
AnswersValidate whether given string is valid JSON fromat string or not.
- siva.sai.2020 in India
I/P: {a:b}
O/P: Yes Valid JSON
I/P: {a:b, c:d}
O/P: Yes Valid JSON
I/P: {a:b,c:{e:f}}
O/P Yes Valid JSON
I/P: {a}
O/p: not a valid json
I/P: {{a}}
O/P: not valid JSON| Report Duplicate | Flag | PURGE
Google - 0of 0 votes
AnswersArray with distinct elements is given to you. write an API to return max selected ZIG ZAG array length.
- siva.sai.2020 in -
Zig Zag array can start with either '<' or '>'. Below two are valid Zig Zag arrays.
a<b>c<d>e<f
x>y<z<l>k
Note: you may need to skip some elements while selecting Max Zig Zag array. But you should not change array order(swapping and sorting not allowed).
-----------
Zig Zag array examples
Test Case1:
I/P : { 1,42,59,43,68,44 };
O/P: return 5 (Selected ZIG ZAG array 1 < 42 > 43< 68 > 44)
Test case2:
I/P: { 100,42,54,2,5 };
O/P: return 5 (slected ZIg Zag array 100> 42 <54>2 < 5)
Test case 3:
I/P: { 1,42,54,20,1 };
O/P: return 3 {slected Zig zag array 1<42>20}| Report Duplicate | Flag | PURGE
Software Developer - 0of 0 votes
AnswersBelow is almost correct program, there is only one line code is wrong, you have to fix it.
String str contains only a and b characters. below program checks whether str contains equal number of a and b characters.
- siva.sai.2020 in Indiavoid checkBalance(string str) { char temp[MAXLEN]; int i, j; for (i = j = 0; temp[i] = str[j]; j++) if (str[j] == temp[i]) i++; else i--; if (i == 0) printf("Balanced\n"); else printf("Not Balanced\n"); }
| Report Duplicate | Flag | PURGE
SDE1 Algorithm - 0of 0 votes
Answers2. VeryLongInt
- siva.sai.2020 in India
Design a class which can add and subtract integers up to 1000 digits. You can make the following assumptions
No need to handle overflow or underflow (extra credit if you do)
Copy constructor is available
“+” and “-” are binary operators| Report Duplicate | Flag | PURGE
Google SDE-2 Algorithm - 2of 2 votes
Answers1. Balanced Parentheses
- siva.sai.2020 in India
Given a string s of parentheses (ex: “(()”), return the minimum number of parentheses that need to be inserted to make it into a well formed string
A well formed (balanced) string of parentheses is defined by the following rules: ● The empty string is well formed. ● If s is a well formed string, (s) is a well formed string. ● If s1 and s2 are well formed strings, their concatenation s1s2 is a well formed string.
Implement
int MinNumInsersertionsForBalancing(const string& s)| Report Duplicate | Flag | PURGE
Google SDE-2 Algorithm - -1of 1 vote
Answers#include <stdio.h>
- siva.sai.2020 in India for NA
#include <unistd.h>
#include <stdlib.h>
int main(void) {
int i =0;
while(1)
{
i++;
printf("\n %d ", i);
pid_t pid;
pid = fork();
if(pid < 0)
{
wait(3600);
}
else if(!pid)
{
sleep(1);
exit(0);
}
else
{
sleep(10);
}
}
// your code goes here
return 0;
}
Is there any problem with this code ?. I ran this code, and saw same i value printing, but do not understand why it is printing twice| Report Duplicate | Flag | PURGE
optum SDE-2 - 0of 0 votes
Answersclass A {
- siva.sai.2020 in United States for abc
public:
void virtual fun1() { cout << " A::fun1" << endl; }
void virtual fun2() { cout << "A::fun2" << endl; }
};
class B : public A {
public:
void fun1() { cout << " B::fun1" << endl; } // fun1 --> B
};
class C {
public:
int z;
virtual void fun3() { cout << "C::fun3" << endl; }
};
class D: public B, public C {
public:
void fun4() { cout << "D::fun4" << endl; }
};
void other(void* obj) {
C *c = (C*)obj;
c->fun3();
}
int main() {
D* d = new D();
other(d);
return 0;
}
what prints c->fun3 in other() function ?, reason behind it ?.
It is printing B::fun1. I do not know reason , can some one explain it| Report Duplicate | Flag | PURGE
SDE-2 - 0of 0 votes
Answers<round 2>
- siva.sai.2020
16. Find out largest common SEQUENCE
e.g:
1)
str1: ABCDEF
str2: ABC
LArgest Common sequence: ABC
2) str1: ABCDEF
str2: ACEG
LArgest Common sequence: ACE
3)
str1: ABCDEF
str2: ZACYEFX
Largest common sequence : ACEF
NOTE: SEQUENCE need not be consecutive .| Report Duplicate | Flag | PURGE
MAGMA Software Engineer / Developer Algorithm - 0of 0 votes
Answers<round 2>
- siva.sai.2020
15. We have a special tree, in which every node contains random number of child nodes.
Note : each node can contains no. of child nodes between ZERO to INFINITY
sub questions:
1) node structure definition ?
2) which traversal you use ?. Traversal code ?| Report Duplicate | Flag | PURGE
MAGMA Software Engineer / Developer Algorithm - 0of 0 votes
Answers<round 1 >
6) what is fork()
sub questions
1) How many times "SIVA" will be printedi = 0 ; while (i < n ) { fork(); printf("\n SIVA"); i++; }
2)How many times "SIVA" will be printed
- siva.sai.2020i = 0 ; while (i < n ) { printf("\n SIVA"); fork(); i++; }
| Report Duplicate | Flag | PURGE
MAGMA Software Engineer / Developer Algorithm - 0of 0 votes
Answers5) Can we crash a process before entering Main() function ?
I said possible and I give following two examples
example 1:int *i = 0; int j = *i; // I think here memory access violation since pointer 'i' pointing 0th address. int main() { return 0; }
Example 2:
int i = 1 / 0; // here Float point exception or divided by zero exception. int main() { return 0; }
Today I executed , above two examples and I am getting compile time error "Line 2: error: initializer element is not constant
- siva.sai.2020
" .
Can some one please tell me why I am getting compile time error ?| Report Duplicate | Flag | PURGE
Gluster Software Engineer / Developer C - 0of 0 votes
Answers4) How to initialize Constant variables in class( or object).
example 1: throws error "uninitialized member 'myclass::i' with 'const' type 'const int'
"#include <iostream> using namespace std; class myclass{ public: const int i; myclass() { i = 10; // here throws error } }; int main() { myclass m; cout<<m.i<<endl; return 0; }
example 2: below piece of code works fine .
#include <iostream> using namespace std; class myclass{ public: const int i; myclass() : i(10) { } }; int main() { myclass m; cout<<m.i<<endl; return 0; }
Can some one please explain me , why second example works fine ? . why not first example ?
- siva.sai.2020| Report Duplicate | Flag | PURGE
Gluster Software Engineer / Developer C++ - 0of 0 votes
Answers3) Littele Endian vs Big Endian ?
- siva.sai.2020
Sub questions:
1) which one decides endianess , Processor(CPU) or Operating System ?
2) There any standard ways to convert little endian data to big endian and vice versa .
My answer:
Linux is little endian and Solaris is big endian.
After that I said Processor(CPU) decides endianness of the machine. Intel processor supports little endian and SPARCV( Solaris) processor supports big endian.
He asked what about Solaris operating system with Intel processor ?. I said it is little endian.
Am I correct ?| Report Duplicate | Flag | PURGE
Gluster Software Engineer / Developer Computer Architecture & Low Level - 0of 0 votes
Answers2. write down Linux "grep" command code.
- siva.sai.2020
Input: file and a pattern
Eg.
$ Mygrep "siva*" names.txt
Output:
print entire line if it contains "Siva" word or prefix.
e.g:
"good bad siva is bad boy."
"sivabrtt gjfg"
After that asked me to write code to support regular expressions like "Siva*", "siva+venkat", "^siva".| Report Duplicate | Flag | PURGE
Gluster Software Engineer / Developer Algorithm - 0of 0 votes
Answersint main() { int i=10; { int i=100; printf("%d", i); } }
1.what is the output ?
- siva.sai.2020
2. what signifies "{" "}" in above code .
"{" "}" will it create new "Activation Record" ( or Frame) in Stack ?| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer C - 0of 0 votes
Answers<round 3>
11. difference between Inline and macro functions.
sub question :
1) what happens if you apply inline on recursive function.
2) is there any Recursive Macro function ?
e.g#define SUM(x, y) do{ SUM(x,y); }while(0);
is there any error ?
- siva.sai.2020| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer C - 0of 0 votes
Answers<round 3>
- siva.sai.2020
10. differences between
char *str = "SIVA" and char str1[]="SIVA"
sub questions:
1) where string literal i.e "SIVA" will be stored ( heap , stack, data or code segments) in above both cases.
2) char *str = "SIVA";
str[0] = 'f' ;
any error ? compile time error or run time error ?
3) char *p = (char *) str;
p[0] = 'f' ;
any error ? compile time error or run time error ?| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer C - 0of 0 votes
Answers<round 3>
- siva.sai.2020
9. Array A[n] it contains numbers from 1 to n but 1 number repeated. Find out missing number.
----------------------
I have not answered this question and manager not happy with my performance. THIS THE END OF THE BATTLE.| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer Data Structures - 0of 0 votes
Answers<round3 >
- siva.sai.2020
8.He asked me many Hashing questions.
Sub questions
1. What is hashing ?
2. you can write your own hash methods or you can use existing Hash methods in STL C++.
which one you prefer ? why ?
3. Write a Generic hash function & hash table , which should support all data types INT, FLOAT, STRINGS, and OBJECTS .| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer Data Structures - 0of 0 votes
Answers<round 2>
- siva.sai.2020
6. Quadrant contains N points and all are + ve points ( I mean both (X,Y) are +ve values).
sub questions:
1. How you will store( or Data structure) N points to make look up( or search) easy.
2. Find out closest point (Pj) for a entered point (Pi).
Note: He asked me time efficient solution.
User can add extra M points later point of time. So your solution should be Scalable.| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer Data Structures - 0of 0 votes
Answers<Round 1>
- siva.sai.2020
4. Grid[n][n] contains letters from 'A' to 'Z' randomly. You have to print all possible words from grid.
You are allowed to move Left, Right, Up and Down ( no diagonal move).
Sub Questions:
1. Write down Dictionary_Lookup() function prototype. ( I no need to implement Dictionary_Lookup() but I have to write down possible return value and its arguments ).
This help us to find out traversed characters forming word or not.
2. Write down complete code to print all possible words in Grid.| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer Algorithm - 0of 0 votes
Answers<written test >
- siva.sai.2020
3.check whether given single linked list is palindrome or not.
e.g: 1->2->1 palindrome
1->2->3 not a palindrome
Note: Time efficient and without using any other data structures.| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer Algorithm - 0of 0 votes
Answers<written test >
- siva.sai.2020
2. Two sorted arrays A[X] and B[Y+X]. in B array contains Y sorted elements and B can accommodate A[] X elements.
W.A.P to Merge two arrays and store resultant in B[] array.
Note: Time efficient and space efficient solution| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer Algorithm - 0of 0 votes
AnswersI appeared for the Amazon( Bangalore) Interview on 05-Feb-2011. I cleared written test. After that I gave 3 rounds of interview.
- siva.sai.2020
Note: They are going conduct interviews on 13-Feb-2011 also. There is a chance to repeat following questions.
< written Test >
1. Preorder string"NNLLNLL" ( or similar string ) has given to you. You have to construct binary tree.
Here 'N' means non -leaf node.
Here 'L' means leaf node.
Note: every node contains 0 or 2 childrens.| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer Algorithm - 0of 0 votes
Answersfind a bug in following code : class A { public: static int i; void print() { cout<< i << endl ; } }; int main() { A a; a.print(); }
I run above code, and I am getting "ndefined reference to `A::i'" . Why I am getting this error ?
- siva.sai.2020| Report Duplicate | Flag | PURGE
Microsoft Software Engineer in Test - 0of 0 votes
AnswersHow can we generate all possibilities on braces ?
- siva.sai.2020
N value has given to us and we have to generate all possibilities.
**Examples:**
1) if N == 1, then only one possibility () .
2) if N==2, then possibilities are (()), ()()
3) if N==3, then possibilities are ((())), (())(),()()(), ()(()) ...
Note: left and right braces should match. I mean )( is INVALID for the N==1
How can we solve this problem by using recurrence approach ?| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer - 2of 2 votes
AnswersQuestion on Tree Data Structure: How can we fill all inorder successor pointer of all tree nodes ?
Tree node contains 3 pointers *left, *right and *Successor .Struct node{ int data; struct node *left; struct node *right; struct node *successor; };
A / \ B C / \ / \ D E F G
INORDER Traversal: **DBEAFCG**
**Note:** A inorder successors are F,C and G.
**Function prototype:** void FillSuccessorNodes( struct node *root);
Tree's root node given to us and we need to fill successor pointer for all nodes.case 1) some of the Successor pointers may be **NULL** . This case you have to fill that pointer with immediate Inorder Successor.
Example: if A->Successor == NULL, then fill A->Successor = F
case 2) some of the Successor pointers may already points to correct successors. This case You no need to modify successor pointers.
Example: 1) A->successor = F is valid
2) A->successor = C is valid
3) A-successor = G is valid . All these three cases you no need to modify successor pointer since these already pointing to correct successor nodes.case 3) Some of the successor pointers are **not NULL** but these pointers pointing to INVALID successors i.e it could be inorder successor or some garbage value. This case you have to fill these nodes with immediate successor nodes.
Example:
1) A->successor = B is invalid since B is not successor node , so we have to correct it to A->successor = F.
2) A->successor = 0x23237463478 is invalid since it is pointing to garbage value. So we we have to correct it to A->successor = F.**1) Interviewer asked me time efficient solution in O(n) time complexity. Extra space allowed. 2) she gave some hint i.e we can use HASHing.**
- siva.sai.2020**If you know the solution for this problem, please let me know .**
| Report Duplicate | Flag | PURGE
Amazon Software Engineer / Developer
I found code in stackoverflow site
static unsigned char our_memory[1024 * 1024]; //reserve 1 MB for malloc
static size_t next_index = 0;
void *malloc(size_t sz)
{
void *mem;
if(sizeof our_memory - next_index < sz)
return NULL;
mem = &our_memory[next_index];
next_index += sz;
return mem;
}
void free(void *mem)
{
//we cheat, and don't free anything.
}
I also thought same Solution in O(n) .
@Ashwin, if all elemtns are +ve , that case also time complexity is O(n).
int zeroSumSubArray(int A[], int n, int *start, int *end)
{
int cSum[n]; // cumulative sum array
cSum[0] = A[0];
for(int i=1; i<n; i++ )
{
cSum[i] = cSum[i-1] + A[i];
if( cSum[i] == 0)
{
*start = 0;
*end = i;
return 1; //found slice sub array
}
else
{
int index = hashFind(cSum[i]);
if( index == -1)
{
hashAdd(cSum[i]); // element does not find in hash table
}
else
{
*start = index + 1;
*end = i;
return 1;
}
}
}
return 1;
}
Time & space complexities O(n);
- siva.sai.2020 May 27, 2012correct solution
- siva.sai.2020 May 27, 2012your answer right. but second possibility i.e. thread solution is wrong
- siva.sai.2020 May 14, 2012nice
- siva.sai.2020 May 14, 2012nice
- siva.sai.2020 May 14, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012cool
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012Great answer
- siva.sai.2020 May 13, 2012error : converting from 'B' to non-scalar type 'A' requested
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012in the question, constructor code is
A(int ii , int jj) :i(ii),j(ii){}
j varaible also contains i value
nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 13, 2012nice
- siva.sai.2020 May 12, 2012nice
- siva.sai.2020 May 12, 2012When you deal with different objects
class one{
};
class two {
}
one = two ; is possible when you write your own overloaded = function
good answer
- siva.sai.2020 May 12, 2012This is right answer
- siva.sai.2020 May 12, 2012if machine is single processor, whole process will be blocked.
if machine is multi processor, whole process may not be blocked .
e.g. thread1 is executing on Processor 1 ( and thread blocked with I/O operation ), thread2 is executing on processor2 . thread1 & thread2 are executing independently so one thread may not block other thread .
My solution is not perfect. It does not work for all cases. in your example case it does not give correct solution.
As I mentioned earlier my sol does not work for below e.g 6
e.g 1) 1112222 dominator 2
e.g 2) 2222111 dominator 2
e.g 3) 1212122 dominator 2
e.g 4) 1231231 there is no dominator
e.g 5) 1231233 there is no dominator
e.g 6) 3321233 dominator is 3
***************************************
note:: my solution, could not find dominator for e.g 6) case
***************************************
int main()
{
int A[] = {1,2,3,4,5,6,7};
int i=1;
int start, end;
printf("\n please enter strt & end indexes \n");
scanf("%d %d", &start, &end );
if(!( (start >=0 && start <end) && (end < sizeof(A) ) ))
{
printf("\n entered incorrect indexes \n");
return 0;
}
while ( i< sizeof(A) )
{
A[i] += A[i-1] ;
}
if( start > 0 )
printf("\n sum from %d to %d is = %d \n", start, end, A[end]-A[start-1] );
else
printf("\n sum from %d to %d is = %d \n", start, end, A[end] );
return 0;
}
Yes, you are right. we need to loop one more time to print dominator all indexes.
- siva.sai.2020 May 06, 2012dominator presents in array atleast n/2 times. So its first index location should be on or before n/2 th location.
If we do not check this condition, the above algo will return 3 as dominator in I/P "112233".
9/16
- siva.sai.2020 May 05, 2012right answer is 9/10
- siva.sai.2020 May 05, 2012step1:: We can find dominator in O(n) time. & O(1) Space complexity
step2 :: array size 7
e.g 1) 1112222 dominator 2
e.g 2) 2222111 dominator 2
e.g 3) 1212122 dominator 2
e.g 4) 1231231 there is no dominator
e.g 5) 1231233 there is no dominator
e.g 6) 3321233 dominator is 3
***************************************
note:: my below solution, could not find dominator for e.g 6) case
***************************************
step3:: take a variable count, cout =1 , denom= A[0].
step4 :: for (i =1 ;i<n ; i++)
increase count by 1 when current element is equal to dom elemet
decrease count by 1 when current element is not equal to dom elemtn
step 5:: if count > 1 then there is denominator , else there is no denominator
// Code for this solution
dom = A[0]; // initially assume dominator is first element
domFirstIndex = 0; // dominator first index location
count = 1;
for( i=1; i< n; i ++ )
{
if( A[i] != dom )
{
count --;
if( count == 0 || count <0 )
{
dom = A[i] ;
count = 0 ;
domFirstIndex = i;
}
}
else
{
count ++;
}
}
if( count > 0 && (domFirstIndex <= n/2))
{
printf("\n dominator is %d", dom);
}
else
{
printf("\n there is no dominator \n");
}
Can someone explains question ?
- siva.sai.2020 May 05, 2012In hash table, store elements DList address.
once you know the elements addreses , you can rearrange them in O(1)
We can solve this problem by using Double linked list and hash table.
Step1: assume Cache size 5, so our cache table is 5.
Step2: asume chache contains 5 elements, so Double linked list will be
1<->2<->3<->4<->5
Note : 5 is used recently , 1 is leasr receently used
step3 : now we used 3 recently then, DList will be
1<->2<->4<->5<->3
Step 4: if we want to bring 6 into cache table, we have remove LRU element i.e. 1 .
2<->4<->5<->3<->6
Step5: we can use Hash table to rearrange elements in Dlist in O(1)
Time Complexity: O(n) here n is number elements brought to cache.
@rdo, I feel your answer correct
- siva.sai.2020 April 25, 2012@free bird, remember one thing with Hashing technique.
most of the problems we can solve in O(n) with Hashing , this only in best case situation( I/P size almost equal to Hashmap size, and input elements are distinct).
in worst case ( hash map size is much smaller than I/P size), hash does not help much , it gives O(n2).
in this problem, assume i/p size is 1000 elements and hash map size is 10 . then Hash map does not solve the problem in O(n).
// calling convention Sequence(input, 100, 0, temp, 0);
void Sequence(int input[ ], int n, int index, int temp[ ] , int TIndex )
{
if( n < 1 || tIndex < 0 )
{
printf("\n invalid input \n");
return ;
}
else if( n == index )
{
// print temp[] array elements;
}
for (; index < n; index++)
{
if( (Tindex == 0 ) || temp[Tindex -1 ] < input[index] )
{
Sequence(input, n, index + 1, temp, Tindex );
temp[ Tindex++] = input[ index ] ;
Sequence(input, n, index + 1 , temp, Tindex );
}
}
}
We can this problem in O(n) time complexity.
input :: (1,8) (15,16) (7,10) (6,11)
output:: (1,11) (15,16)
Step1: Take an array A[100] , initialize it to 0s
Step2: mark interval starting point as 1 , ending pint as 2 in Array
e.g:: after parsing (1,8)
A[1] = 1;
A[8] = 2;
step3: repeat step2 for all input intervals;
ste4: take two counts Scount=0 and Ecount=0
step5: parse array from 0 th index
Step6: increment Scount when it hits 1 value in Array.
if( A[i] == 1 && start == 0)
start = i; // unclashed interval staring point
Step7: increment Ecount when it hits 2 value in Array.
if( A[i] ==2 && Scount == Ecount )
end =i;
if both Scount and Ecount are equal , which means we got one unclashed interval set (start, end ).
step8: repeat 6to 7
T.C O(n)
Why administrator deleted this comment ?
- siva.sai.2020 April 22, 2012I think, sorting does not solve the problem.
A,B,C,D 4 players
A own 2 , B own 2 , c own 1 D own 1 matches
sorting gives ABCD answer but this answer may not be right.
B might have won to C
@Vikas, nice answer
- siva.sai.2020 April 22, 2012blogs.msdn.com/b/oldnewthing/archive/2005/07/29/444912.aspx
this URL answers your questions.
>>
Do the threads have their own stacks, or share the process stack(s), or both?
>>
I think, there is no process dedicated stack. in other words , we can say, process stack same as initially created thread stack.
RepJennyReimer, Dev Lead at Adobe
Badminton lover, coffee addict, guitarist, International Swiss style practitioner and TDC honorary member. Acting at the nexus of simplicity and ...
Repallisonepollard, Applications Developer at Accenture
I am Allison from Germantown. I work as a Staff manager at The LawnGuru company. But my interest in blogging ...
Reparlinenwalters, Software Analyst at ASAPInfosystemsPvtLtd
I Performed extensive web research to collect pertinent data and gather images related to the assigned articleIts act of writing ...
Repjunehudson, Associate at Advisory Board Company
I am passionate about fashion and love to explore black magic to take revenge.Being a fashion designer involves more ...
RepSoccer lover, coffee addict, guitarist, International Swiss style practitioner and TDC honorary member. Acting at the nexus of simplicity and ...
RepHi, I am Anne from Portsmouth, USA. I have been working as a freelance digital illustrator specialized in 3D character ...
- siva.sai.2020 February 14, 2013